@commercetools/nimbus-mcp 3.3.0 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/data/docs/route-manifest.json +714 -14
  2. package/data/docs/routes/components-data-display-data-table.json +172 -14
  3. package/data/docs/routes/components-data-display-item-group.json +413 -0
  4. package/data/docs/routes/components-data-display-item.json +611 -0
  5. package/data/docs/routes/components-feedback-skeleton.json +481 -0
  6. package/data/docs/routes/components-feedback-skeletoncircle.json +429 -0
  7. package/data/docs/routes/components-feedback-skeletontext.json +417 -0
  8. package/data/docs/routes/components-inputs-range-slider.json +633 -0
  9. package/data/docs/routes/components-inputs-slider.json +611 -0
  10. package/data/docs/routes/components-navigation-breadcrumbs.json +565 -0
  11. package/data/docs/routes/home-getting-started-installation.json +2 -2
  12. package/data/docs/routes/icons.json +3 -3
  13. package/data/docs/search-index.json +1 -1
  14. package/data/docs/types/AccordionContent.json +27 -27
  15. package/data/docs/types/AccordionHeader.json +89 -89
  16. package/data/docs/types/AccordionItem.json +22 -22
  17. package/data/docs/types/AccordionRoot.json +14 -14
  18. package/data/docs/types/ActivityIndicator.json +2 -2
  19. package/data/docs/types/AlertDescription.json +8 -8
  20. package/data/docs/types/AlertDismissButton.json +80 -80
  21. package/data/docs/types/AlertTitle.json +8 -8
  22. package/data/docs/types/Avatar.json +2 -2
  23. package/data/docs/types/Badge.json +3 -3
  24. package/data/docs/types/Body.json +6 -6
  25. package/data/docs/types/Box.json +6 -6
  26. package/data/docs/types/Breadcrumbs.json +12 -0
  27. package/data/docs/types/BreadcrumbsItem.json +296 -0
  28. package/data/docs/types/BreadcrumbsItemProps.json +9 -0
  29. package/data/docs/types/BreadcrumbsProps.json +9 -0
  30. package/data/docs/types/BreadcrumbsRoot.json +110 -0
  31. package/data/docs/types/Button.json +88 -88
  32. package/data/docs/types/Calendar.json +56 -56
  33. package/data/docs/types/Caption.json +6 -6
  34. package/data/docs/types/CardRoot.json +2 -2
  35. package/data/docs/types/Cell.json +20 -20
  36. package/data/docs/types/ChatMessageAvatar.json +2 -2
  37. package/data/docs/types/ChatMessageListRoot.json +2 -2
  38. package/data/docs/types/ChatMessageRoot.json +2 -2
  39. package/data/docs/types/Checkbox.json +88 -88
  40. package/data/docs/types/Code.json +10 -10
  41. package/data/docs/types/CollapsibleMotionContent.json +2 -2
  42. package/data/docs/types/CollapsibleMotionRoot.json +2 -2
  43. package/data/docs/types/CollapsibleMotionTrigger.json +4 -4
  44. package/data/docs/types/Column.json +8 -8
  45. package/data/docs/types/ColumnGroup.json +8 -8
  46. package/data/docs/types/ColumnHeader.json +18 -18
  47. package/data/docs/types/ComboBoxListBox.json +70 -70
  48. package/data/docs/types/ComboBoxOption.json +64 -64
  49. package/data/docs/types/ComboBoxPopover.json +148 -72
  50. package/data/docs/types/ComboBoxRoot.json +8 -8
  51. package/data/docs/types/ComboBoxSection.json +25 -25
  52. package/data/docs/types/ComboBoxTrigger.json +6 -6
  53. package/data/docs/types/Content.json +2 -2
  54. package/data/docs/types/DataTable.json +38 -23
  55. package/data/docs/types/DataTableBody.json +60 -79
  56. package/data/docs/types/DataTableCell.json +434 -0
  57. package/data/docs/types/DataTableColumn.json +540 -0
  58. package/data/docs/types/DataTableHeader.json +62 -85
  59. package/data/docs/types/DataTableRoot.json +38 -23
  60. package/data/docs/types/DataTableRow.json +790 -0
  61. package/data/docs/types/DataTableTable.json +20 -20
  62. package/data/docs/types/DateInput.json +72 -72
  63. package/data/docs/types/DatePicker.json +58 -58
  64. package/data/docs/types/DateRangePicker.json +86 -86
  65. package/data/docs/types/DateRangePickerField.json +86 -86
  66. package/data/docs/types/DefaultPageBackLink.json +16 -16
  67. package/data/docs/types/DefaultPageRoot.json +2 -2
  68. package/data/docs/types/DialogCloseTrigger.json +78 -78
  69. package/data/docs/types/DialogTrigger.json +2 -2
  70. package/data/docs/types/DraggableListField.json +62 -62
  71. package/data/docs/types/DraggableListItem.json +100 -53
  72. package/data/docs/types/DraggableListRoot.json +62 -62
  73. package/data/docs/types/DrawerCloseTrigger.json +78 -78
  74. package/data/docs/types/DrawerTrigger.json +2 -2
  75. package/data/docs/types/DropZone.json +14 -14
  76. package/data/docs/types/FieldErrors.json +2 -2
  77. package/data/docs/types/Flex.json +22 -22
  78. package/data/docs/types/FloatingActionButton.json +88 -88
  79. package/data/docs/types/Footer.json +6 -6
  80. package/data/docs/types/FormFieldRoot.json +2 -2
  81. package/data/docs/types/Grid.json +24 -24
  82. package/data/docs/types/Group.json +12 -12
  83. package/data/docs/types/Header.json +6 -6
  84. package/data/docs/types/Heading.json +8 -8
  85. package/data/docs/types/Icon.json +4 -4
  86. package/data/docs/types/IconButton.json +88 -88
  87. package/data/docs/types/IconToggleButton.json +72 -72
  88. package/data/docs/types/Image.json +30 -30
  89. package/data/docs/types/Indicator.json +6 -6
  90. package/data/docs/types/InlineSvg.json +2 -2
  91. package/data/docs/types/Item.json +6 -6
  92. package/data/docs/types/ItemActions.json +27 -0
  93. package/data/docs/types/ItemContent.json +27 -0
  94. package/data/docs/types/ItemDescription.json +27 -0
  95. package/data/docs/types/ItemFooter.json +27 -0
  96. package/data/docs/types/ItemGroup.json +12 -0
  97. package/data/docs/types/ItemGroupRoot.json +27 -0
  98. package/data/docs/types/ItemGroupSeparator.json +27 -0
  99. package/data/docs/types/ItemHeader.json +27 -0
  100. package/data/docs/types/ItemMedia.json +56 -0
  101. package/data/docs/types/ItemRoot.json +239 -0
  102. package/data/docs/types/ItemTitle.json +27 -0
  103. package/data/docs/types/Kbd.json +8 -8
  104. package/data/docs/types/Link.json +30 -30
  105. package/data/docs/types/ListIndicator.json +6 -6
  106. package/data/docs/types/ListItem.json +6 -6
  107. package/data/docs/types/ListRoot.json +10 -10
  108. package/data/docs/types/LoadingSpinner.json +2 -2
  109. package/data/docs/types/MakeElementFocusable.json +18 -18
  110. package/data/docs/types/Markdown.json +6 -6
  111. package/data/docs/types/MenuItem.json +63 -63
  112. package/data/docs/types/MenuRoot.json +56 -56
  113. package/data/docs/types/MenuSection.json +31 -31
  114. package/data/docs/types/MenuSubmenuTrigger.json +4 -4
  115. package/data/docs/types/MenuTrigger.json +89 -89
  116. package/data/docs/types/MultilineTextInput.json +104 -104
  117. package/data/docs/types/MultilineTextInputField.json +102 -102
  118. package/data/docs/types/NumberInput.json +86 -86
  119. package/data/docs/types/NumberInputField.json +82 -82
  120. package/data/docs/types/PageContentColumn.json +6 -6
  121. package/data/docs/types/PageContentRoot.json +6 -6
  122. package/data/docs/types/PasswordInput.json +100 -100
  123. package/data/docs/types/PasswordInputField.json +100 -100
  124. package/data/docs/types/ProgressBar.json +13 -13
  125. package/data/docs/types/RadioInputOption.json +56 -56
  126. package/data/docs/types/RadioInputRoot.json +48 -48
  127. package/data/docs/types/RangeCalendar.json +58 -58
  128. package/data/docs/types/RangeSlider.json +337 -0
  129. package/data/docs/types/RangeSliderProps.json +9 -0
  130. package/data/docs/types/Region.json +6 -6
  131. package/data/docs/types/RegionTarget.json +6 -6
  132. package/data/docs/types/RichTextInput.json +2 -2
  133. package/data/docs/types/Root.json +10 -10
  134. package/data/docs/types/Row.json +6 -6
  135. package/data/docs/types/ScrollArea.json +2 -2
  136. package/data/docs/types/SearchInput.json +106 -106
  137. package/data/docs/types/SearchInputField.json +102 -102
  138. package/data/docs/types/SelectOption.json +54 -54
  139. package/data/docs/types/SelectOptionGroup.json +18 -18
  140. package/data/docs/types/SelectOptions.json +64 -64
  141. package/data/docs/types/SelectRoot.json +92 -92
  142. package/data/docs/types/Separator.json +4 -4
  143. package/data/docs/types/SimpleGrid.json +28 -28
  144. package/data/docs/types/Skeleton.json +129 -0
  145. package/data/docs/types/SkeletonCircle.json +103 -0
  146. package/data/docs/types/SkeletonCircleProps.json +9 -0
  147. package/data/docs/types/SkeletonProps.json +9 -0
  148. package/data/docs/types/SkeletonText.json +62 -0
  149. package/data/docs/types/SkeletonTextProps.json +9 -0
  150. package/data/docs/types/Slider.json +337 -0
  151. package/data/docs/types/SplitButton.json +10 -10
  152. package/data/docs/types/Stack.json +2 -2
  153. package/data/docs/types/StepsNextTrigger.json +2 -2
  154. package/data/docs/types/StepsPrevTrigger.json +2 -2
  155. package/data/docs/types/StepsRoot.json +2 -2
  156. package/data/docs/types/StepsTrigger.json +2 -2
  157. package/data/docs/types/Switch.json +36 -36
  158. package/data/docs/types/TabNavItem.json +18 -18
  159. package/data/docs/types/TabNavRoot.json +2 -2
  160. package/data/docs/types/TableBody.json +6 -6
  161. package/data/docs/types/TableCaption.json +6 -6
  162. package/data/docs/types/TableCell.json +20 -20
  163. package/data/docs/types/TableColumn.json +8 -8
  164. package/data/docs/types/TableColumnGroup.json +8 -8
  165. package/data/docs/types/TableColumnHeader.json +18 -18
  166. package/data/docs/types/TableFooter.json +6 -6
  167. package/data/docs/types/TableHeader.json +6 -6
  168. package/data/docs/types/TableRoot.json +32 -32
  169. package/data/docs/types/TableRow.json +6 -6
  170. package/data/docs/types/TableScrollArea.json +6 -6
  171. package/data/docs/types/TabsTab.json +2 -2
  172. package/data/docs/types/TagGroupRoot.json +24 -24
  173. package/data/docs/types/TagGroupTag.json +56 -56
  174. package/data/docs/types/TagGroupTagList.json +15 -15
  175. package/data/docs/types/Text.json +8 -8
  176. package/data/docs/types/TextInput.json +102 -102
  177. package/data/docs/types/TextInputField.json +100 -100
  178. package/data/docs/types/TimeInput.json +68 -68
  179. package/data/docs/types/ToggleButton.json +74 -74
  180. package/data/docs/types/ToggleButtonGroupButton.json +32 -32
  181. package/data/docs/types/ToggleButtonGroupRoot.json +20 -20
  182. package/data/docs/types/Toolbar.json +9 -9
  183. package/data/docs/types/TooltipContent.json +28 -28
  184. package/data/docs/types/TooltipRoot.json +16 -16
  185. package/data/docs/types/TreeIndicator.json +82 -82
  186. package/data/docs/types/TreeItem.json +100 -51
  187. package/data/docs/types/TreeRoot.json +57 -57
  188. package/data/docs/types/Trigger.json +4 -4
  189. package/data/docs/types/VisuallyHidden.json +6 -6
  190. package/data/docs/types/createItemsFromCsvDrop.json +4 -4
  191. package/data/docs/types/createItemsFromDirectoryDrop.json +4 -4
  192. package/data/docs/types/createItemsFromFileDrop.json +4 -4
  193. package/data/docs/types/createItemsFromImageDrop.json +4 -4
  194. package/data/docs/types/createItemsFromJsonDrop.json +4 -4
  195. package/data/docs/types/manifest.json +28 -0
  196. package/data/docs/types/useRegion.json +2 -2
  197. package/data/docs/types/useTree.json +24 -24
  198. package/data/tokens.json +42 -0
  199. package/package.json +7 -7
