@commercetools/nimbus-mcp 0.1.0 → 2.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (450) hide show
  1. package/README.md +63 -14
  2. package/data/docs/route-manifest.json +10913 -0
  3. package/data/docs/routes/components-accessibility-visually-hidden.json +388 -0
  4. package/data/docs/routes/components-accessibility.json +34 -0
  5. package/data/docs/routes/components-buttons-button.json +715 -0
  6. package/data/docs/routes/components-buttons-icon-button.json +852 -0
  7. package/data/docs/routes/components-buttons-icon-toggle-button.json +594 -0
  8. package/data/docs/routes/components-buttons-split-button.json +670 -0
  9. package/data/docs/routes/components-buttons-toggle-button-group.json +722 -0
  10. package/data/docs/routes/components-buttons-toggle-button.json +689 -0
  11. package/data/docs/routes/components-buttons.json +36 -0
  12. package/data/docs/routes/components-data-display-badge.json +555 -0
  13. package/data/docs/routes/components-data-display-card.json +338 -0
  14. package/data/docs/routes/components-data-display-data-table.json +855 -0
  15. package/data/docs/routes/components-data-display-draggable-list.json +596 -0
  16. package/data/docs/routes/components-data-display-table.json +472 -0
  17. package/data/docs/routes/components-data-display-tag-group.json +535 -0
  18. package/data/docs/routes/components-data-display.json +34 -0
  19. package/data/docs/routes/components-feedback-alert.json +696 -0
  20. package/data/docs/routes/components-feedback-dialog.json +682 -0
  21. package/data/docs/routes/components-feedback-drawer.json +600 -0
  22. package/data/docs/routes/components-feedback-loading-spinner.json +415 -0
  23. package/data/docs/routes/components-feedback-progress-bar.json +661 -0
  24. package/data/docs/routes/components-feedback-toast.json +1040 -0
  25. package/data/docs/routes/components-feedback-tooltip.json +510 -0
  26. package/data/docs/routes/components-feedback.json +34 -0
  27. package/data/docs/routes/components-forms-field-errors.json +557 -0
  28. package/data/docs/routes/components-forms-form-field.json +848 -0
  29. package/data/docs/routes/components-forms-group.json +427 -0
  30. package/data/docs/routes/components-forms-localized-field.json +770 -0
  31. package/data/docs/routes/components-forms.json +37 -0
  32. package/data/docs/routes/components-inputs-calendar.json +611 -0
  33. package/data/docs/routes/components-inputs-checkbox.json +774 -0
  34. package/data/docs/routes/components-inputs-combo-box.json +761 -0
  35. package/data/docs/routes/components-inputs-date-input.json +628 -0
  36. package/data/docs/routes/components-inputs-date-picker.json +709 -0
  37. package/data/docs/routes/components-inputs-date-range-picker.json +599 -0
  38. package/data/docs/routes/components-inputs-money-input.json +721 -0
  39. package/data/docs/routes/components-inputs-multiline-text-input.json +611 -0
  40. package/data/docs/routes/components-inputs-number-input.json +647 -0
  41. package/data/docs/routes/components-inputs-password-input.json +576 -0
  42. package/data/docs/routes/components-inputs-radio-input.json +583 -0
  43. package/data/docs/routes/components-inputs-range-calendar.json +607 -0
  44. package/data/docs/routes/components-inputs-rich-text-input.json +599 -0
  45. package/data/docs/routes/components-inputs-scoped-search-input.json +570 -0
  46. package/data/docs/routes/components-inputs-search-input.json +588 -0
  47. package/data/docs/routes/components-inputs-select-input.json +960 -0
  48. package/data/docs/routes/components-inputs-switch.json +720 -0
  49. package/data/docs/routes/components-inputs-text-input.json +566 -0
  50. package/data/docs/routes/components-inputs-time-input.json +775 -0
  51. package/data/docs/routes/components-inputs.json +34 -0
  52. package/data/docs/routes/components-layout-box.json +501 -0
  53. package/data/docs/routes/components-layout-defaultpage.json +748 -0
  54. package/data/docs/routes/components-layout-flex.json +587 -0
  55. package/data/docs/routes/components-layout-grid.json +393 -0
  56. package/data/docs/routes/components-layout-modalpage.json +716 -0
  57. package/data/docs/routes/components-layout-pagecontent.json +673 -0
  58. package/data/docs/routes/components-layout-separator.json +461 -0
  59. package/data/docs/routes/components-layout-simple-grid.json +519 -0
  60. package/data/docs/routes/components-layout-spacer.json +573 -0
  61. package/data/docs/routes/components-layout-stack.json +481 -0
  62. package/data/docs/routes/components-layout.json +34 -0
  63. package/data/docs/routes/components-media-avatar.json +427 -0
  64. package/data/docs/routes/components-media-icon.json +663 -0
  65. package/data/docs/routes/components-media-image.json +511 -0
  66. package/data/docs/routes/components-media-inline-svg.json +586 -0
  67. package/data/docs/routes/components-media.json +34 -0
  68. package/data/docs/routes/components-navigation-accordion.json +643 -0
  69. package/data/docs/routes/components-navigation-collapsible-motion.json +628 -0
  70. package/data/docs/routes/components-navigation-link.json +554 -0
  71. package/data/docs/routes/components-navigation-menu.json +546 -0
  72. package/data/docs/routes/components-navigation-pagination.json +502 -0
  73. package/data/docs/routes/components-navigation-steps.json +629 -0
  74. package/data/docs/routes/components-navigation-tabnav.json +546 -0
  75. package/data/docs/routes/components-navigation-tabs.json +635 -0
  76. package/data/docs/routes/components-navigation-toolbar.json +549 -0
  77. package/data/docs/routes/components-navigation.json +34 -0
  78. package/data/docs/routes/components-typography-code.json +39 -0
  79. package/data/docs/routes/components-typography-heading.json +402 -0
  80. package/data/docs/routes/components-typography-kbd.json +399 -0
  81. package/data/docs/routes/components-typography-list.json +593 -0
  82. package/data/docs/routes/components-typography-text.json +444 -0
  83. package/data/docs/routes/components-typography.json +34 -0
  84. package/data/docs/routes/components-utilities-nimbus-i18n-provider.json +295 -0
  85. package/data/docs/routes/components-utilities-nimbus-provider.json +663 -0
  86. package/data/docs/routes/components-utilities.json +34 -0
  87. package/data/docs/routes/components.json +33 -0
  88. package/data/docs/routes/home-contribute-adrs-adr0001-consumer-component-apis.json +314 -0
  89. package/data/docs/routes/home-contribute-adrs-adr0002-compound-component-extraction.json +160 -0
  90. package/data/docs/routes/home-contribute-adrs-adr0003-component-lifecycle-states.json +460 -0
  91. package/data/docs/routes/home-contribute-adrs.json +205 -0
  92. package/data/docs/routes/home-contribute-development-setup.json +213 -0
  93. package/data/docs/routes/home-contribute-stats.json +36 -0
  94. package/data/docs/routes/home-contribute.json +36 -0
  95. package/data/docs/routes/home-design-tokens-aspect-ratios.json +36 -0
  96. package/data/docs/routes/home-design-tokens-borders.json +35 -0
  97. package/data/docs/routes/home-design-tokens-colors.json +157 -0
  98. package/data/docs/routes/home-design-tokens-other-animations.json +119 -0
  99. package/data/docs/routes/home-design-tokens-other-blurs.json +36 -0
  100. package/data/docs/routes/home-design-tokens-other-breakpoints.json +61 -0
  101. package/data/docs/routes/home-design-tokens-other-cursors.json +36 -0
  102. package/data/docs/routes/home-design-tokens-other-z-indices.json +39 -0
  103. package/data/docs/routes/home-design-tokens-other.json +35 -0
  104. package/data/docs/routes/home-design-tokens-radii.json +59 -0
  105. package/data/docs/routes/home-design-tokens-shadows.json +57 -0
  106. package/data/docs/routes/home-design-tokens-sizes.json +137 -0
  107. package/data/docs/routes/home-design-tokens-spacing.json +36 -0
  108. package/data/docs/routes/home-design-tokens-typography.json +184 -0
  109. package/data/docs/routes/home-design-tokens.json +34 -0
  110. package/data/docs/routes/home-getting-started-core-concepts.json +301 -0
  111. package/data/docs/routes/home-getting-started-installation.json +621 -0
  112. package/data/docs/routes/home-getting-started-mcp-server-overview.json +139 -0
  113. package/data/docs/routes/home-getting-started-mcp-server-setup.json +316 -0
  114. package/data/docs/routes/home-getting-started-release-process.json +294 -0
  115. package/data/docs/routes/home-getting-started-testing-setup.json +296 -0
  116. package/data/docs/routes/home-playground-markdown.json +638 -0
  117. package/data/docs/routes/home-playground-toc.json +169 -0
  118. package/data/docs/routes/home-playground.json +34 -0
  119. package/data/docs/routes/home-style-props-background.json +236 -0
  120. package/data/docs/routes/home-style-props-border.json +310 -0
  121. package/data/docs/routes/home-style-props-display.json +120 -0
  122. package/data/docs/routes/home-style-props-effects.json +116 -0
  123. package/data/docs/routes/home-style-props-filters.json +396 -0
  124. package/data/docs/routes/home-style-props-flex-and-grid.json +496 -0
  125. package/data/docs/routes/home-style-props-interactivity.json +356 -0
  126. package/data/docs/routes/home-style-props-layout.json +422 -0
  127. package/data/docs/routes/home-style-props-list.json +116 -0
  128. package/data/docs/routes/home-style-props-sizing.json +244 -0
  129. package/data/docs/routes/home-style-props-spacing.json +228 -0
  130. package/data/docs/routes/home-style-props-svg.json +96 -0
  131. package/data/docs/routes/home-style-props-tables.json +116 -0
  132. package/data/docs/routes/home-style-props-transforms.json +216 -0
  133. package/data/docs/routes/home-style-props-transitions.json +216 -0
  134. package/data/docs/routes/home-style-props-typography.json +536 -0
  135. package/data/docs/routes/home-style-props.json +33 -0
  136. package/data/docs/routes/home.json +32 -0
  137. package/data/docs/routes/hooks-usecopytoclipboard.json +76 -0
  138. package/data/docs/routes/hooks-usehotkeys.json +117 -0
  139. package/data/docs/routes/hooks.json +33 -0
  140. package/data/docs/routes/icons.json +32 -0
  141. package/data/docs/routes/patterns-fields-date-range-picker-field.json +393 -0
  142. package/data/docs/routes/patterns-fields-money-input-field.json +415 -0
  143. package/data/docs/routes/patterns-fields-multiline-text-input-field.json +404 -0
  144. package/data/docs/routes/patterns-fields-number-input-field.json +470 -0
  145. package/data/docs/routes/patterns-fields-password-input-field.json +319 -0
  146. package/data/docs/routes/patterns-fields-search-input-field.json +382 -0
  147. package/data/docs/routes/patterns-fields-text-input-field.json +404 -0
  148. package/data/docs/routes/patterns-fields.json +78 -0
  149. package/data/docs/routes/patterns.json +34 -0
  150. package/data/docs/search-index.json +1 -0
  151. package/data/docs/types/Accordion.json +12 -0
  152. package/data/docs/types/AccordionContent.json +286 -0
  153. package/data/docs/types/AccordionHeader.json +891 -0
  154. package/data/docs/types/AccordionHeaderRightContent.json +27 -0
  155. package/data/docs/types/AccordionItem.json +242 -0
  156. package/data/docs/types/AccordionRoot.json +162 -0
  157. package/data/docs/types/Alert.json +12 -0
  158. package/data/docs/types/AlertActions.json +11 -0
  159. package/data/docs/types/AlertDescription.json +118 -0
  160. package/data/docs/types/AlertDismissButton.json +937 -0
  161. package/data/docs/types/AlertRoot.json +42 -0
  162. package/data/docs/types/AlertTitle.json +118 -0
  163. package/data/docs/types/Avatar.json +125 -0
  164. package/data/docs/types/Badge.json +64 -0
  165. package/data/docs/types/Body.json +67 -0
  166. package/data/docs/types/Box.json +85 -0
  167. package/data/docs/types/Button.json +1015 -0
  168. package/data/docs/types/Calendar.json +565 -0
  169. package/data/docs/types/Caption.json +67 -0
  170. package/data/docs/types/Card.json +12 -0
  171. package/data/docs/types/CardContent.json +27 -0
  172. package/data/docs/types/CardHeader.json +27 -0
  173. package/data/docs/types/CardRoot.json +106 -0
  174. package/data/docs/types/Cell.json +227 -0
  175. package/data/docs/types/Checkbox.json +897 -0
  176. package/data/docs/types/Code.json +112 -0
  177. package/data/docs/types/CollapsibleMotionContent.json +35 -0
  178. package/data/docs/types/CollapsibleMotionRoot.json +99 -0
  179. package/data/docs/types/CollapsibleMotionTrigger.json +71 -0
  180. package/data/docs/types/Column.json +101 -0
  181. package/data/docs/types/ColumnGroup.json +101 -0
  182. package/data/docs/types/ColumnHeader.json +193 -0
  183. package/data/docs/types/ComboBoxListBox.json +751 -0
  184. package/data/docs/types/ComboBoxOption.json +672 -0
  185. package/data/docs/types/ComboBoxPopover.json +786 -0
  186. package/data/docs/types/ComboBoxRoot.json +747 -0
  187. package/data/docs/types/ComboBoxSection.json +277 -0
  188. package/data/docs/types/ComboBoxTrigger.json +70 -0
  189. package/data/docs/types/Content.json +33 -0
  190. package/data/docs/types/DataTable.json +596 -0
  191. package/data/docs/types/DataTableBody.json +223 -0
  192. package/data/docs/types/DataTableFooter.json +27 -0
  193. package/data/docs/types/DataTableHeader.json +269 -0
  194. package/data/docs/types/DataTableManager.json +11 -0
  195. package/data/docs/types/DataTableRoot.json +590 -0
  196. package/data/docs/types/DataTableTable.json +271 -0
  197. package/data/docs/types/DateInput.json +792 -0
  198. package/data/docs/types/DatePicker.json +700 -0
  199. package/data/docs/types/DateRangePicker.json +936 -0
  200. package/data/docs/types/DateRangePickerField.json +1047 -0
  201. package/data/docs/types/DefaultPage.json +12 -0
  202. package/data/docs/types/DefaultPageActions.json +27 -0
  203. package/data/docs/types/DefaultPageBackLink.json +213 -0
  204. package/data/docs/types/DefaultPageContent.json +27 -0
  205. package/data/docs/types/DefaultPageFooter.json +27 -0
  206. package/data/docs/types/DefaultPageHeader.json +27 -0
  207. package/data/docs/types/DefaultPageRoot.json +106 -0
  208. package/data/docs/types/DefaultPageSubtitle.json +27 -0
  209. package/data/docs/types/DefaultPageTabNav.json +28 -0
  210. package/data/docs/types/DefaultPageTitle.json +27 -0
  211. package/data/docs/types/DialogBody.json +27 -0
  212. package/data/docs/types/DialogCloseTrigger.json +939 -0
  213. package/data/docs/types/DialogContent.json +27 -0
  214. package/data/docs/types/DialogFooter.json +27 -0
  215. package/data/docs/types/DialogHeader.json +27 -0
  216. package/data/docs/types/DialogRoot.json +138 -0
  217. package/data/docs/types/DialogTitle.json +27 -0
  218. package/data/docs/types/DialogTrigger.json +80 -0
  219. package/data/docs/types/DraggableList.json +12 -0
  220. package/data/docs/types/DraggableListField.json +894 -0
  221. package/data/docs/types/DraggableListItem.json +574 -0
  222. package/data/docs/types/DraggableListRoot.json +745 -0
  223. package/data/docs/types/Drawer.json +12 -0
  224. package/data/docs/types/DrawerBody.json +27 -0
  225. package/data/docs/types/DrawerCloseTrigger.json +939 -0
  226. package/data/docs/types/DrawerContent.json +27 -0
  227. package/data/docs/types/DrawerFooter.json +27 -0
  228. package/data/docs/types/DrawerHeader.json +27 -0
  229. package/data/docs/types/DrawerRoot.json +142 -0
  230. package/data/docs/types/DrawerTitle.json +27 -0
  231. package/data/docs/types/DrawerTrigger.json +80 -0
  232. package/data/docs/types/FieldErrors.getBuiltInMessage.json +11 -0
  233. package/data/docs/types/FieldErrors.getCustomMessage.json +9 -0
  234. package/data/docs/types/FieldErrors.json +109 -0
  235. package/data/docs/types/Flex.json +238 -0
  236. package/data/docs/types/Footer.json +67 -0
  237. package/data/docs/types/FormFieldDescription.json +11 -0
  238. package/data/docs/types/FormFieldError.json +11 -0
  239. package/data/docs/types/FormFieldInfoBox.json +27 -0
  240. package/data/docs/types/FormFieldInput.json +11 -0
  241. package/data/docs/types/FormFieldLabel.json +11 -0
  242. package/data/docs/types/FormFieldRoot.json +148 -0
  243. package/data/docs/types/Grid.json +253 -0
  244. package/data/docs/types/GridProps.json +11 -0
  245. package/data/docs/types/Group.json +143 -0
  246. package/data/docs/types/Header.json +67 -0
  247. package/data/docs/types/Heading.json +109 -0
  248. package/data/docs/types/Icon.json +112 -0
  249. package/data/docs/types/IconButton.json +1019 -0
  250. package/data/docs/types/IconToggleButton.json +787 -0
  251. package/data/docs/types/Image.json +373 -0
  252. package/data/docs/types/Indicator.json +67 -0
  253. package/data/docs/types/InlineSvg.json +98 -0
  254. package/data/docs/types/Item.json +67 -0
  255. package/data/docs/types/Kbd.json +118 -0
  256. package/data/docs/types/Link.json +380 -0
  257. package/data/docs/types/List.json +12 -0
  258. package/data/docs/types/ListIndicator.json +70 -0
  259. package/data/docs/types/ListItem.json +70 -0
  260. package/data/docs/types/ListRoot.json +124 -0
  261. package/data/docs/types/LoadingSpinner.json +87 -0
  262. package/data/docs/types/LocalizedField.json +460 -0
  263. package/data/docs/types/LocalizedStringFormatter.json +9 -0
  264. package/data/docs/types/MakeElementFocusable.json +196 -0
  265. package/data/docs/types/MenuContent.json +111 -0
  266. package/data/docs/types/MenuItem.json +671 -0
  267. package/data/docs/types/MenuRoot.json +670 -0
  268. package/data/docs/types/MenuSection.json +364 -0
  269. package/data/docs/types/MenuSubmenu.json +111 -0
  270. package/data/docs/types/MenuSubmenuTrigger.json +67 -0
  271. package/data/docs/types/MenuTrigger.json +906 -0
  272. package/data/docs/types/ModalPage.json +12 -0
  273. package/data/docs/types/ModalPageActions.json +27 -0
  274. package/data/docs/types/ModalPageContent.json +27 -0
  275. package/data/docs/types/ModalPageFooter.json +27 -0
  276. package/data/docs/types/ModalPageHeader.json +27 -0
  277. package/data/docs/types/ModalPageRoot.json +87 -0
  278. package/data/docs/types/ModalPageSubtitle.json +27 -0
  279. package/data/docs/types/ModalPageTabNav.json +28 -0
  280. package/data/docs/types/ModalPageTitle.json +27 -0
  281. package/data/docs/types/ModalPageTopBar.json +57 -0
  282. package/data/docs/types/MoneyInput.isEmpty.json +40 -0
  283. package/data/docs/types/MoneyInput.json +282 -0
  284. package/data/docs/types/MoneyInputField.json +379 -0
  285. package/data/docs/types/MoneyInputFieldProps.json +9 -0
  286. package/data/docs/types/MultilineTextInput.json +1194 -0
  287. package/data/docs/types/MultilineTextInputField.json +1269 -0
  288. package/data/docs/types/MultilineTextInputFieldProps.json +9 -0
  289. package/data/docs/types/NimbusI18nProvider.json +42 -0
  290. package/data/docs/types/NimbusI18nProviderProps.json +9 -0
  291. package/data/docs/types/NimbusProvider.json +270 -0
  292. package/data/docs/types/NumberInput.json +952 -0
  293. package/data/docs/types/NumberInputField.json +1004 -0
  294. package/data/docs/types/NumberInputFieldProps.json +9 -0
  295. package/data/docs/types/PageContent.json +11 -0
  296. package/data/docs/types/PageContentColumn.json +99 -0
  297. package/data/docs/types/PageContentRoot.json +114 -0
  298. package/data/docs/types/Pagination.json +159 -0
  299. package/data/docs/types/PasswordInput.json +1120 -0
  300. package/data/docs/types/PasswordInputField.json +1216 -0
  301. package/data/docs/types/PasswordInputFieldProps.json +9 -0
  302. package/data/docs/types/ProgressBar.json +280 -0
  303. package/data/docs/types/RadioInputOption.json +550 -0
  304. package/data/docs/types/RadioInputRoot.json +514 -0
  305. package/data/docs/types/RangeCalendar.json +618 -0
  306. package/data/docs/types/RichTextInput.json +134 -0
  307. package/data/docs/types/Root.json +122 -0
  308. package/data/docs/types/Row.json +67 -0
  309. package/data/docs/types/ScopedSearchInput.isEmpty.json +40 -0
  310. package/data/docs/types/ScopedSearchInput.json +253 -0
  311. package/data/docs/types/ScrollArea.json +82 -0
  312. package/data/docs/types/SearchInput.json +1165 -0
  313. package/data/docs/types/SearchInputField.json +1240 -0
  314. package/data/docs/types/Select.json +12 -0
  315. package/data/docs/types/SelectOption.json +572 -0
  316. package/data/docs/types/SelectOptionGroup.json +215 -0
  317. package/data/docs/types/SelectOptions.json +693 -0
  318. package/data/docs/types/SelectRoot.json +926 -0
  319. package/data/docs/types/Separator.json +65 -0
  320. package/data/docs/types/SimpleGrid.json +291 -0
  321. package/data/docs/types/Spacer.json +27 -0
  322. package/data/docs/types/SpacerProps.json +9 -0
  323. package/data/docs/types/SplitButton.json +203 -0
  324. package/data/docs/types/Stack.json +144 -0
  325. package/data/docs/types/Steps.json +12 -0
  326. package/data/docs/types/StepsChangeDetails.json +9 -0
  327. package/data/docs/types/StepsCompletedContent.json +28 -0
  328. package/data/docs/types/StepsCompletedContentProps.json +9 -0
  329. package/data/docs/types/StepsContent.json +43 -0
  330. package/data/docs/types/StepsContentProps.json +9 -0
  331. package/data/docs/types/StepsDescription.json +28 -0
  332. package/data/docs/types/StepsDescriptionProps.json +9 -0
  333. package/data/docs/types/StepsIndicator.json +28 -0
  334. package/data/docs/types/StepsIndicatorProps.json +9 -0
  335. package/data/docs/types/StepsItem.json +43 -0
  336. package/data/docs/types/StepsItemProps.json +9 -0
  337. package/data/docs/types/StepsList.json +28 -0
  338. package/data/docs/types/StepsListProps.json +9 -0
  339. package/data/docs/types/StepsNextTrigger.json +62 -0
  340. package/data/docs/types/StepsNextTriggerProps.json +9 -0
  341. package/data/docs/types/StepsNumber.json +28 -0
  342. package/data/docs/types/StepsNumberProps.json +9 -0
  343. package/data/docs/types/StepsPrevTrigger.json +62 -0
  344. package/data/docs/types/StepsPrevTriggerProps.json +9 -0
  345. package/data/docs/types/StepsRoot.json +183 -0
  346. package/data/docs/types/StepsRootProps.json +11 -0
  347. package/data/docs/types/StepsSeparator.json +28 -0
  348. package/data/docs/types/StepsSeparatorProps.json +9 -0
  349. package/data/docs/types/StepsStatus.json +57 -0
  350. package/data/docs/types/StepsStatusProps.json +9 -0
  351. package/data/docs/types/StepsTitle.json +28 -0
  352. package/data/docs/types/StepsTitleProps.json +9 -0
  353. package/data/docs/types/StepsTrigger.json +47 -0
  354. package/data/docs/types/StepsTriggerProps.json +9 -0
  355. package/data/docs/types/Switch.json +371 -0
  356. package/data/docs/types/TabListProps.json +9 -0
  357. package/data/docs/types/TabNav.json +12 -0
  358. package/data/docs/types/TabNavItem.json +300 -0
  359. package/data/docs/types/TabNavItemProps.json +9 -0
  360. package/data/docs/types/TabNavProps.json +9 -0
  361. package/data/docs/types/TabNavRoot.json +80 -0
  362. package/data/docs/types/TabPanelProps.json +9 -0
  363. package/data/docs/types/TabPanelsProps.json +9 -0
  364. package/data/docs/types/TabProps.json +9 -0
  365. package/data/docs/types/Table.json +9 -0
  366. package/data/docs/types/TableBody.json +67 -0
  367. package/data/docs/types/TableBodyProps.json +9 -0
  368. package/data/docs/types/TableCaption.json +67 -0
  369. package/data/docs/types/TableCaptionProps.json +9 -0
  370. package/data/docs/types/TableCell.json +227 -0
  371. package/data/docs/types/TableCellProps.json +9 -0
  372. package/data/docs/types/TableColumn.json +101 -0
  373. package/data/docs/types/TableColumnGroup.json +101 -0
  374. package/data/docs/types/TableColumnGroupProps.json +9 -0
  375. package/data/docs/types/TableColumnHeader.json +193 -0
  376. package/data/docs/types/TableColumnHeaderProps.json +9 -0
  377. package/data/docs/types/TableColumnProps.json +9 -0
  378. package/data/docs/types/TableFooter.json +67 -0
  379. package/data/docs/types/TableFooterProps.json +9 -0
  380. package/data/docs/types/TableHeader.json +67 -0
  381. package/data/docs/types/TableHeaderProps.json +9 -0
  382. package/data/docs/types/TableRoot.json +365 -0
  383. package/data/docs/types/TableRootProps.json +12 -0
  384. package/data/docs/types/TableRow.json +67 -0
  385. package/data/docs/types/TableRowProps.json +9 -0
  386. package/data/docs/types/TableScrollArea.json +82 -0
  387. package/data/docs/types/TableScrollAreaProps.json +9 -0
  388. package/data/docs/types/Tabs.json +12 -0
  389. package/data/docs/types/TabsList.json +110 -0
  390. package/data/docs/types/TabsPanel.json +112 -0
  391. package/data/docs/types/TabsPanels.json +108 -0
  392. package/data/docs/types/TabsRoot.json +211 -0
  393. package/data/docs/types/TabsTab.json +174 -0
  394. package/data/docs/types/TagGroup.json +12 -0
  395. package/data/docs/types/TagGroupRoot.json +306 -0
  396. package/data/docs/types/TagGroupTag.json +595 -0
  397. package/data/docs/types/TagGroupTagList.json +166 -0
  398. package/data/docs/types/Text.json +119 -0
  399. package/data/docs/types/TextInput.json +1156 -0
  400. package/data/docs/types/TextInputField.json +1263 -0
  401. package/data/docs/types/TimeInput.json +752 -0
  402. package/data/docs/types/ToastAction.json +9 -0
  403. package/data/docs/types/ToastManagerApi.json +9 -0
  404. package/data/docs/types/ToastOptions.json +9 -0
  405. package/data/docs/types/ToastOutlet.json +12 -0
  406. package/data/docs/types/ToastPlacement.json +9 -0
  407. package/data/docs/types/ToastPromiseOptions.json +9 -0
  408. package/data/docs/types/ToastType.json +9 -0
  409. package/data/docs/types/ToastVariant.json +9 -0
  410. package/data/docs/types/ToggleButton.json +789 -0
  411. package/data/docs/types/ToggleButtonGroup.json +9 -0
  412. package/data/docs/types/ToggleButtonGroupButton.json +331 -0
  413. package/data/docs/types/ToggleButtonGroupRoot.json +269 -0
  414. package/data/docs/types/Toolbar.json +176 -0
  415. package/data/docs/types/Tooltip.json +12 -0
  416. package/data/docs/types/TooltipContent.json +372 -0
  417. package/data/docs/types/TooltipRoot.json +179 -0
  418. package/data/docs/types/Trigger.json +69 -0
  419. package/data/docs/types/VisuallyHidden.json +93 -0
  420. package/data/docs/types/__object.json +12 -0
  421. package/data/docs/types/filters.json +11 -0
  422. package/data/docs/types/manifest.json +278 -0
  423. package/data/docs/types/toast.json +234 -0
  424. package/data/docs/types/useColorMode.json +13 -0
  425. package/data/docs/types/useColorModeValue.json +13 -0
  426. package/data/docs/types/useColorScheme.json +12 -0
  427. package/data/docs/types/useLocalizedStringFormatter.json +14 -0
  428. package/data/icons.json +21940 -0
  429. package/data/tokens.json +40061 -0
  430. package/dist/index.js +2516 -17
  431. package/package.json +25 -6
  432. package/dist/data-loader.d.ts +0 -102
  433. package/dist/data-loader.js +0 -104
  434. package/dist/index.d.ts +0 -13
  435. package/dist/server.d.ts +0 -9
  436. package/dist/server.js +0 -22
  437. package/dist/server.spec.d.ts +0 -1
  438. package/dist/server.spec.js +0 -69
  439. package/dist/tools/list-components.d.ts +0 -9
  440. package/dist/tools/list-components.js +0 -42
  441. package/dist/types.d.ts +0 -28
  442. package/dist/types.js +0 -4
  443. package/src/data-loader.ts +0 -226
  444. package/src/index.ts +0 -29
  445. package/src/server.spec.ts +0 -86
  446. package/src/server.ts +0 -28
  447. package/src/tools/list-components.ts +0 -49
  448. package/src/types.ts +0 -31
  449. package/tsconfig.json +0 -14
  450. package/vitest.config.ts +0 -9
