Skip to main content

UI component inventory

Design system components for advanced customization of all SDK UI. See the component adapter guide for more context.

ComponentsContextType

Full map of UI components used by the SDK. Every property is a React component that the SDK renders internally — override any of them to substitute your own design system.

Pass a Partial<ComponentsContextType> to GustoProvider via the components prop to replace specific components while keeping SDK defaults for the rest.

To take full control of every UI component (and eliminate the React Aria dependency), pass a complete ComponentsContextType to GustoProviderCustomUIAdapter instead. All properties are then required except PaginationControl and PayrollLoading, which fall back to built-in SDK implementations when omitted.

Examples

Partial override with GustoProvider

import { GustoProvider } from '@gusto/embedded-react-sdk'

function App() {
return (
<GustoProvider
config={{ baseUrl: '/api/gusto/' }}
components={{
Button: MyButton,
TextInput: MyTextInput,
}}
>
<EmployeeOnboardingFlow companyId="company_123" />
</GustoProvider>
)
}

Full replacement with GustoProviderCustomUIAdapter

import { GustoProviderCustomUIAdapter, type ComponentsContextType } from '@gusto/embedded-react-sdk'

const myComponents: ComponentsContextType = {
Alert: props => <MyAlert {...props} />,
Button: props => <MyButton {...props} />,
// ... all required components
}

function App() {
return (
<GustoProviderCustomUIAdapter
config={{ baseUrl: '/api/gusto/' }}
components={myComponents}
>
<EmployeeOnboardingFlow companyId="company_123" />
</GustoProviderCustomUIAdapter>
)
}

Properties

PropertyTypeDescription
AlertFunctionComponent<AlertProps>Status message with an optional dismiss action; used for errors, warnings, success, and info.
BadgeFunctionComponent<BadgeProps>Small inline label for status, counts, or tags; optionally dismissible.
BannerFunctionComponent<BannerProps>Full-width notification banner for prominent warnings and errors.
BoxFunctionComponent<BoxProps>Sectioned layout container with distinct header, body, and footer areas.
BoxHeaderFunctionComponent<BoxHeaderProps>Header section of a Box with a title, optional description, and optional inline action.
BreadcrumbsFunctionComponent<BreadcrumbsProps>Navigation breadcrumb trail showing the user's position in a multi-step flow.
ButtonFunctionComponent<ButtonProps>HTML <button> with primary, secondary, tertiary, and error variants.
ButtonIconFunctionComponent<ButtonIconProps>Icon-only <button>; requires aria-label since there is no visible text for assistive technologies.
CalendarPreviewFunctionComponent<CalendarPreviewProps>Read-only calendar for visualizing a date range with optional highlighted dates.
CardFunctionComponent<CardProps>Content container with an optional overflow menu and a leading action slot.
CheckboxFunctionComponent<CheckboxProps>Form field wrapping a single <input type="checkbox" />.
CheckboxGroupFunctionComponent<CheckboxGroupProps>Form field grouping <input type="checkbox" /> elements for multi-option selection.
ComboBoxFunctionComponent<ComboBoxProps>Form field wrapping a typeahead <input /> for single-option selection.
DatePickerFunctionComponent<DatePickerProps>Form field wrapping an <input type="date" /> with a calendar picker popover.
DateRangePickerFunctionComponent<DateRangePickerProps>Form field wrapping paired <input type="date" /> elements for a date range.
DescriptionListFunctionComponent<DescriptionListProps>HTML <dl> of term/description pairs in stacked or horizontal layout.
DialogFunctionComponent<DialogProps>Modal confirmation dialog with a primary action and a cancel action.
FileInputFunctionComponent<FileInputProps>Form field wrapping an <input type="file" />.
FormBoxFunctionComponent<FormBoxProps>Bordered container for grouping related form fields, with an optional header slot.
FormBoxHeaderFunctionComponent<FormBoxHeaderProps>Header section of a FormBox with a title, optional description, and optional inline action.
HeadingFunctionComponent<HeadingProps>HTML <h1><h6> with visual style controlled independently from semantic level.
LinkFunctionComponent<LinkProps>HTML <a> for inline navigation.
LoadingSpinnerFunctionComponent<LoadingSpinnerProps>Spinner shown while data or an action is pending.
MenuFunctionComponent<MenuProps>Popover menu of actions anchored to a trigger element.
ModalFunctionComponent<ModalProps>Overlay modal with customizable body content and footer.
MultiSelectComboBoxFunctionComponent<MultiSelectComboBoxProps>Form field wrapping a typeahead <input /> for multi-option selection.
NumberInputFunctionComponent<NumberInputProps>Form field wrapping a numeric <input /> for currency, decimal, or percent values.
OrderedListFunctionComponent<OrderedListProps>HTML <ol> for a numbered list of items.
ProgressBarFunctionComponent<ProgressBarProps>Step-based progress indicator for multi-step flows.
RadioFunctionComponent<RadioProps>Form field wrapping a single <input type="radio" />.
RadioGroupFunctionComponent<RadioGroupProps>Form field grouping <input type="radio" /> elements for single-option selection.
SelectFunctionComponent<SelectProps>Form field wrapping a single-select dropdown.
SwitchFunctionComponent<SwitchProps>Form field wrapping an <input type="checkbox" /> styled as a toggle.
TableFunctionComponent<TableProps>Tabular data display with headers, rows, optional footer, and empty state.
TabsFunctionComponent<TabsProps>Tabbed navigation with associated content panels.
TextFunctionComponent<TextProps>Body text element rendered as <p>, <span>, <div>, or <pre>.
TextAreaFunctionComponent<TextAreaProps>Form field wrapping a <textarea>.
TextInputFunctionComponent<TextInputProps>Form field wrapping an <input />.
UnorderedListFunctionComponent<UnorderedListProps>HTML <ul> for an unordered list of items.
PaginationControl?FunctionComponent<PaginationControlProps>Pagination controls for list views. Defaults to the SDK's built-in pagination UI when omitted.
PayrollLoading?FunctionComponent<PayrollLoadingProps>Loading indicator for payroll calculation. Defaults to the SDK's built-in loading state when omitted.

