import type { Meta, StoryObj } from '@storybook/react-vite'; import { type ComponentMatrixCellProps, Story } from './_internal/Story'; import { Slider } from './Slider'; const meta = { component: Slider, parameters: { layout: 'fullscreen', }, title: 'components/Slider', } satisfies Meta; export default meta; type StoryDefinition = StoryObj; const MODE_ROWS = [ { key: 'single', label: 'Single value' }, { key: 'range', label: 'Range' }, { key: 'labeled', label: 'With label' }, { key: 'disabled', label: 'Disabled' }, ]; const SCALE_COLUMNS = [ { key: 'default', label: 'Default scale' }, { key: 'stepped', label: 'Stepped marks' }, { key: 'wide', label: 'Wide range' }, ]; function SliderAnatomy() { return (
Bar hit area
The Slider.Control padding. The visible track stays thin, but the grabbable region extends above and below it.
Thumb hit area
A ::before pseudo-element inset around the thumb, enlarging the grab target without changing its visual size.
); } function SliderMatrixCell({ column, row }: ComponentMatrixCellProps) { return ; } function SliderPreview({ columnKey, rowKey, }: { columnKey: string; rowKey: string; }) { const isRange = rowKey === 'range'; const isStepped = columnKey === 'stepped'; const max = columnKey === 'wide' ? 500 : isStepped ? 12 : 100; const value = isRange ? [max * 0.25, max * 0.75] : [max * 0.45]; return (
{rowKey === 'labeled' ? (
Intensity
) : null}
{isStepped ? : null}
); } export const All: StoryDefinition = { render: () => ( ), };