import React, { useState } from 'react' import { type Meta, type StoryObj } from '@storybook/react' import { expect, within } from '@storybook/test' import { VisuallyHidden } from '~components/VisuallyHidden' import { LikertScale } from '../index' import { type Scale, type ScaleItem } from '../types' const scale: Scale = [ { value: -1, label: 'Not rated', }, { value: 1, label: 'Strong Disagree', }, { value: 2, label: 'Disagree', }, { value: 3, label: 'Neither agree or disagree', }, { value: 4, label: 'Agree', }, { value: 5, label: 'Strongly agree', }, ] const meta = { title: 'Components/LikertScale', component: LikertScale, args: { scale, labelId: 'labelId', selectedItem: scale[0], onSelect: (): void => undefined, }, } satisfies Meta export default meta type Story = StoryObj export const Playground: Story = { render: (args) => { const [selectedItem, setSelectedItem] = useState(null) return }, parameters: { docs: { source: { language: 'tsx', code: ` const SatisfactionExample = () => { const [selectedItem, setSelectedItem] = useState(null) return ( ) } `, }, canvas: { sourceState: 'shown', }, }, }, } export const IsRequired: Story = { render: (args) => { const [selectedItem, setSelectedItem] = useState(null) const labelId = React.useId() return (
Likert scale label
) }, args: { isRequired: true, }, play: async ({ canvasElement }) => { const canvas = within(canvasElement.parentElement!) const likertScale = canvas.getByRole('radiogroup', { name: 'Likert scale label' }) expect(likertScale).toHaveAttribute('aria-required', 'true') }, }