Overview
The gadget-ui library exports utility functions to help with common tasks. These utilities are designed to work seamlessly with the component library.cn()
Thecn() utility function merges and deduplicates Tailwind CSS classes. It combines clsx for conditional class handling with tailwind-merge for intelligent class merging.
Import
Usage
The function accepts any number of class values and intelligently merges them:Conditional Classes
Use objects for conditional classes:Class Deduplication
Tailwind-merge handles conflicting utility classes:Arrays and Mixed Values
Supports arrays and mixed input types:Type Signature
ClassValue type (from clsx) accepts:
- Strings:
"class-name" - Objects:
{ "class-name": boolean } - Arrays:
["class1", "class2"] - Falsy values:
undefined,null,false(ignored)
Examples
Basic Merging
With Component Props
Responsive Classes
With CVA Variants
Thecn() function works seamlessly with class-variance-authority (CVA):
Override Component Styles
Why cn()?
Thecn() utility solves two problems:
-
Conditional classes: Using
clsxmakes it easy to apply classes conditionally without string concatenation. -
Tailwind conflicts: Using
tailwind-mergeensures that conflicting Tailwind utilities are properly resolved (the last one wins).
Without cn():
With cn():
Implementation
Location:packages/gadget-ui/src/lib/cn.ts:4
Dependencies
- clsx - Tiny utility for constructing className strings conditionally
- tailwind-merge - Merge Tailwind CSS classes without style conflicts
