@commercetools/nimbus-mcp 3.2.0 → 3.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 (189) hide show
  1. package/README.md +9 -1
  2. package/data/docs/route-manifest.json +806 -41
  3. package/data/docs/routes/components-buttons-button.json +25 -2
  4. package/data/docs/routes/components-chat-chat-message-list.json +448 -0
  5. package/data/docs/routes/components-chat-chat-message.json +580 -0
  6. package/data/docs/routes/components-content-markdown.json +548 -0
  7. package/data/docs/routes/components-feedback-activity-indicator.json +396 -0
  8. package/data/docs/routes/components-feedback-tooltip.json +23 -1
  9. package/data/docs/routes/components-inputs-drop-zone.json +562 -0
  10. package/data/docs/routes/components-inputs-file-trigger.json +421 -0
  11. package/data/docs/routes/components-layout-splitter.json +3 -3
  12. package/data/docs/routes/components-media-avatar.json +16 -5
  13. package/data/docs/routes/components-navigation-menu.json +1 -1
  14. package/data/docs/routes/components-navigation-tabnav.json +80 -14
  15. package/data/docs/routes/components-navigation-tabs.json +44 -11
  16. package/data/docs/routes/components-navigation-tree.json +445 -0
  17. package/data/docs/routes/home-getting-started-mcp-server-overview.json +2 -2
  18. package/data/docs/routes/home-getting-started-mcp-server-setup.json +2 -2
  19. package/data/docs/routes/patterns-buttons-floating-action-button.json +392 -0
  20. package/data/docs/routes/patterns-buttons.json +58 -0
  21. package/data/docs/search-index.json +1 -1
  22. package/data/docs/types/AccordionContent.json +24 -24
  23. package/data/docs/types/AccordionHeader.json +88 -88
  24. package/data/docs/types/AccordionItem.json +20 -20
  25. package/data/docs/types/AccordionRoot.json +14 -14
  26. package/data/docs/types/ActivityIndicator.json +202 -0
  27. package/data/docs/types/AlertDescription.json +8 -8
  28. package/data/docs/types/AlertDismissButton.json +98 -81
  29. package/data/docs/types/AlertTitle.json +8 -8
  30. package/data/docs/types/Avatar.json +19 -2
  31. package/data/docs/types/Badge.json +2 -2
  32. package/data/docs/types/Body.json +6 -6
  33. package/data/docs/types/Box.json +6 -6
  34. package/data/docs/types/Button.json +106 -89
  35. package/data/docs/types/Calendar.json +56 -56
  36. package/data/docs/types/Caption.json +6 -6
  37. package/data/docs/types/CardRoot.json +2 -2
  38. package/data/docs/types/Cell.json +6 -6
  39. package/data/docs/types/ChatMessage.json +12 -0
  40. package/data/docs/types/ChatMessageActions.json +42 -0
  41. package/data/docs/types/ChatMessageAvatar.json +140 -0
  42. package/data/docs/types/ChatMessageBody.json +42 -0
  43. package/data/docs/types/ChatMessageList.json +12 -0
  44. package/data/docs/types/ChatMessageListItem.json +42 -0
  45. package/data/docs/types/ChatMessageListRoot.json +78 -0
  46. package/data/docs/types/ChatMessageMeta.json +42 -0
  47. package/data/docs/types/ChatMessageRoot.json +119 -0
  48. package/data/docs/types/ChatMessageTyping.json +42 -0
  49. package/data/docs/types/Checkbox.json +86 -86
  50. package/data/docs/types/Code.json +11 -11
  51. package/data/docs/types/Column.json +6 -6
  52. package/data/docs/types/ColumnGroup.json +6 -6
  53. package/data/docs/types/ColumnHeader.json +6 -6
  54. package/data/docs/types/ComboBoxListBox.json +70 -70
  55. package/data/docs/types/ComboBoxOption.json +64 -64
  56. package/data/docs/types/ComboBoxPopover.json +91 -70
  57. package/data/docs/types/ComboBoxRoot.json +8 -8
  58. package/data/docs/types/ComboBoxSection.json +24 -24
  59. package/data/docs/types/ComboBoxTrigger.json +6 -6
  60. package/data/docs/types/DataTable.json +2 -2
  61. package/data/docs/types/DataTableBody.json +20 -20
  62. package/data/docs/types/DataTableHeader.json +25 -25
  63. package/data/docs/types/DataTableRoot.json +2 -2
  64. package/data/docs/types/DataTableTable.json +6 -6
  65. package/data/docs/types/DateInput.json +73 -73
  66. package/data/docs/types/DatePicker.json +58 -58
  67. package/data/docs/types/DateRangePicker.json +86 -86
  68. package/data/docs/types/DateRangePickerField.json +86 -86
  69. package/data/docs/types/DefaultPageRoot.json +2 -2
  70. package/data/docs/types/DialogCloseTrigger.json +96 -79
  71. package/data/docs/types/DraggableListField.json +88 -60
  72. package/data/docs/types/DraggableListItem.json +52 -52
  73. package/data/docs/types/DraggableListRoot.json +88 -60
  74. package/data/docs/types/DrawerCloseTrigger.json +96 -79
  75. package/data/docs/types/DropZone.json +161 -0
  76. package/data/docs/types/FieldErrors.json +2 -2
  77. package/data/docs/types/FileTrigger.json +130 -0
  78. package/data/docs/types/Flex.json +22 -22
  79. package/data/docs/types/FloatingActionButton.json +1036 -0
  80. package/data/docs/types/Footer.json +6 -6
  81. package/data/docs/types/FormActionBar.json +1 -1
  82. package/data/docs/types/FormFieldRoot.json +2 -2
  83. package/data/docs/types/Grid.json +24 -24
  84. package/data/docs/types/Group.json +12 -12
  85. package/data/docs/types/Header.json +6 -6
  86. package/data/docs/types/Heading.json +8 -8
  87. package/data/docs/types/Icon.json +4 -4
  88. package/data/docs/types/IconButton.json +106 -89
  89. package/data/docs/types/IconToggleButton.json +71 -71
  90. package/data/docs/types/Image.json +43 -43
  91. package/data/docs/types/Indicator.json +6 -6
  92. package/data/docs/types/InlineSvg.json +2 -2
  93. package/data/docs/types/Item.json +6 -6
  94. package/data/docs/types/Kbd.json +8 -8
  95. package/data/docs/types/Link.json +14 -14
  96. package/data/docs/types/ListIndicator.json +6 -6
  97. package/data/docs/types/ListItem.json +6 -6
  98. package/data/docs/types/ListRoot.json +11 -11
  99. package/data/docs/types/LoadingSpinner.json +2 -2
  100. package/data/docs/types/MakeElementFocusable.json +18 -18
  101. package/data/docs/types/Markdown.json +183 -0
  102. package/data/docs/types/MenuItem.json +62 -62
  103. package/data/docs/types/MenuRoot.json +55 -55
  104. package/data/docs/types/MenuSection.json +30 -30
  105. package/data/docs/types/MenuSubmenuTrigger.json +4 -4
  106. package/data/docs/types/MenuTrigger.json +88 -88
  107. package/data/docs/types/MultilineTextInput.json +104 -104
  108. package/data/docs/types/MultilineTextInputField.json +102 -102
  109. package/data/docs/types/NumberInput.json +86 -86
  110. package/data/docs/types/NumberInputField.json +82 -82
  111. package/data/docs/types/PageContentColumn.json +6 -6
  112. package/data/docs/types/PageContentRoot.json +6 -6
  113. package/data/docs/types/PasswordInput.json +100 -100
  114. package/data/docs/types/PasswordInputField.json +100 -100
  115. package/data/docs/types/ProgressBar.json +13 -13
  116. package/data/docs/types/RadioInputOption.json +56 -56
  117. package/data/docs/types/RadioInputRoot.json +48 -48
  118. package/data/docs/types/RangeCalendar.json +58 -58
  119. package/data/docs/types/Region.json +6 -6
  120. package/data/docs/types/RegionTarget.json +6 -6
  121. package/data/docs/types/RichTextInput.json +2 -2
  122. package/data/docs/types/Root.json +11 -11
  123. package/data/docs/types/Row.json +6 -6
  124. package/data/docs/types/ScrollArea.json +2 -2
  125. package/data/docs/types/SearchInput.json +106 -106
  126. package/data/docs/types/SearchInputField.json +102 -102
  127. package/data/docs/types/SelectOption.json +54 -54
  128. package/data/docs/types/SelectOptionGroup.json +18 -18
  129. package/data/docs/types/SelectOptions.json +64 -64
  130. package/data/docs/types/SelectRoot.json +92 -92
  131. package/data/docs/types/Separator.json +4 -4
  132. package/data/docs/types/SimpleGrid.json +28 -28
  133. package/data/docs/types/SlidingIndicatorGeometry.json +9 -0
  134. package/data/docs/types/SlidingIndicatorRects.json +9 -0
  135. package/data/docs/types/SplitButton.json +16 -20
  136. package/data/docs/types/Stack.json +2 -2
  137. package/data/docs/types/StepsRoot.json +2 -2
  138. package/data/docs/types/Switch.json +34 -34
  139. package/data/docs/types/TabNavItem.json +5 -5
  140. package/data/docs/types/TabNavRoot.json +5 -5
  141. package/data/docs/types/TableBody.json +6 -6
  142. package/data/docs/types/TableCaption.json +6 -6
  143. package/data/docs/types/TableCell.json +6 -6
  144. package/data/docs/types/TableColumn.json +6 -6
  145. package/data/docs/types/TableColumnGroup.json +6 -6
  146. package/data/docs/types/TableColumnHeader.json +6 -6
  147. package/data/docs/types/TableFooter.json +6 -6
  148. package/data/docs/types/TableHeader.json +6 -6
  149. package/data/docs/types/TableRoot.json +19 -19
  150. package/data/docs/types/TableRow.json +6 -6
  151. package/data/docs/types/TableScrollArea.json +6 -6
  152. package/data/docs/types/TabsList.json +2 -2
  153. package/data/docs/types/TabsPanel.json +2 -2
  154. package/data/docs/types/TabsPanels.json +2 -2
  155. package/data/docs/types/TabsRoot.json +3 -3
  156. package/data/docs/types/TabsTab.json +2 -2
  157. package/data/docs/types/TagGroupRoot.json +24 -24
  158. package/data/docs/types/TagGroupTag.json +56 -56
  159. package/data/docs/types/TagGroupTagList.json +14 -14
  160. package/data/docs/types/Text.json +8 -8
  161. package/data/docs/types/TextInput.json +102 -102
  162. package/data/docs/types/TextInputField.json +100 -100
  163. package/data/docs/types/TimeInput.json +68 -68
  164. package/data/docs/types/ToggleButton.json +73 -73
  165. package/data/docs/types/ToggleButtonGroupButton.json +30 -30
  166. package/data/docs/types/ToggleButtonGroupRoot.json +20 -20
  167. package/data/docs/types/Toolbar.json +9 -9
  168. package/data/docs/types/TooltipContent.json +28 -28
  169. package/data/docs/types/TooltipRoot.json +16 -16
  170. package/data/docs/types/Tree.json +12 -0
  171. package/data/docs/types/TreeIndicator.json +828 -0
  172. package/data/docs/types/TreeItem.json +559 -0
  173. package/data/docs/types/TreeItemContent.json +27 -0
  174. package/data/docs/types/TreeRoot.json +636 -0
  175. package/data/docs/types/TreeSubTree.json +40 -0
  176. package/data/docs/types/VisuallyHidden.json +6 -6
  177. package/data/docs/types/createItemsFromCsvDrop.json +4 -4
  178. package/data/docs/types/createItemsFromDirectoryDrop.json +4 -4
  179. package/data/docs/types/createItemsFromFileDrop.json +4 -4
  180. package/data/docs/types/createItemsFromImageDrop.json +4 -4
  181. package/data/docs/types/createItemsFromJsonDrop.json +4 -4
  182. package/data/docs/types/manifest.json +25 -0
  183. package/data/docs/types/useRegion.json +2 -2
  184. package/data/docs/types/useSlidingIndicator.json +145 -0
  185. package/data/docs/types/useTree.json +267 -0
  186. package/data/tokens.json +21 -0
  187. package/data/uikit-tokens.json +894 -0
  188. package/dist/index.js +3298 -109
  189. package/package.json +8 -6
