Skip to content
Docs
API Reference

API Reference

Here's the API reference for the tailwind-variants exported types and functions.

Main Functions

tv

import { tv } from 'tailwind-variants'   const element = tv(options, config)   // call the element function to get the class names   element({'...'}) // => string   // call the element function with slots to get the class names   const { slot1, slot2 } = element({...}) // => Record<Function, Function>   slot1({}) // => string   // access to the returned object   element.base // => string element.slots // => Record<string, string> element.variants // => Record<string, string> element.variantKeys // => string[] element.defaultVariants // => Record<string, string> element.compoundVariants // => Array<Record<string, string>> element.compoundSlots // => Array<Record<string, string>>

createTV

Creates a custom tv instance with the specified default configuration.

import { createTV } from 'tailwind-variants';   const tv = createTV({  twMerge: true,  twMergeConfig: {  // custom config  } });

cn / cnBase

A utility function for concatenating and merging class names. Enhanced in v3 to support functionality similar to classnames/clsx.

// Original build (with tailwind-merge) import { cn, cnBase } from 'tailwind-variants';   // Lite build (without tailwind-merge) import { cn, cnBase } from 'tailwind-variants/lite';   // Usage cn('text-blue-500', 'hover:text-blue-700'); // => "text-blue-500 hover:text-blue-700" cn(['text-blue-500', null, undefined, 'hover:text-blue-700']); // => "text-blue-500 hover:text-blue-700" cn('text-blue-500', { 'font-bold': true, 'italic': false }); // => "text-blue-500 font-bold"

Note: Both cn and cnBase are exported for backwards compatibility, but cn is the recommended import name in v3+.

Options

The options argument is an object with the following properties:

type TVOptions = {  extend?: TVReturnType | undefined;  base?: ClassValue;  slots?: Record<string, ClassValue>;  variants?: Record<string, Record<string, ClassValue>>;  defaultVariants?: Record<string, ClassValue>;  compoundVariants?: Array<Record<string, string> & ClassProp>;  compoundSlots?: Array<Record<string, string> & ClassProp>; };

extend

description: This property allows you to extend the base styles, slots, variants, defaultVariants and compoundVariants from another component.

type: TVReturnType | undefined

default: undefined

To learn more about Components composition, check out this page.

base

description: This property allows you to define the base styles for the component.

type: ClassValue

default: undefined

slots

description: This property allows you to define the slots for the component.

type: Record<string, ClassValue> | undefined

default: {}

To learn more about slots and how to use them, check out the Slots page.

variants

description: This property allows you to define the variants for the component.

type: Record<string, Record<string, ClassValue>> | undefined

default: {}

To learn more about variants and how to use them, check out the Variants page.

defaultVariants

description: This property allows you to define the default variants for the component.

type: Record<string, ClassValue> | undefined

default: {}

To learn more about default variants and how to use them, check out the Default Variants page.

compoundVariants

description: This property allows you to define the compound variants for the component.

type: Array<Record<string, string> & ClassProp> | undefined

default: []

To learn more about compound variants and how to use them, check out the Compound Variants page.

compoundSlots

description: This property allows you to define the compound slots for the component.

type: Array<Record<string, string> & ClassProp> | undefined

default: []

To learn more about compound slots and how to use them, check out the Compound Slots page.

Config (optional)

The config argument is an object with the following properties:

type TvConfig = {  twMerge?: boolean;  twMergeConfig?: TwMergeConfig; };

twMerge

description: Whether to merge the class names with tailwind-merge library. It's avoid to have duplicate tailwind classes. (Recommended) see more here (opens in a new tab)

type: boolean

default: true

twMergeConfig

description: The config object for tailwind-merge library. see more here (opens in a new tab)

type: TwMergeConfig

default: {}


Types

ClassValue

type ClassValue = string | string[] | null | undefined | ClassValue[];

ClassProp

type ClassProp<V extends unknown = ClassValue> =  | {  class: V;  className?: never;  }  | { class?: never; className: V }  | { class?: never; className?: never };

TVReturnType

type TVReturnType = {  base?: string;  extend?: TVReturnType;  slots?: Record<string, string>;  variants?: Record<string, string>;  variantKeys?: string[];  defaultVariants?: Record<string, string>;  compoundVariants?: Array<Record<string, string>>; };