import { Meta } from '@storybook/addon-docs/blocks'; # cn (ClassNames) Utility Function The `cn` utility function is a lightweight, performant solution for combining class names with conditional logic. ## Installation ```typescript import { cn } from 'motoko/utils' ``` ## API ```typescript type Argument = string | boolean | null | undefined | number cn(...args: Argument[]): string ``` ## Examples ### Basic Usage ```typescript // Basic conditional classes cn('btn', true && 'active', false && 'disabled', 'large') // Result: "btn active large" // Falsy value filtering cn('btn', null, undefined, false, 'primary') // Result: "btn primary" ``` ## Performance Notes - Uses traditional for loops instead of for-of for ~20-40% better performance - Single-pass algorithm with minimal string operations - Optimized for common React component patterns ## Common Patterns ### Conditional Classes ```typescript const className = cn( 'base-class', isActive && 'active', isDisabled && 'disabled', variant && `variant-${variant}` ) ``` ### CSS Modules ```typescript import styles from './Component.module.scss' const className = cn( styles.base, isError && styles.error, props.className ) ``` ### Component Props ```typescript interface ButtonProps { variant: 'primary' | 'secondary' disabled?: boolean className?: string } const Button = ({ variant, disabled, className, ...props }: ButtonProps) => (