@commercetools/nimbus-mcp 0.1.0 → 2.11.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 (453) hide show
  1. package/README.md +63 -14
  2. package/data/docs/route-manifest.json +10998 -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-scrollarea.json +428 -0
  59. package/data/docs/routes/components-layout-separator.json +461 -0
  60. package/data/docs/routes/components-layout-simple-grid.json +519 -0
  61. package/data/docs/routes/components-layout-spacer.json +573 -0
  62. package/data/docs/routes/components-layout-stack.json +481 -0
  63. package/data/docs/routes/components-layout.json +34 -0
  64. package/data/docs/routes/components-media-avatar.json +427 -0
  65. package/data/docs/routes/components-media-icon.json +663 -0
  66. package/data/docs/routes/components-media-image.json +511 -0
  67. package/data/docs/routes/components-media-inline-svg.json +586 -0
  68. package/data/docs/routes/components-media.json +34 -0
  69. package/data/docs/routes/components-navigation-accordion.json +643 -0
  70. package/data/docs/routes/components-navigation-collapsible-motion.json +628 -0
  71. package/data/docs/routes/components-navigation-link.json +554 -0
  72. package/data/docs/routes/components-navigation-menu.json +546 -0
  73. package/data/docs/routes/components-navigation-pagination.json +502 -0
  74. package/data/docs/routes/components-navigation-steps.json +629 -0
  75. package/data/docs/routes/components-navigation-tabnav.json +546 -0
  76. package/data/docs/routes/components-navigation-tabs.json +635 -0
  77. package/data/docs/routes/components-navigation-toolbar.json +549 -0
  78. package/data/docs/routes/components-navigation.json +34 -0
  79. package/data/docs/routes/components-typography-code.json +39 -0
  80. package/data/docs/routes/components-typography-heading.json +402 -0
  81. package/data/docs/routes/components-typography-kbd.json +399 -0
  82. package/data/docs/routes/components-typography-list.json +593 -0
  83. package/data/docs/routes/components-typography-text.json +444 -0
  84. package/data/docs/routes/components-typography.json +34 -0
  85. package/data/docs/routes/components-utilities-nimbus-i18n-provider.json +295 -0
  86. package/data/docs/routes/components-utilities-nimbus-provider.json +663 -0
  87. package/data/docs/routes/components-utilities.json +34 -0
  88. package/data/docs/routes/components.json +33 -0
  89. package/data/docs/routes/home-contribute-adrs-adr0001-consumer-component-apis.json +314 -0
  90. package/data/docs/routes/home-contribute-adrs-adr0002-compound-component-extraction.json +160 -0
  91. package/data/docs/routes/home-contribute-adrs-adr0003-component-lifecycle-states.json +460 -0
  92. package/data/docs/routes/home-contribute-adrs.json +205 -0
  93. package/data/docs/routes/home-contribute-development-setup.json +213 -0
  94. package/data/docs/routes/home-contribute-stats.json +36 -0
  95. package/data/docs/routes/home-contribute.json +36 -0
  96. package/data/docs/routes/home-design-tokens-aspect-ratios.json +36 -0
  97. package/data/docs/routes/home-design-tokens-borders.json +35 -0
  98. package/data/docs/routes/home-design-tokens-colors.json +157 -0
  99. package/data/docs/routes/home-design-tokens-other-animations.json +119 -0
  100. package/data/docs/routes/home-design-tokens-other-blurs.json +36 -0
  101. package/data/docs/routes/home-design-tokens-other-breakpoints.json +61 -0
  102. package/data/docs/routes/home-design-tokens-other-cursors.json +36 -0
  103. package/data/docs/routes/home-design-tokens-other-z-indices.json +39 -0
  104. package/data/docs/routes/home-design-tokens-other.json +35 -0
  105. package/data/docs/routes/home-design-tokens-radii.json +59 -0
  106. package/data/docs/routes/home-design-tokens-shadows.json +57 -0
  107. package/data/docs/routes/home-design-tokens-sizes.json +137 -0
  108. package/data/docs/routes/home-design-tokens-spacing.json +36 -0
  109. package/data/docs/routes/home-design-tokens-typography.json +184 -0
  110. package/data/docs/routes/home-design-tokens.json +34 -0
  111. package/data/docs/routes/home-getting-started-core-concepts.json +301 -0
  112. package/data/docs/routes/home-getting-started-installation.json +621 -0
  113. package/data/docs/routes/home-getting-started-mcp-server-overview.json +139 -0
  114. package/data/docs/routes/home-getting-started-mcp-server-setup.json +316 -0
  115. package/data/docs/routes/home-getting-started-release-process.json +294 -0
  116. package/data/docs/routes/home-getting-started-testing-setup.json +296 -0
  117. package/data/docs/routes/home-playground-markdown.json +638 -0
  118. package/data/docs/routes/home-playground-toc.json +169 -0
  119. package/data/docs/routes/home-playground.json +34 -0
  120. package/data/docs/routes/home-style-props-background.json +236 -0
  121. package/data/docs/routes/home-style-props-border.json +310 -0
  122. package/data/docs/routes/home-style-props-display.json +120 -0
  123. package/data/docs/routes/home-style-props-effects.json +116 -0
  124. package/data/docs/routes/home-style-props-filters.json +396 -0
  125. package/data/docs/routes/home-style-props-flex-and-grid.json +496 -0
  126. package/data/docs/routes/home-style-props-interactivity.json +356 -0
  127. package/data/docs/routes/home-style-props-layout.json +422 -0
  128. package/data/docs/routes/home-style-props-list.json +116 -0
  129. package/data/docs/routes/home-style-props-sizing.json +244 -0
  130. package/data/docs/routes/home-style-props-spacing.json +228 -0
  131. package/data/docs/routes/home-style-props-svg.json +96 -0
  132. package/data/docs/routes/home-style-props-tables.json +116 -0
  133. package/data/docs/routes/home-style-props-transforms.json +216 -0
  134. package/data/docs/routes/home-style-props-transitions.json +216 -0
  135. package/data/docs/routes/home-style-props-typography.json +536 -0
  136. package/data/docs/routes/home-style-props.json +33 -0
  137. package/data/docs/routes/home.json +32 -0
  138. package/data/docs/routes/hooks-usecopytoclipboard.json +76 -0
  139. package/data/docs/routes/hooks-usehotkeys.json +117 -0
  140. package/data/docs/routes/hooks.json +33 -0
  141. package/data/docs/routes/icons.json +32 -0
  142. package/data/docs/routes/patterns-fields-date-range-picker-field.json +393 -0
  143. package/data/docs/routes/patterns-fields-money-input-field.json +415 -0
  144. package/data/docs/routes/patterns-fields-multiline-text-input-field.json +404 -0
  145. package/data/docs/routes/patterns-fields-number-input-field.json +470 -0
  146. package/data/docs/routes/patterns-fields-password-input-field.json +319 -0
  147. package/data/docs/routes/patterns-fields-search-input-field.json +382 -0
  148. package/data/docs/routes/patterns-fields-text-input-field.json +404 -0
  149. package/data/docs/routes/patterns-fields.json +78 -0
  150. package/data/docs/routes/patterns.json +34 -0
  151. package/data/docs/search-index.json +1 -0
  152. package/data/docs/types/Accordion.json +12 -0
  153. package/data/docs/types/AccordionContent.json +286 -0
  154. package/data/docs/types/AccordionHeader.json +891 -0
  155. package/data/docs/types/AccordionHeaderRightContent.json +27 -0
  156. package/data/docs/types/AccordionItem.json +242 -0
  157. package/data/docs/types/AccordionRoot.json +162 -0
  158. package/data/docs/types/Alert.json +12 -0
  159. package/data/docs/types/AlertActions.json +11 -0
  160. package/data/docs/types/AlertDescription.json +118 -0
  161. package/data/docs/types/AlertDismissButton.json +937 -0
  162. package/data/docs/types/AlertRoot.json +42 -0
  163. package/data/docs/types/AlertTitle.json +118 -0
  164. package/data/docs/types/Avatar.json +125 -0
  165. package/data/docs/types/Badge.json +64 -0
  166. package/data/docs/types/Body.json +67 -0
  167. package/data/docs/types/Box.json +85 -0
  168. package/data/docs/types/Button.json +1015 -0
  169. package/data/docs/types/Calendar.json +565 -0
  170. package/data/docs/types/Caption.json +67 -0
  171. package/data/docs/types/Card.json +12 -0
  172. package/data/docs/types/CardContent.json +27 -0
  173. package/data/docs/types/CardHeader.json +27 -0
  174. package/data/docs/types/CardRoot.json +106 -0
  175. package/data/docs/types/Cell.json +227 -0
  176. package/data/docs/types/Checkbox.json +897 -0
  177. package/data/docs/types/Code.json +112 -0
  178. package/data/docs/types/CollapsibleMotionContent.json +35 -0
  179. package/data/docs/types/CollapsibleMotionRoot.json +99 -0
  180. package/data/docs/types/CollapsibleMotionTrigger.json +71 -0
  181. package/data/docs/types/Column.json +101 -0
  182. package/data/docs/types/ColumnGroup.json +101 -0
  183. package/data/docs/types/ColumnHeader.json +193 -0
  184. package/data/docs/types/ComboBoxListBox.json +751 -0
  185. package/data/docs/types/ComboBoxOption.json +672 -0
  186. package/data/docs/types/ComboBoxPopover.json +786 -0
  187. package/data/docs/types/ComboBoxRoot.json +747 -0
  188. package/data/docs/types/ComboBoxSection.json +277 -0
  189. package/data/docs/types/ComboBoxTrigger.json +70 -0
  190. package/data/docs/types/Content.json +33 -0
  191. package/data/docs/types/DataTable.json +596 -0
  192. package/data/docs/types/DataTableBody.json +223 -0
  193. package/data/docs/types/DataTableFooter.json +27 -0
  194. package/data/docs/types/DataTableHeader.json +269 -0
  195. package/data/docs/types/DataTableManager.json +11 -0
  196. package/data/docs/types/DataTableRoot.json +590 -0
  197. package/data/docs/types/DataTableTable.json +271 -0
  198. package/data/docs/types/DateInput.json +792 -0
  199. package/data/docs/types/DatePicker.json +700 -0
  200. package/data/docs/types/DateRangePicker.json +936 -0
  201. package/data/docs/types/DateRangePickerField.json +1047 -0
  202. package/data/docs/types/DefaultPage.json +12 -0
  203. package/data/docs/types/DefaultPageActions.json +27 -0
  204. package/data/docs/types/DefaultPageBackLink.json +213 -0
  205. package/data/docs/types/DefaultPageContent.json +27 -0
  206. package/data/docs/types/DefaultPageFooter.json +27 -0
  207. package/data/docs/types/DefaultPageHeader.json +27 -0
  208. package/data/docs/types/DefaultPageRoot.json +106 -0
  209. package/data/docs/types/DefaultPageSubtitle.json +27 -0
  210. package/data/docs/types/DefaultPageTabNav.json +28 -0
  211. package/data/docs/types/DefaultPageTitle.json +27 -0
  212. package/data/docs/types/DialogBody.json +27 -0
  213. package/data/docs/types/DialogCloseTrigger.json +939 -0
  214. package/data/docs/types/DialogContent.json +27 -0
  215. package/data/docs/types/DialogFooter.json +27 -0
  216. package/data/docs/types/DialogHeader.json +27 -0
  217. package/data/docs/types/DialogRoot.json +138 -0
  218. package/data/docs/types/DialogTitle.json +27 -0
  219. package/data/docs/types/DialogTrigger.json +80 -0
  220. package/data/docs/types/DraggableList.json +12 -0
  221. package/data/docs/types/DraggableListField.json +894 -0
  222. package/data/docs/types/DraggableListItem.json +574 -0
  223. package/data/docs/types/DraggableListRoot.json +745 -0
  224. package/data/docs/types/Drawer.json +12 -0
  225. package/data/docs/types/DrawerBody.json +27 -0
  226. package/data/docs/types/DrawerCloseTrigger.json +939 -0
  227. package/data/docs/types/DrawerContent.json +27 -0
  228. package/data/docs/types/DrawerFooter.json +27 -0
  229. package/data/docs/types/DrawerHeader.json +27 -0
  230. package/data/docs/types/DrawerRoot.json +142 -0
  231. package/data/docs/types/DrawerTitle.json +27 -0
  232. package/data/docs/types/DrawerTrigger.json +80 -0
  233. package/data/docs/types/FieldErrors.getBuiltInMessage.json +11 -0
  234. package/data/docs/types/FieldErrors.getCustomMessage.json +9 -0
  235. package/data/docs/types/FieldErrors.json +109 -0
  236. package/data/docs/types/Flex.json +238 -0
  237. package/data/docs/types/Footer.json +67 -0
  238. package/data/docs/types/FormFieldDescription.json +11 -0
  239. package/data/docs/types/FormFieldError.json +11 -0
  240. package/data/docs/types/FormFieldInfoBox.json +27 -0
  241. package/data/docs/types/FormFieldInput.json +11 -0
  242. package/data/docs/types/FormFieldLabel.json +11 -0
  243. package/data/docs/types/FormFieldRoot.json +148 -0
  244. package/data/docs/types/Grid.json +253 -0
  245. package/data/docs/types/GridProps.json +11 -0
  246. package/data/docs/types/Group.json +143 -0
  247. package/data/docs/types/Header.json +67 -0
  248. package/data/docs/types/Heading.json +109 -0
  249. package/data/docs/types/Icon.json +112 -0
  250. package/data/docs/types/IconButton.json +1019 -0
  251. package/data/docs/types/IconToggleButton.json +787 -0
  252. package/data/docs/types/Image.json +373 -0
  253. package/data/docs/types/Indicator.json +67 -0
  254. package/data/docs/types/InlineSvg.json +98 -0
  255. package/data/docs/types/Item.json +67 -0
  256. package/data/docs/types/Kbd.json +118 -0
  257. package/data/docs/types/Link.json +380 -0
  258. package/data/docs/types/List.json +12 -0
  259. package/data/docs/types/ListIndicator.json +70 -0
  260. package/data/docs/types/ListItem.json +70 -0
  261. package/data/docs/types/ListRoot.json +124 -0
  262. package/data/docs/types/LoadingSpinner.json +87 -0
  263. package/data/docs/types/LocalizedField.json +460 -0
  264. package/data/docs/types/LocalizedStringFormatter.json +9 -0
  265. package/data/docs/types/MakeElementFocusable.json +196 -0
  266. package/data/docs/types/MenuContent.json +111 -0
  267. package/data/docs/types/MenuItem.json +671 -0
  268. package/data/docs/types/MenuRoot.json +670 -0
  269. package/data/docs/types/MenuSection.json +364 -0
  270. package/data/docs/types/MenuSubmenu.json +111 -0
  271. package/data/docs/types/MenuSubmenuTrigger.json +67 -0
  272. package/data/docs/types/MenuTrigger.json +906 -0
  273. package/data/docs/types/ModalPage.json +12 -0
  274. package/data/docs/types/ModalPageActions.json +27 -0
  275. package/data/docs/types/ModalPageContent.json +27 -0
  276. package/data/docs/types/ModalPageFooter.json +27 -0
  277. package/data/docs/types/ModalPageHeader.json +27 -0
  278. package/data/docs/types/ModalPageRoot.json +87 -0
  279. package/data/docs/types/ModalPageSubtitle.json +27 -0
  280. package/data/docs/types/ModalPageTabNav.json +28 -0
  281. package/data/docs/types/ModalPageTitle.json +27 -0
  282. package/data/docs/types/ModalPageTopBar.json +57 -0
  283. package/data/docs/types/MoneyInput.isEmpty.json +40 -0
  284. package/data/docs/types/MoneyInput.json +282 -0
  285. package/data/docs/types/MoneyInputField.json +379 -0
  286. package/data/docs/types/MoneyInputFieldProps.json +9 -0
  287. package/data/docs/types/MultilineTextInput.json +1194 -0
  288. package/data/docs/types/MultilineTextInputField.json +1269 -0
  289. package/data/docs/types/MultilineTextInputFieldProps.json +9 -0
  290. package/data/docs/types/NimbusI18nProvider.json +42 -0
  291. package/data/docs/types/NimbusI18nProviderProps.json +9 -0
  292. package/data/docs/types/NimbusProvider.json +270 -0
  293. package/data/docs/types/NumberInput.json +952 -0
  294. package/data/docs/types/NumberInputField.json +1004 -0
  295. package/data/docs/types/NumberInputFieldProps.json +9 -0
  296. package/data/docs/types/PageContent.json +11 -0
  297. package/data/docs/types/PageContentColumn.json +99 -0
  298. package/data/docs/types/PageContentRoot.json +114 -0
  299. package/data/docs/types/Pagination.json +159 -0
  300. package/data/docs/types/PasswordInput.json +1120 -0
  301. package/data/docs/types/PasswordInputField.json +1216 -0
  302. package/data/docs/types/PasswordInputFieldProps.json +9 -0
  303. package/data/docs/types/ProgressBar.json +280 -0
  304. package/data/docs/types/RadioInputOption.json +550 -0
  305. package/data/docs/types/RadioInputRoot.json +514 -0
  306. package/data/docs/types/RangeCalendar.json +618 -0
  307. package/data/docs/types/RichTextInput.json +134 -0
  308. package/data/docs/types/Root.json +122 -0
  309. package/data/docs/types/Row.json +67 -0
  310. package/data/docs/types/ScopedSearchInput.isEmpty.json +40 -0
  311. package/data/docs/types/ScopedSearchInput.json +253 -0
  312. package/data/docs/types/ScrollArea.json +179 -0
  313. package/data/docs/types/ScrollAreaElementIds.json +9 -0
  314. package/data/docs/types/ScrollAreaProps.json +9 -0
  315. package/data/docs/types/SearchInput.json +1165 -0
  316. package/data/docs/types/SearchInputField.json +1240 -0
  317. package/data/docs/types/Select.json +12 -0
  318. package/data/docs/types/SelectOption.json +572 -0
  319. package/data/docs/types/SelectOptionGroup.json +215 -0
  320. package/data/docs/types/SelectOptions.json +693 -0
  321. package/data/docs/types/SelectRoot.json +926 -0
  322. package/data/docs/types/Separator.json +65 -0
  323. package/data/docs/types/SimpleGrid.json +291 -0
  324. package/data/docs/types/Spacer.json +27 -0
  325. package/data/docs/types/SpacerProps.json +9 -0
  326. package/data/docs/types/SplitButton.json +203 -0
  327. package/data/docs/types/Stack.json +144 -0
  328. package/data/docs/types/Steps.json +12 -0
  329. package/data/docs/types/StepsChangeDetails.json +9 -0
  330. package/data/docs/types/StepsCompletedContent.json +28 -0
  331. package/data/docs/types/StepsCompletedContentProps.json +9 -0
  332. package/data/docs/types/StepsContent.json +43 -0
  333. package/data/docs/types/StepsContentProps.json +9 -0
  334. package/data/docs/types/StepsDescription.json +28 -0
  335. package/data/docs/types/StepsDescriptionProps.json +9 -0
  336. package/data/docs/types/StepsIndicator.json +28 -0
  337. package/data/docs/types/StepsIndicatorProps.json +9 -0
  338. package/data/docs/types/StepsItem.json +43 -0
  339. package/data/docs/types/StepsItemProps.json +9 -0
  340. package/data/docs/types/StepsList.json +28 -0
  341. package/data/docs/types/StepsListProps.json +9 -0
  342. package/data/docs/types/StepsNextTrigger.json +62 -0
  343. package/data/docs/types/StepsNextTriggerProps.json +9 -0
  344. package/data/docs/types/StepsNumber.json +28 -0
  345. package/data/docs/types/StepsNumberProps.json +9 -0
  346. package/data/docs/types/StepsPrevTrigger.json +62 -0
  347. package/data/docs/types/StepsPrevTriggerProps.json +9 -0
  348. package/data/docs/types/StepsRoot.json +183 -0
  349. package/data/docs/types/StepsRootProps.json +11 -0
  350. package/data/docs/types/StepsSeparator.json +28 -0
  351. package/data/docs/types/StepsSeparatorProps.json +9 -0
  352. package/data/docs/types/StepsStatus.json +57 -0
  353. package/data/docs/types/StepsStatusProps.json +9 -0
  354. package/data/docs/types/StepsTitle.json +28 -0
  355. package/data/docs/types/StepsTitleProps.json +9 -0
  356. package/data/docs/types/StepsTrigger.json +47 -0
  357. package/data/docs/types/StepsTriggerProps.json +9 -0
  358. package/data/docs/types/Switch.json +371 -0
  359. package/data/docs/types/TabListProps.json +9 -0
  360. package/data/docs/types/TabNav.json +12 -0
  361. package/data/docs/types/TabNavItem.json +300 -0
  362. package/data/docs/types/TabNavItemProps.json +9 -0
  363. package/data/docs/types/TabNavProps.json +9 -0
  364. package/data/docs/types/TabNavRoot.json +80 -0
  365. package/data/docs/types/TabPanelProps.json +9 -0
  366. package/data/docs/types/TabPanelsProps.json +9 -0
  367. package/data/docs/types/TabProps.json +9 -0
  368. package/data/docs/types/Table.json +9 -0
  369. package/data/docs/types/TableBody.json +67 -0
  370. package/data/docs/types/TableBodyProps.json +9 -0
  371. package/data/docs/types/TableCaption.json +67 -0
  372. package/data/docs/types/TableCaptionProps.json +9 -0
  373. package/data/docs/types/TableCell.json +227 -0
  374. package/data/docs/types/TableCellProps.json +9 -0
  375. package/data/docs/types/TableColumn.json +101 -0
  376. package/data/docs/types/TableColumnGroup.json +101 -0
  377. package/data/docs/types/TableColumnGroupProps.json +9 -0
  378. package/data/docs/types/TableColumnHeader.json +193 -0
  379. package/data/docs/types/TableColumnHeaderProps.json +9 -0
  380. package/data/docs/types/TableColumnProps.json +9 -0
  381. package/data/docs/types/TableFooter.json +67 -0
  382. package/data/docs/types/TableFooterProps.json +9 -0
  383. package/data/docs/types/TableHeader.json +67 -0
  384. package/data/docs/types/TableHeaderProps.json +9 -0
  385. package/data/docs/types/TableRoot.json +365 -0
  386. package/data/docs/types/TableRootProps.json +12 -0
  387. package/data/docs/types/TableRow.json +67 -0
  388. package/data/docs/types/TableRowProps.json +9 -0
  389. package/data/docs/types/TableScrollArea.json +82 -0
  390. package/data/docs/types/TableScrollAreaProps.json +9 -0
  391. package/data/docs/types/Tabs.json +12 -0
  392. package/data/docs/types/TabsList.json +110 -0
  393. package/data/docs/types/TabsPanel.json +112 -0
  394. package/data/docs/types/TabsPanels.json +108 -0
  395. package/data/docs/types/TabsRoot.json +211 -0
  396. package/data/docs/types/TabsTab.json +174 -0
  397. package/data/docs/types/TagGroup.json +12 -0
  398. package/data/docs/types/TagGroupRoot.json +306 -0
  399. package/data/docs/types/TagGroupTag.json +595 -0
  400. package/data/docs/types/TagGroupTagList.json +166 -0
  401. package/data/docs/types/Text.json +119 -0
  402. package/data/docs/types/TextInput.json +1156 -0
  403. package/data/docs/types/TextInputField.json +1263 -0
  404. package/data/docs/types/TimeInput.json +752 -0
  405. package/data/docs/types/ToastAction.json +9 -0
  406. package/data/docs/types/ToastManagerApi.json +9 -0
  407. package/data/docs/types/ToastOptions.json +9 -0
  408. package/data/docs/types/ToastOutlet.json +12 -0
  409. package/data/docs/types/ToastPlacement.json +9 -0
  410. package/data/docs/types/ToastPromiseOptions.json +9 -0
  411. package/data/docs/types/ToastType.json +9 -0
  412. package/data/docs/types/ToastVariant.json +9 -0
  413. package/data/docs/types/ToggleButton.json +789 -0
  414. package/data/docs/types/ToggleButtonGroup.json +9 -0
  415. package/data/docs/types/ToggleButtonGroupButton.json +331 -0
  416. package/data/docs/types/ToggleButtonGroupRoot.json +269 -0
  417. package/data/docs/types/Toolbar.json +176 -0
  418. package/data/docs/types/Tooltip.json +12 -0
  419. package/data/docs/types/TooltipContent.json +372 -0
  420. package/data/docs/types/TooltipRoot.json +179 -0
  421. package/data/docs/types/Trigger.json +69 -0
  422. package/data/docs/types/VisuallyHidden.json +93 -0
  423. package/data/docs/types/__object.json +12 -0
  424. package/data/docs/types/filters.json +11 -0
  425. package/data/docs/types/manifest.json +280 -0
  426. package/data/docs/types/toast.json +234 -0
  427. package/data/docs/types/useColorMode.json +13 -0
  428. package/data/docs/types/useColorModeValue.json +13 -0
  429. package/data/docs/types/useColorScheme.json +12 -0
  430. package/data/docs/types/useLocalizedStringFormatter.json +14 -0
  431. package/data/icons.json +21940 -0
  432. package/data/tokens.json +40061 -0
  433. package/dist/index.js +2516 -17
  434. package/package.json +25 -6
  435. package/dist/data-loader.d.ts +0 -102
  436. package/dist/data-loader.js +0 -104
  437. package/dist/index.d.ts +0 -13
  438. package/dist/server.d.ts +0 -9
  439. package/dist/server.js +0 -22
  440. package/dist/server.spec.d.ts +0 -1
  441. package/dist/server.spec.js +0 -69
  442. package/dist/tools/list-components.d.ts +0 -9
  443. package/dist/tools/list-components.js +0 -42
  444. package/dist/types.d.ts +0 -28
  445. package/dist/types.js +0 -4
  446. package/src/data-loader.ts +0 -226
  447. package/src/index.ts +0 -29
  448. package/src/server.spec.ts +0 -86
  449. package/src/server.ts +0 -28
  450. package/src/tools/list-components.ts +0 -49
  451. package/src/types.ts +0 -31
  452. package/tsconfig.json +0 -14
  453. package/vitest.config.ts +0 -9