Component props

AlertProps

Props your Alert implementation must accept from the component adapter. Renders a status message with an optional dismiss action; used for errors, warnings, success confirmations, and informational messages.

Properties

PropertyTypeDefault valueDescription
labelstringThe label text for the alert
action?ReactNodeOptional action node (e.g. a Button) rendered inline beside the label, before the dismiss button. Use this for compact alerts that need a single call-to-action next to the heading (e.g. a "Review" button summarising details available in a modal). Multi-line supporting copy should still pass through children.
children?ReactNodeOptional children to be rendered inside the alert
className?stringCSS className to be applied
disableScrollIntoView?booleanWhether to disable scrolling the alert into view and focusing it on mount. Set to true when using inside modals.
icon?ReactNodeOptional custom icon component to override the default icon
onDismiss?() => voidOptional callback function called when the dismiss button is clicked
status?"error" | "success" | "warning" | "info"'info'The visual status that the alert should convey

BadgeProps

Props your Badge implementation must accept from the component adapter. Renders a small inline label for status, counts, or tags; optionally dismissible.

Extends

  • Pick<HTMLAttributes<HTMLSpanElement>, "className" | "id" | "aria-label">

Properties

PropertyTypeDefault valueDescription
childrenReactNodeContent to be displayed inside the badge
aria-label?stringDefines a string value that labels the current element. See aria-labelledby.
className?string-
dismissAriaLabel?stringAccessible label for the dismiss button
id?string-
isDisabled?booleanWhether the badge interaction is disabled
onDismiss?() => voidOptional callback when the dismiss button is clicked. When provided, a dismiss button is rendered inside the badge.
status?"error" | "success" | "warning" | "info"'info'Visual style variant of the badge

BannerProps

Props your Banner implementation must accept from the component adapter. Renders a full-width notification banner with a colored header and body content area; used for prominent warnings and errors.

Extends

  • Pick<HTMLAttributes<HTMLDivElement>, "className" | "id" | "aria-label">

Properties

PropertyTypeDefault valueDescription
childrenReactNodeContent to be displayed in the main content area
titleReactNodeTitle content displayed in the colored header section
aria-label?stringDefines a string value that labels the current element. See aria-labelledby.
className?string-
id?string-
status?"error" | "warning"'warning'Visual status variant of the banner

BoxHeaderProps

Props your BoxHeader implementation must accept from the component adapter. Renders the header section of a Box, combining a title, optional description, and an optional inline action slot.

Properties

PropertyTypeDefault valueDescription
titleReactNodeTitle content rendered as the heading.
action?ReactNodeOptional action content (e.g. a Button) rendered inline opposite the title.
description?ReactNodeOptional supporting description rendered below the title.
headingLevel?"h1" | "h2" | "h3" | "h4" | "h5" | "h6"'h3'Semantic heading level for the title. Defaults to h3.

BoxProps

Props your Box implementation must accept from the component adapter. Renders a sectioned layout container with distinct header, body, and footer areas.

Properties

PropertyTypeDescription
children?ReactNodeContent rendered inside the box body.
className?stringCSS className to be applied to the root element.
footer?ReactNodeOptional content rendered below the body in the box footer section.
header?ReactNodeOptional content rendered above the body in the box header section.
withPadding?booleanWhether the body should apply the default inner padding. Defaults to true; set to false for content that needs to be flush with the box edges.

Props your Breadcrumbs implementation must accept from the component adapter. Renders a navigation breadcrumb trail showing the user's position in a multi-step flow.

PropertyTypeDefault valueDescription
breadcrumbsBreadcrumb[]Array of breadcrumbs
aria-label?string'Breadcrumbs'Accessibility label for the breadcrumbs
className?stringAdditional CSS class name for the breadcrumbs container
currentBreadcrumbId?stringCurrent breadcrumb id
isSmallContainer?booleanfalsePassed to the breadcrumbs when the container size is small (640px and below) At this size, the breadcrumb typically does not have sufficient size to render completely. In our implementation, we switch to a condensed mobile version of the breadcrumbs
onClick?(id: string) => voidEvent handler for breadcrumb navigation

Single entry in a Breadcrumbs trail.

PropertyTypeDescription
idstringUnique identifier for the breadcrumb. Matches against currentBreadcrumbId and is passed to onClick.
labelReactNodeDisplay content rendered for the breadcrumb.
isClickable?booleanWhen false, the breadcrumb is rendered as plain text even if onClick is provided. Defaults to true.

ButtonIconProps

Props your ButtonIcon implementation must accept from the component adapter. Renders an icon-only <button>; requires aria-label since there is no visible text for assistive technologies.

Extends

Properties

PropertyTypeDefault valueDescription
aria-labelstringRequired aria-label for icon buttons to ensure accessibility
aria-describedby?stringIdentifies the element (or elements) that describes the object. See aria-labelledby
aria-labelledby?stringIdentifies the element (or elements) that labels the current element. See aria-describedby.
buttonRef?Ref<HTMLButtonElement>React ref for the button element
children?ReactNodeContent to be rendered inside the button
className?string-
form?string-
icon?ReactNodeOptional leading icon rendered before children
id?string-
isDisabled?booleanfalseDisables the button and prevents interaction
isLoading?booleanfalseShows a loading spinner and disables the button
name?string-
onBlur?(e: FocusEvent) => voidHandler for blur events
onClick?MouseEventHandler<HTMLButtonElement>-
onFocus?(e: FocusEvent) => voidHandler for focus events
onKeyDown?KeyboardEventHandler<HTMLButtonElement>-
onKeyUp?KeyboardEventHandler<HTMLButtonElement>-
tabIndex?number-
title?string-
type?"submit" | "reset" | "button"undefined-
variant?"error" | "primary" | "secondary" | "tertiary"'primary'Visual style variant of the button

ButtonProps

