Story with variants #
These patterns let you create several variants of your component to visualize several state of your component.
Isolated #
This will display variants as separate pages that you can navigate into. This view will be the same as single stories, and you will be able to resize your components.
vue
<script lang="ts" setup>
import MyComponent from './MyComponent.vue'
</script>
<template>
<Story title="MyStory">
<Variant title="MyVariant 1">
<MyComponent argument="hello" />
</Variant>
<Variant title="MyVariant 2">
<MyComponent argument="world" />
</Variant>
</Story>
</template>
Grid #
This will display variants in a grid for you to visualize all the variants in the same page. Though, you must fix the width (it can be a percentage).
vue
<script lang="ts" setup>
import MyComponent from './MyComponent.vue'
</script>
<template>
<Story
title="MyStory"
:layout="{ type: 'grid', width: '200px' }"
>
<Variant title="MyVariant 1">
<MyComponent argument="hello" />
</Variant>
<Variant title="MyVariant 2">
<MyComponent argument="world" />
</Variant>
</Story>
</template>
Auto generated grid #
When you have a lot of variant to test, it can be easier to auto generated them with this pattern.
vue
<script lang="ts" setup>
import MyComponent from './MyComponent.vue'
const args = ['hello', 'world', 'etc', '...']
</script>
<template>
<Story
title="MyStory"
:layout="{ type: 'grid', width: '200px' }"
>
<Variant
v-for="(argument, key) of args"
:key="key"
:title="`MyVariant ${key}`"
>
<MyComponent :argument="argument" />
</Variant>
</Story>
</template>
Auto generated grid with props binding #
When your variants have a lot of arguments, you can use this pattern.
vue
<script lang="ts" setup>
import MyComponent from './MyComponent.vue'
const propsVariants = [
{ argument: 'hello', color: 'red', count: 4 },
{ argument: 'world', color: 'blue', count: 5 },
{ argument: 'etc', color: 'violet', count: 6 },
]
</script>
<template>
<Story
title="MyStory"
:layout="{ type: 'grid', width: '200px' }"
>
<Variant
v-for="(props, key) of propsVariants"
:key="key"
:title="`MyVariant ${key}`"
>
<MyComponent v-bind="props" />
</Variant>
</Story>
</template>