Demo
Usage
Import StepperField and styles. You could edit the stepping value directly but it will be validated and rounded to a valid one when the field loses focus.
import { StepperField } from '@aws-amplify/ui-react';
export const DefaultStepperFieldExample = () => {
return (
<StepperField
label="Stepper"
defaultValue={0}
min={0}
max={10}
step={1}
labelHidden
/>
);
};
Controlled component
To use the StepperField as a controlled component, use the value prop and onStepChange handler.
Note that onStepChange returns a new value (number), not the event object. This is because the StepperField is a complex component which is handling input, blur, and change events on the input element as well as click events on the button elements. The onStepChange handler simplifies all of this and returns the new value of the input in response to any of these events.
import * as React from 'react';
import { StepperField } from '@aws-amplify/ui-react';
export const ControlledStepperFieldExample = () => {
const [value, setValue] = React.useState<number>(0);
const handleOnStepChange = (newValue: number) => {
alert(`New value: ${newValue}`);
setValue(newValue);
};
return (
<StepperField
label="Controlled stepper"
value={value}
onStepChange={handleOnStepChange}
/>
);
};
Accessibility / Label behavior
import { StepperField } from '@aws-amplify/ui-react';
export const StepperFieldAccessibilityExample = () => {
return (
<StepperField label="Stepper" defaultValue={0} min={0} max={10} step={1} />
);
};
Sizes
Use the size prop to change the StepperField size. Available options are small, large, and none (default).
import { StepperField } from '@aws-amplify/ui-react';
export const StepperFieldSizeExample = () => {
return (
<>
<StepperField
label="Stepper"
defaultValue={0}
min={0}
max={10}
step={1}
size="small"
labelHidden
/>
<StepperField
label="Stepper"
defaultValue={0}
min={0}
max={10}
step={1}
labelHidden
/>
<StepperField
label="Stepper"
defaultValue={0}
min={0}
max={10}
step={1}
size="large"
labelHidden
/>
</>
);
};
State
The available StepperField states include isDisabled and isReadOnly. A disabled field will not be focusable or mutable and will not be submitted with form data. A read-only field cannot be edited by the user.
Disabled StepperField
import { StepperField } from '@aws-amplify/ui-react';
export const DisabledStepperFieldExample = () => {
return (
<StepperField
label="Stepper"
defaultValue={0}
min={0}
max={10}
step={1}
labelHidden
isDisabled
/>
);
};
Read-only StepperField
import { StepperField } from '@aws-amplify/ui-react';
export const ReadOnlyStepperFieldExample = () => {
return (
<StepperField
label="Stepper"
defaultValue={5}
min={0}
max={10}
step={1}
labelHidden
isReadOnly
/>
);
};
Validation error
Use the hasError and errorMessage props to mark a StepperField as having an validation error.
import { StepperField } from '@aws-amplify/ui-react';
export const StepperFieldValidationErrorExample = () => {
return (
<StepperField
label="Stepper"
defaultValue={0}
min={0}
max={10}
step={1}
errorMessage="The is an error message."
hasError
labelHidden
/>
);
};
Standard HTML attributes
The StepperField will accept any of the standard HTML attributes that a <input> element accepts.
Standard <input> attributes can be found in the MDN Documentation
<StepperField
label="Stepper"
min={0}
max={10}
step={1}
name="stepper"
/>
Styling
Theme
You can customize the appearance of all StepperField components in your application with a Theme.
StepperField Theme Source
import { StepperField, ThemeProvider } from '@aws-amplify/ui-react';
const theme = {
name: 'stepper-theme',
tokens: {
components: {
stepperfield: {
borderColor: { value: '{colors.secondary.20}' },
input: {
color: { value: '{colors.primary.80}' },
fontSize: { value: '{fontSizes.large}' },
},
button: {
color: { value: '{colors.primary.80}' },
backgroundColor: { value: '{colors.neutral.20}' },
_disabled: {
color: { value: '{colors.primary.80}' },
},
},
},
},
},
};
export const StepperFieldThemeExample = () => (
<ThemeProvider theme={theme} colorMode="light">
<StepperField
label="Themed stepper"
defaultValue={0}
min={0}
max={10}
step={1}
labelHidden
/>
</ThemeProvider>
);
Icons
import { StepperField, IconsProvider } from '@aws-amplify/ui-react';
import { FiMinusSquare, FiPlusSquare } from 'react-icons/fi';
export const StepperFieldIconProviderExample = () => (
<IconsProvider
icons={{
stepperField: {
add: <FiPlusSquare />,
remove: <FiMinusSquare />,
},
}}
>
<StepperField
label="Themed stepper"
defaultValue={0}
min={0}
max={10}
step={1}
labelHidden
/>
</IconsProvider>
);
Target classes
| Class | Description |
|---|---|
amplify-stepperfield | Top level element that wraps the StepperField primitive |
amplify-stepperfield__button--decrease | Class applied to the decrease button |
amplify-stepperfield__button--increase | Class applied to the increase button |
amplify-stepperfield__input | Class applied to the StepperField input |
--amplify-components-stepperfield-border-color--amplify-components-stepperfield-button-active-background-color--amplify-components-stepperfield-button-active-color--amplify-components-stepperfield-button-background-color--amplify-components-stepperfield-button-color--amplify-components-stepperfield-button-disabled-background-color--amplify-components-stepperfield-button-disabled-color--amplify-components-stepperfield-button-focus-background-color--amplify-components-stepperfield-button-focus-color--amplify-components-stepperfield-button-hover-background-color--amplify-components-stepperfield-button-hover-color--amplify-components-stepperfield-flex-direction--amplify-components-stepperfield-input-color--amplify-components-stepperfield-input-font-size--amplify-components-stepperfield-input-text-align
Global styling
To override styling on all StepperFields, you can set the Amplify CSS variables or use the built-in .amplify-stepperfield, .amplify-stepperfield__input, amplify-stepperfield__button--decrease and amplify-stepperfield__button--increase class.
/* styles.css */
:root {
--amplify-components-stepperfield-input-border-color: var(
--amplify-colors-purple-80
);
}
/* OR */
.amplify-stepperfield__input {
border-color: var(--amplify-colors-purple-80);
}
Local styling
To override styling on a specific StepperField, you can use (in order of increasing specificity): a class selector, data attributes, or style props.
Using a class selector:
/* styles.css */
.custom-button .amplify-stepperfield__button--decrease,
.amplify-stepperfield__button--increase {
color: var(--amplify-colors-white);
background-color: var(--amplify-colors-purple-80);
}
import { StepperField } from '@aws-amplify/ui-react';
import './styles.css';
<StepperField
label="Stepper"
classname="custom-button"
defaultValue={0}
min={0}
max={10}
step={1}
labelHidden
/>;
Using data attributes:
/* styles.css */
/* Override only large size styles */
.amplify-stepperfield[data-size='large'] {
width: 50%;
}
Using style props:
All style props will be applied to the Flex wrapper of the StepperField. To style the input of the StepperField, you can pass a inputStyles prop with the style props you want to apply to the input.
import { StepperField, useTheme } from '@aws-amplify/ui-react';
export const StepperFieldStylePropsExample = () => {
const { tokens } = useTheme();
return (
<>
<StepperField
label="Stepper"
defaultValue={0}
min={0}
max={10}
step={1}
padding="large"
border={`1px solid ${tokens.colors.primary[60]}`}
/>
<StepperField
label="Stepper"
defaultValue={0}
min={0}
max={10}
step={1}
inputStyles={{
backgroundColor: 'primary.10',
}}
/>
</>
);
};