Props your Button implementation must accept from the component adapter. Renders an HTML button (<button>) with primary, secondary, tertiary, and error variants, a loading state, and an optional leading icon.

Extends

  • Pick<ButtonHTMLAttributes<HTMLButtonElement>, "name" | "id" | "className" | "type" | "onClick" | "onKeyDown" | "onKeyUp" | "aria-label" | "aria-labelledby" | "aria-describedby" | "form" | "title" | "tabIndex">

Extended by

Properties

PropertyTypeDefault valueDescription
aria-describedby?stringIdentifies the element (or elements) that describes the object. See aria-labelledby
aria-label?stringDefines a string value that labels the current element. See aria-labelledby.
aria-labelledby?stringIdentifies the element (or elements) that labels the current element. See aria-describedby.
buttonRef?Ref<HTMLButtonElement>React ref for the button element
children?ReactNodeContent to be rendered inside the button
className?string-
form?string-
icon?ReactNodeOptional leading icon rendered before children
id?string-
isDisabled?booleanfalseDisables the button and prevents interaction
isLoading?booleanfalseShows a loading spinner and disables the button
name?string-
onBlur?(e: FocusEvent) => voidHandler for blur events
onClick?MouseEventHandler<HTMLButtonElement>-
onFocus?(e: FocusEvent) => voidHandler for focus events
onKeyDown?KeyboardEventHandler<HTMLButtonElement>-
onKeyUp?KeyboardEventHandler<HTMLButtonElement>-
tabIndex?number-
title?string-
type?"submit" | "reset" | "button"undefined-
variant?"error" | "primary" | "secondary" | "tertiary"'primary'Visual style variant of the button

CalendarPreviewProps

Props your CalendarPreview implementation must accept from the component adapter. Renders a read-only calendar display for visualizing a date range with optional highlighted dates.

Properties

PropertyTypeDescription
dateRangeobjectDate range to display in the calendar preview
dateRange.endDateEnd date of the range
dateRange.labelstringLabel text for the date range
dateRange.startDateStart date of the range
highlightDates?object[]Array of dates to highlight with custom colors and labels

CardProps

Props your Card implementation must accept from the component adapter. Renders a content container with an optional overflow menu and a leading action slot.

Properties

PropertyTypeDescription
childrenReactNodeContent to be displayed inside the card
action?ReactNodeOptional action element (e.g., checkbox, radio) to be displayed on the left side
className?stringCSS className to be applied
menu?ReactNodeOptional menu component to be displayed on the right side of the card

CheckboxGroupProps

Props your CheckboxGroup implementation must accept from the component adapter. Renders a form field wrapping multiple <input type="checkbox" /> elements with a label, optional description, and error message.

Extends

Indexable

[key: `data-${string}`]: string | number | boolean

Properties

PropertyTypeDefault valueDescription
labelReactNodeLabel text for the field
optionsCheckboxGroupOption[]Array of checkbox options to display
className?string-
description?ReactNodeOptional description text for the field
errorMessage?stringError message to display when the field is invalid
inputRef?Ref<HTMLInputElement>React ref for the first checkbox input element
isDisabled?booleanfalseDisables all checkbox options in the group
isInvalid?booleanfalseIndicates if the checkbox group is in an invalid state
isRequired?booleanIndicates if the field is required
onChange?(value: string[]) => voidCallback when selection changes
shouldVisuallyHideLabel?booleanHides the label visually while keeping it accessible to screen readers
value?string[]Array of currently selected values

CheckboxGroupOption

Option entry rendered as a single checkbox within a CheckboxGroup.

Properties
PropertyTypeDescription
labelReactNodeLabel text or content for the checkbox option
valuestringValue of the option that will be passed to onChange
description?ReactNodeOptional description text for the checkbox option
isDisabled?booleanDisables this specific checkbox option

CheckboxProps

Props your Checkbox implementation must accept from the component adapter. Renders a form field wrapping an <input type="checkbox" /> with a label, optional description, and error message.

Extends

Indexable

[key: `data-${string}`]: string | number | boolean

Properties

PropertyTypeDefault valueDescription
labelReactNodeLabel text for the field
className?string-
description?ReactNodeOptional description text for the field
errorMessage?stringError message to display when the field is invalid
id?string-
inputRef?Ref<HTMLInputElement>React ref for the checkbox input element
isDisabled?booleanfalseDisables the checkbox and prevents interaction
isInvalid?booleanfalseIndicates if the checkbox is in an invalid state
isRequired?booleanIndicates if the field is required
name?string-
onBlur?() => voidHandler for blur events
onChange?(value: boolean) => voidCallback when checkbox state changes
shouldVisuallyHideLabel?booleanHides the label visually while keeping it accessible to screen readers
value?booleanCurrent checked state of the checkbox

ComboBoxProps

Props your ComboBox implementation must accept from the component adapter. Renders a form field wrapping a filterable <input /> for single-option selection, optionally allowing free-form values.

See

MultiSelectComboBoxProps

Extends

  • SharedFieldLayoutProps.Pick<InputHTMLAttributes<HTMLInputElement>, "className" | "id" | "name" | "placeholder">

Indexable

[key: `data-${string}`]: string | number | boolean

Properties

PropertyTypeDescription
labelstringLabel text for the combo box field
optionsComboBoxOption[]Array of options to display in the dropdown
allowsCustomValue?booleanAllows the user to type any value, not just options in the list. The options list becomes a suggestion helper rather than a strict constraint.
className?string-
description?ReactNodeOptional description text for the field
errorMessage?stringError message to display when the field is invalid
id?string-
inputRef?Ref<HTMLInputElement>React ref for the combo box input element
isDisabled?booleanDisables the combo box and prevents interaction
isInvalid?booleanIndicates that the field has an error
isRequired?booleanIndicates if the field is required
name?string-
onBlur?() => voidHandler for blur events
onChange?(value: string) => voidCallback when selection changes
placeholder?string-
portalContainer?HTMLElementElement to use as the portal container for the dropdown popover. Overrides the default SDK root container from context.
shouldVisuallyHideLabel?booleanHides the label visually while keeping it accessible to screen readers
value?string | nullCurrently selected value

