@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,599 @@
1
+ {
2
+ "meta": {
3
+ "id": "Components-DateRangePicker",
4
+ "title": "Date range picker",
5
+ "exportName": "DateRangePicker",
6
+ "description": "Allows users to select a start and end date from a calendar interface.",
7
+ "lifecycleState": "Stable",
8
+ "order": 999,
9
+ "repoPath": "packages/nimbus/src/components/date-range-picker/date-range-picker.mdx",
10
+ "menu": [
11
+ "Components",
12
+ "Inputs",
13
+ "Date range picker"
14
+ ],
15
+ "route": "components/inputs/date-range-picker",
16
+ "tags": [
17
+ "component",
18
+ "date",
19
+ "calendar"
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": "Medium",
66
+ "href": "#medium",
67
+ "depth": 4,
68
+ "numbering": [
69
+ 1,
70
+ 2,
71
+ 1,
72
+ 1
73
+ ],
74
+ "parent": "root"
75
+ },
76
+ {
77
+ "value": "Small",
78
+ "href": "#small",
79
+ "depth": 4,
80
+ "numbering": [
81
+ 1,
82
+ 2,
83
+ 1,
84
+ 2
85
+ ],
86
+ "parent": "root"
87
+ }
88
+ ],
89
+ "layout": "app-frame",
90
+ "tabs": [
91
+ {
92
+ "key": "overview",
93
+ "title": "Overview",
94
+ "order": 0
95
+ },
96
+ {
97
+ "key": "guidelines",
98
+ "title": "Guidelines",
99
+ "order": 2
100
+ },
101
+ {
102
+ "key": "dev",
103
+ "title": "Implementation",
104
+ "order": 3
105
+ },
106
+ {
107
+ "key": "a11y",
108
+ "title": "Accessibility",
109
+ "order": 4
110
+ }
111
+ ]
112
+ },
113
+ "mdx": "\n## Overview\n\nDate range pickers allow users to select a range of dates. The component\nincludes two date input fields for start and end dates, and a calendar that\nappears on focus. This component uses a single input field to contain both the\nstart and end dates. There are two offered sizes, the default being medium for\nmost use cases.\n\n### Resources\n\nDeep dive into implementation details and access the Nimbus design library.\n\n[Figma library](https://www.figma.com/design/AvtPX6g7OGGCRvNlatGOIY/NIMBUS-design-system?node-id=5818-15879)\n\n## Variables\n\nGet familiar with the features.\n\n### Visual options\n\n#### Medium\n\n```jsx live\nconst App = () => <DateRangePicker size=\"md\" width=\"8000\" />\n```\n\n#### Small\n\n```jsx live\nconst App = () => <DateRangePicker size=\"sm\" width=\"8000\" />\n```\n",
114
+ "views": {
115
+ "overview": {
116
+ "mdx": "\n## Overview\n\nDate range pickers allow users to select a range of dates. The component\nincludes two date input fields for start and end dates, and a calendar that\nappears on focus. This component uses a single input field to contain both the\nstart and end dates. There are two offered sizes, the default being medium for\nmost use cases.\n\n### Resources\n\nDeep dive into implementation details and access the Nimbus design library.\n\n[Figma library](https://www.figma.com/design/AvtPX6g7OGGCRvNlatGOIY/NIMBUS-design-system?node-id=5818-15879)\n\n## Variables\n\nGet familiar with the features.\n\n### Visual options\n\n#### Medium\n\n```jsx live\nconst App = () => <DateRangePicker size=\"md\" width=\"8000\" />\n```\n\n#### Small\n\n```jsx live\nconst App = () => <DateRangePicker size=\"sm\" width=\"8000\" />\n```\n",
117
+ "toc": [
118
+ {
119
+ "value": "Overview",
120
+ "href": "#overview",
121
+ "depth": 2,
122
+ "numbering": [
123
+ 1,
124
+ 1
125
+ ],
126
+ "parent": "root"
127
+ },
128
+ {
129
+ "value": "Resources",
130
+ "href": "#resources",
131
+ "depth": 3,
132
+ "numbering": [
133
+ 1,
134
+ 1,
135
+ 1
136
+ ],
137
+ "parent": "root"
138
+ },
139
+ {
140
+ "value": "Variables",
141
+ "href": "#variables",
142
+ "depth": 2,
143
+ "numbering": [
144
+ 1,
145
+ 2
146
+ ],
147
+ "parent": "root"
148
+ },
149
+ {
150
+ "value": "Visual options",
151
+ "href": "#visual-options",
152
+ "depth": 3,
153
+ "numbering": [
154
+ 1,
155
+ 2,
156
+ 1
157
+ ],
158
+ "parent": "root"
159
+ },
160
+ {
161
+ "value": "Medium",
162
+ "href": "#medium",
163
+ "depth": 4,
164
+ "numbering": [
165
+ 1,
166
+ 2,
167
+ 1,
168
+ 1
169
+ ],
170
+ "parent": "root"
171
+ },
172
+ {
173
+ "value": "Small",
174
+ "href": "#small",
175
+ "depth": 4,
176
+ "numbering": [
177
+ 1,
178
+ 2,
179
+ 1,
180
+ 2
181
+ ],
182
+ "parent": "root"
183
+ }
184
+ ]
185
+ },
186
+ "a11y": {
187
+ "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 = () => <DateRangePicker aria-label=\"Enter date range\" />\n```\n\n### Accessibility standards\n\n- Always provide a visible label for the input.\n- Clearly associate the label with the input using the for attribute on the\n `<label>` and a matching id on the input element.\n- Ensure sufficient color contrast for all elements (text, borders, icons, focus\n indicators).\n- Clearly indicate the focused state.\n- Support keyboard navigation:\n- Use Tab to navigate to and from the date input.\n- Use Enter or Space to open/close the date picker (if applicable).\n- Use arrow keys to navigate within the calendar grid (if a date picker is\n provided).\n- Allow users to select dates using Enter or Space.\n- Communicate errors clearly, using both visual cues (e.g., color) and\n descriptive error messages.\n- Provide clear instructions on the expected date format (e.g., MM/DD/YYYY).\n- Ensure screen readers announce the selected date and any navigation changes\n within a date picker.\n- Provide an accessible way to clear the date input.\n\n### Resources\n\n- [React Spectrum](https://react-spectrum.adobe.com/react-spectrum/DateRangePicker.html)\n- [W3C ARIA Authoring Practices Guide (APG)](https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/examples/datepicker-dialog/)\n",
188
+ "toc": [
189
+ {
190
+ "value": "Accessibility",
191
+ "href": "#accessibility",
192
+ "depth": 2,
193
+ "numbering": [
194
+ 1,
195
+ 1
196
+ ],
197
+ "parent": "root"
198
+ },
199
+ {
200
+ "value": "Accessibility standards",
201
+ "href": "#accessibility-standards",
202
+ "depth": 3,
203
+ "numbering": [
204
+ 1,
205
+ 1,
206
+ 1
207
+ ],
208
+ "parent": "root"
209
+ },
210
+ {
211
+ "value": "Resources",
212
+ "href": "#resources",
213
+ "depth": 3,
214
+ "numbering": [
215
+ 1,
216
+ 1,
217
+ 2
218
+ ],
219
+ "parent": "root"
220
+ }
221
+ ]
222
+ },
223
+ "dev": {
224
+ "mdx": "\n## Getting started\n\n### Import\n\n```tsx\nimport { DateRangePicker, type DateRangePickerProps } from '@commercetools/nimbus';\n```\n\n### Basic usage\n\nThe simplest implementation uses uncontrolled mode:\n\n```jsx live-dev\nconst App = () => (\n <DateRangePicker />\n)\n```\n\n## Working with date values\n\nThe DateRangePicker relies on `@internationalized/date`'s library for type-safe date handling. This library provides calendar system support, time zone handling, and locale-aware date formatting.\n\n### Date value types\n\nThree primary date types are available depending on your needs:\n\n```tsx\nimport { CalendarDate, CalendarDateTime, ZonedDateTime } from '@internationalized/date';\n\n// Date only (no time)\nconst dateOnly = new CalendarDate(2024, 1, 15);\n\n// Date with time (no timezone)\nconst dateTime = new CalendarDateTime(2024, 1, 15, 14, 30);\n\n// Date with time and timezone\nconst zonedDate = new ZonedDateTime(2024, 1, 15, 14, 30, 'America/New_York');\n```\n\n### Creating date values\n\nUse helper functions to parse ISO strings or create dates programmatically:\n\n```tsx\nimport { parseDate, parseDateTime, parseZonedDateTime } from '@internationalized/date';\n\n// Parse ISO date strings\nconst date = parseDate('2024-01-15');\nconst dateTime = parseDateTime('2024-01-15T14:30');\nconst zonedDate = parseZonedDateTime('2024-01-15T14:30[America/New_York]');\n```\n\n### Converting to ISO strings\n\nUse `.toString()` to convert date objects for API/backend consumption:\n\n```tsx\n// Convert individual dates\nconst date = new CalendarDate(2024, 1, 15);\ndate.toString(); // \"2024-01-15\"\n\nconst dateTime = new CalendarDateTime(2024, 1, 15, 14, 30);\ndateTime.toString(); // \"2024-01-15T14:30:00\"\n\n// Convert date ranges for API calls\nconst dateRange = {\n start: new CalendarDate(2024, 1, 15),\n end: new CalendarDate(2024, 1, 20)\n};\n\nconst apiPayload = {\n startDate: dateRange.start.toString(), // \"2024-01-15\"\n endDate: dateRange.end.toString() // \"2024-01-20\"\n};\n```\n\n> [!TIP]\\\n> See [@internationalized/date documentation](https://react-spectrum.adobe.com/internationalized/date/) for complete API reference and advanced usage.\n\n### Date range structure\n\nThe component expects and returns date ranges in this structure:\n\n```tsx\ntype DateRange = {\n start: CalendarDate | CalendarDateTime | ZonedDateTime;\n end: CalendarDate | CalendarDateTime | ZonedDateTime;\n}\n\n// Note: While TypeScript allows mixing types, always use the same type for both\n// start and end to avoid semantic issues.\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 <DateRangePicker size=\"sm\" />\n <DateRangePicker size=\"md\" />\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 <DateRangePicker variant=\"solid\" />\n <DateRangePicker variant=\"ghost\" />\n </Stack>\n)\n```\n\n### Granularity options\n\nThe `granularity` prop controls both the level of date precision and the component's behavior:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"column\" gap=\"400\">\n <DateRangePicker granularity=\"day\" />\n <DateRangePicker granularity=\"minute\" />\n </Stack>\n)\n```\n\n**Behavioral differences:**\n- `granularity=\"day\"` (default): Calendar closes automatically after selecting the end date. Time inputs are hidden.\n- `granularity=\"hour\" | \"minute\" | \"second\"`: Calendar remains open after date selection, displaying time input fields in the footer. This allows users to set both dates and times in one interaction.\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 [selectedRange, setSelectedRange] = useState<string>('No selection');\n\n return (\n <>\n <DateRangePicker\n defaultValue={{\n start: new CalendarDate(2025, 1, 15),\n end: new CalendarDate(2025, 1, 20),\n }}\n onChange={(range) => {\n setSelectedRange(range ? `${range.start} to ${range.end}` : 'No selection');\n }}\n />\n <Text fontSize=\"sm\">{selectedRange}</Text>\n </>\n );\n}\n```\n\nUse uncontrolled mode when you need to capture the selected value without managing state yourself.\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<DateRangePickerProps[\"value\"]>(null);\n\n return (\n <Stack direction=\"column\" gap=\"400\">\n <DateRangePicker\n value={value}\n onChange={setValue}\n />\n <Text fontSize=\"sm\">\n {value ? `Selected: ${value.start} to ${value.end}` : 'No selection'}\n </Text>\n </Stack>\n );\n}\n```\n\nUse controlled mode when you need to:\n- Synchronize the date range with external state\n- Validate or transform date selections\n- Clear or programmatically set the date range\n\n### Time zone handling\n\nWhen working with `ZonedDateTime` values, configure time zone display and hour format:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"column\" gap=\"400\">\n <DateRangePicker\n granularity=\"minute\"\n hideTimeZone={false}\n hourCycle={24}\n />\n <DateRangePicker\n granularity=\"minute\"\n hideTimeZone={true}\n hourCycle={12}\n />\n </Stack>\n)\n```\n\n- `hideTimeZone`: Controls visibility of the time zone selector\n- `hourCycle`: Set to `12` for 12-hour format with AM/PM, or `24` for 24-hour format\n\n## Component requirements\n\n### Date value types\n\nAll date values **must** use `@internationalized/date` types:\n- `CalendarDate` for date-only scenarios\n- `CalendarDateTime` for dates with times (no timezone)\n- `ZonedDateTime` for timezone-aware dates\n\n## Accessibility\n\nThe DateRangePicker 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 `DateRangePickerField` pattern component (recommended)\n- Associating a `<label>` element with the `DateRangePicker` using `aria-labelledby`:\n\n```tsx\n<label id=\"label-id\">\n {msg.format(labelMessage)}\n</label>\n<DateRangePicker aria-labelledby=\"label-id\" />\n```\n\n- Associating a `<label>` element with the `DateRangePicker` using `htmlFor`:\n\n```tsx\n<label htmlFor=\"date-range-picker-id\">\n {msg.format(labelMessage)}\n</label>\n<DateRangePicker id=\"date-range-picker-id\" />\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<DateRangePicker aria-label={msg.format(labelMessage)} />\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 = \"example-date-range-picker\";\n\nexport const Example = () => (\n <DateRangePicker id={PERSISTENT_ID} />\n);\n```\n\n#### Keyboard navigation\n\nThe component supports full keyboard interaction:\n- `Tab` / `Shift+Tab`: Navigate between date segments and buttons\n- `Arrow keys`: Increment/decrement date segments and navigate calendar\n- `Enter` / `Space`: Open calendar, select dates\n- `Escape`: Close calendar popover\n\n## API reference\n\n<PropsTable id=\"DateRangePicker\" />\n\n## Common patterns\n\n### Filtering data by date range\n\nA common use case is filtering lists or tables by date range:\n\n```jsx live-dev\nconst App = () => {\n const [dateRange, setDateRange] = useState<DateRangePickerProps[\"value\"]>(null);\n\n // In a real application, you'd filter data based on dateRange\n const appliedFilter = dateRange\n ? `Showing data from ${dateRange.start} to ${dateRange.end}`\n : 'No date filter applied';\n\n return (\n <Stack direction=\"column\" gap=\"400\">\n <DateRangePicker\n value={dateRange}\n onChange={setDateRange}\n />\n <Text fontSize=\"sm\">\n {appliedFilter}\n </Text>\n </Stack>\n );\n}\n```\n\n### Promotion period selection\n\nFor e-commerce scenarios like setting up promotions, sales, or limited-time offers:\n\n```jsx live-dev\nconst App = () => {\n const [promotionRange, setPromotionRange] = useState<DateRangePickerProps[\"value\"]>(null);\n\n return (\n <Stack direction=\"column\" gap=\"400\">\n <DateRangePicker\n granularity=\"minute\"\n value={promotionRange}\n onChange={setPromotionRange}\n hourCycle={24}\n />\n {promotionRange && (\n <Text fontSize=\"sm\">\n Promotion active from {promotionRange.start.toString()} to {promotionRange.end.toString()}\n </Text>\n )}\n </Stack>\n );\n}\n```\n\n## Testing your implementation\n\nThese examples demonstrate how to test your implementation when using DateRangePicker 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 { CalendarDate } from \"@internationalized/date\";\nimport { DateRangePicker, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"DateRangePicker - Basic rendering\", () => {\n it(\"renders start and end date inputs\", () => {\n render(\n <NimbusProvider>\n <DateRangePicker aria-label=\"Select date range\" />\n </NimbusProvider>\n );\n\n // Each date input has 3 segments (month, day, year)\n const dateInputs = screen.getAllByRole(\"spinbutton\");\n expect(dateInputs).toHaveLength(6);\n });\n\n it(\"renders calendar button\", () => {\n render(\n <NimbusProvider>\n <DateRangePicker aria-label=\"Select date range\" />\n </NimbusProvider>\n );\n\n expect(\n screen.getByRole(\"button\", { name: /open calendar/i })\n ).toBeInTheDocument();\n });\n});\n```\n\n### Interaction Tests\n\nTest user interactions with the component\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 { CalendarDate } from \"@internationalized/date\";\nimport { DateRangePicker, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"DateRangePicker - Interactions\", () => {\n it(\"opens calendar when button is clicked\", async () => {\n const user = userEvent.setup();\n render(\n <NimbusProvider>\n <DateRangePicker aria-label=\"Select date range\" />\n </NimbusProvider>\n );\n\n const calendarButton = screen.getByRole(\"button\", {\n name: /open calendar/i,\n });\n await user.click(calendarButton);\n\n await waitFor(() => {\n expect(screen.getByRole(\"grid\")).toBeInTheDocument();\n });\n });\n\n it(\"calls onChange when interacting\", async () => {\n const user = userEvent.setup();\n const handleChange = vi.fn();\n render(\n <NimbusProvider>\n <DateRangePicker\n aria-label=\"Select date range\"\n onChange={handleChange}\n />\n </NimbusProvider>\n );\n\n // Open the calendar\n const calendarButton = screen.getByRole(\"button\", {\n name: /open calendar/i,\n });\n await user.click(calendarButton);\n\n // Verify onChange can be called (actual date selection would trigger it)\n expect(handleChange).toBeDefined();\n });\n});\n```\n\n### Testing with Date Values\n\nTest date value handling using @internationalized/date\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 { CalendarDate } from \"@internationalized/date\";\nimport { DateRangePicker, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"DateRangePicker - Date values\", () => {\n it(\"displays provided date range\", () => {\n const dateRange = {\n start: new CalendarDate(2024, 1, 15),\n end: new CalendarDate(2024, 1, 20),\n };\n\n render(\n <NimbusProvider>\n <DateRangePicker\n aria-label=\"Select date range\"\n value={dateRange}\n onChange={() => {}}\n />\n </NimbusProvider>\n );\n\n // Verify date input segments are rendered (6 total: month/day/year for start and end)\n const spinbuttons = screen.getAllByRole(\"spinbutton\");\n expect(spinbuttons).toHaveLength(6);\n });\n\n it(\"calls onChange with correct date types\", async () => {\n const user = userEvent.setup();\n const handleChange = vi.fn();\n render(\n <NimbusProvider>\n <DateRangePicker\n aria-label=\"Select date range\"\n onChange={handleChange}\n />\n </NimbusProvider>\n );\n\n // Type dates into the input segments\n const spinbuttons = screen.getAllByRole(\"spinbutton\");\n\n // Set start date: January 15, 2024\n await user.click(spinbuttons[0]); // month\n await user.keyboard(\"1\");\n await user.click(spinbuttons[1]); // day\n await user.keyboard(\"15\");\n await user.click(spinbuttons[2]); // year\n await user.keyboard(\"2024\");\n\n // Set end date: January 20, 2024\n await user.click(spinbuttons[3]); // month\n await user.keyboard(\"1\");\n await user.click(spinbuttons[4]); // day\n await user.keyboard(\"20\");\n await user.click(spinbuttons[5]); // year\n await user.keyboard(\"2024\");\n\n // Verify onChange was called with a RangeValue containing start and end date objects\n await waitFor(() => {\n expect(handleChange).toHaveBeenCalled();\n });\n\n const changeCall =\n handleChange.mock.calls[handleChange.mock.calls.length - 1][0];\n\n // Verify the structure matches RangeValue<DateValue>\n expect(changeCall).toHaveProperty(\"start\");\n expect(changeCall).toHaveProperty(\"end\");\n\n // Verify start and end have DateValue properties (year, month, day)\n expect(changeCall.start).toHaveProperty(\"year\");\n expect(changeCall.start).toHaveProperty(\"month\");\n expect(changeCall.start).toHaveProperty(\"day\");\n expect(changeCall.end).toHaveProperty(\"year\");\n expect(changeCall.end).toHaveProperty(\"month\");\n expect(changeCall.end).toHaveProperty(\"day\");\n\n // Verify the actual date values match what we typed\n expect(changeCall.start.year).toBe(2024);\n expect(changeCall.start.month).toBe(1);\n expect(changeCall.start.day).toBe(15);\n expect(changeCall.end.year).toBe(2024);\n expect(changeCall.end.month).toBe(1);\n expect(changeCall.end.day).toBe(20);\n }, 60000);\n});\n```\n\n### Testing Time Selection\n\nTest time input behavior when using time granularity\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 { CalendarDate } from \"@internationalized/date\";\nimport { DateRangePicker, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"DateRangePicker - Time selection\", () => {\n it(\"shows time inputs when granularity includes time\", async () => {\n const user = userEvent.setup();\n render(\n <NimbusProvider>\n <DateRangePicker\n aria-label=\"Select date and time range\"\n granularity=\"minute\"\n />\n </NimbusProvider>\n );\n\n // Open calendar\n const calendarButton = screen.getByRole(\"button\", {\n name: /open calendar/i,\n });\n await user.click(calendarButton);\n\n // Time inputs should appear in the popover footer\n await waitFor(() => {\n expect(screen.getByText(/start time/i)).toBeInTheDocument();\n expect(screen.getByText(/end time/i)).toBeInTheDocument();\n });\n });\n});\n```\n\n\n## Resources\n\n- [Storybook](https://nimbus-storybook.vercel.app/?path=/docs/components-date-daterangepicker--docs)\n- [React Aria DateRangePicker](https://react-spectrum.adobe.com/react-aria/DateRangePicker.html)\n- [ARIA Date Picker Pattern](https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/examples/datepicker-dialog/)",
225
+ "toc": [
226
+ {
227
+ "value": "Getting started",
228
+ "href": "#getting-started",
229
+ "depth": 2,
230
+ "numbering": [
231
+ 1,
232
+ 1
233
+ ],
234
+ "parent": "root"
235
+ },
236
+ {
237
+ "value": "Import",
238
+ "href": "#import",
239
+ "depth": 3,
240
+ "numbering": [
241
+ 1,
242
+ 1,
243
+ 1
244
+ ],
245
+ "parent": "root"
246
+ },
247
+ {
248
+ "value": "Basic usage",
249
+ "href": "#basic-usage",
250
+ "depth": 3,
251
+ "numbering": [
252
+ 1,
253
+ 1,
254
+ 2
255
+ ],
256
+ "parent": "root"
257
+ },
258
+ {
259
+ "value": "Working with date values",
260
+ "href": "#working-with-date-values",
261
+ "depth": 2,
262
+ "numbering": [
263
+ 1,
264
+ 2
265
+ ],
266
+ "parent": "root"
267
+ },
268
+ {
269
+ "value": "Date value types",
270
+ "href": "#date-value-types",
271
+ "depth": 3,
272
+ "numbering": [
273
+ 1,
274
+ 2,
275
+ 1
276
+ ],
277
+ "parent": "root"
278
+ },
279
+ {
280
+ "value": "Creating date values",
281
+ "href": "#creating-date-values",
282
+ "depth": 3,
283
+ "numbering": [
284
+ 1,
285
+ 2,
286
+ 2
287
+ ],
288
+ "parent": "root"
289
+ },
290
+ {
291
+ "value": "Converting to ISO strings",
292
+ "href": "#converting-to-iso-strings",
293
+ "depth": 3,
294
+ "numbering": [
295
+ 1,
296
+ 2,
297
+ 3
298
+ ],
299
+ "parent": "root"
300
+ },
301
+ {
302
+ "value": "Date range structure",
303
+ "href": "#date-range-structure",
304
+ "depth": 3,
305
+ "numbering": [
306
+ 1,
307
+ 2,
308
+ 4
309
+ ],
310
+ "parent": "root"
311
+ },
312
+ {
313
+ "value": "Usage examples",
314
+ "href": "#usage-examples",
315
+ "depth": 2,
316
+ "numbering": [
317
+ 1,
318
+ 3
319
+ ],
320
+ "parent": "root"
321
+ },
322
+ {
323
+ "value": "Size options",
324
+ "href": "#size-options",
325
+ "depth": 3,
326
+ "numbering": [
327
+ 1,
328
+ 3,
329
+ 1
330
+ ],
331
+ "parent": "root"
332
+ },
333
+ {
334
+ "value": "Visual variants",
335
+ "href": "#visual-variants",
336
+ "depth": 3,
337
+ "numbering": [
338
+ 1,
339
+ 3,
340
+ 2
341
+ ],
342
+ "parent": "root"
343
+ },
344
+ {
345
+ "value": "Granularity options",
346
+ "href": "#granularity-options",
347
+ "depth": 3,
348
+ "numbering": [
349
+ 1,
350
+ 3,
351
+ 3
352
+ ],
353
+ "parent": "root"
354
+ },
355
+ {
356
+ "value": "Uncontrolled mode",
357
+ "href": "#uncontrolled-mode",
358
+ "depth": 3,
359
+ "numbering": [
360
+ 1,
361
+ 3,
362
+ 4
363
+ ],
364
+ "parent": "root"
365
+ },
366
+ {
367
+ "value": "Controlled mode",
368
+ "href": "#controlled-mode",
369
+ "depth": 3,
370
+ "numbering": [
371
+ 1,
372
+ 3,
373
+ 5
374
+ ],
375
+ "parent": "root"
376
+ },
377
+ {
378
+ "value": "Time zone handling",
379
+ "href": "#time-zone-handling",
380
+ "depth": 3,
381
+ "numbering": [
382
+ 1,
383
+ 3,
384
+ 6
385
+ ],
386
+ "parent": "root"
387
+ },
388
+ {
389
+ "value": "Component requirements",
390
+ "href": "#component-requirements",
391
+ "depth": 2,
392
+ "numbering": [
393
+ 1,
394
+ 4
395
+ ],
396
+ "parent": "root"
397
+ },
398
+ {
399
+ "value": "Date value types",
400
+ "href": "#date-value-types-1",
401
+ "depth": 3,
402
+ "numbering": [
403
+ 1,
404
+ 4,
405
+ 1
406
+ ],
407
+ "parent": "root"
408
+ },
409
+ {
410
+ "value": "Accessibility",
411
+ "href": "#accessibility",
412
+ "depth": 2,
413
+ "numbering": [
414
+ 1,
415
+ 5
416
+ ],
417
+ "parent": "root"
418
+ },
419
+ {
420
+ "value": "Keyboard navigation",
421
+ "href": "#keyboard-navigation",
422
+ "depth": 4,
423
+ "numbering": [
424
+ 1,
425
+ 5,
426
+ 1,
427
+ 1
428
+ ],
429
+ "parent": "root"
430
+ },
431
+ {
432
+ "value": "API reference",
433
+ "href": "#api-reference",
434
+ "depth": 2,
435
+ "numbering": [
436
+ 1,
437
+ 6
438
+ ],
439
+ "parent": "root"
440
+ },
441
+ {
442
+ "value": "Common patterns",
443
+ "href": "#common-patterns",
444
+ "depth": 2,
445
+ "numbering": [
446
+ 1,
447
+ 7
448
+ ],
449
+ "parent": "root"
450
+ },
451
+ {
452
+ "value": "Filtering data by date range",
453
+ "href": "#filtering-data-by-date-range",
454
+ "depth": 3,
455
+ "numbering": [
456
+ 1,
457
+ 7,
458
+ 1
459
+ ],
460
+ "parent": "root"
461
+ },
462
+ {
463
+ "value": "Promotion period selection",
464
+ "href": "#promotion-period-selection",
465
+ "depth": 3,
466
+ "numbering": [
467
+ 1,
468
+ 7,
469
+ 2
470
+ ],
471
+ "parent": "root"
472
+ },
473
+ {
474
+ "value": "Testing your implementation",
475
+ "href": "#testing-your-implementation",
476
+ "depth": 2,
477
+ "numbering": [
478
+ 1,
479
+ 8
480
+ ],
481
+ "parent": "root"
482
+ },
483
+ {
484
+ "value": "Basic Rendering Tests",
485
+ "href": "#basic-rendering-tests",
486
+ "depth": 3,
487
+ "numbering": [
488
+ 1,
489
+ 8,
490
+ 1
491
+ ],
492
+ "parent": "root"
493
+ },
494
+ {
495
+ "value": "Interaction Tests",
496
+ "href": "#interaction-tests",
497
+ "depth": 3,
498
+ "numbering": [
499
+ 1,
500
+ 8,
501
+ 2
502
+ ],
503
+ "parent": "root"
504
+ },
505
+ {
506
+ "value": "Testing with Date Values",
507
+ "href": "#testing-with-date-values",
508
+ "depth": 3,
509
+ "numbering": [
510
+ 1,
511
+ 8,
512
+ 3
513
+ ],
514
+ "parent": "root"
515
+ },
516
+ {
517
+ "value": "Testing Time Selection",
518
+ "href": "#testing-time-selection",
519
+ "depth": 3,
520
+ "numbering": [
521
+ 1,
522
+ 8,
523
+ 4
524
+ ],
525
+ "parent": "root"
526
+ },
527
+ {
528
+ "value": "Resources",
529
+ "href": "#resources",
530
+ "depth": 2,
531
+ "numbering": [
532
+ 1,
533
+ 9
534
+ ],
535
+ "parent": "root"
536
+ }
537
+ ]
538
+ },
539
+ "guidelines": {
540
+ "mdx": "\n## Guidelines\n\nDate range picker guidelines establish a standardized approach for creating\nintuitive and accessible date input components, ensuring consistency in\npresentation and interaction for selecting dates across all applications.\n\n### Best practices\n\n- **Allow manual input:** Provide flexibility by allowing users to manually type\n dates into the input fields.\n- **Disable invalid dates:** Prevent errors by disabling dates that are not\n selectable (e.g., a return date before a departure date or past dates for a\n future booking).\n- **Show clear feedback:** Use visual highlights for the selected start and end\n dates, as well as all the days in between, to provide a clear representation\n of the range.\n- **Ensure easy navigation:** Make the calendar simple to navigate with clear\n controls for moving between months and years.\n- **Provide error messages:** Include clear, concise error messages to inform\n users of any validation issues.\n\n### Usage\n\n> [!TIP]\\\n> When to use\n\n- **Specific date selection required:** When users need to choose a particular\n date, such as a birth month or events that span common holidays days.\n- **Date-related tasks:** For features involving scheduling, filtering by date,\n setting deadlines, or defining date ranges.\n- **Standardized input format:** To ensure users enter dates in a consistent and\n predictable format, reducing data entry errors.\n- **Visual calendar navigation:** When users benefit from a visual\n representation of a calendar to navigate and select dates, especially for date\n ranges or when the day of the week is relevant.\n- **Accessibility needs:** To provide an accessible alternative to manual text\n input for users with disabilities, including keyboard navigation and screen\n reader support.\n- **Clear date context:** When the dates are a primary piece of information and\n needs to be explicitly chosen.\n\n> [!CAUTION]\\\n> When not to use\n\n- **Selecting a single date:** Use a date picker instead.\n- **Complex date inputs:** Use separate date and time input fields for greater\n clarity.\n- **Approximate or vague dates:** When the exact date is not critical, and users\n might only know a month or year (consider a select dropdown or a less specific\n input).\n- **Dates far in the past or future:** For dates like birthdates, consider a\n direct text input with clear formatting hints or segmented inputs\n (month/day/year) to avoid excessive calendar navigation. However, a date\n picker can still be suitable if well-implemented with year selection.\n- **Simple \"today\" or \"now\" selection:** For actions that simply require the\n current date or time, a button or automated function might be more efficient.\n- **Limited screen real estate:** On very constrained interfaces, a compact text\n input with a clear format might be preferred over an expanded calendar, though\n accessibility should still be a priority.\n- **High frequency of typing known dates:** If users frequently know the exact\n date they need to enter and typing is faster for them, a well-formatted text\n input with validation might be sufficient alongside (or instead of) a date\n picker. (e.g. birthdays)\n- **Binary \"yes/no\" for date-related options:** For simple choices like \"Remind\n me?\" (implying the current date/time), a checkbox or switch might be more\n appropriate.\n\n### Labels and messaging\n\nClear labels and concise messaging are crucial for a date input to ensure users\nunderstand what date information is required and how to provide it correctly.\n\n> [!TIP]\\\n> **Do**\n>\n> - Do use a clear and descriptive label (e.g., \"Date of Birth,\" \"Event Date\").\n> - Do provide clear formatting hints (e.g., MM/DD/YYYY) as placeholder text or\n> helper text.\n> - Do validate the input and provide clear error messages for incorrect formats\n> or invalid dates.\n\n```jsx live\nconst App = () => (\n <FormField.Root>\n <FormField.Label>Active promotion range</FormField.Label>\n <FormField.Input>\n <DateRangePicker\n size=\"md\"\n aria-label=\"Active promotion range\"\n width=\"1/2\"\n />\n </FormField.Input>\n </FormField.Root>\n);\n```\n\n> [!CAUTION]\\\n> **Don't**\n>\n> - Don't rely solely on placeholder text for the label.\n> - Don't use ambiguous date formats without clear guidance.\n> - Don't fail to provide feedback on invalid input.\n\n![labels and messaging - don'ts](/images/date-picker/labels-and-messaging-dont.png)\n\n### Interaction and selection\n\nThe ideal date range picker interaction offers a seamless experience through\nintuitive calendar navigation, clear visual feedback on selection, and the\nflexibility of both direct typing and visual selection to accommodate user\npreferences and accessibility needs.\n\n> [!TIP]\\\n> **Do**\n>\n> - Do highlight the current date in the calendar picker for reference.\n> - Do provide a visual calendar picker for easy selection, especially for\n> non-familiar dates or date ranges.\n> - Do allow manual text input as an alternative for users who prefer it or know\n> the date.\n> - Do clearly indicate the selected date(s) in the calendar.\n> - Do enable easy navigation between months and years in the calendar.\n> - Do consider providing preset date ranges (e.g., \"Last Week,\" \"Next Month\")\n> when relevant.\n\n```jsx live\nconst App = () => (\n <FormField.Root>\n <FormField.Label>Range</FormField.Label>\n <FormField.Input>\n <DateRangePicker\n size=\"md\"\n aria-label=\"Active promotion range\"\n width=\"1/2\"\n defaultValue={{\n start: new CalendarDate(2025, 5, 2),\n end: new CalendarDate(2025, 5, 11),\n }}\n />\n </FormField.Input>\n <FormField.Description>\n Format MM/DD/YYYY - MM/DD/YYYY\n </FormField.Description>\n </FormField.Root>\n);\n```\n\n> [!CAUTION]\\\n> **Don't**\n>\n> - Don't use it for selecting vague or non-specific timeframes (e.g., \"sometime\n> next year\").\n> - Don't force users to only use the calendar picker if they prefer typing.\n> - Don't use it for simple \"today\" selections where a button might suffice.\n> - Don't auto-advance between date segments (day/month/year) in text input, as\n> it can hinder error correction.\n> - Don't make calendar navigation cumbersome.\n\n![interaction and selection - don'ts](/images/date-range-picker/interaction-and-selection-dont.png)\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": "Labels and messaging",
576
+ "href": "#labels-and-messaging",
577
+ "depth": 3,
578
+ "numbering": [
579
+ 1,
580
+ 1,
581
+ 3
582
+ ],
583
+ "parent": "root"
584
+ },
585
+ {
586
+ "value": "Interaction and selection",
587
+ "href": "#interaction-and-selection",
588
+ "depth": 3,
589
+ "numbering": [
590
+ 1,
591
+ 1,
592
+ 4
593
+ ],
594
+ "parent": "root"
595
+ }
596
+ ]
597
+ }
598
+ }
599
+ }