import { Check, Minus, X } from "lucide-react-native"; import type { VariantProps } from 'class-variance-authority'; import { checkboxRootVariants } from "@consensys/ds3/src/components/checkbox/styles"; // Extract actual types from the checkbox component type CheckboxVariant = NonNullable['variant']>; type CheckboxColor = NonNullable['color']>; type CheckboxSize = NonNullable['size']>; // Get the actual variant, color, and size values from the component const variants: CheckboxVariant[] = ['solid', 'soft', 'outline']; const colors: CheckboxColor[] = ['neutral', 'primary', 'secondary', 'error', 'warning', 'success']; const sizes: CheckboxSize[] = ['sm', 'md', 'lg']; // Helper function to generate JSX for a single checkbox with state management const generateCheckboxJSX = (key: string, variant?: CheckboxVariant, color?: CheckboxColor, size?: CheckboxSize, checked = false, disabled = false, indeterminate = false) => { const variantProp = variant && variant !== 'solid' ? ` variant="${variant}"` : ''; const colorProp = color && color !== 'neutral' ? ` color="${color}"` : ''; const sizeProp = size && size !== 'md' ? ` size="${size}"` : ''; const checkedProp = ` checked={getCheckboxState("${key}", ${checked})}`; const disabledProp = disabled ? ' disabled' : ''; const indeterminateProp = indeterminate ? ' indeterminate' : ''; const handlerProp = ` onCheckedChange={createCheckboxHandler("${key}")}`; return ``; }; // Helper function to generate JSX for checkbox with icon and state management const generateCheckboxWithIconJSX = (key: string, variant: CheckboxVariant, color?: CheckboxColor, icon = 'Check', checked = false) => { const colorProp = color && color !== 'neutral' ? ` color="${color}"` : ''; const checkedProp = ` checked={getCheckboxState("${key}", ${checked})}`; const handlerProp = ` onCheckedChange={createCheckboxHandler("${key}")}`; return ` `; }; // Helper function to generate JSX for checkbox with label and state management const generateCheckboxWithLabelJSX = (key: string, variant?: CheckboxVariant, color?: CheckboxColor, label = 'Checkbox', checked = false) => { const variantProp = variant && variant !== 'solid' ? ` variant="${variant}"` : ''; const colorProp = color && color !== 'neutral' ? ` color="${color}"` : ''; const checkedProp = ` checked={getCheckboxState("${key}", ${checked})}`; const handlerProp = ` onCheckedChange={createCheckboxHandler("${key}")}`; return ` ${label} `; }; export const checkboxExamples = { "variants": { name: "Checkbox Variants", jsx: ` Default ${generateCheckboxJSX('variant-default')} ${generateCheckboxJSX('variant-default-checked', undefined, undefined, undefined, true)} ${variants.map((variant, index) => ` ${variant} ${generateCheckboxJSX(`variant-${variant}-${index}`)} ${generateCheckboxJSX(`variant-${variant}-${index}-checked`, variant, undefined, undefined, true)} `).join('\n')} ` }, "colors": { name: "Checkbox Colors", jsx: ` ${colors.map(color => ` ${color.charAt(0).toUpperCase() + color.slice(1)} ${variants.map((variant, index) => ` ${generateCheckboxJSX(`color-${color}-${variant}-${index}`, variant, color, undefined, true)}`).join('\n')} `).join('\n')} ` }, "icons": { name: "With Icons", jsx: ` ${colors.map(color => ` ${color.charAt(0).toUpperCase() + color.slice(1)} ${generateCheckboxWithIconJSX(`icon-${color}-0`, 'solid', color, 'Check', true)} Solid + Check ${generateCheckboxWithIconJSX(`icon-${color}-1`, 'soft', color, 'Minus', true)} Soft + Minus ${generateCheckboxWithIconJSX(`icon-${color}-2`, 'outline', color, 'X', true)} Outline + X `).join('\n')} ` }, "indeterminate": { name: "Indeterminate State", jsx: ` Indeterminate Indeterminate + Checked Soft Primary Indeterminate Outline Success Indeterminate ` }, "sizes": { name: "Checkbox Sizes", jsx: ` ${sizes.map(size => ` ${size.charAt(0).toUpperCase() + size.slice(1)} ${variants.map((variant, index) => ` ${generateCheckboxJSX(`size-${size}-${variant}-${index}`, variant, colors[index], size)}`).join('\n')} `).join('\n')} ` }, "disabled": { name: "Disabled States", jsx: ` ${colors.map(color => ` ${color.charAt(0).toUpperCase() + color.slice(1)} ${variants.map(variant => ` ${generateCheckboxJSX(`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 => ` ${generateCheckboxJSX(`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 => ` ${generateCheckboxWithLabelJSX(`label-${color}-${variant}`, variant, color, `${variant.charAt(0).toUpperCase() + variant.slice(1)} ${color.charAt(0).toUpperCase() + color.slice(1)}`)}`).join('\n')} `).join('\n')} ` }, "mixed-states": { name: "Mixed States", jsx: ` Select All Colors ${colors.slice(0, 3).map(color => ` ${generateCheckboxJSX(`parent-child-${color}`, undefined, color, undefined, color === 'primary')} ${color} `).join('\n')} ` }, "icon-variants": { name: "Icon Variants", jsx: ` ${generateCheckboxWithIconJSX('icon-variant-solid', 'solid', undefined, 'Check', true)} Solid + Check ${generateCheckboxWithIconJSX('icon-variant-soft', 'soft', 'primary', 'Minus', true)} Soft + Minus ${generateCheckboxWithIconJSX('icon-variant-outline', 'outline', 'success', 'X', true)} Outline + X Solid Error Indeterminate Soft Warning Disabled Outline Secondary Disabled Checked ` } };