import { Figma } from "lucide-react-native"; import type { VariantProps } from 'class-variance-authority'; import { switchRootVariants } from "@consensys/ds3/src/components/switch/styles"; // Extract actual types from the switch component type SwitchVariant = NonNullable['variant']>; type SwitchColor = NonNullable['color']>; type SwitchSize = NonNullable['size']>; // Get the actual variant, color, and size values from the component const variants: SwitchVariant[] = ['solid', 'soft', 'outline']; const colors: SwitchColor[] = ['neutral', 'primary', 'secondary', 'error', 'warning', 'success']; const sizes: SwitchSize[] = ['sm', 'md', 'lg']; // Helper function to generate JSX for a single switch with state management const generateSwitchJSX = (key: string, variant?: SwitchVariant, color?: SwitchColor, size?: SwitchSize, checked = false, disabled = false, thumbIcon?: string) => { const variantProp = variant && variant !== 'solid' ? ` variant="${variant}"` : ''; const colorProp = color && color !== 'neutral' ? ` color="${color}"` : ''; const sizeProp = size && size !== 'md' ? ` size="${size}"` : ''; const checkedProp = ` checked={getSwitchState("${key}", ${checked})}`; const disabledProp = disabled ? ' disabled' : ''; const thumbIconProp = thumbIcon ? ` thumbIcon={${thumbIcon}}` : ''; const handlerProp = ` onCheckedChange={createSwitchHandler("${key}")}`; return ``; }; // Helper function to generate JSX for switch with label and state management const generateSwitchWithLabelJSX = (key: string, variant?: SwitchVariant, color?: SwitchColor, label = 'Switch', checked = false) => { const variantProp = variant && variant !== 'solid' ? ` variant="${variant}"` : ''; const colorProp = color && color !== 'neutral' ? ` color="${color}"` : ''; const checkedProp = ` checked={getSwitchState("${key}", ${checked})}`; const handlerProp = ` onCheckedChange={createSwitchHandler("${key}")}`; return ` ${label} `; }; export const switchExamples = { "variants": { name: "Switch Variants", jsx: ` Default ${generateSwitchJSX('variant-default')} ${generateSwitchJSX('variant-default-checked', undefined, undefined, undefined, true)} ${variants.map((variant, index) => ` ${variant} ${generateSwitchJSX(`variant-${variant}-${index}`)} ${generateSwitchJSX(`variant-${variant}-${index}-checked`, variant, undefined, undefined, true)} `).join('\n')} ` }, "colors": { name: "Switch Colors", jsx: ` ${colors.map(color => ` ${color.charAt(0).toUpperCase() + color.slice(1)} ${variants.map((variant, index) => ` ${generateSwitchJSX(`color-${color}-${variant}-${index}`, variant, color, undefined, true)}`).join('\n')} `).join('\n')} ` }, "sizes": { name: "Switch Sizes", jsx: ` ${sizes.map(size => ` ${size.charAt(0).toUpperCase() + size.slice(1)} ${variants.map((variant, index) => ` ${generateSwitchJSX(`size-${size}-${variant}-${index}`, variant, colors[index], size)}`).join('\n')} `).join('\n')} ` }, "icons": { name: "With Icons", jsx: ` ${variants.map(variant => ` ${variant.charAt(0).toUpperCase() + variant.slice(1)} (${variant === 'solid' ? 'lg' : variant === 'soft' ? 'md' : 'sm'}) ${colors.map((color, colorIndex) => ` ${generateSwitchJSX(`icon-${variant}-${color}-${colorIndex}`, variant, color, variant === 'solid' ? 'lg' : variant === 'soft' ? 'md' : 'sm', true, false, 'Figma')}`).join('\n')} `).join('\n')} ` }, "disabled": { name: "Disabled States", jsx: ` ${colors.map(color => ` ${color.charAt(0).toUpperCase() + color.slice(1)} ${variants.map(variant => ` ${generateSwitchJSX(`disabled-${color}-${variant}`, variant, color, undefined, false, true)}`).join('\n')} `).join('\n')} ` }, "disabled-checked": { name: "Disabled Checked States", jsx: ` ${colors.map(color => ` ${color.charAt(0).toUpperCase() + color.slice(1)} ${variants.map(variant => ` ${generateSwitchJSX(`disabled-checked-${color}-${variant}`, variant, color, undefined, true, true)}`).join('\n')} `).join('\n')} ` }, "with-labels": { name: "With Labels", jsx: ` ${colors.map(color => ` ${color.charAt(0).toUpperCase() + color.slice(1)} ${variants.map(variant => ` ${generateSwitchWithLabelJSX(`label-${color}-${variant}`, variant, color, `${variant.charAt(0).toUpperCase() + variant.slice(1)} ${color.charAt(0).toUpperCase() + color.slice(1)}`)}`).join('\n')} `).join('\n')} ` }, "mixed-examples": { name: "Mixed Examples", jsx: ` ${generateSwitchJSX('mixed-solid-primary', 'solid', 'primary', undefined, true)} Solid Primary ${generateSwitchJSX('mixed-soft-success', 'soft', 'success', undefined, true)} Soft Success ${generateSwitchJSX('mixed-outline-error', 'outline', 'error', undefined, true)} Outline Error ${generateSwitchJSX('mixed-icon-solid', 'solid', 'primary', 'lg', true, false, 'Figma')} Solid with Icon ${generateSwitchJSX('mixed-icon-soft', 'soft', 'secondary', 'md', true, false, 'Figma')} Soft with Icon ${generateSwitchJSX('mixed-icon-outline', 'outline', 'warning', 'sm', true, false, 'Figma')} Outline with Icon ${generateSwitchJSX('mixed-disabled', 'solid', 'neutral', undefined, false, true)} Disabled ${generateSwitchJSX('mixed-disabled-checked', 'soft', 'error', undefined, true, true)} Disabled Checked ${generateSwitchJSX('mixed-small', 'outline', 'success', 'sm', true)} Small Size ` } };