ComboBoxOption

Option entry for the ComboBox dropdown list.

Properties
PropertyTypeDescription
labelstringDisplay text for the option
valuestringValue of the option that will be passed to onChange

DatePickerProps

Props your DatePicker implementation must accept from the component adapter. Renders a form field wrapping an <input type="date" /> with a calendar picker popover, optional min/max bounds, and per-date disabling.

Extends

Indexable

[key: `data-${string}`]: string | number | boolean

Properties

PropertyTypeDescription
labelstringLabel text for the date picker field
className?string-
description?ReactNodeOptional description text for the field
errorMessage?stringError message to display when the field is invalid
id?string-
inputRef?Ref<HTMLInputElement>React ref for the date input element
isDateDisabled?(date: Date) => booleanCallback to determine if a specific date should be disabled. Return true to disable the date.
isDisabled?booleanDisables the date picker and prevents interaction
isInvalid?booleanIndicates that the field has an error
isRequired?booleanIndicates if the field is required
maxDate?DateMaximum selectable date. Dates after this will be disabled.
minDate?DateMinimum selectable date. Dates before this will be disabled.
name?string-
onBlur?() => voidHandler for blur events
onChange?(value: Date | null) => voidCallback when selected date changes
placeholder?stringPlaceholder text when no date is selected
portalContainer?HTMLElementElement to use as the portal container
shouldVisuallyHideLabel?booleanHides the label visually while keeping it accessible to screen readers
value?Date | nullCurrently selected date value

DateRangePickerProps

Props your DateRangePicker implementation must accept from the component adapter. Renders a form field wrapping paired <input type="date" /> elements for selecting an inclusive date range.

Properties

PropertyTypeDescription
endDateLabelstringAccessible label for the end-date input.
labelstringLabel text for the date range field.
onChange(range: DateRange | null) => voidCallback fired when the selected range changes. Receives null when the range is cleared.
startDateLabelstringAccessible label for the start-date input.
valueDateRange | nullCurrently selected date range, or null when nothing is selected.
maxValue?DateLatest selectable date. Dates after this are disabled.
minValue?DateEarliest selectable date. Dates before this are disabled.
shouldVisuallyHideLabel?booleanHides the label visually while keeping it accessible to screen readers.

DateRange

Inclusive start/end pair representing a date range selected in a DateRangePicker.

Properties
PropertyTypeDescription
endDateLast date in the range, inclusive.
startDateFirst date in the range, inclusive.

DescriptionListProps

Props your DescriptionList implementation must accept from the component adapter. Renders an HTML <dl> of term/description pairs in either a stacked or horizontal layout.

Properties

PropertyTypeDefault valueDescription
itemsDescriptionListItem[]Term/description pairs to render in order.
className?stringAdditional class name applied to the root <dl>.
layout?"stacked" | "horizontal"'stacked'Visual arrangement of each term/description pair. Defaults to 'stacked'.
showSeparators?booleantrueWhether to render dividers between rows. Defaults to true.

DescriptionListItem

Single term/description pair rendered as a row within a DescriptionList.

Properties
PropertyTypeDescription
descriptionReactNode | ReactNode[]Description content (the <dd>). Pass an array to render multiple <dd> elements for the same term.
termReactNode | ReactNode[]Term content (the <dt>). Pass an array to render multiple <dt> elements for the same description.

DialogProps

Props your Dialog implementation must accept from the component adapter. Renders a modal confirmation dialog with a primary action and a cancel action.

Properties

PropertyTypeDefault valueDescription
closeActionLabelstringText label for the close/cancel action button
primaryActionLabelstringText label for the primary action button
children?ReactNodeOptional children content to be rendered in the dialog body
isDestructive?booleanfalseWhether the primary action is destructive (changes button style to error variant)
isOpen?booleanfalseControls whether the dialog is open or closed
isPrimaryActionLoading?booleanfalseWhether the primary action button is in loading state
onClose?() => voidCallback function called when the dialog should be closed
onPrimaryActionClick?() => voidCallback function called when the primary action button is clicked
shouldCloseOnBackdropClick?booleanfalseWhether clicking the backdrop should close the dialog
title?ReactNodeOptional title content to be displayed at the top of the dialog

FileInputProps

Props your FileInput implementation must accept from the component adapter. Renders a form field wrapping an <input type="file" /> with a label, description, error message, and optional file type restrictions.

Extends

Indexable

[key: `data-${string}`]: string | number | boolean

Properties

PropertyTypeDefault valueDescription
labelReactNodeLabel text for the field
onChange(file: File | null) => voidundefinedCallback when file selection changes
valueFile | nullundefinedCurrently selected file
accept?string[]Accepted file types (MIME types or extensions) Examples ['image/jpeg', 'image/png', 'application/pdf'] ['.jpg', '.png', '.pdf']
aria-describedby?stringAria-describedby attribute for accessibility
className?stringAdditional CSS class name
description?ReactNodeOptional description text for the field
errorMessage?stringError message to display when the field is invalid
id?stringID for the file input element
isDisabled?booleanfalseDisables the input and prevents interaction
isInvalid?booleanfalseIndicates that the field has an error
isRequired?booleanIndicates if the field is required
onBlur?() => voidHandler for blur events

FormBoxHeaderProps

Props your FormBoxHeader implementation must accept from the component adapter. Renders the header section of a FormBox, combining a title, optional description, and an optional inline action slot.

Properties

PropertyTypeDefault valueDescription
titleReactNodeTitle content rendered as the heading.
action?ReactNodeOptional action content (e.g. a Button) rendered inline opposite the title.
description?ReactNodeOptional supporting description rendered below the title.
headingLevel?"h1" | "h2" | "h3" | "h4" | "h5" | "h6"'h3'Semantic heading level for the title. Defaults to h3.

FormBoxProps

