@smwb/ui-mcp-solid 0.2.2 → 0.4.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 (120) hide show
  1. package/README.md +13 -1
  2. package/component-meta/base/animateHeight/animateHeight.json +4 -0
  3. package/component-meta/base/icon/icon.json +4 -0
  4. package/component-meta/base/ripple/ripple.json +4 -0
  5. package/component-meta/clickAwayListener/clickAwayListener.json +4 -0
  6. package/component-meta/dataDisplay/accordion/accordion.json +4 -0
  7. package/component-meta/dataDisplay/avatar/avatar.avatarGroup.json +4 -0
  8. package/component-meta/dataDisplay/avatar/avatar.json +4 -0
  9. package/component-meta/dataDisplay/badge/badge.json +4 -0
  10. package/component-meta/dataDisplay/card/card.json +4 -0
  11. package/component-meta/dataDisplay/carousel/carousel.json +5 -0
  12. package/component-meta/dataDisplay/chat/chat.json +4 -0
  13. package/component-meta/dataDisplay/chat/chatAttachmentImage.json +5 -0
  14. package/component-meta/dataDisplay/chat/chatAttachments.json +4 -0
  15. package/component-meta/dataDisplay/chat/chatComposer.json +4 -0
  16. package/component-meta/dataDisplay/chat/chatHeader.json +4 -0
  17. package/component-meta/dataDisplay/chat/chatIconButton.json +4 -0
  18. package/component-meta/dataDisplay/chat/chatLayout.chatLayoutChat.json +4 -0
  19. package/component-meta/dataDisplay/chat/chatLayout.json +4 -0
  20. package/component-meta/dataDisplay/chat/chatMessageAvatar.json +4 -0
  21. package/component-meta/dataDisplay/chat/chatMessageBubble.json +4 -0
  22. package/component-meta/dataDisplay/chat/chatMessageIncoming.json +4 -0
  23. package/component-meta/dataDisplay/chat/chatMessageItem.json +4 -0
  24. package/component-meta/dataDisplay/chat/chatMessageOutgoing.json +4 -0
  25. package/component-meta/dataDisplay/chat/chatMessageSkeleton.json +4 -0
  26. package/component-meta/dataDisplay/chat/chatMessageStatus.json +4 -0
  27. package/component-meta/dataDisplay/chat/chatMessageSystem.json +4 -0
  28. package/component-meta/dataDisplay/chat/chatMessages.json +4 -0
  29. package/component-meta/dataDisplay/chat/chatOverlayLayout.chatOverlayLayoutChat.json +4 -0
  30. package/component-meta/dataDisplay/chat/chatOverlayLayout.json +4 -0
  31. package/component-meta/dataDisplay/chat/chatShell.json +5 -0
  32. package/component-meta/dataDisplay/chip/chip.json +4 -0
  33. package/component-meta/dataDisplay/expansionPanel/expansionPanel.json +5 -0
  34. package/component-meta/dataDisplay/imagesList/imagesList.json +4 -0
  35. package/component-meta/dataDisplay/imagesList/imagesListItem/imagesListItem.json +5 -0
  36. package/component-meta/dataDisplay/imagesList/imagesListItem/imagesListItemModal.json +5 -0
  37. package/component-meta/dataDisplay/list/list.json +4 -0
  38. package/component-meta/dataDisplay/list/listItem.json +4 -0
  39. package/component-meta/dataDisplay/table/table.json +4 -0
  40. package/component-meta/dataDisplay/table/tableBody.json +4 -0
  41. package/component-meta/dataDisplay/table/tableCell.json +4 -0
  42. package/component-meta/dataDisplay/table/tableHead.json +4 -0
  43. package/component-meta/dataDisplay/table/tableHeadCell.json +4 -0
  44. package/component-meta/dataDisplay/table/tablePagination/tablePagination.baseTablePagination.json +4 -0
  45. package/component-meta/dataDisplay/table/tablePagination/tablePagination.json +4 -0
  46. package/component-meta/dataDisplay/table/tableRow.json +4 -0
  47. package/component-meta/dataDisplay/treeView/treeView.json +4 -0
  48. package/component-meta/dataDisplay/typography/typography.json +4 -0
  49. package/component-meta/feedBack/message/message.json +4 -0
  50. package/component-meta/feedBack/modal/modal.json +5 -0
  51. package/component-meta/feedBack/modal/modal.modalSlot.json +4 -0
  52. package/component-meta/feedBack/progressIndicator/progressIndicator.circularProgress.json +4 -0
  53. package/component-meta/feedBack/progressIndicator/progressIndicator.json +4 -0
  54. package/component-meta/feedBack/skeleton/skeleton.json +4 -0
  55. package/component-meta/feedBack/snackbar/snackbar.json +5 -0
  56. package/component-meta/feedBack/snackbar/snackbar.snackbarsProvider.json +4 -0
  57. package/component-meta/feedBack/tooltip/tooltip.json +5 -0
  58. package/component-meta/inputs/button/button.json +4 -0
  59. package/component-meta/inputs/buttonGroups/buttonGroup.json +4 -0
  60. package/component-meta/inputs/checkbox/checkbox.json +4 -0
  61. package/component-meta/inputs/datePicker/dataPickerDays.json +4 -0
  62. package/component-meta/inputs/datePicker/dataPickerHeader.json +4 -0
  63. package/component-meta/inputs/datePicker/dataPickerInput.json +4 -0
  64. package/component-meta/inputs/datePicker/datePicker.json +5 -0
  65. package/component-meta/inputs/datePicker/datePickerActionLabel.json +4 -0
  66. package/component-meta/inputs/datePicker/datePickerDay.json +4 -0
  67. package/component-meta/inputs/datePicker/datePickerIconButton.json +4 -0
  68. package/component-meta/inputs/datePicker/datePickerList.json +4 -0
  69. package/component-meta/inputs/dateTimePicker/dateTimePicker.json +5 -0
  70. package/component-meta/inputs/dateTimePicker/dateTimePickerInput.json +4 -0
  71. package/component-meta/inputs/fileDrop/countPreview.json +4 -0
  72. package/component-meta/inputs/fileDrop/fileDrop.json +4 -0
  73. package/component-meta/inputs/fileDrop/preview.json +4 -0
  74. package/component-meta/inputs/fileDrop/previewWrapper.json +4 -0
  75. package/component-meta/inputs/fileInput/fileInput.json +4 -0
  76. package/component-meta/inputs/floatingButton/floatingButton.json +4 -0
  77. package/component-meta/inputs/radioButton/radioButton.json +4 -0
  78. package/component-meta/inputs/rating/rating.json +4 -0
  79. package/component-meta/inputs/selectField/dropdownMenu.json +4 -0
  80. package/component-meta/inputs/selectField/selectField.json +5 -0
  81. package/component-meta/inputs/slider/slider.json +4 -0
  82. package/component-meta/inputs/textField/textField.json +4 -0
  83. package/component-meta/inputs/textField/textFieldAdornment.json +4 -0
  84. package/component-meta/inputs/textField/textFieldWrapper.json +4 -0
  85. package/component-meta/inputs/timePicker/timePicker.json +5 -0
  86. package/component-meta/inputs/timePicker/timePickerColumns.json +4 -0
  87. package/component-meta/inputs/timePicker/timePickerInput.json +4 -0
  88. package/component-meta/inputs/timePicker/timePickerList.json +4 -0
  89. package/component-meta/inputs/toggle/toggle.json +4 -0
  90. package/component-meta/layout/appLayout/appLayout.json +4 -0
  91. package/component-meta/layout/divider/divider.json +4 -0
  92. package/component-meta/layout/grid/grid.column.json +4 -0
  93. package/component-meta/layout/grid/grid.container.json +4 -0
  94. package/component-meta/layout/grid/grid.row.json +4 -0
  95. package/component-meta/layout/page/page.json +4 -0
  96. package/component-meta/layout/pageHeader/pageHeader.json +4 -0
  97. package/component-meta/layout/screenDivider/screenDivider.json +4 -0
  98. package/component-meta/layout/sheet/sheet.json +5 -0
  99. package/component-meta/layout/stack/stack.json +4 -0
  100. package/component-meta/navigation/appBar/appBar.json +4 -0
  101. package/component-meta/navigation/bottomBar/bottomBar.bottomBarMenuItem.json +4 -0
  102. package/component-meta/navigation/bottomBar/bottomBar.json +4 -0
  103. package/component-meta/navigation/breadcrumbs/breadcrumbs.json +4 -0
  104. package/component-meta/navigation/menu/menu.json +5 -0
  105. package/component-meta/navigation/menu/menuDivider.json +4 -0
  106. package/component-meta/navigation/menu/menuFloating.json +5 -0
  107. package/component-meta/navigation/menu/menuItem.json +4 -0
  108. package/component-meta/navigation/menu/menuItemIcon.json +4 -0
  109. package/component-meta/navigation/menu/menuItemText.json +4 -0
  110. package/component-meta/navigation/menu/menuList.json +4 -0
  111. package/component-meta/navigation/menu/menuSubmenu.json +4 -0
  112. package/component-meta/navigation/pagination/pagination.json +4 -0
  113. package/component-meta/navigation/sidebar/sidebar.json +4 -0
  114. package/component-meta/navigation/sidebar/sidebar.sidebarMenuItem.json +4 -0
  115. package/component-meta/navigation/stepper/stepper.json +4 -0
  116. package/component-meta/navigation/tabs/tab/tab.json +4 -0
  117. package/component-meta/navigation/tabs/tabs.json +4 -0
  118. package/componentMeta.mjs +4 -0
  119. package/package.json +2 -2
  120. package/server.mjs +3 -3