@@ -0,0 +1,445 @@
1
+ {
2
+ "meta": {
3
+ "id": "Components-Tree",
4
+ "title": "Tree",
5
+ "exportName": "Tree",
6
+ "description": "A hierarchical list for navigating and managing nested data such as file trees, category hierarchies, and nested navigation structures.",
7
+ "lifecycleState": "Beta",
8
+ "order": 999,
9
+ "repoPath": "packages/nimbus/src/components/tree/tree.mdx",
10
+ "menu": [
11
+ "Components",
12
+ "Navigation",
13
+ "Tree"
14
+ ],
15
+ "route": "components/navigation/tree",
16
+ "tags": [
17
+ "component",
18
+ "tree",
19
+ "treegrid",
20
+ "hierarchy",
21
+ "navigation",
22
+ "nested"
23
+ ],
24
+ "toc": [
25
+ {
26
+ "value": "Overview",
27
+ "href": "#overview",
28
+ "depth": 2,
29
+ "numbering": [
30
+ 1,
31
+ 1
32
+ ],
33
+ "parent": "root"
34
+ },
35
+ {
36
+ "value": "Key features",
37
+ "href": "#key-features",
38
+ "depth": 3,
39
+ "numbering": [
40
+ 1,
41
+ 1,
42
+ 1
43
+ ],
44
+ "parent": "root"
45
+ },
46
+ {
47
+ "value": "Resources",
48
+ "href": "#resources",
49
+ "depth": 3,
50
+ "numbering": [
51
+ 1,
52
+ 1,
53
+ 2
54
+ ],
55
+ "parent": "root"
56
+ },
57
+ {
58
+ "value": "Variables",
59
+ "href": "#variables",
60
+ "depth": 2,
61
+ "numbering": [
62
+ 1,
63
+ 2
64
+ ],
65
+ "parent": "root"
66
+ },
67
+ {
68
+ "value": "Basic",
69
+ "href": "#basic",
70
+ "depth": 3,
71
+ "numbering": [
72
+ 1,
73
+ 2,
74
+ 1
75
+ ],
76
+ "parent": "root"
77
+ },
78
+ {
79
+ "value": "Selection",
80
+ "href": "#selection",
81
+ "depth": 3,
82
+ "numbering": [
83
+ 1,
84
+ 2,
85
+ 2
86
+ ],
87
+ "parent": "root"
88
+ },
89
+ {
90
+ "value": "Size",
91
+ "href": "#size",
92
+ "depth": 3,
93
+ "numbering": [
94
+ 1,
95
+ 2,
96
+ 3
97
+ ],
98
+ "parent": "root"
99
+ }
100
+ ],
101
+ "layout": "app-frame",
102
+ "tabs": [
103
+ {
104
+ "key": "overview",
105
+ "title": "Overview",
106
+ "order": 0
107
+ },
108
+ {
109
+ "key": "guidelines",
110
+ "title": "Guidelines",
111
+ "order": 2
112
+ },
113
+ {
114
+ "key": "dev",
115
+ "title": "Implementation",
116
+ "order": 3
117
+ },
118
+ {
119
+ "key": "a11y",
120
+ "title": "Accessibility",
121
+ "order": 4
122
+ }
123
+ ]
124
+ },
125
+ "mdx": "\n## Overview\n\nTree presents hierarchical data as an expandable, keyboard-navigable list. It is\nbuilt on React Aria's accessible `treegrid` pattern, so arrow-key navigation,\ntype-ahead, expand/collapse, single and multiple selection, and opt-in\ndrag-and-drop all work out of the box.\n\nCompose it from four parts: `Tree.Root`, `Tree.Item`, `Tree.ItemContent`, and\n`Tree.Indicator`.\n\n> [!NOTE]\\\n> Tree is in **beta**. The API is stable and ready to use. There are no Figma\n> specs yet — its visual styling is derived from existing list and accordion\n> tokens, so spacing and visual details may still be refined in design review.\n\n### Key features\n\n- **Accessible by default:** ARIA `treegrid` semantics (`aria-level`,\n `aria-expanded`, `aria-selected`) with WCAG 2.1 AA keyboard and screen-reader\n support provided by React Aria.\n- **Static or dynamic data:** nest `Tree.Item`s by hand, or render from an\n `items` array with a recursive render function.\n- **Selection:** `single` or `multiple` — multiple-selection mode renders a\n selection checkbox per row automatically.\n- **Expand / collapse:** a chevron indicator that appears only for items with\n children and rotates on expand.\n- **Opt-in drag-and-drop:** reorder, re-parent, and move items by pointer or\n keyboard.\n- **Two sizes:** `sm` and `md` (default), scaling row height, font size, chevron\n size, and indentation.\n\n### Resources\n\nDeep dive into the underlying accessibility pattern.\n\n[React Aria Tree](https://react-spectrum.adobe.com/react-aria/Tree.html)\n[ARIA treegrid Pattern](https://www.w3.org/WAI/ARIA/apg/patterns/treegrid/)\n\n## Variables\n\nGet familiar with the features.\n\n### Basic\n\nA tree of nested `Tree.Item` elements. `defaultExpandedKeys` controls which\nbranches start open.\n\n```jsx live\nconst App = () => (\n <Tree.Root aria-label=\"Files\" defaultExpandedKeys={[\"documents\", \"project\"]}>\n <Tree.Item id=\"documents\" textValue=\"Documents\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Documents\n </Tree.ItemContent>\n <Tree.Item id=\"project\" textValue=\"Project\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Project\n </Tree.ItemContent>\n <Tree.Item id=\"report\" textValue=\"Weekly Report\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Weekly Report\n </Tree.ItemContent>\n </Tree.Item>\n </Tree.Item>\n </Tree.Item>\n <Tree.Item id=\"photos\" textValue=\"Photos\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Photos\n </Tree.ItemContent>\n </Tree.Item>\n </Tree.Root>\n);\n```\n\n### Selection\n\nSet `selectionMode` to `single` or `multiple`. In multiple-selection mode,\n`Tree.ItemContent` renders a selection checkbox per row automatically.\n\n```jsx live\nconst App = () => (\n <Tree.Root\n aria-label=\"Files\"\n selectionMode=\"multiple\"\n defaultExpandedKeys={[\"documents\"]}\n >\n <Tree.Item id=\"documents\" textValue=\"Documents\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Documents\n </Tree.ItemContent>\n <Tree.Item id=\"report\" textValue=\"Weekly Report\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Weekly Report\n </Tree.ItemContent>\n </Tree.Item>\n <Tree.Item id=\"budget\" textValue=\"Budget\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Budget\n </Tree.ItemContent>\n </Tree.Item>\n </Tree.Item>\n </Tree.Root>\n);\n```\n\n### Size\n\n`Tree.Root` accepts a `size` prop (`sm` or `md`, default `md`) that scales row\nheight, font size, chevron size, and indentation step.\n\n```jsx live\nconst App = () => (\n <Stack direction=\"row\" gap=\"800\" alignItems=\"flex-start\">\n {[\"sm\", \"md\"].map((size) => (\n <Stack key={size} gap=\"200\">\n <Text fontWeight=\"700\">{size}</Text>\n <Tree.Root\n aria-label={`Files ${size}`}\n size={size}\n defaultExpandedKeys={[\"documents\"]}\n >\n <Tree.Item id=\"documents\" textValue=\"Documents\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Documents\n </Tree.ItemContent>\n <Tree.Item id=\"report\" textValue=\"Weekly Report\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Weekly Report\n </Tree.ItemContent>\n </Tree.Item>\n </Tree.Item>\n </Tree.Root>\n </Stack>\n ))}\n </Stack>\n);\n```\n",
126
+ "views": {
127
+ "overview": {
128
+ "mdx": "\n## Overview\n\nTree presents hierarchical data as an expandable, keyboard-navigable list. It is\nbuilt on React Aria's accessible `treegrid` pattern, so arrow-key navigation,\ntype-ahead, expand/collapse, single and multiple selection, and opt-in\ndrag-and-drop all work out of the box.\n\nCompose it from four parts: `Tree.Root`, `Tree.Item`, `Tree.ItemContent`, and\n`Tree.Indicator`.\n\n> [!NOTE]\\\n> Tree is in **beta**. The API is stable and ready to use. There are no Figma\n> specs yet — its visual styling is derived from existing list and accordion\n> tokens, so spacing and visual details may still be refined in design review.\n\n### Key features\n\n- **Accessible by default:** ARIA `treegrid` semantics (`aria-level`,\n `aria-expanded`, `aria-selected`) with WCAG 2.1 AA keyboard and screen-reader\n support provided by React Aria.\n- **Static or dynamic data:** nest `Tree.Item`s by hand, or render from an\n `items` array with a recursive render function.\n- **Selection:** `single` or `multiple` — multiple-selection mode renders a\n selection checkbox per row automatically.\n- **Expand / collapse:** a chevron indicator that appears only for items with\n children and rotates on expand.\n- **Opt-in drag-and-drop:** reorder, re-parent, and move items by pointer or\n keyboard.\n- **Two sizes:** `sm` and `md` (default), scaling row height, font size, chevron\n size, and indentation.\n\n### Resources\n\nDeep dive into the underlying accessibility pattern.\n\n[React Aria Tree](https://react-spectrum.adobe.com/react-aria/Tree.html)\n[ARIA treegrid Pattern](https://www.w3.org/WAI/ARIA/apg/patterns/treegrid/)\n\n## Variables\n\nGet familiar with the features.\n\n### Basic\n\nA tree of nested `Tree.Item` elements. `defaultExpandedKeys` controls which\nbranches start open.\n\n```jsx live\nconst App = () => (\n <Tree.Root aria-label=\"Files\" defaultExpandedKeys={[\"documents\", \"project\"]}>\n <Tree.Item id=\"documents\" textValue=\"Documents\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Documents\n </Tree.ItemContent>\n <Tree.Item id=\"project\" textValue=\"Project\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Project\n </Tree.ItemContent>\n <Tree.Item id=\"report\" textValue=\"Weekly Report\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Weekly Report\n </Tree.ItemContent>\n </Tree.Item>\n </Tree.Item>\n </Tree.Item>\n <Tree.Item id=\"photos\" textValue=\"Photos\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Photos\n </Tree.ItemContent>\n </Tree.Item>\n </Tree.Root>\n);\n```\n\n### Selection\n\nSet `selectionMode` to `single` or `multiple`. In multiple-selection mode,\n`Tree.ItemContent` renders a selection checkbox per row automatically.\n\n```jsx live\nconst App = () => (\n <Tree.Root\n aria-label=\"Files\"\n selectionMode=\"multiple\"\n defaultExpandedKeys={[\"documents\"]}\n >\n <Tree.Item id=\"documents\" textValue=\"Documents\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Documents\n </Tree.ItemContent>\n <Tree.Item id=\"report\" textValue=\"Weekly Report\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Weekly Report\n </Tree.ItemContent>\n </Tree.Item>\n <Tree.Item id=\"budget\" textValue=\"Budget\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Budget\n </Tree.ItemContent>\n </Tree.Item>\n </Tree.Item>\n </Tree.Root>\n);\n```\n\n### Size\n\n`Tree.Root` accepts a `size` prop (`sm` or `md`, default `md`) that scales row\nheight, font size, chevron size, and indentation step.\n\n```jsx live\nconst App = () => (\n <Stack direction=\"row\" gap=\"800\" alignItems=\"flex-start\">\n {[\"sm\", \"md\"].map((size) => (\n <Stack key={size} gap=\"200\">\n <Text fontWeight=\"700\">{size}</Text>\n <Tree.Root\n aria-label={`Files ${size}`}\n size={size}\n defaultExpandedKeys={[\"documents\"]}\n >\n <Tree.Item id=\"documents\" textValue=\"Documents\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Documents\n </Tree.ItemContent>\n <Tree.Item id=\"report\" textValue=\"Weekly Report\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Weekly Report\n </Tree.ItemContent>\n </Tree.Item>\n </Tree.Item>\n </Tree.Root>\n </Stack>\n ))}\n </Stack>\n);\n```\n",
129
+ "toc": [
130
+ {
131
+ "value": "Overview",
132
+ "href": "#overview",
133
+ "depth": 2,
134
+ "numbering": [
135
+ 1,
136
+ 1
137
+ ],
138
+ "parent": "root"
139
+ },
140
+ {
141
+ "value": "Key features",
142
+ "href": "#key-features",
143
+ "depth": 3,
144
+ "numbering": [
145
+ 1,
146
+ 1,
147
+ 1
148
+ ],
149
+ "parent": "root"
150
+ },
151
+ {
152
+ "value": "Resources",
153
+ "href": "#resources",
154
+ "depth": 3,
155
+ "numbering": [
156
+ 1,
157
+ 1,
158
+ 2
159
+ ],
160
+ "parent": "root"
161
+ },
162
+ {
163
+ "value": "Variables",
164
+ "href": "#variables",
165
+ "depth": 2,
166
+ "numbering": [
167
+ 1,
168
+ 2
169
+ ],
170
+ "parent": "root"
171
+ },
172
+ {
173
+ "value": "Basic",
174
+ "href": "#basic",
175
+ "depth": 3,
176
+ "numbering": [
177
+ 1,
178
+ 2,
179
+ 1
180
+ ],
181
+ "parent": "root"
182
+ },
183
+ {
184
+ "value": "Selection",
185
+ "href": "#selection",
186
+ "depth": 3,
187
+ "numbering": [
188
+ 1,
189
+ 2,
190
+ 2
191
+ ],
192
+ "parent": "root"
193
+ },
194
+ {
195
+ "value": "Size",
196
+ "href": "#size",
197
+ "depth": 3,
198
+ "numbering": [
199
+ 1,
200
+ 2,
201
+ 3
202
+ ],
203
+ "parent": "root"
204
+ }
205
+ ]
206
+ },
207
+ "a11y": {
208
+ "mdx": "\n## Accessibility\n\nAccessibility ensures that digital content and functionality are usable by\neveryone, including people with disabilities, by addressing visual, auditory,\ncognitive, and physical limitations.\n\nTree is rendered as an ARIA `treegrid` — React Aria's screen-reader-tested\npattern for interactive trees that support selection and per-row actions.\n\n```jsx live\nconst App = () => (\n <Tree.Root\n aria-label=\"Files\"\n selectionMode=\"multiple\"\n defaultExpandedKeys={[\"documents\"]}\n >\n <Tree.Item id=\"documents\" textValue=\"Documents\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Documents\n </Tree.ItemContent>\n <Tree.Item id=\"report\" textValue=\"Weekly Report\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Weekly Report\n </Tree.ItemContent>\n </Tree.Item>\n </Tree.Item>\n <Tree.Item id=\"photos\" textValue=\"Photos\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Photos\n </Tree.ItemContent>\n </Tree.Item>\n </Tree.Root>\n);\n```\n\n### Accessibility standards\n\n- **Roles:** the tree exposes `role=\"treegrid\"`, each item is a `role=\"row\"`\n containing a `role=\"gridcell\"`. This pattern is announced reliably by screen\n readers for interactive, selectable trees.\n- **aria-level:** every row exposes `aria-level` reflecting its 1-based depth so\n assistive technology can communicate the hierarchy.\n- **aria-expanded:** rows with children expose `aria-expanded`, updated as the\n item expands and collapses.\n- **aria-selected:** when selection is enabled, selectable rows expose\n `aria-selected`.\n- **Accessible name:** always provide an accessible name on `Tree.Root` via\n `aria-label` or `aria-labelledby`.\n- **Item text:** provide a meaningful `textValue` per `Tree.Item`. It supplies\n the type-ahead target and accessible name when the label is not plain text.\n- **Keyboard navigation:** Up/Down move between visible rows, Right/Left\n expand/collapse (or move to a child/parent), Home/End jump to the first/last\n visible row, and typing performs type-ahead.\n- **Expand/collapse control:** the `Tree.Indicator` chevron is given a localized\n accessible name by React Aria and is hidden for leaf rows.\n- **Drag and drop:** when drag-and-drop is enabled, `Tree.ItemContent`\n automatically renders a `Button slot=\"drag\"` per row so reordering is operable\n by keyboard and screen reader (pick up with `Enter`, move with arrow keys,\n drop with `Enter`), not pointer-only. React Aria gives it a localized\n accessible name; consumers don't author it.\n- **Focus visible:** rows and the tree container provide a clear focus ring for\n keyboard users.\n- **Color contrast:** maintain sufficient contrast for row text and selection\n states against their background colors.\n",
209
+ "toc": [
210
+ {
211
+ "value": "Accessibility",
212
+ "href": "#accessibility",
213
+ "depth": 2,
214
+ "numbering": [
215
+ 1,
216
+ 1
217
+ ],
218
+ "parent": "root"
219
+ },
220
+ {
221
+ "value": "Accessibility standards",
222
+ "href": "#accessibility-standards",
223
+ "depth": 3,
224
+ "numbering": [
225
+ 1,
226
+ 1,
227
+ 1
228
+ ],
229
+ "parent": "root"
230
+ }
231
+ ]
232
+ },
233
+ "dev": {
234
+ "mdx": "\n## Getting started\n\nThe `Tree` is a compound component for displaying hierarchical data such as file\ntrees and nested navigation structures. It wraps React Aria's `Tree` for\nkeyboard navigation, expand/collapse, selection, type-ahead and opt-in\ndrag-and-drop.\n\n### Import\n\nImport the Tree compound component and its TypeScript types:\n\n```tsx\nimport { Tree, type TreeRootProps } from \"@commercetools/nimbus\";\n```\n\n### Anatomy\n\n```tsx\n<Tree.Root>\n <Tree.Item>\n <Tree.ItemContent>\n <Tree.Indicator />\n {/* label */}\n </Tree.ItemContent>\n {/* nested <Tree.Item>s */}\n </Tree.Item>\n</Tree.Root>\n```\n\n- **`Tree.Root`** — the tree container. Owns size variant, selection mode,\n expanded keys and (optional) drag-and-drop. Requires an accessible name via\n `aria-label` or `aria-labelledby`.\n- **`Tree.Item`** — a single node. Contains a `Tree.ItemContent` and,\n optionally, nested `Tree.Item`s.\n- **`Tree.ItemContent`** — the node's content row. Renders the indicator, an\n optional selection checkbox (in multiple-selection mode) and the label, and\n applies level-based indentation.\n- **`Tree.Indicator`** — the expand/collapse chevron. Visible only for items\n with children.\n\n### Basic usage\n\nCompose nested `Tree.Item` elements directly. Use `defaultExpandedKeys` to\ncontrol which branches start open.\n\n```jsx live-dev\nconst App = () => {\n return (\n <Tree.Root\n aria-label=\"Files\"\n defaultExpandedKeys={[\"documents\", \"project\"]}\n >\n <Tree.Item id=\"documents\" textValue=\"Documents\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Documents\n </Tree.ItemContent>\n <Tree.Item id=\"project\" textValue=\"Project\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Project\n </Tree.ItemContent>\n <Tree.Item id=\"report\" textValue=\"Weekly Report\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Weekly Report\n </Tree.ItemContent>\n </Tree.Item>\n </Tree.Item>\n </Tree.Item>\n <Tree.Item id=\"photos\" textValue=\"Photos\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Photos\n </Tree.ItemContent>\n </Tree.Item>\n </Tree.Root>\n );\n};\n```\n\n## Usage examples\n\n### Selection\n\nSet `selectionMode` to `\"single\"` or `\"multiple\"`. In multiple-selection mode,\n`Tree.ItemContent` renders a selection checkbox automatically.\n\n```jsx live-dev\nconst App = () => {\n return (\n <Tree.Root\n aria-label=\"Files\"\n selectionMode=\"multiple\"\n defaultExpandedKeys={[\"documents\"]}\n >\n <Tree.Item id=\"documents\" textValue=\"Documents\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Documents\n </Tree.ItemContent>\n <Tree.Item id=\"report\" textValue=\"Weekly Report\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Weekly Report\n </Tree.ItemContent>\n </Tree.Item>\n </Tree.Item>\n </Tree.Root>\n );\n};\n```\n\n### Sizes\n\n`Tree.Root` accepts a `size` prop (`\"sm\"` or `\"md\"`, default `\"md\"`) that scales\nrow height, font size, chevron size and indentation step.\n\n```jsx live-dev\nconst App = () => {\n return (\n <Tree.Root aria-label=\"Files\" size=\"sm\" defaultExpandedKeys={[\"documents\"]}>\n <Tree.Item id=\"documents\" textValue=\"Documents\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Documents\n </Tree.ItemContent>\n <Tree.Item id=\"report\" textValue=\"Weekly Report\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Weekly Report\n </Tree.ItemContent>\n </Tree.Item>\n </Tree.Item>\n </Tree.Root>\n );\n};\n```\n\n## Drag and drop\n\nDrag-and-drop is opt-in and driven entirely through Nimbus — no\n`react-aria-components` or `react-stately` imports required. The `useTree` hook\nowns the hierarchical state and wires drag-and-drop for you: reorder between\nsiblings, and re-parent by dropping an item _onto_ a group. Spread its result\nonto `Tree.Root`.\n\nYou don't author the drag handle. When the tree allows dragging,\n`Tree.ItemContent` renders a keyboard- and screen-reader-operable drag handle\nautomatically (`Enter` to grab, arrow keys to move, `Enter` to drop), with a\nconsistent icon and a localized accessible name. Drop indicators for valid\npositions are provided automatically. Your render function is identical to a\nnon-draggable tree — enabling drag-and-drop is the only change.\n\n```tsx\nimport { Tree, useTree } from \"@commercetools/nimbus\";\n\nfunction DraggableTree() {\n const tree = useTree({\n initialItems: [\n {\n id: \"documents\",\n title: \"Documents\",\n children: [{ id: \"report\", title: \"Weekly Report\" }],\n },\n { id: \"photos\", title: \"Photos\", children: [] },\n ],\n getKey: (item) => item.id,\n getChildren: (item) => item.children ?? [],\n dragAndDrop: true,\n });\n\n const renderItem = (node) => (\n <Tree.Item id={node.key} textValue={node.value.title}>\n <Tree.ItemContent>\n <Tree.Indicator />\n {node.value.title}\n </Tree.ItemContent>\n <Tree.SubTree items={node.children}>{renderItem}</Tree.SubTree>\n </Tree.Item>\n );\n\n return (\n <Tree.Root aria-label=\"Files\" {...tree}>\n {renderItem}\n </Tree.Root>\n );\n}\n```\n\nFor custom drag data or accepted external drag types, pass an options object\ninstead of `true`: `dragAndDrop={{ getItems, acceptedDragTypes }}`. For\nprogrammatic edits, the same `tree` object exposes `insert`, `remove`, `move`,\n`update`, and more.\n\n## Accessibility\n\nThe Tree component is built with React Aria and follows the WAI-ARIA `treegrid`\npattern. It provides:\n\n**Roles:**\n\n- The root exposes `role=\"treegrid\"`; each item is a `role=\"row\"` containing a\n `role=\"gridcell\"`.\n\n**Labeling:**\n\n- Each row exposes `aria-level` reflecting its depth, `aria-expanded` when it\n has children, and `aria-selected` when selection is enabled.\n- Always provide an accessible name on `Tree.Root` via `aria-label` or\n `aria-labelledby`.\n- Provide a meaningful `textValue` on each `Tree.Item` (used for type-ahead)\n when the label is not a plain string.\n\n**Keyboard navigation:**\n\n- `Up` / `Down` — move between visible rows\n- `Right` / `Left` — expand/collapse, or move to a child/parent\n- `Home` / `End` — move to the first/last visible row\n- _type characters_ — type-ahead to the next matching row\n\nWhen drag-and-drop is enabled, `Tree.ItemContent` automatically renders a drag\nhandle per item so the reorder is operable by keyboard and screen reader, not\njust pointer — you don't need to add one.\n\n## API reference\n\n<PropsTable id=\"Tree\" />\n\n## Testing your implementation\n\nThese examples demonstrate how to test your implementation when using Tree\nwithin your application. As the component's internal functionality is already\ntested by Nimbus, these patterns help you verify your integration and\napplication-specific logic.\n\n### Basic Rendering\n\nRender a tree with nested items and verify the treegrid structure\n\n```tsx\nimport { describe, it, expect } from \"vitest\";\nimport { render, screen } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { Tree, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"Tree - Basic rendering\", () => {\n it(\"renders a treegrid with rows\", () => {\n render(\n <NimbusProvider>\n <Tree.Root aria-label=\"Files\" defaultExpandedKeys={[\"documents\"]}>\n <Tree.Item id=\"documents\" textValue=\"Documents\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Documents\n </Tree.ItemContent>\n <Tree.Item id=\"report\" textValue=\"Weekly Report\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Weekly Report\n </Tree.ItemContent>\n </Tree.Item>\n </Tree.Item>\n </Tree.Root>\n </NimbusProvider>\n );\n\n expect(screen.getByRole(\"treegrid\", { name: \"Files\" })).toBeInTheDocument();\n expect(screen.getByRole(\"row\", { name: /Documents/ })).toBeInTheDocument();\n expect(\n screen.getByRole(\"row\", { name: /Weekly Report/ })\n ).toBeInTheDocument();\n });\n\n it(\"exposes aria-level reflecting depth\", () => {\n render(\n <NimbusProvider>\n <Tree.Root aria-label=\"Files\" defaultExpandedKeys={[\"documents\"]}>\n <Tree.Item id=\"documents\" textValue=\"Documents\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Documents\n </Tree.ItemContent>\n <Tree.Item id=\"report\" textValue=\"Weekly Report\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Weekly Report\n </Tree.ItemContent>\n </Tree.Item>\n </Tree.Item>\n </Tree.Root>\n </NimbusProvider>\n );\n\n expect(screen.getByRole(\"row\", { name: /Documents/ })).toHaveAttribute(\n \"aria-level\",\n \"1\"\n );\n expect(screen.getByRole(\"row\", { name: /Weekly Report/ })).toHaveAttribute(\n \"aria-level\",\n \"2\"\n );\n });\n});\n```\n\n### Selection\n\nSingle and multiple selection behavior\n\n```tsx\nimport { describe, it, expect } from \"vitest\";\nimport { render, screen } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { Tree, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"Tree - Selection\", () => {\n it(\"selects a row in single-selection mode\", async () => {\n const user = userEvent.setup();\n render(\n <NimbusProvider>\n <Tree.Root aria-label=\"Files\" selectionMode=\"single\">\n <Tree.Item id=\"documents\" textValue=\"Documents\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Documents\n </Tree.ItemContent>\n </Tree.Item>\n </Tree.Root>\n </NimbusProvider>\n );\n\n const row = screen.getByRole(\"row\", { name: /Documents/ });\n await user.click(row);\n expect(row).toHaveAttribute(\"aria-selected\", \"true\");\n });\n\n it(\"renders selection checkboxes in multiple-selection mode\", () => {\n render(\n <NimbusProvider>\n <Tree.Root aria-label=\"Files\" selectionMode=\"multiple\">\n <Tree.Item id=\"documents\" textValue=\"Documents\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Documents\n </Tree.ItemContent>\n </Tree.Item>\n </Tree.Root>\n </NimbusProvider>\n );\n\n expect(screen.getAllByRole(\"checkbox\").length).toBeGreaterThan(0);\n });\n});\n```\n\n\n## Resources\n\n- [Tree Storybook](https://nimbus-storybook.vercel.app/?path=/docs/components-tree--docs)\n- [React Aria Tree Documentation](https://react-spectrum.adobe.com/react-aria/Tree.html)\n- [WAI-ARIA treegrid Pattern](https://www.w3.org/WAI/ARIA/apg/patterns/treegrid/)\n",
235
+ "toc": [
236
+ {
237
+ "value": "Getting started",
238
+ "href": "#getting-started",
239
+ "depth": 2,
240
+ "numbering": [
241
+ 1,
242
+ 1
243
+ ],
244
+ "parent": "root"
245
+ },
246
+ {
247
+ "value": "Import",
248
+ "href": "#import",
249
+ "depth": 3,
250
+ "numbering": [
251
+ 1,
252
+ 1,
253
+ 1
254
+ ],
255
+ "parent": "root"
256
+ },
257
+ {
258
+ "value": "Anatomy",
259
+ "href": "#anatomy",
260
+ "depth": 3,
261
+ "numbering": [
262
+ 1,
263
+ 1,
264
+ 2
265
+ ],
266
+ "parent": "root"
267
+ },
268
+ {
269
+ "value": "Basic usage",
270
+ "href": "#basic-usage",
271
+ "depth": 3,
272
+ "numbering": [
273
+ 1,
274
+ 1,
275
+ 3
276
+ ],
277
+ "parent": "root"
278
+ },
279
+ {
280
+ "value": "Usage examples",
281
+ "href": "#usage-examples",
282
+ "depth": 2,
283
+ "numbering": [
284
+ 1,
285
+ 2
286
+ ],
287
+ "parent": "root"
288
+ },
289
+ {
290
+ "value": "Selection",
291
+ "href": "#selection",
292
+ "depth": 3,
293
+ "numbering": [
294
+ 1,
295
+ 2,
296
+ 1
297
+ ],
298
+ "parent": "root"
299
+ },
300
+ {
301
+ "value": "Sizes",
302
+ "href": "#sizes",
303
+ "depth": 3,
304
+ "numbering": [
305
+ 1,
306
+ 2,
307
+ 2
308
+ ],
309
+ "parent": "root"
310
+ },
311
+ {
312
+ "value": "Drag and drop",
313
+ "href": "#drag-and-drop",
314
+ "depth": 2,
315
+ "numbering": [
316
+ 1,
317
+ 3
318
+ ],
319
+ "parent": "root"
320
+ },
321
+ {
322
+ "value": "Accessibility",
323
+ "href": "#accessibility",
324
+ "depth": 2,
325
+ "numbering": [
326
+ 1,
327
+ 4
328
+ ],
329
+ "parent": "root"
330
+ },
331
+ {
332
+ "value": "API reference",
333
+ "href": "#api-reference",
334
+ "depth": 2,
335
+ "numbering": [
336
+ 1,
337
+ 5
338
+ ],
339
+ "parent": "root"
340
+ },
341
+ {
342
+ "value": "Testing your implementation",
343
+ "href": "#testing-your-implementation",
344
+ "depth": 2,
345
+ "numbering": [
346
+ 1,
347
+ 6
348
+ ],
349
+ "parent": "root"
350
+ },
351
+ {
352
+ "value": "Basic Rendering",
353
+ "href": "#basic-rendering",
354
+ "depth": 3,
355
+ "numbering": [
356
+ 1,
357
+ 6,
358
+ 1
359
+ ],
360
+ "parent": "root"
361
+ },
362
+ {
363
+ "value": "Selection",
364
+ "href": "#selection-1",
365
+ "depth": 3,
366
+ "numbering": [
367
+ 1,
368
+ 6,
369
+ 2
370
+ ],
371
+ "parent": "root"
372
+ },
373
+ {
374
+ "value": "Resources",
375
+ "href": "#resources",
376
+ "depth": 2,
377
+ "numbering": [
378
+ 1,
379
+ 7
380
+ ],
381
+ "parent": "root"
382
+ }
383
+ ]
384
+ },
385
+ "guidelines": {
386
+ "mdx": "\n## Guidelines\n\nTree guidelines offer a set of standardized rules and recommendations that\nensure hierarchical data stays consistent, usable, and accessible.\n\n### Best practices\n\n- **Always label the tree:** provide an `aria-label` or `aria-labelledby` on\n `Tree.Root` so assistive technology can announce its purpose.\n- **Give every item a `textValue`:** it powers type-ahead and the accessible\n name, especially when the label is not a plain string.\n- **Include the indicator on every row:** place a `Tree.Indicator` in each\n `Tree.ItemContent`. It hides itself for leaf rows automatically, which keeps\n labels aligned across the column.\n- **Keep depth manageable:** deeply nested trees are hard to scan and navigate.\n Prefer shallow hierarchies and meaningful grouping.\n- **Match selection to intent:** use `selectionMode` when users pick items, and\n enable drag-and-drop via `useTree({ dragAndDrop: true })` when they reorder —\n the drag handle is rendered for you. A reorder-only tree should leave\n `selectionMode` at its default `none` so no checkboxes render.\n\n### Usage\n\nTree is best for data whose structure the user needs to see and traverse.\n\n> [!TIP]\\\n> When to use\n\n- **Hierarchical data:** file trees, category trees, nested settings, or\n organizational structures.\n- **Nested navigation:** a sidebar or panel that drills into nested sections.\n- **Reorderable hierarchies:** a navigation-menu builder or content outline,\n using opt-in drag-and-drop.\n\n> [!CAUTION]\\\n> When not to use\n\n- **A single level of collapsible sections:** use `Accordion` instead.\n- **A flat, single-level reorderable list:** use `DraggableList` instead.\n- **Tabular data with columns:** use `DataTable` instead.\n\n### Depth\n\nKeep the hierarchy shallow and well organized so users can predict where\ninformation lives.\n\n> [!TIP]\\\n> **Do**\n>\n> - Group related items under clear, descriptive parent labels.\n> - Expand the branches that matter on load with `defaultExpandedKeys`.\n\n```jsx live\nconst App = () => (\n <Tree.Root aria-label=\"Catalog\" defaultExpandedKeys={[\"clothing\"]}>\n <Tree.Item id=\"clothing\" textValue=\"Clothing\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Clothing\n </Tree.ItemContent>\n <Tree.Item id=\"tops\" textValue=\"Tops\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Tops\n </Tree.ItemContent>\n </Tree.Item>\n <Tree.Item id=\"shoes\" textValue=\"Shoes\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Shoes\n </Tree.ItemContent>\n </Tree.Item>\n </Tree.Item>\n </Tree.Root>\n);\n```\n\n> [!CAUTION]\\\n> **Don't**\n>\n> - Don't nest more levels than users need to complete their task; deep trees\n> hide information and are hard to navigate.\n\n```jsx live\nconst App = () => (\n <Tree.Root aria-label=\"Catalog\" defaultExpandedKeys={[\"a\", \"b\", \"c\", \"d\"]}>\n <Tree.Item id=\"a\" textValue=\"Level 1\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Level 1\n </Tree.ItemContent>\n <Tree.Item id=\"b\" textValue=\"Level 2\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Level 2\n </Tree.ItemContent>\n <Tree.Item id=\"c\" textValue=\"Level 3\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Level 3\n </Tree.ItemContent>\n <Tree.Item id=\"d\" textValue=\"Level 4\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Level 4\n </Tree.ItemContent>\n <Tree.Item id=\"e\" textValue=\"Level 5\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Level 5\n </Tree.ItemContent>\n </Tree.Item>\n </Tree.Item>\n </Tree.Item>\n </Tree.Item>\n </Tree.Item>\n </Tree.Root>\n);\n```\n\n### Selection and reordering\n\nMake it obvious what each interaction does, and don't mix affordances that serve\ndifferent goals.\n\n> [!TIP]\\\n> **Do**\n>\n> - Use multiple-selection mode when users act on several items at once — the\n> selection checkboxes make the interaction discoverable.\n\n```jsx live\nconst App = () => (\n <Tree.Root\n aria-label=\"Files\"\n selectionMode=\"multiple\"\n defaultExpandedKeys={[\"documents\"]}\n >\n <Tree.Item id=\"documents\" textValue=\"Documents\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Documents\n </Tree.ItemContent>\n <Tree.Item id=\"report\" textValue=\"Weekly Report\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Weekly Report\n </Tree.ItemContent>\n </Tree.Item>\n <Tree.Item id=\"budget\" textValue=\"Budget\">\n <Tree.ItemContent>\n <Tree.Indicator />\n Budget\n </Tree.ItemContent>\n </Tree.Item>\n </Tree.Item>\n </Tree.Root>\n);\n```\n\n> [!CAUTION]\\\n> **Don't**\n>\n> - Don't enable selection on a tree whose only purpose is structural reordering\n> — the checkboxes add noise. Leave `selectionMode` at `none`.\n",
387
+ "toc": [
388
+ {
389
+ "value": "Guidelines",
390
+ "href": "#guidelines",
391
+ "depth": 2,
392
+ "numbering": [
393
+ 1,
394
+ 1
395
+ ],
396
+ "parent": "root"
397
+ },
398
+ {
399
+ "value": "Best practices",
400
+ "href": "#best-practices",
401
+ "depth": 3,
402
+ "numbering": [
403
+ 1,
404
+ 1,
405
+ 1
406
+ ],
407
+ "parent": "root"
408
+ },
409
+ {
410
+ "value": "Usage",
411
+ "href": "#usage",
412
+ "depth": 3,
413
+ "numbering": [
414
+ 1,
415
+ 1,
416
+ 2
417
+ ],
418
+ "parent": "root"
419
+ },
420
+ {
421
+ "value": "Depth",
422
+ "href": "#depth",
423
+ "depth": 3,
424
+ "numbering": [
425
+ 1,
426
+ 1,
427
+ 3
428
+ ],
429
+ "parent": "root"
430
+ },
431
+ {
432
+ "value": "Selection and reordering",
433
+ "href": "#selection-and-reordering",
434
+ "depth": 3,
435
+ "numbering": [
436
+ 1,
437
+ 1,
438
+ 4
439
+ ],
440
+ "parent": "root"
441
+ }
442
+ ]
443
+ }
444
+ }
445
+ }
@@ -78,10 +78,10 @@
78
78
  }
