import React from 'react'; import type { ArgTypes } from '@storybook/react-vite'; import { Button } from '../components/Button/Button'; import { Tag } from '../components/Tag/Tag'; import { H1 } from '../components/Typography/H1/H1'; import { H2 } from '../components/Typography/H2/H2'; import { H3 } from '../components/Typography/H3/H3'; import { H4 } from '../components/Typography/H4/H4'; import { H5 } from '../components/Typography/H5/H5'; import { Paragraph } from '../components/Typography/Paragraph/Paragraph'; const booleanOptionsMapping = Object.freeze({ true: true, false: false, }); const numericOptionsMapping = Object.freeze({ '0': 0, '1': 1, '-1': -1, '100 000 000': 100_000_000, '1234.45': 1234.45, }); const stringOptionsMapping = Object.freeze({ '""': '', '"Lorem ipsum"': 'Lorem ipsum', '"Lorem ipsum" (M)': 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', '"Lorem ipsum" (L)': 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas scelerisque, ante a dictum fringilla, nisi sapien fermentum lorem, at malesuada risus quam ut purus.', '"Lorem ipsum" (paragraph)': 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas scelerisque, ante a dictum fringilla, nisi sapien fermentum lorem, at malesuada risus quam ut purus. Vivamus eu tortor eget augue venenatis iaculis vel vitae ipsum. Suspendisse potenti. Phasellus pulvinar dolor at tortor bibendum, ac pretium nunc interdum. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam hendrerit, enim et convallis pellentesque, tellus nibh bibendum leo, eu tristique est quam et est. Cras rutrum viverra euismod. Pellentesque diam mauris, lobortis id eros non, scelerisque fringilla arcu.', }); const typographyOptionsMapping = Object.freeze({ '

':

Lorem ipsum dolor sit amet

, '

': (

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas scelerisque, ante a dictum fringilla, nisi sapien fermentum lorem, at malesuada risus quam ut purus. Vivamus eu tortor eget augue venenatis iaculis vel vitae ipsum.

), '

':

Lorem ipsum dolor sit amet

, '

':

Lorem ipsum dolor sit amet

, '

':

Lorem ipsum dolor sit amet

, '
':
Lorem ipsum dolor sit amet
, 'Lorem ipsum': Lorem ipsum, 'Lorem ipsum (M)': Lorem ipsum dolor sit amet, consectetur adipiscing elit., 'Lorem ipsum (L)': ( ipsum dolor sit amet, consectetur adipiscing elit. Nullam nec purus ac libero ultrices aliquam. ), 'Lorem ipsum (paragraph)': ( Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas scelerisque, ante a dictum fringilla, nisi sapien fermentum lorem, at malesuada risus quam ut purus. Vivamus eu tortor eget augue venenatis iaculis vel vitae ipsum. Suspendisse potenti. Phasellus pulvinar dolor at tortor bibendum, ac pretium nunc interdum. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam hendrerit, enim et convallis pellentesque, tellus nibh bibendum leo, eu tristique est quam et est. Cras rutrum viverra euismod. Pellentesque diam mauris, lobortis id eros non, scelerisque fringilla arcu. ), }); const buttonOptionsMapping = Object.freeze({ '': , '': , '': , 'Hello world': Hello world, }); const tagOptionsMapping = Object.freeze({ 'Hello world': Hello world, 'Hello world': Hello world, 'Hello world': Hello world, 'Hello world': Hello world, }); const reactNodeOptionsMapping = Object.freeze({ undefined: undefined, ...booleanOptionsMapping, ...numericOptionsMapping, ...stringOptionsMapping, ...typographyOptionsMapping, ...buttonOptionsMapping, ...tagOptionsMapping, }); export const predefinedArgTypes = { boolean: { defaultValue: undefined, options: Object.keys(booleanOptionsMapping), mapping: booleanOptionsMapping, }, string: { defaultValue: undefined, options: Object.keys(stringOptionsMapping), mapping: stringOptionsMapping, }, numeric: { defaultValue: undefined, options: Object.keys(numericOptionsMapping), mapping: numericOptionsMapping, }, typography: { defaultValue: undefined, options: Object.keys(typographyOptionsMapping), mapping: typographyOptionsMapping, }, button: { defaultValue: undefined, options: Object.keys(buttonOptionsMapping), mapping: buttonOptionsMapping, }, tag: { defaultValue: undefined, options: Object.keys(tagOptionsMapping), mapping: tagOptionsMapping, }, ReactNode: { defaultValue: undefined, options: Object.keys(reactNodeOptionsMapping), mapping: reactNodeOptionsMapping, table: { type: { summary: 'ReactNode', }, }, type: { required: false, name: 'other', value: 'ReactNode', }, }, } satisfies ArgTypes; export function generateSvgPlaceholder(width: number, height?: number): string { return ( 'data:image/svg+xml;base64,' + btoa(` ${width}x${ height ?? width } `) ); }