@commercetools/nimbus-mcp 0.1.0 → 2.10.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 (450) hide show
  1. package/README.md +63 -14
  2. package/data/docs/route-manifest.json +10913 -0
  3. package/data/docs/routes/components-accessibility-visually-hidden.json +388 -0
  4. package/data/docs/routes/components-accessibility.json +34 -0
  5. package/data/docs/routes/components-buttons-button.json +715 -0
  6. package/data/docs/routes/components-buttons-icon-button.json +852 -0
  7. package/data/docs/routes/components-buttons-icon-toggle-button.json +594 -0
  8. package/data/docs/routes/components-buttons-split-button.json +670 -0
  9. package/data/docs/routes/components-buttons-toggle-button-group.json +722 -0
  10. package/data/docs/routes/components-buttons-toggle-button.json +689 -0
  11. package/data/docs/routes/components-buttons.json +36 -0
  12. package/data/docs/routes/components-data-display-badge.json +555 -0
  13. package/data/docs/routes/components-data-display-card.json +338 -0
  14. package/data/docs/routes/components-data-display-data-table.json +855 -0
  15. package/data/docs/routes/components-data-display-draggable-list.json +596 -0
  16. package/data/docs/routes/components-data-display-table.json +472 -0
  17. package/data/docs/routes/components-data-display-tag-group.json +535 -0
  18. package/data/docs/routes/components-data-display.json +34 -0
  19. package/data/docs/routes/components-feedback-alert.json +696 -0
  20. package/data/docs/routes/components-feedback-dialog.json +682 -0
  21. package/data/docs/routes/components-feedback-drawer.json +600 -0
  22. package/data/docs/routes/components-feedback-loading-spinner.json +415 -0
  23. package/data/docs/routes/components-feedback-progress-bar.json +661 -0
  24. package/data/docs/routes/components-feedback-toast.json +1040 -0
  25. package/data/docs/routes/components-feedback-tooltip.json +510 -0
  26. package/data/docs/routes/components-feedback.json +34 -0
  27. package/data/docs/routes/components-forms-field-errors.json +557 -0
  28. package/data/docs/routes/components-forms-form-field.json +848 -0
  29. package/data/docs/routes/components-forms-group.json +427 -0
  30. package/data/docs/routes/components-forms-localized-field.json +770 -0
  31. package/data/docs/routes/components-forms.json +37 -0
  32. package/data/docs/routes/components-inputs-calendar.json +611 -0
  33. package/data/docs/routes/components-inputs-checkbox.json +774 -0
  34. package/data/docs/routes/components-inputs-combo-box.json +761 -0
  35. package/data/docs/routes/components-inputs-date-input.json +628 -0
  36. package/data/docs/routes/components-inputs-date-picker.json +709 -0
  37. package/data/docs/routes/components-inputs-date-range-picker.json +599 -0
  38. package/data/docs/routes/components-inputs-money-input.json +721 -0
  39. package/data/docs/routes/components-inputs-multiline-text-input.json +611 -0
  40. package/data/docs/routes/components-inputs-number-input.json +647 -0
  41. package/data/docs/routes/components-inputs-password-input.json +576 -0
  42. package/data/docs/routes/components-inputs-radio-input.json +583 -0
  43. package/data/docs/routes/components-inputs-range-calendar.json +607 -0
  44. package/data/docs/routes/components-inputs-rich-text-input.json +599 -0
  45. package/data/docs/routes/components-inputs-scoped-search-input.json +570 -0
  46. package/data/docs/routes/components-inputs-search-input.json +588 -0
  47. package/data/docs/routes/components-inputs-select-input.json +960 -0
  48. package/data/docs/routes/components-inputs-switch.json +720 -0
  49. package/data/docs/routes/components-inputs-text-input.json +566 -0
  50. package/data/docs/routes/components-inputs-time-input.json +775 -0
  51. package/data/docs/routes/components-inputs.json +34 -0
  52. package/data/docs/routes/components-layout-box.json +501 -0
  53. package/data/docs/routes/components-layout-defaultpage.json +748 -0
  54. package/data/docs/routes/components-layout-flex.json +587 -0
  55. package/data/docs/routes/components-layout-grid.json +393 -0
  56. package/data/docs/routes/components-layout-modalpage.json +716 -0
  57. package/data/docs/routes/components-layout-pagecontent.json +673 -0
  58. package/data/docs/routes/components-layout-separator.json +461 -0
  59. package/data/docs/routes/components-layout-simple-grid.json +519 -0
  60. package/data/docs/routes/components-layout-spacer.json +573 -0
  61. package/data/docs/routes/components-layout-stack.json +481 -0
  62. package/data/docs/routes/components-layout.json +34 -0
  63. package/data/docs/routes/components-media-avatar.json +427 -0
  64. package/data/docs/routes/components-media-icon.json +663 -0
  65. package/data/docs/routes/components-media-image.json +511 -0
  66. package/data/docs/routes/components-media-inline-svg.json +586 -0
  67. package/data/docs/routes/components-media.json +34 -0
  68. package/data/docs/routes/components-navigation-accordion.json +643 -0
  69. package/data/docs/routes/components-navigation-collapsible-motion.json +628 -0
  70. package/data/docs/routes/components-navigation-link.json +554 -0
  71. package/data/docs/routes/components-navigation-menu.json +546 -0
  72. package/data/docs/routes/components-navigation-pagination.json +502 -0
  73. package/data/docs/routes/components-navigation-steps.json +629 -0
  74. package/data/docs/routes/components-navigation-tabnav.json +546 -0
  75. package/data/docs/routes/components-navigation-tabs.json +635 -0
  76. package/data/docs/routes/components-navigation-toolbar.json +549 -0
  77. package/data/docs/routes/components-navigation.json +34 -0
  78. package/data/docs/routes/components-typography-code.json +39 -0
  79. package/data/docs/routes/components-typography-heading.json +402 -0
  80. package/data/docs/routes/components-typography-kbd.json +399 -0
  81. package/data/docs/routes/components-typography-list.json +593 -0
  82. package/data/docs/routes/components-typography-text.json +444 -0
  83. package/data/docs/routes/components-typography.json +34 -0
  84. package/data/docs/routes/components-utilities-nimbus-i18n-provider.json +295 -0
  85. package/data/docs/routes/components-utilities-nimbus-provider.json +663 -0
  86. package/data/docs/routes/components-utilities.json +34 -0
  87. package/data/docs/routes/components.json +33 -0
  88. package/data/docs/routes/home-contribute-adrs-adr0001-consumer-component-apis.json +314 -0
  89. package/data/docs/routes/home-contribute-adrs-adr0002-compound-component-extraction.json +160 -0
  90. package/data/docs/routes/home-contribute-adrs-adr0003-component-lifecycle-states.json +460 -0
  91. package/data/docs/routes/home-contribute-adrs.json +205 -0
  92. package/data/docs/routes/home-contribute-development-setup.json +213 -0
  93. package/data/docs/routes/home-contribute-stats.json +36 -0
  94. package/data/docs/routes/home-contribute.json +36 -0
  95. package/data/docs/routes/home-design-tokens-aspect-ratios.json +36 -0
  96. package/data/docs/routes/home-design-tokens-borders.json +35 -0
  97. package/data/docs/routes/home-design-tokens-colors.json +157 -0
  98. package/data/docs/routes/home-design-tokens-other-animations.json +119 -0
  99. package/data/docs/routes/home-design-tokens-other-blurs.json +36 -0
  100. package/data/docs/routes/home-design-tokens-other-breakpoints.json +61 -0
  101. package/data/docs/routes/home-design-tokens-other-cursors.json +36 -0
  102. package/data/docs/routes/home-design-tokens-other-z-indices.json +39 -0
  103. package/data/docs/routes/home-design-tokens-other.json +35 -0
  104. package/data/docs/routes/home-design-tokens-radii.json +59 -0
  105. package/data/docs/routes/home-design-tokens-shadows.json +57 -0
  106. package/data/docs/routes/home-design-tokens-sizes.json +137 -0
  107. package/data/docs/routes/home-design-tokens-spacing.json +36 -0
  108. package/data/docs/routes/home-design-tokens-typography.json +184 -0
  109. package/data/docs/routes/home-design-tokens.json +34 -0
  110. package/data/docs/routes/home-getting-started-core-concepts.json +301 -0
  111. package/data/docs/routes/home-getting-started-installation.json +621 -0
  112. package/data/docs/routes/home-getting-started-mcp-server-overview.json +139 -0
  113. package/data/docs/routes/home-getting-started-mcp-server-setup.json +316 -0
  114. package/data/docs/routes/home-getting-started-release-process.json +294 -0
  115. package/data/docs/routes/home-getting-started-testing-setup.json +296 -0
  116. package/data/docs/routes/home-playground-markdown.json +638 -0
  117. package/data/docs/routes/home-playground-toc.json +169 -0
  118. package/data/docs/routes/home-playground.json +34 -0
  119. package/data/docs/routes/home-style-props-background.json +236 -0
  120. package/data/docs/routes/home-style-props-border.json +310 -0
  121. package/data/docs/routes/home-style-props-display.json +120 -0
  122. package/data/docs/routes/home-style-props-effects.json +116 -0
  123. package/data/docs/routes/home-style-props-filters.json +396 -0
  124. package/data/docs/routes/home-style-props-flex-and-grid.json +496 -0
  125. package/data/docs/routes/home-style-props-interactivity.json +356 -0
  126. package/data/docs/routes/home-style-props-layout.json +422 -0
  127. package/data/docs/routes/home-style-props-list.json +116 -0
  128. package/data/docs/routes/home-style-props-sizing.json +244 -0
  129. package/data/docs/routes/home-style-props-spacing.json +228 -0
  130. package/data/docs/routes/home-style-props-svg.json +96 -0
  131. package/data/docs/routes/home-style-props-tables.json +116 -0
  132. package/data/docs/routes/home-style-props-transforms.json +216 -0
  133. package/data/docs/routes/home-style-props-transitions.json +216 -0
  134. package/data/docs/routes/home-style-props-typography.json +536 -0
  135. package/data/docs/routes/home-style-props.json +33 -0
  136. package/data/docs/routes/home.json +32 -0
  137. package/data/docs/routes/hooks-usecopytoclipboard.json +76 -0
  138. package/data/docs/routes/hooks-usehotkeys.json +117 -0
  139. package/data/docs/routes/hooks.json +33 -0
  140. package/data/docs/routes/icons.json +32 -0
  141. package/data/docs/routes/patterns-fields-date-range-picker-field.json +393 -0
  142. package/data/docs/routes/patterns-fields-money-input-field.json +415 -0
  143. package/data/docs/routes/patterns-fields-multiline-text-input-field.json +404 -0
  144. package/data/docs/routes/patterns-fields-number-input-field.json +470 -0
  145. package/data/docs/routes/patterns-fields-password-input-field.json +319 -0
  146. package/data/docs/routes/patterns-fields-search-input-field.json +382 -0
  147. package/data/docs/routes/patterns-fields-text-input-field.json +404 -0
  148. package/data/docs/routes/patterns-fields.json +78 -0
  149. package/data/docs/routes/patterns.json +34 -0
  150. package/data/docs/search-index.json +1 -0
  151. package/data/docs/types/Accordion.json +12 -0
  152. package/data/docs/types/AccordionContent.json +286 -0
  153. package/data/docs/types/AccordionHeader.json +891 -0
  154. package/data/docs/types/AccordionHeaderRightContent.json +27 -0
  155. package/data/docs/types/AccordionItem.json +242 -0
  156. package/data/docs/types/AccordionRoot.json +162 -0
  157. package/data/docs/types/Alert.json +12 -0
  158. package/data/docs/types/AlertActions.json +11 -0
  159. package/data/docs/types/AlertDescription.json +118 -0
  160. package/data/docs/types/AlertDismissButton.json +937 -0
  161. package/data/docs/types/AlertRoot.json +42 -0
  162. package/data/docs/types/AlertTitle.json +118 -0
  163. package/data/docs/types/Avatar.json +125 -0
  164. package/data/docs/types/Badge.json +64 -0
  165. package/data/docs/types/Body.json +67 -0
  166. package/data/docs/types/Box.json +85 -0
  167. package/data/docs/types/Button.json +1015 -0
  168. package/data/docs/types/Calendar.json +565 -0
  169. package/data/docs/types/Caption.json +67 -0
  170. package/data/docs/types/Card.json +12 -0
  171. package/data/docs/types/CardContent.json +27 -0
  172. package/data/docs/types/CardHeader.json +27 -0
  173. package/data/docs/types/CardRoot.json +106 -0
  174. package/data/docs/types/Cell.json +227 -0
  175. package/data/docs/types/Checkbox.json +897 -0
  176. package/data/docs/types/Code.json +112 -0
  177. package/data/docs/types/CollapsibleMotionContent.json +35 -0
  178. package/data/docs/types/CollapsibleMotionRoot.json +99 -0
  179. package/data/docs/types/CollapsibleMotionTrigger.json +71 -0
  180. package/data/docs/types/Column.json +101 -0
  181. package/data/docs/types/ColumnGroup.json +101 -0
  182. package/data/docs/types/ColumnHeader.json +193 -0
  183. package/data/docs/types/ComboBoxListBox.json +751 -0
  184. package/data/docs/types/ComboBoxOption.json +672 -0
  185. package/data/docs/types/ComboBoxPopover.json +786 -0
  186. package/data/docs/types/ComboBoxRoot.json +747 -0
  187. package/data/docs/types/ComboBoxSection.json +277 -0
  188. package/data/docs/types/ComboBoxTrigger.json +70 -0
  189. package/data/docs/types/Content.json +33 -0
  190. package/data/docs/types/DataTable.json +596 -0
  191. package/data/docs/types/DataTableBody.json +223 -0
  192. package/data/docs/types/DataTableFooter.json +27 -0
  193. package/data/docs/types/DataTableHeader.json +269 -0
  194. package/data/docs/types/DataTableManager.json +11 -0
  195. package/data/docs/types/DataTableRoot.json +590 -0
  196. package/data/docs/types/DataTableTable.json +271 -0
  197. package/data/docs/types/DateInput.json +792 -0
  198. package/data/docs/types/DatePicker.json +700 -0
  199. package/data/docs/types/DateRangePicker.json +936 -0
  200. package/data/docs/types/DateRangePickerField.json +1047 -0
  201. package/data/docs/types/DefaultPage.json +12 -0
  202. package/data/docs/types/DefaultPageActions.json +27 -0
  203. package/data/docs/types/DefaultPageBackLink.json +213 -0
  204. package/data/docs/types/DefaultPageContent.json +27 -0
  205. package/data/docs/types/DefaultPageFooter.json +27 -0
  206. package/data/docs/types/DefaultPageHeader.json +27 -0
  207. package/data/docs/types/DefaultPageRoot.json +106 -0
  208. package/data/docs/types/DefaultPageSubtitle.json +27 -0
  209. package/data/docs/types/DefaultPageTabNav.json +28 -0
  210. package/data/docs/types/DefaultPageTitle.json +27 -0
  211. package/data/docs/types/DialogBody.json +27 -0
  212. package/data/docs/types/DialogCloseTrigger.json +939 -0
  213. package/data/docs/types/DialogContent.json +27 -0
  214. package/data/docs/types/DialogFooter.json +27 -0
  215. package/data/docs/types/DialogHeader.json +27 -0
  216. package/data/docs/types/DialogRoot.json +138 -0
  217. package/data/docs/types/DialogTitle.json +27 -0
  218. package/data/docs/types/DialogTrigger.json +80 -0
  219. package/data/docs/types/DraggableList.json +12 -0
  220. package/data/docs/types/DraggableListField.json +894 -0
  221. package/data/docs/types/DraggableListItem.json +574 -0
  222. package/data/docs/types/DraggableListRoot.json +745 -0
  223. package/data/docs/types/Drawer.json +12 -0
  224. package/data/docs/types/DrawerBody.json +27 -0
  225. package/data/docs/types/DrawerCloseTrigger.json +939 -0
  226. package/data/docs/types/DrawerContent.json +27 -0
  227. package/data/docs/types/DrawerFooter.json +27 -0
  228. package/data/docs/types/DrawerHeader.json +27 -0
  229. package/data/docs/types/DrawerRoot.json +142 -0
  230. package/data/docs/types/DrawerTitle.json +27 -0
  231. package/data/docs/types/DrawerTrigger.json +80 -0
  232. package/data/docs/types/FieldErrors.getBuiltInMessage.json +11 -0
  233. package/data/docs/types/FieldErrors.getCustomMessage.json +9 -0
  234. package/data/docs/types/FieldErrors.json +109 -0
  235. package/data/docs/types/Flex.json +238 -0
  236. package/data/docs/types/Footer.json +67 -0
  237. package/data/docs/types/FormFieldDescription.json +11 -0
  238. package/data/docs/types/FormFieldError.json +11 -0
  239. package/data/docs/types/FormFieldInfoBox.json +27 -0
  240. package/data/docs/types/FormFieldInput.json +11 -0
  241. package/data/docs/types/FormFieldLabel.json +11 -0
  242. package/data/docs/types/FormFieldRoot.json +148 -0
  243. package/data/docs/types/Grid.json +253 -0
  244. package/data/docs/types/GridProps.json +11 -0
  245. package/data/docs/types/Group.json +143 -0
  246. package/data/docs/types/Header.json +67 -0
  247. package/data/docs/types/Heading.json +109 -0
  248. package/data/docs/types/Icon.json +112 -0
  249. package/data/docs/types/IconButton.json +1019 -0
  250. package/data/docs/types/IconToggleButton.json +787 -0
  251. package/data/docs/types/Image.json +373 -0
  252. package/data/docs/types/Indicator.json +67 -0
  253. package/data/docs/types/InlineSvg.json +98 -0
  254. package/data/docs/types/Item.json +67 -0
  255. package/data/docs/types/Kbd.json +118 -0
  256. package/data/docs/types/Link.json +380 -0
  257. package/data/docs/types/List.json +12 -0
  258. package/data/docs/types/ListIndicator.json +70 -0
  259. package/data/docs/types/ListItem.json +70 -0
  260. package/data/docs/types/ListRoot.json +124 -0
  261. package/data/docs/types/LoadingSpinner.json +87 -0
  262. package/data/docs/types/LocalizedField.json +460 -0
  263. package/data/docs/types/LocalizedStringFormatter.json +9 -0
  264. package/data/docs/types/MakeElementFocusable.json +196 -0
  265. package/data/docs/types/MenuContent.json +111 -0
  266. package/data/docs/types/MenuItem.json +671 -0
  267. package/data/docs/types/MenuRoot.json +670 -0
  268. package/data/docs/types/MenuSection.json +364 -0
  269. package/data/docs/types/MenuSubmenu.json +111 -0
  270. package/data/docs/types/MenuSubmenuTrigger.json +67 -0
  271. package/data/docs/types/MenuTrigger.json +906 -0
  272. package/data/docs/types/ModalPage.json +12 -0
  273. package/data/docs/types/ModalPageActions.json +27 -0
  274. package/data/docs/types/ModalPageContent.json +27 -0
  275. package/data/docs/types/ModalPageFooter.json +27 -0
  276. package/data/docs/types/ModalPageHeader.json +27 -0
  277. package/data/docs/types/ModalPageRoot.json +87 -0
  278. package/data/docs/types/ModalPageSubtitle.json +27 -0
  279. package/data/docs/types/ModalPageTabNav.json +28 -0
  280. package/data/docs/types/ModalPageTitle.json +27 -0
  281. package/data/docs/types/ModalPageTopBar.json +57 -0
  282. package/data/docs/types/MoneyInput.isEmpty.json +40 -0
  283. package/data/docs/types/MoneyInput.json +282 -0
  284. package/data/docs/types/MoneyInputField.json +379 -0
  285. package/data/docs/types/MoneyInputFieldProps.json +9 -0
  286. package/data/docs/types/MultilineTextInput.json +1194 -0
  287. package/data/docs/types/MultilineTextInputField.json +1269 -0
  288. package/data/docs/types/MultilineTextInputFieldProps.json +9 -0
  289. package/data/docs/types/NimbusI18nProvider.json +42 -0
  290. package/data/docs/types/NimbusI18nProviderProps.json +9 -0
  291. package/data/docs/types/NimbusProvider.json +270 -0
  292. package/data/docs/types/NumberInput.json +952 -0
  293. package/data/docs/types/NumberInputField.json +1004 -0
  294. package/data/docs/types/NumberInputFieldProps.json +9 -0
  295. package/data/docs/types/PageContent.json +11 -0
  296. package/data/docs/types/PageContentColumn.json +99 -0
  297. package/data/docs/types/PageContentRoot.json +114 -0
  298. package/data/docs/types/Pagination.json +159 -0
  299. package/data/docs/types/PasswordInput.json +1120 -0
  300. package/data/docs/types/PasswordInputField.json +1216 -0
  301. package/data/docs/types/PasswordInputFieldProps.json +9 -0
  302. package/data/docs/types/ProgressBar.json +280 -0
  303. package/data/docs/types/RadioInputOption.json +550 -0
  304. package/data/docs/types/RadioInputRoot.json +514 -0
  305. package/data/docs/types/RangeCalendar.json +618 -0
  306. package/data/docs/types/RichTextInput.json +134 -0
  307. package/data/docs/types/Root.json +122 -0
  308. package/data/docs/types/Row.json +67 -0
  309. package/data/docs/types/ScopedSearchInput.isEmpty.json +40 -0
  310. package/data/docs/types/ScopedSearchInput.json +253 -0
  311. package/data/docs/types/ScrollArea.json +82 -0
  312. package/data/docs/types/SearchInput.json +1165 -0
  313. package/data/docs/types/SearchInputField.json +1240 -0
  314. package/data/docs/types/Select.json +12 -0
  315. package/data/docs/types/SelectOption.json +572 -0
  316. package/data/docs/types/SelectOptionGroup.json +215 -0
  317. package/data/docs/types/SelectOptions.json +693 -0
  318. package/data/docs/types/SelectRoot.json +926 -0
  319. package/data/docs/types/Separator.json +65 -0
  320. package/data/docs/types/SimpleGrid.json +291 -0
  321. package/data/docs/types/Spacer.json +27 -0
  322. package/data/docs/types/SpacerProps.json +9 -0
  323. package/data/docs/types/SplitButton.json +203 -0
  324. package/data/docs/types/Stack.json +144 -0
  325. package/data/docs/types/Steps.json +12 -0
  326. package/data/docs/types/StepsChangeDetails.json +9 -0
  327. package/data/docs/types/StepsCompletedContent.json +28 -0
  328. package/data/docs/types/StepsCompletedContentProps.json +9 -0
  329. package/data/docs/types/StepsContent.json +43 -0
  330. package/data/docs/types/StepsContentProps.json +9 -0
  331. package/data/docs/types/StepsDescription.json +28 -0
  332. package/data/docs/types/StepsDescriptionProps.json +9 -0
  333. package/data/docs/types/StepsIndicator.json +28 -0
  334. package/data/docs/types/StepsIndicatorProps.json +9 -0
  335. package/data/docs/types/StepsItem.json +43 -0
  336. package/data/docs/types/StepsItemProps.json +9 -0
  337. package/data/docs/types/StepsList.json +28 -0
  338. package/data/docs/types/StepsListProps.json +9 -0
  339. package/data/docs/types/StepsNextTrigger.json +62 -0
  340. package/data/docs/types/StepsNextTriggerProps.json +9 -0
  341. package/data/docs/types/StepsNumber.json +28 -0
  342. package/data/docs/types/StepsNumberProps.json +9 -0
  343. package/data/docs/types/StepsPrevTrigger.json +62 -0
  344. package/data/docs/types/StepsPrevTriggerProps.json +9 -0
  345. package/data/docs/types/StepsRoot.json +183 -0
  346. package/data/docs/types/StepsRootProps.json +11 -0
  347. package/data/docs/types/StepsSeparator.json +28 -0
  348. package/data/docs/types/StepsSeparatorProps.json +9 -0
  349. package/data/docs/types/StepsStatus.json +57 -0
  350. package/data/docs/types/StepsStatusProps.json +9 -0
  351. package/data/docs/types/StepsTitle.json +28 -0
  352. package/data/docs/types/StepsTitleProps.json +9 -0
  353. package/data/docs/types/StepsTrigger.json +47 -0
  354. package/data/docs/types/StepsTriggerProps.json +9 -0
  355. package/data/docs/types/Switch.json +371 -0
  356. package/data/docs/types/TabListProps.json +9 -0
  357. package/data/docs/types/TabNav.json +12 -0
  358. package/data/docs/types/TabNavItem.json +300 -0
  359. package/data/docs/types/TabNavItemProps.json +9 -0
  360. package/data/docs/types/TabNavProps.json +9 -0
  361. package/data/docs/types/TabNavRoot.json +80 -0
  362. package/data/docs/types/TabPanelProps.json +9 -0
  363. package/data/docs/types/TabPanelsProps.json +9 -0
  364. package/data/docs/types/TabProps.json +9 -0
  365. package/data/docs/types/Table.json +9 -0
  366. package/data/docs/types/TableBody.json +67 -0
  367. package/data/docs/types/TableBodyProps.json +9 -0
  368. package/data/docs/types/TableCaption.json +67 -0
  369. package/data/docs/types/TableCaptionProps.json +9 -0
  370. package/data/docs/types/TableCell.json +227 -0
  371. package/data/docs/types/TableCellProps.json +9 -0
  372. package/data/docs/types/TableColumn.json +101 -0
  373. package/data/docs/types/TableColumnGroup.json +101 -0
  374. package/data/docs/types/TableColumnGroupProps.json +9 -0
  375. package/data/docs/types/TableColumnHeader.json +193 -0
  376. package/data/docs/types/TableColumnHeaderProps.json +9 -0
  377. package/data/docs/types/TableColumnProps.json +9 -0
  378. package/data/docs/types/TableFooter.json +67 -0
  379. package/data/docs/types/TableFooterProps.json +9 -0
  380. package/data/docs/types/TableHeader.json +67 -0
  381. package/data/docs/types/TableHeaderProps.json +9 -0
  382. package/data/docs/types/TableRoot.json +365 -0
  383. package/data/docs/types/TableRootProps.json +12 -0
  384. package/data/docs/types/TableRow.json +67 -0
  385. package/data/docs/types/TableRowProps.json +9 -0
  386. package/data/docs/types/TableScrollArea.json +82 -0
  387. package/data/docs/types/TableScrollAreaProps.json +9 -0
  388. package/data/docs/types/Tabs.json +12 -0
  389. package/data/docs/types/TabsList.json +110 -0
  390. package/data/docs/types/TabsPanel.json +112 -0
  391. package/data/docs/types/TabsPanels.json +108 -0
  392. package/data/docs/types/TabsRoot.json +211 -0
  393. package/data/docs/types/TabsTab.json +174 -0
  394. package/data/docs/types/TagGroup.json +12 -0
  395. package/data/docs/types/TagGroupRoot.json +306 -0
  396. package/data/docs/types/TagGroupTag.json +595 -0
  397. package/data/docs/types/TagGroupTagList.json +166 -0
  398. package/data/docs/types/Text.json +119 -0
  399. package/data/docs/types/TextInput.json +1156 -0
  400. package/data/docs/types/TextInputField.json +1263 -0
  401. package/data/docs/types/TimeInput.json +752 -0
  402. package/data/docs/types/ToastAction.json +9 -0
  403. package/data/docs/types/ToastManagerApi.json +9 -0
  404. package/data/docs/types/ToastOptions.json +9 -0
  405. package/data/docs/types/ToastOutlet.json +12 -0
  406. package/data/docs/types/ToastPlacement.json +9 -0
  407. package/data/docs/types/ToastPromiseOptions.json +9 -0
  408. package/data/docs/types/ToastType.json +9 -0
  409. package/data/docs/types/ToastVariant.json +9 -0
  410. package/data/docs/types/ToggleButton.json +789 -0
  411. package/data/docs/types/ToggleButtonGroup.json +9 -0
  412. package/data/docs/types/ToggleButtonGroupButton.json +331 -0
  413. package/data/docs/types/ToggleButtonGroupRoot.json +269 -0
  414. package/data/docs/types/Toolbar.json +176 -0
  415. package/data/docs/types/Tooltip.json +12 -0
  416. package/data/docs/types/TooltipContent.json +372 -0
  417. package/data/docs/types/TooltipRoot.json +179 -0
  418. package/data/docs/types/Trigger.json +69 -0
  419. package/data/docs/types/VisuallyHidden.json +93 -0
  420. package/data/docs/types/__object.json +12 -0
  421. package/data/docs/types/filters.json +11 -0
  422. package/data/docs/types/manifest.json +278 -0
  423. package/data/docs/types/toast.json +234 -0
  424. package/data/docs/types/useColorMode.json +13 -0
  425. package/data/docs/types/useColorModeValue.json +13 -0
  426. package/data/docs/types/useColorScheme.json +12 -0
  427. package/data/docs/types/useLocalizedStringFormatter.json +14 -0
  428. package/data/icons.json +21940 -0
  429. package/data/tokens.json +40061 -0
  430. package/dist/index.js +2516 -17
  431. package/package.json +25 -6
  432. package/dist/data-loader.d.ts +0 -102
  433. package/dist/data-loader.js +0 -104
  434. package/dist/index.d.ts +0 -13
  435. package/dist/server.d.ts +0 -9
  436. package/dist/server.js +0 -22
  437. package/dist/server.spec.d.ts +0 -1
  438. package/dist/server.spec.js +0 -69
  439. package/dist/tools/list-components.d.ts +0 -9
  440. package/dist/tools/list-components.js +0 -42
  441. package/dist/types.d.ts +0 -28
  442. package/dist/types.js +0 -4
  443. package/src/data-loader.ts +0 -226
  444. package/src/index.ts +0 -29
  445. package/src/server.spec.ts +0 -86
  446. package/src/server.ts +0 -28
  447. package/src/tools/list-components.ts +0 -49
  448. package/src/types.ts +0 -31
  449. package/tsconfig.json +0 -14
  450. package/vitest.config.ts +0 -9
