@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,588 @@
1
+ {
2
+ "meta": {
3
+ "id": "Components-SearchInput",
4
+ "title": "Search input",
5
+ "exportName": "SearchInput",
6
+ "description": "Allows users to discover and filter content by entering text to help users find relevant information efficiently.",
7
+ "lifecycleState": "Stable",
8
+ "order": 999,
9
+ "repoPath": "packages/nimbus/src/components/search-input/search-input.mdx",
10
+ "menu": [
11
+ "Components",
12
+ "Inputs",
13
+ "Search input"
14
+ ],
15
+ "route": "components/inputs/search-input",
16
+ "tags": [
17
+ "component",
18
+ "search",
19
+ "input"
20
+ ],
21
+ "toc": [
22
+ {
23
+ "value": "Overview",
24
+ "href": "#overview",
25
+ "depth": 2,
26
+ "numbering": [
27
+ 1,
28
+ 1
29
+ ],
30
+ "parent": "root"
31
+ },
32
+ {
33
+ "value": "Resources",
34
+ "href": "#resources",
35
+ "depth": 3,
36
+ "numbering": [
37
+ 1,
38
+ 1,
39
+ 1
40
+ ],
41
+ "parent": "root"
42
+ },
43
+ {
44
+ "value": "Variables",
45
+ "href": "#variables",
46
+ "depth": 2,
47
+ "numbering": [
48
+ 1,
49
+ 2
50
+ ],
51
+ "parent": "root"
52
+ },
53
+ {
54
+ "value": "Visual Options",
55
+ "href": "#visual-options",
56
+ "depth": 3,
57
+ "numbering": [
58
+ 1,
59
+ 2,
60
+ 1
61
+ ],
62
+ "parent": "root"
63
+ },
64
+ {
65
+ "value": "Size",
66
+ "href": "#size",
67
+ "depth": 4,
68
+ "numbering": [
69
+ 1,
70
+ 2,
71
+ 1,
72
+ 1
73
+ ],
74
+ "parent": "root"
75
+ },
76
+ {
77
+ "value": "Appearance",
78
+ "href": "#appearance",
79
+ "depth": 3,
80
+ "numbering": [
81
+ 1,
82
+ 2,
83
+ 2
84
+ ],
85
+ "parent": "root"
86
+ }
87
+ ],
88
+ "layout": "app-frame",
89
+ "tabs": [
90
+ {
91
+ "key": "overview",
92
+ "title": "Overview",
93
+ "order": 0
94
+ },
95
+ {
96
+ "key": "guidelines",
97
+ "title": "Guidelines",
98
+ "order": 2
99
+ },
100
+ {
101
+ "key": "dev",
102
+ "title": "Implementation",
103
+ "order": 3
104
+ },
105
+ {
106
+ "key": "a11y",
107
+ "title": "Accessibility",
108
+ "order": 4
109
+ }
110
+ ]
111
+ },
112
+ "mdx": "\n## Overview\n\nSearch inputs provide a dedicated text field for users to enter keywords or phrases to query and retrieve matching data or content. They are essential for navigating large amounts of information.\n\n### Resources\n\nDeep dive into implementation details and access the Nimbus design library.\n\n[React Aria SearchField](https://react-spectrum.adobe.com/react-aria/SearchField.html)\n[Figma Library](https://www.figma.com/design/AvtPX6g7OGGCRvNlatGOIY/NIMBUS-design-system?node-id=6005-17482&m=dev)\n\n## Variables\n\nGet familiar with the features.\n\n### Visual Options\n\n#### Size\n\nThe medium size of the SearchInput is default, the small size is meant for more compact uses.\n\n```jsx live\nconst App = () => (\n <Stack direction=\"row\" gap=\"400\" alignItems=\"center\">\n <SearchInput size=\"md\" placeholder=\"Search...\" />\n <SearchInput size=\"sm\" placeholder=\"Search...\" />\n </Stack>\n)\n```\n\n### Appearance\n\nAllows switching the visual style between solid and ghost appearance.\n\n```jsx live\nconst App = () => (\n <Stack direction=\"row\" gap=\"400\" alignItems=\"center\">\n <SearchInput variant=\"solid\" placeholder=\"Search...\" />\n <SearchInput variant=\"ghost\" placeholder=\"Search...\" />\n </Stack>\n)\n```\n",
113
+ "views": {
114
+ "overview": {
115
+ "mdx": "\n## Overview\n\nSearch inputs provide a dedicated text field for users to enter keywords or phrases to query and retrieve matching data or content. They are essential for navigating large amounts of information.\n\n### Resources\n\nDeep dive into implementation details and access the Nimbus design library.\n\n[React Aria SearchField](https://react-spectrum.adobe.com/react-aria/SearchField.html)\n[Figma Library](https://www.figma.com/design/AvtPX6g7OGGCRvNlatGOIY/NIMBUS-design-system?node-id=6005-17482&m=dev)\n\n## Variables\n\nGet familiar with the features.\n\n### Visual Options\n\n#### Size\n\nThe medium size of the SearchInput is default, the small size is meant for more compact uses.\n\n```jsx live\nconst App = () => (\n <Stack direction=\"row\" gap=\"400\" alignItems=\"center\">\n <SearchInput size=\"md\" placeholder=\"Search...\" />\n <SearchInput size=\"sm\" placeholder=\"Search...\" />\n </Stack>\n)\n```\n\n### Appearance\n\nAllows switching the visual style between solid and ghost appearance.\n\n```jsx live\nconst App = () => (\n <Stack direction=\"row\" gap=\"400\" alignItems=\"center\">\n <SearchInput variant=\"solid\" placeholder=\"Search...\" />\n <SearchInput variant=\"ghost\" placeholder=\"Search...\" />\n </Stack>\n)\n```\n",
116
+ "toc": [
117
+ {
118
+ "value": "Overview",
119
+ "href": "#overview",
120
+ "depth": 2,
121
+ "numbering": [
122
+ 1,
123
+ 1
124
+ ],
125
+ "parent": "root"
126
+ },
127
+ {
128
+ "value": "Resources",
129
+ "href": "#resources",
130
+ "depth": 3,
131
+ "numbering": [
132
+ 1,
133
+ 1,
134
+ 1
135
+ ],
136
+ "parent": "root"
137
+ },
138
+ {
139
+ "value": "Variables",
140
+ "href": "#variables",
141
+ "depth": 2,
142
+ "numbering": [
143
+ 1,
144
+ 2
145
+ ],
146
+ "parent": "root"
147
+ },
148
+ {
149
+ "value": "Visual Options",
150
+ "href": "#visual-options",
151
+ "depth": 3,
152
+ "numbering": [
153
+ 1,
154
+ 2,
155
+ 1
156
+ ],
157
+ "parent": "root"
158
+ },
159
+ {
160
+ "value": "Size",
161
+ "href": "#size",
162
+ "depth": 4,
163
+ "numbering": [
164
+ 1,
165
+ 2,
166
+ 1,
167
+ 1
168
+ ],
169
+ "parent": "root"
170
+ },
171
+ {
172
+ "value": "Appearance",
173
+ "href": "#appearance",
174
+ "depth": 3,
175
+ "numbering": [
176
+ 1,
177
+ 2,
178
+ 2
179
+ ],
180
+ "parent": "root"
181
+ }
182
+ ]
183
+ },
184
+ "a11y": {
185
+ "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 <SearchInput\n placeholder=\"Search products...\"\n aria-label=\"Search\"\n />\n);\n```\n\n### Accessibility standards\n\n- Always provide a visible label or clear `aria-label` for the search input.\n- Use `type=\"search\"` or `role=\"search\"` to identify the search functionality to\n assistive technologies.\n- Ensure sufficient color contrast for all elements (text, borders, icons, focus\n indicators).\n- Clearly indicate the focused state with visible focus indicators.\n- Support keyboard navigation using Tab to focus and Enter to submit search.\n- Provide clear feedback when search results are loading or no results are\n found.\n- Announce search results and status changes to screen readers using ARIA live\n regions.\n- Include a clear button to reset or clear the search input.\n- If search suggestions appear, ensure they are keyboard accessible and properly\n announced.\n\n### Resources\n\n- [W3C ARIA Authoring Practices Guide (APG) - Search](https://www.w3.org/WAI/ARIA/apg/patterns/landmarks/examples/search.html)\n- [Adobe Spectrum Design System](https://spectrum.adobe.com/page/search/)\n",
186
+ "toc": [
187
+ {
188
+ "value": "Accessibility",
189
+ "href": "#accessibility",
190
+ "depth": 2,
191
+ "numbering": [
192
+ 1,
193
+ 1
194
+ ],
195
+ "parent": "root"
196
+ },
197
+ {
198
+ "value": "Accessibility standards",
199
+ "href": "#accessibility-standards",
200
+ "depth": 3,
201
+ "numbering": [
202
+ 1,
203
+ 1,
204
+ 1
205
+ ],
206
+ "parent": "root"
207
+ },
208
+ {
209
+ "value": "Resources",
210
+ "href": "#resources",
211
+ "depth": 3,
212
+ "numbering": [
213
+ 1,
214
+ 1,
215
+ 2
216
+ ],
217
+ "parent": "root"
218
+ }
219
+ ]
220
+ },
221
+ "dev": {
222
+ "mdx": "\n## Getting started\n\n### Import\n\n```tsx\nimport { SearchInput, type SearchInputProps } from '@commercetools/nimbus';\n```\n\n### Basic usage\n\nThe simplest implementation uses uncontrolled mode:\n\n```jsx live-dev\nconst App = () => (\n <SearchInput placeholder=\"Search...\" />\n)\n```\n\n## Usage examples\n\n### Size options\n\nThe `sm` and `md` size variants are available to match your interface density:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"column\" gap=\"400\">\n <SearchInput size=\"sm\" placeholder=\"Small search\" />\n <SearchInput size=\"md\" placeholder=\"Medium search (default)\" />\n </Stack>\n)\n```\n\n### Visual variants\n\nChoose between `solid` and `ghost` variants to match your design context:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"column\" gap=\"400\">\n <SearchInput variant=\"solid\" placeholder=\"Solid variant (default)\" />\n <SearchInput variant=\"ghost\" placeholder=\"Ghost variant\" />\n </Stack>\n)\n```\n\n### Clear button behavior\n\nSearchInput includes a built-in clear button that automatically appears when the input has a value:\n\n```jsx live-dev\nconst App = () => {\n const [value, setValue] = useState<string>('');\n\n return (\n <Stack direction=\"column\" gap=\"400\">\n <SearchInput\n value={value}\n onChange={setValue}\n placeholder=\"Type to see clear button...\"\n />\n <Text fontSize=\"sm\">\n Current value: {value || '(empty)'}\n </Text>\n </Stack>\n );\n}\n```\n\n**Behavioral notes:**\n- Clear button is always present in the DOM but hidden when input is empty\n- Clear button has `opacity: 0` and `pointerEvents: none` when hidden\n- Clear button automatically transitions when value changes\n- Clear button is disabled when input is disabled or read-only\n- Clear button has an internationalized aria-label (\"Clear search input\")\n\n### Disabled state\n\nDisable input interaction with the `isDisabled` prop:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"column\" gap=\"400\">\n <SearchInput placeholder=\"Enabled search\" />\n <SearchInput placeholder=\"Disabled search\" isDisabled />\n <SearchInput\n value=\"Disabled with value\"\n isDisabled\n onChange={() => {}}\n />\n </Stack>\n)\n```\n\n### Invalid state\n\nMark inputs as invalid for validation feedback:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"column\" gap=\"400\">\n <SearchInput\n placeholder=\"Valid search\"\n value=\"valid query\"\n onChange={() => {}}\n />\n <SearchInput\n placeholder=\"Invalid search\"\n value=\"error\"\n isInvalid\n onChange={() => {}}\n />\n </Stack>\n)\n```\n\n### Read-only state\n\nUse `isReadOnly` to display values without allowing editing:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"column\" gap=\"400\">\n <SearchInput\n value=\"Editable search\"\n onChange={() => {}}\n />\n <SearchInput\n value=\"Read-only search\"\n isReadOnly\n onChange={() => {}}\n />\n </Stack>\n)\n```\n\n### Event handlers\n\nSearchInput supports three event handlers for different interaction patterns:\n\n```jsx live-dev\nconst App = () => {\n const [value, setValue] = useState<string>('');\n const [submitted, setSubmitted] = useState<string>('');\n const [clearCount, setClearCount] = useState<number>(0);\n\n return (\n <Stack direction=\"column\" gap=\"400\">\n <SearchInput\n value={value}\n onChange={(newValue) => {\n setValue(newValue);\n }}\n onSubmit={(submittedValue) => {\n setSubmitted(submittedValue);\n }}\n onClear={() => {\n setClearCount((count) => count + 1);\n }}\n placeholder=\"Type and press Enter...\"\n />\n <Stack direction=\"column\" gap=\"200\" fontSize=\"sm\">\n <Text>Current: {value || '(empty)'}</Text>\n <Text>Submitted: {submitted || '(none)'}</Text>\n <Text>Clear count: {clearCount}</Text>\n </Stack>\n </Stack>\n );\n}\n```\n\n**Event handler details:**\n- `onChange`: Called when input value changes (on every keystroke)\n- `onSubmit`: Called when user presses Enter\n- `onClear`: Called when user clicks the clear button or presses Escape\n\n### Uncontrolled mode\n\nFor simpler use cases, use uncontrolled mode with `defaultValue` and `onChange`:\n\n```jsx live-dev\nconst App = () => {\n const [displayValue, setDisplayValue] = useState<string>('');\n\n return (\n <Stack direction=\"column\" gap=\"400\">\n <SearchInput\n placeholder=\"Type something...\"\n defaultValue=\"\"\n onChange={(value) => {\n setDisplayValue(value);\n }}\n />\n <Text fontSize=\"sm\">Current value: {displayValue || '(empty)'}</Text>\n </Stack>\n );\n}\n```\n\nUse uncontrolled mode when you need to capture the input value without managing state yourself.\n\n**Note:** SearchInput's `onChange` receives the string value directly, not an event object.\n\n### Controlled mode\n\nFor scenarios requiring programmatic control or coordination with other components, use controlled mode:\n\n```jsx live-dev\nconst App = () => {\n const [value, setValue] = useState<string>('');\n\n return (\n <Stack direction=\"column\" gap=\"400\">\n <SearchInput\n value={value}\n onChange={(value) => setValue(value)}\n placeholder=\"Controlled search\"\n />\n <Text fontSize=\"sm\">\n {value ? `Searching for: ${value}` : 'Start typing...'}\n </Text>\n <Button onClick={() => setValue('')}>\n Clear programmatically\n </Button>\n </Stack>\n );\n}\n```\n\nUse controlled mode when you need to:\n- Synchronize the value with external state\n- Validate or transform search queries\n- Clear or programmatically set the value\n- React to changes in real-time\n- Coordinate with other components (like displaying search results)\n\n## Component requirements\n\n## Accessibility\n\nThe SearchInput handles most accessibility requirements internally. However, you must always associate an internationalized label with the component. Visual labels are preferable, and can be set by:\n\n- Using the `SearchInputField` pattern component (if available, recommended)\n- Associating a `<label>` element with the `SearchInput` using `aria-labelledby`:\n\n```tsx\n<label id=\"search-label\">\n {msg.format(searchMessage)}\n</label>\n<SearchInput aria-labelledby=\"search-label\" />\n```\n\n- Associating a `<label>` element with the `SearchInput` using `htmlFor`:\n\n```tsx\n<label htmlFor=\"search-input\">\n {msg.format(searchMessage)}\n</label>\n<SearchInput id=\"search-input\" />\n```\n\nIf your design requires that the label should not be visible, the label should be set using the `aria-label` prop:\n\n```tsx\n<SearchInput aria-label={msg.format(searchMessage)} />\n```\n\nIf your use case requires tracking and analytics for this component, it is good practice to add a **persistent**, **unique** id to the component:\n\n```tsx\nconst PERSISTENT_ID = \"product-search-input\";\n\nexport const ProductSearch = () => (\n <SearchInput id={PERSISTENT_ID} placeholder=\"Search products...\" />\n);\n```\n\n#### Keyboard navigation\n\nThe component supports full keyboard interaction:\n- `Tab` / `Shift+Tab`: Navigate to/from the search field\n- `Arrow keys`: Move cursor within the text (Left/Right)\n- `Home` / `End`: Move cursor to start/end of text\n- `Ctrl+A` / `Cmd+A`: Select all text\n- `Enter`: Submit search (triggers `onSubmit` handler)\n- `Escape`: Clear the search input (triggers `onClear` handler)\n- Standard text editing shortcuts: Cut, Copy, Paste, Undo, Redo\n\n#### Click-to-focus behavior\n\nClicking anywhere within the input container (including the search icon area) will focus the input field, providing a larger interactive target for better usability.\n\n## API reference\n\n<PropsTable id=\"SearchInput\" />\n\n## Common patterns\n\n### Search with live filtering\n\nDisplay results that update as the user types:\n\n```jsx live-dev\nconst App = () => {\n const [query, setQuery] = useState<string>('');\n\n const products = [\n 'Laptop', 'Phone', 'Tablet', 'Monitor', 'Keyboard',\n 'Mouse', 'Headphones', 'Camera', 'Printer', 'Scanner'\n ];\n\n const filteredProducts = products.filter(product =>\n product.toLowerCase().includes(query.toLowerCase())\n );\n\n return (\n <Stack direction=\"column\" gap=\"400\">\n <SearchInput\n value={query}\n onChange={setQuery}\n placeholder=\"Search products...\"\n />\n <Stack direction=\"column\" gap=\"200\">\n {query && filteredProducts.length === 0 && (\n <Text fontSize=\"sm\" color=\"neutral.11\">\n No results found for \"{query}\"\n </Text>\n )}\n {query && filteredProducts.length > 0 && (\n <Text fontSize=\"sm\" fontWeight=\"medium\">\n Found {filteredProducts.length} result{filteredProducts.length !== 1 ? 's' : ''}:\n </Text>\n )}\n {query && filteredProducts.map(product => (\n <Text key={product} fontSize=\"sm\">\n • {product}\n </Text>\n ))}\n </Stack>\n </Stack>\n );\n}\n```\n\n### Search with submit action\n\nHandle search submission with Enter key or button click:\n\n```jsx live-dev\nconst App = () => {\n const [query, setQuery] = useState<string>('');\n const [results, setResults] = useState<string[]>([]);\n const [isSearching, setIsSearching] = useState<boolean>(false);\n\n const performSearch = (searchQuery: string) => {\n if (!searchQuery.trim()) {\n setResults([]);\n return;\n }\n\n setIsSearching(true);\n\n // Simulate API call delay\n setTimeout(() => {\n const mockResults = [\n `Result 1 for \"${searchQuery}\"`,\n `Result 2 for \"${searchQuery}\"`,\n `Result 3 for \"${searchQuery}\"`,\n ];\n setResults(mockResults);\n setIsSearching(false);\n }, 500);\n };\n\n return (\n <Stack direction=\"column\" gap=\"400\">\n <Stack direction=\"row\" gap=\"200\" alignItems=\"center\">\n <SearchInput\n value={query}\n onChange={setQuery}\n onSubmit={performSearch}\n placeholder=\"Type and press Enter...\"\n />\n <Button\n onClick={() => performSearch(query)}\n size=\"md\"\n >\n Search\n </Button>\n </Stack>\n\n {isSearching && (\n <Text fontSize=\"sm\" color=\"neutral.11\">\n Searching...\n </Text>\n )}\n\n {!isSearching && results.length > 0 && (\n <Stack direction=\"column\" gap=\"200\">\n <Text fontSize=\"sm\" fontWeight=\"medium\">\n Search Results:\n </Text>\n {results.map((result, index) => (\n <Text key={index} fontSize=\"sm\">\n • {result}\n </Text>\n ))}\n </Stack>\n )}\n </Stack>\n );\n}\n```\n\n## Testing your implementation\n\nThese examples demonstrate how to test your implementation when using SearchInput within your application. As the component's internal functionality is already tested by Nimbus, these patterns help you verify your integration and application-specific logic.\n\n### Basic Rendering Tests\n\nVerify the component renders with expected elements\n\n```tsx\nimport { describe, it, expect, vi } from \"vitest\";\nimport { render, screen, waitFor } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { SearchInput, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"SearchInput - Basic rendering\", () => {\n it(\"renders search input with search icon\", () => {\n render(\n <NimbusProvider>\n <SearchInput placeholder=\"Search...\" aria-label=\"Search\" />\n </NimbusProvider>\n );\n\n const searchBox = screen.getByRole(\"searchbox\");\n expect(searchBox).toBeInTheDocument();\n expect(searchBox).toHaveAttribute(\"type\", \"search\");\n expect(searchBox).toHaveAttribute(\"placeholder\", \"Search...\");\n });\n\n it(\"renders with clear button (hidden when empty)\", () => {\n render(\n <NimbusProvider>\n <SearchInput placeholder=\"Search...\" aria-label=\"Search\" />\n </NimbusProvider>\n );\n\n // Clear button is always in DOM\n const clearButton = screen.getByRole(\"button\", { hidden: true });\n expect(clearButton).toBeInTheDocument();\n\n // But hidden visually when empty\n const computedStyle = window.getComputedStyle(clearButton);\n expect(computedStyle.opacity).toBe(\"0\");\n expect(computedStyle.pointerEvents).toBe(\"none\");\n });\n});\n```\n\n### Interaction Tests\n\nTest user interactions with the search input\n\n```tsx\nimport { describe, it, expect, vi } from \"vitest\";\nimport { render, screen, waitFor } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { SearchInput, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"SearchInput - Interactions\", () => {\n it(\"handles typing in search input\", async () => {\n const user = userEvent.setup();\n render(\n <NimbusProvider>\n <SearchInput placeholder=\"Search...\" aria-label=\"Search\" />\n </NimbusProvider>\n );\n\n const searchBox = screen.getByRole(\"searchbox\");\n await user.type(searchBox, \"test query\");\n\n expect(searchBox).toHaveValue(\"test query\");\n });\n\n it(\"calls onChange with string value on input\", async () => {\n const user = userEvent.setup();\n const handleChange = vi.fn();\n\n render(\n <NimbusProvider>\n <SearchInput\n onChange={handleChange}\n placeholder=\"Search...\"\n aria-label=\"Search\"\n />\n </NimbusProvider>\n );\n\n const searchBox = screen.getByRole(\"searchbox\");\n await user.type(searchBox, \"test\");\n\n // onChange receives string, not event\n expect(handleChange).toHaveBeenCalledWith(\"test\");\n });\n\n it(\"shows clear button when input has value\", async () => {\n const user = userEvent.setup();\n render(\n <NimbusProvider>\n <SearchInput placeholder=\"Search...\" aria-label=\"Search\" />\n </NimbusProvider>\n );\n\n const searchBox = screen.getByRole(\"searchbox\");\n await user.type(searchBox, \"test\");\n\n const clearButton = screen.getByRole(\"button\");\n\n await waitFor(() => {\n const computedStyle = window.getComputedStyle(clearButton);\n expect(computedStyle.opacity).toBe(\"1\");\n expect(computedStyle.pointerEvents).toBe(\"auto\");\n });\n });\n\n it(\"clears input when clear button is clicked\", async () => {\n const user = userEvent.setup();\n render(\n <NimbusProvider>\n <SearchInput placeholder=\"Search...\" aria-label=\"Search\" />\n </NimbusProvider>\n );\n\n const searchBox = screen.getByRole(\"searchbox\");\n await user.type(searchBox, \"test query\");\n expect(searchBox).toHaveValue(\"test query\");\n\n const clearButton = screen.getByRole(\"button\");\n await user.click(clearButton);\n\n expect(searchBox).toHaveValue(\"\");\n });\n\n it(\"calls onClear when clear button is clicked\", async () => {\n const user = userEvent.setup();\n const handleClear = vi.fn();\n\n render(\n <NimbusProvider>\n <SearchInput\n defaultValue=\"test\"\n onClear={handleClear}\n placeholder=\"Search...\"\n aria-label=\"Search\"\n />\n </NimbusProvider>\n );\n\n const clearButton = screen.getByRole(\"button\");\n await user.click(clearButton);\n\n expect(handleClear).toHaveBeenCalled();\n });\n});\n```\n\n### Keyboard Navigation Tests\n\nTest keyboard interactions and shortcuts\n\n```tsx\nimport { describe, it, expect, vi } from \"vitest\";\nimport { render, screen, waitFor } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { SearchInput, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"SearchInput - Keyboard navigation\", () => {\n it(\"focuses on tab key\", async () => {\n const user = userEvent.setup();\n render(\n <NimbusProvider>\n <SearchInput placeholder=\"Search...\" aria-label=\"Search\" />\n </NimbusProvider>\n );\n\n const searchBox = screen.getByRole(\"searchbox\");\n expect(searchBox).not.toHaveFocus();\n\n await user.tab();\n expect(searchBox).toHaveFocus();\n });\n\n it(\"clears input on Escape key\", async () => {\n const user = userEvent.setup();\n render(\n <NimbusProvider>\n <SearchInput placeholder=\"Search...\" aria-label=\"Search\" />\n </NimbusProvider>\n );\n\n const searchBox = screen.getByRole(\"searchbox\");\n await user.type(searchBox, \"test query\");\n expect(searchBox).toHaveValue(\"test query\");\n\n await user.keyboard(\"{Escape}\");\n expect(searchBox).toHaveValue(\"\");\n });\n\n it(\"calls onSubmit on Enter key\", async () => {\n const user = userEvent.setup();\n const handleSubmit = vi.fn();\n\n render(\n <NimbusProvider>\n <SearchInput\n onSubmit={handleSubmit}\n placeholder=\"Search...\"\n aria-label=\"Search\"\n />\n </NimbusProvider>\n );\n\n const searchBox = screen.getByRole(\"searchbox\");\n await user.type(searchBox, \"test query\");\n await user.keyboard(\"{Enter}\");\n\n expect(handleSubmit).toHaveBeenCalledWith(\"test query\");\n });\n});\n```\n\n### Controlled Mode Tests\n\nTest controlled component behavior\n\n```tsx\nimport { describe, it, expect, vi } from \"vitest\";\nimport { render, screen, waitFor } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { SearchInput, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"SearchInput - Controlled mode\", () => {\n it(\"updates controlled value via onChange\", async () => {\n const user = userEvent.setup();\n const handleChange = vi.fn();\n\n const { rerender } = render(\n <NimbusProvider>\n <SearchInput\n value=\"\"\n onChange={handleChange}\n placeholder=\"Search...\"\n aria-label=\"Search\"\n />\n </NimbusProvider>\n );\n\n const searchBox = screen.getByRole(\"searchbox\");\n await user.type(searchBox, \"test\");\n\n // onChange called once per character - receives strings\n expect(handleChange).toHaveBeenCalledTimes(4);\n\n // Verify all calls receive strings\n for (const call of handleChange.mock.calls) {\n expect(typeof call[0]).toBe(\"string\");\n }\n\n // Rerender with new value\n rerender(\n <NimbusProvider>\n <SearchInput\n value=\"test\"\n onChange={handleChange}\n placeholder=\"Search...\"\n aria-label=\"Search\"\n />\n </NimbusProvider>\n );\n\n expect(searchBox).toHaveValue(\"test\");\n });\n\n it(\"can be programmatically cleared\", async () => {\n let value = \"initial value\";\n const handleChange = vi.fn((newValue: string) => {\n value = newValue;\n });\n\n const { rerender } = render(\n <NimbusProvider>\n <SearchInput\n value={value}\n onChange={handleChange}\n placeholder=\"Search...\"\n aria-label=\"Search\"\n />\n </NimbusProvider>\n );\n\n const searchBox = screen.getByRole(\"searchbox\");\n expect(searchBox).toHaveValue(\"initial value\");\n\n // Programmatically clear\n value = \"\";\n rerender(\n <NimbusProvider>\n <SearchInput\n value={value}\n onChange={handleChange}\n placeholder=\"Search...\"\n aria-label=\"Search\"\n />\n </NimbusProvider>\n );\n\n expect(searchBox).toHaveValue(\"\");\n });\n});\n```\n\n### State Tests\n\nTest disabled, invalid, and read-only states\n\n```tsx\nimport { describe, it, expect, vi } from \"vitest\";\nimport { render, screen, waitFor } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { SearchInput, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"SearchInput - States\", () => {\n it(\"disables input when isDisabled is true\", async () => {\n const user = userEvent.setup();\n render(\n <NimbusProvider>\n <SearchInput isDisabled placeholder=\"Search...\" aria-label=\"Search\" />\n </NimbusProvider>\n );\n\n const searchBox = screen.getByRole(\"searchbox\");\n expect(searchBox).toBeDisabled();\n\n // Cannot type when disabled\n await user.type(searchBox, \"test\");\n expect(searchBox).toHaveValue(\"\");\n });\n\n it(\"marks input as invalid when isInvalid is true\", () => {\n render(\n <NimbusProvider>\n <SearchInput isInvalid placeholder=\"Search...\" aria-label=\"Search\" />\n </NimbusProvider>\n );\n\n const searchBox = screen.getByRole(\"searchbox\");\n // Check parent container for data-invalid attribute\n const container = searchBox.closest(\"[data-invalid]\");\n expect(container).toHaveAttribute(\"data-invalid\", \"true\");\n });\n\n it(\"prevents editing when isReadOnly is true\", async () => {\n const user = userEvent.setup();\n render(\n <NimbusProvider>\n <SearchInput\n isReadOnly\n defaultValue=\"read-only value\"\n placeholder=\"Search...\"\n aria-label=\"Search\"\n />\n </NimbusProvider>\n );\n\n const searchBox = screen.getByRole(\"searchbox\");\n expect(searchBox).toHaveAttribute(\"readonly\");\n expect(searchBox).toHaveValue(\"read-only value\");\n\n // Cannot type when read-only\n await user.click(searchBox);\n await user.type(searchBox, \"test\");\n expect(searchBox).toHaveValue(\"read-only value\");\n });\n\n it(\"disables clear button when input is disabled\", () => {\n render(\n <NimbusProvider>\n <SearchInput\n isDisabled\n defaultValue=\"test\"\n placeholder=\"Search...\"\n aria-label=\"Search\"\n />\n </NimbusProvider>\n );\n\n const clearButton = screen.getByRole(\"button\", { hidden: true });\n expect(clearButton).toBeDisabled();\n });\n\n it(\"disables clear button when input is read-only\", () => {\n render(\n <NimbusProvider>\n <SearchInput\n isReadOnly\n defaultValue=\"test\"\n placeholder=\"Search...\"\n aria-label=\"Search\"\n />\n </NimbusProvider>\n );\n\n const clearButton = screen.getByRole(\"button\");\n expect(clearButton).toBeDisabled();\n });\n});\n```\n\n### Event Handler Tests\n\nTest onChange, onSubmit, and onClear event handlers\n\n```tsx\nimport { describe, it, expect, vi } from \"vitest\";\nimport { render, screen, waitFor } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { SearchInput, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"SearchInput - Event handlers\", () => {\n it(\"calls all event handlers appropriately\", async () => {\n const user = userEvent.setup();\n const handleChange = vi.fn();\n const handleSubmit = vi.fn();\n const handleClear = vi.fn();\n\n render(\n <NimbusProvider>\n <SearchInput\n onChange={handleChange}\n onSubmit={handleSubmit}\n onClear={handleClear}\n placeholder=\"Search...\"\n aria-label=\"Search\"\n />\n </NimbusProvider>\n );\n\n const searchBox = screen.getByRole(\"searchbox\");\n\n // Type to trigger onChange\n await user.type(searchBox, \"test\");\n expect(handleChange).toHaveBeenCalled();\n expect(handleChange).toHaveBeenLastCalledWith(\"test\");\n\n // Press Enter to trigger onSubmit\n await user.keyboard(\"{Enter}\");\n expect(handleSubmit).toHaveBeenCalledWith(\"test\");\n\n // Click clear button to trigger onClear\n const clearButton = screen.getByRole(\"button\");\n await user.click(clearButton);\n expect(handleClear).toHaveBeenCalled();\n });\n\n it(\"clears value on Escape key when focused\", async () => {\n const user = userEvent.setup();\n\n render(\n <NimbusProvider>\n <SearchInput\n defaultValue=\"test value\"\n placeholder=\"Search...\"\n aria-label=\"Search\"\n />\n </NimbusProvider>\n );\n\n const searchBox = screen.getByRole(\"searchbox\");\n expect(searchBox).toHaveValue(\"test value\");\n\n // Focus the input first\n await user.click(searchBox);\n await user.keyboard(\"{Escape}\");\n\n expect(searchBox).toHaveValue(\"\");\n });\n});\n```\n\n\n## Resources\n\n- [Storybook](https://nimbus-storybook.vercel.app/?path=/docs/components-searchinput--docs)\n- [React Aria SearchField](https://react-spectrum.adobe.com/react-aria/SearchField.html)\n- [ARIA Search Pattern](https://www.w3.org/WAI/ARIA/apg/patterns/landmarks/examples/search.html)\n",
223
+ "toc": [
224
+ {
225
+ "value": "Getting started",
226
+ "href": "#getting-started",
227
+ "depth": 2,
228
+ "numbering": [
229
+ 1,
230
+ 1
231
+ ],
232
+ "parent": "root"
233
+ },
234
+ {
235
+ "value": "Import",
236
+ "href": "#import",
237
+ "depth": 3,
238
+ "numbering": [
239
+ 1,
240
+ 1,
241
+ 1
242
+ ],
243
+ "parent": "root"
244
+ },
245
+ {
246
+ "value": "Basic usage",
247
+ "href": "#basic-usage",
248
+ "depth": 3,
249
+ "numbering": [
250
+ 1,
251
+ 1,
252
+ 2
253
+ ],
254
+ "parent": "root"
255
+ },
256
+ {
257
+ "value": "Usage examples",
258
+ "href": "#usage-examples",
259
+ "depth": 2,
260
+ "numbering": [
261
+ 1,
262
+ 2
263
+ ],
264
+ "parent": "root"
265
+ },
266
+ {
267
+ "value": "Size options",
268
+ "href": "#size-options",
269
+ "depth": 3,
270
+ "numbering": [
271
+ 1,
272
+ 2,
273
+ 1
274
+ ],
275
+ "parent": "root"
276
+ },
277
+ {
278
+ "value": "Visual variants",
279
+ "href": "#visual-variants",
280
+ "depth": 3,
281
+ "numbering": [
282
+ 1,
283
+ 2,
284
+ 2
285
+ ],
286
+ "parent": "root"
287
+ },
288
+ {
289
+ "value": "Clear button behavior",
290
+ "href": "#clear-button-behavior",
291
+ "depth": 3,
292
+ "numbering": [
293
+ 1,
294
+ 2,
295
+ 3
296
+ ],
297
+ "parent": "root"
298
+ },
299
+ {
300
+ "value": "Disabled state",
301
+ "href": "#disabled-state",
302
+ "depth": 3,
303
+ "numbering": [
304
+ 1,
305
+ 2,
306
+ 4
307
+ ],
308
+ "parent": "root"
309
+ },
310
+ {
311
+ "value": "Invalid state",
312
+ "href": "#invalid-state",
313
+ "depth": 3,
314
+ "numbering": [
315
+ 1,
316
+ 2,
317
+ 5
318
+ ],
319
+ "parent": "root"
320
+ },
321
+ {
322
+ "value": "Read-only state",
323
+ "href": "#read-only-state",
324
+ "depth": 3,
325
+ "numbering": [
326
+ 1,
327
+ 2,
328
+ 6
329
+ ],
330
+ "parent": "root"
331
+ },
332
+ {
333
+ "value": "Event handlers",
334
+ "href": "#event-handlers",
335
+ "depth": 3,
336
+ "numbering": [
337
+ 1,
338
+ 2,
339
+ 7
340
+ ],
341
+ "parent": "root"
342
+ },
343
+ {
344
+ "value": "Uncontrolled mode",
345
+ "href": "#uncontrolled-mode",
346
+ "depth": 3,
347
+ "numbering": [
348
+ 1,
349
+ 2,
350
+ 8
351
+ ],
352
+ "parent": "root"
353
+ },
354
+ {
355
+ "value": "Controlled mode",
356
+ "href": "#controlled-mode",
357
+ "depth": 3,
358
+ "numbering": [
359
+ 1,
360
+ 2,
361
+ 9
362
+ ],
363
+ "parent": "root"
364
+ },
365
+ {
366
+ "value": "Component requirements",
367
+ "href": "#component-requirements",
368
+ "depth": 2,
369
+ "numbering": [
370
+ 1,
371
+ 3
372
+ ],
373
+ "parent": "root"
374
+ },
375
+ {
376
+ "value": "Accessibility",
377
+ "href": "#accessibility",
378
+ "depth": 2,
379
+ "numbering": [
380
+ 1,
381
+ 4
382
+ ],
383
+ "parent": "root"
384
+ },
385
+ {
386
+ "value": "Keyboard navigation",
387
+ "href": "#keyboard-navigation",
388
+ "depth": 4,
389
+ "numbering": [
390
+ 1,
391
+ 4,
392
+ 1,
393
+ 1
394
+ ],
395
+ "parent": "root"
396
+ },
397
+ {
398
+ "value": "Click-to-focus behavior",
399
+ "href": "#click-to-focus-behavior",
400
+ "depth": 4,
401
+ "numbering": [
402
+ 1,
403
+ 4,
404
+ 1,
405
+ 2
406
+ ],
407
+ "parent": "root"
408
+ },
409
+ {
410
+ "value": "API reference",
411
+ "href": "#api-reference",
412
+ "depth": 2,
413
+ "numbering": [
414
+ 1,
415
+ 5
416
+ ],
417
+ "parent": "root"
418
+ },
419
+ {
420
+ "value": "Common patterns",
421
+ "href": "#common-patterns",
422
+ "depth": 2,
423
+ "numbering": [
424
+ 1,
425
+ 6
426
+ ],
427
+ "parent": "root"
428
+ },
429
+ {
430
+ "value": "Search with live filtering",
431
+ "href": "#search-with-live-filtering",
432
+ "depth": 3,
433
+ "numbering": [
434
+ 1,
435
+ 6,
436
+ 1
437
+ ],
438
+ "parent": "root"
439
+ },
440
+ {
441
+ "value": "Search with submit action",
442
+ "href": "#search-with-submit-action",
443
+ "depth": 3,
444
+ "numbering": [
445
+ 1,
446
+ 6,
447
+ 2
448
+ ],
449
+ "parent": "root"
450
+ },
451
+ {
452
+ "value": "Testing your implementation",
453
+ "href": "#testing-your-implementation",
454
+ "depth": 2,
455
+ "numbering": [
456
+ 1,
457
+ 7
458
+ ],
459
+ "parent": "root"
460
+ },
461
+ {
462
+ "value": "Basic Rendering Tests",
463
+ "href": "#basic-rendering-tests",
464
+ "depth": 3,
465
+ "numbering": [
466
+ 1,
467
+ 7,
468
+ 1
469
+ ],
470
+ "parent": "root"
471
+ },
472
+ {
473
+ "value": "Interaction Tests",
474
+ "href": "#interaction-tests",
475
+ "depth": 3,
476
+ "numbering": [
477
+ 1,
478
+ 7,
479
+ 2
480
+ ],
481
+ "parent": "root"
482
+ },
483
+ {
484
+ "value": "Keyboard Navigation Tests",
485
+ "href": "#keyboard-navigation-tests",
486
+ "depth": 3,
487
+ "numbering": [
488
+ 1,
489
+ 7,
490
+ 3
491
+ ],
492
+ "parent": "root"
493
+ },
494
+ {
495
+ "value": "Controlled Mode Tests",
496
+ "href": "#controlled-mode-tests",
497
+ "depth": 3,
498
+ "numbering": [
499
+ 1,
500
+ 7,
501
+ 4
502
+ ],
503
+ "parent": "root"
504
+ },
505
+ {
506
+ "value": "State Tests",
507
+ "href": "#state-tests",
508
+ "depth": 3,
509
+ "numbering": [
510
+ 1,
511
+ 7,
512
+ 5
513
+ ],
514
+ "parent": "root"
515
+ },
516
+ {
517
+ "value": "Event Handler Tests",
518
+ "href": "#event-handler-tests",
519
+ "depth": 3,
520
+ "numbering": [
521
+ 1,
522
+ 7,
523
+ 6
524
+ ],
525
+ "parent": "root"
526
+ },
527
+ {
528
+ "value": "Resources",
529
+ "href": "#resources",
530
+ "depth": 2,
531
+ "numbering": [
532
+ 1,
533
+ 8
534
+ ],
535
+ "parent": "root"
536
+ }
537
+ ]
538
+ },
539
+ "guidelines": {
540
+ "mdx": "\n## Guidelines\n\nSearchInput guidelines focus on creating clear, accessible, and user-friendly\nsearch experiences by emphasizing proper placeholder text, clear visual\nfeedback, and keyboard accessibility.\n\n### Best practices\n\n- **Provide clear placeholder text:** Use brief, descriptive text inside the\n field (e.g., \"Search products,\" \"Find a customer\") to indicate what can be\n searched.\n- **Offer suggestions:** Implement type-ahead or autocomplete to offer relevant\n suggestions as the user types, improving speed and accuracy.\n- **Include a clear button:** Provide a control, often an \"X\" icon, to quickly\n clear the search query. This is typically placed on the right side of the\n field.\n- **Maintain consistency:** Place the search input in a predictable,\n easy-to-find location, such as the primary navigation bar or near the content\n being searched.\n- **Support keyboard interaction:** Ensure the input field and its associated\n suggestions are fully navigable using the keyboard (e.g., Tab, Enter, Arrow\n keys).\n- **Live Search:** The core function should be to trigger search or filtering\n logic on every value change (onChange), enabling an instantaneous search\n experience (live-search or auto-complete).\n- **Loading states:** Consider showing loading indicators when search is in\n progress.\n- **Immediate feedback:** Show search results as users type (debounced) or on\n submission.\n- **Error handling:** Display clear error messages when searches fail.\n\n### Usage\n\n> [!TIP]\\\n> When to use\n\n- **Live search:** You need to narrow down a visible list, table, or grid of\n items instantly as the user types. The search results update in real-time on\n the same screen.\n- **Autocomplete/Suggestions:** You need to provide a set of contextual\n suggestions that appear in a dropdown while the user is typing, leading to a\n final selection or submission.\n- **Global/Site-wide search:** The input serves as the primary entry point for\n finding content across the entire application or website.\n\n> [!CAUTION]\\\n> When not to use\n\n- **Simple filtering**: If filtering is better handled by dropdowns or\n checkboxes.\n- **Form submission**: Don't use for general text inputs that aren't\n search-related.\n- **Complex queries**: When users need advanced search features like boolean\n operators or multiple fields.\n\n### Do's and Don'ts\n\n> [!TIP]\\\n> **Do**\n>\n> - Provide clear placeholder text\n\n```jsx live\nconst App = () => (\n <SearchInput placeholder=\"Search by name...\" />\n)\n```\n\n> [!CAUTION]\\\n> **Don't**\n>\n> - Avoid long descriptive placeholders\n\n```jsx live\nconst App = () => (\n <SearchInput width=\"md\" placeholder=\"Please enter the name you are searching for\" />\n)\n```\n",
541
+ "toc": [
542
+ {
543
+ "value": "Guidelines",
544
+ "href": "#guidelines",
545
+ "depth": 2,
546
+ "numbering": [
547
+ 1,
548
+ 1
549
+ ],
550
+ "parent": "root"
551
+ },
552
+ {
553
+ "value": "Best practices",
554
+ "href": "#best-practices",
555
+ "depth": 3,
556
+ "numbering": [
557
+ 1,
558
+ 1,
559
+ 1
560
+ ],
561
+ "parent": "root"
562
+ },
563
+ {
564
+ "value": "Usage",
565
+ "href": "#usage",
566
+ "depth": 3,
567
+ "numbering": [
568
+ 1,
569
+ 1,
570
+ 2
571
+ ],
572
+ "parent": "root"
573
+ },
574
+ {
575
+ "value": "Do's and Don'ts",
576
+ "href": "#dos-and-donts",
577
+ "depth": 3,
578
+ "numbering": [
579
+ 1,
580
+ 1,
581
+ 3
582
+ ],
583
+ "parent": "root"
584
+ }
585
+ ]
586
+ }
587
+ }
588
+ }