@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.
- package/README.md +63 -14
- package/data/docs/route-manifest.json +10913 -0
- package/data/docs/routes/components-accessibility-visually-hidden.json +388 -0
- package/data/docs/routes/components-accessibility.json +34 -0
- package/data/docs/routes/components-buttons-button.json +715 -0
- package/data/docs/routes/components-buttons-icon-button.json +852 -0
- package/data/docs/routes/components-buttons-icon-toggle-button.json +594 -0
- package/data/docs/routes/components-buttons-split-button.json +670 -0
- package/data/docs/routes/components-buttons-toggle-button-group.json +722 -0
- package/data/docs/routes/components-buttons-toggle-button.json +689 -0
- package/data/docs/routes/components-buttons.json +36 -0
- package/data/docs/routes/components-data-display-badge.json +555 -0
- package/data/docs/routes/components-data-display-card.json +338 -0
- package/data/docs/routes/components-data-display-data-table.json +855 -0
- package/data/docs/routes/components-data-display-draggable-list.json +596 -0
- package/data/docs/routes/components-data-display-table.json +472 -0
- package/data/docs/routes/components-data-display-tag-group.json +535 -0
- package/data/docs/routes/components-data-display.json +34 -0
- package/data/docs/routes/components-feedback-alert.json +696 -0
- package/data/docs/routes/components-feedback-dialog.json +682 -0
- package/data/docs/routes/components-feedback-drawer.json +600 -0
- package/data/docs/routes/components-feedback-loading-spinner.json +415 -0
- package/data/docs/routes/components-feedback-progress-bar.json +661 -0
- package/data/docs/routes/components-feedback-toast.json +1040 -0
- package/data/docs/routes/components-feedback-tooltip.json +510 -0
- package/data/docs/routes/components-feedback.json +34 -0
- package/data/docs/routes/components-forms-field-errors.json +557 -0
- package/data/docs/routes/components-forms-form-field.json +848 -0
- package/data/docs/routes/components-forms-group.json +427 -0
- package/data/docs/routes/components-forms-localized-field.json +770 -0
- package/data/docs/routes/components-forms.json +37 -0
- package/data/docs/routes/components-inputs-calendar.json +611 -0
- package/data/docs/routes/components-inputs-checkbox.json +774 -0
- package/data/docs/routes/components-inputs-combo-box.json +761 -0
- package/data/docs/routes/components-inputs-date-input.json +628 -0
- package/data/docs/routes/components-inputs-date-picker.json +709 -0
- package/data/docs/routes/components-inputs-date-range-picker.json +599 -0
- package/data/docs/routes/components-inputs-money-input.json +721 -0
- package/data/docs/routes/components-inputs-multiline-text-input.json +611 -0
- package/data/docs/routes/components-inputs-number-input.json +647 -0
- package/data/docs/routes/components-inputs-password-input.json +576 -0
- package/data/docs/routes/components-inputs-radio-input.json +583 -0
- package/data/docs/routes/components-inputs-range-calendar.json +607 -0
- package/data/docs/routes/components-inputs-rich-text-input.json +599 -0
- package/data/docs/routes/components-inputs-scoped-search-input.json +570 -0
- package/data/docs/routes/components-inputs-search-input.json +588 -0
- package/data/docs/routes/components-inputs-select-input.json +960 -0
- package/data/docs/routes/components-inputs-switch.json +720 -0
- package/data/docs/routes/components-inputs-text-input.json +566 -0
- package/data/docs/routes/components-inputs-time-input.json +775 -0
- package/data/docs/routes/components-inputs.json +34 -0
- package/data/docs/routes/components-layout-box.json +501 -0
- package/data/docs/routes/components-layout-defaultpage.json +748 -0
- package/data/docs/routes/components-layout-flex.json +587 -0
- package/data/docs/routes/components-layout-grid.json +393 -0
- package/data/docs/routes/components-layout-modalpage.json +716 -0
- package/data/docs/routes/components-layout-pagecontent.json +673 -0
- package/data/docs/routes/components-layout-separator.json +461 -0
- package/data/docs/routes/components-layout-simple-grid.json +519 -0
- package/data/docs/routes/components-layout-spacer.json +573 -0
- package/data/docs/routes/components-layout-stack.json +481 -0
- package/data/docs/routes/components-layout.json +34 -0
- package/data/docs/routes/components-media-avatar.json +427 -0
- package/data/docs/routes/components-media-icon.json +663 -0
- package/data/docs/routes/components-media-image.json +511 -0
- package/data/docs/routes/components-media-inline-svg.json +586 -0
- package/data/docs/routes/components-media.json +34 -0
- package/data/docs/routes/components-navigation-accordion.json +643 -0
- package/data/docs/routes/components-navigation-collapsible-motion.json +628 -0
- package/data/docs/routes/components-navigation-link.json +554 -0
- package/data/docs/routes/components-navigation-menu.json +546 -0
- package/data/docs/routes/components-navigation-pagination.json +502 -0
- package/data/docs/routes/components-navigation-steps.json +629 -0
- package/data/docs/routes/components-navigation-tabnav.json +546 -0
- package/data/docs/routes/components-navigation-tabs.json +635 -0
- package/data/docs/routes/components-navigation-toolbar.json +549 -0
- package/data/docs/routes/components-navigation.json +34 -0
- package/data/docs/routes/components-typography-code.json +39 -0
- package/data/docs/routes/components-typography-heading.json +402 -0
- package/data/docs/routes/components-typography-kbd.json +399 -0
- package/data/docs/routes/components-typography-list.json +593 -0
- package/data/docs/routes/components-typography-text.json +444 -0
- package/data/docs/routes/components-typography.json +34 -0
- package/data/docs/routes/components-utilities-nimbus-i18n-provider.json +295 -0
- package/data/docs/routes/components-utilities-nimbus-provider.json +663 -0
- package/data/docs/routes/components-utilities.json +34 -0
- package/data/docs/routes/components.json +33 -0
- package/data/docs/routes/home-contribute-adrs-adr0001-consumer-component-apis.json +314 -0
- package/data/docs/routes/home-contribute-adrs-adr0002-compound-component-extraction.json +160 -0
- package/data/docs/routes/home-contribute-adrs-adr0003-component-lifecycle-states.json +460 -0
- package/data/docs/routes/home-contribute-adrs.json +205 -0
- package/data/docs/routes/home-contribute-development-setup.json +213 -0
- package/data/docs/routes/home-contribute-stats.json +36 -0
- package/data/docs/routes/home-contribute.json +36 -0
- package/data/docs/routes/home-design-tokens-aspect-ratios.json +36 -0
- package/data/docs/routes/home-design-tokens-borders.json +35 -0
- package/data/docs/routes/home-design-tokens-colors.json +157 -0
- package/data/docs/routes/home-design-tokens-other-animations.json +119 -0
- package/data/docs/routes/home-design-tokens-other-blurs.json +36 -0
- package/data/docs/routes/home-design-tokens-other-breakpoints.json +61 -0
- package/data/docs/routes/home-design-tokens-other-cursors.json +36 -0
- package/data/docs/routes/home-design-tokens-other-z-indices.json +39 -0
- package/data/docs/routes/home-design-tokens-other.json +35 -0
- package/data/docs/routes/home-design-tokens-radii.json +59 -0
- package/data/docs/routes/home-design-tokens-shadows.json +57 -0
- package/data/docs/routes/home-design-tokens-sizes.json +137 -0
- package/data/docs/routes/home-design-tokens-spacing.json +36 -0
- package/data/docs/routes/home-design-tokens-typography.json +184 -0
- package/data/docs/routes/home-design-tokens.json +34 -0
- package/data/docs/routes/home-getting-started-core-concepts.json +301 -0
- package/data/docs/routes/home-getting-started-installation.json +621 -0
- package/data/docs/routes/home-getting-started-mcp-server-overview.json +139 -0
- package/data/docs/routes/home-getting-started-mcp-server-setup.json +316 -0
- package/data/docs/routes/home-getting-started-release-process.json +294 -0
- package/data/docs/routes/home-getting-started-testing-setup.json +296 -0
- package/data/docs/routes/home-playground-markdown.json +638 -0
- package/data/docs/routes/home-playground-toc.json +169 -0
- package/data/docs/routes/home-playground.json +34 -0
- package/data/docs/routes/home-style-props-background.json +236 -0
- package/data/docs/routes/home-style-props-border.json +310 -0
- package/data/docs/routes/home-style-props-display.json +120 -0
- package/data/docs/routes/home-style-props-effects.json +116 -0
- package/data/docs/routes/home-style-props-filters.json +396 -0
- package/data/docs/routes/home-style-props-flex-and-grid.json +496 -0
- package/data/docs/routes/home-style-props-interactivity.json +356 -0
- package/data/docs/routes/home-style-props-layout.json +422 -0
- package/data/docs/routes/home-style-props-list.json +116 -0
- package/data/docs/routes/home-style-props-sizing.json +244 -0
- package/data/docs/routes/home-style-props-spacing.json +228 -0
- package/data/docs/routes/home-style-props-svg.json +96 -0
- package/data/docs/routes/home-style-props-tables.json +116 -0
- package/data/docs/routes/home-style-props-transforms.json +216 -0
- package/data/docs/routes/home-style-props-transitions.json +216 -0
- package/data/docs/routes/home-style-props-typography.json +536 -0
- package/data/docs/routes/home-style-props.json +33 -0
- package/data/docs/routes/home.json +32 -0
- package/data/docs/routes/hooks-usecopytoclipboard.json +76 -0
- package/data/docs/routes/hooks-usehotkeys.json +117 -0
- package/data/docs/routes/hooks.json +33 -0
- package/data/docs/routes/icons.json +32 -0
- package/data/docs/routes/patterns-fields-date-range-picker-field.json +393 -0
- package/data/docs/routes/patterns-fields-money-input-field.json +415 -0
- package/data/docs/routes/patterns-fields-multiline-text-input-field.json +404 -0
- package/data/docs/routes/patterns-fields-number-input-field.json +470 -0
- package/data/docs/routes/patterns-fields-password-input-field.json +319 -0
- package/data/docs/routes/patterns-fields-search-input-field.json +382 -0
- package/data/docs/routes/patterns-fields-text-input-field.json +404 -0
- package/data/docs/routes/patterns-fields.json +78 -0
- package/data/docs/routes/patterns.json +34 -0
- package/data/docs/search-index.json +1 -0
- package/data/docs/types/Accordion.json +12 -0
- package/data/docs/types/AccordionContent.json +286 -0
- package/data/docs/types/AccordionHeader.json +891 -0
- package/data/docs/types/AccordionHeaderRightContent.json +27 -0
- package/data/docs/types/AccordionItem.json +242 -0
- package/data/docs/types/AccordionRoot.json +162 -0
- package/data/docs/types/Alert.json +12 -0
- package/data/docs/types/AlertActions.json +11 -0
- package/data/docs/types/AlertDescription.json +118 -0
- package/data/docs/types/AlertDismissButton.json +937 -0
- package/data/docs/types/AlertRoot.json +42 -0
- package/data/docs/types/AlertTitle.json +118 -0
- package/data/docs/types/Avatar.json +125 -0
- package/data/docs/types/Badge.json +64 -0
- package/data/docs/types/Body.json +67 -0
- package/data/docs/types/Box.json +85 -0
- package/data/docs/types/Button.json +1015 -0
- package/data/docs/types/Calendar.json +565 -0
- package/data/docs/types/Caption.json +67 -0
- package/data/docs/types/Card.json +12 -0
- package/data/docs/types/CardContent.json +27 -0
- package/data/docs/types/CardHeader.json +27 -0
- package/data/docs/types/CardRoot.json +106 -0
- package/data/docs/types/Cell.json +227 -0
- package/data/docs/types/Checkbox.json +897 -0
- package/data/docs/types/Code.json +112 -0
- package/data/docs/types/CollapsibleMotionContent.json +35 -0
- package/data/docs/types/CollapsibleMotionRoot.json +99 -0
- package/data/docs/types/CollapsibleMotionTrigger.json +71 -0
- package/data/docs/types/Column.json +101 -0
- package/data/docs/types/ColumnGroup.json +101 -0
- package/data/docs/types/ColumnHeader.json +193 -0
- package/data/docs/types/ComboBoxListBox.json +751 -0
- package/data/docs/types/ComboBoxOption.json +672 -0
- package/data/docs/types/ComboBoxPopover.json +786 -0
- package/data/docs/types/ComboBoxRoot.json +747 -0
- package/data/docs/types/ComboBoxSection.json +277 -0
- package/data/docs/types/ComboBoxTrigger.json +70 -0
- package/data/docs/types/Content.json +33 -0
- package/data/docs/types/DataTable.json +596 -0
- package/data/docs/types/DataTableBody.json +223 -0
- package/data/docs/types/DataTableFooter.json +27 -0
- package/data/docs/types/DataTableHeader.json +269 -0
- package/data/docs/types/DataTableManager.json +11 -0
- package/data/docs/types/DataTableRoot.json +590 -0
- package/data/docs/types/DataTableTable.json +271 -0
- package/data/docs/types/DateInput.json +792 -0
- package/data/docs/types/DatePicker.json +700 -0
- package/data/docs/types/DateRangePicker.json +936 -0
- package/data/docs/types/DateRangePickerField.json +1047 -0
- package/data/docs/types/DefaultPage.json +12 -0
- package/data/docs/types/DefaultPageActions.json +27 -0
- package/data/docs/types/DefaultPageBackLink.json +213 -0
- package/data/docs/types/DefaultPageContent.json +27 -0
- package/data/docs/types/DefaultPageFooter.json +27 -0
- package/data/docs/types/DefaultPageHeader.json +27 -0
- package/data/docs/types/DefaultPageRoot.json +106 -0
- package/data/docs/types/DefaultPageSubtitle.json +27 -0
- package/data/docs/types/DefaultPageTabNav.json +28 -0
- package/data/docs/types/DefaultPageTitle.json +27 -0
- package/data/docs/types/DialogBody.json +27 -0
- package/data/docs/types/DialogCloseTrigger.json +939 -0
- package/data/docs/types/DialogContent.json +27 -0
- package/data/docs/types/DialogFooter.json +27 -0
- package/data/docs/types/DialogHeader.json +27 -0
- package/data/docs/types/DialogRoot.json +138 -0
- package/data/docs/types/DialogTitle.json +27 -0
- package/data/docs/types/DialogTrigger.json +80 -0
- package/data/docs/types/DraggableList.json +12 -0
- package/data/docs/types/DraggableListField.json +894 -0
- package/data/docs/types/DraggableListItem.json +574 -0
- package/data/docs/types/DraggableListRoot.json +745 -0
- package/data/docs/types/Drawer.json +12 -0
- package/data/docs/types/DrawerBody.json +27 -0
- package/data/docs/types/DrawerCloseTrigger.json +939 -0
- package/data/docs/types/DrawerContent.json +27 -0
- package/data/docs/types/DrawerFooter.json +27 -0
- package/data/docs/types/DrawerHeader.json +27 -0
- package/data/docs/types/DrawerRoot.json +142 -0
- package/data/docs/types/DrawerTitle.json +27 -0
- package/data/docs/types/DrawerTrigger.json +80 -0
- package/data/docs/types/FieldErrors.getBuiltInMessage.json +11 -0
- package/data/docs/types/FieldErrors.getCustomMessage.json +9 -0
- package/data/docs/types/FieldErrors.json +109 -0
- package/data/docs/types/Flex.json +238 -0
- package/data/docs/types/Footer.json +67 -0
- package/data/docs/types/FormFieldDescription.json +11 -0
- package/data/docs/types/FormFieldError.json +11 -0
- package/data/docs/types/FormFieldInfoBox.json +27 -0
- package/data/docs/types/FormFieldInput.json +11 -0
- package/data/docs/types/FormFieldLabel.json +11 -0
- package/data/docs/types/FormFieldRoot.json +148 -0
- package/data/docs/types/Grid.json +253 -0
- package/data/docs/types/GridProps.json +11 -0
- package/data/docs/types/Group.json +143 -0
- package/data/docs/types/Header.json +67 -0
- package/data/docs/types/Heading.json +109 -0
- package/data/docs/types/Icon.json +112 -0
- package/data/docs/types/IconButton.json +1019 -0
- package/data/docs/types/IconToggleButton.json +787 -0
- package/data/docs/types/Image.json +373 -0
- package/data/docs/types/Indicator.json +67 -0
- package/data/docs/types/InlineSvg.json +98 -0
- package/data/docs/types/Item.json +67 -0
- package/data/docs/types/Kbd.json +118 -0
- package/data/docs/types/Link.json +380 -0
- package/data/docs/types/List.json +12 -0
- package/data/docs/types/ListIndicator.json +70 -0
- package/data/docs/types/ListItem.json +70 -0
- package/data/docs/types/ListRoot.json +124 -0
- package/data/docs/types/LoadingSpinner.json +87 -0
- package/data/docs/types/LocalizedField.json +460 -0
- package/data/docs/types/LocalizedStringFormatter.json +9 -0
- package/data/docs/types/MakeElementFocusable.json +196 -0
- package/data/docs/types/MenuContent.json +111 -0
- package/data/docs/types/MenuItem.json +671 -0
- package/data/docs/types/MenuRoot.json +670 -0
- package/data/docs/types/MenuSection.json +364 -0
- package/data/docs/types/MenuSubmenu.json +111 -0
- package/data/docs/types/MenuSubmenuTrigger.json +67 -0
- package/data/docs/types/MenuTrigger.json +906 -0
- package/data/docs/types/ModalPage.json +12 -0
- package/data/docs/types/ModalPageActions.json +27 -0
- package/data/docs/types/ModalPageContent.json +27 -0
- package/data/docs/types/ModalPageFooter.json +27 -0
- package/data/docs/types/ModalPageHeader.json +27 -0
- package/data/docs/types/ModalPageRoot.json +87 -0
- package/data/docs/types/ModalPageSubtitle.json +27 -0
- package/data/docs/types/ModalPageTabNav.json +28 -0
- package/data/docs/types/ModalPageTitle.json +27 -0
- package/data/docs/types/ModalPageTopBar.json +57 -0
- package/data/docs/types/MoneyInput.isEmpty.json +40 -0
- package/data/docs/types/MoneyInput.json +282 -0
- package/data/docs/types/MoneyInputField.json +379 -0
- package/data/docs/types/MoneyInputFieldProps.json +9 -0
- package/data/docs/types/MultilineTextInput.json +1194 -0
- package/data/docs/types/MultilineTextInputField.json +1269 -0
- package/data/docs/types/MultilineTextInputFieldProps.json +9 -0
- package/data/docs/types/NimbusI18nProvider.json +42 -0
- package/data/docs/types/NimbusI18nProviderProps.json +9 -0
- package/data/docs/types/NimbusProvider.json +270 -0
- package/data/docs/types/NumberInput.json +952 -0
- package/data/docs/types/NumberInputField.json +1004 -0
- package/data/docs/types/NumberInputFieldProps.json +9 -0
- package/data/docs/types/PageContent.json +11 -0
- package/data/docs/types/PageContentColumn.json +99 -0
- package/data/docs/types/PageContentRoot.json +114 -0
- package/data/docs/types/Pagination.json +159 -0
- package/data/docs/types/PasswordInput.json +1120 -0
- package/data/docs/types/PasswordInputField.json +1216 -0
- package/data/docs/types/PasswordInputFieldProps.json +9 -0
- package/data/docs/types/ProgressBar.json +280 -0
- package/data/docs/types/RadioInputOption.json +550 -0
- package/data/docs/types/RadioInputRoot.json +514 -0
- package/data/docs/types/RangeCalendar.json +618 -0
- package/data/docs/types/RichTextInput.json +134 -0
- package/data/docs/types/Root.json +122 -0
- package/data/docs/types/Row.json +67 -0
- package/data/docs/types/ScopedSearchInput.isEmpty.json +40 -0
- package/data/docs/types/ScopedSearchInput.json +253 -0
- package/data/docs/types/ScrollArea.json +82 -0
- package/data/docs/types/SearchInput.json +1165 -0
- package/data/docs/types/SearchInputField.json +1240 -0
- package/data/docs/types/Select.json +12 -0
- package/data/docs/types/SelectOption.json +572 -0
- package/data/docs/types/SelectOptionGroup.json +215 -0
- package/data/docs/types/SelectOptions.json +693 -0
- package/data/docs/types/SelectRoot.json +926 -0
- package/data/docs/types/Separator.json +65 -0
- package/data/docs/types/SimpleGrid.json +291 -0
- package/data/docs/types/Spacer.json +27 -0
- package/data/docs/types/SpacerProps.json +9 -0
- package/data/docs/types/SplitButton.json +203 -0
- package/data/docs/types/Stack.json +144 -0
- package/data/docs/types/Steps.json +12 -0
- package/data/docs/types/StepsChangeDetails.json +9 -0
- package/data/docs/types/StepsCompletedContent.json +28 -0
- package/data/docs/types/StepsCompletedContentProps.json +9 -0
- package/data/docs/types/StepsContent.json +43 -0
- package/data/docs/types/StepsContentProps.json +9 -0
- package/data/docs/types/StepsDescription.json +28 -0
- package/data/docs/types/StepsDescriptionProps.json +9 -0
- package/data/docs/types/StepsIndicator.json +28 -0
- package/data/docs/types/StepsIndicatorProps.json +9 -0
- package/data/docs/types/StepsItem.json +43 -0
- package/data/docs/types/StepsItemProps.json +9 -0
- package/data/docs/types/StepsList.json +28 -0
- package/data/docs/types/StepsListProps.json +9 -0
- package/data/docs/types/StepsNextTrigger.json +62 -0
- package/data/docs/types/StepsNextTriggerProps.json +9 -0
- package/data/docs/types/StepsNumber.json +28 -0
- package/data/docs/types/StepsNumberProps.json +9 -0
- package/data/docs/types/StepsPrevTrigger.json +62 -0
- package/data/docs/types/StepsPrevTriggerProps.json +9 -0
- package/data/docs/types/StepsRoot.json +183 -0
- package/data/docs/types/StepsRootProps.json +11 -0
- package/data/docs/types/StepsSeparator.json +28 -0
- package/data/docs/types/StepsSeparatorProps.json +9 -0
- package/data/docs/types/StepsStatus.json +57 -0
- package/data/docs/types/StepsStatusProps.json +9 -0
- package/data/docs/types/StepsTitle.json +28 -0
- package/data/docs/types/StepsTitleProps.json +9 -0
- package/data/docs/types/StepsTrigger.json +47 -0
- package/data/docs/types/StepsTriggerProps.json +9 -0
- package/data/docs/types/Switch.json +371 -0
- package/data/docs/types/TabListProps.json +9 -0
- package/data/docs/types/TabNav.json +12 -0
- package/data/docs/types/TabNavItem.json +300 -0
- package/data/docs/types/TabNavItemProps.json +9 -0
- package/data/docs/types/TabNavProps.json +9 -0
- package/data/docs/types/TabNavRoot.json +80 -0
- package/data/docs/types/TabPanelProps.json +9 -0
- package/data/docs/types/TabPanelsProps.json +9 -0
- package/data/docs/types/TabProps.json +9 -0
- package/data/docs/types/Table.json +9 -0
- package/data/docs/types/TableBody.json +67 -0
- package/data/docs/types/TableBodyProps.json +9 -0
- package/data/docs/types/TableCaption.json +67 -0
- package/data/docs/types/TableCaptionProps.json +9 -0
- package/data/docs/types/TableCell.json +227 -0
- package/data/docs/types/TableCellProps.json +9 -0
- package/data/docs/types/TableColumn.json +101 -0
- package/data/docs/types/TableColumnGroup.json +101 -0
- package/data/docs/types/TableColumnGroupProps.json +9 -0
- package/data/docs/types/TableColumnHeader.json +193 -0
- package/data/docs/types/TableColumnHeaderProps.json +9 -0
- package/data/docs/types/TableColumnProps.json +9 -0
- package/data/docs/types/TableFooter.json +67 -0
- package/data/docs/types/TableFooterProps.json +9 -0
- package/data/docs/types/TableHeader.json +67 -0
- package/data/docs/types/TableHeaderProps.json +9 -0
- package/data/docs/types/TableRoot.json +365 -0
- package/data/docs/types/TableRootProps.json +12 -0
- package/data/docs/types/TableRow.json +67 -0
- package/data/docs/types/TableRowProps.json +9 -0
- package/data/docs/types/TableScrollArea.json +82 -0
- package/data/docs/types/TableScrollAreaProps.json +9 -0
- package/data/docs/types/Tabs.json +12 -0
- package/data/docs/types/TabsList.json +110 -0
- package/data/docs/types/TabsPanel.json +112 -0
- package/data/docs/types/TabsPanels.json +108 -0
- package/data/docs/types/TabsRoot.json +211 -0
- package/data/docs/types/TabsTab.json +174 -0
- package/data/docs/types/TagGroup.json +12 -0
- package/data/docs/types/TagGroupRoot.json +306 -0
- package/data/docs/types/TagGroupTag.json +595 -0
- package/data/docs/types/TagGroupTagList.json +166 -0
- package/data/docs/types/Text.json +119 -0
- package/data/docs/types/TextInput.json +1156 -0
- package/data/docs/types/TextInputField.json +1263 -0
- package/data/docs/types/TimeInput.json +752 -0
- package/data/docs/types/ToastAction.json +9 -0
- package/data/docs/types/ToastManagerApi.json +9 -0
- package/data/docs/types/ToastOptions.json +9 -0
- package/data/docs/types/ToastOutlet.json +12 -0
- package/data/docs/types/ToastPlacement.json +9 -0
- package/data/docs/types/ToastPromiseOptions.json +9 -0
- package/data/docs/types/ToastType.json +9 -0
- package/data/docs/types/ToastVariant.json +9 -0
- package/data/docs/types/ToggleButton.json +789 -0
- package/data/docs/types/ToggleButtonGroup.json +9 -0
- package/data/docs/types/ToggleButtonGroupButton.json +331 -0
- package/data/docs/types/ToggleButtonGroupRoot.json +269 -0
- package/data/docs/types/Toolbar.json +176 -0
- package/data/docs/types/Tooltip.json +12 -0
- package/data/docs/types/TooltipContent.json +372 -0
- package/data/docs/types/TooltipRoot.json +179 -0
- package/data/docs/types/Trigger.json +69 -0
- package/data/docs/types/VisuallyHidden.json +93 -0
- package/data/docs/types/__object.json +12 -0
- package/data/docs/types/filters.json +11 -0
- package/data/docs/types/manifest.json +278 -0
- package/data/docs/types/toast.json +234 -0
- package/data/docs/types/useColorMode.json +13 -0
- package/data/docs/types/useColorModeValue.json +13 -0
- package/data/docs/types/useColorScheme.json +12 -0
- package/data/docs/types/useLocalizedStringFormatter.json +14 -0
- package/data/icons.json +21940 -0
- package/data/tokens.json +40061 -0
- package/dist/index.js +2516 -17
- package/package.json +25 -6
- package/dist/data-loader.d.ts +0 -102
- package/dist/data-loader.js +0 -104
- package/dist/index.d.ts +0 -13
- package/dist/server.d.ts +0 -9
- package/dist/server.js +0 -22
- package/dist/server.spec.d.ts +0 -1
- package/dist/server.spec.js +0 -69
- package/dist/tools/list-components.d.ts +0 -9
- package/dist/tools/list-components.js +0 -42
- package/dist/types.d.ts +0 -28
- package/dist/types.js +0 -4
- package/src/data-loader.ts +0 -226
- package/src/index.ts +0 -29
- package/src/server.spec.ts +0 -86
- package/src/server.ts +0 -28
- package/src/tools/list-components.ts +0 -49
- package/src/types.ts +0 -31
- package/tsconfig.json +0 -14
- package/vitest.config.ts +0 -9
|
@@ -0,0 +1,583 @@
|
|
|
1
|
+
{
|
|
2
|
+
"meta": {
|
|
3
|
+
"id": "Components-RadioInput",
|
|
4
|
+
"title": "Radio input",
|
|
5
|
+
"exportName": "RadioInput",
|
|
6
|
+
"description": "A set of closely related, mutually exclusive or complementary actions that are important enough to be displayed directly in the interface for quick access.",
|
|
7
|
+
"lifecycleState": "Stable",
|
|
8
|
+
"order": 999,
|
|
9
|
+
"repoPath": "packages/nimbus/src/components/radio-input/radio-input.mdx",
|
|
10
|
+
"menu": [
|
|
11
|
+
"Components",
|
|
12
|
+
"Inputs",
|
|
13
|
+
"Radio input"
|
|
14
|
+
],
|
|
15
|
+
"route": "components/inputs/radio-input",
|
|
16
|
+
"tags": [
|
|
17
|
+
"component",
|
|
18
|
+
"radio",
|
|
19
|
+
"input",
|
|
20
|
+
"selection",
|
|
21
|
+
"option"
|
|
22
|
+
],
|
|
23
|
+
"toc": [
|
|
24
|
+
{
|
|
25
|
+
"value": "Overview",
|
|
26
|
+
"href": "#overview",
|
|
27
|
+
"depth": 2,
|
|
28
|
+
"numbering": [
|
|
29
|
+
1,
|
|
30
|
+
1
|
|
31
|
+
],
|
|
32
|
+
"parent": "root"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"value": "Resources",
|
|
36
|
+
"href": "#resources",
|
|
37
|
+
"depth": 3,
|
|
38
|
+
"numbering": [
|
|
39
|
+
1,
|
|
40
|
+
1,
|
|
41
|
+
1
|
|
42
|
+
],
|
|
43
|
+
"parent": "root"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"value": "Variables",
|
|
47
|
+
"href": "#variables",
|
|
48
|
+
"depth": 2,
|
|
49
|
+
"numbering": [
|
|
50
|
+
1,
|
|
51
|
+
2
|
|
52
|
+
],
|
|
53
|
+
"parent": "root"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"value": "Visual options",
|
|
57
|
+
"href": "#visual-options",
|
|
58
|
+
"depth": 3,
|
|
59
|
+
"numbering": [
|
|
60
|
+
1,
|
|
61
|
+
2,
|
|
62
|
+
1
|
|
63
|
+
],
|
|
64
|
+
"parent": "root"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"value": "Default",
|
|
68
|
+
"href": "#default",
|
|
69
|
+
"depth": 4,
|
|
70
|
+
"numbering": [
|
|
71
|
+
1,
|
|
72
|
+
2,
|
|
73
|
+
1,
|
|
74
|
+
1
|
|
75
|
+
],
|
|
76
|
+
"parent": "root"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"value": "Active",
|
|
80
|
+
"href": "#active",
|
|
81
|
+
"depth": 4,
|
|
82
|
+
"numbering": [
|
|
83
|
+
1,
|
|
84
|
+
2,
|
|
85
|
+
1,
|
|
86
|
+
2
|
|
87
|
+
],
|
|
88
|
+
"parent": "root"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"value": "Disabled",
|
|
92
|
+
"href": "#disabled",
|
|
93
|
+
"depth": 4,
|
|
94
|
+
"numbering": [
|
|
95
|
+
1,
|
|
96
|
+
2,
|
|
97
|
+
1,
|
|
98
|
+
3
|
|
99
|
+
],
|
|
100
|
+
"parent": "root"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"value": "Invalid toned",
|
|
104
|
+
"href": "#invalid-toned",
|
|
105
|
+
"depth": 4,
|
|
106
|
+
"numbering": [
|
|
107
|
+
1,
|
|
108
|
+
2,
|
|
109
|
+
1,
|
|
110
|
+
4
|
|
111
|
+
],
|
|
112
|
+
"parent": "root"
|
|
113
|
+
}
|
|
114
|
+
],
|
|
115
|
+
"layout": "app-frame",
|
|
116
|
+
"tabs": [
|
|
117
|
+
{
|
|
118
|
+
"key": "overview",
|
|
119
|
+
"title": "Overview",
|
|
120
|
+
"order": 0
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"key": "guidelines",
|
|
124
|
+
"title": "Guidelines",
|
|
125
|
+
"order": 2
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"key": "dev",
|
|
129
|
+
"title": "Implementation",
|
|
130
|
+
"order": 3
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"key": "a11y",
|
|
134
|
+
"title": "Accessibility",
|
|
135
|
+
"order": 4
|
|
136
|
+
}
|
|
137
|
+
]
|
|
138
|
+
},
|
|
139
|
+
"mdx": "\n## Overview\n\nRadio inputs ensure users can easily select one option from a small, visible set\nof mutually exclusive choices with clear labels and visual feedback.\n\n### Resources\n\nDeep dive into implementation details and access the Nimbus design library.\n\n[Figma library](https://www.figma.com/design/gHbAJGfcrCv7f2bgzUQgHq/NIMBUS-Guidelines?node-id=1852-4333&m=dev)\n\n## Variables\n\nGet familiar with the features.\n\n### Visual options\n\n#### Default\n\n```jsx live\nconst App = () => (\n <RadioInput.Root orientation=\"horizontal\" name=\"default-example\">\n <RadioInput.Option value=\"option1\">Select me</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Select me instead</RadioInput.Option>\n </RadioInput.Root>\n)\n```\n\n#### Active\n\n```jsx live\nconst App = () => (\n <RadioInput.Root orientation=\"horizontal\" name=\"active-example\" defaultValue=\"option1\">\n <RadioInput.Option value=\"option1\">Selected option</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Unselected option</RadioInput.Option>\n </RadioInput.Root>\n)\n```\n\n#### Disabled\n\n```jsx live\nconst App = () => (\n <RadioInput.Root orientation=\"horizontal\" name=\"disabled-example\" isDisabled>\n <RadioInput.Option value=\"option1\">Disabled option</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Also disabled</RadioInput.Option>\n </RadioInput.Root>\n)\n```\n\n#### Invalid toned\n\n```jsx live\nconst App = () => (\n <RadioInput.Root orientation=\"horizontal\" name=\"invalid-example\" isInvalid>\n <RadioInput.Option value=\"option1\">Invalid option</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Another invalid option</RadioInput.Option>\n </RadioInput.Root>\n)\n```\n",
|
|
140
|
+
"views": {
|
|
141
|
+
"overview": {
|
|
142
|
+
"mdx": "\n## Overview\n\nRadio inputs ensure users can easily select one option from a small, visible set\nof mutually exclusive choices with clear labels and visual feedback.\n\n### Resources\n\nDeep dive into implementation details and access the Nimbus design library.\n\n[Figma library](https://www.figma.com/design/gHbAJGfcrCv7f2bgzUQgHq/NIMBUS-Guidelines?node-id=1852-4333&m=dev)\n\n## Variables\n\nGet familiar with the features.\n\n### Visual options\n\n#### Default\n\n```jsx live\nconst App = () => (\n <RadioInput.Root orientation=\"horizontal\" name=\"default-example\">\n <RadioInput.Option value=\"option1\">Select me</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Select me instead</RadioInput.Option>\n </RadioInput.Root>\n)\n```\n\n#### Active\n\n```jsx live\nconst App = () => (\n <RadioInput.Root orientation=\"horizontal\" name=\"active-example\" defaultValue=\"option1\">\n <RadioInput.Option value=\"option1\">Selected option</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Unselected option</RadioInput.Option>\n </RadioInput.Root>\n)\n```\n\n#### Disabled\n\n```jsx live\nconst App = () => (\n <RadioInput.Root orientation=\"horizontal\" name=\"disabled-example\" isDisabled>\n <RadioInput.Option value=\"option1\">Disabled option</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Also disabled</RadioInput.Option>\n </RadioInput.Root>\n)\n```\n\n#### Invalid toned\n\n```jsx live\nconst App = () => (\n <RadioInput.Root orientation=\"horizontal\" name=\"invalid-example\" isInvalid>\n <RadioInput.Option value=\"option1\">Invalid option</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Another invalid option</RadioInput.Option>\n </RadioInput.Root>\n)\n```\n",
|
|
143
|
+
"toc": [
|
|
144
|
+
{
|
|
145
|
+
"value": "Overview",
|
|
146
|
+
"href": "#overview",
|
|
147
|
+
"depth": 2,
|
|
148
|
+
"numbering": [
|
|
149
|
+
1,
|
|
150
|
+
1
|
|
151
|
+
],
|
|
152
|
+
"parent": "root"
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"value": "Resources",
|
|
156
|
+
"href": "#resources",
|
|
157
|
+
"depth": 3,
|
|
158
|
+
"numbering": [
|
|
159
|
+
1,
|
|
160
|
+
1,
|
|
161
|
+
1
|
|
162
|
+
],
|
|
163
|
+
"parent": "root"
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"value": "Variables",
|
|
167
|
+
"href": "#variables",
|
|
168
|
+
"depth": 2,
|
|
169
|
+
"numbering": [
|
|
170
|
+
1,
|
|
171
|
+
2
|
|
172
|
+
],
|
|
173
|
+
"parent": "root"
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"value": "Visual options",
|
|
177
|
+
"href": "#visual-options",
|
|
178
|
+
"depth": 3,
|
|
179
|
+
"numbering": [
|
|
180
|
+
1,
|
|
181
|
+
2,
|
|
182
|
+
1
|
|
183
|
+
],
|
|
184
|
+
"parent": "root"
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"value": "Default",
|
|
188
|
+
"href": "#default",
|
|
189
|
+
"depth": 4,
|
|
190
|
+
"numbering": [
|
|
191
|
+
1,
|
|
192
|
+
2,
|
|
193
|
+
1,
|
|
194
|
+
1
|
|
195
|
+
],
|
|
196
|
+
"parent": "root"
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"value": "Active",
|
|
200
|
+
"href": "#active",
|
|
201
|
+
"depth": 4,
|
|
202
|
+
"numbering": [
|
|
203
|
+
1,
|
|
204
|
+
2,
|
|
205
|
+
1,
|
|
206
|
+
2
|
|
207
|
+
],
|
|
208
|
+
"parent": "root"
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"value": "Disabled",
|
|
212
|
+
"href": "#disabled",
|
|
213
|
+
"depth": 4,
|
|
214
|
+
"numbering": [
|
|
215
|
+
1,
|
|
216
|
+
2,
|
|
217
|
+
1,
|
|
218
|
+
3
|
|
219
|
+
],
|
|
220
|
+
"parent": "root"
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
"value": "Invalid toned",
|
|
224
|
+
"href": "#invalid-toned",
|
|
225
|
+
"depth": 4,
|
|
226
|
+
"numbering": [
|
|
227
|
+
1,
|
|
228
|
+
2,
|
|
229
|
+
1,
|
|
230
|
+
4
|
|
231
|
+
],
|
|
232
|
+
"parent": "root"
|
|
233
|
+
}
|
|
234
|
+
]
|
|
235
|
+
},
|
|
236
|
+
"a11y": {
|
|
237
|
+
"mdx": "\n## Accessibility\n\nAccessibility ensures that digital content and functionality are usable by\neveryone, including people with disabilities, by addressing visual, auditory,\ncognitive, and physical limitations.\n\n```jsx live\nconst App = () => (\n <RadioInput.Root\n orientation=\"horizontal\"\n name=\"accessibility-example\"\n id=\"accessibility-example-group\"\n aria-label=\"Select an option\"\n isRequired={true}\n >\n <RadioInput.Option\n value=\"option1\"\n id=\"option1\"\n aria-label=\"Select me option\"\n >\n Select me\n </RadioInput.Option>\n <RadioInput.Option\n value=\"option2\"\n id=\"option2\"\n aria-label=\"Select me instead option\"\n >\n Select me instead\n </RadioInput.Option>\n </RadioInput.Root>\n)\n```\n\n### Accessibility standards\n\n- Always provide a visible label for the radio input.\n- Clearly associate the label with the input using the `for` attribute on the\n `<label>` and a matching `id` on the `<input type=\"radio\">`.\n- Group related radio inputs within a `<fieldset>` with a `<legend>` to provide\n a clear group label for screen readers.\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 into and out of the radio group.\n- Use arrow keys (left/right or up/down) to navigate between radio inputs within\n the group.\n- Selected state should be clearly indicated.\n- Communicate errors clearly, using both visual cues (e.g., color) and\n descriptive error messages.\n\n## Resources\n\n- [Adobe Spectrum Design System](https://spectrum.adobe.com/)\n- [React Spectrum](https://react-spectrum.adobe.com/)\n- [W3C ARIA Authoring Practices Guide (APG)](https://www.w3.org/WAI/ARIA/apg/)\n (Search for \"Radio Button\" pattern)\n",
|
|
238
|
+
"toc": [
|
|
239
|
+
{
|
|
240
|
+
"value": "Accessibility",
|
|
241
|
+
"href": "#accessibility",
|
|
242
|
+
"depth": 2,
|
|
243
|
+
"numbering": [
|
|
244
|
+
1,
|
|
245
|
+
1
|
|
246
|
+
],
|
|
247
|
+
"parent": "root"
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
"value": "Accessibility standards",
|
|
251
|
+
"href": "#accessibility-standards",
|
|
252
|
+
"depth": 3,
|
|
253
|
+
"numbering": [
|
|
254
|
+
1,
|
|
255
|
+
1,
|
|
256
|
+
1
|
|
257
|
+
],
|
|
258
|
+
"parent": "root"
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
"value": "Resources",
|
|
262
|
+
"href": "#resources",
|
|
263
|
+
"depth": 2,
|
|
264
|
+
"numbering": [
|
|
265
|
+
1,
|
|
266
|
+
2
|
|
267
|
+
],
|
|
268
|
+
"parent": "root"
|
|
269
|
+
}
|
|
270
|
+
]
|
|
271
|
+
},
|
|
272
|
+
"dev": {
|
|
273
|
+
"mdx": "\n## Getting started\n\n### Import\n\n```tsx\nimport { RadioInput, type RadioInputRootProps, type RadioInputOptionProps } from '@commercetools/nimbus';\n```\n\n### Basic usage\n\nThe RadioInput is a compound component that requires both `RadioInput.Root` and `RadioInput.Option` sub-components. The simplest implementation uses uncontrolled mode:\n\n```jsx live-dev\nconst App = () => (\n <RadioInput.Root name=\"choice\">\n <RadioInput.Option value=\"yes\">Yes</RadioInput.Option>\n <RadioInput.Option value=\"no\">No</RadioInput.Option>\n </RadioInput.Root>\n)\n```\n\n## Usage examples\n\n### Orientation options\n\nThe `orientation` prop controls the layout direction of radio options. The default is `vertical`:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"column\" gap=\"400\">\n <RadioInput.Root name=\"vertical-example\" orientation=\"vertical\">\n <RadioInput.Option value=\"option1\">First Option</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Second Option</RadioInput.Option>\n <RadioInput.Option value=\"option3\">Third Option</RadioInput.Option>\n </RadioInput.Root>\n <hr />\n <RadioInput.Root name=\"horizontal-example\" orientation=\"horizontal\">\n <RadioInput.Option value=\"option1\">First Option</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Second Option</RadioInput.Option>\n <RadioInput.Option value=\"option3\">Third Option</RadioInput.Option>\n </RadioInput.Root>\n </Stack>\n)\n```\n\n**Behavioral differences:**\n- `orientation=\"vertical\"`: Options are stacked vertically with consistent spacing (default)\n- `orientation=\"horizontal\"`: Options are arranged in a row, useful for compact layouts with few options\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 [selectedValue, setSelectedValue] = useState<string | undefined>(undefined);\n\n return (\n <Stack direction=\"column\" gap=\"400\">\n <RadioInput.Root\n name=\"uncontrolled-example\"\n defaultValue=\"option2\"\n onChange={(value) => {\n setSelectedValue(value);\n }}\n >\n <RadioInput.Option value=\"option1\">First Choice</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Second Choice</RadioInput.Option>\n <RadioInput.Option value=\"option3\">Third Choice</RadioInput.Option>\n </RadioInput.Root>\n <Text fontSize=\"sm\">\n Selected: {selectedValue || 'None'}\n </Text>\n </Stack>\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<RadioInputRootProps[\"value\"]>(\"option1\");\n\n return (\n <Stack direction=\"column\" gap=\"400\">\n <RadioInput.Root\n name=\"controlled-example\"\n value={value}\n onChange={setValue}\n >\n <RadioInput.Option value=\"option1\">First Choice</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Second Choice</RadioInput.Option>\n <RadioInput.Option value=\"option3\">Third Choice</RadioInput.Option>\n </RadioInput.Root>\n <Text fontSize=\"sm\">\n Selected: {value || 'None'}\n </Text>\n <Button size=\"xs\" onPress={() => setValue(\"option2\")}>\n Select Second Option\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 selections\n- Clear or programmatically set the value\n- Coordinate with other form fields\n\n### Disabled state\n\nUse the `isDisabled` prop to disable the entire radio group, or apply it to individual options:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"column\" gap=\"400\">\n <RadioInput.Root name=\"disabled-example\" isDisabled>\n <RadioInput.Option value=\"option1\">Disabled Option 1</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Disabled Option 2</RadioInput.Option>\n </RadioInput.Root>\n \n <RadioInput.Root name=\"disabled-selected-example\" isDisabled defaultValue=\"option1\">\n <RadioInput.Option value=\"option1\">Selected but Disabled</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Also Disabled</RadioInput.Option>\n </RadioInput.Root>\n \n <hr />\n \n <RadioInput.Root name=\"partially-disabled-example\" defaultValue=\"option1\">\n <RadioInput.Option value=\"option1\">Available Option</RadioInput.Option>\n <RadioInput.Option value=\"option2\" isDisabled>Disabled Option</RadioInput.Option>\n <RadioInput.Option value=\"option3\">Another Available Option</RadioInput.Option>\n </RadioInput.Root>\n </Stack>\n)\n```\n\n### Invalid state\n\nUse the `isInvalid` prop to indicate validation errors:\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"column\" gap=\"400\">\n <RadioInput.Root name=\"invalid-example\" isInvalid>\n <RadioInput.Option value=\"option1\">Invalid Option 1</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Invalid Option 2</RadioInput.Option>\n </RadioInput.Root>\n \n <RadioInput.Root name=\"invalid-selected-example\" isInvalid defaultValue=\"option1\">\n <RadioInput.Option value=\"option1\">Selected Invalid Option</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Another Invalid Option</RadioInput.Option>\n </RadioInput.Root>\n </Stack>\n)\n```\n\n### With FormField\n\nRadioInput integrates seamlessly with the FormField pattern for consistent form layouts:\n\n```jsx live-dev\nconst App = () => (\n <FormField.Root>\n <FormField.Label>Select your preference:</FormField.Label>\n <FormField.Input mt=\"300\">\n <RadioInput.Root name=\"formfield-example\" aria-label=\"Preference selection\">\n <RadioInput.Option value=\"option1\">Option 1</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Option 2</RadioInput.Option>\n <RadioInput.Option value=\"option3\">Option 3</RadioInput.Option>\n </RadioInput.Root>\n </FormField.Input>\n <FormField.Description mt=\"300\">\n Choose one option from the list above.\n </FormField.Description>\n </FormField.Root>\n)\n```\n\n### Required state\n\nUse the `isRequired` prop to indicate that a selection is mandatory. When used with `FormField`, it displays a visual indicator (asterisk) in the label and sets `aria-required=\"true\"` for accessibility:\n\n```jsx live-dev\nconst App = () => (\n <FormField.Root isRequired>\n <FormField.Label>Select your preference</FormField.Label>\n <FormField.Input mt=\"300\">\n <RadioInput.Root name=\"required-example\" isRequired aria-label=\"Preference selection\">\n <RadioInput.Option value=\"option1\">Option 1</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Option 2</RadioInput.Option>\n <RadioInput.Option value=\"option3\">Option 3</RadioInput.Option>\n </RadioInput.Root>\n </FormField.Input>\n <FormField.Description mt=\"300\">\n You must select one of the options above.\n </FormField.Description>\n </FormField.Root>\n)\n```\n\n**Note:** The `isRequired` prop sets the `aria-required` attribute on the radio group for screen readers. For visual indication, use it within a `FormField.Root` that also has `isRequired`, which will display an asterisk (*) in the label.\n\n## Component requirements\n\n## Accessibility\n\nThe RadioInput handles most accessibility requirements internally via React Aria Components. However, you must always associate an internationalized label with the component. Visual labels are preferable, and can be set by:\n\n- Using the `FormField` pattern component (recommended):\n```tsx\n<FormField.Root>\n <FormField.Label>\n {msg.format(labelMessage)}\n </FormField.Label>\n <FormField.Input>\n <RadioInput.Root name=\"example\" aria-label={msg.format(labelMessage)}>\n <RadioInput.Option value=\"option1\">Option 1</RadioInput.Option>\n </RadioInput.Root>\n </FormField.Input>\n</FormField.Root>\n```\n\n- Associating a `<label>` element with the `RadioInput.Root` using `aria-labelledby`:\n```tsx\n<label id=\"radio-label-id\">\n {msg.format(labelMessage)}\n</label>\n<RadioInput.Root name=\"example\" aria-labelledby=\"radio-label-id\">\n <RadioInput.Option value=\"option1\">Option 1</RadioInput.Option>\n</RadioInput.Root>\n```\n\nIf your design requires that the label should not be visible, the label should be set using the `aria-label` prop:\n```tsx\n<RadioInput.Root \n name=\"example\" \n aria-label={msg.format(labelMessage)}\n>\n <RadioInput.Option value=\"option1\">Option 1</RadioInput.Option>\n</RadioInput.Root>\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-radio-input\";\n\nexport const Example = () => (\n <RadioInput.Root id={PERSISTENT_ID} name=\"example\">\n <RadioInput.Option value=\"option1\">Option 1</RadioInput.Option>\n </RadioInput.Root>\n);\n```\n\n#### Keyboard navigation\n\nThe component supports full keyboard interaction:\n- `Tab` / `Shift+Tab`: Navigate into and out of the radio group\n- `Arrow keys` (Up/Down or Left/Right): Navigate between radio options within the group\n- `Space`: Select the focused radio option\n- `Enter`: Does not trigger selection (use Space instead)\n\n## API reference\n\n<PropsTable id=\"RadioInput\" />\n\n## Common patterns\n\n### Form validation\n\nValidate radio input selection and display error messages:\n\n```jsx live-dev\nconst App = () => {\n const [value, setValue] = useState<string | undefined>(undefined);\n const [error, setError] = useState<string | undefined>(undefined);\n const [touched, setTouched] = useState(false);\n\n const handleChange = (newValue: string) => {\n setValue(newValue);\n setError(undefined);\n };\n\n const handleBlur = () => {\n setTouched(true);\n if (!value) {\n setError('Please select an option');\n }\n };\n\n const handleSubmit = () => {\n if (!value) {\n setError('Please select an option');\n setTouched(true);\n }\n };\n\n return (\n <Stack direction=\"column\" gap=\"400\">\n <FormField.Root isInvalid={!!(error && touched)}>\n <FormField.Label>Select an option</FormField.Label>\n <FormField.Input>\n <RadioInput.Root\n name=\"validation-example\"\n value={value}\n onChange={handleChange}\n onBlur={handleBlur}\n isInvalid={!!(error && touched)}\n aria-label=\"Option selection\"\n >\n <RadioInput.Option value=\"option1\">Option 1</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Option 2</RadioInput.Option>\n <RadioInput.Option value=\"option3\">Option 3</RadioInput.Option>\n </RadioInput.Root>\n </FormField.Input>\n {touched && error && (\n <FormField.Error>{error}</FormField.Error>\n )}\n </FormField.Root>\n <Button onPress={handleSubmit}>Submit</Button>\n {value && !error && (\n <Text fontSize=\"sm\" color=\"positive.9\">\n Successfully selected: {value}\n </Text>\n )}\n </Stack>\n );\n}\n```\n\n### Conditional rendering based on selection\n\nShow or hide content based on the selected radio option:\n\n```jsx live-dev\nconst App = () => {\n const [value, setValue] = useState<string | undefined>(undefined);\n\n return (\n <Stack direction=\"column\" gap=\"400\">\n <RadioInput.Root\n name=\"conditional-example\"\n value={value}\n onChange={setValue}\n >\n <RadioInput.Option value=\"yes\">Yes, I agree</RadioInput.Option>\n <RadioInput.Option value=\"no\">No, I disagree</RadioInput.Option>\n </RadioInput.Root>\n \n {value === 'yes' && (\n <Text fontSize=\"sm\" color=\"positive.9\">\n Thank you for agreeing!\n </Text>\n )}\n \n {value === 'no' && (\n <Text fontSize=\"sm\" color=\"critical.9\">\n Please let us know why you disagree.\n </Text>\n )}\n </Stack>\n );\n}\n```\n\n## Testing your implementation\n\nThese examples demonstrate how to test your implementation when using RadioInput in 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 { RadioInput, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"RadioInput - Basic rendering\", () => {\n it(\"renders radio group with options\", () => {\n render(\n <NimbusProvider>\n <RadioInput.Root name=\"test-radio\" aria-label=\"Test selection\">\n <RadioInput.Option value=\"option1\">Option 1</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Option 2</RadioInput.Option>\n </RadioInput.Root>\n </NimbusProvider>\n );\n\n expect(screen.getByRole(\"radiogroup\")).toBeInTheDocument();\n expect(\n screen.getByRole(\"radio\", { name: /option 1/i })\n ).toBeInTheDocument();\n expect(\n screen.getByRole(\"radio\", { name: /option 2/i })\n ).toBeInTheDocument();\n });\n\n it(\"renders with default value selected\", () => {\n render(\n <NimbusProvider>\n <RadioInput.Root\n name=\"test-radio\"\n defaultValue=\"option1\"\n aria-label=\"Test selection\"\n >\n <RadioInput.Option value=\"option1\">Option 1</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Option 2</RadioInput.Option>\n </RadioInput.Root>\n </NimbusProvider>\n );\n\n expect(screen.getByRole(\"radio\", { name: /option 1/i })).toBeChecked();\n expect(screen.getByRole(\"radio\", { name: /option 2/i })).not.toBeChecked();\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 { RadioInput, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"RadioInput - Interactions\", () => {\n it(\"calls onChange when option is selected\", async () => {\n const user = userEvent.setup();\n const handleChange = vi.fn();\n\n render(\n <NimbusProvider>\n <RadioInput.Root\n name=\"test-radio\"\n onChange={handleChange}\n aria-label=\"Test selection\"\n >\n <RadioInput.Option value=\"option1\">Option 1</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Option 2</RadioInput.Option>\n </RadioInput.Root>\n </NimbusProvider>\n );\n\n const option2 = screen.getByRole(\"radio\", { name: /option 2/i });\n await user.click(option2);\n\n expect(handleChange).toHaveBeenCalledWith(\"option2\");\n });\n\n it(\"allows only one option to be selected at a time\", async () => {\n const user = userEvent.setup();\n\n render(\n <NimbusProvider>\n <RadioInput.Root\n name=\"test-radio\"\n defaultValue=\"option1\"\n aria-label=\"Test selection\"\n >\n <RadioInput.Option value=\"option1\">Option 1</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Option 2</RadioInput.Option>\n <RadioInput.Option value=\"option3\">Option 3</RadioInput.Option>\n </RadioInput.Root>\n </NimbusProvider>\n );\n\n const option1 = screen.getByRole(\"radio\", { name: /option 1/i });\n const option2 = screen.getByRole(\"radio\", { name: /option 2/i });\n const option3 = screen.getByRole(\"radio\", { name: /option 3/i });\n\n expect(option1).toBeChecked();\n expect(option2).not.toBeChecked();\n expect(option3).not.toBeChecked();\n\n await user.click(option2);\n\n await waitFor(() => {\n expect(option1).not.toBeChecked();\n expect(option2).toBeChecked();\n expect(option3).not.toBeChecked();\n });\n });\n\n it(\"supports keyboard navigation with arrow keys\", async () => {\n const user = userEvent.setup();\n\n render(\n <NimbusProvider>\n <RadioInput.Root name=\"test-radio\" aria-label=\"Test selection\">\n <RadioInput.Option value=\"option1\">Option 1</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Option 2</RadioInput.Option>\n </RadioInput.Root>\n </NimbusProvider>\n );\n\n const option1 = screen.getByRole(\"radio\", { name: /option 1/i });\n const option2 = screen.getByRole(\"radio\", { name: /option 2/i });\n\n // Tab to focus the first option\n await user.tab();\n expect(option1).toHaveFocus();\n\n // Use arrow key to navigate to next option\n await user.keyboard(\"{ArrowDown}\");\n expect(option2).toHaveFocus();\n\n // Select with Space\n await user.keyboard(\" \");\n expect(option2).toBeChecked();\n });\n});\n```\n\n### Testing Disabled State\n\nTest disabled state 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 { RadioInput, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"RadioInput - Disabled state\", () => {\n it(\"prevents interaction when disabled\", async () => {\n const user = userEvent.setup();\n const handleChange = vi.fn();\n\n render(\n <NimbusProvider>\n <RadioInput.Root\n name=\"test-radio\"\n isDisabled\n onChange={handleChange}\n aria-label=\"Test selection\"\n >\n <RadioInput.Option value=\"option1\">Option 1</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Option 2</RadioInput.Option>\n </RadioInput.Root>\n </NimbusProvider>\n );\n\n const radioGroup = screen.getByRole(\"radiogroup\");\n expect(radioGroup).toHaveAttribute(\"aria-disabled\", \"true\");\n\n const option1 = screen.getByRole(\"radio\", { name: /option 1/i });\n await user.click(option1);\n\n expect(handleChange).not.toHaveBeenCalled();\n });\n\n it(\"does not receive focus when disabled\", async () => {\n const user = userEvent.setup();\n\n render(\n <NimbusProvider>\n <RadioInput.Root\n name=\"test-radio\"\n isDisabled\n aria-label=\"Test selection\"\n >\n <RadioInput.Option value=\"option1\">Option 1</RadioInput.Option>\n </RadioInput.Root>\n </NimbusProvider>\n );\n\n await user.tab();\n const option1 = screen.getByRole(\"radio\", { name: /option 1/i });\n expect(option1).not.toHaveFocus();\n });\n});\n```\n\n### Testing Invalid State\n\nTest invalid state 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 { RadioInput, NimbusProvider } from \"@commercetools/nimbus\";\n\ndescribe(\"RadioInput - Invalid state\", () => {\n it(\"applies invalid styling and attributes\", () => {\n render(\n <NimbusProvider>\n <RadioInput.Root\n name=\"test-radio\"\n isInvalid\n aria-label=\"Test selection\"\n >\n <RadioInput.Option value=\"option1\">Option 1</RadioInput.Option>\n <RadioInput.Option value=\"option2\">Option 2</RadioInput.Option>\n </RadioInput.Root>\n </NimbusProvider>\n );\n\n const radioGroup = screen.getByRole(\"radiogroup\");\n expect(radioGroup).toHaveAttribute(\"aria-invalid\", \"true\");\n });\n});\n```\n\n\n## Resources\n\n- [Storybook](https://nimbus-storybook.vercel.app/?path=/docs/components-radioinput--docs)\n- [React Aria RadioGroup](https://react-spectrum.adobe.com/react-aria/RadioGroup.html)\n- [ARIA Radio Group Pattern](https://www.w3.org/WAI/ARIA/apg/patterns/radio/)\n\n",
|
|
274
|
+
"toc": [
|
|
275
|
+
{
|
|
276
|
+
"value": "Getting started",
|
|
277
|
+
"href": "#getting-started",
|
|
278
|
+
"depth": 2,
|
|
279
|
+
"numbering": [
|
|
280
|
+
1,
|
|
281
|
+
1
|
|
282
|
+
],
|
|
283
|
+
"parent": "root"
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
"value": "Import",
|
|
287
|
+
"href": "#import",
|
|
288
|
+
"depth": 3,
|
|
289
|
+
"numbering": [
|
|
290
|
+
1,
|
|
291
|
+
1,
|
|
292
|
+
1
|
|
293
|
+
],
|
|
294
|
+
"parent": "root"
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
"value": "Basic usage",
|
|
298
|
+
"href": "#basic-usage",
|
|
299
|
+
"depth": 3,
|
|
300
|
+
"numbering": [
|
|
301
|
+
1,
|
|
302
|
+
1,
|
|
303
|
+
2
|
|
304
|
+
],
|
|
305
|
+
"parent": "root"
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
"value": "Usage examples",
|
|
309
|
+
"href": "#usage-examples",
|
|
310
|
+
"depth": 2,
|
|
311
|
+
"numbering": [
|
|
312
|
+
1,
|
|
313
|
+
2
|
|
314
|
+
],
|
|
315
|
+
"parent": "root"
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
"value": "Orientation options",
|
|
319
|
+
"href": "#orientation-options",
|
|
320
|
+
"depth": 3,
|
|
321
|
+
"numbering": [
|
|
322
|
+
1,
|
|
323
|
+
2,
|
|
324
|
+
1
|
|
325
|
+
],
|
|
326
|
+
"parent": "root"
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
"value": "Uncontrolled mode",
|
|
330
|
+
"href": "#uncontrolled-mode",
|
|
331
|
+
"depth": 3,
|
|
332
|
+
"numbering": [
|
|
333
|
+
1,
|
|
334
|
+
2,
|
|
335
|
+
2
|
|
336
|
+
],
|
|
337
|
+
"parent": "root"
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
"value": "Controlled mode",
|
|
341
|
+
"href": "#controlled-mode",
|
|
342
|
+
"depth": 3,
|
|
343
|
+
"numbering": [
|
|
344
|
+
1,
|
|
345
|
+
2,
|
|
346
|
+
3
|
|
347
|
+
],
|
|
348
|
+
"parent": "root"
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
"value": "Disabled state",
|
|
352
|
+
"href": "#disabled-state",
|
|
353
|
+
"depth": 3,
|
|
354
|
+
"numbering": [
|
|
355
|
+
1,
|
|
356
|
+
2,
|
|
357
|
+
4
|
|
358
|
+
],
|
|
359
|
+
"parent": "root"
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
"value": "Invalid state",
|
|
363
|
+
"href": "#invalid-state",
|
|
364
|
+
"depth": 3,
|
|
365
|
+
"numbering": [
|
|
366
|
+
1,
|
|
367
|
+
2,
|
|
368
|
+
5
|
|
369
|
+
],
|
|
370
|
+
"parent": "root"
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
"value": "With FormField",
|
|
374
|
+
"href": "#with-formfield",
|
|
375
|
+
"depth": 3,
|
|
376
|
+
"numbering": [
|
|
377
|
+
1,
|
|
378
|
+
2,
|
|
379
|
+
6
|
|
380
|
+
],
|
|
381
|
+
"parent": "root"
|
|
382
|
+
},
|
|
383
|
+
{
|
|
384
|
+
"value": "Required state",
|
|
385
|
+
"href": "#required-state",
|
|
386
|
+
"depth": 3,
|
|
387
|
+
"numbering": [
|
|
388
|
+
1,
|
|
389
|
+
2,
|
|
390
|
+
7
|
|
391
|
+
],
|
|
392
|
+
"parent": "root"
|
|
393
|
+
},
|
|
394
|
+
{
|
|
395
|
+
"value": "Component requirements",
|
|
396
|
+
"href": "#component-requirements",
|
|
397
|
+
"depth": 2,
|
|
398
|
+
"numbering": [
|
|
399
|
+
1,
|
|
400
|
+
3
|
|
401
|
+
],
|
|
402
|
+
"parent": "root"
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
"value": "Accessibility",
|
|
406
|
+
"href": "#accessibility",
|
|
407
|
+
"depth": 2,
|
|
408
|
+
"numbering": [
|
|
409
|
+
1,
|
|
410
|
+
4
|
|
411
|
+
],
|
|
412
|
+
"parent": "root"
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
"value": "Keyboard navigation",
|
|
416
|
+
"href": "#keyboard-navigation",
|
|
417
|
+
"depth": 4,
|
|
418
|
+
"numbering": [
|
|
419
|
+
1,
|
|
420
|
+
4,
|
|
421
|
+
1,
|
|
422
|
+
1
|
|
423
|
+
],
|
|
424
|
+
"parent": "root"
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
"value": "API reference",
|
|
428
|
+
"href": "#api-reference",
|
|
429
|
+
"depth": 2,
|
|
430
|
+
"numbering": [
|
|
431
|
+
1,
|
|
432
|
+
5
|
|
433
|
+
],
|
|
434
|
+
"parent": "root"
|
|
435
|
+
},
|
|
436
|
+
{
|
|
437
|
+
"value": "Common patterns",
|
|
438
|
+
"href": "#common-patterns",
|
|
439
|
+
"depth": 2,
|
|
440
|
+
"numbering": [
|
|
441
|
+
1,
|
|
442
|
+
6
|
|
443
|
+
],
|
|
444
|
+
"parent": "root"
|
|
445
|
+
},
|
|
446
|
+
{
|
|
447
|
+
"value": "Form validation",
|
|
448
|
+
"href": "#form-validation",
|
|
449
|
+
"depth": 3,
|
|
450
|
+
"numbering": [
|
|
451
|
+
1,
|
|
452
|
+
6,
|
|
453
|
+
1
|
|
454
|
+
],
|
|
455
|
+
"parent": "root"
|
|
456
|
+
},
|
|
457
|
+
{
|
|
458
|
+
"value": "Conditional rendering based on selection",
|
|
459
|
+
"href": "#conditional-rendering-based-on-selection",
|
|
460
|
+
"depth": 3,
|
|
461
|
+
"numbering": [
|
|
462
|
+
1,
|
|
463
|
+
6,
|
|
464
|
+
2
|
|
465
|
+
],
|
|
466
|
+
"parent": "root"
|
|
467
|
+
},
|
|
468
|
+
{
|
|
469
|
+
"value": "Testing your implementation",
|
|
470
|
+
"href": "#testing-your-implementation",
|
|
471
|
+
"depth": 2,
|
|
472
|
+
"numbering": [
|
|
473
|
+
1,
|
|
474
|
+
7
|
|
475
|
+
],
|
|
476
|
+
"parent": "root"
|
|
477
|
+
},
|
|
478
|
+
{
|
|
479
|
+
"value": "Basic Rendering Tests",
|
|
480
|
+
"href": "#basic-rendering-tests",
|
|
481
|
+
"depth": 3,
|
|
482
|
+
"numbering": [
|
|
483
|
+
1,
|
|
484
|
+
7,
|
|
485
|
+
1
|
|
486
|
+
],
|
|
487
|
+
"parent": "root"
|
|
488
|
+
},
|
|
489
|
+
{
|
|
490
|
+
"value": "Interaction Tests",
|
|
491
|
+
"href": "#interaction-tests",
|
|
492
|
+
"depth": 3,
|
|
493
|
+
"numbering": [
|
|
494
|
+
1,
|
|
495
|
+
7,
|
|
496
|
+
2
|
|
497
|
+
],
|
|
498
|
+
"parent": "root"
|
|
499
|
+
},
|
|
500
|
+
{
|
|
501
|
+
"value": "Testing Disabled State",
|
|
502
|
+
"href": "#testing-disabled-state",
|
|
503
|
+
"depth": 3,
|
|
504
|
+
"numbering": [
|
|
505
|
+
1,
|
|
506
|
+
7,
|
|
507
|
+
3
|
|
508
|
+
],
|
|
509
|
+
"parent": "root"
|
|
510
|
+
},
|
|
511
|
+
{
|
|
512
|
+
"value": "Testing Invalid State",
|
|
513
|
+
"href": "#testing-invalid-state",
|
|
514
|
+
"depth": 3,
|
|
515
|
+
"numbering": [
|
|
516
|
+
1,
|
|
517
|
+
7,
|
|
518
|
+
4
|
|
519
|
+
],
|
|
520
|
+
"parent": "root"
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
"value": "Resources",
|
|
524
|
+
"href": "#resources",
|
|
525
|
+
"depth": 2,
|
|
526
|
+
"numbering": [
|
|
527
|
+
1,
|
|
528
|
+
8
|
|
529
|
+
],
|
|
530
|
+
"parent": "root"
|
|
531
|
+
}
|
|
532
|
+
]
|
|
533
|
+
},
|
|
534
|
+
"guidelines": {
|
|
535
|
+
"mdx": "\n## Guidelines\n\nRadio input guidelines focus on providing a clear, accessible, and mutually\nexclusive set of options, ensuring users can easily understand the available\nchoices and select only one, with clear visual indication of the selected state\nand proper labeling for accessibility.\n\n### Best practices\n\n- **Clear and concise labels:** Ensure each radio input has a descriptive label\n placed consistently (usually to the right).\n- **Logical grouping:** Enclose related radio inputs within a `<fieldset>`\n element and provide a clear `<legend>` to describe the group's purpose.\n- **Visual distinction:** Clearly indicate the selected state (e.g., filled\n circle) and the non-selected state (e.g., empty circle).\n- **Sufficient spacing:** Provide enough spacing between radio inputs and their\n labels for easy selection.\n- **Keyboard accessibility:** Ensure users can navigate through radio inputs\n using the Tab key and select an option using the arrow keys and Spacebar.\n- **Clear default selection (use sparingly):** Only pre-select a radio input if\n there's a genuinely logical default option. Avoid forcing a choice\n unnecessarily.\n- **Avoid too many options:** If you have a long list of mutually exclusive\n choices, consider a dropdown select instead.\n\n### Usage\n\nRadio inputs are used when you need users to pick a single choice from a limited\nnumber of options, presenting all possibilities upfront for easy comparison and\nselection of just one.\n\n> [!TIP]\\\n> When to use\n\n- **Single selection required:** When users must choose only one option from a\n predefined list.\n- **Limited number of options:** When the number of choices is relatively small\n (typically 2-5) and all options can be displayed clearly.\n- **Equal importance of options:** When all choices are presented as equally\n valid and the user needs to make a deliberate selection.\n- **Visual comparison is beneficial:** When seeing all available options at once\n helps users understand and compare them before choosing.\n- **Clear and mutually exclusive choices:** When the options are distinct and\n there's no possibility of selecting more than one.\n\n> [!CAUTION]\\\n> When not to use\n\n- **Multiple selections allowed:** If users can select more than one option, use\n checkboxes instead.\n- **Large number of options:** For long lists of choices, a dropdown select is\n more space-efficient.\n- **Obscure or infrequently used options:** If many options are rarely chosen, a\n dropdown can hide them until needed, reducing visual clutter.\n- **Saving screen space is critical:** Radio inputs display all options, which\n can take up significant space, especially on smaller screens.\n- **Default selection is strongly preferred:** If one option is almost always\n the correct choice, a pre-selected checkbox might be more efficient (with\n clear indication that it can be unchecked).\n- **Complex or dynamic options:** When the available choices change frequently\n or depend on other user inputs, a dynamic select or autocomplete field might\n be better.\n\n### Limited options\n\nRadio inputs work best when there are a limited number of options for a user.\n\n> [!TIP]\\\n> **Do**\n>\n> - Use when there are a few options available for the user.\n\n```jsx live\nconst App = () => (\n <FormField.Root>\n <FormField.Label>Shipping priority</FormField.Label>\n <FormField.Input mt=\"200\">\n <RadioInput.Root orientation=\"vertical\" name=\"shipping-speed\">\n <RadioInput.Option value=\"standard\">Standard</RadioInput.Option>\n <RadioInput.Option value=\"express\">Express</RadioInput.Option>\n <RadioInput.Option value=\"priority\">Priority</RadioInput.Option>\n <RadioInput.Option value=\"same-day\">Same-day</RadioInput.Option>\n <RadioInput.Option value=\"instore-pickup\">\n In-store pick up\n </RadioInput.Option>\n </RadioInput.Root>\n </FormField.Input>\n </FormField.Root>\n);\n```\n\n> [!CAUTION]\\\n> **Don't**\n>\n> - Do not use radio inputs when there are an excessive amount of options. Radio\n> input options on default will show every option to a user so it can be\n> overwhelming for a user when there is a lot of information to digest in a\n> small area. Instead, use a dropdown selector to simplify the UI and make it\n> easier to search quickly to find the right option.\n\n```jsx live\nconst App = () => (\n <FormField.Root>\n <FormField.Label>Shipping priority</FormField.Label>\n <FormField.Input mt=\"200\">\n <RadioInput.Root name=\"shipping-dont\">\n <Grid\n templateColumns=\"repeat(3, auto)\"\n gap=\"400\"\n rowGap=\"400\"\n justifyItems=\"start\"\n >\n <RadioInput.Option value=\"standard\">Standard</RadioInput.Option>\n <RadioInput.Option value=\"next-business\">\n Next business day\n </RadioInput.Option>\n <RadioInput.Option value=\"local-pickup\">\n Local pickup\n </RadioInput.Option>\n <RadioInput.Option value=\"express\">Express</RadioInput.Option>\n <RadioInput.Option value=\"express-2\">Express</RadioInput.Option>\n <RadioInput.Option value=\"rural\">\n Rural/remote area shipping\n </RadioInput.Option>\n <RadioInput.Option value=\"priority\">Priority</RadioInput.Option>\n <RadioInput.Option value=\"two-day\">\n Two-day shipping\n </RadioInput.Option>\n <RadioInput.Option value=\"temp-controlled\">\n Temperature-controlled shipping\n </RadioInput.Option>\n <RadioInput.Option value=\"sameday\">Same-day</RadioInput.Option>\n <RadioInput.Option value=\"freight\">\n Freight shipping\n </RadioInput.Option>\n <RadioInput.Option value=\"white-glove\">\n White glove delivery\n </RadioInput.Option>\n <RadioInput.Option value=\"pickup\">In-store pick up</RadioInput.Option>\n <RadioInput.Option value=\"intl-economy\">\n International economy\n </RadioInput.Option>\n <RadioInput.Option value=\"carbon-neutral\">\n Carbon-neutral shipping\n </RadioInput.Option>\n </Grid>\n </RadioInput.Root>\n </FormField.Input>\n </FormField.Root>\n);\n```\n",
|
|
536
|
+
"toc": [
|
|
537
|
+
{
|
|
538
|
+
"value": "Guidelines",
|
|
539
|
+
"href": "#guidelines",
|
|
540
|
+
"depth": 2,
|
|
541
|
+
"numbering": [
|
|
542
|
+
1,
|
|
543
|
+
1
|
|
544
|
+
],
|
|
545
|
+
"parent": "root"
|
|
546
|
+
},
|
|
547
|
+
{
|
|
548
|
+
"value": "Best practices",
|
|
549
|
+
"href": "#best-practices",
|
|
550
|
+
"depth": 3,
|
|
551
|
+
"numbering": [
|
|
552
|
+
1,
|
|
553
|
+
1,
|
|
554
|
+
1
|
|
555
|
+
],
|
|
556
|
+
"parent": "root"
|
|
557
|
+
},
|
|
558
|
+
{
|
|
559
|
+
"value": "Usage",
|
|
560
|
+
"href": "#usage",
|
|
561
|
+
"depth": 3,
|
|
562
|
+
"numbering": [
|
|
563
|
+
1,
|
|
564
|
+
1,
|
|
565
|
+
2
|
|
566
|
+
],
|
|
567
|
+
"parent": "root"
|
|
568
|
+
},
|
|
569
|
+
{
|
|
570
|
+
"value": "Limited options",
|
|
571
|
+
"href": "#limited-options",
|
|
572
|
+
"depth": 3,
|
|
573
|
+
"numbering": [
|
|
574
|
+
1,
|
|
575
|
+
1,
|
|
576
|
+
3
|
|
577
|
+
],
|
|
578
|
+
"parent": "root"
|
|
579
|
+
}
|
|
580
|
+
]
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
}
|