Storybook Addon Pseudo States allows you to automatically display pseudo states (and attribute states) of a component in Storybook's preview area.
| Framework | Display States | Tool-Button to show/hide |
|---|---|---|
| Angular | + | + |
| React | + | + |
| Lit | + | + |
| HTML | + | + |
| Vue | + | + |
First of all, you need to install Pseudo States into your project as a dev dependency.
npm install @ergosign/storybook-addon-pseudo-states-html --save-devThen, configure it as an addon by adding it to your addons.js file (located in the Storybook config directory).
To display the pseudo states, you have to add specific css classes to your styling, see Styling
Then, you can set the decorator locally, see Usage.
Add postcss-loader to a Storybook custom webpack config
module.exports = {
module: {
rules: [
{
test: /\.(scss|css)$/,
use: [
{
loader: 'style-loader',
},
{
loader: 'css-loader',
options: {
// ATTENTION when using css modules
modules: {
// !!! must not use [hash]'
localIdentName: '[path][name]__[local]',
},
},
},
// Add loader here
{
loader: 'postcss-loader',
},
{
loader: 'sass-loader',
},
],
},
],
},
};npm install postcss-pseudo-classes --save-devAnd enable it in postcss.config.js
module.exports = {
plugins: {
'postcss-pseudo-classes': {
// prefix: 'pseudoclass--',
// blacklist: ':not'
},
},
};When using a custom `prefix` parameter, use the same for postcss-pseudo-classes
module.exports = {
plugins: {
'postcss-pseudo-classes': {
prefix: 'pseudoclass-example-prefix',
},
},
};In addition to the standard pseudo state styling, you have to add fake classes consisting of prefix + pseudostate (\:hover, \:focus, \:active, \:yourOwnState) by yourself.
Be aware that default prefix is \:. When using your own prefix, update your styling accordingly.
.element {
//element styling
&:hover,
&\:hover {
// hover styling
}
}With a custom prefix
custom prefix: .pseudoclass--
// in your story
parameters: {
withPseudo: {
selector: "element",
prefix: "pseudoclass--"
}
}.element {
//element styling
&:hover,
&.pseudoclass--hover {
// hover styling
}
}You can enable a toolbar button that toggles the Pseudo States in the Preview area.
See Framework Support which Frameworks support this feature.
Enable the button by adding it to your main.js file (located in the Storybook config directory):
// main.js
module.exports = {
addons: ['@ergosign/storybook-addon-pseudo-states-html/register'],
};WARNING:
withPseudoshould always the first element in yourdecoratorsarray because it alters the template of the story.
import { withPseudo } from '@ergosign/storybook-addon-pseudo-states-html';
const section = {
title: 'Button',
decorators: [withPseudo],
parameters: {
withPseudo: { selector: 'button' },
},
};
export default section;
export const Story = () => {
return {
component: ButtonComponent,
};
};import { withPseudo } from '@ergosign/storybook-addon-pseudo-states-html';
storiesOf('Button', module)
.addDecorator(withPseudo)
.addParameters({
withPseudo: {
selector: 'button', // css selector of pseudo state's host element
pseudo: ['focus', 'hover', 'hover & focus', 'active'],
attributes: ['disabled', 'readonly', 'error'],
},
})
.add('Icon Button', () => <Button />);There is a default configuration for selector, pseudos and attributes. Thus, you can leave withPseudo options empty.
TODO
See Types