@@ -0,0 +1,472 @@
1
+ {
2
+ "meta": {
3
+ "id": "Components-Table",
4
+ "title": "Table",
5
+ "exportName": "Table",
6
+ "description": "The Table component provides a straightforward way to display static, read-only data in a tabular format. It uses semantic HTML table elements and is designed for simple data presentation without interactive features like sorting, filtering, or selection.",
7
+ "lifecycleState": "Stable",
8
+ "order": 999,
9
+ "repoPath": "packages/nimbus/src/components/table/table.mdx",
10
+ "menu": [
11
+ "Components",
12
+ "Data Display",
13
+ "Table"
14
+ ],
15
+ "route": "components/data-display/table",
16
+ "tags": [
17
+ "component",
18
+ "table",
19
+ "tabular data",
20
+ "static",
21
+ "read-only"
22
+ ],
23
+ "toc": [],
24
+ "layout": "app-frame",
25
+ "tabs": [
26
+ {
27
+ "key": "overview",
28
+ "title": "Overview",
29
+ "order": 0
30
+ },
31
+ {
32
+ "key": "guidelines",
33
+ "title": "Guidelines",
34
+ "order": 2
35
+ },
36
+ {
37
+ "key": "dev",
38
+ "title": "Implementation",
39
+ "order": 3
40
+ },
41
+ {
42
+ "key": "a11y",
43
+ "title": "Accessibility",
44
+ "order": 4
45
+ }
46
+ ]
47
+ },
48
+ "mdx": "\n**Related components**\n\n- **[DataTable Component](/components/data-display/data-table)** - Upgrade to DataTable when you need sorting, filtering, selection, pagination, or other interactive features for complex data management\nThe DataTable component is built for complex, interactive data management. If you only need to display static content, Table is the simpler, lighter choice.\n",
49
+ "views": {
50
+ "overview": {
51
+ "mdx": "\n**Related components**\n\n- **[DataTable Component](/components/data-display/data-table)** - Upgrade to DataTable when you need sorting, filtering, selection, pagination, or other interactive features for complex data management\nThe DataTable component is built for complex, interactive data management. If you only need to display static content, Table is the simpler, lighter choice.\n",
52
+ "toc": []
53
+ },
54
+ "a11y": {
55
+ "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 const products = [\n { id: '1', name: 'Laptop Pro', category: 'Electronics', price: '$1,299', stock: 'In Stock' },\n { id: '2', name: 'Wireless Mouse', category: 'Accessories', price: '$29', stock: 'Low Stock' },\n { id: '3', name: 'USB-C Cable', category: 'Accessories', price: '$15', stock: 'In Stock' },\n ];\n\n return (\n <Table.Root>\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader>Product</Table.ColumnHeader>\n <Table.ColumnHeader>Category</Table.ColumnHeader>\n <Table.ColumnHeader>Price</Table.ColumnHeader>\n <Table.ColumnHeader>Status</Table.ColumnHeader>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {products.map((product) => (\n <Table.Row key={product.id}>\n <Table.Cell>{product.name}</Table.Cell>\n <Table.Cell>{product.category}</Table.Cell>\n <Table.Cell>{product.price}</Table.Cell>\n <Table.Cell>{product.stock}</Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Root>\n );\n}\n```\n\n### Accessibility standards\n\n- **Provide a caption or aria-label:** Use `<caption>` or `aria-label` to\n provide a descriptive name for the table.\n- **Use proper table structure:** Use `<thead>`, `<tbody>`, `<tfoot>`, `<th>`,\n and `<td>` elements to create semantic table structure.\n- **Scope attributes:** Use `scope=\"col\"` on column headers and `scope=\"row\"` on\n row headers to establish relationships.\n- **Column and row headers:** Ensure all data cells have associated headers\n using `<th>` elements or `headers` attribute for complex tables.\n- **Sufficient contrast:** Ensure text meets minimum contrast requirements\n against backgrounds.\n- **Avoid empty cells:** If a cell must be empty, consider using a placeholder\n or explanatory text for screen reader users.\n- **Responsive tables:** Ensure tables remain accessible on mobile devices,\n consider alternative representations for small screens.\n- **Caption placement:** Place `<caption>` as the first child of `<table>`\n element.\n\n### Resources\n\n- [W3C Tables Tutorial](https://www.w3.org/WAI/tutorials/tables/)\n- [WCAG 1.3.1 Info and Relationships](https://www.w3.org/WAI/WCAG21/Understanding/info-and-relationships.html)\n- [W3C ARIA Authoring Practices Guide (APG) - Table](https://www.w3.org/WAI/ARIA/apg/patterns/table/)\n",
56
+ "toc": [
57
+ {
58
+ "value": "Accessibility",
59
+ "href": "#accessibility",
60
+ "depth": 2,
61
+ "numbering": [
62
+ 1,
63
+ 1
64
+ ],
65
+ "parent": "root"
66
+ },
67
+ {
68
+ "value": "Accessibility standards",
69
+ "href": "#accessibility-standards",
70
+ "depth": 3,
71
+ "numbering": [
72
+ 1,
73
+ 1,
74
+ 1
75
+ ],
76
+ "parent": "root"
77
+ },
78
+ {
79
+ "value": "Resources",
80
+ "href": "#resources",
81
+ "depth": 3,
82
+ "numbering": [
83
+ 1,
84
+ 1,
85
+ 2
86
+ ],
87
+ "parent": "root"
88
+ }
89
+ ]
90
+ },
91
+ "dev": {
92
+ "mdx": "\n## Getting started\n\n### Import\n\n```tsx\nimport { Table, type TableRootProps } from '@commercetools/nimbus';\n```\n\n### Basic usage\n\nThe Table component is a compound component that renders semantic HTML table markup with accessible structure. Use `Table.Root` as the container with nested parts for headers, body, rows, and cells:\n\n```jsx live-dev\nconst App = () => {\n const products = [\n { id: '1', name: 'Laptop Pro', category: 'Electronics', price: '$1,299', stock: 'In Stock' },\n { id: '2', name: 'Wireless Mouse', category: 'Accessories', price: '$29', stock: 'Low Stock' },\n { id: '3', name: 'USB-C Cable', category: 'Accessories', price: '$15', stock: 'In Stock' },\n ];\n\n return (\n <Table.Root>\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader>Product</Table.ColumnHeader>\n <Table.ColumnHeader>Category</Table.ColumnHeader>\n <Table.ColumnHeader>Price</Table.ColumnHeader>\n <Table.ColumnHeader>Status</Table.ColumnHeader>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {products.map((product) => (\n <Table.Row key={product.id}>\n <Table.Cell>{product.name}</Table.Cell>\n <Table.Cell>{product.category}</Table.Cell>\n <Table.Cell>{product.price}</Table.Cell>\n <Table.Cell>{product.stock}</Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Root>\n );\n}\n```\n\n## When to use Table\n\nUse the **Table** component when you need to display **static, read-only data** in a simple tabular format. It's designed for straightforward data presentation without interactive features.\n\n### Ideal use cases\n\n- **Static content displays**: Product specifications, feature comparisons, pricing tiers\n- **Small datasets**: Fewer than 50 rows that don't require pagination\n- **Read-only data**: Information that users only need to view, not interact with\n- **Simple layouts**: Basic tables without complex features like sorting or filtering\n- **Documentation and reference**: Help content, glossaries, or static lists\n\n### When to upgrade to DataTable\n\nConsider upgrading to the [DataTable component](/components/data-display/data-table) when you need:\n\n- **Sorting**: Allow users to sort columns in ascending or descending order\n- **Row selection**: Enable users to select one or multiple rows for bulk actions\n- **Column management**: Let users show/hide, reorder, or resize columns\n- **Search and filtering**: Help users find specific data within large datasets\n- **Pagination**: Handle datasets with more than 50 rows efficiently\n- **Server-side operations**: Support for server-side sorting, filtering, and pagination\n- **Nested data**: Display hierarchical data with expandable rows\n- **Dense data visualization**: Use condensed row spacing for data-heavy interfaces\n\n**Quick decision guide:**\n\n| Feature | Table | DataTable |\n|---------|-------|-----------|\n| Static display | ✓ | ✓ |\n| Sorting | ✗ | ✓ |\n| Selection | ✗ | ✓ |\n| Filtering | ✗ | ✓ |\n| Pagination | ✗ | ✓ |\n| Column resizing | ✗ | ✓ |\n| Best for | < 20 rows | > 20 rows |\n\n## Usage examples\n\n### Size variants\n\nThe `size` prop controls padding and text size. Available sizes are `sm`, `md` (default), and `lg`:\n\n```jsx live-dev\nconst App = () => {\n const [size, setSize] = useState('md');\n\n const data = [\n { name: 'Alice Johnson', role: 'Admin', email: 'alice@example.com' },\n { name: 'Bob Smith', role: 'User', email: 'bob@example.com' },\n ];\n\n return (\n <Stack gap=\"400\">\n <Stack direction=\"row\" gap=\"300\">\n <Button\n variant={size === 'sm' ? 'solid' : 'outline'}\n colorPalette=\"primary\"\n onPress={() => setSize('sm')}\n >\n Small\n </Button>\n <Button\n variant={size === 'md' ? 'solid' : 'outline'}\n colorPalette=\"primary\"\n onPress={() => setSize('md')}\n >\n Medium\n </Button>\n <Button\n variant={size === 'lg' ? 'solid' : 'outline'}\n colorPalette=\"primary\"\n onPress={() => setSize('lg')}\n >\n Large\n </Button>\n </Stack>\n <Table.Root size={size}>\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader>Name</Table.ColumnHeader>\n <Table.ColumnHeader>Role</Table.ColumnHeader>\n <Table.ColumnHeader>Email</Table.ColumnHeader>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {data.map((row, idx) => (\n <Table.Row key={idx}>\n <Table.Cell>{row.name}</Table.Cell>\n <Table.Cell>{row.role}</Table.Cell>\n <Table.Cell>{row.email}</Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Root>\n </Stack>\n );\n}\n```\n\n### Visual variants\n\nThe `variant` prop controls the table's visual style. Available variants are `line` (default) and `outline`:\n\n```jsx live-dev\nconst App = () => {\n const [variant, setVariant] = useState('line');\n\n const orders = [\n { id: '#1001', customer: 'John Doe', total: '$450.00', status: 'Shipped' },\n { id: '#1002', customer: 'Jane Smith', total: '$320.00', status: 'Processing' },\n { id: '#1003', customer: 'Bob Wilson', total: '$180.00', status: 'Delivered' },\n ];\n\n return (\n <Stack gap=\"400\">\n <Stack direction=\"row\" gap=\"300\">\n <Button\n variant={variant === 'line' ? 'solid' : 'outline'}\n colorPalette=\"primary\"\n onPress={() => setVariant('line')}\n >\n Line\n </Button>\n <Button\n variant={variant === 'outline' ? 'solid' : 'outline'}\n colorPalette=\"primary\"\n onPress={() => setVariant('outline')}\n >\n Outline\n </Button>\n </Stack>\n <Table.Root variant={variant}>\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader>Order ID</Table.ColumnHeader>\n <Table.ColumnHeader>Customer</Table.ColumnHeader>\n <Table.ColumnHeader>Total</Table.ColumnHeader>\n <Table.ColumnHeader>Status</Table.ColumnHeader>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {orders.map((order) => (\n <Table.Row key={order.id}>\n <Table.Cell>{order.id}</Table.Cell>\n <Table.Cell>{order.customer}</Table.Cell>\n <Table.Cell>{order.total}</Table.Cell>\n <Table.Cell>\n <Badge\n colorPalette={\n order.status === 'Delivered' ? 'positive' :\n order.status === 'Shipped' ? 'info' : 'warning'\n }\n >\n {order.status}\n </Badge>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Root>\n </Stack>\n );\n}\n```\n\n### Sticky headers\n\nUse `stickyHeader` to keep the table header visible when scrolling. Combine with `Table.ScrollArea` for scrollable content:\n\n```jsx live-dev\nconst App = () => {\n const transactions = Array.from({ length: 20 }, (_, i) => ({\n id: `TXN-${1000 + i}`,\n date: `2024-01-${String(i + 1).padStart(2, '0')}`,\n description: `Transaction ${i + 1}`,\n amount: `$${(Math.random() * 500 + 50).toFixed(2)}`,\n }));\n\n return (\n <Table.ScrollArea maxHeight=\"300px\">\n <Table.Root stickyHeader>\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader>Transaction ID</Table.ColumnHeader>\n <Table.ColumnHeader>Date</Table.ColumnHeader>\n <Table.ColumnHeader>Description</Table.ColumnHeader>\n <Table.ColumnHeader textAlign=\"end\">Amount</Table.ColumnHeader>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {transactions.map((txn) => (\n <Table.Row key={txn.id}>\n <Table.Cell>{txn.id}</Table.Cell>\n <Table.Cell>{txn.date}</Table.Cell>\n <Table.Cell>{txn.description}</Table.Cell>\n <Table.Cell textAlign=\"end\">{txn.amount}</Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Root>\n </Table.ScrollArea>\n );\n}\n```\n\n### Column borders\n\nShow vertical borders between columns with the `showColumnBorder` prop:\n\n```jsx live-dev\nconst App = () => {\n const metrics = [\n { metric: 'Revenue', q1: '$125K', q2: '$150K', q3: '$180K', q4: '$200K' },\n { metric: 'Customers', q1: '450', q2: '520', q3: '610', q4: '720' },\n { metric: 'Growth Rate', q1: '12%', q2: '15%', q3: '18%', q4: '22%' },\n ];\n\n return (\n <Table.Root variant=\"outline\" showColumnBorder>\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader>Metric</Table.ColumnHeader>\n <Table.ColumnHeader textAlign=\"end\">Q1</Table.ColumnHeader>\n <Table.ColumnHeader textAlign=\"end\">Q2</Table.ColumnHeader>\n <Table.ColumnHeader textAlign=\"end\">Q3</Table.ColumnHeader>\n <Table.ColumnHeader textAlign=\"end\">Q4</Table.ColumnHeader>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {metrics.map((row, idx) => (\n <Table.Row key={idx}>\n <Table.Cell fontWeight=\"medium\">{row.metric}</Table.Cell>\n <Table.Cell textAlign=\"end\">{row.q1}</Table.Cell>\n <Table.Cell textAlign=\"end\">{row.q2}</Table.Cell>\n <Table.Cell textAlign=\"end\">{row.q3}</Table.Cell>\n <Table.Cell textAlign=\"end\">{row.q4}</Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Root>\n );\n}\n```\n\n### Table with caption\n\nUse `Table.Caption` to provide a title or description for the table:\n\n```jsx live-dev\nconst App = () => {\n const schedule = [\n { time: '9:00 AM', event: 'Team Checkpoint', location: 'Conference Room A' },\n { time: '11:00 AM', event: 'Design Review', location: 'Meeting Room 3' },\n { time: '2:00 PM', event: 'Client Presentation', location: 'Virtual' },\n ];\n\n return (\n <Table.Root variant=\"outline\">\n <Table.Caption>Today's Schedule - January 8, 2026</Table.Caption>\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader>Time</Table.ColumnHeader>\n <Table.ColumnHeader>Event</Table.ColumnHeader>\n <Table.ColumnHeader>Location</Table.ColumnHeader>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {schedule.map((item, idx) => (\n <Table.Row key={idx}>\n <Table.Cell>{item.time}</Table.Cell>\n <Table.Cell>{item.event}</Table.Cell>\n <Table.Cell>{item.location}</Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Root>\n );\n}\n```\n\n### Table with footer\n\nUse `Table.Footer` to display summary information or totals at the bottom of the table:\n\n```jsx live-dev\nconst App = () => {\n const expenses = [\n { category: 'Office Supplies', amount: 450.00 },\n { category: 'Software Licenses', amount: 1200.00 },\n { category: 'Travel', amount: 850.00 },\n { category: 'Marketing', amount: 2100.00 },\n ];\n\n const total = expenses.reduce((sum, item) => sum + item.amount, 0);\n\n return (\n <Table.Root variant=\"outline\">\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader>Category</Table.ColumnHeader>\n <Table.ColumnHeader textAlign=\"end\">Amount</Table.ColumnHeader>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {expenses.map((expense, idx) => (\n <Table.Row key={idx}>\n <Table.Cell>{expense.category}</Table.Cell>\n <Table.Cell textAlign=\"end\">${expense.amount.toFixed(2)}</Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n <Table.Footer>\n <Table.Row>\n <Table.Cell fontWeight=\"bold\">Total</Table.Cell>\n <Table.Cell textAlign=\"end\" fontWeight=\"bold\">\n ${total.toFixed(2)}\n </Table.Cell>\n </Table.Row>\n </Table.Footer>\n </Table.Root>\n );\n}\n```\n\n## Component requirements\n\n## Accessibility\n\nThe Table component follows semantic HTML table structure and WCAG 2.1 AA guidelines.\n\n**Role**: The component uses native HTML table elements (`<table>`, `<thead>`, `<tbody>`, `<tr>`, `<th>`, `<td>`) which have implicit ARIA roles.\n\n**Labeling**:\n- Use `Table.ColumnHeader` for header cells (renders `<th>`) to provide column labels\n- Consider adding `aria-label` or `aria-labelledby` to `Table.Root` for complex tables\n- Use `Table.Caption` to provide a descriptive title for the table\n\n**Keyboard Navigation**:\n- Tables are not interactive by default\n- If making rows clickable, ensure they are keyboard accessible\n- For interactive tables, consider adding `tabIndex={0}` to focusable elements\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 = \"product-inventory-table\";\n\nexport const InventoryTable = () => (\n <Table.Root id={PERSISTENT_ID}>\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader>Product</Table.ColumnHeader>\n <Table.ColumnHeader>Stock</Table.ColumnHeader>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {/* table rows */}\n </Table.Body>\n </Table.Root>\n);\n```\n\n## Compound component API\n\nThe Table component uses a compound component pattern with multiple sub-components that work together. Each part accepts standard HTML table element props plus Chakra style props.\n\n### Available sub-components\n\n| Component | Description |\n|-----------|-------------|\n| `Table.Root` | Main container that provides styling and configuration for the entire table |\n| `Table.Header` | Container for the table header row(s) (renders `<thead>`) |\n| `Table.Body` | Container for the table data rows (renders `<tbody>`) |\n| `Table.Footer` | Container for footer rows with summary or totals (renders `<tfoot>`) |\n| `Table.Row` | Individual table row (renders `<tr>`) |\n| `Table.ColumnHeader` | Header cell for column labels (renders `<th>`) |\n| `Table.Cell` | Data cell for table content (renders `<td>`) |\n| `Table.Caption` | Table caption for providing a title or description (renders `<caption>`) |\n| `Table.ScrollArea` | Wrapper for scrollable tables with sticky header support |\n\n## API reference\n\n<PropsTable id=\"Table\" />\n\n## Common patterns\n\n### Data density\n\nUse size variants to control information density based on use case:\n\n```tsx\n// Dense data tables (dashboards, reports)\n<Table.Root size=\"sm\">\n {/* Compact spacing for scanning many rows */}\n</Table.Root>\n\n// Standard tables (most use cases)\n<Table.Root size=\"md\">\n {/* Balanced spacing */}\n</Table.Root>\n\n// Spacious tables (forms, configuration)\n<Table.Root size=\"lg\">\n {/* More whitespace for interaction */}\n</Table.Root>\n```\n\n### Empty states\n\nHandle empty data gracefully with a message in the table body:\n\n```tsx\n<Table.Root>\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader>Name</Table.ColumnHeader>\n <Table.ColumnHeader>Email</Table.ColumnHeader>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {data.length === 0 ? (\n <Table.Row>\n <Table.Cell colSpan={2} textAlign=\"center\" py=\"600\">\n <Text color=\"fg.muted\">No data available</Text>\n </Table.Cell>\n </Table.Row>\n ) : (\n data.map((row) => (\n <Table.Row key={row.id}>\n <Table.Cell>{row.name}</Table.Cell>\n <Table.Cell>{row.email}</Table.Cell>\n </Table.Row>\n ))\n )}\n </Table.Body>\n</Table.Root>\n```\n\n### Loading states\n\nShow loading states while fetching data:\n\n```tsx\nconst [isLoading, setIsLoading] = useState(true);\nconst [data, setData] = useState([]);\n\nreturn (\n <Table.Root>\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader>Name</Table.ColumnHeader>\n <Table.ColumnHeader>Status</Table.ColumnHeader>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {isLoading ? (\n <Table.Row>\n <Table.Cell colSpan={2} textAlign=\"center\" py=\"600\">\n <Text>Loading...</Text>\n </Table.Cell>\n </Table.Row>\n ) : (\n data.map((row) => (\n <Table.Row key={row.id}>\n <Table.Cell>{row.name}</Table.Cell>\n <Table.Cell>{row.status}</Table.Cell>\n </Table.Row>\n ))\n )}\n </Table.Body>\n </Table.Root>\n);\n```\n\n### Numeric alignment\n\nAlign numeric columns to the right for better readability:\n\n```tsx\n<Table.Root>\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader>Product</Table.ColumnHeader>\n <Table.ColumnHeader textAlign=\"end\">Price</Table.ColumnHeader>\n <Table.ColumnHeader textAlign=\"end\">Quantity</Table.ColumnHeader>\n <Table.ColumnHeader textAlign=\"end\">Total</Table.ColumnHeader>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {items.map((item) => (\n <Table.Row key={item.id}>\n <Table.Cell>{item.product}</Table.Cell>\n <Table.Cell textAlign=\"end\">{item.price}</Table.Cell>\n <Table.Cell textAlign=\"end\">{item.quantity}</Table.Cell>\n <Table.Cell textAlign=\"end\">{item.total}</Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n</Table.Root>\n```\n\n## Testing your implementation\n\nThese examples demonstrate how to test your implementation when using Table 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 table renders with expected structure and content\n\n```tsx\nimport { describe, it, expect } from \"vitest\";\nimport { render, screen } from \"@testing-library/react\";\nimport { Table, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"Table - Basic rendering\", () => {\n it(\"renders table with headers and data\", () => {\n const data = [\n { id: \"1\", name: \"Product A\", price: \"$99.99\" },\n { id: \"2\", name: \"Product B\", price: \"$149.99\" },\n ];\n\n render(\n <NimbusProvider>\n <Table.Root>\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader>Name</Table.ColumnHeader>\n <Table.ColumnHeader>Price</Table.ColumnHeader>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {data.map((item) => (\n <Table.Row key={item.id}>\n <Table.Cell>{item.name}</Table.Cell>\n <Table.Cell>{item.price}</Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Root>\n </NimbusProvider>\n );\n\n // Verify table exists\n const table = screen.getByRole(\"table\");\n expect(table).toBeInTheDocument();\n\n // Verify headers\n expect(\n screen.getByRole(\"columnheader\", { name: \"Name\" })\n ).toBeInTheDocument();\n expect(\n screen.getByRole(\"columnheader\", { name: \"Price\" })\n ).toBeInTheDocument();\n\n // Verify data cells\n expect(screen.getByText(\"Product A\")).toBeInTheDocument();\n expect(screen.getByText(\"$99.99\")).toBeInTheDocument();\n expect(screen.getByText(\"Product B\")).toBeInTheDocument();\n expect(screen.getByText(\"$149.99\")).toBeInTheDocument();\n });\n\n it(\"renders table with caption\", () => {\n render(\n <NimbusProvider>\n <Table.Root>\n <Table.Caption>Product Inventory</Table.Caption>\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader>Product</Table.ColumnHeader>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n <Table.Row>\n <Table.Cell>Item 1</Table.Cell>\n </Table.Row>\n </Table.Body>\n </Table.Root>\n </NimbusProvider>\n );\n\n expect(screen.getByText(\"Product Inventory\")).toBeInTheDocument();\n });\n\n it(\"renders table with footer\", () => {\n render(\n <NimbusProvider>\n <Table.Root>\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader>Item</Table.ColumnHeader>\n <Table.ColumnHeader>Amount</Table.ColumnHeader>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n <Table.Row>\n <Table.Cell>Product</Table.Cell>\n <Table.Cell>$100</Table.Cell>\n </Table.Row>\n </Table.Body>\n <Table.Footer>\n <Table.Row>\n <Table.Cell>Total</Table.Cell>\n <Table.Cell>$100</Table.Cell>\n </Table.Row>\n </Table.Footer>\n </Table.Root>\n </NimbusProvider>\n );\n\n const footer = screen.getByText(\"Total\");\n expect(footer).toBeInTheDocument();\n });\n});\n```\n\n### Accessibility Tests\n\nTest table accessibility features\n\n```tsx\nimport { describe, it, expect } from \"vitest\";\nimport { render, screen } from \"@testing-library/react\";\nimport { Table, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"Table - Accessibility\", () => {\n it(\"has proper table structure with semantic elements\", () => {\n render(\n <NimbusProvider>\n <Table.Root>\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader>Name</Table.ColumnHeader>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n <Table.Row>\n <Table.Cell>Alice</Table.Cell>\n </Table.Row>\n </Table.Body>\n </Table.Root>\n </NimbusProvider>\n );\n\n const table = screen.getByRole(\"table\");\n expect(table).toBeInTheDocument();\n\n // Check for header cells\n const columnHeader = screen.getByRole(\"columnheader\", { name: \"Name\" });\n expect(columnHeader).toBeInTheDocument();\n\n // Check for data cells\n const cells = screen.getAllByRole(\"cell\");\n expect(cells).toHaveLength(1);\n expect(cells[0]).toHaveTextContent(\"Alice\");\n });\n\n it(\"supports aria-label for table identification\", () => {\n render(\n <NimbusProvider>\n <Table.Root aria-label=\"User directory\">\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader>Name</Table.ColumnHeader>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n <Table.Row>\n <Table.Cell>Alice</Table.Cell>\n </Table.Row>\n </Table.Body>\n </Table.Root>\n </NimbusProvider>\n );\n\n const table = screen.getByRole(\"table\", { name: \"User directory\" });\n expect(table).toBeInTheDocument();\n });\n\n it(\"uses caption for table description\", () => {\n render(\n <NimbusProvider>\n <Table.Root>\n <Table.Caption>Employee Information</Table.Caption>\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader>Name</Table.ColumnHeader>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n <Table.Row>\n <Table.Cell>Bob</Table.Cell>\n </Table.Row>\n </Table.Body>\n </Table.Root>\n </NimbusProvider>\n );\n\n expect(screen.getByText(\"Employee Information\")).toBeInTheDocument();\n });\n});\n```\n\n\n## Resources\n\n- [Chakra UI - Table Documentation](https://chakra-ui.com/docs/components/table)\n- [MDN - HTML Table Element](https://developer.mozilla.org/en-docs/Web/HTML/Element/table)\n- [WCAG - Table Accessibility](https://www.w3.org/WAI/tutorials/tables/)\n\n**Related components**\n\n- **[DataTable Component](/components/data-display/data-table)** - Upgrade to DataTable when you need sorting, filtering, selection, pagination, or other interactive features for complex data management\n",
93
+ "toc": [
94
+ {
95
+ "value": "Getting started",
96
+ "href": "#getting-started",
97
+ "depth": 2,
98
+ "numbering": [
99
+ 1,
100
+ 1
101
+ ],
102
+ "parent": "root"
103
+ },
104
+ {
105
+ "value": "Import",
106
+ "href": "#import",
107
+ "depth": 3,
108
+ "numbering": [
109
+ 1,
110
+ 1,
111
+ 1
112
+ ],
113
+ "parent": "root"
114
+ },
115
+ {
116
+ "value": "Basic usage",
117
+ "href": "#basic-usage",
118
+ "depth": 3,
119
+ "numbering": [
120
+ 1,
121
+ 1,
122
+ 2
123
+ ],
124
+ "parent": "root"
125
+ },
126
+ {
127
+ "value": "When to use Table",
128
+ "href": "#when-to-use-table",
129
+ "depth": 2,
130
+ "numbering": [
131
+ 1,
132
+ 2
133
+ ],
134
+ "parent": "root"
135
+ },
136
+ {
137
+ "value": "Ideal use cases",
138
+ "href": "#ideal-use-cases",
139
+ "depth": 3,
140
+ "numbering": [
141
+ 1,
142
+ 2,
143
+ 1
144
+ ],
145
+ "parent": "root"
146
+ },
147
+ {
148
+ "value": "When to upgrade to DataTable",
149
+ "href": "#when-to-upgrade-to-datatable",
150
+ "depth": 3,
151
+ "numbering": [
152
+ 1,
153
+ 2,
154
+ 2
155
+ ],
156
+ "parent": "root"
157
+ },
158
+ {
159
+ "value": "Usage examples",
160
+ "href": "#usage-examples",
161
+ "depth": 2,
162
+ "numbering": [
163
+ 1,
164
+ 3
165
+ ],
166
+ "parent": "root"
167
+ },
168
+ {
169
+ "value": "Size variants",
170
+ "href": "#size-variants",
171
+ "depth": 3,
172
+ "numbering": [
173
+ 1,
174
+ 3,
175
+ 1
176
+ ],
177
+ "parent": "root"
178
+ },
179
+ {
180
+ "value": "Visual variants",
181
+ "href": "#visual-variants",
182
+ "depth": 3,
183
+ "numbering": [
184
+ 1,
185
+ 3,
186
+ 2
187
+ ],
188
+ "parent": "root"
189
+ },
190
+ {
191
+ "value": "Sticky headers",
192
+ "href": "#sticky-headers",
193
+ "depth": 3,
194
+ "numbering": [
195
+ 1,
196
+ 3,
197
+ 3
198
+ ],
199
+ "parent": "root"
200
+ },
201
+ {
202
+ "value": "Column borders",
203
+ "href": "#column-borders",
204
+ "depth": 3,
205
+ "numbering": [
206
+ 1,
207
+ 3,
208
+ 4
209
+ ],
210
+ "parent": "root"
211
+ },
212
+ {
213
+ "value": "Table with caption",
214
+ "href": "#table-with-caption",
215
+ "depth": 3,
216
+ "numbering": [
217
+ 1,
218
+ 3,
219
+ 5
220
+ ],
221
+ "parent": "root"
222
+ },
223
+ {
224
+ "value": "Table with footer",
225
+ "href": "#table-with-footer",
226
+ "depth": 3,
227
+ "numbering": [
228
+ 1,
229
+ 3,
230
+ 6
231
+ ],
232
+ "parent": "root"
233
+ },
234
+ {
235
+ "value": "Component requirements",
236
+ "href": "#component-requirements",
237
+ "depth": 2,
238
+ "numbering": [
239
+ 1,
240
+ 4
241
+ ],
242
+ "parent": "root"
243
+ },
244
+ {
245
+ "value": "Accessibility",
246
+ "href": "#accessibility",
247
+ "depth": 2,
248
+ "numbering": [
249
+ 1,
250
+ 5
251
+ ],
252
+ "parent": "root"
253
+ },
254
+ {
255
+ "value": "Compound component API",
256
+ "href": "#compound-component-api",
257
+ "depth": 2,
258
+ "numbering": [
259
+ 1,
260
+ 6
261
+ ],
262
+ "parent": "root"
263
+ },
264
+ {
265
+ "value": "Available sub-components",
266
+ "href": "#available-sub-components",
267
+ "depth": 3,
268
+ "numbering": [
269
+ 1,
270
+ 6,
271
+ 1
272
+ ],
273
+ "parent": "root"
274
+ },
275
+ {
276
+ "value": "API reference",
277
+ "href": "#api-reference",
278
+ "depth": 2,
279
+ "numbering": [
280
+ 1,
281
+ 7
282
+ ],
283
+ "parent": "root"
284
+ },
285
+ {
286
+ "value": "Common patterns",
287
+ "href": "#common-patterns",
288
+ "depth": 2,
289
+ "numbering": [
290
+ 1,
291
+ 8
292
+ ],
293
+ "parent": "root"
294
+ },
295
+ {
296
+ "value": "Data density",
297
+ "href": "#data-density",
298
+ "depth": 3,
299
+ "numbering": [
300
+ 1,
301
+ 8,
302
+ 1
303
+ ],
304
+ "parent": "root"
305
+ },
306
+ {
307
+ "value": "Empty states",
308
+ "href": "#empty-states",
309
+ "depth": 3,
310
+ "numbering": [
311
+ 1,
312
+ 8,
313
+ 2
314
+ ],
315
+ "parent": "root"
316
+ },
317
+ {
318
+ "value": "Loading states",
319
+ "href": "#loading-states",
320
+ "depth": 3,
321
+ "numbering": [
322
+ 1,
323
+ 8,
324
+ 3
325
+ ],
326
+ "parent": "root"
327
+ },
328
+ {
329
+ "value": "Numeric alignment",
330
+ "href": "#numeric-alignment",
331
+ "depth": 3,
332
+ "numbering": [
333
+ 1,
334
+ 8,
335
+ 4
336
+ ],
337
+ "parent": "root"
338
+ },
339
+ {
340
+ "value": "Testing your implementation",
341
+ "href": "#testing-your-implementation",
342
+ "depth": 2,
343
+ "numbering": [
344
+ 1,
345
+ 9
346
+ ],
347
+ "parent": "root"
348
+ },
349
+ {
350
+ "value": "Basic Rendering Tests",
351
+ "href": "#basic-rendering-tests",
352
+ "depth": 3,
353
+ "numbering": [
354
+ 1,
355
+ 9,
356
+ 1
357
+ ],
358
+ "parent": "root"
359
+ },
360
+ {
361
+ "value": "Accessibility Tests",
362
+ "href": "#accessibility-tests",
363
+ "depth": 3,
364
+ "numbering": [
365
+ 1,
366
+ 9,
367
+ 2
368
+ ],
369
+ "parent": "root"
370
+ },
371
+ {
372
+ "value": "Resources",
373
+ "href": "#resources",
374
+ "depth": 2,
375
+ "numbering": [
376
+ 1,
377
+ 10
378
+ ],
379
+ "parent": "root"
380
+ }
381
+ ]
382
+ },
383
+ "guidelines": {
384
+ "mdx": "\n# Table Guidelines\n\nThe Table component provides a simple, semantic HTML table structure for displaying static, read-only data. It's designed for straightforward data presentation without interactive features like sorting, filtering, or selection.\n\n## When to use Table\n\nUse the **Table** component when you need to display **static, read-only data** in a simple tabular format. It's designed for straightforward data presentation without interactive features.\n\n> [!TIP]\\\n> **Ideal use cases**\n\n- **Static content displays**: Product specifications, feature comparisons, pricing tiers\n- **Small datasets**: Fewer than 50 rows that don't require pagination\n- **Read-only data**: Information that users only need to view, not interact with\n- **Simple layouts**: Basic tables without complex features like sorting or filtering\n- **Documentation and reference**: Help content, glossaries, or static lists\n\n## When to upgrade to DataTable\n\nConsider upgrading to the [DataTable component](/components/data-display/data-table) when you need any of these features:\n\n> [!CAUTION]\\\n> **Upgrade to DataTable if you need:**\n\n- **Sorting**: Allow users to sort columns in ascending or descending order\n- **Row selection**: Enable users to select one or multiple rows for bulk actions\n- **Column management**: Let users show/hide, reorder, or resize columns\n- **Search and filtering**: Help users find specific data within large datasets\n- **Pagination**: Handle datasets with more than 50 rows efficiently\n- **Server-side operations**: Support for server-side sorting, filtering, and pagination\n- **Nested data**: Display hierarchical data with expandable rows\n- **Dense data visualization**: Use condensed row spacing for data-heavy interfaces\n\n## Quick decision guide\n\n| Feature | Table | DataTable |\n|---------|-------|-----------|\n| Static display | ✓ | ✓ |\n| Sorting | ✗ | ✓ |\n| Selection | ✗ | ✓ |\n| Filtering | ✗ | ✓ |\n| Pagination | ✗ | ✓ |\n| Column resizing | ✗ | ✓ |\n| Best for | < 50 rows | > 50 rows |\n\n## Best practices\n\n> [!TIP]\\\n> **Do**\n\n- Use Table for static, read-only content that doesn't require user interaction\n- Keep tables simple with clear column headers and well-organized rows\n- Use consistent alignment (left-align text, right-align numbers)\n- Provide a caption or accessible label for screen readers\n- Consider responsive design for mobile viewports\n\n```jsx live\nconst App = () => {\n const specs = [\n { feature: 'Weight', value: '1.4 kg' },\n { feature: 'Display', value: '13.3-inch Retina' },\n { feature: 'Battery', value: 'Up to 17 hours' },\n { feature: 'Storage', value: '256GB SSD' },\n ];\n\n return (\n <Table.Root variant=\"outline\">\n <Table.Caption>MacBook Air Specifications</Table.Caption>\n <Table.Body>\n {specs.map((spec, idx) => (\n <Table.Row key={idx}>\n <Table.Cell fontWeight=\"medium\">{spec.feature}</Table.Cell>\n <Table.Cell>{spec.value}</Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Root>\n );\n}\n```\n\n> [!CAUTION]\\\n> **Don't**\n\n- Don't use Table for interactive data that requires sorting, filtering, or selection\n- Don't use Table for large datasets (> 50 rows) that need pagination\n- Don't force horizontal scrolling unless absolutely necessary\n- Don't use tables only for layout purposes; they are for data only\n\n```jsx live\nconst App = () => {\n // ✗ Avoid - This dataset is too large and needs sorting/filtering\n const products = Array.from({ length: 100 }, (_, i) => ({\n id: i + 1,\n name: `Product ${i + 1}`,\n price: `$${(Math.random() * 100).toFixed(2)}`,\n status: i % 2 === 0 ? 'In Stock' : 'Out of Stock',\n }));\n\n return (\n <Table.Root>\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader>Product</Table.ColumnHeader>\n <Table.ColumnHeader>Price</Table.ColumnHeader>\n <Table.ColumnHeader>Status</Table.ColumnHeader>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {products.map((product) => (\n <Table.Row key={product.id}>\n <Table.Cell>{product.name}</Table.Cell>\n <Table.Cell>{product.price}</Table.Cell>\n <Table.Cell>{product.status}</Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Root>\n );\n}\n```\n\n**Why this doesn't work:** This example shows 100 rows without pagination, sorting, or filtering—making it difficult for users to find information. Use [DataTable](/components/data-display/data-table) instead for datasets of this size.\n\n## Usage patterns\n\n### Product specifications\n\nPerfect for displaying static product details or feature comparisons:\n\n```jsx live\nconst App = () => {\n const specs = [\n { spec: 'Processor', basic: 'M1 Chip', pro: 'M1 Pro Chip', max: 'M1 Max Chip' },\n { spec: 'RAM', basic: '8GB', pro: '16GB', max: '32GB' },\n { spec: 'Storage', basic: '256GB', pro: '512GB', max: '1TB' },\n ];\n\n return (\n <Table.Root variant=\"outline\" showColumnBorder>\n <Table.Caption>MacBook Model Comparison</Table.Caption>\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader>Specification</Table.ColumnHeader>\n <Table.ColumnHeader>Basic</Table.ColumnHeader>\n <Table.ColumnHeader>Pro</Table.ColumnHeader>\n <Table.ColumnHeader>Max</Table.ColumnHeader>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {specs.map((spec, idx) => (\n <Table.Row key={idx}>\n <Table.Cell fontWeight=\"medium\">{spec.spec}</Table.Cell>\n <Table.Cell>{spec.basic}</Table.Cell>\n <Table.Cell>{spec.pro}</Table.Cell>\n <Table.Cell>{spec.max}</Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Root>\n );\n}\n```\n\n### Pricing tiers\n\nIdeal for displaying pricing information and plan comparisons:\n\n```jsx live\nconst App = () => {\n const pricing = [\n { feature: 'Users', starter: '5', business: '25', enterprise: 'Unlimited' },\n { feature: 'Storage', starter: '10GB', business: '100GB', enterprise: '1TB' },\n { feature: 'Support', starter: 'Email', business: 'Priority', enterprise: '24/7' },\n ];\n\n return (\n <Table.Root>\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader>Feature</Table.ColumnHeader>\n <Table.ColumnHeader>Starter</Table.ColumnHeader>\n <Table.ColumnHeader>Business</Table.ColumnHeader>\n <Table.ColumnHeader>Enterprise</Table.ColumnHeader>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {pricing.map((item, idx) => (\n <Table.Row key={idx}>\n <Table.Cell fontWeight=\"medium\">{item.feature}</Table.Cell>\n <Table.Cell>{item.starter}</Table.Cell>\n <Table.Cell>{item.business}</Table.Cell>\n <Table.Cell>{item.enterprise}</Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Root>\n );\n}\n```\n\n### Reference data\n\nGreat for glossaries, definitions, or other reference content:\n\n```jsx live\nconst App = () => {\n const terms = [\n { term: 'API', definition: 'Application Programming Interface' },\n { term: 'SDK', definition: 'Software Development Kit' },\n { term: 'CLI', definition: 'Command Line Interface' },\n { term: 'REST', definition: 'Representational State Transfer' },\n ];\n\n return (\n <Table.Root variant=\"line\">\n <Table.Caption>Common Development Terms</Table.Caption>\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeader>Term</Table.ColumnHeader>\n <Table.ColumnHeader>Definition</Table.ColumnHeader>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {terms.map((item, idx) => (\n <Table.Row key={idx}>\n <Table.Cell fontWeight=\"medium\">{item.term}</Table.Cell>\n <Table.Cell>{item.definition}</Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Root>\n );\n}\n```\n",
385
+ "toc": [
386
+ {
387
+ "value": "When to use Table",
388
+ "href": "#when-to-use-table",
389
+ "depth": 2,
390
+ "numbering": [
391
+ 1,
392
+ 1
393
+ ],
394
+ "parent": "root"
395
+ },
396
+ {
397
+ "value": "When to upgrade to DataTable",
398
+ "href": "#when-to-upgrade-to-datatable",
399
+ "depth": 2,
400
+ "numbering": [
401
+ 1,
402
+ 2
403
+ ],
404
+ "parent": "root"
405
+ },
406
+ {
407
+ "value": "Quick decision guide",
408
+ "href": "#quick-decision-guide",
409
+ "depth": 2,
410
+ "numbering": [
411
+ 1,
412
+ 3
413
+ ],
414
+ "parent": "root"
415
+ },
416
+ {
417
+ "value": "Best practices",
418
+ "href": "#best-practices",
419
+ "depth": 2,
420
+ "numbering": [
421
+ 1,
422
+ 4
423
+ ],
424
+ "parent": "root"
425
+ },
426
+ {
427
+ "value": "Usage patterns",
428
+ "href": "#usage-patterns",
429
+ "depth": 2,
430
+ "numbering": [
431
+ 1,
432
+ 5
433
+ ],
434
+ "parent": "root"
435
+ },
436
+ {
437
+ "value": "Product specifications",
438
+ "href": "#product-specifications",
439
+ "depth": 3,
440
+ "numbering": [
441
+ 1,
442
+ 5,
443
+ 1
444
+ ],
445
+ "parent": "root"
446
+ },
447
+ {
448
+ "value": "Pricing tiers",
449
+ "href": "#pricing-tiers",
450
+ "depth": 3,
451
+ "numbering": [
452
+ 1,
453
+ 5,
454
+ 2
455
+ ],
456
+ "parent": "root"
457
+ },
458
+ {
459
+ "value": "Reference data",
460
+ "href": "#reference-data",
461
+ "depth": 3,
462
+ "numbering": [
463
+ 1,
464
+ 5,
465
+ 3
466
+ ],
467
+ "parent": "root"
468
+ }
469
+ ]
470
+ }
471
+ }
472
+ }