@@ -0,0 +1,413 @@
1
+ {
2
+ "meta": {
3
+ "id": "Components-ItemGroup",
4
+ "title": "Item group",
5
+ "exportName": "ItemGroup",
6
+ "description": "A container that groups a set of Item rows into a vertical stack, with optional dividers between them.",
7
+ "lifecycleState": "Beta",
8
+ "order": 999,
9
+ "repoPath": "packages/nimbus/src/components/item-group/item-group.mdx",
10
+ "menu": [
11
+ "Components",
12
+ "Data Display",
13
+ "Item group"
14
+ ],
15
+ "route": "components/data-display/item-group",
16
+ "tags": [
17
+ "component",
18
+ "item-group",
19
+ "group",
20
+ "list",
21
+ "container",
22
+ "rows",
23
+ "separator"
24
+ ],
25
+ "toc": [
26
+ {
27
+ "value": "Overview",
28
+ "href": "#overview",
29
+ "depth": 2,
30
+ "numbering": [
31
+ 1,
32
+ 1
33
+ ],
34
+ "parent": "root"
35
+ },
36
+ {
37
+ "value": "Resources",
38
+ "href": "#resources",
39
+ "depth": 3,
40
+ "numbering": [
41
+ 1,
42
+ 1,
43
+ 1
44
+ ],
45
+ "parent": "root"
46
+ },
47
+ {
48
+ "value": "Variables",
49
+ "href": "#variables",
50
+ "depth": 2,
51
+ "numbering": [
52
+ 1,
53
+ 2
54
+ ],
55
+ "parent": "root"
56
+ },
57
+ {
58
+ "value": "Rows with separators",
59
+ "href": "#rows-with-separators",
60
+ "depth": 3,
61
+ "numbering": [
62
+ 1,
63
+ 2,
64
+ 1
65
+ ],
66
+ "parent": "root"
67
+ },
68
+ {
69
+ "value": "Grouped navigation rows",
70
+ "href": "#grouped-navigation-rows",
71
+ "depth": 3,
72
+ "numbering": [
73
+ 1,
74
+ 2,
75
+ 2
76
+ ],
77
+ "parent": "root"
78
+ }
79
+ ],
80
+ "layout": "app-frame",
81
+ "tabs": [
82
+ {
83
+ "key": "overview",
84
+ "title": "Overview",
85
+ "order": 0
86
+ },
87
+ {
88
+ "key": "guidelines",
89
+ "title": "Guidelines",
90
+ "order": 2
91
+ },
92
+ {
93
+ "key": "dev",
94
+ "title": "Implementation",
95
+ "order": 3
96
+ },
97
+ {
98
+ "key": "a11y",
99
+ "title": "Accessibility",
100
+ "order": 4
101
+ }
102
+ ]
103
+ },
104
+ "mdx": "\n## Overview\n\n`ItemGroup` visually groups a set of `Item` rows into a single vertical stack,\nwith an optional divider between rows. It is a **peer** of `Item` — it wraps\n`Item.Root` rows from the outside rather than nesting inside one — so it ships\nas its own component instead of an `Item.*` part.\n\n- `ItemGroup.Root` — the container. Lays its children out as a vertical stack;\n it does not add spacing or a border of its own beyond the rows placed inside\n it.\n- `ItemGroup.Separator` — a horizontal divider placed between rows.\n\nGrouping is purely visual: `ItemGroup.Root` does not impose a list semantic on\nits children, so any mix of presentational and linked `Item.Root` rows — divided\nby as many or as few separators as needed — is valid. See the **Accessibility\ntab** for why no `role=\"list\"` is applied.\n\n### Resources\n\nDeep dive into implementation details and access the Nimbus design library.\n\n[Figma library](https://www.figma.com/design/gHbAJGfcrCv7f2bgzUQgHq/NIMBUS-Guidelines?m=dev)\n\n## Variables\n\nGet familiar with the features.\n\n### Rows with separators\n\nPlace `ItemGroup.Separator` between rows to divide related but distinct pieces\nof information within the group.\n\n```jsx live\nconst App = () => (\n <ItemGroup.Root>\n <Item.Root>\n <Item.Media variant=\"icon\">\n <Icons.Person />\n </Item.Media>\n <Item.Content>\n <Item.Title>Profile</Item.Title>\n <Item.Description>Name, avatar, and contact details</Item.Description>\n </Item.Content>\n </Item.Root>\n <ItemGroup.Separator />\n <Item.Root>\n <Item.Media variant=\"icon\">\n <Icons.Notifications />\n </Item.Media>\n <Item.Content>\n <Item.Title>Notifications</Item.Title>\n <Item.Description>Email and push preferences</Item.Description>\n </Item.Content>\n </Item.Root>\n <ItemGroup.Separator />\n <Item.Root>\n <Item.Media variant=\"icon\">\n <Icons.Settings />\n </Item.Media>\n <Item.Content>\n <Item.Title>Settings</Item.Title>\n <Item.Description>Workspace configuration</Item.Description>\n </Item.Content>\n </Item.Root>\n </ItemGroup.Root>\n);\n```\n\n### Grouped navigation rows\n\nRows can be links (`Item.Root href=\"...\"`) just as easily as static rows; the\ngroup divides them the same way either way.\n\n```jsx live\nconst App = () => (\n <ItemGroup.Root>\n <Item.Root href=\"#profile\">\n <Item.Content>\n <Item.Title>Profile</Item.Title>\n </Item.Content>\n </Item.Root>\n <ItemGroup.Separator />\n <Item.Root href=\"#settings\">\n <Item.Content>\n <Item.Title>Settings</Item.Title>\n </Item.Content>\n </Item.Root>\n </ItemGroup.Root>\n);\n```\n",
105
+ "views": {
106
+ "overview": {
107
+ "mdx": "\n## Overview\n\n`ItemGroup` visually groups a set of `Item` rows into a single vertical stack,\nwith an optional divider between rows. It is a **peer** of `Item` — it wraps\n`Item.Root` rows from the outside rather than nesting inside one — so it ships\nas its own component instead of an `Item.*` part.\n\n- `ItemGroup.Root` — the container. Lays its children out as a vertical stack;\n it does not add spacing or a border of its own beyond the rows placed inside\n it.\n- `ItemGroup.Separator` — a horizontal divider placed between rows.\n\nGrouping is purely visual: `ItemGroup.Root` does not impose a list semantic on\nits children, so any mix of presentational and linked `Item.Root` rows — divided\nby as many or as few separators as needed — is valid. See the **Accessibility\ntab** for why no `role=\"list\"` is applied.\n\n### Resources\n\nDeep dive into implementation details and access the Nimbus design library.\n\n[Figma library](https://www.figma.com/design/gHbAJGfcrCv7f2bgzUQgHq/NIMBUS-Guidelines?m=dev)\n\n## Variables\n\nGet familiar with the features.\n\n### Rows with separators\n\nPlace `ItemGroup.Separator` between rows to divide related but distinct pieces\nof information within the group.\n\n```jsx live\nconst App = () => (\n <ItemGroup.Root>\n <Item.Root>\n <Item.Media variant=\"icon\">\n <Icons.Person />\n </Item.Media>\n <Item.Content>\n <Item.Title>Profile</Item.Title>\n <Item.Description>Name, avatar, and contact details</Item.Description>\n </Item.Content>\n </Item.Root>\n <ItemGroup.Separator />\n <Item.Root>\n <Item.Media variant=\"icon\">\n <Icons.Notifications />\n </Item.Media>\n <Item.Content>\n <Item.Title>Notifications</Item.Title>\n <Item.Description>Email and push preferences</Item.Description>\n </Item.Content>\n </Item.Root>\n <ItemGroup.Separator />\n <Item.Root>\n <Item.Media variant=\"icon\">\n <Icons.Settings />\n </Item.Media>\n <Item.Content>\n <Item.Title>Settings</Item.Title>\n <Item.Description>Workspace configuration</Item.Description>\n </Item.Content>\n </Item.Root>\n </ItemGroup.Root>\n);\n```\n\n### Grouped navigation rows\n\nRows can be links (`Item.Root href=\"...\"`) just as easily as static rows; the\ngroup divides them the same way either way.\n\n```jsx live\nconst App = () => (\n <ItemGroup.Root>\n <Item.Root href=\"#profile\">\n <Item.Content>\n <Item.Title>Profile</Item.Title>\n </Item.Content>\n </Item.Root>\n <ItemGroup.Separator />\n <Item.Root href=\"#settings\">\n <Item.Content>\n <Item.Title>Settings</Item.Title>\n </Item.Content>\n </Item.Root>\n </ItemGroup.Root>\n);\n```\n",
108
+ "toc": [
109
+ {
110
+ "value": "Overview",
111
+ "href": "#overview",
112
+ "depth": 2,
113
+ "numbering": [
114
+ 1,
115
+ 1
116
+ ],
117
+ "parent": "root"
118
+ },
119
+ {
120
+ "value": "Resources",
121
+ "href": "#resources",
122
+ "depth": 3,
123
+ "numbering": [
124
+ 1,
125
+ 1,
126
+ 1
127
+ ],
128
+ "parent": "root"
129
+ },
130
+ {
131
+ "value": "Variables",
132
+ "href": "#variables",
133
+ "depth": 2,
134
+ "numbering": [
135
+ 1,
136
+ 2
137
+ ],
138
+ "parent": "root"
139
+ },
140
+ {
141
+ "value": "Rows with separators",
142
+ "href": "#rows-with-separators",
143
+ "depth": 3,
144
+ "numbering": [
145
+ 1,
146
+ 2,
147
+ 1
148
+ ],
149
+ "parent": "root"
150
+ },
151
+ {
152
+ "value": "Grouped navigation rows",
153
+ "href": "#grouped-navigation-rows",
154
+ "depth": 3,
155
+ "numbering": [
156
+ 1,
157
+ 2,
158
+ 2
159
+ ],
160
+ "parent": "root"
161
+ }
162
+ ]
163
+ },
164
+ "a11y": {
165
+ "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\n### Grouping role: `group`, not `list`\n\n`ItemGroup.Root` exposes its contents to assistive technology with\n`role=\"group\"`, which signals that the rows belong together. It deliberately\ndoes **not** use `role=\"list\"`: the ARIA `list` role carries an\n`aria-required-children` constraint — every child must be a `listitem`, and no\nother content is permitted — which `ItemGroup.Root` cannot guarantee, because\nit composes freely with any mix of `Item.Root` rows and `ItemGroup.Separator`\ndividers. `role=\"list\"` would produce an invalid accessibility tree the moment\na separator (or anything else) sits between rows; `role=\"group\"` carries no\nsuch constraint, so each `Item.Root` keeps its own semantics (a plain row, or a\nlink when given `href`) unaffected by the wrapper.\n\nGive the group an accessible name with `aria-label` or `aria-labelledby` when\nthe grouping isn't clear from surrounding context. The role is an overridable\ndefault — pass your own `role` to replace it.\n\n```jsx live\nconst App = () => (\n <ItemGroup.Root aria-label=\"Account\">\n <Item.Root href=\"#profile\">\n <Item.Content>\n <Item.Title>Profile</Item.Title>\n </Item.Content>\n </Item.Root>\n <ItemGroup.Separator />\n <Item.Root href=\"#settings\">\n <Item.Content>\n <Item.Title>Settings</Item.Title>\n </Item.Content>\n </Item.Root>\n </ItemGroup.Root>\n);\n```\n\n### The separator is not a focus stop\n\n`ItemGroup.Separator` sets `role=\"separator\"` and\n`aria-orientation=\"horizontal\"`. It is a purely visual, static divider — it\ndoes not receive `tabIndex` and is not part of the focus order. This matches\nthe [WAI-ARIA `separator` role](https://www.w3.org/TR/wai-aria-1.2/#separator):\na separator is only focusable when it is also used to resize adjacent panes,\nwhich `ItemGroup.Separator` does not do here.\n\n### If you need a listbox instead\n\nIf the rows are actually selectable options rather than a purely visual\ngrouping, `ItemGroup` is not the right primitive — reach for a\nselection-aware component (e.g. `List`, `Menu`) that manages\n`listitem`/`option` semantics and keyboard navigation for you.\n\n### Accessibility standards\n\n- **Info and relationships:** `ItemGroup.Root` exposes `role=\"group\"` to tie\n its rows together without an `aria-required-children` constraint, so a mix of\n rows and separators stays a valid accessibility tree.\n- **Name, role, value:** `ItemGroup.Root` is a `group`; give it an accessible\n name with `aria-label`/`aria-labelledby` when the grouping isn't clear from\n context. `ItemGroup.Separator` exposes `role=\"separator\"` with\n `aria-orientation=\"horizontal\"` and carries no accessible name, because it\n conveys no information beyond the visual divide.\n- **Focus order:** neither `ItemGroup.Root` nor `ItemGroup.Separator` is a\n focus stop; keyboard focus moves directly between the interactive content\n inside each `Item.Root` (or the row itself, when it is a link).\n- **Semantic HTML:** each `Item.Root` keeps its own role — a plain container,\n or an `<a>` when given `href` — unaffected by the group.\n\n### Resources\n\n- [WAI-ARIA: `group` role](https://www.w3.org/TR/wai-aria-1.2/#group)\n- [WAI-ARIA: `list` role](https://www.w3.org/TR/wai-aria-1.2/#list)\n- [WAI-ARIA: `separator` role](https://www.w3.org/TR/wai-aria-1.2/#separator)\n",
166
+ "toc": [
167
+ {
168
+ "value": "Accessibility",
169
+ "href": "#accessibility",
170
+ "depth": 2,
171
+ "numbering": [
172
+ 1,
173
+ 1
174
+ ],
175
+ "parent": "root"
176
+ },
177
+ {
178
+ "value": "Grouping role: group, not list",
179
+ "href": "#grouping-role-group-not-list",
180
+ "depth": 3,
181
+ "numbering": [
182
+ 1,
183
+ 1,
184
+ 1
185
+ ],
186
+ "parent": "root"
187
+ },
188
+ {
189
+ "value": "The separator is not a focus stop",
190
+ "href": "#the-separator-is-not-a-focus-stop",
191
+ "depth": 3,
192
+ "numbering": [
193
+ 1,
194
+ 1,
195
+ 2
196
+ ],
197
+ "parent": "root"
198
+ },
199
+ {
200
+ "value": "If you need a listbox instead",
201
+ "href": "#if-you-need-a-listbox-instead",
202
+ "depth": 3,
203
+ "numbering": [
204
+ 1,
205
+ 1,
206
+ 3
207
+ ],
208
+ "parent": "root"
209
+ },
210
+ {
211
+ "value": "Accessibility standards",
212
+ "href": "#accessibility-standards",
213
+ "depth": 3,
214
+ "numbering": [
215
+ 1,
216
+ 1,
217
+ 4
218
+ ],
219
+ "parent": "root"
220
+ },
221
+ {
222
+ "value": "Resources",
223
+ "href": "#resources",
224
+ "depth": 3,
225
+ "numbering": [
226
+ 1,
227
+ 1,
228
+ 5
229
+ ],
230
+ "parent": "root"
231
+ }
232
+ ]
233
+ },
234
+ "dev": {
235
+ "mdx": "\n## Getting started\n\n### Import\n\n```tsx\nimport { Item, ItemGroup } from '@commercetools/nimbus';\n```\n\n### Basic usage\n\n`ItemGroup` is a compound component: wrap `Item.Root` rows in\n`ItemGroup.Root`, and place `ItemGroup.Separator` between the rows that should\nbe visually divided.\n\n```jsx live-dev\nconst App = () => (\n <ItemGroup.Root>\n <Item.Root>\n <Item.Content>\n <Item.Title>Profile</Item.Title>\n </Item.Content>\n </Item.Root>\n <ItemGroup.Separator />\n <Item.Root>\n <Item.Content>\n <Item.Title>Settings</Item.Title>\n </Item.Content>\n </Item.Root>\n </ItemGroup.Root>\n)\n```\n\n## Usage examples\n\n### Rows with media and separators\n\n`ItemGroup.Root` does not restyle the rows it wraps — each `Item.Root` keeps\nits own `variant`/`size`. Use `ItemGroup.Separator` only between rows, never\nbefore the first or after the last.\n\n```jsx live-dev\nconst App = () => (\n <ItemGroup.Root>\n <Item.Root>\n <Item.Media variant=\"icon\">\n <Icons.Person />\n </Item.Media>\n <Item.Content>\n <Item.Title>Profile</Item.Title>\n <Item.Description>Name, avatar, and contact details</Item.Description>\n </Item.Content>\n </Item.Root>\n <ItemGroup.Separator />\n <Item.Root>\n <Item.Media variant=\"icon\">\n <Icons.Notifications />\n </Item.Media>\n <Item.Content>\n <Item.Title>Notifications</Item.Title>\n <Item.Description>Email and push preferences</Item.Description>\n </Item.Content>\n </Item.Root>\n <ItemGroup.Separator />\n <Item.Root>\n <Item.Media variant=\"icon\">\n <Icons.Settings />\n </Item.Media>\n <Item.Content>\n <Item.Title>Settings</Item.Title>\n <Item.Description>Workspace configuration</Item.Description>\n </Item.Content>\n </Item.Root>\n </ItemGroup.Root>\n)\n```\n\n### Grouped link rows\n\nGive `Item.Root` an `href` to upgrade a row to an accessible link;\n`ItemGroup` composes with link rows the same way it composes with\npresentational ones.\n\n```jsx live-dev\nconst App = () => (\n <ItemGroup.Root>\n <Item.Root href=\"#profile\">\n <Item.Content>\n <Item.Title>Profile</Item.Title>\n </Item.Content>\n </Item.Root>\n <ItemGroup.Separator />\n <Item.Root href=\"#settings\">\n <Item.Content>\n <Item.Title>Settings</Item.Title>\n </Item.Content>\n </Item.Root>\n </ItemGroup.Root>\n)\n```\n\n## Component requirements\n\n- Place `ItemGroup.Separator` only _between_ `Item.Root` rows — never before\n the first row or after the last.\n- `ItemGroup.Root` exposes its rows as a `role=\"group\"` (an overridable\n default). It does not set `role=\"list\"` — see Accessibility for why — so it\n never constrains what you place inside it.\n- `ItemGroup.Root` only affects layout (a vertical stack); it does not read or\n override each row's own `variant`/`size`.\n\n## Accessibility\n\n`ItemGroup.Root` exposes `role=\"group\"` so assistive tech announces the rows as\nbelonging together; give it a name with `aria-label`/`aria-labelledby` when the\ngrouping isn't clear from context. It deliberately does not use `role=\"list\"`:\nthat role requires every child to be a `listitem` and forbids other content,\nsuch as a separator, which the free-composition API here can't guarantee.\n`ItemGroup.Separator` sets `role=\"separator\"` and `aria-orientation=\"horizontal\"`;\nit is a static, non-focusable divider. See the **Accessibility tab** for the\nfull rationale.\n\n## API reference\n\n<PropsTable id=\"ItemGroup\" />\n\n## Testing your implementation\n\nThese examples demonstrate how to test your implementation when using\nItemGroup within your application. As the component's internal functionality\nis already tested by Nimbus, these patterns help you verify your integration\nand application-specific logic.\n\n### Async Data & State Management\n\nPopulate a group from data fetched after mount, interleave separators between rows, and update the group from a row action\n\n```tsx\nimport { describe, it, expect } from \"vitest\";\nimport { Fragment, useEffect, useState } from \"react\";\nimport { render, screen } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport {\n Item,\n ItemGroup,\n IconButton,\n NimbusProvider,\n} from \"@commercetools/nimbus\";\nimport { Delete } from \"@commercetools/nimbus-icons\";\n\ndescribe(\"ItemGroup - Async data and state management\", () => {\n it(\"renders rows once data resolves and removes one via a row action\", async () => {\n const user = userEvent.setup();\n\n type Resource = { id: string; title: string; description: string };\n\n const fetchResources = (): Promise<Resource[]> =>\n Promise.resolve([\n { id: \"spec\", title: \"Design spec\", description: \"PDF · 2.4 MB\" },\n { id: \"assets\", title: \"Brand assets\", description: \"ZIP · 18 MB\" },\n ]);\n\n const FileGroup = () => {\n const [resources, setResources] = useState<Resource[] | null>(null);\n\n useEffect(() => {\n let active = true;\n void fetchResources().then((data) => {\n if (active) setResources(data);\n });\n return () => {\n active = false;\n };\n }, []);\n\n if (!resources) return <span>Loading files…</span>;\n\n return (\n <ItemGroup.Root aria-label=\"Files\">\n {resources.map((resource, index) => (\n <Fragment key={resource.id}>\n {index > 0 && <ItemGroup.Separator />}\n <Item.Root>\n <Item.Content>\n <Item.Title>{resource.title}</Item.Title>\n <Item.Description>{resource.description}</Item.Description>\n </Item.Content>\n <Item.Actions>\n <IconButton\n aria-label={`Remove ${resource.title}`}\n size=\"xs\"\n variant=\"ghost\"\n onPress={() =>\n setResources((prev) =>\n (prev ?? []).filter((item) => item.id !== resource.id)\n )\n }\n >\n <Delete />\n </IconButton>\n </Item.Actions>\n </Item.Root>\n </Fragment>\n ))}\n </ItemGroup.Root>\n );\n };\n\n render(\n <NimbusProvider>\n <FileGroup />\n </NimbusProvider>\n );\n\n // Rows appear only after the async fetch resolves.\n expect(await screen.findByText(\"Design spec\")).toBeInTheDocument();\n expect(screen.getByText(\"Brand assets\")).toBeInTheDocument();\n\n // A per-row action updates the group's state.\n await user.click(\n screen.getByRole(\"button\", { name: \"Remove Design spec\" })\n );\n\n expect(screen.queryByText(\"Design spec\")).not.toBeInTheDocument();\n expect(screen.getByText(\"Brand assets\")).toBeInTheDocument();\n });\n});\n```\n\n\n## Resources\n\n- [Storybook](https://nimbus-storybook.vercel.app/?path=/docs/components-itemgroup--docs)\n",
236
+ "toc": [
237
+ {
238
+ "value": "Getting started",
239
+ "href": "#getting-started",
240
+ "depth": 2,
241
+ "numbering": [
242
+ 1,
243
+ 1
244
+ ],
245
+ "parent": "root"
246
+ },
247
+ {
248
+ "value": "Import",
249
+ "href": "#import",
250
+ "depth": 3,
251
+ "numbering": [
252
+ 1,
253
+ 1,
254
+ 1
255
+ ],
256
+ "parent": "root"
257
+ },
258
+ {
259
+ "value": "Basic usage",
260
+ "href": "#basic-usage",
261
+ "depth": 3,
262
+ "numbering": [
263
+ 1,
264
+ 1,
265
+ 2
266
+ ],
267
+ "parent": "root"
268
+ },
269
+ {
270
+ "value": "Usage examples",
271
+ "href": "#usage-examples",
272
+ "depth": 2,
273
+ "numbering": [
274
+ 1,
275
+ 2
276
+ ],
277
+ "parent": "root"
278
+ },
279
+ {
280
+ "value": "Rows with media and separators",
281
+ "href": "#rows-with-media-and-separators",
282
+ "depth": 3,
283
+ "numbering": [
284
+ 1,
285
+ 2,
286
+ 1
287
+ ],
288
+ "parent": "root"
289
+ },
290
+ {
291
+ "value": "Grouped link rows",
292
+ "href": "#grouped-link-rows",
293
+ "depth": 3,
294
+ "numbering": [
295
+ 1,
296
+ 2,
297
+ 2
298
+ ],
299
+ "parent": "root"
300
+ },
301
+ {
302
+ "value": "Component requirements",
303
+ "href": "#component-requirements",
304
+ "depth": 2,
305
+ "numbering": [
306
+ 1,
307
+ 3
308
+ ],
309
+ "parent": "root"
310
+ },
311
+ {
312
+ "value": "Accessibility",
313
+ "href": "#accessibility",
314
+ "depth": 2,
315
+ "numbering": [
316
+ 1,
317
+ 4
318
+ ],
319
+ "parent": "root"
320
+ },
321
+ {
322
+ "value": "API reference",
323
+ "href": "#api-reference",
324
+ "depth": 2,
325
+ "numbering": [
326
+ 1,
327
+ 5
328
+ ],
329
+ "parent": "root"
330
+ },
331
+ {
332
+ "value": "Testing your implementation",
333
+ "href": "#testing-your-implementation",
334
+ "depth": 2,
335
+ "numbering": [
336
+ 1,
337
+ 6
338
+ ],
339
+ "parent": "root"
340
+ },
341
+ {
342
+ "value": "Async Data & State Management",
343
+ "href": "#async-data--state-management",
344
+ "depth": 3,
345
+ "numbering": [
346
+ 1,
347
+ 6,
348
+ 1
349
+ ],
350
+ "parent": "root"
351
+ },
352
+ {
353
+ "value": "Resources",
354
+ "href": "#resources",
355
+ "depth": 2,
356
+ "numbering": [
357
+ 1,
358
+ 7
359
+ ],
360
+ "parent": "root"
361
+ }
362
+ ]
363
+ },
364
+ "guidelines": {
365
+ "mdx": "\n## Guidelines\n\n`ItemGroup` guidelines focus on using visual grouping and separators to signal\nthat a set of `Item` rows belong to the same category, without changing how\neach row behaves on its own.\n\n### Best practices\n\n- **Group related rows only:** Put rows in the same `ItemGroup.Root` because\n they belong to the same category or section — not simply because they sit\n next to each other on the page.\n- **Use separators sparingly:** A separator signals a boundary between\n subsections within the group. Don't add one between every row if the whole\n group is already a single category.\n- **Don't restyle individual rows to compensate:** `ItemGroup.Root` only\n stacks rows vertically; each `Item.Root` keeps its own `variant` and `size`.\n Pick a consistent `variant`/`size` across the rows in a group rather than\n varying it row-by-row.\n- **Keep rows self-contained:** Each `Item.Root` should make sense read on its\n own — a group is a visual convenience, not a shared sentence split across\n rows.\n\n### Usage\n\n> [!TIP]\\\n> When to use\n\n- **A settings or preferences list:** A vertical stack of related,\n individually navigable rows (Profile, Notifications, Settings…).\n- **A short list of linked resources:** Rows that each navigate elsewhere,\n optionally divided into sections by separators.\n- **A summary list of key-value rows:** Presentational rows (no interaction)\n that belong together, such as an order's line items.\n\n> [!CAUTION]\\\n> When not to use\n\n- **Selectable options:** If a user needs to select one or more rows (a\n listbox, a menu), use a selection-aware component instead — `ItemGroup` has\n no selection state or keyboard navigation of its own.\n- **A single row:** If there's only one row, skip the group — it adds a\n wrapper with no visual benefit.\n- **Unrelated content:** Don't reach for `ItemGroup` just to stack arbitrary\n content vertically; use `Stack` for that and reserve `ItemGroup` for a set\n of `Item` rows.\n\n```jsx live\nconst App = () => (\n <ItemGroup.Root>\n <Item.Root>\n <Item.Media variant=\"icon\">\n <Icons.Person />\n </Item.Media>\n <Item.Content>\n <Item.Title>Profile</Item.Title>\n <Item.Description>Name, avatar, and contact details</Item.Description>\n </Item.Content>\n </Item.Root>\n <ItemGroup.Separator />\n <Item.Root>\n <Item.Media variant=\"icon\">\n <Icons.Notifications />\n </Item.Media>\n <Item.Content>\n <Item.Title>Notifications</Item.Title>\n <Item.Description>Email and push preferences</Item.Description>\n </Item.Content>\n </Item.Root>\n </ItemGroup.Root>\n);\n```\n\n### Composition\n\nSeparators divide rows from each other — they don't set the group apart from\nits surroundings.\n\n> [!CAUTION]\\\n> **Don't**\n>\n> - Don't lead or trail the group with a separator.\n> - Don't place two separators back-to-back — there's no row between them to\n> divide.\n\n```jsx live\nconst App = () => (\n <ItemGroup.Root>\n <ItemGroup.Separator />\n <Item.Root>\n <Item.Content>\n <Item.Title>Profile</Item.Title>\n </Item.Content>\n </Item.Root>\n <Item.Root>\n <Item.Content>\n <Item.Title>Settings</Item.Title>\n </Item.Content>\n </Item.Root>\n </ItemGroup.Root>\n);\n```\n",
366
+ "toc": [
367
+ {
368
+ "value": "Guidelines",
369
+ "href": "#guidelines",
370
+ "depth": 2,
371
+ "numbering": [
372
+ 1,
373
+ 1
374
+ ],
375
+ "parent": "root"
376
+ },
377
+ {
378
+ "value": "Best practices",
379
+ "href": "#best-practices",
380
+ "depth": 3,
381
+ "numbering": [
382
+ 1,
383
+ 1,
384
+ 1
385
+ ],
386
+ "parent": "root"
387
+ },
388
+ {
389
+ "value": "Usage",
390
+ "href": "#usage",
391
+ "depth": 3,
392
+ "numbering": [
393
+ 1,
394
+ 1,
395
+ 2
396
+ ],
397
+ "parent": "root"
398
+ },
399
+ {
400
+ "value": "Composition",
401
+ "href": "#composition",
402
+ "depth": 3,
403
+ "numbering": [
404
+ 1,
405
+ 1,
406
+ 3
407
+ ],
408
+ "parent": "root"
409
+ }
410
+ ]
411
+ }
412
+ }
413
+ }