Props your FormBox implementation must accept from the component adapter. Renders a sectioned container used to group related form fields, with optional header and footer slots.

Properties

PropertyTypeDescription
childrenReactNodeContent rendered inside the form box body.
className?stringCSS className to be applied to the root element.
footer?ReactNodeOptional content rendered below the body in the form box footer section.
header?ReactNodeOptional content rendered above the body in the form box header section.
withPadding?booleanWhether the body should apply the default inner padding. Defaults to true; set to false for content that needs to be flush with the form box edges.

HeadingProps

Props your Heading implementation must accept from the component adapter. Renders an HTML heading (<h1><h6>) whose visual style level is controlled independently from its semantic level.

Extends

  • Pick<HTMLAttributes<HTMLHeadingElement>, "className" | "id">

Properties

PropertyTypeDescription
as"h1" | "h2" | "h3" | "h4" | "h5" | "h6"The HTML heading element to render (h1-h6)
children?ReactNodeContent to be displayed inside the heading
className?string-
id?string-
styledAs?"h1" | "h2" | "h3" | "h4" | "h5" | "h6"Optional visual style to apply, independent of the semantic heading level
textAlign?"center" | "start" | "end"Text alignment within the heading

InputProps

Base text-input primitive used internally by TextInput and NumberInput.

Remarks

Higher-level field components like TextInput and NumberInput reuse the adornmentStart and adornmentEnd slots from this interface.

Extends

  • Pick<InputHTMLAttributes<HTMLInputElement>, "className" | "id" | "name" | "placeholder" | "type" | "value" | "onChange" | "onBlur" | "onFocus" | "aria-describedby" | "aria-labelledby" | "aria-invalid" | "min" | "max" | "maxLength">

Properties

PropertyTypeDefault valueDescription
adornmentEnd?ReactNodeContent to display at the end of the input
adornmentStart?ReactNodeContent to display at the start of the input
aria-describedby?stringIdentifies the element (or elements) that describes the object. See aria-labelledby
aria-invalid?boolean | "true" | "false" | "grammar" | "spelling"undefinedIndicates the entered value does not conform to the format expected by the application. See aria-errormessage.
aria-labelledby?stringIdentifies the element (or elements) that labels the current element. See aria-describedby.
className?string-
id?string-
inputRef?Ref<HTMLInputElement>Ref for the input element
isDisabled?booleanfalseWhether the input is disabled
max?string | numberundefined-
maxLength?number-
min?string | numberundefined-
name?string-
onBlur?FocusEventHandler<HTMLInputElement>-
onChange?ChangeEventHandler<HTMLInputElement, HTMLInputElement>-
onFocus?FocusEventHandler<HTMLInputElement>-
placeholder?string-
type?HTMLInputTypeAttribute-
value?string | number | readonly string[]undefined-

LinkProps

Props your Link implementation must accept from the component adapter. Renders an HTML anchor (<a>) for inline navigation.

Extends

  • Pick<AnchorHTMLAttributes<HTMLAnchorElement>, "href" | "target" | "rel" | "download" | "className" | "id" | "onKeyDown" | "onKeyUp" | "aria-label" | "aria-labelledby" | "aria-describedby" | "title">

Properties

PropertyTypeDescription
aria-describedby?stringIdentifies the element (or elements) that describes the object. See aria-labelledby
aria-label?stringDefines a string value that labels the current element. See aria-labelledby.
aria-labelledby?stringIdentifies the element (or elements) that labels the current element. See aria-describedby.
children?ReactNodeContent to be displayed inside the link
className?string-
download?any-
href?string-
id?string-
onKeyDown?KeyboardEventHandler<HTMLAnchorElement>-
onKeyUp?KeyboardEventHandler<HTMLAnchorElement>-
rel?string-
target?HTMLAttributeAnchorTarget-
title?string-

LoadingSpinnerProps

Props your LoadingSpinner implementation must accept from the component adapter. Renders a spinner indicating that content is loading.

Extends

  • Pick<HTMLAttributes<HTMLDivElement>, "className" | "id" | "aria-label">

Properties

PropertyTypeDefault valueDescription
aria-label?stringDefines a string value that labels the current element. See aria-labelledby.
className?string-
id?string-
size?"sm" | "lg"'lg'Size of the spinner
style?"inline" | "block"'block'Display style of the spinner

Props your Menu implementation must accept from the component adapter. Renders a popover menu of actions anchored to a trigger element.

[key: `data-${string}`]: string | number | boolean

PropertyTypeDefault valueDescription
aria-labelstringAccessible label describing the menu's purpose
isOpen?booleanfalseControls whether the menu is currently open
items?MenuItem[]Array of menu items to display
onClose?() => voidCallback when the menu is closed
placement?"top" | "top start" | "top end" | "bottom" | "bottom start" | "bottom end" | "left" | "right"'bottom start'Controls the placement of the menu popover relative to the trigger
portalContainer?HTMLElementElement to use as the portal container for the menu popover. Overrides the default SDK root container from context.
triggerRef?RefObject<Element | null>undefinedReference to the element that triggers the menu

Action entry your Menu implementation must accept for each entry in its items array from the component adapter.

[key: `data-${string}`]: string | number | boolean

PropertyTypeDescription
labelstringText label for the menu item
onClick() => voidCallback function when the menu item is clicked
href?stringOptional URL to navigate to when clicked
icon?ReactNodeOptional icon to display before the label
isDisabled?booleanDisables the menu item and prevents interaction

ModalProps

Props your Modal implementation must accept from the component adapter. Renders a modal overlay with body and footer content.

Properties

PropertyTypeDefault valueDescription
children?ReactNodeMain content to be rendered in the modal body
containerRef?RefObject<HTMLDivElement | null>undefinedOptional ref to the backdrop container
footer?ReactNodeFooter content to be rendered at the bottom of the modal
isOpen?booleanfalseControls whether the modal is open or closed
onClose?() => voidCallback function called when the modal should be closed
shouldCloseOnBackdropClick?booleanfalseWhether clicking the backdrop should close the modal