79
79
  ]
80
80
  },
81
- "mdx": "\n# MCP Server Overview\n\nIf you use an AI coding assistant (Claude, Copilot, Cursor, etc.), the Nimbus\nMCP server lets it understand the design system automatically — no more pasting\ndocs into every prompt.\n\nThe **Nimbus MCP Server** (`@commercetools/nimbus-mcp`) exposes component\ndocumentation, design tokens, and icons to AI assistants through the\n[Model Context Protocol (MCP)](https://modelcontextprotocol.io/), so they can\nproduce code that follows Nimbus conventions out of the box.\n\n## What Is MCP?\n\nThe **Model Context Protocol** is an open standard that lets AI assistants call\nexternal tools. It works like a simple request/response message format: an MCP\n_server_ advertises a set of tools, and an MCP _client_ (the AI assistant)\ndiscovers and invokes them as needed during a conversation.\n\nThe Nimbus MCP server runs locally on your machine as a subprocess of the AI\nassistant — no network deployment or API keys required.\n\n## What It Enables\n\nWith the MCP server running, an AI assistant can:\n\n- **Look up component APIs** — props, variants, slots, and usage examples for\n any Nimbus component or pattern\n- **Query design tokens** — colors, spacing, typography, shadows, and other\n token values by name or category\n- **Search documentation** — full-text search across all Nimbus docs including\n guidelines and accessibility views\n- **Find icons** — fuzzy-search the icon catalog by name or keyword\n- **List components** — browse all available components filtered by category\n- **Migrate from UI Kit** — get migration mappings from `@commercetools-uikit`\n components to their Nimbus equivalents\n\nThis means you can ask your AI assistant questions like _\"build a form with\nNimbus components\"_ or _\"what spacing tokens are available?\"_ and it will have\naccurate, up-to-date answers pulled directly from the design system.\n\n## Available Tools\n\nThe server exposes the following tools:\n\n| Tool | Description |\n| ------------------ | ------------------------------------------------------------------------------ |\n| `list_components` | Returns Nimbus components, optionally filtered by subcategory or fuzzy search |\n| `get_component` | Returns detailed info about a component — metadata, props, styling config, and docs |\n| `get_tokens` | Returns design tokens, optionally filtered by category or searched by name |\n| `search_docs` | Full-text search across all Nimbus documentation pages |\n| `search_icons` | Fuzzy-search the icon catalog by name or keyword |\n| `migrate_from_uikit` | Returns migration mappings from UI Kit components to Nimbus equivalents |\n\n## Supported AI Assistants\n\nThe Nimbus MCP server works with any MCP-compatible client. Tested assistants\ninclude:\n\n| Assistant | Configuration file |\n| ------------------- | ------------------------------------------------ |\n| **Claude Code** | `~/.claude/mcp.json` or project `.mcp.json` |\n| **Claude Desktop** | App settings or `claude_desktop_config.json` |\n| **VS Code Copilot** | `.vscode/mcp.json` in workspace |\n| **Cursor** | `.cursor/mcp.json` in workspace |\n| **Windsurf** | `.windsurf/mcp.json` in workspace |\n\n> See the [Setup guide](/home/getting-started/mcp-server-setup) for step-by-step\n> configuration instructions for each assistant.\n\n## Package Details\n\n- **Package name:** `@commercetools/nimbus-mcp`\n- **Source:** `packages/nimbus-mcp/` in the Nimbus monorepo\n",
81
+ "mdx": "\n# MCP Server Overview\n\nIf you use an AI coding assistant (Claude, Copilot, Cursor, etc.), the Nimbus\nMCP server lets it understand the design system automatically — no more pasting\ndocs into every prompt.\n\nThe **Nimbus MCP Server** (`@commercetools/nimbus-mcp`) exposes component\ndocumentation, design tokens, and icons to AI assistants through the\n[Model Context Protocol (MCP)](https://modelcontextprotocol.io/), so they can\nproduce code that follows Nimbus conventions out of the box.\n\n## What Is MCP?\n\nThe **Model Context Protocol** is an open standard that lets AI assistants call\nexternal tools. It works like a simple request/response message format: an MCP\n_server_ advertises a set of tools, and an MCP _client_ (the AI assistant)\ndiscovers and invokes them as needed during a conversation.\n\nThe Nimbus MCP server runs locally on your machine as a subprocess of the AI\nassistant — no network deployment or API keys required.\n\n## What It Enables\n\nWith the MCP server running, an AI assistant can:\n\n- **Look up component APIs** — props, variants, slots, and usage examples for\n any Nimbus component or pattern\n- **Query design tokens** — colors, spacing, typography, shadows, and other\n token values by name or category\n- **Search documentation** — full-text search across all Nimbus docs including\n guidelines and accessibility views\n- **Find icons** — fuzzy-search the icon catalog by name or keyword\n- **List components** — browse all available components filtered by category\n- **Migrate from UI Kit** — get migration mappings from `@commercetools-uikit`\n components to their Nimbus equivalents\n\nThis means you can ask your AI assistant questions like _\"build a form with\nNimbus components\"_ or _\"what spacing tokens are available?\"_ and it will have\naccurate, up-to-date answers pulled directly from the design system.\n\n## Available Tools\n\nThe server exposes the following tools:\n\n| Tool | Description |\n| ------------------ | ------------------------------------------------------------------------------ |\n| `list_components` | Returns Nimbus components, optionally filtered by subcategory or fuzzy search |\n| `get_component` | Returns detailed info about a component — metadata, props, styling config, and docs |\n| `get_tokens` | Returns design tokens, optionally filtered by category or searched by name |\n| `search_docs` | Full-text search across all Nimbus documentation pages |\n| `search_icons` | Fuzzy-search the icon catalog by name or keyword |\n| `migrate_from_uikit` | Returns migration mappings from UI Kit components to Nimbus equivalents |\n\n## Supported AI Assistants\n\nThe Nimbus MCP server works with any MCP-compatible client. Tested assistants\ninclude:\n\n| Assistant | Configuration file |\n| ------------------- | ------------------------------------------------ |\n| **Claude Code** | `~/.claude.json` or project `.mcp.json` |\n| **Claude Desktop** | App settings or `claude_desktop_config.json` |\n| **VS Code Copilot** | `.vscode/mcp.json` in workspace |\n| **Cursor** | `.cursor/mcp.json` in workspace |\n| **Windsurf** | `.windsurf/mcp.json` in workspace |\n\n> See the [Setup guide](/home/getting-started/mcp-server-setup) for step-by-step\n> configuration instructions for each assistant.\n\n## Package Details\n\n- **Package name:** `@commercetools/nimbus-mcp`\n- **Source:** `packages/nimbus-mcp/` in the Nimbus monorepo\n",
82
82
  "views": {
83
83
  "overview": {
84
- "mdx": "\n# MCP Server Overview\n\nIf you use an AI coding assistant (Claude, Copilot, Cursor, etc.), the Nimbus\nMCP server lets it understand the design system automatically — no more pasting\ndocs into every prompt.\n\nThe **Nimbus MCP Server** (`@commercetools/nimbus-mcp`) exposes component\ndocumentation, design tokens, and icons to AI assistants through the\n[Model Context Protocol (MCP)](https://modelcontextprotocol.io/), so they can\nproduce code that follows Nimbus conventions out of the box.\n\n## What Is MCP?\n\nThe **Model Context Protocol** is an open standard that lets AI assistants call\nexternal tools. It works like a simple request/response message format: an MCP\n_server_ advertises a set of tools, and an MCP _client_ (the AI assistant)\ndiscovers and invokes them as needed during a conversation.\n\nThe Nimbus MCP server runs locally on your machine as a subprocess of the AI\nassistant — no network deployment or API keys required.\n\n## What It Enables\n\nWith the MCP server running, an AI assistant can:\n\n- **Look up component APIs** — props, variants, slots, and usage examples for\n any Nimbus component or pattern\n- **Query design tokens** — colors, spacing, typography, shadows, and other\n token values by name or category\n- **Search documentation** — full-text search across all Nimbus docs including\n guidelines and accessibility views\n- **Find icons** — fuzzy-search the icon catalog by name or keyword\n- **List components** — browse all available components filtered by category\n- **Migrate from UI Kit** — get migration mappings from `@commercetools-uikit`\n components to their Nimbus equivalents\n\nThis means you can ask your AI assistant questions like _\"build a form with\nNimbus components\"_ or _\"what spacing tokens are available?\"_ and it will have\naccurate, up-to-date answers pulled directly from the design system.\n\n## Available Tools\n\nThe server exposes the following tools:\n\n| Tool | Description |\n| ------------------ | ------------------------------------------------------------------------------ |\n| `list_components` | Returns Nimbus components, optionally filtered by subcategory or fuzzy search |\n| `get_component` | Returns detailed info about a component — metadata, props, styling config, and docs |\n| `get_tokens` | Returns design tokens, optionally filtered by category or searched by name |\n| `search_docs` | Full-text search across all Nimbus documentation pages |\n| `search_icons` | Fuzzy-search the icon catalog by name or keyword |\n| `migrate_from_uikit` | Returns migration mappings from UI Kit components to Nimbus equivalents |\n\n## Supported AI Assistants\n\nThe Nimbus MCP server works with any MCP-compatible client. Tested assistants\ninclude:\n\n| Assistant | Configuration file |\n| ------------------- | ------------------------------------------------ |\n| **Claude Code** | `~/.claude/mcp.json` or project `.mcp.json` |\n| **Claude Desktop** | App settings or `claude_desktop_config.json` |\n| **VS Code Copilot** | `.vscode/mcp.json` in workspace |\n| **Cursor** | `.cursor/mcp.json` in workspace |\n| **Windsurf** | `.windsurf/mcp.json` in workspace |\n\n> See the [Setup guide](/home/getting-started/mcp-server-setup) for step-by-step\n> configuration instructions for each assistant.\n\n## Package Details\n\n- **Package name:** `@commercetools/nimbus-mcp`\n- **Source:** `packages/nimbus-mcp/` in the Nimbus monorepo\n",
84
+ "mdx": "\n# MCP Server Overview\n\nIf you use an AI coding assistant (Claude, Copilot, Cursor, etc.), the Nimbus\nMCP server lets it understand the design system automatically — no more pasting\ndocs into every prompt.\n\nThe **Nimbus MCP Server** (`@commercetools/nimbus-mcp`) exposes component\ndocumentation, design tokens, and icons to AI assistants through the\n[Model Context Protocol (MCP)](https://modelcontextprotocol.io/), so they can\nproduce code that follows Nimbus conventions out of the box.\n\n## What Is MCP?\n\nThe **Model Context Protocol** is an open standard that lets AI assistants call\nexternal tools. It works like a simple request/response message format: an MCP\n_server_ advertises a set of tools, and an MCP _client_ (the AI assistant)\ndiscovers and invokes them as needed during a conversation.\n\nThe Nimbus MCP server runs locally on your machine as a subprocess of the AI\nassistant — no network deployment or API keys required.\n\n## What It Enables\n\nWith the MCP server running, an AI assistant can:\n\n- **Look up component APIs** — props, variants, slots, and usage examples for\n any Nimbus component or pattern\n- **Query design tokens** — colors, spacing, typography, shadows, and other\n token values by name or category\n- **Search documentation** — full-text search across all Nimbus docs including\n guidelines and accessibility views\n- **Find icons** — fuzzy-search the icon catalog by name or keyword\n- **List components** — browse all available components filtered by category\n- **Migrate from UI Kit** — get migration mappings from `@commercetools-uikit`\n components to their Nimbus equivalents\n\nThis means you can ask your AI assistant questions like _\"build a form with\nNimbus components\"_ or _\"what spacing tokens are available?\"_ and it will have\naccurate, up-to-date answers pulled directly from the design system.\n\n## Available Tools\n\nThe server exposes the following tools:\n\n| Tool | Description |\n| ------------------ | ------------------------------------------------------------------------------ |\n| `list_components` | Returns Nimbus components, optionally filtered by subcategory or fuzzy search |\n| `get_component` | Returns detailed info about a component — metadata, props, styling config, and docs |\n| `get_tokens` | Returns design tokens, optionally filtered by category or searched by name |\n| `search_docs` | Full-text search across all Nimbus documentation pages |\n| `search_icons` | Fuzzy-search the icon catalog by name or keyword |\n| `migrate_from_uikit` | Returns migration mappings from UI Kit components to Nimbus equivalents |\n\n## Supported AI Assistants\n\nThe Nimbus MCP server works with any MCP-compatible client. Tested assistants\ninclude:\n\n| Assistant | Configuration file |\n| ------------------- | ------------------------------------------------ |\n| **Claude Code** | `~/.claude.json` or project `.mcp.json` |\n| **Claude Desktop** | App settings or `claude_desktop_config.json` |\n| **VS Code Copilot** | `.vscode/mcp.json` in workspace |\n| **Cursor** | `.cursor/mcp.json` in workspace |\n| **Windsurf** | `.windsurf/mcp.json` in workspace |\n\n> See the [Setup guide](/home/getting-started/mcp-server-setup) for step-by-step\n> configuration instructions for each assistant.\n\n## Package Details\n\n- **Package name:** `@commercetools/nimbus-mcp`\n- **Source:** `packages/nimbus-mcp/` in the Nimbus monorepo\n",
85
85
  "toc": [
86
86
  {
87
87
  "value": "What Is MCP?",
@@ -167,10 +167,10 @@
167
167
  }
168
168
  ]
169
169
  },
170
- "mdx": "\n# MCP Server Setup\n\nThis guide walks through installing the Nimbus MCP server and configuring it for\nyour AI assistant. Setup takes about two minutes.\n\n## Prerequisites\n\n- **Node.js** v18 or later (includes `npx`)\n- An AI assistant that supports MCP (see\n [supported assistants](/home/getting-started/mcp-server-overview))\n\n## How It Works\n\nYou don't run the MCP server yourself. Instead, you add a small JSON config to\nyour AI assistant telling it _how_ to start the server. The assistant launches\nthe server automatically when a session begins and communicates with it behind\nthe scenes.\n\nAll of the configuration snippets below follow this pattern.\n\n## Installation\n\n### Quick Start (npx — recommended)\n\nThe simplest option. Your assistant runs `npx` to pull the latest published\nversion on each session start — no local install needed.\n\nThe `-y` flag in the snippets below tells npx to skip the install confirmation\nprompt so the server starts without user interaction.\n\n### Monorepo (contributors)\n\nIf you're developing inside the Nimbus monorepo, the MCP server is already\navailable as a workspace package. Build it once:\n\n```bash\npnpm --filter @commercetools/nimbus-mcp build\n```\n\nThen use this server entry in place of the npx snippets below:\n\n```json\n{\n \"mcpServers\": {\n \"nimbus\": {\n \"command\": \"node\",\n \"args\": [\"packages/nimbus-mcp/dist/index.js\"]\n }\n }\n}\n```\n\n## Configuration by Assistant\n\nEach AI assistant reads MCP server configuration from a JSON file. Add the\n`nimbus` entry to the appropriate file for your tool.\n\n### Claude Code\n\nAdd to your project's `.mcp.json` so every team member on the repo gets the\nserver automatically, or to `~/.claude/mcp.json` to enable it across all your\nprojects:\n\n```json\n{\n \"mcpServers\": {\n \"nimbus\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@commercetools/nimbus-mcp\"]\n }\n }\n}\n```\n\nClaude Code discovers the server automatically on the next session start.\n\n### Claude Desktop\n\nOpen **Settings → Developer → Edit Config**, or edit the config file directly:\n\n- **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`\n- **Windows:** `%APPDATA%\\Claude\\claude_desktop_config.json`\n\n```json\n{\n \"mcpServers\": {\n \"nimbus\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@commercetools/nimbus-mcp\"]\n }\n }\n}\n```\n\nRestart Claude Desktop after saving.\n\n### VS Code (Copilot)\n\nCreate or edit `.vscode/mcp.json` in your workspace root.\n\n> **Note:** VS Code uses `\"servers\"` as the top-level key, not `\"mcpServers\"`\n> like the other assistants.\n\n```json\n{\n \"servers\": {\n \"nimbus\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@commercetools/nimbus-mcp\"]\n }\n }\n}\n```\n\nMCP support is built into VS Code 1.99+. Open the Copilot chat panel — if the\nserver is configured correctly, Copilot will discover it automatically.\n\n### Cursor\n\nCreate or edit `.cursor/mcp.json` in your workspace root:\n\n```json\n{\n \"mcpServers\": {\n \"nimbus\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@commercetools/nimbus-mcp\"]\n }\n }\n}\n```\n\nCursor discovers the server on the next composer session.\n\n### Windsurf\n\nCreate or edit `.windsurf/mcp.json` in your workspace root:\n\n```json\n{\n \"mcpServers\": {\n \"nimbus\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@commercetools/nimbus-mcp\"]\n }\n }\n}\n```\n\nWindsurf picks up new servers automatically.\n\n## Verify the Setup\n\nAfter saving the configuration, open a new chat session in your assistant and\nask:\n\n> _\"List all available Nimbus components\"_\n\nThe assistant should call the `list_components` tool and return a list of\ncomponent names and descriptions. If this works, the MCP server is connected\nand ready to use.\n\nYou can also try more specific queries:\n\n- _\"What props does the Button component accept?\"_\n- _\"What spacing tokens are available in Nimbus?\"_\n- _\"Find an icon for a shopping cart\"_\n- _\"How do I migrate PrimaryButton from UI Kit to Nimbus?\"_\n\n### Troubleshooting\n\n| Symptom | Likely cause | Fix |\n| ---------------------------------- | --------------------------------------------- | ------------------------------------------------------------ |\n| Assistant doesn't see Nimbus tools | Config file not found or malformed JSON | Check file path and validate JSON syntax |\n| `npx` command not found | Node.js not on the assistant's PATH | Ensure `node` (v18+) and `npx` are available in your shell |\n| Tools return \"data not found\" | Monorepo users: package not built | Run `pnpm build` from the repo root (npx users are unaffected) |\n| Stale component data | Using an older cached npx version | Run `npx @commercetools/nimbus-mcp@latest` to clear cache |\n",
170
+ "mdx": "\n# MCP Server Setup\n\nThis guide walks through installing the Nimbus MCP server and configuring it for\nyour AI assistant. Setup takes about two minutes.\n\n## Prerequisites\n\n- **Node.js** v18 or later (includes `npx`)\n- An AI assistant that supports MCP (see\n [supported assistants](/home/getting-started/mcp-server-overview))\n\n## How It Works\n\nYou don't run the MCP server yourself. Instead, you add a small JSON config to\nyour AI assistant telling it _how_ to start the server. The assistant launches\nthe server automatically when a session begins and communicates with it behind\nthe scenes.\n\nAll of the configuration snippets below follow this pattern.\n\n## Installation\n\n### Quick Start (npx — recommended)\n\nThe simplest option. Your assistant runs `npx` to pull the latest published\nversion on each session start — no local install needed.\n\nThe `-y` flag in the snippets below tells npx to skip the install confirmation\nprompt so the server starts without user interaction.\n\n### Monorepo (contributors)\n\nIf you're developing inside the Nimbus monorepo, the MCP server is already\navailable as a workspace package. Build it once:\n\n```bash\npnpm --filter @commercetools/nimbus-mcp build\n```\n\nThen use this server entry in place of the npx snippets below:\n\n```json\n{\n \"mcpServers\": {\n \"nimbus\": {\n \"command\": \"node\",\n \"args\": [\"packages/nimbus-mcp/dist/index.js\"]\n }\n }\n}\n```\n\n## Configuration by Assistant\n\nEach AI assistant reads MCP server configuration from a JSON file. Add the\n`nimbus` entry to the appropriate file for your tool.\n\n### Claude Code\n\nThe recommended way to add the server for all your projects is via the CLI:\n\n```bash\nclaude mcp add -s user nimbus-mcp npx -- -y @commercetools/nimbus-mcp\n```\n\nThis writes the server config to `~/.claude.json` and makes it available in all\nsessions.\n\nAlternatively, add a `nimbus` entry to your project's `.mcp.json` so every team\nmember on the repo gets the server automatically:\n\n```json\n{\n \"mcpServers\": {\n \"nimbus\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@commercetools/nimbus-mcp\"]\n }\n }\n}\n```\n\nClaude Code discovers the server automatically on the next session start.\n\n### Claude Desktop\n\nOpen **Settings → Developer → Edit Config**, or edit the config file directly:\n\n- **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`\n- **Windows:** `%APPDATA%\\Claude\\claude_desktop_config.json`\n\n```json\n{\n \"mcpServers\": {\n \"nimbus\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@commercetools/nimbus-mcp\"]\n }\n }\n}\n```\n\nRestart Claude Desktop after saving.\n\n### VS Code (Copilot)\n\nCreate or edit `.vscode/mcp.json` in your workspace root.\n\n> **Note:** VS Code uses `\"servers\"` as the top-level key, not `\"mcpServers\"`\n> like the other assistants.\n\n```json\n{\n \"servers\": {\n \"nimbus\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@commercetools/nimbus-mcp\"]\n }\n }\n}\n```\n\nMCP support is built into VS Code 1.99+. Open the Copilot chat panel — if the\nserver is configured correctly, Copilot will discover it automatically.\n\n### Cursor\n\nCreate or edit `.cursor/mcp.json` in your workspace root:\n\n```json\n{\n \"mcpServers\": {\n \"nimbus\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@commercetools/nimbus-mcp\"]\n }\n }\n}\n```\n\nCursor discovers the server on the next composer session.\n\n### Windsurf\n\nCreate or edit `.windsurf/mcp.json` in your workspace root:\n\n```json\n{\n \"mcpServers\": {\n \"nimbus\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@commercetools/nimbus-mcp\"]\n }\n }\n}\n```\n\nWindsurf picks up new servers automatically.\n\n## Verify the Setup\n\nAfter saving the configuration, open a new chat session in your assistant and\nask:\n\n> _\"List all available Nimbus components\"_\n\nThe assistant should call the `list_components` tool and return a list of\ncomponent names and descriptions. If this works, the MCP server is connected\nand ready to use.\n\nYou can also try more specific queries:\n\n- _\"What props does the Button component accept?\"_\n- _\"What spacing tokens are available in Nimbus?\"_\n- _\"Find an icon for a shopping cart\"_\n- _\"How do I migrate PrimaryButton from UI Kit to Nimbus?\"_\n\n### Troubleshooting\n\n| Symptom | Likely cause | Fix |\n| ---------------------------------- | --------------------------------------------- | ------------------------------------------------------------ |\n| Assistant doesn't see Nimbus tools | Config file not found or malformed JSON | Check file path and validate JSON syntax |\n| `npx` command not found | Node.js not on the assistant's PATH | Ensure `node` (v18+) and `npx` are available in your shell |\n| Tools return \"data not found\" | Monorepo users: package not built | Run `pnpm build` from the repo root (npx users are unaffected) |\n| Stale component data | Using an older cached npx version | Run `npx @commercetools/nimbus-mcp@latest` to clear cache |\n",
171
171
  "views": {
172
172
  "overview": {
173
- "mdx": "\n# MCP Server Setup\n\nThis guide walks through installing the Nimbus MCP server and configuring it for\nyour AI assistant. Setup takes about two minutes.\n\n## Prerequisites\n\n- **Node.js** v18 or later (includes `npx`)\n- An AI assistant that supports MCP (see\n [supported assistants](/home/getting-started/mcp-server-overview))\n\n## How It Works\n\nYou don't run the MCP server yourself. Instead, you add a small JSON config to\nyour AI assistant telling it _how_ to start the server. The assistant launches\nthe server automatically when a session begins and communicates with it behind\nthe scenes.\n\nAll of the configuration snippets below follow this pattern.\n\n## Installation\n\n### Quick Start (npx — recommended)\n\nThe simplest option. Your assistant runs `npx` to pull the latest published\nversion on each session start — no local install needed.\n\nThe `-y` flag in the snippets below tells npx to skip the install confirmation\nprompt so the server starts without user interaction.\n\n### Monorepo (contributors)\n\nIf you're developing inside the Nimbus monorepo, the MCP server is already\navailable as a workspace package. Build it once:\n\n```bash\npnpm --filter @commercetools/nimbus-mcp build\n```\n\nThen use this server entry in place of the npx snippets below:\n\n```json\n{\n \"mcpServers\": {\n \"nimbus\": {\n \"command\": \"node\",\n \"args\": [\"packages/nimbus-mcp/dist/index.js\"]\n }\n }\n}\n```\n\n## Configuration by Assistant\n\nEach AI assistant reads MCP server configuration from a JSON file. Add the\n`nimbus` entry to the appropriate file for your tool.\n\n### Claude Code\n\nAdd to your project's `.mcp.json` so every team member on the repo gets the\nserver automatically, or to `~/.claude/mcp.json` to enable it across all your\nprojects:\n\n```json\n{\n \"mcpServers\": {\n \"nimbus\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@commercetools/nimbus-mcp\"]\n }\n }\n}\n```\n\nClaude Code discovers the server automatically on the next session start.\n\n### Claude Desktop\n\nOpen **Settings → Developer → Edit Config**, or edit the config file directly:\n\n- **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`\n- **Windows:** `%APPDATA%\\Claude\\claude_desktop_config.json`\n\n```json\n{\n \"mcpServers\": {\n \"nimbus\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@commercetools/nimbus-mcp\"]\n }\n }\n}\n```\n\nRestart Claude Desktop after saving.\n\n### VS Code (Copilot)\n\nCreate or edit `.vscode/mcp.json` in your workspace root.\n\n> **Note:** VS Code uses `\"servers\"` as the top-level key, not `\"mcpServers\"`\n> like the other assistants.\n\n```json\n{\n \"servers\": {\n \"nimbus\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@commercetools/nimbus-mcp\"]\n }\n }\n}\n```\n\nMCP support is built into VS Code 1.99+. Open the Copilot chat panel — if the\nserver is configured correctly, Copilot will discover it automatically.\n\n### Cursor\n\nCreate or edit `.cursor/mcp.json` in your workspace root:\n\n```json\n{\n \"mcpServers\": {\n \"nimbus\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@commercetools/nimbus-mcp\"]\n }\n }\n}\n```\n\nCursor discovers the server on the next composer session.\n\n### Windsurf\n\nCreate or edit `.windsurf/mcp.json` in your workspace root:\n\n```json\n{\n \"mcpServers\": {\n \"nimbus\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@commercetools/nimbus-mcp\"]\n }\n }\n}\n```\n\nWindsurf picks up new servers automatically.\n\n## Verify the Setup\n\nAfter saving the configuration, open a new chat session in your assistant and\nask:\n\n> _\"List all available Nimbus components\"_\n\nThe assistant should call the `list_components` tool and return a list of\ncomponent names and descriptions. If this works, the MCP server is connected\nand ready to use.\n\nYou can also try more specific queries:\n\n- _\"What props does the Button component accept?\"_\n- _\"What spacing tokens are available in Nimbus?\"_\n- _\"Find an icon for a shopping cart\"_\n- _\"How do I migrate PrimaryButton from UI Kit to Nimbus?\"_\n\n### Troubleshooting\n\n| Symptom | Likely cause | Fix |\n| ---------------------------------- | --------------------------------------------- | ------------------------------------------------------------ |\n| Assistant doesn't see Nimbus tools | Config file not found or malformed JSON | Check file path and validate JSON syntax |\n| `npx` command not found | Node.js not on the assistant's PATH | Ensure `node` (v18+) and `npx` are available in your shell |\n| Tools return \"data not found\" | Monorepo users: package not built | Run `pnpm build` from the repo root (npx users are unaffected) |\n| Stale component data | Using an older cached npx version | Run `npx @commercetools/nimbus-mcp@latest` to clear cache |\n",
173
+ "mdx": "\n# MCP Server Setup\n\nThis guide walks through installing the Nimbus MCP server and configuring it for\nyour AI assistant. Setup takes about two minutes.\n\n## Prerequisites\n\n- **Node.js** v18 or later (includes `npx`)\n- An AI assistant that supports MCP (see\n [supported assistants](/home/getting-started/mcp-server-overview))\n\n## How It Works\n\nYou don't run the MCP server yourself. Instead, you add a small JSON config to\nyour AI assistant telling it _how_ to start the server. The assistant launches\nthe server automatically when a session begins and communicates with it behind\nthe scenes.\n\nAll of the configuration snippets below follow this pattern.\n\n## Installation\n\n### Quick Start (npx — recommended)\n\nThe simplest option. Your assistant runs `npx` to pull the latest published\nversion on each session start — no local install needed.\n\nThe `-y` flag in the snippets below tells npx to skip the install confirmation\nprompt so the server starts without user interaction.\n\n### Monorepo (contributors)\n\nIf you're developing inside the Nimbus monorepo, the MCP server is already\navailable as a workspace package. Build it once:\n\n```bash\npnpm --filter @commercetools/nimbus-mcp build\n```\n\nThen use this server entry in place of the npx snippets below:\n\n```json\n{\n \"mcpServers\": {\n \"nimbus\": {\n \"command\": \"node\",\n \"args\": [\"packages/nimbus-mcp/dist/index.js\"]\n }\n }\n}\n```\n\n## Configuration by Assistant\n\nEach AI assistant reads MCP server configuration from a JSON file. Add the\n`nimbus` entry to the appropriate file for your tool.\n\n### Claude Code\n\nThe recommended way to add the server for all your projects is via the CLI:\n\n```bash\nclaude mcp add -s user nimbus-mcp npx -- -y @commercetools/nimbus-mcp\n```\n\nThis writes the server config to `~/.claude.json` and makes it available in all\nsessions.\n\nAlternatively, add a `nimbus` entry to your project's `.mcp.json` so every team\nmember on the repo gets the server automatically:\n\n```json\n{\n \"mcpServers\": {\n \"nimbus\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@commercetools/nimbus-mcp\"]\n }\n }\n}\n```\n\nClaude Code discovers the server automatically on the next session start.\n\n### Claude Desktop\n\nOpen **Settings → Developer → Edit Config**, or edit the config file directly:\n\n- **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`\n- **Windows:** `%APPDATA%\\Claude\\claude_desktop_config.json`\n\n```json\n{\n \"mcpServers\": {\n \"nimbus\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@commercetools/nimbus-mcp\"]\n }\n }\n}\n```\n\nRestart Claude Desktop after saving.\n\n### VS Code (Copilot)\n\nCreate or edit `.vscode/mcp.json` in your workspace root.\n\n> **Note:** VS Code uses `\"servers\"` as the top-level key, not `\"mcpServers\"`\n> like the other assistants.\n\n```json\n{\n \"servers\": {\n \"nimbus\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@commercetools/nimbus-mcp\"]\n }\n }\n}\n```\n\nMCP support is built into VS Code 1.99+. Open the Copilot chat panel — if the\nserver is configured correctly, Copilot will discover it automatically.\n\n### Cursor\n\nCreate or edit `.cursor/mcp.json` in your workspace root:\n\n```json\n{\n \"mcpServers\": {\n \"nimbus\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@commercetools/nimbus-mcp\"]\n }\n }\n}\n```\n\nCursor discovers the server on the next composer session.\n\n### Windsurf\n\nCreate or edit `.windsurf/mcp.json` in your workspace root:\n\n```json\n{\n \"mcpServers\": {\n \"nimbus\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@commercetools/nimbus-mcp\"]\n }\n }\n}\n```\n\nWindsurf picks up new servers automatically.\n\n## Verify the Setup\n\nAfter saving the configuration, open a new chat session in your assistant and\nask:\n\n> _\"List all available Nimbus components\"_\n\nThe assistant should call the `list_components` tool and return a list of\ncomponent names and descriptions. If this works, the MCP server is connected\nand ready to use.\n\nYou can also try more specific queries:\n\n- _\"What props does the Button component accept?\"_\n- _\"What spacing tokens are available in Nimbus?\"_\n- _\"Find an icon for a shopping cart\"_\n- _\"How do I migrate PrimaryButton from UI Kit to Nimbus?\"_\n\n### Troubleshooting\n\n| Symptom | Likely cause | Fix |\n| ---------------------------------- | --------------------------------------------- | ------------------------------------------------------------ |\n| Assistant doesn't see Nimbus tools | Config file not found or malformed JSON | Check file path and validate JSON syntax |\n| `npx` command not found | Node.js not on the assistant's PATH | Ensure `node` (v18+) and `npx` are available in your shell |\n| Tools return \"data not found\" | Monorepo users: package not built | Run `pnpm build` from the repo root (npx users are unaffected) |\n| Stale component data | Using an older cached npx version | Run `npx @commercetools/nimbus-mcp@latest` to clear cache |\n",
174
174
  "toc": [
175
175
  {
176
176
  "value": "Prerequisites",