Skip to main content

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()

The cn() 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

The 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

The cn() function works seamlessly with class-variance-authority (CVA):

Override Component Styles

Why cn()?

The cn() utility solves two problems:
  1. Conditional classes: Using clsx makes it easy to apply classes conditionally without string concatenation.
  2. Tailwind conflicts: Using tailwind-merge ensures 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