MultiSelectComboBoxProps

Props your MultiSelectComboBox implementation must accept from the component adapter. Renders a form field wrapping a typeahead input for multi-option selection.

See

ComboBoxProps

Extends

  • SharedFieldLayoutProps.Pick<InputHTMLAttributes<HTMLInputElement>, "className" | "id" | "name" | "placeholder">

Indexable

[key: `data-${string}`]: string | number | boolean

Properties

PropertyTypeDescription
labelstringLabel text for the combo box field
optionsMultiSelectComboBoxOption[]Array of options to display in the dropdown
className?string-
description?ReactNodeOptional description text for the field
errorMessage?stringError message to display when the field is invalid
id?string-
inputRef?Ref<HTMLInputElement>React ref for the combo box input element
isDisabled?booleanDisables the combo box and prevents interaction
isInvalid?booleanIndicates that the field has an error
isLoading?booleanShows a loading message in the description slot while options are being fetched
isRequired?booleanIndicates if the field is required
name?string-
onBlur?() => voidHandler for blur events
onChange?(values: string[]) => voidCallback when the set of selected values changes
placeholder?string-
shouldVisuallyHideLabel?booleanHides the label visually while keeping it accessible to screen readers
value?string[]Currently selected values

MultiSelectComboBoxOption

Option entry for a MultiSelectComboBox dropdown list.

Properties
PropertyTypeDescription
labelstringDisplay text for the option
valuestringValue of the option that will be passed to onChange

NumberInputProps

Props your NumberInput implementation must accept from the component adapter. Renders a form field wrapping a numeric <input /> for currency, decimal, or percent values, with optional start/end adornments.

Extends

  • SharedFieldLayoutProps.Pick<InputHTMLAttributes<HTMLInputElement>, "min" | "max" | "name" | "id" | "placeholder" | "className">

Indexable

[key: `data-${string}`]: string | number | boolean

Properties

PropertyTypeDescription
labelReactNodeLabel text for the field
adornmentEnd?ReactNodeElement to display at the end of the input
adornmentStart?ReactNodeElement to display at the start of the input
className?string-
description?ReactNodeOptional description text for the field
errorMessage?stringError message to display when the field is invalid
format?"percent" | "currency" | "decimal"Format type for the number input
id?string-
inputRef?Ref<HTMLInputElement>React ref for the number input element
isDisabled?booleanDisables the number input and prevents interaction
isInvalid?booleanIndicates that the field has an error
isRequired?booleanIndicates if the field is required
max?string | number-
maximumFractionDigits?numberMaximum number of decimal places to display
min?string | number-
minimumFractionDigits?numberMinimum number of decimal places to display
name?string-
onBlur?() => voidHandler for blur events
onChange?(value: number) => voidCallback when number input value changes
onInputChange?(value: string) => voidFires on every keystroke with the raw input string (pre-commit), unlike onChange which fires on blur/Enter.
placeholder?string-
shouldVisuallyHideLabel?booleanHides the label visually while keeping it accessible to screen readers
value?numberCurrent value of the number input

OrderedListProps

Props your OrderedList implementation must accept from the component adapter. Renders an ordered (numbered) list of items.

Extends

Properties

PropertyTypeDescription
itemsReactNode[]The list items to render
aria-describedby?stringID of an element that describes this list
aria-label?stringAccessibility label for the list
aria-labelledby?stringID of an element that labels this list
className?stringOptional custom class name

PaginationControlProps

Props your PaginationControl implementation must accept from the component adapter. Renders pagination controls for navigating between pages of results.

Properties

PropertyTypeDescription
currentPagenumberThe currently active page (1-based).
handleFirstPage() => voidNavigate to the first page.
handleItemsPerPageChange(n: PaginationItemsPerPage) => voidCalled when the user changes the number of items displayed per page.
handleLastPage() => voidNavigate to the last page.
handleNextPage() => voidNavigate to the next page.
handlePreviousPage() => voidNavigate to the previous page.
totalPagesnumberTotal number of pages.
isFetching?booleanWhether a page fetch is in progress.
itemsPerPage?PaginationItemsPerPageNumber of items shown per page.
totalCount?numberTotal number of items across all pages.

PaginationItemsPerPage

PaginationItemsPerPage = 5 | 10 | 25 | 50

Allowed page-size values a PaginationControl offers for how many items to show per page.


PayrollLoadingProps

Props your PayrollLoading implementation must accept from the component adapter. Renders a loading state during payroll calculation.

Properties

PropertyTypeDescription
titleReactNodeThe heading text displayed above the loading animation.
description?ReactNodeOptional supporting text displayed below the title.

ProgressBarProps

Props your ProgressBar implementation must accept from the component adapter. Renders a step-based progress indicator for multi-step flows.

Properties

PropertyTypeDescription
currentStepnumberCurrent step in the progress sequence
labelstringAccessible label describing the progress bar's purpose
totalStepsnumberTotal number of steps in the progress sequence
className?stringAdditional CSS class name for the progress bar container
cta?ComponentType<{ }> | nullComponent to render as the progress bar's CTA

RadioGroupProps

Props your RadioGroup implementation must accept from the component adapter. Renders a form field wrapping multiple <input type="radio" /> elements with a label, optional description, and error message.

Extends

Indexable

[key: `data-${string}`]: string | number | boolean

Properties

PropertyTypeDefault valueDescription
labelReactNodeLabel text for the field
optionsRadioGroupOption[]Array of radio options to display
className?string-
defaultValue?stringInitially selected value
description?ReactNodeOptional description text for the field
errorMessage?stringError message to display when the field is invalid
inputRef?Ref<HTMLInputElement>React ref for the first radio input element
isDisabled?booleanfalseDisables all radio options in the group
isInvalid?booleanfalseIndicates that the field has an error
isRequired?booleanIndicates if the field is required
onChange?(value: string) => voidCallback when selection changes
shouldVisuallyHideLabel?booleanHides the label visually while keeping it accessible to screen readers
value?string | nullundefinedCurrently selected value