@@ -0,0 +1,722 @@
1
+ {
2
+ "meta": {
3
+ "id": "Components-ToggleButtonGroup",
4
+ "title": "Toggle button group",
5
+ "exportName": "ToggleButtonGroup",
6
+ "description": "A set of closely related, mutually exclusive or complementary actions that are important enough to be displayed directly in the interface for quick access.",
7
+ "lifecycleState": "Stable",
8
+ "order": 999,
9
+ "repoPath": "packages/nimbus/src/components/toggle-button-group/toggle-button-group.mdx",
10
+ "menu": [
11
+ "Components",
12
+ "Buttons",
13
+ "Toggle button group"
14
+ ],
15
+ "route": "components/buttons/toggle-button-group",
16
+ "tags": [
17
+ "component",
18
+ "buttons",
19
+ "toggle",
20
+ "group",
21
+ "controls"
22
+ ],
23
+ "toc": [
24
+ {
25
+ "value": "Overview",
26
+ "href": "#overview",
27
+ "depth": 2,
28
+ "numbering": [
29
+ 1,
30
+ 1
31
+ ],
32
+ "parent": "root"
33
+ },
34
+ {
35
+ "value": "Resources",
36
+ "href": "#resources",
37
+ "depth": 3,
38
+ "numbering": [
39
+ 1,
40
+ 1,
41
+ 1
42
+ ],
43
+ "parent": "root"
44
+ },
45
+ {
46
+ "value": "Variables",
47
+ "href": "#variables",
48
+ "depth": 2,
49
+ "numbering": [
50
+ 1,
51
+ 2
52
+ ],
53
+ "parent": "root"
54
+ },
55
+ {
56
+ "value": "Size",
57
+ "href": "#size",
58
+ "depth": 3,
59
+ "numbering": [
60
+ 1,
61
+ 2,
62
+ 1
63
+ ],
64
+ "parent": "root"
65
+ },
66
+ {
67
+ "value": "Medium",
68
+ "href": "#medium",
69
+ "depth": 4,
70
+ "numbering": [
71
+ 1,
72
+ 2,
73
+ 1,
74
+ 1
75
+ ],
76
+ "parent": "root"
77
+ },
78
+ {
79
+ "value": "X-Small",
80
+ "href": "#x-small",
81
+ "depth": 4,
82
+ "numbering": [
83
+ 1,
84
+ 2,
85
+ 1,
86
+ 2
87
+ ],
88
+ "parent": "root"
89
+ },
90
+ {
91
+ "value": "Visual options",
92
+ "href": "#visual-options",
93
+ "depth": 3,
94
+ "numbering": [
95
+ 1,
96
+ 2,
97
+ 2
98
+ ],
99
+ "parent": "root"
100
+ },
101
+ {
102
+ "value": "Labels and icons",
103
+ "href": "#labels-and-icons",
104
+ "depth": 4,
105
+ "numbering": [
106
+ 1,
107
+ 2,
108
+ 2,
109
+ 1
110
+ ],
111
+ "parent": "root"
112
+ },
113
+ {
114
+ "value": "Just labels",
115
+ "href": "#just-labels",
116
+ "depth": 4,
117
+ "numbering": [
118
+ 1,
119
+ 2,
120
+ 2,
121
+ 2
122
+ ],
123
+ "parent": "root"
124
+ },
125
+ {
126
+ "value": "Just icons",
127
+ "href": "#just-icons",
128
+ "depth": 4,
129
+ "numbering": [
130
+ 1,
131
+ 2,
132
+ 2,
133
+ 3
134
+ ],
135
+ "parent": "root"
136
+ }
137
+ ],
138
+ "figmaLink": "https://www.figma.com/design/AvtPX6g7OGGCRvNlatGOIY/NIMBUS-design-system?node-id=2693-2416&m=dev",
139
+ "layout": "app-frame",
140
+ "tabs": [
141
+ {
142
+ "key": "overview",
143
+ "title": "Overview",
144
+ "order": 0
145
+ },
146
+ {
147
+ "key": "guidelines",
148
+ "title": "Guidelines",
149
+ "order": 2
150
+ },
151
+ {
152
+ "key": "dev",
153
+ "title": "Implementation",
154
+ "order": 3
155
+ },
156
+ {
157
+ "key": "a11y",
158
+ "title": "Accessibility",
159
+ "order": 4
160
+ }
161
+ ]
162
+ },
163
+ "mdx": "\n## Overview\n\nButton groups can be used several ways, with and without icons, and spanning\nfrom two selections to several.\n\n### Resources\n\nDeep dive into implementation details and access the Nimbus design library.\n\n[Figma library](https://www.figma.com/design/AvtPX6g7OGGCRvNlatGOIY/NIMBUS-design-system?node-id=2693-2416&m=dev)\n\n[`ToggleButtonGroup` on `react-aria`](https://react-spectrum.adobe.com/react-aria/ToggleButtonGroup.html#togglebuttongroup)\n\n[Relevant W3C Aria pattern](https://www.w3.org/WAI/ARIA/apg/patterns/toolbar/)\n\n## Variables\n\nGet familiar with the features.\n\n### Size\n\nToggle Button Groups come in different sizes to fit various layout needs.\n\n#### Medium\n\nThis is the default size.\n\n```jsx live\nconst App = () => (\n <ToggleButtonGroup.Root aria-label=\"Medium size example (default)\" selectedKeys={[\"md-day\"]} colorPalette=\"primary\">\n <ToggleButtonGroup.Button id=\"md-day\"><Icons.ViewDay />Day</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"md-week\"><Icons.CalendarViewWeek />Week</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"md-month\"><Icons.CalendarViewMonth />Month</ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n);\n```\n\n#### X-Small\n\nThis size is for compact placements.\n\n```jsx live\nconst App = () => (\n <ToggleButtonGroup.Root size=\"xs\" aria-label=\"X-Small size example\" selectedKeys={[\"xs-day\"]} colorPalette=\"primary\">\n <ToggleButtonGroup.Button id=\"xs-day\"><Icons.ViewDay />Day</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"xs-week\"><Icons.CalendarViewWeek />Week</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"xs-month\"><Icons.CalendarViewMonth />Month</ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n);\n```\n\n### Visual options\n\nToggle Button Groups can be configured with labels, icons, or both.\n\n#### Labels and icons\n\nButton groups with icons and labels are used to present a set of related actions\nin a compact and visually clear way, where icons provide quick recognition and\nlabels offer explicit understanding of each option. This combination enhances\nuser efficiency by making common choices readily available and easily\nidentifiable.\n\n```jsx live\nconst App = () => (\n <ToggleButtonGroup.Root aria-label=\"Labels and icons example\" selectedKeys={[\"li-shipped\"]} colorPalette=\"primary\">\n <ToggleButtonGroup.Button id=\"li-processing\">\n <Icons.RotateRight /> Processing\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"li-shipped\">\n <Icons.LocalShipping /> Shipped\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"li-cancelled\">\n <Icons.Dangerous /> Cancelled\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"li-refunded\">\n <Icons.CurrencyExchange /> Refunded\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n);\n```\n\n#### Just labels\n\nButton groups with just labels provide explicit understanding of each option.\nThis approach prioritizes readability and ease of comprehension, making it\nsuitable for scenarios where icons might be ambiguous or when the actions are\nbest described through text.\n\n```jsx live\nconst App = () => (\n <ToggleButtonGroup.Root aria-label=\"Just labels example\" selectedKeys={[\"label-inactive\"]} colorPalette=\"primary\">\n <ToggleButtonGroup.Button id=\"label-active\">\n Active promotions\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"label-inactive\">\n Inactive promotions\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"label-draft\">\n Draft promotions\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n);\n```\n\n#### Just icons\n\nMessages potential problems or situations that require user attention to prevent\nissues. They require the user to take action to make needed corrections or\nconfirmation. Use tooltips for accessibility.\n\n```jsx live\nconst App = () => (\n <ToggleButtonGroup.Root aria-label=\"Just icons example\" selectedKeys={[\"icon-copy\"]} colorPalette=\"primary\">\n <Tooltip.Root delay={0} closeDelay={0}>\n <ToggleButtonGroup.Button id=\"icon-edit\" aria-label=\"Edit view\">\n <Icons.Edit />\n </ToggleButtonGroup.Button>\n <Tooltip.Content>Edit</Tooltip.Content>\n </Tooltip.Root>\n <Tooltip.Root delay={0} closeDelay={0}>\n <ToggleButtonGroup.Button id=\"icon-copy\" aria-label=\"Copy view\">\n <Icons.ContentCopy />\n </ToggleButtonGroup.Button>\n <Tooltip.Content>Copy</Tooltip.Content>\n </Tooltip.Root>\n <Tooltip.Root delay={0} closeDelay={0}>\n <ToggleButtonGroup.Button id=\"icon-delete\" aria-label=\"Delete view\">\n <Icons.Delete />\n </ToggleButtonGroup.Button>\n <Tooltip.Content>Delete</Tooltip.Content>\n </Tooltip.Root>\n </ToggleButtonGroup.Root>\n);\n```\n",
164
+ "views": {
165
+ "overview": {
166
+ "mdx": "\n## Overview\n\nButton groups can be used several ways, with and without icons, and spanning\nfrom two selections to several.\n\n### Resources\n\nDeep dive into implementation details and access the Nimbus design library.\n\n[Figma library](https://www.figma.com/design/AvtPX6g7OGGCRvNlatGOIY/NIMBUS-design-system?node-id=2693-2416&m=dev)\n\n[`ToggleButtonGroup` on `react-aria`](https://react-spectrum.adobe.com/react-aria/ToggleButtonGroup.html#togglebuttongroup)\n\n[Relevant W3C Aria pattern](https://www.w3.org/WAI/ARIA/apg/patterns/toolbar/)\n\n## Variables\n\nGet familiar with the features.\n\n### Size\n\nToggle Button Groups come in different sizes to fit various layout needs.\n\n#### Medium\n\nThis is the default size.\n\n```jsx live\nconst App = () => (\n <ToggleButtonGroup.Root aria-label=\"Medium size example (default)\" selectedKeys={[\"md-day\"]} colorPalette=\"primary\">\n <ToggleButtonGroup.Button id=\"md-day\"><Icons.ViewDay />Day</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"md-week\"><Icons.CalendarViewWeek />Week</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"md-month\"><Icons.CalendarViewMonth />Month</ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n);\n```\n\n#### X-Small\n\nThis size is for compact placements.\n\n```jsx live\nconst App = () => (\n <ToggleButtonGroup.Root size=\"xs\" aria-label=\"X-Small size example\" selectedKeys={[\"xs-day\"]} colorPalette=\"primary\">\n <ToggleButtonGroup.Button id=\"xs-day\"><Icons.ViewDay />Day</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"xs-week\"><Icons.CalendarViewWeek />Week</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"xs-month\"><Icons.CalendarViewMonth />Month</ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n);\n```\n\n### Visual options\n\nToggle Button Groups can be configured with labels, icons, or both.\n\n#### Labels and icons\n\nButton groups with icons and labels are used to present a set of related actions\nin a compact and visually clear way, where icons provide quick recognition and\nlabels offer explicit understanding of each option. This combination enhances\nuser efficiency by making common choices readily available and easily\nidentifiable.\n\n```jsx live\nconst App = () => (\n <ToggleButtonGroup.Root aria-label=\"Labels and icons example\" selectedKeys={[\"li-shipped\"]} colorPalette=\"primary\">\n <ToggleButtonGroup.Button id=\"li-processing\">\n <Icons.RotateRight /> Processing\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"li-shipped\">\n <Icons.LocalShipping /> Shipped\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"li-cancelled\">\n <Icons.Dangerous /> Cancelled\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"li-refunded\">\n <Icons.CurrencyExchange /> Refunded\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n);\n```\n\n#### Just labels\n\nButton groups with just labels provide explicit understanding of each option.\nThis approach prioritizes readability and ease of comprehension, making it\nsuitable for scenarios where icons might be ambiguous or when the actions are\nbest described through text.\n\n```jsx live\nconst App = () => (\n <ToggleButtonGroup.Root aria-label=\"Just labels example\" selectedKeys={[\"label-inactive\"]} colorPalette=\"primary\">\n <ToggleButtonGroup.Button id=\"label-active\">\n Active promotions\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"label-inactive\">\n Inactive promotions\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"label-draft\">\n Draft promotions\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n);\n```\n\n#### Just icons\n\nMessages potential problems or situations that require user attention to prevent\nissues. They require the user to take action to make needed corrections or\nconfirmation. Use tooltips for accessibility.\n\n```jsx live\nconst App = () => (\n <ToggleButtonGroup.Root aria-label=\"Just icons example\" selectedKeys={[\"icon-copy\"]} colorPalette=\"primary\">\n <Tooltip.Root delay={0} closeDelay={0}>\n <ToggleButtonGroup.Button id=\"icon-edit\" aria-label=\"Edit view\">\n <Icons.Edit />\n </ToggleButtonGroup.Button>\n <Tooltip.Content>Edit</Tooltip.Content>\n </Tooltip.Root>\n <Tooltip.Root delay={0} closeDelay={0}>\n <ToggleButtonGroup.Button id=\"icon-copy\" aria-label=\"Copy view\">\n <Icons.ContentCopy />\n </ToggleButtonGroup.Button>\n <Tooltip.Content>Copy</Tooltip.Content>\n </Tooltip.Root>\n <Tooltip.Root delay={0} closeDelay={0}>\n <ToggleButtonGroup.Button id=\"icon-delete\" aria-label=\"Delete view\">\n <Icons.Delete />\n </ToggleButtonGroup.Button>\n <Tooltip.Content>Delete</Tooltip.Content>\n </Tooltip.Root>\n </ToggleButtonGroup.Root>\n);\n```\n",
167
+ "toc": [
168
+ {
169
+ "value": "Overview",
170
+ "href": "#overview",
171
+ "depth": 2,
172
+ "numbering": [
173
+ 1,
174
+ 1
175
+ ],
176
+ "parent": "root"
177
+ },
178
+ {
179
+ "value": "Resources",
180
+ "href": "#resources",
181
+ "depth": 3,
182
+ "numbering": [
183
+ 1,
184
+ 1,
185
+ 1
186
+ ],
187
+ "parent": "root"
188
+ },
189
+ {
190
+ "value": "Variables",
191
+ "href": "#variables",
192
+ "depth": 2,
193
+ "numbering": [
194
+ 1,
195
+ 2
196
+ ],
197
+ "parent": "root"
198
+ },
199
+ {
200
+ "value": "Size",
201
+ "href": "#size",
202
+ "depth": 3,
203
+ "numbering": [
204
+ 1,
205
+ 2,
206
+ 1
207
+ ],
208
+ "parent": "root"
209
+ },
210
+ {
211
+ "value": "Medium",
212
+ "href": "#medium",
213
+ "depth": 4,
214
+ "numbering": [
215
+ 1,
216
+ 2,
217
+ 1,
218
+ 1
219
+ ],
220
+ "parent": "root"
221
+ },
222
+ {
223
+ "value": "X-Small",
224
+ "href": "#x-small",
225
+ "depth": 4,
226
+ "numbering": [
227
+ 1,
228
+ 2,
229
+ 1,
230
+ 2
231
+ ],
232
+ "parent": "root"
233
+ },
234
+ {
235
+ "value": "Visual options",
236
+ "href": "#visual-options",
237
+ "depth": 3,
238
+ "numbering": [
239
+ 1,
240
+ 2,
241
+ 2
242
+ ],
243
+ "parent": "root"
244
+ },
245
+ {
246
+ "value": "Labels and icons",
247
+ "href": "#labels-and-icons",
248
+ "depth": 4,
249
+ "numbering": [
250
+ 1,
251
+ 2,
252
+ 2,
253
+ 1
254
+ ],
255
+ "parent": "root"
256
+ },
257
+ {
258
+ "value": "Just labels",
259
+ "href": "#just-labels",
260
+ "depth": 4,
261
+ "numbering": [
262
+ 1,
263
+ 2,
264
+ 2,
265
+ 2
266
+ ],
267
+ "parent": "root"
268
+ },
269
+ {
270
+ "value": "Just icons",
271
+ "href": "#just-icons",
272
+ "depth": 4,
273
+ "numbering": [
274
+ 1,
275
+ 2,
276
+ 2,
277
+ 3
278
+ ],
279
+ "parent": "root"
280
+ }
281
+ ]
282
+ },
283
+ "a11y": {
284
+ "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```jsx live\nconst App = () => (\n <ToggleButtonGroup.Root aria-label=\"Labels and icons example\" selectedKeys={[\"li-shipped\"]} colorPalette=\"primary\">\n <Tooltip.Root delay={0} closeDelay={0}>\n <ToggleButtonGroup.Button id=\"li-processing\">\n <Icons.RotateRight /> Processing\n </ToggleButtonGroup.Button>\n <Tooltip.Content>Processing Status</Tooltip.Content>\n </Tooltip.Root>\n <Tooltip.Root delay={0} closeDelay={0}>\n <ToggleButtonGroup.Button id=\"li-shipped\">\n <Icons.LocalShipping /> Shipped\n </ToggleButtonGroup.Button>\n <Tooltip.Content>Shipped Status</Tooltip.Content>\n </Tooltip.Root>\n <Tooltip.Root delay={0} closeDelay={0}>\n <ToggleButtonGroup.Button id=\"li-cancelled\">\n <Icons.Dangerous /> Cancelled\n </ToggleButtonGroup.Button>\n <Tooltip.Content>Cancelled Status</Tooltip.Content>\n </Tooltip.Root>\n <Tooltip.Root delay={0} closeDelay={0}>\n <ToggleButtonGroup.Button id=\"li-refunded\">\n <Icons.CurrencyExchange /> Refunded\n </ToggleButtonGroup.Button>\n <Tooltip.Content>Refunded Status</Tooltip.Content>\n </Tooltip.Root>\n </ToggleButtonGroup.Root>\n);\n```\n\n### Accessibility standards\n\n- **Provide text alternatives for non-text content:** Provide text alternatives\n for any non-text content (e.g., icons within buttons) via `aria-label` on the\n button or surrounding `Tooltip`. Ensure icons have sufficient visual clarity.\n- **Don't rely on color alone:** Avoid relying solely on color to indicate the\n selected state. Default styles typically use background color and potentially\n borders or font weight changes.\n- **Ensure sufficient contrast:** Ensure sufficient color contrast between\n button text/icons and their background, in both selected and unselected\n states. Ensure sufficient contrast between adjacent buttons.\n- **Keyboard navigation:** Make the entire group focusable using the Tab key.\n Allow navigation between buttons within the group using arrow keys (Left/Right\n or Up/Down depending on orientation). Allow selection using the Enter or Space\n key.\n- **Clear button labels:** Button labels (text or `aria-label` for icons) should\n clearly describe the action or choice.\n- **Focus visible:** Provide a clear and visible focus indicator for the\n currently focused button within the group.\n- **No unexpected focus changes:** Ensure that moving focus between buttons does\n not trigger unexpected actions.\n- **Provide group label:** Provide a clear `aria-label` for the\n `ToggleButtonGroup.Root` element to describe the purpose of the group to\n assistive technologies.\n- **Use appropriate ARIA roles:** Use appropriate ARIA roles (e.g., `radiogroup`\n for single selection, `group` for multiple selection, `radio` or `checkbox`\n for items depending on mode) to ensure compatibility with assistive\n technologies. Nimbus components built on React Aria generally handle this\n automatically.\n\n### Resources\n\n- [W3C ARIA Authoring Practices Guide (APG) - Radio Group](https://www.w3.org/WAI/ARIA/apg/patterns/radio/)\n- [W3C ARIA Authoring Practices Guide (APG) - Toolbar](https://www.w3.org/WAI/ARIA/apg/patterns/toolbar/)\n",
285
+ "toc": [
286
+ {
287
+ "value": "Accessibility",
288
+ "href": "#accessibility",
289
+ "depth": 2,
290
+ "numbering": [
291
+ 1,
292
+ 1
293
+ ],
294
+ "parent": "root"
295
+ },
296
+ {
297
+ "value": "Accessibility standards",
298
+ "href": "#accessibility-standards",
299
+ "depth": 3,
300
+ "numbering": [
301
+ 1,
302
+ 1,
303
+ 1
304
+ ],
305
+ "parent": "root"
306
+ },
307
+ {
308
+ "value": "Resources",
309
+ "href": "#resources",
310
+ "depth": 3,
311
+ "numbering": [
312
+ 1,
313
+ 1,
314
+ 2
315
+ ],
316
+ "parent": "root"
317
+ }
318
+ ]
319
+ },
320
+ "dev": {
321
+ "mdx": "\n## Getting started\n\n### Import\n\n```tsx\nimport { ToggleButtonGroup, type ToggleButtonGroupProps } from '@commercetools/nimbus';\n```\n\n### Basic usage\n\nThe ToggleButtonGroup component groups multiple toggle buttons together, allowing users to select one or more options from a set of related choices. It uses a compound component structure with `Root` and `Button` sub-components:\n\n```jsx live-dev\nconst App = () => (\n <ToggleButtonGroup.Root aria-label=\"Text alignment\">\n <ToggleButtonGroup.Button id=\"left\">Left</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"center\">Center</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"right\">Right</ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n)\n```\n\nBy default, the group operates in single-selection mode where only one button can be selected at a time. Each button must have a unique `id` prop that identifies it within the group.\n\n## Usage examples\n\n### Size options\n\nThe component supports two size variants to match your interface density:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"column\" gap=\"400\">\n <ToggleButtonGroup.Root size=\"md\" aria-label=\"Medium text alignment\">\n <ToggleButtonGroup.Button id=\"left\">Left</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"center\">Center</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"right\">Right</ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n\n <ToggleButtonGroup.Root size=\"xs\" aria-label=\"Small text alignment\">\n <ToggleButtonGroup.Button id=\"left\">Left</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"center\">Center</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"right\">Right</ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n </Stack>\n)\n```\n\n### Color palettes\n\nChoose from semantic color palettes to match your design context:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"column\" gap=\"400\">\n <ToggleButtonGroup.Root colorPalette=\"primary\" aria-label=\"Primary alignment\">\n <ToggleButtonGroup.Button id=\"left\">\n <Icons.FormatAlignLeft />\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"center\">\n <Icons.FormatAlignCenter />\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"right\">\n <Icons.FormatAlignRight />\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n\n <ToggleButtonGroup.Root colorPalette=\"critical\" aria-label=\"Critical actions\">\n <ToggleButtonGroup.Button id=\"delete\">\n <Icons.Delete />\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"warning\">\n <Icons.Warning />\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"block\">\n <Icons.Block />\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n\n <ToggleButtonGroup.Root colorPalette=\"neutral\" aria-label=\"Neutral formatting\">\n <ToggleButtonGroup.Button id=\"bold\">\n <Icons.FormatBold />\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"italic\">\n <Icons.FormatItalic />\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"underline\">\n <Icons.FormatUnderlined />\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n </Stack>\n)\n```\n\n### With icons\n\nIcons can be used alone or combined with text labels:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"column\" gap=\"400\">\n <ToggleButtonGroup.Root aria-label=\"Icon-only formatting\">\n <ToggleButtonGroup.Button id=\"bold\" aria-label=\"Bold\">\n <Icons.FormatBold />\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"italic\" aria-label=\"Italic\">\n <Icons.FormatItalic />\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"underline\" aria-label=\"Underline\">\n <Icons.FormatUnderlined />\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n\n <ToggleButtonGroup.Root aria-label=\"Text alignment with labels\">\n <ToggleButtonGroup.Button id=\"left\">\n <Icons.FormatAlignLeft /> Left\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"center\">\n <Icons.FormatAlignCenter /> Center\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"right\">\n <Icons.FormatAlignRight /> Right\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n </Stack>\n)\n```\n\nWhen using icon-only buttons, always provide an `aria-label` on each button for screen reader accessibility.\n\n### Selection modes\n\nThe group supports both single-selection (default) and multi-selection modes:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"column\" gap=\"400\">\n <Stack direction=\"column\" gap=\"200\">\n <Text fontSize=\"350\" fontWeight=\"600\">Single selection (default)</Text>\n <ToggleButtonGroup.Root aria-label=\"Text alignment\">\n <ToggleButtonGroup.Button id=\"left\">Left</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"center\">Center</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"right\">Right</ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n </Stack>\n\n <Stack direction=\"column\" gap=\"200\">\n <Text fontSize=\"350\" fontWeight=\"600\">Multiple selection</Text>\n <ToggleButtonGroup.Root selectionMode=\"multiple\" aria-label=\"Text formatting\">\n <ToggleButtonGroup.Button id=\"bold\" aria-label=\"Bold\">\n <Icons.FormatBold />\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"italic\" aria-label=\"Italic\">\n <Icons.FormatItalic />\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"underline\" aria-label=\"Underline\">\n <Icons.FormatUnderlined />\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n </Stack>\n </Stack>\n)\n```\n\nIn single-selection mode, selecting a button automatically deselects any previously selected button. In multi-selection mode, users can select multiple buttons independently.\n\n### Disabled state\n\nDisable the entire group or individual buttons:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"column\" gap=\"400\">\n <Stack direction=\"column\" gap=\"200\">\n <Text fontSize=\"350\" fontWeight=\"600\">Disabled group</Text>\n <ToggleButtonGroup.Root isDisabled aria-label=\"Disabled alignment\">\n <ToggleButtonGroup.Button id=\"left\">Left</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"center\">Center</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"right\">Right</ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n </Stack>\n\n <Stack direction=\"column\" gap=\"200\">\n <Text fontSize=\"350\" fontWeight=\"600\">Individual disabled buttons</Text>\n <ToggleButtonGroup.Root aria-label=\"Partial alignment\">\n <ToggleButtonGroup.Button id=\"left\">Left</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"center\" isDisabled>Center</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"right\">Right</ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n </Stack>\n </Stack>\n)\n```\n\n### Uncontrolled mode\n\nUse `defaultSelectedKeys` to set initial selection without managing state:\n\n```jsx live-dev\nconst App = () => {\n const handleSelectionChange = (keys) => {\n console.log('Selection changed:', Array.from(keys));\n };\n\n return (\n <ToggleButtonGroup.Root\n defaultSelectedKeys={['center']}\n onSelectionChange={handleSelectionChange}\n aria-label=\"Text alignment\"\n >\n <ToggleButtonGroup.Button id=\"left\">Left</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"center\">Center</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"right\">Right</ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n );\n}\n```\n\n### Controlled mode\n\nFor full control over selection state, use `selectedKeys` with `onSelectionChange`:\n\n```jsx live-dev\nconst App = () => {\n const [selectedKeys, setSelectedKeys] = React.useState(new Set(['left']));\n\n return (\n <Stack direction=\"column\" gap=\"300\">\n <ToggleButtonGroup.Root\n selectedKeys={selectedKeys}\n onSelectionChange={setSelectedKeys}\n aria-label=\"Text alignment\"\n >\n <ToggleButtonGroup.Button id=\"left\">Left</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"center\">Center</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"right\">Right</ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n\n <Text fontSize=\"350\">\n Selected: {Array.from(selectedKeys).join(', ') || 'none'}\n </Text>\n </Stack>\n );\n}\n```\n\nIn controlled mode, the component's selection state is fully managed by your application. The `selectedKeys` prop accepts a `Set` containing the IDs of selected buttons.\n\n### Multi-selection with controlled state\n\nCombine `selectionMode=\"multiple\"` with controlled state for complex selection logic:\n\n```jsx live-dev\nconst App = () => {\n const [selectedFormats, setSelectedFormats] = React.useState(new Set([]));\n\n const formatNames = {\n bold: 'Bold',\n italic: 'Italic',\n underline: 'Underline'\n };\n\n const selectedList = Array.from(selectedFormats)\n .map(key => formatNames[key])\n .join(', ');\n\n return (\n <Stack direction=\"column\" gap=\"300\">\n <ToggleButtonGroup.Root\n selectionMode=\"multiple\"\n selectedKeys={selectedFormats}\n onSelectionChange={setSelectedFormats}\n aria-label=\"Text formatting\"\n >\n <ToggleButtonGroup.Button id=\"bold\" aria-label=\"Bold\">\n <Icons.FormatBold />\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"italic\" aria-label=\"Italic\">\n <Icons.FormatItalic />\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"underline\" aria-label=\"Underline\">\n <Icons.FormatUnderlined />\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n\n <Text fontSize=\"350\">\n Active formats: {selectedList || 'none'}\n </Text>\n </Stack>\n );\n}\n```\n\n## Component requirements\n\n## Accessibility\n\nThe ToggleButtonGroup component follows WCAG 2.1 AA guidelines and uses React Aria for robust accessibility support.\n\n#### Role\n\n- **Single-selection mode (default)**:\n - Root element has `role=\"radiogroup\"`\n - Each button has `role=\"radio\"`\n- **Multi-selection mode**:\n - Root element has `role=\"toolbar\"`\n - Each button has `role=\"button\"` with `aria-pressed` attribute\n\n#### Labeling\n\n- **Group label required**: Always provide an `aria-label` or `aria-labelledby` on the Root component\n- **Button labels**: Each button must have accessible text content or an `aria-label`\n- **Icon-only buttons**: Must include an `aria-label` on each button\n\n```jsx live-dev\nconst App = () => (\n <ToggleButtonGroup.Root aria-label=\"Text formatting options\">\n <ToggleButtonGroup.Button id=\"bold\" aria-label=\"Toggle bold\">\n <Icons.FormatBold />\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"italic\" aria-label=\"Toggle italic\">\n <Icons.FormatItalic />\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n)\n```\n\n#### Keyboard navigation\n\n| Key | Action |\n|-----|--------|\n| `Tab` | Move focus into/out of the button group |\n| `Arrow Left/Up` | Move focus to the previous button |\n| `Arrow Right/Down` | Move focus to the next button |\n| `Space` | Toggle the focused button's selection state |\n| `Home` | Move focus to the first button |\n| `End` | Move focus to the last button |\n\n#### Persistent ID\n\nIf your use case requires tracking and analytics for this component, it is good practice to add a **persistent**, **unique** id to the component:\n\n```tsx\nconst PERSISTENT_ID = \"text-alignment-toggle-group\";\n\nexport const Example = () => (\n <ToggleButtonGroup.Root id={PERSISTENT_ID} aria-label=\"Text alignment\">\n <ToggleButtonGroup.Button id=\"left\">Left</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"center\">Center</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"right\">Right</ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n);\n```\n\n## API reference\n\n<PropsTable id=\"ToggleButtonGroup\" />\n\n## Common patterns\n\n### Text editor toolbar\n\nCombine multiple toggle button groups to create a rich text formatting toolbar:\n\n```jsx live-dev\nconst App = () => {\n const [alignment, setAlignment] = React.useState(new Set(['left']));\n const [formats, setFormats] = React.useState(new Set([]));\n\n return (\n <Stack direction=\"row\" gap=\"400\" alignItems=\"center\">\n <ToggleButtonGroup.Root\n selectionMode=\"multiple\"\n selectedKeys={formats}\n onSelectionChange={setFormats}\n size=\"xs\"\n aria-label=\"Text formatting\"\n >\n <ToggleButtonGroup.Button id=\"bold\" aria-label=\"Bold\">\n <Icons.FormatBold />\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"italic\" aria-label=\"Italic\">\n <Icons.FormatItalic />\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"underline\" aria-label=\"Underline\">\n <Icons.FormatUnderlined />\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n\n <Separator orientation=\"vertical\" height=\"6\" />\n\n <ToggleButtonGroup.Root\n selectedKeys={alignment}\n onSelectionChange={setAlignment}\n size=\"xs\"\n aria-label=\"Text alignment\"\n >\n <ToggleButtonGroup.Button id=\"left\" aria-label=\"Align left\">\n <Icons.FormatAlignLeft />\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"center\" aria-label=\"Align center\">\n <Icons.FormatAlignCenter />\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"right\" aria-label=\"Align right\">\n <Icons.FormatAlignRight />\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n </Stack>\n );\n}\n```\n\n### View mode selector\n\nUse toggle button groups to switch between different view modes:\n\n```jsx live-dev\nconst App = () => {\n const [viewMode, setViewMode] = React.useState(new Set(['grid']));\n\n const selectedMode = Array.from(viewMode)[0] || 'grid';\n\n return (\n <Stack direction=\"column\" gap=\"300\">\n <ToggleButtonGroup.Root\n selectedKeys={viewMode}\n onSelectionChange={setViewMode}\n aria-label=\"View mode\"\n >\n <ToggleButtonGroup.Button id=\"grid\" aria-label=\"Grid view\">\n <Icons.GridView />\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"list\" aria-label=\"List view\">\n <Icons.ViewList />\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"column\" aria-label=\"Column view\">\n <Icons.ViewColumn />\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n\n <Text fontSize=\"350\">Current view: {selectedMode}</Text>\n </Stack>\n );\n}\n```\n\n## Testing your implementation\n\nThese examples demonstrate how to test your implementation when using ToggleButtonGroup within your application. As the component's internal functionality is already tested by Nimbus, these patterns help you verify your integration and application-specific logic.\n\n### Basic Rendering Tests\n\nVerify the toggle button group renders with expected structure and accessibility attributes\n\n```tsx\nimport { describe, it, expect, vi } from \"vitest\";\nimport { render, screen, within } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { ToggleButtonGroup, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"ToggleButtonGroup - Basic rendering\", () => {\n it(\"renders toggle button group with buttons\", () => {\n render(\n <NimbusProvider>\n <ToggleButtonGroup.Root aria-label=\"Text alignment\">\n <ToggleButtonGroup.Button id=\"left\">Left</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"center\">\n Center\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"right\">Right</ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n </NimbusProvider>\n );\n\n const group = screen.getByRole(\"radiogroup\", { name: /text alignment/i });\n expect(group).toBeInTheDocument();\n\n const buttons = within(group).getAllByRole(\"radio\");\n expect(buttons).toHaveLength(3);\n expect(buttons[0]).toHaveTextContent(\"Left\");\n expect(buttons[1]).toHaveTextContent(\"Center\");\n expect(buttons[2]).toHaveTextContent(\"Right\");\n });\n\n it(\"renders with correct accessibility attributes\", () => {\n render(\n <NimbusProvider>\n <ToggleButtonGroup.Root aria-label=\"Formatting options\">\n <ToggleButtonGroup.Button id=\"bold\">Bold</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"italic\">\n Italic\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n </NimbusProvider>\n );\n\n const group = screen.getByRole(\"radiogroup\", {\n name: /formatting options/i,\n });\n expect(group).toHaveAttribute(\"aria-label\", \"Formatting options\");\n });\n});\n```\n\n### Single Selection Tests\n\nTest single-selection mode behavior (default mode)\n\n```tsx\nimport { describe, it, expect, vi } from \"vitest\";\nimport { render, screen, within } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { ToggleButtonGroup, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"ToggleButtonGroup - Single selection mode\", () => {\n it(\"allows selecting one button at a time\", async () => {\n const user = userEvent.setup();\n const handleChange = vi.fn();\n\n render(\n <NimbusProvider>\n <ToggleButtonGroup.Root\n onSelectionChange={handleChange}\n aria-label=\"Text alignment\"\n >\n <ToggleButtonGroup.Button id=\"left\">Left</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"center\">\n Center\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"right\">Right</ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n </NimbusProvider>\n );\n\n const buttons = screen.getAllByRole(\"radio\");\n const [leftButton, centerButton] = buttons;\n\n // Initially no buttons selected\n expect(leftButton).toHaveAttribute(\"aria-checked\", \"false\");\n expect(centerButton).toHaveAttribute(\"aria-checked\", \"false\");\n\n // Click first button\n await user.click(leftButton);\n expect(handleChange).toHaveBeenCalledWith(new Set([\"left\"]));\n\n // Click second button - should deselect first\n await user.click(centerButton);\n expect(handleChange).toHaveBeenCalledWith(new Set([\"center\"]));\n });\n\n it(\"supports toggling selection by clicking same button\", async () => {\n const user = userEvent.setup();\n const handleChange = vi.fn();\n\n render(\n <NimbusProvider>\n <ToggleButtonGroup.Root\n onSelectionChange={handleChange}\n aria-label=\"Options\"\n >\n <ToggleButtonGroup.Button id=\"option1\">\n Option 1\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n </NimbusProvider>\n );\n\n const button = screen.getByRole(\"radio\");\n\n // Select\n await user.click(button);\n expect(handleChange).toHaveBeenCalledWith(new Set([\"option1\"]));\n\n // Deselect\n await user.click(button);\n expect(handleChange).toHaveBeenCalledWith(new Set());\n });\n});\n```\n\n### Multiple Selection Tests\n\nTest multi-selection mode behavior with selectionMode=\"multiple\"\n\n```tsx\nimport { describe, it, expect, vi } from \"vitest\";\nimport { render, screen, within } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { ToggleButtonGroup, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"ToggleButtonGroup - Multiple selection mode\", () => {\n it(\"allows selecting multiple buttons independently\", async () => {\n const user = userEvent.setup();\n const handleChange = vi.fn();\n\n render(\n <NimbusProvider>\n <ToggleButtonGroup.Root\n selectionMode=\"multiple\"\n onSelectionChange={handleChange}\n aria-label=\"Text formatting\"\n >\n <ToggleButtonGroup.Button id=\"bold\">Bold</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"italic\">\n Italic\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"underline\">\n Underline\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n </NimbusProvider>\n );\n\n const toolbar = screen.getByRole(\"toolbar\", { name: /text formatting/i });\n const buttons = within(toolbar).getAllByRole(\"button\");\n const [boldButton, italicButton] = buttons;\n\n // Select first button\n await user.click(boldButton);\n expect(handleChange).toHaveBeenCalledWith(new Set([\"bold\"]));\n\n handleChange.mockClear();\n\n // Select second button - first should remain selected\n await user.click(italicButton);\n expect(handleChange).toHaveBeenCalledWith(new Set([\"bold\", \"italic\"]));\n });\n});\n```\n\n### Keyboard Navigation Tests\n\nTest keyboard interactions and focus management\n\n```tsx\nimport { describe, it, expect, vi } from \"vitest\";\nimport { render, screen, within } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { ToggleButtonGroup, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"ToggleButtonGroup - Keyboard navigation\", () => {\n it(\"supports arrow key navigation between buttons\", async () => {\n const user = userEvent.setup();\n\n render(\n <NimbusProvider>\n <ToggleButtonGroup.Root aria-label=\"Navigation\">\n <ToggleButtonGroup.Button id=\"first\">First</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"second\">\n Second\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"third\">Third</ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n </NimbusProvider>\n );\n\n const buttons = screen.getAllByRole(\"radio\");\n const [firstButton, secondButton, thirdButton] = buttons;\n\n // Tab to focus first button\n await user.tab();\n expect(firstButton).toHaveFocus();\n\n // Arrow right to second button\n await user.keyboard(\"{ArrowRight}\");\n expect(secondButton).toHaveFocus();\n\n // Arrow right to third button\n await user.keyboard(\"{ArrowRight}\");\n expect(thirdButton).toHaveFocus();\n\n // Arrow left back to second button\n await user.keyboard(\"{ArrowLeft}\");\n expect(secondButton).toHaveFocus();\n });\n\n it(\"supports Space key for toggling selection\", async () => {\n const user = userEvent.setup();\n const handleChange = vi.fn();\n\n render(\n <NimbusProvider>\n <ToggleButtonGroup.Root\n onSelectionChange={handleChange}\n aria-label=\"Options\"\n >\n <ToggleButtonGroup.Button id=\"option1\">\n Option 1\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"option2\">\n Option 2\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n </NimbusProvider>\n );\n\n // Tab to focus first button\n await user.tab();\n\n // Press Space to select\n await user.keyboard(\" \");\n expect(handleChange).toHaveBeenCalledWith(new Set([\"option1\"]));\n\n handleChange.mockClear();\n\n // Navigate to second button\n await user.keyboard(\"{ArrowRight}\");\n\n // Press Space to select second\n await user.keyboard(\" \");\n expect(handleChange).toHaveBeenCalledWith(new Set([\"option2\"]));\n });\n});\n```\n\n### Disabled State Tests\n\nTest behavior when group or individual buttons are disabled\n\n```tsx\nimport { describe, it, expect, vi } from \"vitest\";\nimport { render, screen, within } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { ToggleButtonGroup, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"ToggleButtonGroup - Disabled state\", () => {\n it(\"disables entire group when isDisabled is true\", async () => {\n const user = userEvent.setup();\n const handleChange = vi.fn();\n\n render(\n <NimbusProvider>\n <ToggleButtonGroup.Root\n isDisabled\n onSelectionChange={handleChange}\n aria-label=\"Disabled group\"\n >\n <ToggleButtonGroup.Button id=\"option1\">\n Option 1\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"option2\">\n Option 2\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n </NimbusProvider>\n );\n\n const buttons = screen.getAllByRole(\"radio\");\n\n // All buttons should be disabled\n buttons.forEach((button) => {\n expect(button).toBeDisabled();\n });\n\n // Clicking disabled button should not trigger change\n await user.click(buttons[0]);\n expect(handleChange).not.toHaveBeenCalled();\n });\n\n it(\"disables individual buttons\", async () => {\n const user = userEvent.setup();\n const handleChange = vi.fn();\n\n render(\n <NimbusProvider>\n <ToggleButtonGroup.Root\n onSelectionChange={handleChange}\n aria-label=\"Partial disabled\"\n >\n <ToggleButtonGroup.Button id=\"enabled\">\n Enabled\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"disabled\" isDisabled>\n Disabled\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n </NimbusProvider>\n );\n\n const buttons = screen.getAllByRole(\"radio\");\n const [enabledButton, disabledButton] = buttons;\n\n expect(enabledButton).not.toBeDisabled();\n expect(disabledButton).toBeDisabled();\n\n // Click enabled button works\n await user.click(enabledButton);\n expect(handleChange).toHaveBeenCalledWith(new Set([\"enabled\"]));\n\n handleChange.mockClear();\n\n // Click disabled button does not work\n await user.click(disabledButton);\n expect(handleChange).not.toHaveBeenCalled();\n });\n});\n```\n\n### Controlled Mode Tests\n\nTest controlled selection state with selectedKeys prop\n\n```tsx\nimport { describe, it, expect, vi } from \"vitest\";\nimport { render, screen, within } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { ToggleButtonGroup, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"ToggleButtonGroup - Controlled mode\", () => {\n it(\"respects controlled selectedKeys prop\", () => {\n const { rerender } = render(\n <NimbusProvider>\n <ToggleButtonGroup.Root\n selectedKeys={new Set([\"center\"])}\n aria-label=\"Controlled\"\n >\n <ToggleButtonGroup.Button id=\"left\">Left</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"center\">\n Center\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"right\">Right</ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n </NimbusProvider>\n );\n\n const buttons = screen.getAllByRole(\"radio\");\n const [leftButton, centerButton, rightButton] = buttons;\n\n // Center button should be selected\n expect(leftButton).toHaveAttribute(\"aria-checked\", \"false\");\n expect(centerButton).toHaveAttribute(\"aria-checked\", \"true\");\n expect(rightButton).toHaveAttribute(\"aria-checked\", \"false\");\n\n // Update selection externally\n rerender(\n <NimbusProvider>\n <ToggleButtonGroup.Root\n selectedKeys={new Set([\"right\"])}\n aria-label=\"Controlled\"\n >\n <ToggleButtonGroup.Button id=\"left\">Left</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"center\">\n Center\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"right\">Right</ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n </NimbusProvider>\n );\n\n // Right button should now be selected\n expect(leftButton).toHaveAttribute(\"aria-checked\", \"false\");\n expect(centerButton).toHaveAttribute(\"aria-checked\", \"false\");\n expect(rightButton).toHaveAttribute(\"aria-checked\", \"true\");\n });\n\n it(\"calls onSelectionChange with updated selection\", async () => {\n const user = userEvent.setup();\n const handleChange = vi.fn();\n\n render(\n <NimbusProvider>\n <ToggleButtonGroup.Root\n selectedKeys={new Set([\"left\"])}\n onSelectionChange={handleChange}\n aria-label=\"Controlled with callback\"\n >\n <ToggleButtonGroup.Button id=\"left\">Left</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"center\">\n Center\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n </NimbusProvider>\n );\n\n const buttons = screen.getAllByRole(\"radio\");\n const centerButton = buttons[1];\n\n await user.click(centerButton);\n expect(handleChange).toHaveBeenCalledWith(new Set([\"center\"]));\n });\n});\n```\n\n### Uncontrolled Mode Tests\n\nTest uncontrolled selection with defaultSelectedKeys prop\n\n```tsx\nimport { describe, it, expect, vi } from \"vitest\";\nimport { render, screen, within } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { ToggleButtonGroup, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"ToggleButtonGroup - Uncontrolled mode\", () => {\n it(\"respects defaultSelectedKeys for initial selection\", () => {\n render(\n <NimbusProvider>\n <ToggleButtonGroup.Root\n defaultSelectedKeys={[\"center\"]}\n aria-label=\"Uncontrolled\"\n >\n <ToggleButtonGroup.Button id=\"left\">Left</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"center\">\n Center\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"right\">Right</ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n </NimbusProvider>\n );\n\n const buttons = screen.getAllByRole(\"radio\");\n const [leftButton, centerButton, rightButton] = buttons;\n\n expect(leftButton).toHaveAttribute(\"aria-checked\", \"false\");\n expect(centerButton).toHaveAttribute(\"aria-checked\", \"true\");\n expect(rightButton).toHaveAttribute(\"aria-checked\", \"false\");\n });\n\n it(\"manages selection state internally\", async () => {\n const user = userEvent.setup();\n const handleChange = vi.fn();\n\n render(\n <NimbusProvider>\n <ToggleButtonGroup.Root\n defaultSelectedKeys={[\"left\"]}\n onSelectionChange={handleChange}\n aria-label=\"Uncontrolled internal\"\n >\n <ToggleButtonGroup.Button id=\"left\">Left</ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"center\">\n Center\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n </NimbusProvider>\n );\n\n const buttons = screen.getAllByRole(\"radio\");\n const centerButton = buttons[1];\n\n // Click center button\n await user.click(centerButton);\n\n // Callback should be called with new selection\n expect(handleChange).toHaveBeenCalledWith(new Set([\"center\"]));\n\n // Component should update its own internal state\n expect(centerButton).toHaveAttribute(\"aria-checked\", \"true\");\n });\n});\n```\n\n\n## Resources\n\n- [Storybook](https://nimbus-storybook.vercel.app/?path=/docs/components-buttons-togglebuttongroup--docs)\n- [React Aria ToggleButton](https://react-spectrum.adobe.com/react-aria/ToggleButton.html)\n- [ARIA: radio role](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/radio_role)\n",
322
+ "toc": [
323
+ {
324
+ "value": "Getting started",
325
+ "href": "#getting-started",
326
+ "depth": 2,
327
+ "numbering": [
328
+ 1,
329
+ 1
330
+ ],
331
+ "parent": "root"
332
+ },
333
+ {
334
+ "value": "Import",
335
+ "href": "#import",
336
+ "depth": 3,
337
+ "numbering": [
338
+ 1,
339
+ 1,
340
+ 1
341
+ ],
342
+ "parent": "root"
343
+ },
344
+ {
345
+ "value": "Basic usage",
346
+ "href": "#basic-usage",
347
+ "depth": 3,
348
+ "numbering": [
349
+ 1,
350
+ 1,
351
+ 2
352
+ ],
353
+ "parent": "root"
354
+ },
355
+ {
356
+ "value": "Usage examples",
357
+ "href": "#usage-examples",
358
+ "depth": 2,
359
+ "numbering": [
360
+ 1,
361
+ 2
362
+ ],
363
+ "parent": "root"
364
+ },
365
+ {
366
+ "value": "Size options",
367
+ "href": "#size-options",
368
+ "depth": 3,
369
+ "numbering": [
370
+ 1,
371
+ 2,
372
+ 1
373
+ ],
374
+ "parent": "root"
375
+ },
376
+ {
377
+ "value": "Color palettes",
378
+ "href": "#color-palettes",
379
+ "depth": 3,
380
+ "numbering": [
381
+ 1,
382
+ 2,
383
+ 2
384
+ ],
385
+ "parent": "root"
386
+ },
387
+ {
388
+ "value": "With icons",
389
+ "href": "#with-icons",
390
+ "depth": 3,
391
+ "numbering": [
392
+ 1,
393
+ 2,
394
+ 3
395
+ ],
396
+ "parent": "root"
397
+ },
398
+ {
399
+ "value": "Selection modes",
400
+ "href": "#selection-modes",
401
+ "depth": 3,
402
+ "numbering": [
403
+ 1,
404
+ 2,
405
+ 4
406
+ ],
407
+ "parent": "root"
408
+ },
409
+ {
410
+ "value": "Disabled state",
411
+ "href": "#disabled-state",
412
+ "depth": 3,
413
+ "numbering": [
414
+ 1,
415
+ 2,
416
+ 5
417
+ ],
418
+ "parent": "root"
419
+ },
420
+ {
421
+ "value": "Uncontrolled mode",
422
+ "href": "#uncontrolled-mode",
423
+ "depth": 3,
424
+ "numbering": [
425
+ 1,
426
+ 2,
427
+ 6
428
+ ],
429
+ "parent": "root"
430
+ },
431
+ {
432
+ "value": "Controlled mode",
433
+ "href": "#controlled-mode",
434
+ "depth": 3,
435
+ "numbering": [
436
+ 1,
437
+ 2,
438
+ 7
439
+ ],
440
+ "parent": "root"
441
+ },
442
+ {
443
+ "value": "Multi-selection with controlled state",
444
+ "href": "#multi-selection-with-controlled-state",
445
+ "depth": 3,
446
+ "numbering": [
447
+ 1,
448
+ 2,
449
+ 8
450
+ ],
451
+ "parent": "root"
452
+ },
453
+ {
454
+ "value": "Component requirements",
455
+ "href": "#component-requirements",
456
+ "depth": 2,
457
+ "numbering": [
458
+ 1,
459
+ 3
460
+ ],
461
+ "parent": "root"
462
+ },
463
+ {
464
+ "value": "Accessibility",
465
+ "href": "#accessibility",
466
+ "depth": 2,
467
+ "numbering": [
468
+ 1,
469
+ 4
470
+ ],
471
+ "parent": "root"
472
+ },
473
+ {
474
+ "value": "Role",
475
+ "href": "#role",
476
+ "depth": 4,
477
+ "numbering": [
478
+ 1,
479
+ 4,
480
+ 1,
481
+ 1
482
+ ],
483
+ "parent": "root"
484
+ },
485
+ {
486
+ "value": "Labeling",
487
+ "href": "#labeling",
488
+ "depth": 4,
489
+ "numbering": [
490
+ 1,
491
+ 4,
492
+ 1,
493
+ 2
494
+ ],
495
+ "parent": "root"
496
+ },
497
+ {
498
+ "value": "Keyboard navigation",
499
+ "href": "#keyboard-navigation",
500
+ "depth": 4,
501
+ "numbering": [
502
+ 1,
503
+ 4,
504
+ 1,
505
+ 3
506
+ ],
507
+ "parent": "root"
508
+ },
509
+ {
510
+ "value": "Persistent ID",
511
+ "href": "#persistent-id",
512
+ "depth": 4,
513
+ "numbering": [
514
+ 1,
515
+ 4,
516
+ 1,
517
+ 4
518
+ ],
519
+ "parent": "root"
520
+ },
521
+ {
522
+ "value": "API reference",
523
+ "href": "#api-reference",
524
+ "depth": 2,
525
+ "numbering": [
526
+ 1,
527
+ 5
528
+ ],
529
+ "parent": "root"
530
+ },
531
+ {
532
+ "value": "Common patterns",
533
+ "href": "#common-patterns",
534
+ "depth": 2,
535
+ "numbering": [
536
+ 1,
537
+ 6
538
+ ],
539
+ "parent": "root"
540
+ },
541
+ {
542
+ "value": "Text editor toolbar",
543
+ "href": "#text-editor-toolbar",
544
+ "depth": 3,
545
+ "numbering": [
546
+ 1,
547
+ 6,
548
+ 1
549
+ ],
550
+ "parent": "root"
551
+ },
552
+ {
553
+ "value": "View mode selector",
554
+ "href": "#view-mode-selector",
555
+ "depth": 3,
556
+ "numbering": [
557
+ 1,
558
+ 6,
559
+ 2
560
+ ],
561
+ "parent": "root"
562
+ },
563
+ {
564
+ "value": "Testing your implementation",
565
+ "href": "#testing-your-implementation",
566
+ "depth": 2,
567
+ "numbering": [
568
+ 1,
569
+ 7
570
+ ],
571
+ "parent": "root"
572
+ },
573
+ {
574
+ "value": "Basic Rendering Tests",
575
+ "href": "#basic-rendering-tests",
576
+ "depth": 3,
577
+ "numbering": [
578
+ 1,
579
+ 7,
580
+ 1
581
+ ],
582
+ "parent": "root"
583
+ },
584
+ {
585
+ "value": "Single Selection Tests",
586
+ "href": "#single-selection-tests",
587
+ "depth": 3,
588
+ "numbering": [
589
+ 1,
590
+ 7,
591
+ 2
592
+ ],
593
+ "parent": "root"
594
+ },
595
+ {
596
+ "value": "Multiple Selection Tests",
597
+ "href": "#multiple-selection-tests",
598
+ "depth": 3,
599
+ "numbering": [
600
+ 1,
601
+ 7,
602
+ 3
603
+ ],
604
+ "parent": "root"
605
+ },
606
+ {
607
+ "value": "Keyboard Navigation Tests",
608
+ "href": "#keyboard-navigation-tests",
609
+ "depth": 3,
610
+ "numbering": [
611
+ 1,
612
+ 7,
613
+ 4
614
+ ],
615
+ "parent": "root"
616
+ },
617
+ {
618
+ "value": "Disabled State Tests",
619
+ "href": "#disabled-state-tests",
620
+ "depth": 3,
621
+ "numbering": [
622
+ 1,
623
+ 7,
624
+ 5
625
+ ],
626
+ "parent": "root"
627
+ },
628
+ {
629
+ "value": "Controlled Mode Tests",
630
+ "href": "#controlled-mode-tests",
631
+ "depth": 3,
632
+ "numbering": [
633
+ 1,
634
+ 7,
635
+ 6
636
+ ],
637
+ "parent": "root"
638
+ },
639
+ {
640
+ "value": "Uncontrolled Mode Tests",
641
+ "href": "#uncontrolled-mode-tests",
642
+ "depth": 3,
643
+ "numbering": [
644
+ 1,
645
+ 7,
646
+ 7
647
+ ],
648
+ "parent": "root"
649
+ },
650
+ {
651
+ "value": "Resources",
652
+ "href": "#resources",
653
+ "depth": 2,
654
+ "numbering": [
655
+ 1,
656
+ 8
657
+ ],
658
+ "parent": "root"
659
+ }
660
+ ]
661
+ },
662
+ "guidelines": {
663
+ "mdx": "\n## Guidelines\n\nButton group guidelines focus on presenting sets of related actions in a clear,\norganized, and accessible manner, enabling users to easily understand and choose\nbetween the available options, often emphasizing visual connection and logical\narrangement.\n\n### Best practices\n\n- **Order logically:** Arrange buttons by importance or user flow.\n- **Use clear labels:** Keep button text concise and understandable, if using\n icons, utilize tooltip labels.\n- **Limit button count:** Avoid overwhelming users with too many options.\n- **Space appropriately:** Place button groups close to controlled content.\n- **Ensure accessibility:** Make them navigable and understandable by everyone.\n\n### Usage\n\nA button group is best used when you need to present users with a set of closely\nrelated, mutually exclusive (e.g., a user selecting data table views), or\ncomplementary actions that are important enough to be displayed directly in the\ninterface for quick access. Think of scenarios where users need to make a choice\nbetween a few options or perform a series of connected tasks within a specific\ncontext.\n\n> [!TIP]\\\n> When to use\n\n- **Grouping related actions:** Organize similar tasks together. Use button\n groups to cluster actions that are logically connected, like order processing\n steps or product editing options.\n- **Providing mutually exclusive choices:** Offer clear alternatives. When users\n need to select only one option from a set, like filtering by order status or\n choosing a report timeframe.\n- **Streamlining workflows:** Enable quick task completion. For frequently\n performed actions on a single item or within a specific context, like managing\n inventory or editing customer details.\n- **Conserving screen space:** Present options compactly. When screen real\n estate is limited, button groups offer a space-efficient way to display\n multiple relevant actions.\n- **Enhancing visual clarity:** Improve comprehension of options. Visually\n connecting related buttons helps users understand the available choices and\n their relationships.\n- **Facilitating efficient navigation:** Offer quick jumps within a section. For\n navigating between closely related views or steps within a specific management\n area.\n\n> [!CAUTION]\\\n> When not to use\n\n- **Do not use a button group as a tab navigation:** There is a specific\n [tab component](#), please use this component instead. There is better\n accessibility support, and consistency with other designs and uses.\n- **Unrelated actions:** Don't group unrelated actions together. If buttons\n perform completely different tasks, a button group can be confusing.\n- **Overcrowding the UI:** Avoid too many buttons within a group. Too much\n choice confuses users and makes decision making more difficult.\n- **Do not use for multi-stepped processes:** Button groups are for single click\n actions, not for guiding users through complex sequences.\n- **Avoid if actions aren't logically linked:** If there is no clear\n relationship between the buttons, grouping them may be misleading.\n\n### Selecting views\n\nTo allow users to switch between different display views (e.g., grid view, list\nview, map view). Make sure that users can easily recognize icons and pair with\nhover tooltips.\n\n> [!TIP]\\\n> **Do**\n>\n> - Do use clear differentiated, and familiar icons for users to be able to\n> toggle options.\n> - Do use tooltips to easily explain what a tool is to a user.\n\n```jsx live\nconst App = () => (\n <ToggleButtonGroup.Root aria-label=\"Select view\" selectedKeys={[\"view-list\"]} colorPalette=\"primary\">\n <Tooltip.Root delay={0} closeDelay={0}>\n <ToggleButtonGroup.Button id=\"view-grid\" aria-label=\"Grid View\">\n <Icons.Apps />\n </ToggleButtonGroup.Button>\n <Tooltip.Content>Grid View</Tooltip.Content>\n </Tooltip.Root>\n <Tooltip.Root delay={0} closeDelay={0}>\n <ToggleButtonGroup.Button id=\"view-list\" aria-label=\"List View\">\n <Icons.List />\n </ToggleButtonGroup.Button>\n <Tooltip.Content>List View</Tooltip.Content>\n </Tooltip.Root>\n <Tooltip.Root delay={0} closeDelay={0}>\n <ToggleButtonGroup.Button id=\"view-map\" aria-label=\"Map View\">\n <Icons.ViewWeek />\n </ToggleButtonGroup.Button>\n <Tooltip.Content>Week View</Tooltip.Content>\n </Tooltip.Root>\n </ToggleButtonGroup.Root>\n);\n```\n\n> [!CAUTION]\\\n> **Don't**\n>\n> - Do not use icons that users will not easily recognize or pairings of icons\n> that seem too visually similar.\n> - Always pair icon buttons with tooltip labels for all users.\n\n```jsx live\nconst App = () => (\n <ToggleButtonGroup.Root aria-label=\"Select view (Bad Example)\" selectedKeys={[\"view-confusing2\"]} colorPalette=\"primary\">\n <ToggleButtonGroup.Button id=\"view-confusing1\" aria-label=\"Confusing Icon 1\">\n <Icons.Apartment />\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"view-confusing2\" aria-label=\"Confusing Icon 2\">\n <Icons.ProductionQuantityLimits />\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"view-confusing3\" aria-label=\"Confusing Icon 3\">\n <Icons.Tour />\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n);\n```\n\n### Filter information\n\nIn data tables or lists, button groups can be used to filter or sort content.\n\n> [!TIP]\\\n> **Do**\n>\n> - When using button groups to show filtered lists, pair closely with\n> information to make sure that users know that this interaction shows tagged\n> information instead of changing the state of any selected data. This can\n> sometimes look like an item count included with the button group items.\n> - It is not good practice to mix styles in button groupings.\n\n```jsx live\nconst App = () => (\n <ToggleButtonGroup.Root aria-label=\"Filter status\" selectedKeys={[\"filter-accepted\"]} colorPalette=\"primary\">\n <ToggleButtonGroup.Button id=\"filter-drafts\">\n Drafts (6)\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"filter-accepted\">\n Accepted (2)\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"filter-rejected\">\n Rejected (10)\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n);\n```\n\n> [!CAUTION]\\\n> **Don't**\n>\n> - Do not confuse the user with unclear options.\n> - Do not use unfamiliar and lengthly labels.\n\n```jsx live\nconst App = () => (\n <ToggleButtonGroup.Root aria-label=\"Filter status (Bad Example)\" selectedKeys={[\"filter-granted\"]} colorPalette=\"primary\">\n <ToggleButtonGroup.Button id=\"filter-compositions\">\n Compositions\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"filter-granted\">\n Granted\n </ToggleButtonGroup.Button>\n <ToggleButtonGroup.Button id=\"filter-veto\">\n Veto\n </ToggleButtonGroup.Button>\n </ToggleButtonGroup.Root>\n);\n```\n",
664
+ "toc": [
665
+ {
666
+ "value": "Guidelines",
667
+ "href": "#guidelines",
668
+ "depth": 2,
669
+ "numbering": [
670
+ 1,
671
+ 1
672
+ ],
673
+ "parent": "root"
674
+ },
675
+ {
676
+ "value": "Best practices",
677
+ "href": "#best-practices",
678
+ "depth": 3,
679
+ "numbering": [
680
+ 1,
681
+ 1,
682
+ 1
683
+ ],
684
+ "parent": "root"
685
+ },
686
+ {
687
+ "value": "Usage",
688
+ "href": "#usage",
689
+ "depth": 3,
690
+ "numbering": [
691
+ 1,
692
+ 1,
693
+ 2
694
+ ],
695
+ "parent": "root"
696
+ },
697
+ {
698
+ "value": "Selecting views",
699
+ "href": "#selecting-views",
700
+ "depth": 3,
701
+ "numbering": [
702
+ 1,
703
+ 1,
704
+ 3
705
+ ],
706
+ "parent": "root"
707
+ },
708
+ {
709
+ "value": "Filter information",
710
+ "href": "#filter-information",
711
+ "depth": 3,
712
+ "numbering": [
713
+ 1,
714
+ 1,
715
+ 4
716
+ ],
717
+ "parent": "root"
718
+ }
719
+ ]
720
+ }
721
+ }
722
+ }