UNPKG

tailwind-variants

Version:

🦄 Tailwindcss first-class variant API

140 lines (131 loc) • 4.51 kB
import type {TVConfig, TWMConfig, TWMergeConfig} from "./config.d.ts"; import type {CnOptions, CnReturn, TV} from "./types.d.ts"; export type * from "./types.d.ts"; /** * Combines class names into a single string. Similar to `clsx` - simple concatenation without merging conflicting classes. * @param classes - Class names to combine. Accepts strings, numbers, arrays, objects, and nested structures. * @returns A space-separated string of class names, or `undefined` if no valid classes are provided * @example * ```ts * // Simple concatenation * cx('text-xl', 'font-bold') // => 'text-xl font-bold' * * // Handles arrays and objects * cx(['px-4', 'py-2'], { 'bg-blue-500': true, 'text-white': false }) // => 'px-4 py-2 bg-blue-500' * * // Ignores falsy values (except 0) * cx('text-xl', false && 'font-bold', null, undefined) // => 'text-xl' * ``` */ export declare const cx: <T extends CnOptions>(...classes: T) => CnReturn; /** * Combines class names and merges conflicting Tailwind CSS classes using `tailwind-merge`. * Uses default twMerge config. For custom config, use `cnMerge` instead. * @param classes - Class names to combine (strings, arrays, objects, etc.) * @returns A merged class string, or `undefined` if no valid classes are provided * @example * ```ts * // Simple usage with default twMerge config * cn('bg-red-500', 'bg-blue-500') // => 'bg-blue-500' * cn('px-2', 'px-4', 'py-2') // => 'px-4 py-2' * * // For custom twMerge config, use cnMerge instead * cnMerge('px-2', 'px-4')({twMerge: false}) // => 'px-2 px-4' * ``` */ export declare const cn: <T extends CnOptions>(...classes: T) => CnReturn; /** * Combines class names and merges conflicting Tailwind CSS classes using `tailwind-merge`. * Supports custom twMerge config via the second function call. * @param classes - Class names to combine (strings, arrays, objects, etc.) * @returns A function that accepts optional twMerge config and returns the merged class string * @example * ```ts * // With custom config * cnMerge('bg-red-500', 'bg-blue-500')({twMerge: true}) // => 'bg-blue-500' * cnMerge('px-2', 'px-4')({twMerge: false}) // => 'px-2 px-4' * * // With twMergeConfig * cnMerge('px-2', 'px-4')({twMergeConfig: {...}}) // => merged with custom config * ``` */ export declare const cnMerge: <T extends CnOptions>( ...classes: T ) => (config?: TWMConfig) => CnReturn; /** * Creates a variant-aware component function with Tailwind CSS classes. * Supports variants, slots, compound variants, and component composition. * @example * ```ts * const button = tv({ * base: "font-medium rounded-full", * variants: { * color: { * primary: "bg-blue-500 text-white", * secondary: "bg-purple-500 text-white", * }, * size: { * sm: "text-sm px-3 py-1", * md: "text-base px-4 py-2", * }, * }, * defaultVariants: { * color: "primary", * size: "md", * }, * }); * * button({ color: "secondary", size: "sm" }) // => 'font-medium rounded-full bg-purple-500 text-white text-sm px-3 py-1' * ``` * @see https://www.tailwind-variants.org/docs/getting-started */ export declare const tv: TV; /** * Creates a configured `tv` instance with custom default configuration. * Useful when you want to set default `twMerge` or `twMergeConfig` options for all components. * @param config - Configuration object with default settings for `twMerge` and `twMergeConfig` * @returns A configured `tv` function that uses the provided defaults * @example * ```ts * // Create a tv instance with twMerge disabled by default * const tv = createTV({ twMerge: false }); * * const button = tv({ * base: "px-4 py-2", * variants: { * color: { * primary: "bg-blue-500", * }, * }, * }); * * // Can still override config per component * const buttonWithMerge = tv( * { * base: "px-4 py-2", * variants: { color: { primary: "bg-blue-500" } }, * }, * { twMerge: true } * ); * ``` */ export declare function createTV(config: TVConfig): TV; /** * Default configuration object for tailwind-variants. * Can be modified to set global defaults for all components. * @example * ```ts * import { defaultConfig } from "tailwind-variants"; * * defaultConfig.twMergeConfig = { * extend: { * theme: { * spacing: ["medium", "large"], * }, * }, * }; * ``` */ export declare const defaultConfig: TVConfig; // types export type {TVConfig, TWMConfig, TWMergeConfig};