RadioGroupOption

Option entry your RadioGroup implementation receives in the options array when rendering each radio button.

Properties
PropertyTypeDescription
labelReactNodeLabel text or content for the radio option
valuestringValue of the option that will be passed to onChange
description?ReactNodeOptional description text for the radio option
isDisabled?booleanDisables this specific radio option

RadioProps

Props your Radio implementation must accept from the component adapter. Renders a form field wrapping an <input type="radio" /> with a label, optional description, and error message.

Extends

Indexable

[key: `data-${string}`]: string | number | boolean

Properties

PropertyTypeDefault valueDescription
labelReactNodeLabel text for the field
className?string-
description?ReactNodeOptional description text for the field
errorMessage?stringError message to display when the field is invalid
id?string-
inputRef?Ref<HTMLInputElement>React ref for the radio input element
isDisabled?booleanfalseDisables the radio button and prevents interaction
isInvalid?booleanfalseIndicates that the field has an error
isRequired?booleanIndicates if the field is required
name?string-
onBlur?FocusEventHandler<HTMLInputElement>-
onChange?(checked: boolean) => voidCallback when radio button state changes
shouldVisuallyHideLabel?booleanHides the label visually while keeping it accessible to screen readers
value?booleanCurrent checked state of the radio button

SelectProps

Props your Select implementation must accept from the component adapter. Renders a form field wrapping a single-select dropdown with a label, description, and error message.

Extends

Indexable

[key: `data-${string}`]: string | number | boolean

Properties

PropertyTypeDescription
labelstringLabel text for the select field
optionsSelectOption[]Array of options to display in the select dropdown
placeholderstringPlaceholder text displayed when no option is selected. Required so empty dropdowns always communicate the action — pass an empty string only when a default value is guaranteed.
className?string-
description?ReactNodeOptional description text for the field
errorMessage?stringError message to display when the field is invalid
id?string-
inputRef?Ref<HTMLButtonElement>React ref for the select button element
isDisabled?booleanDisables the select and prevents interaction
isInvalid?booleanIndicates that the field has an error
isRequired?booleanIndicates if the field is required
name?string-
onBlur?() => voidHandler for blur events
onChange?(value: string) => voidCallback when selection changes
portalContainer?HTMLElementElement to use as the portal container
shouldVisuallyHideLabel?booleanHides the label visually while keeping it accessible to screen readers
value?string | nullCurrently selected value

SelectOption

Option entry your Select implementation receives in the options array when rendering each item in the dropdown.

Properties
PropertyTypeDescription
labelstringDisplay text for the option
valuestringValue of the option that will be passed to onChange

SwitchProps

Props your Switch implementation must accept from the component adapter. Renders a form field wrapping an <input type="checkbox" /> styled as a boolean on/off toggle.

Extends

Indexable

[key: `data-${string}`]: string | number | boolean

Properties

PropertyTypeDefault valueDescription
labelstringLabel text for the switch
aria-controls?stringIdentifies the element (or elements) whose contents or presence are controlled by the current element. See aria-owns.
className?stringAdditional CSS class name for the switch container
description?ReactNodeOptional description text for the field
errorMessage?stringError message to display when the field is invalid
id?string-
inputRef?Ref<HTMLInputElement>React ref for the switch input element
isDisabled?booleanfalseDisables the switch and prevents interaction
isInvalid?booleanfalseIndicates that the field has an error
isRequired?booleanIndicates if the field is required
name?string-
onBlur?() => voidHandler for blur events
onChange?(checked: boolean) => voidCallback when switch state changes
shouldVisuallyHideLabel?booleanHides the label visually while keeping it accessible to screen readers
value?booleanCurrent checked state of the switch

TableProps

Props your Table implementation must accept from the component adapter. Renders a table with column headers, body rows, an optional footer row, and an optional empty state.

Extends

  • Pick<TableHTMLAttributes<HTMLTableElement>, "className" | "aria-label" | "id" | "role" | "aria-labelledby" | "aria-describedby">

Properties

PropertyTypeDefault valueDescription
headersTableData[]Array of header cells for the table
rowsTableRow[]Array of rows to be displayed in the table
aria-describedby?stringIdentifies the element (or elements) that describes the object. See aria-labelledby
aria-label?stringDefines a string value that labels the current element. See aria-labelledby.
aria-labelledby?stringIdentifies the element (or elements) that labels the current element. See aria-describedby.
className?string-
emptyState?ReactNodeContent to display when the table has no rows
footer?TableData[]Array of footer cells for the table
hasCheckboxColumn?booleanfalseWhether the first column contains checkboxes (affects which column gets leading variant)
id?string-
isWithinBox?booleanfalseRemoves borders and background for use inside a Box component
role?AriaRole-

TableData

Shape of a single cell your Table implementation receives for headers, rows, and footers.

Properties
PropertyTypeDescription
contentReactNodeContent to be displayed in the table cell
keystringUnique identifier for the table cell

TableRow

Shape of a single row your Table implementation receives, containing an ordered list of cells.

Properties
PropertyTypeDescription
dataTableData[]Array of cells to be displayed in the row
keystringUnique identifier for the table row

TabsProps

Props your Tabs implementation must accept from the component adapter. Renders tabbed navigation with associated content panels.

Properties

PropertyTypeDescription
onSelectionChange(id: string) => voidCallback when tab selection changes
tabsTabProps[]Array of tab configuration objects
aria-label?stringAccessible label for the tabs
aria-labelledby?stringID of element that labels the tabs
className?stringAdditional CSS class name
selectedId?stringCurrently selected tab id

TabProps

Shape of a single tab configuration your Tabs implementation receives in its tabs prop.

Properties
PropertyTypeDescription
contentReactNodeContent to display in the tab panel
idstringUnique identifier for the tab
labelReactNodeLabel to display in the tab button
isDisabled?booleanWhether the tab is disabled

TextAreaProps

Props your TextArea implementation must accept from the component adapter. Renders a form field wrapping a <textarea> with a label, description, and error message.

