@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,663 @@
1
+ {
2
+ "meta": {
3
+ "id": "Components-Icon",
4
+ "title": "Icon",
5
+ "exportName": "Icon",
6
+ "description": "An icon is a small graphical symbol used to represent an object, action, or idea within a user interface.",
7
+ "lifecycleState": "Stable",
8
+ "order": 999,
9
+ "repoPath": "packages/nimbus/src/components/icon/icon.mdx",
10
+ "menu": [
11
+ "Components",
12
+ "Media",
13
+ "Icon"
14
+ ],
15
+ "route": "components/media/icon",
16
+ "tags": [
17
+ "component",
18
+ "icon",
19
+ "svg",
20
+ "graphic",
21
+ "symbol"
22
+ ],
23
+ "toc": [
24
+ {
25
+ "value": "Overview",
26
+ "href": "#overview",
27
+ "depth": 2,
28
+ "numbering": [
29
+ 1,
30
+ 1
31
+ ],
32
+ "parent": "root"
33
+ },
34
+ {
35
+ "value": "Resources",
36
+ "href": "#resources",
37
+ "depth": 3,
38
+ "numbering": [
39
+ 1,
40
+ 1,
41
+ 1
42
+ ],
43
+ "parent": "root"
44
+ },
45
+ {
46
+ "value": "Variables",
47
+ "href": "#variables",
48
+ "depth": 2,
49
+ "numbering": [
50
+ 1,
51
+ 2
52
+ ],
53
+ "parent": "root"
54
+ },
55
+ {
56
+ "value": "Visual options",
57
+ "href": "#visual-options",
58
+ "depth": 3,
59
+ "numbering": [
60
+ 1,
61
+ 2,
62
+ 1
63
+ ],
64
+ "parent": "root"
65
+ },
66
+ {
67
+ "value": "Default and in color",
68
+ "href": "#default-and-in-color",
69
+ "depth": 4,
70
+ "numbering": [
71
+ 1,
72
+ 2,
73
+ 1,
74
+ 1
75
+ ],
76
+ "parent": "root"
77
+ },
78
+ {
79
+ "value": "Custom SVG",
80
+ "href": "#custom-svg",
81
+ "depth": 4,
82
+ "numbering": [
83
+ 1,
84
+ 2,
85
+ 1,
86
+ 2
87
+ ],
88
+ "parent": "root"
89
+ },
90
+ {
91
+ "value": "Predefined sizes",
92
+ "href": "#predefined-sizes",
93
+ "depth": 4,
94
+ "numbering": [
95
+ 1,
96
+ 2,
97
+ 1,
98
+ 3
99
+ ],
100
+ "parent": "root"
101
+ },
102
+ {
103
+ "value": "Custom size",
104
+ "href": "#custom-size",
105
+ "depth": 4,
106
+ "numbering": [
107
+ 1,
108
+ 2,
109
+ 1,
110
+ 4
111
+ ],
112
+ "parent": "root"
113
+ }
114
+ ],
115
+ "layout": "app-frame",
116
+ "tabs": [
117
+ {
118
+ "key": "overview",
119
+ "title": "Overview",
120
+ "order": 0
121
+ },
122
+ {
123
+ "key": "guidelines",
124
+ "title": "Guidelines",
125
+ "order": 2
126
+ },
127
+ {
128
+ "key": "dev",
129
+ "title": "Implementation",
130
+ "order": 3
131
+ },
132
+ {
133
+ "key": "a11y",
134
+ "title": "Accessibility",
135
+ "order": 4
136
+ }
137
+ ]
138
+ },
139
+ "mdx": "\n## Overview\n\nNimbus uses the Material Design icon library and adds custom SVG icons.\n\n### Resources\n\nDeep dive into implementation details and access the Nimbus design library.\n\n[Material Design Icon Library](https://www.figma.com/community/file/1014241558898418245)\n\n## Variables\n\nGet familiar with the features.\n\n### Visual options\n\n#### Default and in color\n\n```jsx live\nconst App = () => (\n <Stack direction=\"row\">\n <Icon size=\"xs\"><Icons.SentimentSatisfied /></Icon>\n <Icon size=\"xs\" color=\"primary.11\"><Icons.SentimentSatisfied /></Icon>\n <Icon size=\"xs\" color=\"info.11\"><Icons.SentimentSatisfied /></Icon>\n <Icon size=\"xs\" color=\"positive.11\"><Icons.SentimentSatisfied /></Icon>\n <Icon size=\"xs\" color=\"warning.11\"><Icons.SentimentSatisfied /></Icon>\n <Icon size=\"xs\" color=\"critical.11\"><Icons.SentimentSatisfied /></Icon>\n </Stack>\n);\n```\n\n#### Custom SVG\n\n```jsx live\nconst App = () => {\n const blackLogo = `<svg width=\"31\" height=\"36\" viewBox=\"0 0 31 36\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0 26.6043V10.7769C0 10.3383 0.473841 10.0655 0.853697 10.2835L14.5611 18.1965C14.9136 18.4002 15.1303 18.7761 15.1303 19.1821V35.0094C15.1303 35.448 14.6564 35.7208 14.2766 35.5028L0.569131 27.5898C0.216688 27.3862 0 27.0102 0 26.6043Z\" fill=\"currentColor\"/>\n <path d=\"M1.77896 7.94303L15.2723 0.152726C15.6248 -0.0509085 16.0582 -0.0509085 16.4106 0.152726L29.904 7.94303C30.3778 8.21716 30.3778 8.90116 29.904 9.17528L16.4106 16.9656C16.0582 17.1692 15.6248 17.1692 15.2723 16.9656L1.77896 9.17528C1.30512 8.90116 1.30512 8.21716 1.77896 7.94303Z\" fill=\"currentColor\"/>\n <path d=\"M16.5532 35.0107V20.3334C16.5532 19.8948 17.0271 19.622 17.4069 19.84L29.9043 27.0559C30.3781 27.3301 30.3781 28.0141 29.9043 28.2882L17.4069 35.5041C17.0271 35.7234 16.5532 35.4493 16.5532 35.0107Z\" fill=\"currentColor\"/>\n </svg>`;\n\n const colorLogo = `<svg width=\"31\" height=\"36\" viewBox=\"0 0 31 36\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0.259521 26.6043V10.7769C0.259521 10.3383 0.733362 10.0655 1.11322 10.2835L14.8207 18.1965C15.1731 18.4002 15.3898 18.7761 15.3898 19.1821V35.0094C15.3898 35.448 14.916 35.7208 14.5361 35.5028L0.828653 27.5898C0.476209 27.3862 0.259521 27.0102 0.259521 26.6043Z\" fill=\"#6359FF\"/>\n <path d=\"M2.03849 7.94303L15.5319 0.152726C15.8843 -0.0509085 16.3177 -0.0509085 16.6701 0.152726L30.1635 7.94303C30.6373 8.21716 30.6373 8.90116 30.1635 9.17528L16.6701 16.9656C16.3177 17.1692 15.8843 17.1692 15.5319 16.9656L2.03849 9.17528C1.56465 8.90116 1.56465 8.21716 2.03849 7.94303Z\" fill=\"#FFC806\"/>\n <path d=\"M16.8127 35.0107V20.3334C16.8127 19.8948 17.2866 19.622 17.6664 19.84L30.1638 27.0559C30.6377 27.3301 30.6377 28.0141 30.1638 28.2882L17.6664 35.5041C17.2866 35.7234 16.8127 35.4493 16.8127 35.0107Z\" fill=\"#0BBFBF\"/>\n </svg>`;\n\n return (\n <Stack direction=\"row\" gap=\"400\" alignItems=\"center\">\n <Icon size=\"xs\"><InlineSvg data={blackLogo} /></Icon>\n <Icon size=\"xs\"><InlineSvg data={colorLogo} /></Icon>\n </Stack>\n );\n};\n```\n\n#### Predefined sizes\n\nThe `Icon` component comes with a set of predefined sizes that can be applied\nusing the `size` prop.\n\n```jsx live\nconst App = () => (\n <Stack direction=\"row\" gap=\"400\" alignItems=\"center\">\n <Icon size=\"2xs\"><Icons.SentimentSatisfied /></Icon>\n <Icon size=\"xs\"><Icons.SentimentSatisfied /></Icon>\n <Icon size=\"sm\"><Icons.SentimentSatisfied /></Icon>\n <Icon size=\"md\"><Icons.SentimentSatisfied /></Icon>\n <Icon size=\"lg\"><Icons.SentimentSatisfied /></Icon>\n <Icon size=\"xl\"><Icons.SentimentSatisfied /></Icon>\n </Stack>\n);\n```\n\n#### Custom size\n\nYou can apply a custom size to the `Icon` using the `boxSize` style prop.\n\n```jsx live\nconst App = () => <Icon boxSize=\"3200\"><Icons.SentimentSatisfied /></Icon>;\n```\n",
140
+ "views": {
141
+ "overview": {
142
+ "mdx": "\n## Overview\n\nNimbus uses the Material Design icon library and adds custom SVG icons.\n\n### Resources\n\nDeep dive into implementation details and access the Nimbus design library.\n\n[Material Design Icon Library](https://www.figma.com/community/file/1014241558898418245)\n\n## Variables\n\nGet familiar with the features.\n\n### Visual options\n\n#### Default and in color\n\n```jsx live\nconst App = () => (\n <Stack direction=\"row\">\n <Icon size=\"xs\"><Icons.SentimentSatisfied /></Icon>\n <Icon size=\"xs\" color=\"primary.11\"><Icons.SentimentSatisfied /></Icon>\n <Icon size=\"xs\" color=\"info.11\"><Icons.SentimentSatisfied /></Icon>\n <Icon size=\"xs\" color=\"positive.11\"><Icons.SentimentSatisfied /></Icon>\n <Icon size=\"xs\" color=\"warning.11\"><Icons.SentimentSatisfied /></Icon>\n <Icon size=\"xs\" color=\"critical.11\"><Icons.SentimentSatisfied /></Icon>\n </Stack>\n);\n```\n\n#### Custom SVG\n\n```jsx live\nconst App = () => {\n const blackLogo = `<svg width=\"31\" height=\"36\" viewBox=\"0 0 31 36\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0 26.6043V10.7769C0 10.3383 0.473841 10.0655 0.853697 10.2835L14.5611 18.1965C14.9136 18.4002 15.1303 18.7761 15.1303 19.1821V35.0094C15.1303 35.448 14.6564 35.7208 14.2766 35.5028L0.569131 27.5898C0.216688 27.3862 0 27.0102 0 26.6043Z\" fill=\"currentColor\"/>\n <path d=\"M1.77896 7.94303L15.2723 0.152726C15.6248 -0.0509085 16.0582 -0.0509085 16.4106 0.152726L29.904 7.94303C30.3778 8.21716 30.3778 8.90116 29.904 9.17528L16.4106 16.9656C16.0582 17.1692 15.6248 17.1692 15.2723 16.9656L1.77896 9.17528C1.30512 8.90116 1.30512 8.21716 1.77896 7.94303Z\" fill=\"currentColor\"/>\n <path d=\"M16.5532 35.0107V20.3334C16.5532 19.8948 17.0271 19.622 17.4069 19.84L29.9043 27.0559C30.3781 27.3301 30.3781 28.0141 29.9043 28.2882L17.4069 35.5041C17.0271 35.7234 16.5532 35.4493 16.5532 35.0107Z\" fill=\"currentColor\"/>\n </svg>`;\n\n const colorLogo = `<svg width=\"31\" height=\"36\" viewBox=\"0 0 31 36\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0.259521 26.6043V10.7769C0.259521 10.3383 0.733362 10.0655 1.11322 10.2835L14.8207 18.1965C15.1731 18.4002 15.3898 18.7761 15.3898 19.1821V35.0094C15.3898 35.448 14.916 35.7208 14.5361 35.5028L0.828653 27.5898C0.476209 27.3862 0.259521 27.0102 0.259521 26.6043Z\" fill=\"#6359FF\"/>\n <path d=\"M2.03849 7.94303L15.5319 0.152726C15.8843 -0.0509085 16.3177 -0.0509085 16.6701 0.152726L30.1635 7.94303C30.6373 8.21716 30.6373 8.90116 30.1635 9.17528L16.6701 16.9656C16.3177 17.1692 15.8843 17.1692 15.5319 16.9656L2.03849 9.17528C1.56465 8.90116 1.56465 8.21716 2.03849 7.94303Z\" fill=\"#FFC806\"/>\n <path d=\"M16.8127 35.0107V20.3334C16.8127 19.8948 17.2866 19.622 17.6664 19.84L30.1638 27.0559C30.6377 27.3301 30.6377 28.0141 30.1638 28.2882L17.6664 35.5041C17.2866 35.7234 16.8127 35.4493 16.8127 35.0107Z\" fill=\"#0BBFBF\"/>\n </svg>`;\n\n return (\n <Stack direction=\"row\" gap=\"400\" alignItems=\"center\">\n <Icon size=\"xs\"><InlineSvg data={blackLogo} /></Icon>\n <Icon size=\"xs\"><InlineSvg data={colorLogo} /></Icon>\n </Stack>\n );\n};\n```\n\n#### Predefined sizes\n\nThe `Icon` component comes with a set of predefined sizes that can be applied\nusing the `size` prop.\n\n```jsx live\nconst App = () => (\n <Stack direction=\"row\" gap=\"400\" alignItems=\"center\">\n <Icon size=\"2xs\"><Icons.SentimentSatisfied /></Icon>\n <Icon size=\"xs\"><Icons.SentimentSatisfied /></Icon>\n <Icon size=\"sm\"><Icons.SentimentSatisfied /></Icon>\n <Icon size=\"md\"><Icons.SentimentSatisfied /></Icon>\n <Icon size=\"lg\"><Icons.SentimentSatisfied /></Icon>\n <Icon size=\"xl\"><Icons.SentimentSatisfied /></Icon>\n </Stack>\n);\n```\n\n#### Custom size\n\nYou can apply a custom size to the `Icon` using the `boxSize` style prop.\n\n```jsx live\nconst App = () => <Icon boxSize=\"3200\"><Icons.SentimentSatisfied /></Icon>;\n```\n",
143
+ "toc": [
144
+ {
145
+ "value": "Overview",
146
+ "href": "#overview",
147
+ "depth": 2,
148
+ "numbering": [
149
+ 1,
150
+ 1
151
+ ],
152
+ "parent": "root"
153
+ },
154
+ {
155
+ "value": "Resources",
156
+ "href": "#resources",
157
+ "depth": 3,
158
+ "numbering": [
159
+ 1,
160
+ 1,
161
+ 1
162
+ ],
163
+ "parent": "root"
164
+ },
165
+ {
166
+ "value": "Variables",
167
+ "href": "#variables",
168
+ "depth": 2,
169
+ "numbering": [
170
+ 1,
171
+ 2
172
+ ],
173
+ "parent": "root"
174
+ },
175
+ {
176
+ "value": "Visual options",
177
+ "href": "#visual-options",
178
+ "depth": 3,
179
+ "numbering": [
180
+ 1,
181
+ 2,
182
+ 1
183
+ ],
184
+ "parent": "root"
185
+ },
186
+ {
187
+ "value": "Default and in color",
188
+ "href": "#default-and-in-color",
189
+ "depth": 4,
190
+ "numbering": [
191
+ 1,
192
+ 2,
193
+ 1,
194
+ 1
195
+ ],
196
+ "parent": "root"
197
+ },
198
+ {
199
+ "value": "Custom SVG",
200
+ "href": "#custom-svg",
201
+ "depth": 4,
202
+ "numbering": [
203
+ 1,
204
+ 2,
205
+ 1,
206
+ 2
207
+ ],
208
+ "parent": "root"
209
+ },
210
+ {
211
+ "value": "Predefined sizes",
212
+ "href": "#predefined-sizes",
213
+ "depth": 4,
214
+ "numbering": [
215
+ 1,
216
+ 2,
217
+ 1,
218
+ 3
219
+ ],
220
+ "parent": "root"
221
+ },
222
+ {
223
+ "value": "Custom size",
224
+ "href": "#custom-size",
225
+ "depth": 4,
226
+ "numbering": [
227
+ 1,
228
+ 2,
229
+ 1,
230
+ 4
231
+ ],
232
+ "parent": "root"
233
+ }
234
+ ]
235
+ },
236
+ "a11y": {
237
+ "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 = () => <Icon size=\"xs\"><Icons.SentimentSatisfied /></Icon>;\n```\n\n### Accessibility standards\n\nIcons can be a powerful bridge for merchants navigating interfaces with reading,\nlanguage, attention, or low vision challenges. For those icons appearing without\naccompanying text, however, developers must proactively apply an\n`accessibilityLabel` prop to provide an `aria-label`, spoken description that\nscreen readers can convey to users.\n",
238
+ "toc": [
239
+ {
240
+ "value": "Accessibility",
241
+ "href": "#accessibility",
242
+ "depth": 2,
243
+ "numbering": [
244
+ 1,
245
+ 1
246
+ ],
247
+ "parent": "root"
248
+ },
249
+ {
250
+ "value": "Accessibility standards",
251
+ "href": "#accessibility-standards",
252
+ "depth": 3,
253
+ "numbering": [
254
+ 1,
255
+ 1,
256
+ 1
257
+ ],
258
+ "parent": "root"
259
+ }
260
+ ]
261
+ },
262
+ "dev": {
263
+ "mdx": "\n## Getting started\n\n### Import\n\n```tsx\nimport { Icon, type IconProps } from \"@commercetools/nimbus\";\nimport { CheckCircle, Settings, Delete } from \"@commercetools/nimbus-icons\";\n```\n\n> [!NOTE] \n> Icons are imported separately from `@commercetools/nimbus-icons`, which provides a comprehensive set of Material Design icons and custom Nimbus icons.\n\n### Basic usage\n\nIcons can be used in two ways: by passing the icon component as a child, or using the `as` prop as shorthand:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"row\" gap=\"400\" align=\"center\">\n {/* Using children */}\n <Icon>\n <Icons.CheckCircle />\n </Icon>\n \n {/* Using as prop (shorthand) */}\n <Icon as={Icons.Settings} />\n </Stack>\n)\n```\n\n## Usage examples\n\n### Size variants\n\nIcon provides six predefined size variants that can be applied using the `size` prop:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"row\" gap=\"400\" align=\"center\">\n <Stack direction=\"column\" gap=\"100\" align=\"center\">\n <Icon size=\"2xs\" as={Icons.Star} />\n <Text fontSize=\"xs\">2xs</Text>\n </Stack>\n <Stack direction=\"column\" gap=\"100\" align=\"center\">\n <Icon size=\"xs\" as={Icons.Star} />\n <Text fontSize=\"xs\">xs</Text>\n </Stack>\n <Stack direction=\"column\" gap=\"100\" align=\"center\">\n <Icon size=\"sm\" as={Icons.Star} />\n <Text fontSize=\"xs\">sm</Text>\n </Stack>\n <Stack direction=\"column\" gap=\"100\" align=\"center\">\n <Icon size=\"md\" as={Icons.Star} />\n <Text fontSize=\"xs\">md</Text>\n </Stack>\n <Stack direction=\"column\" gap=\"100\" align=\"center\">\n <Icon size=\"lg\" as={Icons.Star} />\n <Text fontSize=\"xs\">lg</Text>\n </Stack>\n <Stack direction=\"column\" gap=\"100\" align=\"center\">\n <Icon size=\"xl\" as={Icons.Star} />\n <Text fontSize=\"xs\">xl</Text>\n </Stack>\n </Stack>\n)\n```\n\n### Custom size\n\nFor sizes beyond the predefined variants, use the `boxSize` style prop:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"row\" gap=\"400\" align=\"center\">\n <Icon boxSize=\"1600\" as={Icons.Favorite} />\n <Icon boxSize=\"2400\" as={Icons.Favorite} />\n <Icon boxSize=\"3200\" as={Icons.Favorite} />\n </Stack>\n)\n```\n\n### Color customization\n\nIcons inherit the current text color by default, but can be customized using the `color` prop with Nimbus color tokens or any valid CSS color:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"column\" gap=\"400\">\n <Stack direction=\"row\" gap=\"300\" align=\"center\">\n <Icon as={Icons.Info} color=\"primary.11\" size=\"lg\" />\n <Icon as={Icons.CheckCircle} color=\"positive.11\" size=\"lg\" />\n <Icon as={Icons.Warning} color=\"warning.11\" size=\"lg\" />\n <Icon as={Icons.Error} color=\"critical.11\" size=\"lg\" />\n <Icon as={Icons.Help} color=\"info.11\" size=\"lg\" />\n </Stack>\n \n <Stack direction=\"row\" gap=\"300\" align=\"center\">\n <Icon as={Icons.Favorite} color=\"deeppink\" size=\"lg\" />\n <Icon as={Icons.Star} color=\"gold\" size=\"lg\" />\n <Icon as={Icons.Palette} color=\"rebeccapurple\" size=\"lg\" />\n </Stack>\n </Stack>\n)\n```\n\n### Using the `as` prop\n\nThe `as` prop provides a convenient shorthand for rendering an icon without nesting:\n\n```jsx live-dev\nconst App = () => {\n const [iconType, setIconType] = React.useState<IconProps[\"as\"]>(Icons.Home);\n \n return (\n <Stack direction=\"column\" gap=\"400\">\n <Stack direction=\"row\" gap=\"200\">\n <Button size=\"xs\" onClick={() => setIconType(Icons.Home)}>Home</Button>\n <Button size=\"xs\" onClick={() => setIconType(Icons.Settings)}>Settings</Button>\n <Button size=\"xs\" onClick={() => setIconType(Icons.Notifications)}>Notifications</Button>\n <Button size=\"xs\" onClick={() => setIconType(Icons.AccountCircle)}>Account</Button>\n </Stack>\n \n <Stack direction=\"row\" gap=\"300\" align=\"center\">\n <Icon as={iconType} size=\"xl\" color=\"primary.11\" />\n <Text>Selected icon changes dynamically</Text>\n </Stack>\n </Stack>\n );\n}\n```\n\n### With custom SVG\n\nWhile Icon is primarily designed for use with icons from `@commercetools/nimbus-icons`, you can also pass custom SVG elements as children. The key is to use `forwardRef` and spread props to ensure proper color inheritance and sizing:\n\n```jsx live-dev\nconst App = () => {\n const CustomLayersIcon = React.forwardRef((props, ref) => (\n <svg \n ref={ref}\n viewBox=\"0 0 31 36\" \n fill=\"none\" \n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path d=\"M0 26.6043V10.7769C0 10.3383 0.473841 10.0655 0.853697 10.2835L14.5611 18.1965C14.9136 18.4002 15.1303 18.7761 15.1303 19.1821V35.0094C15.1303 35.448 14.6564 35.7208 14.2766 35.5028L0.569131 27.5898C0.216688 27.3862 0 27.0102 0 26.6043Z\" fill=\"currentColor\"/>\n <path d=\"M1.77896 7.94303L15.2723 0.152726C15.6248 -0.0509085 16.0582 -0.0509085 16.4106 0.152726L29.904 7.94303C30.3778 8.21716 30.3778 8.90116 29.904 9.17528L16.4106 16.9656C16.0582 17.1692 15.6248 17.1692 15.2723 16.9656L1.77896 9.17528C1.30512 8.90116 1.30512 8.21716 1.77896 7.94303Z\" fill=\"currentColor\"/>\n <path d=\"M16.5532 35.0107V20.3334C16.5532 19.8948 17.0271 19.622 17.4069 19.84L29.9043 27.0559C30.3781 27.3301 30.3781 28.0141 29.9043 28.2882L17.4069 35.5041C17.0271 35.7234 16.5532 35.4493 16.5532 35.0107Z\" fill=\"currentColor\"/>\n </svg>\n ));\n \n return (\n <Stack direction=\"row\" gap=\"400\" align=\"center\">\n <Icon size=\"sm\" color=\"neutral.11\">\n <CustomLayersIcon />\n </Icon>\n <Icon size=\"md\" color=\"primary.11\">\n <CustomLayersIcon />\n </Icon>\n <Icon size=\"lg\" color=\"positive.11\">\n <CustomLayersIcon />\n </Icon>\n </Stack>\n );\n}\n```\n\n### Responsive sizing\n\nIcon supports responsive prop values for different breakpoints:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"column\" gap=\"400\">\n <Icon \n as={Icons.Smartphone}\n size={{ base: \"sm\", md: \"md\", lg: \"xl\" }}\n color=\"primary.11\"\n />\n <Text fontSize=\"sm\" color=\"neutral.11\">\n Icon size changes from sm → md → xl as viewport increases\n </Text>\n </Stack>\n)\n```\n\n### Styling with Chakra props\n\nIcon accepts all Chakra UI SVG props for advanced styling:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"row\" gap=\"400\" align=\"center\">\n <Icon \n as={Icons.FavoriteBorder}\n size=\"xl\"\n color=\"critical.11\"\n opacity=\"0.7\"\n _hover={{ opacity: 1, transform: \"scale(1.1)\" }}\n transition=\"all 0.2s\"\n cursor=\"pointer\"\n />\n <Icon \n as={Icons.Star}\n size=\"xl\"\n color=\"warning.11\"\n filter=\"drop-shadow(0 2px 4px rgba(0,0,0,0.2))\"\n />\n <Icon \n as={Icons.Lightbulb}\n size=\"xl\"\n color=\"info.11\"\n transform=\"rotate(15deg)\"\n />\n </Stack>\n)\n```\n\n## Component requirements\n\n### Usage context\n\nIcon should be used when you need to:\n- Display visual symbols from the Nimbus icon library\n- Add icons to buttons, menus, lists, or other UI elements\n- Create status indicators or visual cues\n- Maintain consistent icon sizing and styling\n\nIcons from `@commercetools/nimbus-icons` include:\n- **Material Design icons**: Comprehensive set of standard UI icons\n- **Custom Nimbus icons**: Brand-specific and specialized icons (Figma, Github, CommercetoolsCube, etc.)\n\n## Accessibility\n\nIcon is a visual element that requires proper accessibility considerations:\n\n#### ARIA Attributes\n\n- Use `aria-label` for standalone icons that convey meaning\n- Use `aria-hidden=\"true\"` for decorative icons next to text labels\n- Ensure sufficient color contrast (avoid relying solely on color)\n\n```tsx\n{/* Standalone icon - needs label */}\n<IconButton aria-label=\"Delete item\" icon={Icons.Delete} />\n\n{/* Decorative icon with text - hide from screen readers */}\n<Button>\n <Icon as={Icons.Save} aria-hidden=\"true\" />\n Save Document\n</Button>\n```\n\n#### Keyboard navigation\n\nIcons themselves are not interactive. When icons need to be clickable:\n- Wrap them in Button or IconButton components\n- Ensure the parent element is keyboard accessible\n- Provide appropriate focus indicators\n\n#### Persistent ID\n\nIf your use case requires tracking and analytics for this component, it is good practice to add a **persistent**, **unique** id to the component:\n\n```tsx\n<Icon id=\"status-icon-success\" as={Icons.CheckCircle} />\n```\n\n## API reference\n\n<PropsTable id=\"Icon\" />\n\n## Common patterns\n\n### Icons in buttons\n\nCombine icons with buttons for enhanced visual communication:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"row\" gap=\"200\">\n <Button size=\"xs\" variant=\"solid\" colorPalette=\"primary\">\n <Icon as={Icons.Add} />\n Create New\n </Button>\n <Button size=\"xs\" variant=\"outline\">\n <Icon as={Icons.Save} />\n Save\n </Button>\n <Button size=\"xs\" variant=\"ghost\">\n <Icon as={Icons.Delete} />\n Delete\n </Button>\n </Stack>\n)\n```\n\n### Status indicators\n\nUse colored icons to indicate status or state:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"column\" gap=\"300\">\n <Stack direction=\"row\" gap=\"300\" align=\"center\">\n <Icon as={Icons.CheckCircle} color=\"positive.11\" size=\"sm\" />\n <Text>Operation completed successfully</Text>\n </Stack>\n <Stack direction=\"row\" gap=\"300\" align=\"center\">\n <Icon as={Icons.Error} color=\"critical.11\" size=\"sm\" />\n <Text>An error occurred</Text>\n </Stack>\n <Stack direction=\"row\" gap=\"300\" align=\"center\">\n <Icon as={Icons.Warning} color=\"warning.11\" size=\"sm\" />\n <Text>Warning: Check your input</Text>\n </Stack>\n <Stack direction=\"row\" gap=\"300\" align=\"center\">\n <Icon as={Icons.Info} color=\"info.11\" size=\"sm\" />\n <Text>Additional information available</Text>\n </Stack>\n </Stack>\n)\n```\n\n### Navigation icons\n\nCreate icon-based navigation elements:\n\n```jsx live-dev\nconst App = () => {\n const [selected, setSelected] = React.useState(\"home\");\n \n const NavItem = ({ id, icon, label }) => (\n <Stack \n direction=\"column\" \n gap=\"100\" \n align=\"center\"\n p=\"300\"\n borderRadius=\"200\"\n bg={selected === id ? \"primary.3\" : \"transparent\"}\n color={selected === id ? \"primary.11\" : \"neutral.11\"}\n cursor=\"pointer\"\n onClick={() => setSelected(id)}\n _hover={{ bg: selected === id ? \"primary.3\" : \"neutral.3\" }}\n >\n <Icon as={icon} size=\"md\" />\n <Text fontSize=\"xs\">{label}</Text>\n </Stack>\n );\n \n return (\n <Stack direction=\"row\" gap=\"200\" p=\"400\" bg=\"neutral.2\" borderRadius=\"200\">\n <NavItem id=\"home\" icon={Icons.Home} label=\"Home\" />\n <NavItem id=\"search\" icon={Icons.Search} label=\"Search\" />\n <NavItem id=\"notifications\" icon={Icons.Notifications} label=\"Alerts\" />\n <NavItem id=\"settings\" icon={Icons.Settings} label=\"Settings\" />\n </Stack>\n );\n}\n```\n\n### Icon lists\n\nDisplay lists with icon indicators:\n\n```jsx live-dev\nconst App = () => {\n const features = [\n { icon: Icons.CheckCircle, text: \"Real-time synchronization\", color: \"positive.11\" },\n { icon: Icons.Security, text: \"Enterprise-grade security\", color: \"info.11\" },\n { icon: Icons.Speed, text: \"Lightning-fast performance\", color: \"primary.11\" },\n { icon: Icons.CloudDone, text: \"Cloud-based storage\", color: \"info.11\" },\n ];\n \n return (\n <Stack direction=\"column\" gap=\"300\">\n {features.map((feature, index) => (\n <Stack key={index} direction=\"row\" gap=\"300\" align=\"center\">\n <Icon as={feature.icon} color={feature.color} size=\"sm\" />\n <Text>{feature.text}</Text>\n </Stack>\n ))}\n </Stack>\n );\n}\n```\n\n### File type indicators\n\nUse icons to represent different file types or content:\n\n```jsx live-dev\nconst App = () => {\n const files = [\n { name: \"Document.pdf\", icon: Icons.PictureAsPdf, color: \"critical.11\" },\n { name: \"Spreadsheet.xlsx\", icon: Icons.TableChart, color: \"positive.11\" },\n { name: \"Presentation.pptx\", icon: Icons.Slideshow, color: \"warning.11\" },\n { name: \"Image.jpg\", icon: Icons.Image, color: \"info.11\" },\n { name: \"Archive.zip\", icon: Icons.FolderZip, color: \"neutral.11\" },\n ];\n \n return (\n <Stack direction=\"column\" gap=\"200\">\n {files.map((file, index) => (\n <Stack \n key={index} \n direction=\"row\" \n gap=\"300\" \n align=\"center\"\n p=\"300\"\n borderRadius=\"200\"\n _hover={{ bg: \"neutral.3\" }}\n >\n <Icon as={file.icon} color={file.color} size=\"md\" />\n <Text>{file.name}</Text>\n </Stack>\n ))}\n </Stack>\n );\n}\n```\n\n## Testing your implementation\n\nThese examples demonstrate how to test your implementation when using Icon 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 Icon component renders with expected structure\n\n```tsx\nimport { describe, it, expect } from \"vitest\";\nimport { render, screen } from \"@testing-library/react\";\nimport { Icon, NimbusProvider } from \"@commercetools/nimbus\";\nimport { CheckCircle, Settings, Star } from \"@commercetools/nimbus-icons\";\n\ndescribe(\"Icon - Basic rendering\", () => {\n it(\"renders icon with children\", () => {\n render(\n <NimbusProvider>\n <Icon data-testid=\"icon-children\">\n <CheckCircle />\n </Icon>\n </NimbusProvider>\n );\n\n const icon = screen.getByTestId(\"icon-children\");\n expect(icon).toBeInTheDocument();\n expect(icon.tagName).toBe(\"svg\");\n });\n\n it(\"renders icon using as prop\", () => {\n render(\n <NimbusProvider>\n <Icon as={Settings} data-testid=\"icon-as-prop\" />\n </NimbusProvider>\n );\n\n const icon = screen.getByTestId(\"icon-as-prop\");\n expect(icon).toBeInTheDocument();\n expect(icon.tagName).toBe(\"svg\");\n });\n\n it(\"renders as inline-block display\", () => {\n render(\n <NimbusProvider>\n <Icon as={Star} data-testid=\"icon-display\" />\n </NimbusProvider>\n );\n\n const icon = screen.getByTestId(\"icon-display\");\n expect(icon).toHaveStyle({ display: \"inline\" });\n });\n});\n```\n\n### Size Variant Tests\n\nTest predefined size variants and custom sizing\n\n```tsx\nimport { describe, it, expect } from \"vitest\";\nimport { render, screen } from \"@testing-library/react\";\nimport { Icon, NimbusProvider } from \"@commercetools/nimbus\";\nimport { CheckCircle, Settings, Star } from \"@commercetools/nimbus-icons\";\n\ndescribe(\"Icon - Size variants\", () => {\n it(\"applies 2xs size variant\", () => {\n render(\n <NimbusProvider>\n <Icon as={Star} size=\"2xs\" data-testid=\"icon-2xs\" />\n </NimbusProvider>\n );\n\n const icon = screen.getByTestId(\"icon-2xs\");\n // boxSize \"600\" token should be applied\n expect(icon).toHaveClass(\"nimbus-icon\");\n });\n\n it(\"applies xs size variant\", () => {\n render(\n <NimbusProvider>\n <Icon as={Star} size=\"xs\" data-testid=\"icon-xs\" />\n </NimbusProvider>\n );\n\n const icon = screen.getByTestId(\"icon-xs\");\n expect(icon).toHaveClass(\"nimbus-icon\");\n });\n\n it(\"applies md size variant\", () => {\n render(\n <NimbusProvider>\n <Icon as={Star} size=\"md\" data-testid=\"icon-md\" />\n </NimbusProvider>\n );\n\n const icon = screen.getByTestId(\"icon-md\");\n expect(icon).toHaveClass(\"nimbus-icon\");\n });\n\n it(\"applies xl size variant\", () => {\n render(\n <NimbusProvider>\n <Icon as={Star} size=\"xl\" data-testid=\"icon-xl\" />\n </NimbusProvider>\n );\n\n const icon = screen.getByTestId(\"icon-xl\");\n expect(icon).toHaveClass(\"nimbus-icon\");\n });\n\n it(\"applies custom size with boxSize prop\", () => {\n render(\n <NimbusProvider>\n <Icon as={Star} boxSize=\"2400\" data-testid=\"icon-custom-size\" />\n </NimbusProvider>\n );\n\n const icon = screen.getByTestId(\"icon-custom-size\");\n expect(icon).toHaveStyle({\n width: \"var(--nimbus-sizes-2400)\",\n height: \"var(--nimbus-sizes-2400)\",\n });\n });\n});\n```\n\n### Color Customization Tests\n\nTest icon color prop with various values\n\n```tsx\nimport { describe, it, expect } from \"vitest\";\nimport { render, screen } from \"@testing-library/react\";\nimport { Icon, NimbusProvider } from \"@commercetools/nimbus\";\nimport { CheckCircle, Settings, Star } from \"@commercetools/nimbus-icons\";\n\ndescribe(\"Icon - Color customization\", () => {\n it(\"applies color from Nimbus color token\", () => {\n render(\n <NimbusProvider>\n <Icon as={CheckCircle} color=\"primary.11\" data-testid=\"icon-color\" />\n </NimbusProvider>\n );\n\n const icon = screen.getByTestId(\"icon-color\");\n expect(icon).toBeInTheDocument();\n // Color is applied through Chakra's color system\n });\n\n it(\"applies custom CSS color\", () => {\n render(\n <NimbusProvider>\n <Icon as={Star} color=\"deeppink\" data-testid=\"icon-custom-color\" />\n </NimbusProvider>\n );\n\n const icon = screen.getByTestId(\"icon-custom-color\");\n expect(icon).toHaveStyle({ color: \"rgb(255, 20, 147)\" });\n });\n\n it(\"inherits color when not specified\", () => {\n render(\n <NimbusProvider>\n <div style={{ color: \"blue\" }}>\n <Icon as={Settings} data-testid=\"icon-inherit-color\" />\n </div>\n </NimbusProvider>\n );\n\n const icon = screen.getByTestId(\"icon-inherit-color\");\n expect(icon).toBeInTheDocument();\n });\n});\n```\n\n### Style Props Tests\n\nTest that Icon accepts color and boxSize props\n\n```tsx\nimport { describe, it, expect } from \"vitest\";\nimport { render, screen } from \"@testing-library/react\";\nimport { Icon, NimbusProvider } from \"@commercetools/nimbus\";\nimport { CheckCircle, Settings, Star } from \"@commercetools/nimbus-icons\";\n\ndescribe(\"Icon - Style props\", () => {\n it(\"applies boxSize for width and height\", () => {\n render(\n <NimbusProvider>\n <Icon as={Star} boxSize=\"1600\" data-testid=\"icon-boxsize\" />\n </NimbusProvider>\n );\n\n const icon = screen.getByTestId(\"icon-boxsize\");\n expect(icon).toHaveStyle({\n width: \"var(--nimbus-sizes-1600)\",\n height: \"var(--nimbus-sizes-1600)\",\n });\n });\n\n it(\"combines size and color props\", () => {\n render(\n <NimbusProvider>\n <Icon\n as={Star}\n size=\"lg\"\n color=\"primary.11\"\n data-testid=\"icon-combined\"\n />\n </NimbusProvider>\n );\n\n const icon = screen.getByTestId(\"icon-combined\");\n expect(icon).toHaveClass(\"nimbus-icon\");\n // Color is applied via Chakra's color system\n expect(icon).toHaveAttribute(\"data-testid\", \"icon-combined\");\n });\n});\n```\n\n### Props Forwarding Tests\n\nVerify that Icon forwards data and ARIA attributes\n\n```tsx\nimport { describe, it, expect } from \"vitest\";\nimport { render, screen } from \"@testing-library/react\";\nimport { Icon, NimbusProvider } from \"@commercetools/nimbus\";\nimport { CheckCircle, Settings, Star } from \"@commercetools/nimbus-icons\";\n\ndescribe(\"Icon - Props forwarding\", () => {\n it(\"forwards data attributes\", () => {\n render(\n <NimbusProvider>\n <Icon\n as={CheckCircle}\n data-testid=\"icon-data\"\n data-custom=\"custom-value\"\n />\n </NimbusProvider>\n );\n\n const icon = screen.getByTestId(\"icon-data\");\n expect(icon).toHaveAttribute(\"data-custom\", \"custom-value\");\n });\n\n it(\"forwards ARIA attributes\", () => {\n render(\n <NimbusProvider>\n <Icon\n as={CheckCircle}\n aria-label=\"Success icon\"\n aria-hidden=\"false\"\n data-testid=\"icon-aria\"\n />\n </NimbusProvider>\n );\n\n const icon = screen.getByTestId(\"icon-aria\");\n expect(icon).toHaveAttribute(\"aria-label\", \"Success icon\");\n expect(icon).toHaveAttribute(\"aria-hidden\", \"false\");\n });\n\n it(\"supports aria-hidden for decorative icons\", () => {\n render(\n <NimbusProvider>\n <Icon as={Star} aria-hidden=\"true\" data-testid=\"icon-decorative\" />\n </NimbusProvider>\n );\n\n const icon = screen.getByTestId(\"icon-decorative\");\n expect(icon).toHaveAttribute(\"aria-hidden\", \"true\");\n });\n});\n```\n\n### Ref Forwarding Tests\n\nVerify that Icon properly forwards refs to the underlying SVG element\n\n```tsx\nimport { describe, it, expect } from \"vitest\";\nimport { render, screen } from \"@testing-library/react\";\nimport { Icon, NimbusProvider } from \"@commercetools/nimbus\";\nimport { CheckCircle, Settings, Star } from \"@commercetools/nimbus-icons\";\n\ndescribe(\"Icon - Ref forwarding\", () => {\n it(\"forwards ref to underlying SVG element\", () => {\n const ref = { current: null as SVGSVGElement | null };\n\n render(\n <NimbusProvider>\n <Icon ref={ref} as={CheckCircle} />\n </NimbusProvider>\n );\n\n expect(ref.current).toBeInstanceOf(SVGSVGElement);\n expect(ref.current?.tagName).toBe(\"svg\");\n });\n\n it(\"allows access to DOM methods through ref\", () => {\n const ref = { current: null as SVGSVGElement | null };\n\n render(\n <NimbusProvider>\n <Icon ref={ref} as={Settings} />\n </NimbusProvider>\n );\n\n expect(ref.current).not.toBeNull();\n expect(typeof ref.current?.getBoundingClientRect).toBe(\"function\");\n });\n});\n```\n\n### Custom SVG Tests\n\nTest Icon with custom SVG elements\n\n```tsx\nimport { describe, it, expect } from \"vitest\";\nimport { render, screen } from \"@testing-library/react\";\nimport { Icon, NimbusProvider } from \"@commercetools/nimbus\";\nimport { CheckCircle, Settings, Star } from \"@commercetools/nimbus-icons\";\n\ndescribe(\"Icon - Custom SVG\", () => {\n it(\"renders custom SVG as children\", () => {\n const CustomSvg = () => (\n <svg data-testid=\"custom-svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 2L2 7l10 5 10-5-10-5z\" />\n </svg>\n );\n\n render(\n <NimbusProvider>\n <Icon>\n <CustomSvg />\n </Icon>\n </NimbusProvider>\n );\n\n const customSvg = screen.getByTestId(\"custom-svg\");\n expect(customSvg).toBeInTheDocument();\n });\n\n it(\"applies size to custom SVG\", () => {\n const CustomSvg = () => (\n <svg data-testid=\"custom-svg-sized\" viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n </svg>\n );\n\n render(\n <NimbusProvider>\n <Icon size=\"lg\">\n <CustomSvg />\n </Icon>\n </NimbusProvider>\n );\n\n const customSvg = screen.getByTestId(\"custom-svg-sized\");\n // The custom SVG is rendered as a child of the Icon wrapper\n expect(customSvg).toBeInTheDocument();\n });\n});\n```\n\n\n## Resources\n\n- [Storybook](https://nimbus-storybook.vercel.app/?path=/docs/components-icon--docs)\n- [Material Design Icons](https://fonts.google.com/icons)\n- [ARIA Authoring Practices - Icon Usage](https://www.w3.org/WAI/ARIA/apg/)\n",
264
+ "toc": [
265
+ {
266
+ "value": "Getting started",
267
+ "href": "#getting-started",
268
+ "depth": 2,
269
+ "numbering": [
270
+ 1,
271
+ 1
272
+ ],
273
+ "parent": "root"
274
+ },
275
+ {
276
+ "value": "Import",
277
+ "href": "#import",
278
+ "depth": 3,
279
+ "numbering": [
280
+ 1,
281
+ 1,
282
+ 1
283
+ ],
284
+ "parent": "root"
285
+ },
286
+ {
287
+ "value": "Basic usage",
288
+ "href": "#basic-usage",
289
+ "depth": 3,
290
+ "numbering": [
291
+ 1,
292
+ 1,
293
+ 2
294
+ ],
295
+ "parent": "root"
296
+ },
297
+ {
298
+ "value": "Usage examples",
299
+ "href": "#usage-examples",
300
+ "depth": 2,
301
+ "numbering": [
302
+ 1,
303
+ 2
304
+ ],
305
+ "parent": "root"
306
+ },
307
+ {
308
+ "value": "Size variants",
309
+ "href": "#size-variants",
310
+ "depth": 3,
311
+ "numbering": [
312
+ 1,
313
+ 2,
314
+ 1
315
+ ],
316
+ "parent": "root"
317
+ },
318
+ {
319
+ "value": "Custom size",
320
+ "href": "#custom-size",
321
+ "depth": 3,
322
+ "numbering": [
323
+ 1,
324
+ 2,
325
+ 2
326
+ ],
327
+ "parent": "root"
328
+ },
329
+ {
330
+ "value": "Color customization",
331
+ "href": "#color-customization",
332
+ "depth": 3,
333
+ "numbering": [
334
+ 1,
335
+ 2,
336
+ 3
337
+ ],
338
+ "parent": "root"
339
+ },
340
+ {
341
+ "value": "Using the as prop",
342
+ "href": "#using-the-as-prop",
343
+ "depth": 3,
344
+ "numbering": [
345
+ 1,
346
+ 2,
347
+ 4
348
+ ],
349
+ "parent": "root"
350
+ },
351
+ {
352
+ "value": "With custom SVG",
353
+ "href": "#with-custom-svg",
354
+ "depth": 3,
355
+ "numbering": [
356
+ 1,
357
+ 2,
358
+ 5
359
+ ],
360
+ "parent": "root"
361
+ },
362
+ {
363
+ "value": "Responsive sizing",
364
+ "href": "#responsive-sizing",
365
+ "depth": 3,
366
+ "numbering": [
367
+ 1,
368
+ 2,
369
+ 6
370
+ ],
371
+ "parent": "root"
372
+ },
373
+ {
374
+ "value": "Styling with Chakra props",
375
+ "href": "#styling-with-chakra-props",
376
+ "depth": 3,
377
+ "numbering": [
378
+ 1,
379
+ 2,
380
+ 7
381
+ ],
382
+ "parent": "root"
383
+ },
384
+ {
385
+ "value": "Component requirements",
386
+ "href": "#component-requirements",
387
+ "depth": 2,
388
+ "numbering": [
389
+ 1,
390
+ 3
391
+ ],
392
+ "parent": "root"
393
+ },
394
+ {
395
+ "value": "Usage context",
396
+ "href": "#usage-context",
397
+ "depth": 3,
398
+ "numbering": [
399
+ 1,
400
+ 3,
401
+ 1
402
+ ],
403
+ "parent": "root"
404
+ },
405
+ {
406
+ "value": "Accessibility",
407
+ "href": "#accessibility",
408
+ "depth": 2,
409
+ "numbering": [
410
+ 1,
411
+ 4
412
+ ],
413
+ "parent": "root"
414
+ },
415
+ {
416
+ "value": "ARIA Attributes",
417
+ "href": "#aria-attributes",
418
+ "depth": 4,
419
+ "numbering": [
420
+ 1,
421
+ 4,
422
+ 1,
423
+ 1
424
+ ],
425
+ "parent": "root"
426
+ },
427
+ {
428
+ "value": "Keyboard navigation",
429
+ "href": "#keyboard-navigation",
430
+ "depth": 4,
431
+ "numbering": [
432
+ 1,
433
+ 4,
434
+ 1,
435
+ 2
436
+ ],
437
+ "parent": "root"
438
+ },
439
+ {
440
+ "value": "Persistent ID",
441
+ "href": "#persistent-id",
442
+ "depth": 4,
443
+ "numbering": [
444
+ 1,
445
+ 4,
446
+ 1,
447
+ 3
448
+ ],
449
+ "parent": "root"
450
+ },
451
+ {
452
+ "value": "API reference",
453
+ "href": "#api-reference",
454
+ "depth": 2,
455
+ "numbering": [
456
+ 1,
457
+ 5
458
+ ],
459
+ "parent": "root"
460
+ },
461
+ {
462
+ "value": "Common patterns",
463
+ "href": "#common-patterns",
464
+ "depth": 2,
465
+ "numbering": [
466
+ 1,
467
+ 6
468
+ ],
469
+ "parent": "root"
470
+ },
471
+ {
472
+ "value": "Icons in buttons",
473
+ "href": "#icons-in-buttons",
474
+ "depth": 3,
475
+ "numbering": [
476
+ 1,
477
+ 6,
478
+ 1
479
+ ],
480
+ "parent": "root"
481
+ },
482
+ {
483
+ "value": "Status indicators",
484
+ "href": "#status-indicators",
485
+ "depth": 3,
486
+ "numbering": [
487
+ 1,
488
+ 6,
489
+ 2
490
+ ],
491
+ "parent": "root"
492
+ },
493
+ {
494
+ "value": "Navigation icons",
495
+ "href": "#navigation-icons",
496
+ "depth": 3,
497
+ "numbering": [
498
+ 1,
499
+ 6,
500
+ 3
501
+ ],
502
+ "parent": "root"
503
+ },
504
+ {
505
+ "value": "Icon lists",
506
+ "href": "#icon-lists",
507
+ "depth": 3,
508
+ "numbering": [
509
+ 1,
510
+ 6,
511
+ 4
512
+ ],
513
+ "parent": "root"
514
+ },
515
+ {
516
+ "value": "File type indicators",
517
+ "href": "#file-type-indicators",
518
+ "depth": 3,
519
+ "numbering": [
520
+ 1,
521
+ 6,
522
+ 5
523
+ ],
524
+ "parent": "root"
525
+ },
526
+ {
527
+ "value": "Testing your implementation",
528
+ "href": "#testing-your-implementation",
529
+ "depth": 2,
530
+ "numbering": [
531
+ 1,
532
+ 7
533
+ ],
534
+ "parent": "root"
535
+ },
536
+ {
537
+ "value": "Basic Rendering Tests",
538
+ "href": "#basic-rendering-tests",
539
+ "depth": 3,
540
+ "numbering": [
541
+ 1,
542
+ 7,
543
+ 1
544
+ ],
545
+ "parent": "root"
546
+ },
547
+ {
548
+ "value": "Size Variant Tests",
549
+ "href": "#size-variant-tests",
550
+ "depth": 3,
551
+ "numbering": [
552
+ 1,
553
+ 7,
554
+ 2
555
+ ],
556
+ "parent": "root"
557
+ },
558
+ {
559
+ "value": "Color Customization Tests",
560
+ "href": "#color-customization-tests",
561
+ "depth": 3,
562
+ "numbering": [
563
+ 1,
564
+ 7,
565
+ 3
566
+ ],
567
+ "parent": "root"
568
+ },
569
+ {
570
+ "value": "Style Props Tests",
571
+ "href": "#style-props-tests",
572
+ "depth": 3,
573
+ "numbering": [
574
+ 1,
575
+ 7,
576
+ 4
577
+ ],
578
+ "parent": "root"
579
+ },
580
+ {
581
+ "value": "Props Forwarding Tests",
582
+ "href": "#props-forwarding-tests",
583
+ "depth": 3,
584
+ "numbering": [
585
+ 1,
586
+ 7,
587
+ 5
588
+ ],
589
+ "parent": "root"
590
+ },
591
+ {
592
+ "value": "Ref Forwarding Tests",
593
+ "href": "#ref-forwarding-tests",
594
+ "depth": 3,
595
+ "numbering": [
596
+ 1,
597
+ 7,
598
+ 6
599
+ ],
600
+ "parent": "root"
601
+ },
602
+ {
603
+ "value": "Custom SVG Tests",
604
+ "href": "#custom-svg-tests",
605
+ "depth": 3,
606
+ "numbering": [
607
+ 1,
608
+ 7,
609
+ 7
610
+ ],
611
+ "parent": "root"
612
+ },
613
+ {
614
+ "value": "Resources",
615
+ "href": "#resources",
616
+ "depth": 2,
617
+ "numbering": [
618
+ 1,
619
+ 8
620
+ ],
621
+ "parent": "root"
622
+ }
623
+ ]
624
+ },
625
+ "guidelines": {
626
+ "mdx": "\n## Guidelines\n\nIcon guidelines establish principles for designing and using consistent,\nrecognizable, and accessible graphical symbols. They ensure icons clearly convey\nmeaning, maintain visual harmony, and function effectively across various\ncontexts and screen sizes while adhering to accessibility standards.\n\n### Best practices\n\n- **Clarity & Recognition:**\n - **Be intuitive:** Design icons that are instantly recognizable and clearly\n convey their meaning without needing extensive explanation.\n - **Supplement with text:** If an icon's meaning might be ambiguous, pair it\n with a text label, especially for critical actions.\n- **Consistency & Style:**\n - **Maintain visual harmony:** Ensure all icons adhere to a consistent visual\n style (e.g., line weight, fill vs. outline, corner radius, perspective).\n - **Use consistently:** Always use the same icon to represent the same action\n or concept throughout the entire product.\n - **Ensure proper alignment:** Pay attention to pixel grid alignment for\n crispness, especially at smaller sizes.\n- **Usability & Interaction:**\n - **Provide clear states:** Ideally, if using an icon as an interactive\n element, use the [Icon button](components/inputs/iconbutton) to enable\n distinct visual states (e.g., hover, focus, active, disabled).\n - **Ensure sufficient target size:** Make clickable icons large enough for\n easy interaction, especially on touch devices (minimum 44x44px target area).\n- **Accessibility:**\n - **Always provide text alternatives:** Use alt text for `<img>` tags or\n aria-label for interactive SVG icons to convey their meaning to screen\n readers.\n - **Ensure sufficient contrast:** Verify that icons have enough color contrast\n against their background.\n - **Don't rely solely on icons:** Critical information should not be conveyed\n only by an icon; always have a text equivalent or context.\n- **Scalability & Optimization:**\n - **Design for scalability:** Create icons in a vector format (like SVG) to\n ensure they look sharp at any size.\n - **Optimize performance:** Minimize icon file sizes to ensure fast loading\n times.\n\n### Usage\n\n> [!TIP]\\\n> When to use\n\n- **To supplement text labels:** When paired with text, icons enhance\n comprehension, add visual interest, and aid scannability, especially for\n common actions (e.g., a \"Save\" icon next to the word \"Save\").\n- **For universally recognized actions:** When an icon's meaning is clear\n without any text label (e.g., \"Print,\" \"Search,\" \"Home,\" \"Trash/Delete\").\n These are excellent for saving space.\n- **To indicate state or status:** Showing the status of an item (e.g., a \"lock\"\n icon for private, an \"eye\" icon for visible, a \"check\" icon for completed).\n- **For brand recognition & aesthetics:** To reinforce brand identity or add a\n consistent visual style where the icon is purely decorative or supplementary\n to already clear text.\n- **In space-constrained areas:** In toolbars, navigation bars, or other areas\n where screen real estate is minimal, provided the icons are highly intuitive.\n- **To aid users with reading/language difficulties:** Icons can serve as\n powerful visual cues for users who struggle with text-heavy interfaces or who\n are not fluent in the interface's language.\n\n> [!CAUTION]\\\n> When not to use\n\n- **As the sole indicator for ambiguous actions:** If an icon's meaning isn't\n immediately obvious or could be misinterpreted, do not use it without a text\n label or a tooltip. This is a common accessibility and usability pitfall.\n- **For critical information without redundancy:** Never rely only on an icon to\n convey crucial information (e.g., an error, a warning) that a user must\n understand. Always pair it with text or color.\n- **Over-decorating:** Using too many icons purely for aesthetic reasons can\n lead to visual clutter and distract users from important content or actions.\n- **Inconsistent usage:** Using the same icon for different meanings in\n different parts of the application, or different icons for the same meaning.\n This creates confusion.\n- **Unscalable or low-resolution icons:** Using raster images that pixelate when\n scaled up, or icons that lose clarity at small sizes.\n- **Overly complex or detailed icons:** Icons should be simple and easy to\n understand at a glance. Too much detail makes them hard to interpret,\n especially at smaller sizes.\n- **Obscuring important content:** Placing icons in a way that blocks or\n detracts from the main content.\n- **Neglecting accessibility attributes:** Not providing alt text or aria-labels\n for icons used as interactive elements or conveying meaning, leaving screen\n reader users without context.\n",
627
+ "toc": [
628
+ {
629
+ "value": "Guidelines",
630
+ "href": "#guidelines",
631
+ "depth": 2,
632
+ "numbering": [
633
+ 1,
634
+ 1
635
+ ],
636
+ "parent": "root"
637
+ },
638
+ {
639
+ "value": "Best practices",
640
+ "href": "#best-practices",
641
+ "depth": 3,
642
+ "numbering": [
643
+ 1,
644
+ 1,
645
+ 1
646
+ ],
647
+ "parent": "root"
648
+ },
649
+ {
650
+ "value": "Usage",
651
+ "href": "#usage",
652
+ "depth": 3,
653
+ "numbering": [
654
+ 1,
655
+ 1,
656
+ 2
657
+ ],
658
+ "parent": "root"
659
+ }
660
+ ]
661
+ }
662
+ }
663
+ }