import type { Meta, StoryObj } from '@storybook/vue3-vite'; import { PopoverClose, } from 'radix-vue'; import TextInput from '@/components/text-input/text-input.vue'; import Button from '../../button/button.vue'; import PopoverContent from '../popover-content.vue'; import PopoverTrigger from '../popover-trigger.vue'; import Popover from '../popover.vue'; const meta: Meta = { title: 'Components/Popover', component: Popover, parameters: { layout: 'centered', }, argTypes: { side: { control: { type: 'select' }, options: ['top', 'right', 'bottom', 'left'], description: 'The preferred side of the trigger to render against when open.', }, sideOffset: { control: { type: 'number' }, description: 'The distance in pixels from the trigger.', }, align: { control: { type: 'select' }, options: ['start', 'center', 'end'], description: 'The preferred alignment against the trigger. May change when collisions occur.', }, alignOffset: { control: { type: 'number' }, description: 'An offset in pixels from the start or end alignment options.', }, title: { control: { type: 'text' }, description: 'The title text for the popover', }, description: { control: { type: 'text' }, description: 'The description text for the popover', }, icon: { control: { type: 'text' }, description: 'Icon class name to display', }, iconSize: { control: { type: 'select' }, options: ['sm', 'md', 'lg', 'xl', 'xxl'], description: 'Size of the icon', }, showTail: { control: { type: 'boolean' }, description: 'Whether to show the arrow/tail', }, dismissible: { control: { type: 'boolean' }, description: 'Whether to show the close button', }, }, args: { side: 'bottom', title: 'Popover Title', description: 'This is the popover description text.', align: 'center', alignOffset: 0, showTail: true, dismissible: true, iconSize: 'lg', icon: 'i-celeste-search-eye-line', }, }; export default meta; type Story = StoryObj; export const Default: Story = { args: {}, render: args => ({ components: { Popover, PopoverContent, PopoverTrigger, Button }, setup() { return { args }; }, template: ` `, }), }; export const WithIcon: Story = { args: {}, render: args => ({ components: { Popover, PopoverContent, PopoverTrigger, Button }, setup() { return { args }; }, template: ` `, }), }; export const IconSizes: Story = { args: {}, render: args => ({ components: { Popover, PopoverContent, PopoverTrigger, Button }, setup() { return { args }; }, template: `
`, }), }; export const WithFooter: Story = { args: {}, render: args => ({ components: { Popover, PopoverContent, PopoverTrigger, Button }, setup() { return { args }; }, template: ` `, }), }; export const NotDismissible: Story = { args: {}, render: args => ({ components: { Popover, PopoverContent, PopoverTrigger, Button }, setup() { return { args }; }, template: ` `, }), }; export const NoTail: Story = { args: {}, render: args => ({ components: { Popover, PopoverContent, PopoverTrigger, Button }, setup() { return { args }; }, template: ` `, }), }; export const Positioning: Story = { args: {}, render: args => ({ components: { Popover, PopoverContent, PopoverTrigger, Button }, setup() { return { args }; }, template: `
`, }), }; export const CustomContent: Story = { args: {}, render: args => ({ components: { Popover, PopoverContent, PopoverTrigger, Button, TextInput, PopoverClose }, setup() { return { args }; }, template: `

Subscribe to Newsletter

Get the latest updates delivered to your inbox.

`, }), };