vueless
Version:
Vue Styleless UI Component Library, powered by Tailwind CSS.
124 lines (107 loc) • 2.82 kB
text/typescript
import {
getArgs,
getArgTypes,
getDocsDescription,
getSlotNames,
getSlotsFragment,
} from "../../utils/storybook";
import UChip from "../UChip.vue";
import UButton from "../../ui.button/UButton.vue";
import ULink from "../../ui.button-link/ULink.vue";
import URow from "../../ui.container-row/URow.vue";
import UAvatar from "../../ui.image-avatar/UAvatar.vue";
import UBadge from "../../ui.text-badge/UBadge.vue";
import type { Meta, StoryFn } from "@storybook/vue3-vite";
import type { Props } from "../types";
interface UChipArgs extends Props {
slotTemplate?: string;
enum: "size" | "color" | "xPosition" | "yPosition";
}
export default {
id: "100020",
title: "Other / Chip",
component: UChip,
args: {
/* predefine prop values here */
},
argTypes: {
...getArgTypes(UChip.__name),
},
parameters: {
docs: {
...getDocsDescription(UChip.__name),
},
},
} as Meta;
const defaultTemplate = `
<UButton
icon="mail"
color="neutral"
variant="subtle"
square
size="sm"
/>
`;
const DefaultTemplate: StoryFn<UChipArgs> = (args: UChipArgs) => ({
components: { UChip, UButton, ULink, UAvatar, UBadge },
setup: () => ({ args, slots: getSlotNames(UChip.__name) }),
template: `
<UChip v-bind="args">
${args.slotTemplate || getSlotsFragment(defaultTemplate)}
</UChip>
`,
});
const EnumTemplate: StoryFn<UChipArgs> = (args: UChipArgs, { argTypes }) => ({
components: { URow, UChip, UButton },
setup: () => ({ args, argTypes, getArgs }),
template: `
<URow>
<UChip
v-for="option in argTypes?.[args.enum]?.options"
v-bind="getArgs(args, option)"
:key="option"
>
<UButton
:label="option"
color="neutral"
variant="subtle"
size="sm"
/>
</UChip>
</URow>
`,
});
export const Default = DefaultTemplate.bind({});
Default.args = {};
export const Icon = DefaultTemplate.bind({});
Icon.args = {
icon: "arrow_outward",
size: "sm",
slotTemplate: `
<ULink label="Releases" class="mr-2" />
`,
};
export const Text = DefaultTemplate.bind({});
Text.args = {
slotTemplate: `
<template
${defaultTemplate}
</template>
<template
<UBadge label="3" class="py-px px-1" />
</template>
`,
};
export const Inset = DefaultTemplate.bind({});
Inset.args = {
inset: true,
slotTemplate: `<UAvatar src="https://i.pravatar.cc/300" rounded="full" />`,
};
export const Size = EnumTemplate.bind({});
Size.args = { enum: "size" };
export const Color = EnumTemplate.bind({});
Color.args = { enum: "color" };
export const XPosition = EnumTemplate.bind({});
XPosition.args = { enum: "xPosition" };
export const YPosition = EnumTemplate.bind({});
YPosition.args = { enum: "yPosition" };