@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,546 @@
1
+ {
2
+ "meta": {
3
+ "id": "Components-TabNav",
4
+ "title": "TabNav",
5
+ "exportName": "TabNav",
6
+ "description": "Tab-styled navigation links for route-based page navigation.",
7
+ "lifecycleState": "Stable",
8
+ "order": 999,
9
+ "repoPath": "packages/nimbus/src/components/tab-nav/tab-nav.mdx",
10
+ "menu": [
11
+ "Components",
12
+ "Navigation",
13
+ "TabNav"
14
+ ],
15
+ "route": "components/navigation/tabnav",
16
+ "tags": [
17
+ "component",
18
+ "navigation",
19
+ "tab-nav"
20
+ ],
21
+ "toc": [
22
+ {
23
+ "value": "Overview",
24
+ "href": "#overview",
25
+ "depth": 2,
26
+ "numbering": [
27
+ 1,
28
+ 1
29
+ ],
30
+ "parent": "root"
31
+ },
32
+ {
33
+ "value": "Resources",
34
+ "href": "#resources",
35
+ "depth": 3,
36
+ "numbering": [
37
+ 1,
38
+ 1,
39
+ 1
40
+ ],
41
+ "parent": "root"
42
+ },
43
+ {
44
+ "value": "Variables",
45
+ "href": "#variables",
46
+ "depth": 2,
47
+ "numbering": [
48
+ 1,
49
+ 2
50
+ ],
51
+ "parent": "root"
52
+ },
53
+ {
54
+ "value": "Sizes",
55
+ "href": "#sizes",
56
+ "depth": 3,
57
+ "numbering": [
58
+ 1,
59
+ 2,
60
+ 1
61
+ ],
62
+ "parent": "root"
63
+ },
64
+ {
65
+ "value": "Active item",
66
+ "href": "#active-item",
67
+ "depth": 3,
68
+ "numbering": [
69
+ 1,
70
+ 2,
71
+ 2
72
+ ],
73
+ "parent": "root"
74
+ },
75
+ {
76
+ "value": "Disabled item",
77
+ "href": "#disabled-item",
78
+ "depth": 3,
79
+ "numbering": [
80
+ 1,
81
+ 2,
82
+ 3
83
+ ],
84
+ "parent": "root"
85
+ },
86
+ {
87
+ "value": "With icons",
88
+ "href": "#with-icons",
89
+ "depth": 3,
90
+ "numbering": [
91
+ 1,
92
+ 2,
93
+ 4
94
+ ],
95
+ "parent": "root"
96
+ }
97
+ ],
98
+ "layout": "app-frame",
99
+ "tabs": [
100
+ {
101
+ "key": "overview",
102
+ "title": "Overview",
103
+ "order": 0
104
+ },
105
+ {
106
+ "key": "dev",
107
+ "title": "Implementation",
108
+ "order": 3
109
+ },
110
+ {
111
+ "key": "a11y",
112
+ "title": "Accessibility",
113
+ "order": 4
114
+ }
115
+ ]
116
+ },
117
+ "mdx": "\n## Overview\n\nTabNav provides tab-styled navigation links for route-based page navigation.\nUnlike `Tabs`, which switch content panels within the same page, `TabNav` renders\na `<nav>` landmark containing `<a>` anchor elements that link to distinct routes.\nEach item behaves as a standard link, and the active item is identified with\n`aria-current=\"page\"`.\n\nUse `TabNav` in page headers where each item links to a different URL (e.g.,\n`/orders/123/general`, `/orders/123/items`).\n\n### Resources\n\nDeep dive into implementation details and access the Nimbus design library.\n\n[React Aria useLink](https://react-spectrum.adobe.com/react-aria/useLink.html)\n\n## Variables\n\nGet familiar with the features.\n\n### Sizes\n\n`TabNav` supports three size variants — `sm`, `md` (default), and `lg` — that\ncontrol font size and padding on each item.\n\n```jsx live\nconst App = () => (\n <Stack direction=\"column\" gap=\"800\">\n {[\"sm\", \"md\", \"lg\"].map((size) => (\n <Stack key={size} direction=\"column\" gap=\"300\">\n <Text fontWeight=\"600\">{size}</Text>\n <TabNav.Root aria-label={`Order navigation (${size})`} size={size}>\n <TabNav.Item href=\"/orders/123/general\" isCurrent>\n General\n </TabNav.Item>\n <TabNav.Item href=\"/orders/123/items\">Items</TabNav.Item>\n <TabNav.Item href=\"/orders/123/shipping\">Shipping</TabNav.Item>\n </TabNav.Root>\n </Stack>\n ))}\n </Stack>\n)\n```\n\n### Active item\n\nMark the currently viewed page with `isCurrent`. This renders `aria-current=\"page\"`\non the anchor, which screen readers announce as \"current page\" and which applies\nthe active underline style.\n\n```jsx live\nconst App = () => (\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item href=\"/orders/123/general\" isCurrent>\n General\n </TabNav.Item>\n <TabNav.Item href=\"/orders/123/items\">Items</TabNav.Item>\n <TabNav.Item href=\"/orders/123/shipping\">Shipping</TabNav.Item>\n </TabNav.Root>\n)\n```\n\n### Disabled item\n\nUse `isDisabled` to prevent navigation to items that are not yet accessible.\nDisabled items are visually dimmed and excluded from the tab sequence.\n\n```jsx live\nconst App = () => (\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item href=\"/orders/123/general\" isCurrent>\n General\n </TabNav.Item>\n <TabNav.Item href=\"/orders/123/items\">Items</TabNav.Item>\n <TabNav.Item href=\"/orders/123/shipping\" isDisabled>\n Shipping\n </TabNav.Item>\n </TabNav.Root>\n)\n```\n\n### With icons\n\nTab items support inline icons alongside text via the built-in flex gap layout.\n\n```jsx live\nconst App = () => (\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item href=\"/orders/123/general\" isCurrent>\n <Icons.Info />\n General\n </TabNav.Item>\n <TabNav.Item href=\"/orders/123/items\">\n <Icons.List />\n Items\n </TabNav.Item>\n <TabNav.Item href=\"/orders/123/shipping\">\n <Icons.LocalShipping />\n Shipping\n </TabNav.Item>\n </TabNav.Root>\n)\n```\n",
118
+ "views": {
119
+ "overview": {
120
+ "mdx": "\n## Overview\n\nTabNav provides tab-styled navigation links for route-based page navigation.\nUnlike `Tabs`, which switch content panels within the same page, `TabNav` renders\na `<nav>` landmark containing `<a>` anchor elements that link to distinct routes.\nEach item behaves as a standard link, and the active item is identified with\n`aria-current=\"page\"`.\n\nUse `TabNav` in page headers where each item links to a different URL (e.g.,\n`/orders/123/general`, `/orders/123/items`).\n\n### Resources\n\nDeep dive into implementation details and access the Nimbus design library.\n\n[React Aria useLink](https://react-spectrum.adobe.com/react-aria/useLink.html)\n\n## Variables\n\nGet familiar with the features.\n\n### Sizes\n\n`TabNav` supports three size variants — `sm`, `md` (default), and `lg` — that\ncontrol font size and padding on each item.\n\n```jsx live\nconst App = () => (\n <Stack direction=\"column\" gap=\"800\">\n {[\"sm\", \"md\", \"lg\"].map((size) => (\n <Stack key={size} direction=\"column\" gap=\"300\">\n <Text fontWeight=\"600\">{size}</Text>\n <TabNav.Root aria-label={`Order navigation (${size})`} size={size}>\n <TabNav.Item href=\"/orders/123/general\" isCurrent>\n General\n </TabNav.Item>\n <TabNav.Item href=\"/orders/123/items\">Items</TabNav.Item>\n <TabNav.Item href=\"/orders/123/shipping\">Shipping</TabNav.Item>\n </TabNav.Root>\n </Stack>\n ))}\n </Stack>\n)\n```\n\n### Active item\n\nMark the currently viewed page with `isCurrent`. This renders `aria-current=\"page\"`\non the anchor, which screen readers announce as \"current page\" and which applies\nthe active underline style.\n\n```jsx live\nconst App = () => (\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item href=\"/orders/123/general\" isCurrent>\n General\n </TabNav.Item>\n <TabNav.Item href=\"/orders/123/items\">Items</TabNav.Item>\n <TabNav.Item href=\"/orders/123/shipping\">Shipping</TabNav.Item>\n </TabNav.Root>\n)\n```\n\n### Disabled item\n\nUse `isDisabled` to prevent navigation to items that are not yet accessible.\nDisabled items are visually dimmed and excluded from the tab sequence.\n\n```jsx live\nconst App = () => (\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item href=\"/orders/123/general\" isCurrent>\n General\n </TabNav.Item>\n <TabNav.Item href=\"/orders/123/items\">Items</TabNav.Item>\n <TabNav.Item href=\"/orders/123/shipping\" isDisabled>\n Shipping\n </TabNav.Item>\n </TabNav.Root>\n)\n```\n\n### With icons\n\nTab items support inline icons alongside text via the built-in flex gap layout.\n\n```jsx live\nconst App = () => (\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item href=\"/orders/123/general\" isCurrent>\n <Icons.Info />\n General\n </TabNav.Item>\n <TabNav.Item href=\"/orders/123/items\">\n <Icons.List />\n Items\n </TabNav.Item>\n <TabNav.Item href=\"/orders/123/shipping\">\n <Icons.LocalShipping />\n Shipping\n </TabNav.Item>\n </TabNav.Root>\n)\n```\n",
121
+ "toc": [
122
+ {
123
+ "value": "Overview",
124
+ "href": "#overview",
125
+ "depth": 2,
126
+ "numbering": [
127
+ 1,
128
+ 1
129
+ ],
130
+ "parent": "root"
131
+ },
132
+ {
133
+ "value": "Resources",
134
+ "href": "#resources",
135
+ "depth": 3,
136
+ "numbering": [
137
+ 1,
138
+ 1,
139
+ 1
140
+ ],
141
+ "parent": "root"
142
+ },
143
+ {
144
+ "value": "Variables",
145
+ "href": "#variables",
146
+ "depth": 2,
147
+ "numbering": [
148
+ 1,
149
+ 2
150
+ ],
151
+ "parent": "root"
152
+ },
153
+ {
154
+ "value": "Sizes",
155
+ "href": "#sizes",
156
+ "depth": 3,
157
+ "numbering": [
158
+ 1,
159
+ 2,
160
+ 1
161
+ ],
162
+ "parent": "root"
163
+ },
164
+ {
165
+ "value": "Active item",
166
+ "href": "#active-item",
167
+ "depth": 3,
168
+ "numbering": [
169
+ 1,
170
+ 2,
171
+ 2
172
+ ],
173
+ "parent": "root"
174
+ },
175
+ {
176
+ "value": "Disabled item",
177
+ "href": "#disabled-item",
178
+ "depth": 3,
179
+ "numbering": [
180
+ 1,
181
+ 2,
182
+ 3
183
+ ],
184
+ "parent": "root"
185
+ },
186
+ {
187
+ "value": "With icons",
188
+ "href": "#with-icons",
189
+ "depth": 3,
190
+ "numbering": [
191
+ 1,
192
+ 2,
193
+ 4
194
+ ],
195
+ "parent": "root"
196
+ }
197
+ ]
198
+ },
199
+ "a11y": {
200
+ "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 <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item href=\"/orders/123/general\" isCurrent>\n General\n </TabNav.Item>\n <TabNav.Item href=\"/orders/123/items\">Items</TabNav.Item>\n <TabNav.Item href=\"/orders/123/shipping\">Shipping</TabNav.Item>\n <TabNav.Item href=\"/orders/123/history\">History</TabNav.Item>\n </TabNav.Root>\n)\n```\n\n### Accessibility standards\n\n- **Landmark role:** `TabNav.Root` renders a `<nav>` HTML element — a navigation\n landmark. Always provide an `aria-label` to identify the landmark, especially\n when a page contains multiple `<nav>` elements.\n- **Link semantics:** `TabNav.Item` renders an `<a>` element with the implicit\n `link` role. Do **not** use `role=\"tab\"` — this component is not a tablist\n widget.\n- **Active page indication:** The active item uses `aria-current=\"page\"` — **not**\n `aria-selected`. Screen readers announce this as \"current page\" to users.\n- **Keyboard navigation:** `TabNav` uses standard sequential keyboard navigation.\n The `Tab` key moves focus to the next link and `Shift + Tab` moves to the\n previous link. Arrow keys do **not** cycle focus between items — this is\n intentional and differs from the `Tabs` widget pattern.\n- **Disabled items:** Disabled items carry `aria-disabled=\"true\"` and are\n excluded from the tab sequence, so keyboard users skip them naturally.\n- **Contrast:** Ensure sufficient contrast between link text and the background\n in all states (default, hover, active, focused, disabled). The focus indicator\n must be clearly visible.\n",
201
+ "toc": [
202
+ {
203
+ "value": "Accessibility",
204
+ "href": "#accessibility",
205
+ "depth": 2,
206
+ "numbering": [
207
+ 1,
208
+ 1
209
+ ],
210
+ "parent": "root"
211
+ },
212
+ {
213
+ "value": "Accessibility standards",
214
+ "href": "#accessibility-standards",
215
+ "depth": 3,
216
+ "numbering": [
217
+ 1,
218
+ 1,
219
+ 1
220
+ ],
221
+ "parent": "root"
222
+ }
223
+ ]
224
+ },
225
+ "dev": {
226
+ "mdx": "\n## Getting started\n\n### Import\n\n```tsx\nimport { TabNav, type TabNavProps, type TabNavItemProps } from '@commercetools/nimbus';\n```\n\n### Basic usage\n\n`TabNav` is a compound component for **page-level route-based navigation** that renders a `<nav>` landmark containing `<a>` anchor elements. The active item is identified with `aria-current=\"page\"`.\n\n```jsx live-dev\nconst App = () => (\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item href=\"/orders/123/general\" isCurrent>\n General\n </TabNav.Item>\n <TabNav.Item href=\"/orders/123/items\">Items</TabNav.Item>\n <TabNav.Item href=\"/orders/123/shipping\">Shipping</TabNav.Item>\n </TabNav.Root>\n);\n```\n\n## TabNav vs Tabs\n\n`TabNav` and `Tabs` look similar but serve fundamentally different purposes:\n\n| | `TabNav` | `Tabs` |\n|---|---|---|\n| **Use case** | Page-level navigation between routes | Switching content panels within a page |\n| **HTML semantics** | `<nav>` + `<a>` | `role=\"tablist\"` + `role=\"tab\"` |\n| **Active state** | `aria-current=\"page\"` | `aria-selected=\"true\"` |\n| **Keyboard** | Sequential Tab key | Arrow keys (roving tabindex) |\n| **Content** | No panel — content managed by router | Owns associated `TabPanel` |\n| **URL** | Always (`href` required) | Optional (`href` prop) |\n\nBoth `TabNav` and `Tabs` support client-side routing — the deciding factor is whether the component owns its content panels or delegates to the router. Use `TabNav` when each item navigates to a different route and the router manages what's rendered. Use `Tabs` when the content lives alongside the tab list.\n\n## Usage examples\n\n### Client-side view switching\n\nThe most common TabNav pattern: a persistent nav bar where clicking an item swaps the visible content without a full page reload. In a real app, `isCurrent` is derived from the router and the `href` triggers a route change. The example below simulates this with local state to show the interaction.\n\n```jsx live-dev\nconst items = [\n { href: '/orders/123/general', label: 'General' },\n { href: '/orders/123/items', label: 'Items' },\n { href: '/orders/123/shipping', label: 'Shipping' },\n];\n\nconst content = {\n '/orders/123/general': 'General settings and order details.',\n '/orders/123/items': 'Line items and quantities.',\n '/orders/123/shipping': 'Shipping address and carrier information.',\n};\n\nconst App = () => {\n const [activePath, setActivePath] = React.useState(items[0].href);\n\n return (\n <Stack gap=\"400\">\n <TabNav.Root aria-label=\"Order navigation\">\n {items.map((item) => (\n <TabNav.Item\n key={item.href}\n href={item.href}\n isCurrent={activePath === item.href}\n onClick={(e) => { e.preventDefault(); setActivePath(item.href); }}\n >\n {item.label}\n </TabNav.Item>\n ))}\n </TabNav.Root>\n <Box padding=\"400\">{content[activePath]}</Box>\n </Stack>\n );\n};\n```\n\n### Active item\n\nMark the currently viewed page with `isCurrent`. This sets `aria-current=\"page\"` on the anchor element, which screen readers announce as \"current page\".\n\n```jsx live-dev\nconst App = () => (\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item href=\"/orders/123/general\" isCurrent>\n General\n </TabNav.Item>\n <TabNav.Item href=\"/orders/123/items\">Items</TabNav.Item>\n <TabNav.Item href=\"/orders/123/shipping\">Shipping</TabNav.Item>\n </TabNav.Root>\n);\n```\n\nWhen using a client-side router, set `isCurrent` based on the active route:\n\n```tsx\nimport { useLocation } from 'react-router-dom';\n\nconst OrderNav = ({ orderId }: { orderId: string }) => {\n const { pathname } = useLocation();\n\n return (\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item\n href={`/orders/${orderId}/general`}\n isCurrent={pathname.endsWith('/general')}\n >\n General\n </TabNav.Item>\n <TabNav.Item\n href={`/orders/${orderId}/items`}\n isCurrent={pathname.endsWith('/items')}\n >\n Items\n </TabNav.Item>\n </TabNav.Root>\n );\n};\n```\n\n### Size variants\n\nThe `size` prop controls font size and padding. Available sizes: `sm`, `md` (default), `lg`.\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"column\" gap=\"800\">\n <Stack direction=\"column\" gap=\"300\">\n <Text fontWeight=\"500\">Small</Text>\n <TabNav.Root aria-label=\"Navigation (sm)\" size=\"sm\">\n <TabNav.Item href=\"/general\" isCurrent>General</TabNav.Item>\n <TabNav.Item href=\"/items\">Items</TabNav.Item>\n <TabNav.Item href=\"/shipping\">Shipping</TabNav.Item>\n </TabNav.Root>\n </Stack>\n <Stack direction=\"column\" gap=\"300\">\n <Text fontWeight=\"500\">Medium (default)</Text>\n <TabNav.Root aria-label=\"Navigation (md)\" size=\"md\">\n <TabNav.Item href=\"/general\" isCurrent>General</TabNav.Item>\n <TabNav.Item href=\"/items\">Items</TabNav.Item>\n <TabNav.Item href=\"/shipping\">Shipping</TabNav.Item>\n </TabNav.Root>\n </Stack>\n <Stack direction=\"column\" gap=\"300\">\n <Text fontWeight=\"500\">Large</Text>\n <TabNav.Root aria-label=\"Navigation (lg)\" size=\"lg\">\n <TabNav.Item href=\"/general\" isCurrent>General</TabNav.Item>\n <TabNav.Item href=\"/items\">Items</TabNav.Item>\n <TabNav.Item href=\"/shipping\">Shipping</TabNav.Item>\n </TabNav.Root>\n </Stack>\n </Stack>\n);\n```\n\n### Disabled items\n\nUse `isDisabled` to prevent navigation to items that are not yet accessible. Disabled items are visually dimmed, removed from the tab sequence, and their `href` is stripped.\n\n```jsx live-dev\nconst App = () => (\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item href=\"/orders/123/general\" isCurrent>\n General\n </TabNav.Item>\n <TabNav.Item href=\"/orders/123/items\">Items</TabNav.Item>\n <TabNav.Item href=\"/orders/123/shipping\" isDisabled>\n Shipping\n </TabNav.Item>\n </TabNav.Root>\n);\n```\n\n### External links\n\nUse `target` and `rel` to open a navigation item in a new browser tab. Always pair `target=\"_blank\"` with `rel=\"noopener noreferrer\"` for security.\n\n```jsx live-dev\nconst App = () => (\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item href=\"/orders/123/general\" isCurrent>\n General\n </TabNav.Item>\n <TabNav.Item href=\"/orders/123/items\">Items</TabNav.Item>\n <TabNav.Item\n href=\"https://docs.example.com/orders\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Docs ↗\n </TabNav.Item>\n </TabNav.Root>\n);\n```\n\n### With icons\n\nTab items support inline icons alongside text via the `gap` built into the item layout.\n\n```jsx live-dev\nconst App = () => (\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item href=\"/orders/123/general\" isCurrent>\n <Icons.Info />\n General\n </TabNav.Item>\n <TabNav.Item href=\"/orders/123/items\">\n <Icons.List />\n Items\n </TabNav.Item>\n <TabNav.Item href=\"/orders/123/shipping\">\n <Icons.LocalShipping />\n Shipping\n </TabNav.Item>\n </TabNav.Root>\n);\n```\n\n## Component requirements\n\n### Accessibility\n\nThe TabNav component uses semantic HTML for navigation — it does not use ARIA roles for the tablist pattern. Accessibility is handled natively by the browser's `<nav>` landmark and `<a>` anchor semantics. `TabNav.Item` uses `useLink` from React Aria for consistent interaction handling.\n\n#### Role\n\n- `TabNav.Root` renders a `<nav>` HTML element — a navigation landmark, **not** `role=\"tablist\"`\n- `TabNav.Item` renders an `<a>` HTML element with the implicit `link` role — **not** `role=\"tab\"`\n- The active item uses `aria-current=\"page\"` — **not** `aria-selected`\n\n#### Labeling\n\nAlways provide an `aria-label` on `TabNav.Root` to describe the navigation region. This is especially important when a page contains multiple `<nav>` landmarks.\n\n```tsx\n<TabNav.Root aria-label=\"Order navigation\">\n ...\n</TabNav.Root>\n```\n\n#### Keyboard navigation\n\nTabNav uses standard sequential keyboard navigation — no roving tabindex, no arrow key cycling.\n\n| Key | Action |\n|-----|--------|\n| `Tab` | Move focus to the next link |\n| `Shift + Tab` | Move focus to the previous link |\n| `Enter` | Activate the focused link |\n\nArrow keys (`ArrowRight`, `ArrowLeft`) do **not** move focus between items. This is intentional — TabNav is a `<nav>` with standard anchor links, not a `role=\"tablist\"` widget.\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:\n\n```tsx\nconst PERSISTENT_ID = \"order-detail-tab-nav\";\n\nexport const OrderTabNav = ({ orderId }: { orderId: string }) => (\n <TabNav.Root id={PERSISTENT_ID} aria-label=\"Order navigation\">\n <TabNav.Item href={`/orders/${orderId}/general`} isCurrent>\n General\n </TabNav.Item>\n </TabNav.Root>\n);\n```\n\n## API reference\n\n<PropsTable id=\"TabNav\" />\n\n## Common patterns\n\n### Syncing active item with router\n\nIn most routing setups you derive `isCurrent` from the current URL rather than managing it in state.\n\n```tsx\n// React Router v6\nimport { useMatch } from 'react-router-dom';\n\nconst OrderNav = ({ orderId }: { orderId: string }) => (\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item\n href={`/orders/${orderId}/general`}\n isCurrent={!!useMatch(`/orders/${orderId}/general`)}\n >\n General\n </TabNav.Item>\n <TabNav.Item\n href={`/orders/${orderId}/items`}\n isCurrent={!!useMatch(`/orders/${orderId}/items`)}\n >\n Items\n </TabNav.Item>\n <TabNav.Item\n href={`/orders/${orderId}/shipping`}\n isCurrent={!!useMatch(`/orders/${orderId}/shipping`)}\n >\n Shipping\n </TabNav.Item>\n </TabNav.Root>\n);\n```\n\n### Conditionally disabling items\n\nDisable items based on permissions or loading state rather than hiding them — this preserves the layout and communicates to users that the section exists.\n\n```tsx\nconst OrderNav = ({ orderId, canViewShipping }: { orderId: string; canViewShipping: boolean }) => (\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item href={`/orders/${orderId}/general`} isCurrent>\n General\n </TabNav.Item>\n <TabNav.Item\n href={`/orders/${orderId}/shipping`}\n isDisabled={!canViewShipping}\n >\n Shipping\n </TabNav.Item>\n </TabNav.Root>\n);\n```\n\n## Testing your implementation\n\nThese examples demonstrate how to test your implementation when using TabNav 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 TabNav component renders a nav landmark with anchor links\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 { TabNav, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"TabNav - Basic rendering\", () => {\n it(\"renders a navigation landmark with links\", () => {\n render(\n <NimbusProvider>\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item href=\"/orders/123/general\" isCurrent>\n General\n </TabNav.Item>\n <TabNav.Item href=\"/orders/123/items\">Items</TabNav.Item>\n <TabNav.Item href=\"/orders/123/shipping\">Shipping</TabNav.Item>\n </TabNav.Root>\n </NimbusProvider>\n );\n\n expect(\n screen.getByRole(\"navigation\", { name: \"Order navigation\" })\n ).toBeInTheDocument();\n expect(screen.getAllByRole(\"link\")).toHaveLength(3);\n });\n\n it(\"renders items as anchor elements with correct href\", () => {\n render(\n <NimbusProvider>\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item href=\"/orders/123/general\">General</TabNav.Item>\n <TabNav.Item href=\"/orders/123/items\">Items</TabNav.Item>\n </TabNav.Root>\n </NimbusProvider>\n );\n\n expect(screen.getByRole(\"link\", { name: \"General\" })).toHaveAttribute(\n \"href\",\n \"/orders/123/general\"\n );\n expect(screen.getByRole(\"link\", { name: \"Items\" })).toHaveAttribute(\n \"href\",\n \"/orders/123/items\"\n );\n });\n});\n```\n\n### Active Item Tests\n\nVerify aria-current=\"page\" is applied correctly to the active navigation item\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 { TabNav, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"TabNav - Active item\", () => {\n it(\"sets aria-current='page' on the active item\", () => {\n render(\n <NimbusProvider>\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item href=\"/orders/123/general\" isCurrent>\n General\n </TabNav.Item>\n <TabNav.Item href=\"/orders/123/items\">Items</TabNav.Item>\n </TabNav.Root>\n </NimbusProvider>\n );\n\n expect(screen.getByRole(\"link\", { name: \"General\" })).toHaveAttribute(\n \"aria-current\",\n \"page\"\n );\n });\n\n it(\"does not set aria-current on inactive items\", () => {\n render(\n <NimbusProvider>\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item href=\"/orders/123/general\" isCurrent>\n General\n </TabNav.Item>\n <TabNav.Item href=\"/orders/123/items\">Items</TabNav.Item>\n <TabNav.Item href=\"/orders/123/shipping\">Shipping</TabNav.Item>\n </TabNav.Root>\n </NimbusProvider>\n );\n\n expect(screen.getByRole(\"link\", { name: \"Items\" })).not.toHaveAttribute(\n \"aria-current\"\n );\n expect(screen.getByRole(\"link\", { name: \"Shipping\" })).not.toHaveAttribute(\n \"aria-current\"\n );\n });\n\n it(\"does not use aria-selected (navigation, not widget)\", () => {\n render(\n <NimbusProvider>\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item href=\"/orders/123/general\" isCurrent>\n General\n </TabNav.Item>\n </TabNav.Root>\n </NimbusProvider>\n );\n\n expect(screen.getByRole(\"link\", { name: \"General\" })).not.toHaveAttribute(\n \"aria-selected\"\n );\n });\n});\n```\n\n### Disabled Item Tests\n\nVerify disabled items are marked inaccessible and removed from tab order\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 { TabNav, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"TabNav - Disabled items\", () => {\n it(\"marks disabled items with aria-disabled='true'\", () => {\n render(\n <NimbusProvider>\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item href=\"/orders/123/general\">General</TabNav.Item>\n <TabNav.Item href=\"/orders/123/shipping\" isDisabled>\n Shipping\n </TabNav.Item>\n </TabNav.Root>\n </NimbusProvider>\n );\n\n const disabledItem = screen.getByRole(\"link\", { name: \"Shipping\" });\n expect(disabledItem).toHaveAttribute(\"aria-disabled\", \"true\");\n });\n\n it(\"disabled items have no tabIndex (excluded from tab sequence by browser)\", () => {\n render(\n <NimbusProvider>\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item href=\"/orders/123/general\">General</TabNav.Item>\n <TabNav.Item href=\"/orders/123/shipping\" isDisabled>\n Shipping\n </TabNav.Item>\n </TabNav.Root>\n </NimbusProvider>\n );\n\n // React Aria sets no tabIndex on the disabled anchor — the browser excludes it\n const disabledItem = screen.getByRole(\"link\", { name: \"Shipping\" });\n expect(disabledItem).not.toHaveAttribute(\"tabindex\");\n });\n});\n```\n\n### External Link Tests\n\nVerify target and rel attributes for external navigation items\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 { TabNav, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"TabNav - External links\", () => {\n it(\"applies target and rel to external link items\", () => {\n render(\n <NimbusProvider>\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item href=\"/orders/123/general\" isCurrent>\n General\n </TabNav.Item>\n <TabNav.Item\n href=\"https://docs.example.com\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Docs ↗\n </TabNav.Item>\n </TabNav.Root>\n </NimbusProvider>\n );\n\n const externalLink = screen.getByRole(\"link\", { name: \"Docs ↗\" });\n expect(externalLink).toHaveAttribute(\"target\", \"_blank\");\n expect(externalLink).toHaveAttribute(\"rel\", \"noopener noreferrer\");\n });\n});\n```\n\n### Interaction Tests\n\nVerify click handling and keyboard activation\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 { TabNav, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"TabNav - Interactions\", () => {\n it(\"calls onClick handler when a link is clicked\", async () => {\n const user = userEvent.setup();\n const handleClick = vi.fn();\n\n render(\n <NimbusProvider>\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item href=\"/orders/123/general\" onClick={handleClick}>\n General\n </TabNav.Item>\n </TabNav.Root>\n </NimbusProvider>\n );\n\n await user.click(screen.getByRole(\"link\", { name: \"General\" }));\n expect(handleClick).toHaveBeenCalled();\n });\n\n it(\"is focusable with Tab key\", async () => {\n const user = userEvent.setup();\n\n render(\n <NimbusProvider>\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item href=\"/orders/123/general\">General</TabNav.Item>\n </TabNav.Root>\n </NimbusProvider>\n );\n\n await user.tab();\n expect(screen.getByRole(\"link\", { name: \"General\" })).toHaveFocus();\n });\n});\n```\n\n### Accessibility Tests\n\nVerify accessible labels and ID support\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 { TabNav, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"TabNav - Accessibility\", () => {\n it(\"supports aria-label on the root for landmark identification\", () => {\n render(\n <NimbusProvider>\n <TabNav.Root aria-label=\"Order navigation\">\n <TabNav.Item href=\"/orders/123/general\">General</TabNav.Item>\n </TabNav.Root>\n </NimbusProvider>\n );\n\n expect(\n screen.getByRole(\"navigation\", { name: \"Order navigation\" })\n ).toBeInTheDocument();\n });\n\n it(\"supports a persistent id on the root for tracking\", () => {\n render(\n <NimbusProvider>\n <TabNav.Root id=\"order-tab-nav\" aria-label=\"Order navigation\">\n <TabNav.Item href=\"/orders/123/general\">General</TabNav.Item>\n </TabNav.Root>\n </NimbusProvider>\n );\n\n expect(screen.getByRole(\"navigation\")).toHaveAttribute(\n \"id\",\n \"order-tab-nav\"\n );\n });\n});\n```\n\n\n## Resources\n\n- [React Aria useLink](https://react-spectrum.adobe.com/react-aria/useLink.html)\n- [ARIA: navigation landmark](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/navigation_role)\n- [aria-current attribute](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current)\n- [Tabs](/components/navigation/tabs) — use when switching content panels on the same page\n",
227
+ "toc": [
228
+ {
229
+ "value": "Getting started",
230
+ "href": "#getting-started",
231
+ "depth": 2,
232
+ "numbering": [
233
+ 1,
234
+ 1
235
+ ],
236
+ "parent": "root"
237
+ },
238
+ {
239
+ "value": "Import",
240
+ "href": "#import",
241
+ "depth": 3,
242
+ "numbering": [
243
+ 1,
244
+ 1,
245
+ 1
246
+ ],
247
+ "parent": "root"
248
+ },
249
+ {
250
+ "value": "Basic usage",
251
+ "href": "#basic-usage",
252
+ "depth": 3,
253
+ "numbering": [
254
+ 1,
255
+ 1,
256
+ 2
257
+ ],
258
+ "parent": "root"
259
+ },
260
+ {
261
+ "value": "TabNav vs Tabs",
262
+ "href": "#tabnav-vs-tabs",
263
+ "depth": 2,
264
+ "numbering": [
265
+ 1,
266
+ 2
267
+ ],
268
+ "parent": "root"
269
+ },
270
+ {
271
+ "value": "Usage examples",
272
+ "href": "#usage-examples",
273
+ "depth": 2,
274
+ "numbering": [
275
+ 1,
276
+ 3
277
+ ],
278
+ "parent": "root"
279
+ },
280
+ {
281
+ "value": "Client-side view switching",
282
+ "href": "#client-side-view-switching",
283
+ "depth": 3,
284
+ "numbering": [
285
+ 1,
286
+ 3,
287
+ 1
288
+ ],
289
+ "parent": "root"
290
+ },
291
+ {
292
+ "value": "Active item",
293
+ "href": "#active-item",
294
+ "depth": 3,
295
+ "numbering": [
296
+ 1,
297
+ 3,
298
+ 2
299
+ ],
300
+ "parent": "root"
301
+ },
302
+ {
303
+ "value": "Size variants",
304
+ "href": "#size-variants",
305
+ "depth": 3,
306
+ "numbering": [
307
+ 1,
308
+ 3,
309
+ 3
310
+ ],
311
+ "parent": "root"
312
+ },
313
+ {
314
+ "value": "Disabled items",
315
+ "href": "#disabled-items",
316
+ "depth": 3,
317
+ "numbering": [
318
+ 1,
319
+ 3,
320
+ 4
321
+ ],
322
+ "parent": "root"
323
+ },
324
+ {
325
+ "value": "External links",
326
+ "href": "#external-links",
327
+ "depth": 3,
328
+ "numbering": [
329
+ 1,
330
+ 3,
331
+ 5
332
+ ],
333
+ "parent": "root"
334
+ },
335
+ {
336
+ "value": "With icons",
337
+ "href": "#with-icons",
338
+ "depth": 3,
339
+ "numbering": [
340
+ 1,
341
+ 3,
342
+ 6
343
+ ],
344
+ "parent": "root"
345
+ },
346
+ {
347
+ "value": "Component requirements",
348
+ "href": "#component-requirements",
349
+ "depth": 2,
350
+ "numbering": [
351
+ 1,
352
+ 4
353
+ ],
354
+ "parent": "root"
355
+ },
356
+ {
357
+ "value": "Accessibility",
358
+ "href": "#accessibility",
359
+ "depth": 3,
360
+ "numbering": [
361
+ 1,
362
+ 4,
363
+ 1
364
+ ],
365
+ "parent": "root"
366
+ },
367
+ {
368
+ "value": "Role",
369
+ "href": "#role",
370
+ "depth": 4,
371
+ "numbering": [
372
+ 1,
373
+ 4,
374
+ 1,
375
+ 1
376
+ ],
377
+ "parent": "root"
378
+ },
379
+ {
380
+ "value": "Labeling",
381
+ "href": "#labeling",
382
+ "depth": 4,
383
+ "numbering": [
384
+ 1,
385
+ 4,
386
+ 1,
387
+ 2
388
+ ],
389
+ "parent": "root"
390
+ },
391
+ {
392
+ "value": "Keyboard navigation",
393
+ "href": "#keyboard-navigation",
394
+ "depth": 4,
395
+ "numbering": [
396
+ 1,
397
+ 4,
398
+ 1,
399
+ 3
400
+ ],
401
+ "parent": "root"
402
+ },
403
+ {
404
+ "value": "Persistent ID",
405
+ "href": "#persistent-id",
406
+ "depth": 4,
407
+ "numbering": [
408
+ 1,
409
+ 4,
410
+ 1,
411
+ 4
412
+ ],
413
+ "parent": "root"
414
+ },
415
+ {
416
+ "value": "API reference",
417
+ "href": "#api-reference",
418
+ "depth": 2,
419
+ "numbering": [
420
+ 1,
421
+ 5
422
+ ],
423
+ "parent": "root"
424
+ },
425
+ {
426
+ "value": "Common patterns",
427
+ "href": "#common-patterns",
428
+ "depth": 2,
429
+ "numbering": [
430
+ 1,
431
+ 6
432
+ ],
433
+ "parent": "root"
434
+ },
435
+ {
436
+ "value": "Syncing active item with router",
437
+ "href": "#syncing-active-item-with-router",
438
+ "depth": 3,
439
+ "numbering": [
440
+ 1,
441
+ 6,
442
+ 1
443
+ ],
444
+ "parent": "root"
445
+ },
446
+ {
447
+ "value": "Conditionally disabling items",
448
+ "href": "#conditionally-disabling-items",
449
+ "depth": 3,
450
+ "numbering": [
451
+ 1,
452
+ 6,
453
+ 2
454
+ ],
455
+ "parent": "root"
456
+ },
457
+ {
458
+ "value": "Testing your implementation",
459
+ "href": "#testing-your-implementation",
460
+ "depth": 2,
461
+ "numbering": [
462
+ 1,
463
+ 7
464
+ ],
465
+ "parent": "root"
466
+ },
467
+ {
468
+ "value": "Basic Rendering Tests",
469
+ "href": "#basic-rendering-tests",
470
+ "depth": 3,
471
+ "numbering": [
472
+ 1,
473
+ 7,
474
+ 1
475
+ ],
476
+ "parent": "root"
477
+ },
478
+ {
479
+ "value": "Active Item Tests",
480
+ "href": "#active-item-tests",
481
+ "depth": 3,
482
+ "numbering": [
483
+ 1,
484
+ 7,
485
+ 2
486
+ ],
487
+ "parent": "root"
488
+ },
489
+ {
490
+ "value": "Disabled Item Tests",
491
+ "href": "#disabled-item-tests",
492
+ "depth": 3,
493
+ "numbering": [
494
+ 1,
495
+ 7,
496
+ 3
497
+ ],
498
+ "parent": "root"
499
+ },
500
+ {
501
+ "value": "External Link Tests",
502
+ "href": "#external-link-tests",
503
+ "depth": 3,
504
+ "numbering": [
505
+ 1,
506
+ 7,
507
+ 4
508
+ ],
509
+ "parent": "root"
510
+ },
511
+ {
512
+ "value": "Interaction Tests",
513
+ "href": "#interaction-tests",
514
+ "depth": 3,
515
+ "numbering": [
516
+ 1,
517
+ 7,
518
+ 5
519
+ ],
520
+ "parent": "root"
521
+ },
522
+ {
523
+ "value": "Accessibility Tests",
524
+ "href": "#accessibility-tests",
525
+ "depth": 3,
526
+ "numbering": [
527
+ 1,
528
+ 7,
529
+ 6
530
+ ],
531
+ "parent": "root"
532
+ },
533
+ {
534
+ "value": "Resources",
535
+ "href": "#resources",
536
+ "depth": 2,
537
+ "numbering": [
538
+ 1,
539
+ 8
540
+ ],
541
+ "parent": "root"
542
+ }
543
+ ]
544
+ }
545
+ }
546
+ }