@rakuten-rex/stepper
Version:
Input Stepper is a UI control used to incrementally increase of decrease a numeric value.
348 lines (261 loc) • 15.7 kB
Markdown
# ReX React UI Component: stepper
This project is part of ReX Design System and it can be used to create UI Components compatible with:
React, HTML/CSS and Vue.js
# How to install
<img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/logos/npm.svg?sanitize=true" height="16" />
```
npm install @rakuten-rex/stepper@1.6.0 --save
```
<img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/logos/yarn.svg?sanitize=true" height="16" />
```
yarn add @rakuten-rex/stepper@1.6.0
```
# Getting started
## Storybook Live examples
For a complete guide of properties for React and HTML classes please visit our Storybook page:
[<img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/logos/storybook.svg?sanitize=true" height="16" />](https://rakuten-rex.github.io/stepper/)
https://rakuten-rex.github.io/stepper/
**Storybook features**
- [x] Stories by component types
- [x] HTML raw output
- [x] JSX output
- [x] Stories source code
- [x] Knobs with multiple options
## ZeroHeight Documentation
For a complete Documentation including all ReX Design System Components, Live HTML/React examples and Demos please visit:
[<img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/logos/zh_logo.svg?sanitize=true" height="16" />](https://rakuten-rex.github.io/)
https://rakuten-rex.github.io/
# How to integrate ReX in your project
## A) JavaScript modules
### <img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/logos/react.svg?sanitize=true" height="16" /> React component (JavaScript + CSS Styles)
For plug and play components integration.
Example:
`my-component.jsx`
```jsx Without Label
import Stepper from '@rakuten-rex/stepper/Stepper';
function MyCustomComponent() {
return (
<Stepper id='defaultId' name='name_age' minusLabel='minus button' plusLabel='plus button' />
);
}
```
```jsx With Label
import StepperLabel from '@rakuten-rex/stepper/StepperLabel';
function MyCustomComponent() {
return (
<StepperLabel label='Label' id='age' name='name_age' labelId='labelId' minusLabel='minus button' plusLabel='plus button' />
);
}
```
[Click here](https://rakuten-rex.github.io/stepper/) to see all working examples in Storybook.
### <img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/logos/css-3.svg?sanitize=true" height="16" /> CSS Styles only
For your own JavaScript integration (React, Vue, Angular, etc.) or Static HTML.
#### Using CSS Variables (Modern Websites and WebApps)
Example:
`my-component.jsx`
```jsx
import '@rakuten-rex/stepper/Stepper/css';
function MyCustomComponent() {
return (
<!-- html Stepper Without Label -->
<div class="rex-stepper">
<button class="rex-icon-button minus" type="button" aria-label="minus button">
<svg width="40" height="32"><path d="M14 17h12v-1.3H14V17z" fill-rule="evenodd" clip-rule="evenodd" fill="#b6b6b6"></path></svg>
</button>
<input type="text" id="defaultId" class="rex-stepper-counter" name="name_age" pattern="[0-9]*" value="0" aria-label="name_age" />
<button class="rex-icon-button plus" type="button" aria-label="plus button">
<svg width="40" height="32"><path d="M19.3 10v5.3H14v1.3h5.3V22h1.3v-5.3H26v-1.3h-5.3V10z" fill="#b6b6b6" fill-rule="evenodd"></path></svg>
</button>
</div>
<!-- //html Stepper Without Label -->
<!-- html Stepper With Label -->
<div class="rex-stepper-label">
<label for="age" class="rex-stepper-label-ui" id="labelId">Label</label>
<div class="rex-stepper">
<button class="rex-icon-button minus" type="button" aria-label="minus button">
<svg width="40" height="32"><path d="M14 17h12v-1.3H14V17z" fill-rule="evenodd" clip-rule="evenodd" fill="#b6b6b6"></path></svg>
</button>
<input type="text" id="age" class="rex-stepper-counter" name="name_age" pattern="[0-9]*" value="0" aria-label="name_age" />
<button class="rex-icon-button plus" type="button" aria-label="plus button">
<svg width="40" height="32"><path d="M19.3 10v5.3H14v1.3h5.3V22h1.3v-5.3H26v-1.3h-5.3V10z" fill="#b6b6b6" fill-rule="evenodd"></path></svg>
</button>
</div>
</div>
<!-- //html Stepper With Label -->
);
}
```
#### Using Static CSS (Legacy Websites)
Example:
`my-component.jsx`
```jsx
import '@rakuten-rex/stepper/Stepper/css/static';
function MyCustomComponent() {
return (
<!-- html Stepper Without Label -->
<div class="rex-stepper">
<button class="rex-icon-button minus" type="button" aria-label="minus button">
<svg width="40" height="32"><path d="M14 17h12v-1.3H14V17z" fill-rule="evenodd" clip-rule="evenodd" fill="#b6b6b6"></path></svg>
</button>
<input type="text" id="defaultId" class="rex-stepper-counter" name="name_age" pattern="[0-9]*" value="0" aria-label="name_age" />
<button class="rex-icon-button plus" type="button" aria-label="plus button">
<svg width="40" height="32"><path d="M19.3 10v5.3H14v1.3h5.3V22h1.3v-5.3H26v-1.3h-5.3V10z" fill="#b6b6b6" fill-rule="evenodd"></path></svg>
</button>
</div>
<!-- //html Stepper Without Label -->
<!-- html Stepper With Label -->
<div class="rex-stepper-label">
<label for="age" class="rex-stepper-label-ui" id="labelId">Label</label>
<div class="rex-stepper">
<button class="rex-icon-button minus" type="button" aria-label="minus button">
<svg width="40" height="32"><path d="M14 17h12v-1.3H14V17z" fill-rule="evenodd" clip-rule="evenodd" fill="#b6b6b6"></path></svg>
</button>
<input type="text" id="age" class="rex-stepper-counter" name="name_age" pattern="[0-9]*" value="0" aria-label="name_age" />
<button class="rex-icon-button plus" type="button" aria-label="plus button">
<svg width="40" height="32"><path d="M19.3 10v5.3H14v1.3h5.3V22h1.3v-5.3H26v-1.3h-5.3V10z" fill="#b6b6b6" fill-rule="evenodd"></path></svg>
</button>
</div>
</div>
<!-- //html Stepper With Label -->
);
}
```
[Click here](https://rakuten-rex.github.io/stepper/) to see all working examples in Storybook.
### <img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/logos/sass.svg?sanitize=true" height="16" /> Sass mixins
For your own customization of styles (React, Vue, Angular, etc.) or Static HTML.
Example:
`my-styles.scss`
```scss
@import '~@rakuten-rex/stepper/Stepper/sass/styles.mixin';
.rex-stepper {
@include rex-stepper();
}
```
### <img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/logos/vue.svg?sanitize=true" height="16" /> Vue.js
A basic implementation based on HTML structure and import CSS styles into your component.
Example:
`my-component.vue`
```vue
<template>
<!-- html Stepper Without Label -->
<div class="rex-stepper">
<button class="rex-icon-button minus" type="button" aria-label="minus button">
<svg width="40" height="32"><path d="M14 17h12v-1.3H14V17z" fill-rule="evenodd" clip-rule="evenodd" fill="#b6b6b6"></path></svg>
</button>
<input type="text" id="defaultId" class="rex-stepper-counter" name="name_age" pattern="[0-9]*" value="0" aria-label="name_age" />
<button class="rex-icon-button plus" type="button" aria-label="plus button">
<svg width="40" height="32"><path d="M19.3 10v5.3H14v1.3h5.3V22h1.3v-5.3H26v-1.3h-5.3V10z" fill="#b6b6b6" fill-rule="evenodd"></path></svg>
</button>
</div>
<!-- //html Stepper Without Label -->
<!-- html Stepper With Label -->
<div class="rex-stepper-label">
<label for="age" class="rex-stepper-label-ui" id="labelId">Label</label>
<div class="rex-stepper">
<button class="rex-icon-button minus" type="button" aria-label="minus button">
<svg width="40" height="32"><path d="M14 17h12v-1.3H14V17z" fill-rule="evenodd" clip-rule="evenodd" fill="#b6b6b6"></path></svg>
</button>
<input type="text" id="age" class="rex-stepper-counter" name="name_age" pattern="[0-9]*" value="0" aria-label="name_age" />
<button class="rex-icon-button plus" type="button" aria-label="plus button">
<svg width="40" height="32"><path d="M19.3 10v5.3H14v1.3h5.3V22h1.3v-5.3H26v-1.3h-5.3V10z" fill="#b6b6b6" fill-rule="evenodd"></path></svg>
</button>
</div>
</div>
<!-- //html Stepper With Label -->
</template>
<script>
export default {
name: 'Stepper',
}
</script>
<style scoped>
@import "~@rakuten-rex/stepper/Stepper/css";
</style>
```
## B) Static HTML
Copy-paste the stylesheet `<link>` into your `<head>` tag to load our CSS styles.
### Using CSS Variables (Modern Websites and WebApps)
**Production mode URL** (recommended for Static HTML projects):
```
https://unpkg.com/@rakuten-rex/stepper@1.6.0/Stepper/Stepper.production.min.css
```
Development mode URL (for local testing):
```
https://unpkg.com/@rakuten-rex/stepper@1.6.0/Stepper/Stepper.development.css
```
### Using Static CSS (Legacy Websites)
```
https://unpkg.com/@rakuten-rex/stepper@1.6.0/Stepper/Stepper.static.css
```
### <img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/logos/html-5.svg?sanitize=true" height="16" /> Single component integration
Add it from unpkg.com CDN (NPM) into your HTML template or HTML static page.
Example:
`my-page.html`
```html
<html>
<head>
<meta charset="utf-8">
<title>My Page</title>
<!-- ReX stepper -->
<link href="https://unpkg.com/@rakuten-rex/stepper@1.6.0/Stepper/Stepper.production.min.css" rel="stylesheet">
</head>
<body>
<!-- html Stepper Without Label -->
<div class="rex-stepper">
<button class="rex-icon-button minus" type="button" aria-label="minus button">
<svg width="40" height="32"><path d="M14 17h12v-1.3H14V17z" fill-rule="evenodd" clip-rule="evenodd" fill="#b6b6b6"></path></svg>
</button>
<input type="text" id="defaultId" class="rex-stepper-counter" name="name_age" pattern="[0-9]*" value="0" aria-label="name_age" />
<button class="rex-icon-button plus" type="button" aria-label="plus button">
<svg width="40" height="32"><path d="M19.3 10v5.3H14v1.3h5.3V22h1.3v-5.3H26v-1.3h-5.3V10z" fill="#b6b6b6" fill-rule="evenodd"></path></svg>
</button>
</div>
<!-- //html Stepper Without Label -->
<!-- html Stepper With Label -->
<div class="rex-stepper-label">
<label for="age" class="rex-stepper-label-ui" id="labelId">Label</label>
<div class="rex-stepper">
<button class="rex-icon-button minus" type="button" aria-label="minus button">
<svg width="40" height="32"><path d="M14 17h12v-1.3H14V17z" fill-rule="evenodd" clip-rule="evenodd" fill="#b6b6b6"></path></svg>
</button>
<input type="text" id="age" class="rex-stepper-counter" name="name_age" pattern="[0-9]*" value="0" aria-label="name_age" />
<button class="rex-icon-button plus" type="button" aria-label="plus button">
<svg width="40" height="32"><path d="M19.3 10v5.3H14v1.3h5.3V22h1.3v-5.3H26v-1.3h-5.3V10z" fill="#b6b6b6" fill-rule="evenodd"></path></svg>
</button>
</div>
</div>
<!-- //html Stepper With Label -->
</body>
</html>
```
## Documentation, source code and distribution
|| Site | URL |
|-------------| ------------- | ------------- |
|<img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/logos/github-icon.svg?sanitize=true" height="16" />| Github (Source Code) | https://github.com/rakuten-rex |
|<img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/logos/npm.svg?sanitize=true" height="16" />| NPM (Package distribution) | https://www.npmjs.com/org/rakuten-rex |
|<img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/logos/zh_logo.svg?sanitize=true" height="16" />| ZeroHeight (Documentation) | https://zeroheight.com/390c074f3 |
## Project Stack
| Front-end |
|-------------|
| <img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/logos/html-5.svg?sanitize=true" height="16" /> HTML5 <img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/logos/css-3.svg?sanitize=true" height="16" /> CSS3 & Sass <img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/logos/javascript.svg?sanitize=true" height="16" /> JavaScript ES6 <img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/logos/react.svg?sanitize=true" height="16" /> React |
| Tools |
|-------------|
| <img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/logos/webpack.svg?sanitize=true" height="16" /> webpack <img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/logos/storybook-icon.svg?sanitize=true" height="16" /> Storybook <img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/logos/babel.svg?sanitize=true" height="16" /> Babel <img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/logos/eslint.svg?sanitize=true" height="16" /> ESLint <img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/logos/prettier.svg?sanitize=true" height="16" /> Prettier |
## Features
| Styles features | JavaScript features |
|-------------|-------------|
| Theme support via CSS variables | React components splitted by type |
| Static CSS styles available for HTML/VueJS/AngularJS | Universal Module Definition support |
| Sass mixins for custom builds |
| Reset CSS styles already bundled by HTML tags |
| Removed duplicated CSS props |
| CSS classes prefix `rex-` |
## Browser Support
| PC | Mobile
|-------------|-------------|
| <img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/browsers/chrome.svg?sanitize=true" height="14" /> Chrome 49+ | <img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/browsers/apple.svg?sanitize=true" height="14" /> iOS 9+ (Safari 9.3+, Chrome 78+) |
| <img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/browsers/safari.svg?sanitize=true" height="14" /> Safari 9.1+ | <img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/browsers/android-icon.svg?sanitize=true" height="14" /> Android 6+ (Chrome 78+, Android Browser 76+) |
| <img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/browsers/firefox.svg?sanitize=true" height="14" /> Firefox 31+ | |
| <img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/browsers/microsoft-edge.svg?sanitize=true" height="14" /> MS Edge 15+ | |
| <img src="https://raw.githubusercontent.com/rakuten-rex/stepper/master/project-scripts/webpack/markdown/browsers/internetexplorer.svg?sanitize=true" height="14" /> IE 11+ | |