Extends

  • SharedFieldLayoutProps.Pick<TextareaHTMLAttributes<HTMLTextAreaElement>, "name" | "id" | "placeholder" | "className" | "cols">.Pick<TextareaHTMLAttributes<HTMLTextAreaElement>, "aria-describedby">

Indexable

[key: `data-${string}`]: string | number | boolean

Properties

PropertyTypeDefault valueDescription
labelReactNodeLabel text for the field
aria-describedby?stringIdentifies the element (or elements) that describes the object. See aria-labelledby
className?string-
cols?number-
description?ReactNodeOptional description text for the field
errorMessage?stringError message to display when the field is invalid
id?string-
inputRef?Ref<HTMLTextAreaElement>React ref for the textarea element
isDisabled?booleanfalseDisables the textarea and prevents interaction
isInvalid?booleanfalseIndicates that the field has an error
isRequired?booleanIndicates if the field is required
name?string-
onBlur?() => voidHandler for blur events
onChange?(value: string) => voidCallback when textarea value changes
placeholder?string-
rows?number4Number of visible text rows
shouldVisuallyHideLabel?booleanHides the label visually while keeping it accessible to screen readers
value?stringCurrent value of the textarea

TextInputProps

Props your TextInput implementation must accept from the component adapter. Renders a form field wrapping an <input /> with a label, description, error message, and start/end adornment slots.

Extends

  • SharedFieldLayoutProps.Pick<InputHTMLAttributes<HTMLInputElement>, "name" | "id" | "placeholder" | "className" | "type" | "min" | "max" | "maxLength">.Pick<InputHTMLAttributes<HTMLInputElement>, "aria-describedby" | "aria-labelledby">

Indexable

[key: `data-${string}`]: string | number | boolean

Properties

PropertyTypeDefault valueDescription
labelReactNodeLabel text for the field
adornmentEnd?ReactNodeElement to display at the end of the input
adornmentStart?ReactNodeElement to display at the start of the input
aria-describedby?stringIdentifies the element (or elements) that describes the object. See aria-labelledby
aria-labelledby?stringIdentifies the element (or elements) that labels the current element. See aria-describedby.
className?string-
description?ReactNodeOptional description text for the field
errorMessage?stringError message to display when the field is invalid
id?string-
inputRef?Ref<HTMLInputElement>React ref for the input element
isDisabled?booleanfalseDisables the input and prevents interaction
isInvalid?booleanfalseIndicates that the field has an error
isRequired?booleanIndicates if the field is required
max?string | numberundefined-
maxLength?number-
min?string | numberundefined-
name?string-
onBlur?() => voidHandler for blur events
onChange?(value: string) => voidCallback when input value changes
placeholder?string-
shouldVisuallyHideLabel?booleanHides the label visually while keeping it accessible to screen readers
type?HTMLInputTypeAttribute-
value?stringCurrent value of the input

TextProps

Props your Text implementation must accept from the component adapter. Renders body text as <p>, <span>, <div>, or <pre>, with size, weight, alignment, and variant options.

Extends

  • Pick<HTMLAttributes<HTMLParagraphElement>, "className" | "id">

Properties

PropertyTypeDefault valueDescription
as?"div" | "p" | "span" | "pre"'p'HTML element to render the text as
children?ReactNodeContent to be displayed
className?string-
id?string-
size?"xs" | "sm" | "md" | "lg"'md'Size variant of the text
textAlign?"center" | "start" | "end"undefinedText alignment within the container
variant?"supporting" | "leading"undefinedVisual style variant of the text
weight?"bold" | "medium" | "regular" | "semibold"undefinedFont weight of the text

UnorderedListProps

Props your UnorderedList implementation must accept from the component adapter. Renders an unordered (bulleted) list of items.

Extends

Properties

PropertyTypeDescription
itemsReactNode[]The list items to render
aria-describedby?stringID of an element that describes this list
aria-label?stringAccessibility label for the list
aria-labelledby?stringID of an element that labels this list
className?stringOptional custom class name

Utility types

BaseListProps

Shared props accepted by both OrderedList and UnorderedList implementations.

Extended by

Properties

PropertyTypeDescription
itemsReactNode[]The list items to render
aria-describedby?stringID of an element that describes this list
aria-label?stringAccessibility label for the list
aria-labelledby?stringID of an element that labels this list
className?stringOptional custom class name

DataAttributes

DataAttributes = object

An open map of data-* attributes that can be spread onto a rendered DOM element.

Index Signature

[key: `data-${string}`]: string | number | boolean


SharedFieldLayoutProps

Common layout props shared by form controls — label, description, error message, required state, and visual label hiding.

Remarks

Extended by the props interfaces of UI primitive components (such as TextInputProps, SelectProps, and CheckboxGroupProps) so each control exposes a consistent surface for labeling, helper text, and validation messaging.

Extends

Extended by

Indexable

[key: `data-${string}`]: string | number | boolean

Properties

PropertyTypeDescription
labelReactNodeLabel text for the field
description?ReactNodeOptional description text for the field
errorMessage?stringError message to display when the field is invalid
isRequired?booleanIndicates if the field is required
shouldVisuallyHideLabel?booleanHides the label visually while keeping it accessible to screen readers

SharedHorizontalFieldLayoutProps

Shared layout props consumed by horizontally-laid-out form controls — label, description, error message, required state, and visual label hiding.

Remarks

Extended by props interfaces for inline controls such as CheckboxProps, RadioProps, and SwitchProps. Alias of SharedFieldLayoutProps — exposed as a distinct name to mirror the horizontal layout used by these controls.

Extended by

Indexable

[key: `data-${string}`]: string | number | boolean

Properties

PropertyTypeDescription
labelReactNodeLabel text for the field
description?ReactNodeOptional description text for the field
errorMessage?stringError message to display when the field is invalid
isRequired?booleanIndicates if the field is required
shouldVisuallyHideLabel?booleanHides the label visually while keeping it accessible to screen readers