@@ -0,0 +1,689 @@
1
+ {
2
+ "meta": {
3
+ "id": "Components-ToggleButton",
4
+ "title": "Toggle button",
5
+ "exportName": "ToggleButton",
6
+ "description": "An interactive button that toggles between two binary states such as active and inactive.",
7
+ "lifecycleState": "Stable",
8
+ "order": 999,
9
+ "repoPath": "packages/nimbus/src/components/toggle-button/toggle-button.mdx",
10
+ "menu": [
11
+ "Components",
12
+ "Buttons",
13
+ "Toggle button"
14
+ ],
15
+ "route": "components/buttons/toggle-button",
16
+ "tags": [
17
+ "component",
18
+ "buttons",
19
+ "toggle",
20
+ "controls"
21
+ ],
22
+ "toc": [
23
+ {
24
+ "value": "Overview",
25
+ "href": "#overview",
26
+ "depth": 2,
27
+ "numbering": [
28
+ 1,
29
+ 1
30
+ ],
31
+ "parent": "root"
32
+ },
33
+ {
34
+ "value": "Resources",
35
+ "href": "#resources",
36
+ "depth": 3,
37
+ "numbering": [
38
+ 1,
39
+ 1,
40
+ 1
41
+ ],
42
+ "parent": "root"
43
+ },
44
+ {
45
+ "value": "Variables",
46
+ "href": "#variables",
47
+ "depth": 2,
48
+ "numbering": [
49
+ 1,
50
+ 2
51
+ ],
52
+ "parent": "root"
53
+ },
54
+ {
55
+ "value": "Visuals",
56
+ "href": "#visuals",
57
+ "depth": 3,
58
+ "numbering": [
59
+ 1,
60
+ 2,
61
+ 1
62
+ ],
63
+ "parent": "root"
64
+ },
65
+ {
66
+ "value": "Outlined",
67
+ "href": "#outlined",
68
+ "depth": 4,
69
+ "numbering": [
70
+ 1,
71
+ 2,
72
+ 1,
73
+ 1
74
+ ],
75
+ "parent": "root"
76
+ },
77
+ {
78
+ "value": "Ghost",
79
+ "href": "#ghost",
80
+ "depth": 4,
81
+ "numbering": [
82
+ 1,
83
+ 2,
84
+ 1,
85
+ 2
86
+ ],
87
+ "parent": "root"
88
+ },
89
+ {
90
+ "value": "Color palette",
91
+ "href": "#color-palette",
92
+ "depth": 3,
93
+ "numbering": [
94
+ 1,
95
+ 2,
96
+ 2
97
+ ],
98
+ "parent": "root"
99
+ },
100
+ {
101
+ "value": "Primary (default)",
102
+ "href": "#primary-default",
103
+ "depth": 4,
104
+ "numbering": [
105
+ 1,
106
+ 2,
107
+ 2,
108
+ 1
109
+ ],
110
+ "parent": "root"
111
+ },
112
+ {
113
+ "value": "Neutral",
114
+ "href": "#neutral",
115
+ "depth": 4,
116
+ "numbering": [
117
+ 1,
118
+ 2,
119
+ 2,
120
+ 2
121
+ ],
122
+ "parent": "root"
123
+ },
124
+ {
125
+ "value": "Critical",
126
+ "href": "#critical",
127
+ "depth": 4,
128
+ "numbering": [
129
+ 1,
130
+ 2,
131
+ 2,
132
+ 3
133
+ ],
134
+ "parent": "root"
135
+ },
136
+ {
137
+ "value": "Info",
138
+ "href": "#info",
139
+ "depth": 4,
140
+ "numbering": [
141
+ 1,
142
+ 2,
143
+ 2,
144
+ 4
145
+ ],
146
+ "parent": "root"
147
+ }
148
+ ],
149
+ "figmaLink": "https://www.figma.com/design/AvtPX6g7OGGCRvNlatGOIY/NIMBUS-design-system?node-id=5707-16294&m=dev",
150
+ "layout": "app-frame",
151
+ "tabs": [
152
+ {
153
+ "key": "overview",
154
+ "title": "Overview",
155
+ "order": 0
156
+ },
157
+ {
158
+ "key": "guidelines",
159
+ "title": "Guidelines",
160
+ "order": 2
161
+ },
162
+ {
163
+ "key": "dev",
164
+ "title": "Implementation",
165
+ "order": 3
166
+ },
167
+ {
168
+ "key": "a11y",
169
+ "title": "Accessibility",
170
+ "order": 4
171
+ }
172
+ ]
173
+ },
174
+ "mdx": "\n## Overview\n\nA toggle button is used similarly to a checkbox or a radio button, but supports\na smaller interactive component that can be used to give a binary active state\nchoice to users that can be used alone or in combination with other choices. A\ntoggle button or toggle icon button gives a user a new way of visualizing the\ninformation in the interface. It does not typically perform an action. Please\nuse a button or an icon button for these uses.\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=5707-16294&m=dev)\n\n## Variables\n\nGet familiar with the features.\n\n### Visuals\n\n#### Outlined\n\nMost common styling of the toggle button.\n\n```jsx live\nconst App = () => (\n <ToggleButton variant=\"outline\">\n <Icons.PushPin />\n Product categories\n </ToggleButton>\n)\n```\n\n#### Ghost\n\nGhost styled buttons are helpful for UI simplification.\n\n```jsx live\nconst App = () => (\n <ToggleButton variant=\"ghost\">\n <Icons.PushPin />\n Product categories\n </ToggleButton>\n)\n```\n\n### Color palette\n\n#### Primary (default)\n\nThe default colorPalette for most toggle buttons.\n\n```jsx live\nconst App = () => (\n <Stack gap=\"400\" align=\"center\" direction=\"row\">\n <ToggleButton>\n Primary\n </ToggleButton>\n <ToggleButton isSelected>\n Selected\n </ToggleButton>\n </Stack>\n);\n```\n\n#### Neutral\n\nUse for secondary or less prominent toggles.\n\n```jsx live\nconst App = () => (\n <Stack gap=\"400\" align=\"center\" direction=\"row\">\n <ToggleButton colorPalette=\"neutral\">\n Neutral\n </ToggleButton>\n <ToggleButton colorPalette=\"neutral\" isSelected>\n Selected\n </ToggleButton>\n </Stack>\n);\n```\n\n#### Critical\n\nUse for toggles that represent destructive or warning states.\n\n```jsx live\nconst App = () => (\n <Stack gap=\"400\" align=\"center\" direction=\"row\">\n <ToggleButton colorPalette=\"critical\">\n Critical\n </ToggleButton>\n <ToggleButton colorPalette=\"critical\" isSelected>\n Selected\n </ToggleButton>\n </Stack>\n);\n```\n\n#### Info\n\nUse for informational or help-related toggles.\n\n```jsx live\nconst App = () => (\n <Stack gap=\"400\" align=\"center\" direction=\"row\">\n <ToggleButton colorPalette=\"info\">\n Info\n </ToggleButton>\n <ToggleButton colorPalette=\"info\" isSelected>\n Selected\n </ToggleButton>\n </Stack>\n);\n```\n",
175
+ "views": {
176
+ "overview": {
177
+ "mdx": "\n## Overview\n\nA toggle button is used similarly to a checkbox or a radio button, but supports\na smaller interactive component that can be used to give a binary active state\nchoice to users that can be used alone or in combination with other choices. A\ntoggle button or toggle icon button gives a user a new way of visualizing the\ninformation in the interface. It does not typically perform an action. Please\nuse a button or an icon button for these uses.\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=5707-16294&m=dev)\n\n## Variables\n\nGet familiar with the features.\n\n### Visuals\n\n#### Outlined\n\nMost common styling of the toggle button.\n\n```jsx live\nconst App = () => (\n <ToggleButton variant=\"outline\">\n <Icons.PushPin />\n Product categories\n </ToggleButton>\n)\n```\n\n#### Ghost\n\nGhost styled buttons are helpful for UI simplification.\n\n```jsx live\nconst App = () => (\n <ToggleButton variant=\"ghost\">\n <Icons.PushPin />\n Product categories\n </ToggleButton>\n)\n```\n\n### Color palette\n\n#### Primary (default)\n\nThe default colorPalette for most toggle buttons.\n\n```jsx live\nconst App = () => (\n <Stack gap=\"400\" align=\"center\" direction=\"row\">\n <ToggleButton>\n Primary\n </ToggleButton>\n <ToggleButton isSelected>\n Selected\n </ToggleButton>\n </Stack>\n);\n```\n\n#### Neutral\n\nUse for secondary or less prominent toggles.\n\n```jsx live\nconst App = () => (\n <Stack gap=\"400\" align=\"center\" direction=\"row\">\n <ToggleButton colorPalette=\"neutral\">\n Neutral\n </ToggleButton>\n <ToggleButton colorPalette=\"neutral\" isSelected>\n Selected\n </ToggleButton>\n </Stack>\n);\n```\n\n#### Critical\n\nUse for toggles that represent destructive or warning states.\n\n```jsx live\nconst App = () => (\n <Stack gap=\"400\" align=\"center\" direction=\"row\">\n <ToggleButton colorPalette=\"critical\">\n Critical\n </ToggleButton>\n <ToggleButton colorPalette=\"critical\" isSelected>\n Selected\n </ToggleButton>\n </Stack>\n);\n```\n\n#### Info\n\nUse for informational or help-related toggles.\n\n```jsx live\nconst App = () => (\n <Stack gap=\"400\" align=\"center\" direction=\"row\">\n <ToggleButton colorPalette=\"info\">\n Info\n </ToggleButton>\n <ToggleButton colorPalette=\"info\" isSelected>\n Selected\n </ToggleButton>\n </Stack>\n);\n```\n",
178
+ "toc": [
179
+ {
180
+ "value": "Overview",
181
+ "href": "#overview",
182
+ "depth": 2,
183
+ "numbering": [
184
+ 1,
185
+ 1
186
+ ],
187
+ "parent": "root"
188
+ },
189
+ {
190
+ "value": "Resources",
191
+ "href": "#resources",
192
+ "depth": 3,
193
+ "numbering": [
194
+ 1,
195
+ 1,
196
+ 1
197
+ ],
198
+ "parent": "root"
199
+ },
200
+ {
201
+ "value": "Variables",
202
+ "href": "#variables",
203
+ "depth": 2,
204
+ "numbering": [
205
+ 1,
206
+ 2
207
+ ],
208
+ "parent": "root"
209
+ },
210
+ {
211
+ "value": "Visuals",
212
+ "href": "#visuals",
213
+ "depth": 3,
214
+ "numbering": [
215
+ 1,
216
+ 2,
217
+ 1
218
+ ],
219
+ "parent": "root"
220
+ },
221
+ {
222
+ "value": "Outlined",
223
+ "href": "#outlined",
224
+ "depth": 4,
225
+ "numbering": [
226
+ 1,
227
+ 2,
228
+ 1,
229
+ 1
230
+ ],
231
+ "parent": "root"
232
+ },
233
+ {
234
+ "value": "Ghost",
235
+ "href": "#ghost",
236
+ "depth": 4,
237
+ "numbering": [
238
+ 1,
239
+ 2,
240
+ 1,
241
+ 2
242
+ ],
243
+ "parent": "root"
244
+ },
245
+ {
246
+ "value": "Color palette",
247
+ "href": "#color-palette",
248
+ "depth": 3,
249
+ "numbering": [
250
+ 1,
251
+ 2,
252
+ 2
253
+ ],
254
+ "parent": "root"
255
+ },
256
+ {
257
+ "value": "Primary (default)",
258
+ "href": "#primary-default",
259
+ "depth": 4,
260
+ "numbering": [
261
+ 1,
262
+ 2,
263
+ 2,
264
+ 1
265
+ ],
266
+ "parent": "root"
267
+ },
268
+ {
269
+ "value": "Neutral",
270
+ "href": "#neutral",
271
+ "depth": 4,
272
+ "numbering": [
273
+ 1,
274
+ 2,
275
+ 2,
276
+ 2
277
+ ],
278
+ "parent": "root"
279
+ },
280
+ {
281
+ "value": "Critical",
282
+ "href": "#critical",
283
+ "depth": 4,
284
+ "numbering": [
285
+ 1,
286
+ 2,
287
+ 2,
288
+ 3
289
+ ],
290
+ "parent": "root"
291
+ },
292
+ {
293
+ "value": "Info",
294
+ "href": "#info",
295
+ "depth": 4,
296
+ "numbering": [
297
+ 1,
298
+ 2,
299
+ 2,
300
+ 4
301
+ ],
302
+ "parent": "root"
303
+ }
304
+ ]
305
+ },
306
+ "a11y": {
307
+ "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 <ToggleButton>\n <Icons.PushPin />\n Product categories\n </ToggleButton>\n)\n```\n\n### Accessibility standards\n\n- **Use aria-pressed:** The most crucial accessibility attribute for a toggle\n button is `aria-pressed`. When the button is \"on,\" set `aria-pressed=\"true\"`.\n When it's \"off,\" set `aria-pressed=\"false\"`. This tells screen readers that\n the button's function is to toggle.\n- **Provide a clear aria-label:** Since the button lacks visible text, provide a\n descriptive `aria-label` (e.g., `aria-label=\"Toggle Bold\"` or\n `aria-label=\"Show Advanced Settings\"`). This is what a screen reader will\n announce to the user.\n- **Ensure keyboard operability:** Users must be able to navigate to the button\n using the Tab key and toggle its state using the Enter or Spacebar keys.\n",
308
+ "toc": [
309
+ {
310
+ "value": "Accessibility",
311
+ "href": "#accessibility",
312
+ "depth": 2,
313
+ "numbering": [
314
+ 1,
315
+ 1
316
+ ],
317
+ "parent": "root"
318
+ },
319
+ {
320
+ "value": "Accessibility standards",
321
+ "href": "#accessibility-standards",
322
+ "depth": 3,
323
+ "numbering": [
324
+ 1,
325
+ 1,
326
+ 1
327
+ ],
328
+ "parent": "root"
329
+ }
330
+ ]
331
+ },
332
+ "dev": {
333
+ "mdx": "\n## Getting started\n\n### Import\n\n```tsx\nimport { ToggleButton, type ToggleButtonProps } from '@commercetools/nimbus';\n```\n\n### Basic usage\n\nThe simplest implementation uses the uncontrolled mode with `defaultSelected`:\n\n```jsx live-dev\nconst App = () => (\n <ToggleButton\n defaultSelected={false}\n onChange={(isSelected) => alert(`Selected: ${isSelected}`)}\n >\n Toggle Me\n </ToggleButton>\n)\n```\n\nThe component starts in the unselected state and manages its own state internally. The `onChange` callback is called whenever the selection state changes.\n\n## Usage examples\n\n### Controlled mode\n\nControl the toggle state externally using `isSelected` and `onChange`:\n\n```jsx live-dev\nconst App = () => {\n const [isSelected, setIsSelected] = useState<ToggleButtonProps[\"isSelected\"]>(false);\n\n return (\n <Stack direction=\"column\" gap=\"400\">\n <ToggleButton isSelected={isSelected} onChange={setIsSelected}>\n {isSelected ? \"Selected\" : \"Not Selected\"}\n </ToggleButton>\n <Text fontSize=\"sm\">\n Current state: {isSelected ? \"Selected\" : \"Not Selected\"}\n </Text>\n </Stack>\n );\n}\n```\n\n### With icons\n\nAdd icons to provide visual context for the toggle action:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"row\" gap=\"400\" wrap=\"wrap\">\n <ToggleButton onChange={(selected) => alert(`Liked: ${selected}`)}>\n <Icons.ThumbUp />\n Like\n </ToggleButton>\n\n <ToggleButton onChange={(selected) => alert(`Favorited: ${selected}`)}>\n <Icons.Star />\n Favorite\n </ToggleButton>\n\n <ToggleButton onChange={(selected) => alert(`Saved: ${selected}`)}>\n <Icons.Bookmark />\n Save\n </ToggleButton>\n\n <ToggleButton onChange={(selected) => alert(`Notified: ${selected}`)}>\n <Icons.Notifications />\n Notify\n </ToggleButton>\n </Stack>\n)\n```\n\n### Size variants\n\nThe component supports three size variants to match your interface density:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"row\" gap=\"400\" alignItems=\"center\" wrap=\"wrap\">\n <ToggleButton size=\"2xs\">\n 2x Small\n </ToggleButton>\n\n <ToggleButton size=\"xs\">\n Extra Small\n </ToggleButton>\n\n <ToggleButton size=\"md\">\n Medium (default)\n </ToggleButton>\n </Stack>\n)\n```\n\n### Visual variants\n\nChoose between visual variants to match your design context:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"column\" gap=\"400\">\n <Stack direction=\"row\" gap=\"400\" wrap=\"wrap\">\n <ToggleButton variant=\"outline\">\n Outline (default)\n </ToggleButton>\n\n <ToggleButton variant=\"outline\" isSelected>\n Outline Selected\n </ToggleButton>\n </Stack>\n\n <Stack direction=\"row\" gap=\"400\" wrap=\"wrap\">\n <ToggleButton variant=\"ghost\">\n Ghost\n </ToggleButton>\n\n <ToggleButton variant=\"ghost\" isSelected>\n Ghost Selected\n </ToggleButton>\n </Stack>\n </Stack>\n)\n```\n\n### Color palettes\n\nUse different color palettes to indicate different types of actions:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"column\" gap=\"400\">\n <Stack direction=\"row\" gap=\"400\" wrap=\"wrap\">\n <ToggleButton colorPalette=\"primary\">\n Primary\n </ToggleButton>\n <ToggleButton colorPalette=\"primary\" isSelected>\n Primary Selected\n </ToggleButton>\n </Stack>\n\n <Stack direction=\"row\" gap=\"400\" wrap=\"wrap\">\n <ToggleButton colorPalette=\"neutral\">\n Neutral\n </ToggleButton>\n <ToggleButton colorPalette=\"neutral\" isSelected>\n Neutral Selected\n </ToggleButton>\n </Stack>\n\n <Stack direction=\"row\" gap=\"400\" wrap=\"wrap\">\n <ToggleButton colorPalette=\"critical\">\n Critical\n </ToggleButton>\n <ToggleButton colorPalette=\"critical\" isSelected>\n Critical Selected\n </ToggleButton>\n </Stack>\n\n <Stack direction=\"row\" gap=\"400\" wrap=\"wrap\">\n <ToggleButton colorPalette=\"info\">\n Info\n </ToggleButton>\n <ToggleButton colorPalette=\"info\" isSelected>\n Info Selected\n </ToggleButton>\n </Stack>\n </Stack>\n)\n```\n\n### Disabled state\n\nDisable the toggle button to prevent user interaction:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"row\" gap=\"400\" wrap=\"wrap\">\n <ToggleButton isDisabled>\n Disabled Unselected\n </ToggleButton>\n\n <ToggleButton isDisabled isSelected>\n Disabled Selected\n </ToggleButton>\n\n <ToggleButton isDisabled variant=\"ghost\">\n <Icons.Star />\n Disabled Ghost\n </ToggleButton>\n </Stack>\n)\n```\n\n## Component requirements\n\n## Accessibility\n\nThe ToggleButton component is built on React Aria's ToggleButton, which provides robust accessibility features out of the box.\n\n**Role**: The component uses the `button` role with `aria-pressed` attribute to communicate toggle state.\n\n**Labeling**: The button's label is determined by its children content. For icon-only buttons, provide an `aria-label`:\n\n```tsx\n<ToggleButton aria-label=\"Add to favorites\">\n <Icons.Star />\n</ToggleButton>\n```\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 = \"like-button-toggle\";\n\nexport const LikeButton = () => (\n <ToggleButton\n id={PERSISTENT_ID}\n aria-label=\"Like this post\"\n onChange={handleLikeToggle}\n >\n <Icons.ThumbUp />\n </ToggleButton>\n);\n```\n\n#### Keyboard navigation\n\nThe component supports full keyboard interaction:\n- `Tab`: Move focus to/from the toggle button\n- `Enter` or `Space`: Toggle the selected state\n\n## API reference\n\n<PropsTable id=\"ToggleButton\" />\n\n## Common patterns\n\n### Like/Favorite functionality\n\nCommon pattern for like or favorite actions with visual feedback:\n\n```jsx live-dev\nconst App = () => {\n const [liked, setLiked] = useState(false);\n const [favorited, setFavorited] = useState(false);\n const [saved, setSaved] = useState(false);\n\n return (\n <Stack direction=\"column\" gap=\"400\">\n <Stack direction=\"row\" gap=\"400\" alignItems=\"center\">\n <ToggleButton\n isSelected={liked}\n onChange={setLiked}\n colorPalette=\"critical\"\n aria-label=\"Like post\"\n >\n <Icons.ThumbUp />\n {liked ? \"Liked\" : \"Like\"}\n </ToggleButton>\n {liked && (\n <Text fontSize=\"sm\" color=\"critical.11\">\n Thank you for your feedback!\n </Text>\n )}\n </Stack>\n\n <Stack direction=\"row\" gap=\"400\" alignItems=\"center\">\n <ToggleButton\n isSelected={favorited}\n onChange={setFavorited}\n colorPalette=\"info\"\n aria-label=\"Add to favorites\"\n >\n <Icons.Star />\n {favorited ? \"Favorited\" : \"Favorite\"}\n </ToggleButton>\n {favorited && (\n <Text fontSize=\"sm\" color=\"info.11\">\n Added to your favorites\n </Text>\n )}\n </Stack>\n\n <Stack direction=\"row\" gap=\"400\" alignItems=\"center\">\n <ToggleButton\n isSelected={saved}\n onChange={setSaved}\n aria-label=\"Save for later\"\n >\n <Icons.Bookmark />\n {saved ? \"Saved\" : \"Save\"}\n </ToggleButton>\n {saved && (\n <Text fontSize=\"sm\" color=\"neutral.11\">\n Saved for later\n </Text>\n )}\n </Stack>\n </Stack>\n );\n}\n```\n\n### Filter toggles\n\nUse toggle buttons as filter controls in a toolbar or filter panel:\n\n```jsx live-dev\nconst App = () => {\n const [showActive, setShowActive] = useState(true);\n const [showInactive, setShowInactive] = useState(false);\n const [showArchived, setShowArchived] = useState(false);\n\n const getStatusText = () => {\n const statuses = [];\n if (showActive) statuses.push(\"Active\");\n if (showInactive) statuses.push(\"Inactive\");\n if (showArchived) statuses.push(\"Archived\");\n return statuses.length > 0 ? statuses.join(\", \") : \"None\";\n };\n\n return (\n <Stack direction=\"column\" gap=\"400\">\n <Text fontWeight=\"semibold\">Filter by status:</Text>\n <Stack direction=\"row\" gap=\"300\" wrap=\"wrap\">\n <ToggleButton\n size=\"xs\"\n variant=\"outline\"\n isSelected={showActive}\n onChange={setShowActive}\n colorPalette=\"primary\"\n >\n Active\n </ToggleButton>\n\n <ToggleButton\n size=\"xs\"\n variant=\"outline\"\n isSelected={showInactive}\n onChange={setShowInactive}\n colorPalette=\"primary\"\n >\n Inactive\n </ToggleButton>\n\n <ToggleButton\n size=\"xs\"\n variant=\"outline\"\n isSelected={showArchived}\n onChange={setShowArchived}\n colorPalette=\"primary\"\n >\n Archived\n </ToggleButton>\n </Stack>\n <Text fontSize=\"sm\" color=\"neutral.11\">\n Showing: {getStatusText()}\n </Text>\n </Stack>\n );\n}\n```\n\n### Settings toggles\n\nPattern for settings or preferences with immediate visual feedback:\n\n```jsx live-dev\nconst App = () => {\n const [emailNotifications, setEmailNotifications] = useState(true);\n const [pushNotifications, setPushNotifications] = useState(false);\n const [weeklyDigest, setWeeklyDigest] = useState(true);\n\n return (\n <Stack direction=\"column\" gap=\"400\">\n <Text fontWeight=\"semibold\">Notification Preferences</Text>\n\n <Stack direction=\"row\" gap=\"300\" alignItems=\"center\">\n <ToggleButton\n variant=\"ghost\"\n size=\"xs\"\n isSelected={emailNotifications}\n onChange={setEmailNotifications}\n aria-label=\"Toggle email notifications\"\n >\n <Icons.Email />\n </ToggleButton>\n <Stack direction=\"column\" gap=\"100\">\n <Text fontSize=\"sm\" fontWeight=\"medium\">\n Email Notifications\n </Text>\n <Text fontSize=\"xs\" color=\"neutral.11\">\n {emailNotifications ? \"Enabled\" : \"Disabled\"}\n </Text>\n </Stack>\n </Stack>\n\n <Stack direction=\"row\" gap=\"300\" alignItems=\"center\">\n <ToggleButton\n variant=\"ghost\"\n size=\"xs\"\n isSelected={pushNotifications}\n onChange={setPushNotifications}\n aria-label=\"Toggle push notifications\"\n >\n <Icons.Notifications />\n </ToggleButton>\n <Stack direction=\"column\" gap=\"100\">\n <Text fontSize=\"sm\" fontWeight=\"medium\">\n Push Notifications\n </Text>\n <Text fontSize=\"xs\" color=\"neutral.11\">\n {pushNotifications ? \"Enabled\" : \"Disabled\"}\n </Text>\n </Stack>\n </Stack>\n\n <Stack direction=\"row\" gap=\"300\" alignItems=\"center\">\n <ToggleButton\n variant=\"ghost\"\n size=\"xs\"\n isSelected={weeklyDigest}\n onChange={setWeeklyDigest}\n aria-label=\"Toggle weekly digest\"\n >\n <Icons.CalendarToday />\n </ToggleButton>\n <Stack direction=\"column\" gap=\"100\">\n <Text fontSize=\"sm\" fontWeight=\"medium\">\n Weekly Digest\n </Text>\n <Text fontSize=\"xs\" color=\"neutral.11\">\n {weeklyDigest ? \"Enabled\" : \"Disabled\"}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n );\n}\n```\n\n## Testing your implementation\n\nThese examples demonstrate how to test your implementation when using ToggleButton 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 component renders with expected elements and states\n\n```tsx\nimport { describe, it, expect, vi } from \"vitest\";\nimport { render, screen } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { ToggleButton, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"ToggleButton - Basic rendering\", () => {\n it(\"renders toggle button with text content\", () => {\n render(\n <NimbusProvider>\n <ToggleButton>Toggle Me</ToggleButton>\n </NimbusProvider>\n );\n\n const button = screen.getByRole(\"button\", { name: /toggle me/i });\n expect(button).toBeInTheDocument();\n });\n\n it(\"renders in unselected state by default\", () => {\n render(\n <NimbusProvider>\n <ToggleButton>Toggle</ToggleButton>\n </NimbusProvider>\n );\n\n const button = screen.getByRole(\"button\");\n expect(button).toHaveAttribute(\"aria-pressed\", \"false\");\n });\n\n it(\"renders with icon and text\", () => {\n render(\n <NimbusProvider>\n <ToggleButton>\n <svg data-testid=\"test-icon\" />\n Like\n </ToggleButton>\n </NimbusProvider>\n );\n\n expect(screen.getByTestId(\"test-icon\")).toBeInTheDocument();\n expect(screen.getByRole(\"button\", { name: /like/i })).toBeInTheDocument();\n });\n\n it(\"renders with different sizes\", () => {\n const { rerender } = render(\n <NimbusProvider>\n <ToggleButton size=\"2xs\">Extra Small</ToggleButton>\n </NimbusProvider>\n );\n\n let button = screen.getByRole(\"button\");\n expect(button).toBeInTheDocument();\n\n rerender(\n <NimbusProvider>\n <ToggleButton size=\"xs\">Small</ToggleButton>\n </NimbusProvider>\n );\n\n button = screen.getByRole(\"button\");\n expect(button).toBeInTheDocument();\n\n rerender(\n <NimbusProvider>\n <ToggleButton size=\"md\">Medium</ToggleButton>\n </NimbusProvider>\n );\n\n button = screen.getByRole(\"button\");\n expect(button).toBeInTheDocument();\n });\n});\n```\n\n### Interaction Tests\n\nTest user interactions with the toggle button\n\n```tsx\nimport { describe, it, expect, vi } from \"vitest\";\nimport { render, screen } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { ToggleButton, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"ToggleButton - Interactions\", () => {\n it(\"toggles state when clicked\", async () => {\n const user = userEvent.setup();\n const handleChange = vi.fn();\n\n render(\n <NimbusProvider>\n <ToggleButton onChange={handleChange}>Toggle</ToggleButton>\n </NimbusProvider>\n );\n\n const button = screen.getByRole(\"button\");\n\n // Click to select\n await user.click(button);\n expect(handleChange).toHaveBeenCalledWith(true);\n expect(button).toHaveAttribute(\"aria-pressed\", \"true\");\n\n // Click to unselect\n await user.click(button);\n expect(handleChange).toHaveBeenCalledWith(false);\n expect(button).toHaveAttribute(\"aria-pressed\", \"false\");\n });\n\n it(\"toggles with keyboard (Enter)\", async () => {\n const user = userEvent.setup();\n const handleChange = vi.fn();\n\n render(\n <NimbusProvider>\n <ToggleButton onChange={handleChange}>Toggle</ToggleButton>\n </NimbusProvider>\n );\n\n // Use userEvent.tab() instead of element.focus() to avoid act() warnings\n await user.tab();\n await user.keyboard(\"{Enter}\");\n expect(handleChange).toHaveBeenCalledWith(true);\n });\n\n it(\"toggles with keyboard (Space)\", async () => {\n const user = userEvent.setup();\n const handleChange = vi.fn();\n\n render(\n <NimbusProvider>\n <ToggleButton onChange={handleChange}>Toggle</ToggleButton>\n </NimbusProvider>\n );\n\n // Use userEvent.tab() instead of element.focus() to avoid act() warnings\n await user.tab();\n await user.keyboard(\" \");\n expect(handleChange).toHaveBeenCalledWith(true);\n });\n\n it(\"is focusable with Tab key\", async () => {\n const user = userEvent.setup();\n\n render(\n <NimbusProvider>\n <ToggleButton>Toggle</ToggleButton>\n </NimbusProvider>\n );\n\n const button = screen.getByRole(\"button\");\n expect(button).not.toHaveFocus();\n\n await user.tab();\n expect(button).toHaveFocus();\n });\n});\n```\n\n### Controlled Mode Tests\n\nTest controlled toggle button behavior\n\n```tsx\nimport { describe, it, expect, vi } from \"vitest\";\nimport { render, screen } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { ToggleButton, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"ToggleButton - Controlled mode\", () => {\n it(\"respects controlled isSelected prop\", () => {\n const { rerender } = render(\n <NimbusProvider>\n <ToggleButton isSelected={false} onChange={vi.fn()}>\n Toggle\n </ToggleButton>\n </NimbusProvider>\n );\n\n let button = screen.getByRole(\"button\");\n expect(button).toHaveAttribute(\"aria-pressed\", \"false\");\n\n rerender(\n <NimbusProvider>\n <ToggleButton isSelected={true} onChange={vi.fn()}>\n Toggle\n </ToggleButton>\n </NimbusProvider>\n );\n\n button = screen.getByRole(\"button\");\n expect(button).toHaveAttribute(\"aria-pressed\", \"true\");\n });\n\n it(\"calls onChange when clicked in controlled mode\", async () => {\n const user = userEvent.setup();\n const handleChange = vi.fn();\n\n render(\n <NimbusProvider>\n <ToggleButton isSelected={false} onChange={handleChange}>\n Toggle\n </ToggleButton>\n </NimbusProvider>\n );\n\n const button = screen.getByRole(\"button\");\n await user.click(button);\n\n expect(handleChange).toHaveBeenCalledWith(true);\n });\n});\n```\n\n### Uncontrolled Mode Tests\n\nTest uncontrolled toggle button behavior\n\n```tsx\nimport { describe, it, expect, vi } from \"vitest\";\nimport { render, screen } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { ToggleButton, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"ToggleButton - Uncontrolled mode\", () => {\n it(\"starts with defaultSelected value\", () => {\n render(\n <NimbusProvider>\n <ToggleButton defaultSelected={true}>Toggle</ToggleButton>\n </NimbusProvider>\n );\n\n const button = screen.getByRole(\"button\");\n expect(button).toHaveAttribute(\"aria-pressed\", \"true\");\n });\n\n it(\"manages internal state when uncontrolled\", async () => {\n const user = userEvent.setup();\n const handleChange = vi.fn();\n\n render(\n <NimbusProvider>\n <ToggleButton defaultSelected={false} onChange={handleChange}>\n Toggle\n </ToggleButton>\n </NimbusProvider>\n );\n\n const button = screen.getByRole(\"button\");\n expect(button).toHaveAttribute(\"aria-pressed\", \"false\");\n\n await user.click(button);\n expect(handleChange).toHaveBeenCalledWith(true);\n expect(button).toHaveAttribute(\"aria-pressed\", \"true\");\n\n await user.click(button);\n expect(handleChange).toHaveBeenCalledWith(false);\n expect(button).toHaveAttribute(\"aria-pressed\", \"false\");\n });\n});\n```\n\n### State Tests\n\nTest different states like disabled\n\n```tsx\nimport { describe, it, expect, vi } from \"vitest\";\nimport { render, screen } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { ToggleButton, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"ToggleButton - States\", () => {\n it(\"renders disabled state\", () => {\n render(\n <NimbusProvider>\n <ToggleButton isDisabled>Disabled</ToggleButton>\n </NimbusProvider>\n );\n\n const button = screen.getByRole(\"button\");\n expect(button).toBeDisabled();\n });\n\n it(\"does not respond to clicks when disabled\", async () => {\n const user = userEvent.setup();\n const handleChange = vi.fn();\n\n render(\n <NimbusProvider>\n <ToggleButton isDisabled onChange={handleChange}>\n Disabled\n </ToggleButton>\n </NimbusProvider>\n );\n\n const button = screen.getByRole(\"button\");\n await user.click(button);\n\n expect(handleChange).not.toHaveBeenCalled();\n });\n\n it(\"cannot receive focus when disabled\", async () => {\n const user = userEvent.setup();\n\n render(\n <NimbusProvider>\n <ToggleButton isDisabled>Disabled</ToggleButton>\n </NimbusProvider>\n );\n\n const button = screen.getByRole(\"button\");\n await user.tab();\n\n expect(button).not.toHaveFocus();\n });\n\n it(\"renders selected state\", () => {\n render(\n <NimbusProvider>\n <ToggleButton isSelected>Selected</ToggleButton>\n </NimbusProvider>\n );\n\n const button = screen.getByRole(\"button\");\n expect(button).toHaveAttribute(\"aria-pressed\", \"true\");\n });\n});\n```\n\n### Visual Variant Tests\n\nTest different visual variants and color palettes\n\n```tsx\nimport { describe, it, expect, vi } from \"vitest\";\nimport { render, screen } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { ToggleButton, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"ToggleButton - Variants\", () => {\n it(\"renders outline variant\", () => {\n render(\n <NimbusProvider>\n <ToggleButton variant=\"outline\">Outline</ToggleButton>\n </NimbusProvider>\n );\n\n expect(screen.getByRole(\"button\")).toBeInTheDocument();\n });\n\n it(\"renders ghost variant\", () => {\n render(\n <NimbusProvider>\n <ToggleButton variant=\"ghost\">Ghost</ToggleButton>\n </NimbusProvider>\n );\n\n expect(screen.getByRole(\"button\")).toBeInTheDocument();\n });\n\n it(\"renders with different color palettes\", () => {\n const { rerender } = render(\n <NimbusProvider>\n <ToggleButton colorPalette=\"primary\">Primary</ToggleButton>\n </NimbusProvider>\n );\n\n expect(screen.getByRole(\"button\")).toBeInTheDocument();\n\n rerender(\n <NimbusProvider>\n <ToggleButton colorPalette=\"neutral\">Neutral</ToggleButton>\n </NimbusProvider>\n );\n\n expect(screen.getByRole(\"button\")).toBeInTheDocument();\n\n rerender(\n <NimbusProvider>\n <ToggleButton colorPalette=\"critical\">Critical</ToggleButton>\n </NimbusProvider>\n );\n\n expect(screen.getByRole(\"button\")).toBeInTheDocument();\n\n rerender(\n <NimbusProvider>\n <ToggleButton colorPalette=\"info\">Info</ToggleButton>\n </NimbusProvider>\n );\n\n expect(screen.getByRole(\"button\")).toBeInTheDocument();\n });\n});\n```\n\n### Accessibility Tests\n\nTest ARIA attributes and keyboard accessibility\n\n```tsx\nimport { describe, it, expect, vi } from \"vitest\";\nimport { render, screen } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { ToggleButton, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"ToggleButton - Accessibility\", () => {\n it(\"has proper button role\", () => {\n render(\n <NimbusProvider>\n <ToggleButton>Toggle</ToggleButton>\n </NimbusProvider>\n );\n\n expect(screen.getByRole(\"button\")).toBeInTheDocument();\n });\n\n it(\"has aria-pressed attribute\", () => {\n render(\n <NimbusProvider>\n <ToggleButton isSelected={false}>Toggle</ToggleButton>\n </NimbusProvider>\n );\n\n const button = screen.getByRole(\"button\");\n expect(button).toHaveAttribute(\"aria-pressed\", \"false\");\n });\n\n it(\"updates aria-pressed when toggled\", async () => {\n const user = userEvent.setup();\n\n render(\n <NimbusProvider>\n <ToggleButton defaultSelected={false}>Toggle</ToggleButton>\n </NimbusProvider>\n );\n\n const button = screen.getByRole(\"button\");\n expect(button).toHaveAttribute(\"aria-pressed\", \"false\");\n\n await user.click(button);\n expect(button).toHaveAttribute(\"aria-pressed\", \"true\");\n });\n\n it(\"supports aria-label for icon-only buttons\", () => {\n render(\n <NimbusProvider>\n <ToggleButton aria-label=\"Add to favorites\">\n <svg data-testid=\"icon\" />\n </ToggleButton>\n </NimbusProvider>\n );\n\n expect(\n screen.getByRole(\"button\", { name: /add to favorites/i })\n ).toBeInTheDocument();\n });\n\n it(\"is keyboard accessible\", async () => {\n const user = userEvent.setup();\n const handleChange = vi.fn();\n\n render(\n <NimbusProvider>\n <ToggleButton onChange={handleChange}>Toggle</ToggleButton>\n </NimbusProvider>\n );\n\n const button = screen.getByRole(\"button\");\n\n // Focus with Tab\n await user.tab();\n expect(button).toHaveFocus();\n\n // Activate with Enter\n await user.keyboard(\"{Enter}\");\n expect(handleChange).toHaveBeenCalledWith(true);\n });\n});\n```\n\n\n## Resources\n\n- [Storybook](https://nimbus-storybook.vercel.app/?path=/docs/components-buttons-togglebutton--docs)\n- [React Aria ToggleButton](https://react-spectrum.adobe.com/react-aria/ToggleButton.html)\n- [ARIA Button Pattern](https://www.w3.org/WAI/ARIA/apg/patterns/button/)\n- [Button Component](/components/buttons/button)\n",
334
+ "toc": [
335
+ {
336
+ "value": "Getting started",
337
+ "href": "#getting-started",
338
+ "depth": 2,
339
+ "numbering": [
340
+ 1,
341
+ 1
342
+ ],
343
+ "parent": "root"
344
+ },
345
+ {
346
+ "value": "Import",
347
+ "href": "#import",
348
+ "depth": 3,
349
+ "numbering": [
350
+ 1,
351
+ 1,
352
+ 1
353
+ ],
354
+ "parent": "root"
355
+ },
356
+ {
357
+ "value": "Basic usage",
358
+ "href": "#basic-usage",
359
+ "depth": 3,
360
+ "numbering": [
361
+ 1,
362
+ 1,
363
+ 2
364
+ ],
365
+ "parent": "root"
366
+ },
367
+ {
368
+ "value": "Usage examples",
369
+ "href": "#usage-examples",
370
+ "depth": 2,
371
+ "numbering": [
372
+ 1,
373
+ 2
374
+ ],
375
+ "parent": "root"
376
+ },
377
+ {
378
+ "value": "Controlled mode",
379
+ "href": "#controlled-mode",
380
+ "depth": 3,
381
+ "numbering": [
382
+ 1,
383
+ 2,
384
+ 1
385
+ ],
386
+ "parent": "root"
387
+ },
388
+ {
389
+ "value": "With icons",
390
+ "href": "#with-icons",
391
+ "depth": 3,
392
+ "numbering": [
393
+ 1,
394
+ 2,
395
+ 2
396
+ ],
397
+ "parent": "root"
398
+ },
399
+ {
400
+ "value": "Size variants",
401
+ "href": "#size-variants",
402
+ "depth": 3,
403
+ "numbering": [
404
+ 1,
405
+ 2,
406
+ 3
407
+ ],
408
+ "parent": "root"
409
+ },
410
+ {
411
+ "value": "Visual variants",
412
+ "href": "#visual-variants",
413
+ "depth": 3,
414
+ "numbering": [
415
+ 1,
416
+ 2,
417
+ 4
418
+ ],
419
+ "parent": "root"
420
+ },
421
+ {
422
+ "value": "Color palettes",
423
+ "href": "#color-palettes",
424
+ "depth": 3,
425
+ "numbering": [
426
+ 1,
427
+ 2,
428
+ 5
429
+ ],
430
+ "parent": "root"
431
+ },
432
+ {
433
+ "value": "Disabled state",
434
+ "href": "#disabled-state",
435
+ "depth": 3,
436
+ "numbering": [
437
+ 1,
438
+ 2,
439
+ 6
440
+ ],
441
+ "parent": "root"
442
+ },
443
+ {
444
+ "value": "Component requirements",
445
+ "href": "#component-requirements",
446
+ "depth": 2,
447
+ "numbering": [
448
+ 1,
449
+ 3
450
+ ],
451
+ "parent": "root"
452
+ },
453
+ {
454
+ "value": "Accessibility",
455
+ "href": "#accessibility",
456
+ "depth": 2,
457
+ "numbering": [
458
+ 1,
459
+ 4
460
+ ],
461
+ "parent": "root"
462
+ },
463
+ {
464
+ "value": "Keyboard navigation",
465
+ "href": "#keyboard-navigation",
466
+ "depth": 4,
467
+ "numbering": [
468
+ 1,
469
+ 4,
470
+ 1,
471
+ 1
472
+ ],
473
+ "parent": "root"
474
+ },
475
+ {
476
+ "value": "API reference",
477
+ "href": "#api-reference",
478
+ "depth": 2,
479
+ "numbering": [
480
+ 1,
481
+ 5
482
+ ],
483
+ "parent": "root"
484
+ },
485
+ {
486
+ "value": "Common patterns",
487
+ "href": "#common-patterns",
488
+ "depth": 2,
489
+ "numbering": [
490
+ 1,
491
+ 6
492
+ ],
493
+ "parent": "root"
494
+ },
495
+ {
496
+ "value": "Like/Favorite functionality",
497
+ "href": "#likefavorite-functionality",
498
+ "depth": 3,
499
+ "numbering": [
500
+ 1,
501
+ 6,
502
+ 1
503
+ ],
504
+ "parent": "root"
505
+ },
506
+ {
507
+ "value": "Filter toggles",
508
+ "href": "#filter-toggles",
509
+ "depth": 3,
510
+ "numbering": [
511
+ 1,
512
+ 6,
513
+ 2
514
+ ],
515
+ "parent": "root"
516
+ },
517
+ {
518
+ "value": "Settings toggles",
519
+ "href": "#settings-toggles",
520
+ "depth": 3,
521
+ "numbering": [
522
+ 1,
523
+ 6,
524
+ 3
525
+ ],
526
+ "parent": "root"
527
+ },
528
+ {
529
+ "value": "Testing your implementation",
530
+ "href": "#testing-your-implementation",
531
+ "depth": 2,
532
+ "numbering": [
533
+ 1,
534
+ 7
535
+ ],
536
+ "parent": "root"
537
+ },
538
+ {
539
+ "value": "Basic rendering tests",
540
+ "href": "#basic-rendering-tests",
541
+ "depth": 3,
542
+ "numbering": [
543
+ 1,
544
+ 7,
545
+ 1
546
+ ],
547
+ "parent": "root"
548
+ },
549
+ {
550
+ "value": "Interaction Tests",
551
+ "href": "#interaction-tests",
552
+ "depth": 3,
553
+ "numbering": [
554
+ 1,
555
+ 7,
556
+ 2
557
+ ],
558
+ "parent": "root"
559
+ },
560
+ {
561
+ "value": "Controlled Mode Tests",
562
+ "href": "#controlled-mode-tests",
563
+ "depth": 3,
564
+ "numbering": [
565
+ 1,
566
+ 7,
567
+ 3
568
+ ],
569
+ "parent": "root"
570
+ },
571
+ {
572
+ "value": "Uncontrolled Mode Tests",
573
+ "href": "#uncontrolled-mode-tests",
574
+ "depth": 3,
575
+ "numbering": [
576
+ 1,
577
+ 7,
578
+ 4
579
+ ],
580
+ "parent": "root"
581
+ },
582
+ {
583
+ "value": "State Tests",
584
+ "href": "#state-tests",
585
+ "depth": 3,
586
+ "numbering": [
587
+ 1,
588
+ 7,
589
+ 5
590
+ ],
591
+ "parent": "root"
592
+ },
593
+ {
594
+ "value": "Visual Variant Tests",
595
+ "href": "#visual-variant-tests",
596
+ "depth": 3,
597
+ "numbering": [
598
+ 1,
599
+ 7,
600
+ 6
601
+ ],
602
+ "parent": "root"
603
+ },
604
+ {
605
+ "value": "Accessibility Tests",
606
+ "href": "#accessibility-tests",
607
+ "depth": 3,
608
+ "numbering": [
609
+ 1,
610
+ 7,
611
+ 7
612
+ ],
613
+ "parent": "root"
614
+ },
615
+ {
616
+ "value": "Resources",
617
+ "href": "#resources",
618
+ "depth": 2,
619
+ "numbering": [
620
+ 1,
621
+ 8
622
+ ],
623
+ "parent": "root"
624
+ }
625
+ ]
626
+ },
627
+ "guidelines": {
628
+ "mdx": "\n## Guidelines\n\nToggle button guidelines aim to provide clear and consistent visual feedback to\nusers for compact binary states.\n\n### Best practices\n\n- **Provide clear labeling:** Always pair the toggle with a visible, persistent\n text label that describes the setting it controls.\n- **Prioritize accessibility:** Use the appropriate aria-checked or aria-pressed\n attributes to convey the state to screen readers and ensure the component is\n fully keyboard navigable.\n- **Ensure binary clarity:** Use single toggle buttons only for simple,\n two-state choices where the action is immediate and has a clear \"on\" or \"off\"\n status (e.g., Mute, Enable Dark Mode).\n\n##### Toggle Groups (Segmented Controls)\n\n- **Enforce mutual exclusivity:** Use toggle groups (segmented controls) when\n the user must select one option from a small, defined set (acting like radio\n buttons), such as viewing modes or alignment controls.\n- **Ensure complementary actions:** Group only those actions or options that are\n closely related within the same context (e.g., filtering by \"All,\" \"Active,\"\n \"Completed\").\n- **Maintain consistent sizing:** All buttons within the group should be\n uniformly sized to create a cohesive, single-component look, even if the text\n labels vary slightly in length.\n- **Limit options:** Keep the number of options within the group small (ideally\n 3 to 5) to prevent overcrowding and confusion.\n\n### Usage\n\n> [!TIP]\\\n> When to use\n\n- **Binary settings:** When the control represents a simple, immediate choice\n between two mutually exclusive states (e.g., \"On/Off,\" \"Active/Inactive,\"\n \"Yes/No\").\n- **Instant application:** When the action takes effect immediately without\n requiring the user to press a separate \"Save\" or \"Submit\" button.\n- **Configuration preferences:** For managing application settings or feature\n preferences (e.g., \"Enable Notifications,\" \"Use Dark Mode\").\n- **Visual status indicator:** When the current state of a persistent setting\n needs to be clearly visible at a glance.\n\n> [!CAUTION]\\\n> When not to use\n\n- **Ambiguous actions:** Do not use them when the icon's meaning is unclear or\n requires the user to guess; use a text label.\n- **Complex or multi-state processes:** Avoid using them for actions that\n require more than two states or sequential steps; use a segmented button or\n switch.\n- **Critical, permanent actions:** Do not use them for destructive or major\n actions; use a full text button with confirmation.\n- **Core navigation:** Avoid making primary navigation items toggleable unless\n they explicitly switch between two main views.\n- **Multi-select options:** If the user can select multiple items from a list,\n use checkboxes instead.\n- **Multi-state options:** If the user needs to select one option from three or\n more choices, use radio buttons or a segmented control instead.\n- **Actions requiring confirmation:** Do not use for actions that are\n destructive, irreversible, or require confirmation (e.g., deleting an account,\n submitting a payment). Use a standard button that triggers a confirmation\n dialog.\n- **Complex settings:** Avoid using a toggle if the result of the action isn't\n clear or if the setting requires additional input fields to be configured.\n- **Triggers for new pages:** Do not use a toggle to navigate to a new section\n or page; use a link or standard button for navigation.\n- **Long-running processes:** For actions that take time to complete (e.g.,\n \"Start Backup\"), a standard button that displays a loading spinner upon press\n is more appropriate.\n\n### Toggle buttons in use\n\n> [!TIP]\\\n> **Do**\n>\n> - Do use toggle buttons for a simple binary choice (on/off).\n> - Do place them in toolbars or areas where space is limited.\n> - Do ensure the \"on\" state is clearly distinct from the \"off\" state.\n> - Do connect buttons that toggle one active state among a small selection of\n> options.\n\n```jsx live\nconst App = () => (\n <ToggleButton>\n <Icons.LocalShipping />\n Default shipping address\n </ToggleButton>\n)\n```\n\n> [!CAUTION]\\\n> **Don't**\n>\n> - Don't use for destructive or critical actions needing confirmation.\n> - Don't use for navigation.\n> - Don't rely on subtle color changes alone to show the state.\n> - Don't use for complex settings that require additional user input.\n\n```jsx live\nconst App = () => (\n <ToggleButton>\n <Icons.Delete />\n Delete all of my data\n </ToggleButton>\n)\n```\n",
629
+ "toc": [
630
+ {
631
+ "value": "Guidelines",
632
+ "href": "#guidelines",
633
+ "depth": 2,
634
+ "numbering": [
635
+ 1,
636
+ 1
637
+ ],
638
+ "parent": "root"
639
+ },
640
+ {
641
+ "value": "Best practices",
642
+ "href": "#best-practices",
643
+ "depth": 3,
644
+ "numbering": [
645
+ 1,
646
+ 1,
647
+ 1
648
+ ],
649
+ "parent": "root"
650
+ },
651
+ {
652
+ "value": "Toggle Groups (Segmented Controls)",
653
+ "href": "#toggle-groups-segmented-controls",
654
+ "depth": 5,
655
+ "numbering": [
656
+ 1,
657
+ 1,
658
+ 1,
659
+ 1,
660
+ 1
661
+ ],
662
+ "parent": "root"
663
+ },
664
+ {
665
+ "value": "Usage",
666
+ "href": "#usage",
667
+ "depth": 3,
668
+ "numbering": [
669
+ 1,
670
+ 1,
671
+ 2
672
+ ],
673
+ "parent": "root"
674
+ },
675
+ {
676
+ "value": "Toggle buttons in use",
677
+ "href": "#toggle-buttons-in-use",
678
+ "depth": 3,
679
+ "numbering": [
680
+ 1,
681
+ 1,
682
+ 3
683
+ ],
684
+ "parent": "root"
685
+ }
686
+ ]
687
+ }
688
+ }
689
+ }