import type {Meta, StoryFn} from '@storybook/vue3'; import VCard from './VCard.vue'; import VBtn from '@morpheme/button'; import {defaultColors} from '@morpheme/theme/defaultTheme'; import {defineComponent, ref} from 'vue'; import VCardHeader from './VCardHeader.vue'; import VCardFooter from './VCardFooter.vue'; import VCardBody from './VCardBody.vue'; export default { title: 'Components/Card', component: VCard, argTypes: {}, args: { title: 'Title', body: 'Body', footer: 'Footer', headerClass: '', footerClass: '', bodyClass: '', hideHeader: false, hideFooter: false, bordered: false, }, } as Meta; const Template: StoryFn = (args) => ({ components: {VCard}, setup() { return {args}; }, template: ` {{ args.body }} `, }); export const Default = Template.bind({}); Default.args = {}; Default.parameters = { docs: { source: { code: 'Body', }, }, }; export const HideFooter = Template.bind({}); HideFooter.args = { hideFooter: true, }; HideFooter.parameters = { docs: { source: { code: 'Body', }, }, }; export const HideHeader = Template.bind({}); HideHeader.args = { hideHeader: true, }; HideHeader.parameters = { docs: { source: { code: 'Body', }, }, }; export const BodyOnly = Template.bind({}); BodyOnly.args = { hideHeader: true, hideFooter: true, }; BodyOnly.parameters = { docs: { source: { code: 'Body', }, }, }; export const Image = Template.bind({}); Image.args = { image: 'https://picsum.photos/200/300', imageAlt: 'random image', imageClass: 'h-40', footer: '', }; export const CustomSlots: StoryFn = (args) => ({ components: {VCard, VBtn}, setup() { return {args}; }, template: `

lorem ipsum body

`, }); CustomSlots.parameters = { docs: { source: { code: `

lorem ipsum body

`, }, }, }; export const Flat = Template.bind({}); Flat.args = { flat: true, }; Flat.parameters = { docs: { source: { code: 'Body', }, }, }; export const Colors: StoryFn<{}> = (args) => ({ components: {VCard}, setup() { return {args, colors: defaultColors}; }, template: ` Card: {{ color }} `, }); export const Bordered: StoryFn<{}> = (args) => ({ components: {VCard, VBtn}, setup() { const selectedColor = ref('primary'); const positions = ['top', 'left', 'bottom', 'right']; return {args, colors: defaultColors, positions, selectedColor}; }, template: `
{{ color }}
Border on {{ position }} `, }); export const Shadow: StoryFn<{}> = (args) => ({ components: {VCard}, setup() { const shadows = [true, 'sm', 'md', 'lg', 'xl', '2xl', 'inner', 'none']; return {args, shadows}; }, template: ` Shadow: {{ shadow }} `, }); export const DarkMode: StoryFn<{}> = () => ({ components: {VCard}, setup() { return {defaultColors}; }, template: `
{{ color }} {{ color }}
`, }); const DummyLink = defineComponent({ template: ``, }); export const CustomComponent: StoryFn<{}> = () => ({ components: {VCard, DummyLink}, setup() { return {defaultColors}; }, template: `
Default

With to props

With to props. As NuxtLink.

As anchor

As anchor with target="_blank"

As anchor with target="_blank" and rel

As DummyLink

`, }); export const Bodyless: StoryFn<{}> = () => ({ components: {VCard, VCardHeader, VCardFooter, VCardBody}, setup() { return {defaultColors}; }, template: `
Default Bodyless Bodyless with VCardBody

Bodyless with VCardHeader

Bodyless with VCardBody

Bodyless with VCardFooter

`, });