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')}
`
}
};