import type { ComponentPropsAndSlots, Meta, StoryObj } from '@storybook/vue3-vite' import { ref, toRefs } from 'vue' import Button from '@/components/ui/button/Button.vue' import Popover from '@/components/ui/Popover.vue' import ScrubableNumberInput from './ScrubableNumberInput.vue' type StoryArgs = ComponentPropsAndSlots const meta: Meta = { title: 'Components/Input/Number', component: ScrubableNumberInput, tags: ['autodocs'], parameters: { layout: 'centered' }, argTypes: { min: { control: 'number' }, max: { control: 'number' }, step: { control: 'number' }, disabled: { control: 'boolean' }, hideButtons: { control: 'boolean' } }, args: { min: 0, max: 100, step: 1, disabled: false, hideButtons: false }, decorators: [ (story) => ({ components: { story }, template: '
' }) ] } export default meta type Story = StoryObj export const Default: Story = { render: (args) => ({ components: { ScrubableNumberInput }, setup() { const { min, max, step, disabled, hideButtons } = toRefs(args) const value = ref(42) return { value, min, max, step, disabled, hideButtons } }, template: '' }) } export const Disabled: Story = { args: { disabled: true }, render: (args) => ({ components: { ScrubableNumberInput }, setup() { const { disabled } = toRefs(args) const value = ref(50) return { value, disabled } }, template: '' }) } export const AtMinimum: Story = { render: () => ({ components: { ScrubableNumberInput }, setup() { const value = ref(0) return { value } }, template: '' }) } export const AtMaximum: Story = { render: () => ({ components: { ScrubableNumberInput }, setup() { const value = ref(100) return { value } }, template: '' }) } export const FloatPrecision: Story = { args: { min: 0, max: 1, step: 0.01 }, render: (args) => ({ components: { ScrubableNumberInput }, setup() { const { min, max, step } = toRefs(args) const value = ref(0.75) return { value, min, max, step } }, template: '' }) } export const LargeNumber: Story = { render: () => ({ components: { ScrubableNumberInput }, setup() { const value = ref(1809000312992) return { value } }, template: '' }) } export const HiddenButtons: Story = { args: { hideButtons: true }, render: (args) => ({ components: { ScrubableNumberInput }, setup() { const { hideButtons } = toRefs(args) const value = ref(42) return { value, hideButtons } }, template: '' }) } export const WithControlButton: Story = { render: () => ({ components: { ScrubableNumberInput, Button, Popover }, setup() { const value = ref(1809000312992) return { value } }, template: `
Control popover content
` }) }