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.title}}
{{args.footer}}
{{ 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: `
My Header
Agree
Cancel
lorem ipsum body
`,
});
CustomSlots.parameters = {
docs: {
source: {
code: `
My Header
Agree
Cancel
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
`,
});