import type { ButtonVariant, ButtonColors, ButtonSizes } from "@consensys/ds3"; // Get the actual variant, color, and size values from the component const variants: ButtonVariant[] = ['elevated', 'solid', 'soft', 'outline', 'dashed', 'ghost']; const colors: ButtonColors[] = ['neutral', 'primary', 'secondary', 'error', 'warning', 'success']; const sizes: ButtonSizes[] = ['sm', 'md', 'lg']; // Helper function to generate JSX for a single button const generateButtonJSX = (variant: ButtonVariant, color?: ButtonColors, size?: ButtonSizes, text = 'Button') => { const colorProp = color && color !== 'neutral' ? ` color="${color}"` : ''; const sizeProp = size && size !== 'md' ? ` size="${size}"` : ''; return ``; }; // Helper function to generate JSX for button with icon const generateButtonWithIconJSX = (variant: ButtonVariant, iconPosition: 'start' | 'end' | 'both', color?: ButtonColors, size?: ButtonSizes, text = 'Button') => { const colorProp = color && color !== 'neutral' ? ` color="${color}"` : ''; const sizeProp = size && size !== 'md' ? ` size="${size}"` : ''; let iconJSX = ''; if (iconPosition === 'start' || iconPosition === 'both') { iconJSX += ` \n`; } iconJSX += ` ${text}\n`; if (iconPosition === 'end' || iconPosition === 'both') { iconJSX += ` \n`; } return ``; }; // Helper function to generate JSX for icon button const generateIconButtonJSX = (variant: ButtonVariant, color?: ButtonColors, size?: ButtonSizes) => { const colorProp = color && color !== 'neutral' ? ` color="${color}"` : ''; const sizeProp = size && size !== 'md' ? ` size="${size}"` : ''; return ``; }; export const buttonExamples = { "variants": { name: "Variants", jsx: ` ${variants.map(variant => ` ${generateButtonJSX(variant, undefined, undefined, variant.charAt(0).toUpperCase() + variant.slice(1))}`).join('\n')} ` }, "colors": { name: "Colors", jsx: ` ${colors.map(color => ` ${color.charAt(0).toUpperCase() + color.slice(1)} ${variants.map(variant => ` ${generateButtonJSX(variant, color, undefined, variant.charAt(0).toUpperCase() + variant.slice(1))}`).join('\n')} `).join('\n')} ` }, "accent-colors": { name: "Accent Colors", jsx: ` ` }, "sizes": { name: "Sizes", jsx: ` ${sizes.map(size => ` ${size.charAt(0).toUpperCase() + size.slice(1)} ${variants.map((variant, index) => ` ${generateButtonJSX(variant, colors[index], size, variant.charAt(0).toUpperCase() + variant.slice(1))}`).join('\n')} `).join('\n')} ` }, "icons": { name: "Icons", jsx: ` Prefix ${variants.map((variant, index) => ` ${generateButtonWithIconJSX(variant, 'start', colors[index], undefined, variant.charAt(0).toUpperCase() + variant.slice(1))}`).join('\n')} Suffix ${variants.map((variant, index) => ` ${generateButtonWithIconJSX(variant, 'end', colors[index], undefined, variant.charAt(0).toUpperCase() + variant.slice(1))}`).join('\n')} Both ${variants.map((variant, index) => ` ${generateButtonWithIconJSX(variant, 'both', colors[index], undefined, variant.charAt(0).toUpperCase() + variant.slice(1))}`).join('\n')} ` }, "icon-buttons": { name: "Icon Buttons", jsx: ` ${sizes.map(size => ` ${size.charAt(0).toUpperCase() + size.slice(1)} ${variants.map((variant, index) => ` ${generateIconButtonJSX(variant, colors[index], size)}`).join('\n')} `).join('\n')} ` }, "loading": { name: "Loading", jsx: ` ` }, "disabled": { name: "Disabled", jsx: ` Regular Buttons ${variants.map((variant, index) => ` `).join('\n')} Square ${variants.map((variant, index) => ` `).join('\n')} ` } };