package/README.md CHANGED
@@ -11,7 +11,7 @@ guide to AI coding assistants (Cursor, Claude Desktop/Code, Copilot, …).
11
11
  | Tool | Purpose |
12
12
  | --- | --- |
13
13
  | `search_components` | Find components by name, id, description, or prop keywords |
14
- | `get_component_props` | Full metadata for one component: props (types, required, descriptions) + required LESS imports (`styles.base` / `styles.entries` / `styles.dependencies` / `styles.importExample`) |
14
+ | `get_component_props` | Full metadata for one component: props (types, required, descriptions), SSR classification (`ssr.safe` / `ssr.rendering` / `ssr.note`) + required LESS imports (`styles.base` / `styles.entries` / `styles.dependencies` / `styles.importExample`) |
15
15
  | `search_customization` | Global theming options and per-component customization approaches |
16
16
  | `get_customization` | What and how to customize a component or a global topic |
17
17
 
@@ -45,6 +45,18 @@ Communicates over **stdio** only (no HTTP port); startup log goes to stderr.
45
45
 
46
46
  Component ids follow the metadata path, e.g. `dataDisplay/chat/chat`.
47
47
 
48
+ ## SSR
49
+
50
+ Every component carries an `ssr` field (also surfaced in `search_components` results):
51
+
52
+ - `safe` — always `true`: nothing in `@smwb/ui-solid` touches a browser global at module load or
53
+ during render, so `renderToString` never throws.
54
+ - `rendering` — `"universal"` (emits meaningful static HTML on the server and hydrates) or
55
+ `"client"` (a pure overlay such as `Modal`/`Sheet` that renders nothing on the server and mounts
56
+ through a portal after hydration).
57
+ - `note` — optional hint, e.g. that a picker's input renders on the server while its popup is
58
+ client-only.
59
+
48
60
  ## How the catalog is built
49
61
 
50
62
  Component metadata is generated from the `@smwb/ui-solid` TypeScript prop interfaces
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "AnimateHeight",
3
3
  "description": "Animated height transition wrapper for expandable content.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "JSX.HTMLAttributes<HTMLDivElement>"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "Icon",
3
3
  "description": "Material Symbols icon wrapper with size, weight, fill, and semantic color tokens.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "JSX.HTMLAttributes<HTMLSpanElement>"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "Ripple",
3
3
  "description": "Material-style ripple touch feedback container.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "JSX.HTMLAttributes<HTMLSpanElement>"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "ClickAwayListener",
3
3
  "description": "Detects pointer events outside its child and invokes a callback.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "styles": {
5
9
  "base": [
6
10
  "@smwb/ui-styles/less/foundation.less",
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "Accordion",
3
3
  "description": "Expandable panel with a clickable header and collapsible body.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "styles": {
5
9
  "base": [
6
10
  "@smwb/ui-styles/less/foundation.less",
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "AvatarGroup",
3
3
  "description": "Cluster of overlapping avatars with optional surplus counter.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "JSX.HTMLAttributes<HTMLDivElement>"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "Avatar",
3
3
  "description": "User avatar displaying an image or initials fallback.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "JSX.HTMLAttributes<HTMLDivElement>"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "Badge",
3
3
  "description": "Small status or count indicator overlay.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "JSX.HTMLAttributes<HTMLSpanElement>"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "Card",
3
3
  "description": "Surface container with optional header, footer, and click handling.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "JSX.HTMLAttributes<HTMLDivElement>"
6
10
  ],
@@ -1,6 +1,11 @@
1
1
  {
2
2
  "name": "Carousel",
3
3
  "description": "Scrollable media carousel with navigation and autoplay.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal",
7
+ "note": "Renders inline on the server; the fullscreen lightbox is portaled on the client."
8
+ },
4
9
  "styles": {
5
10
  "base": [
6
11
  "@smwb/ui-styles/less/foundation.less",
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "Chat",
3
3
  "description": "Chat dialog with layout modes, infinite scroll, attachments, and delivery statuses.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "ParentProps",
6
10
  "Omit<ChatMessageRenderContext, \"showAvatars\" | \"showAttachments\">"
@@ -1,6 +1,11 @@
1
1
  {
2
2
  "name": "ChatAttachmentImage",
3
3
  "description": "Clickable chat image attachment with fullscreen preview.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal",
7
+ "note": "Renders the thumbnail on the server; the fullscreen preview is portaled on the client."
8
+ },
4
9
  "styles": {
5
10
  "base": [
6
11
  "@smwb/ui-styles/less/foundation.less",
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "ChatAttachments",
3
3
  "description": "List of file or image attachments inside a message bubble.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "styles": {
5
9
  "base": [
6
10
  "@smwb/ui-styles/less/foundation.less",
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "ChatComposer",
3
3
  "description": "Chat Composer component from the dataDisplay module.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "styles": {
5
9
  "base": [
6
10
  "@smwb/ui-styles/less/foundation.less",
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "ChatHeader",
3
3
  "description": "Chat title area with layout mode controls and close action.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "styles": {
5
9
  "base": [
6
10
  "@smwb/ui-styles/less/foundation.less",
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "ChatIconButton",
3
3
  "description": "Chat Icon Button component from the dataDisplay module.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "JSX.ButtonHTMLAttributes<HTMLButtonElement>"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "ChatLayoutChat",
3
3
  "description": "Chat Layout Chat component from the dataDisplay module.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "Omit<\n ChatProps,\n | \"class\"\n | \"embedded\"\n | \"floatingTrigger\"\n | \"anchor\"\n | \"allowedLayouts\"\n | \"layout\"\n | \"defaultLayout\"\n | \"open\"\n | \"defaultOpen\"\n | \"onOpenChange\"\n | \"onLayoutChange\"\n>"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "ChatLayout",
3
3
  "description": "Page layout with a full-height docked chat panel and collapse-to-floating behavior.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "ParentProps",
6
10
  "JSX.HTMLAttributes<HTMLDivElement>"
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "ChatMessageAvatar",
3
3
  "description": "Optional author avatar shown beside a chat message.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "styles": {
5
9
  "base": [
6
10
  "@smwb/ui-styles/less/foundation.less",
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "ChatMessageBubble",
3
3
  "description": "Shared bubble layout for incoming and outgoing messages.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "styles": {
5
9
  "base": [
6
10
  "@smwb/ui-styles/less/foundation.less",
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "ChatMessageIncoming",
3
3
  "description": "Incoming chat message bubble aligned to the start.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "ChatMessageRenderContext"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "ChatMessageItem",
3
3
  "description": "Router that renders a chat message by variant or custom renderer.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "ChatMessageRenderContext"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "ChatMessageOutgoing",
3
3
  "description": "Outgoing chat message bubble aligned to the end.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "ChatMessageRenderContext"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "ChatMessageSkeleton",
3
3
  "description": "Loading placeholder shaped like a chat message.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "styles": {
5
9
  "base": [
6
10
  "@smwb/ui-styles/less/foundation.less",
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "ChatMessageStatus",
3
3
  "description": "Delivery status icon or custom status renderer for outgoing messages.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "styles": {
5
9
  "base": [
6
10
  "@smwb/ui-styles/less/foundation.less",
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "ChatMessageSystem",
3
3
  "description": "Centered system notice message.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "styles": {
5
9
  "base": [
6
10
  "@smwb/ui-styles/less/foundation.less",
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "ChatMessages",
3
3
  "description": "Scrollable message list with infinite scroll and loading skeletons.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "ChatMessageRenderContext"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "ChatOverlayLayoutChat",
3
3
  "description": "Chat Overlay Layout Chat component from the dataDisplay module.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "Omit<\n ChatProps,\n | \"class\"\n | \"overlayContext\"\n | \"embedded\"\n | \"floatingTrigger\"\n | \"anchor\"\n | \"allowedLayouts\"\n | \"layout\"\n | \"defaultLayout\"\n | \"onLayoutChange\"\n | \"open\"\n | \"defaultOpen\"\n | \"onOpenChange\"\n>"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "ChatOverlayLayout",
3
3
  "description": "Chat Overlay Layout component from the dataDisplay module.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "ParentProps",
6
10
  "JSX.HTMLAttributes<HTMLDivElement>"
@@ -1,6 +1,11 @@
1
1
  {
2
2
  "name": "ChatShell",
3
3
  "description": "Positioned chat container shell with header, body, and footer slots.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal",
7
+ "note": "Renders inline on the server; the fullscreen layout is portaled on the client."
8
+ },
4
9
  "extends": [
5
10
  "ParentProps"
6
11
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "Chip",
3
3
  "description": "Compact label or filter tag, optionally dismissible or clickable.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "JSX.HTMLAttributes<HTMLSpanElement | HTMLAnchorElement>"
6
10
  ],
@@ -1,6 +1,11 @@
1
1
  {
2
2
  "name": "ExpansionPanel",
3
3
  "description": "Panel with customizable controls and responsive fullscreen mode.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal",
7
+ "note": "Renders inline on the server; fullscreen mode is portaled on the client."
8
+ },
4
9
  "styles": {
5
10
  "base": [
6
11
  "@smwb/ui-styles/less/foundation.less",
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "ImagesList",
3
3
  "description": "Responsive masonry-style image grid.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "styles": {
5
9
  "base": [
6
10
  "@smwb/ui-styles/less/foundation.less",
@@ -1,6 +1,11 @@
1
1
  {
2
2
  "name": "ImagesListItem",
3
3
  "description": "Single tile inside an ImagesList grid.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal",
7
+ "note": "Renders the tile on the server; the fullscreen modal is portaled on the client."
8
+ },
4
9
  "styles": {
5
10
  "base": [
6
11
  "@smwb/ui-styles/less/foundation.less",
@@ -1,6 +1,11 @@
1
1
  {
2
2
  "name": "ImagesListItemModal",
3
3
  "description": "Fullscreen modal viewer for an ImagesList item.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "client",
7
+ "note": "Fullscreen viewer portaled on the client; nothing is emitted during SSR."
8
+ },
4
9
  "styles": {
5
10
  "base": [
6
11
  "@smwb/ui-styles/less/foundation.less",
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "List",
3
3
  "description": "Vertical list container with optional subheader.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "JSX.HTMLAttributes<HTMLUListElement>"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "ListItem",
3
3
  "description": "Single row inside a List.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "styles": {
5
9
  "base": [
6
10
  "@smwb/ui-styles/less/foundation.less",
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "Table",
3
3
  "description": "Table wrapper with optional pagination settings.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "JSX.HTMLAttributes<HTMLDivElement>"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "TableBody",
3
3
  "description": "Table body section wrapper.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "JSX.HTMLAttributes<HTMLTableSectionElement>"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "TableCell",
3
3
  "description": "Standard table data cell.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "JSX.TdHTMLAttributes<HTMLTableCellElement>"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "TableHead",
3
3
  "description": "Table head section wrapper.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "JSX.HTMLAttributes<HTMLTableSectionElement>"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "TableHeadCell",
3
3
  "description": "Table header cell with optional sorting affordance.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "JSX.ThHTMLAttributes<HTMLTableCellElement>"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "BaseTablePagination",
3
3
  "description": "Base Table Pagination component from the dataDisplay module.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "styles": {
5
9
  "base": [
6
10
  "@smwb/ui-styles/less/foundation.less",
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "TablePagination",
3
3
  "description": "Pagination controls for tabular data.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "WithTotalCount | WithHasNextPage"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "TableRow",
3
3
  "description": "Table row wrapper.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "JSX.HTMLAttributes<HTMLTableRowElement>"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "TreeView",
3
3
  "description": "Hierarchical tree with expand, collapse, and selection.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "Omit<JSX.HTMLAttributes<HTMLDivElement>, \"onSelect\">"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "Typography",
3
3
  "description": "Text renderer mapped to semantic HTML tags and design tokens.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "JSX.HTMLAttributes<HTMLElement>"
6
10
  ],
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "Message",
3
3
  "description": "Inline feedback message with severity styling and optional dismiss action.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "extends": [
5
9
  "JSX.HTMLAttributes<HTMLDivElement>"
6
10
  ],
@@ -1,6 +1,11 @@
1
1
  {
2
2
  "name": "Modal",
3
3
  "description": "Dialog overlay with focus trap and composable header, content, and footer.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "client",
7
+ "note": "Renders nothing on the server; the dialog is portaled into <body> on the client after hydration."
8
+ },
4
9
  "styles": {
5
10
  "base": [
6
11
  "@smwb/ui-styles/less/foundation.less",
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "ModalSlot",
3
3
  "description": "Modal Slot component from the feedBack module.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "styles": {
5
9
  "base": [
6
10
  "@smwb/ui-styles/less/foundation.less",
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "CircularProgress",
3
3
  "description": "Circular indeterminate or determinate progress indicator.",
4
+ "ssr": {
5
+ "safe": true,
6
+ "rendering": "universal"
7
+ },
4
8
  "styles": {
5
9
  "base": [
6
10
  "@smwb/ui-styles/less/foundation.less",