JSPM

flixburst-tailwind

1.0.2
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • 0
  • Score
    100M100P100Q8151F
  • License MIT

A flexible and extensible package for tailwind utilities

Package Exports

  • flixburst-tailwind

Readme

flixburst-tailwind

A utility package for managing Tailwind CSS classes with TypeScript support, combining the power of clsx and tailwind-merge.

Features

  • 🎨 Seamless class name combination
  • 🔄 Automatic Tailwind class conflict resolution
  • 📦 Type-safe class name management
  • 🧩 Conditional class application
  • 🔍 Smart class deduplication
  • 📝 Comprehensive TypeScript support

Installation

# Using npm
npm install flixburst-tailwind

# Using yarn
yarn add flixburst-tailwind

# Using pnpm
pnpm add flixburst-tailwind

Peer Dependencies

This package requires the following peer dependencies:

# Using npm
npm install clsx tailwind-merge

# Using yarn
yarn add clsx tailwind-merge

# Using pnpm
pnpm add clsx tailwind-merge

Usage

CommonJS (CJS)

const { cn } = require('flixburst-tailwind');

// Basic usage
const classes = cn('text-red-500', 'text-lg');

// With conditional classes
const buttonClasses = cn(
    'px-4 py-2 rounded',
    isActive && 'bg-blue-500',
    isDisabled ? 'opacity-50' : 'hover:bg-blue-600',
);

ES Modules (ESM)

import { cn } from 'flixburst-tailwind';

// Basic usage
const classes = cn('text-red-500', 'text-lg');

// With conditional classes
const buttonClasses = cn(
    'px-4 py-2 rounded',
    isActive && 'bg-blue-500',
    isDisabled ? 'opacity-50' : 'hover:bg-blue-600',
);

API Reference

cn

Combines multiple class names and resolves Tailwind CSS conflicts.

function cn(...inputs: ClassValue[]): string;

Parameters:

  • inputs: Class names or class name arrays to combine

Returns:

  • A single string of combined and deduplicated class names

Framework Examples

React

import { cn } from 'flixburst-tailwind';

function Button({ isActive, isDisabled, children }) {
    return (
        <button
            className={cn(
                'px-4 py-2 rounded transition-colors',
                isActive && 'bg-blue-500 text-white',
                isDisabled ? 'opacity-50 cursor-not-allowed' : 'hover:bg-blue-600',
            )}
        >
            {children}
        </button>
    );
}

Vue 3

<script setup lang="ts">
import { cn } from 'flixburst-tailwind';

const props = defineProps<{
    isActive: boolean;
    isDisabled: boolean;
}>();
</script>

<template>
    <button
        :class="
            cn(
                'px-4 py-2 rounded transition-colors',
                isActive && 'bg-blue-500 text-white',
                isDisabled ? 'opacity-50 cursor-not-allowed' : 'hover:bg-blue-600',
            )
        "
    >
        <slot />
    </button>
</template>

Angular

import { Component, Input } from '@angular/core';
import { cn } from 'flixburst-tailwind';

@Component({
    selector: 'app-button',
    template: `
        <button [class]="buttonClasses">
            <ng-content></ng-content>
        </button>
    `,
})
export class ButtonComponent {
    @Input() isActive = false;
    @Input() isDisabled = false;

    get buttonClasses() {
        return cn(
            'px-4 py-2 rounded transition-colors',
            this.isActive && 'bg-blue-500 text-white',
            this.isDisabled ? 'opacity-50 cursor-not-allowed' : 'hover:bg-blue-600',
        );
    }
}

SolidJS

import { cn } from 'flixburst-tailwind';

function Button({ isActive, isDisabled, children }) {
    return (
        <button
            class={cn(
                'px-4 py-2 rounded transition-colors',
                isActive && 'bg-blue-500 text-white',
                isDisabled ? 'opacity-50 cursor-not-allowed' : 'hover:bg-blue-600',
            )}
        >
            {children}
        </button>
    );
}

Advanced Usage

Dynamic Classes

import { cn } from 'flixburst-tailwind';

// Dynamic class generation
const getSizeClasses = (size: 'sm' | 'md' | 'lg') => {
    return cn(
        'rounded',
        size === 'sm' && 'px-2 py-1 text-sm',
        size === 'md' && 'px-4 py-2 text-base',
        size === 'lg' && 'px-6 py-3 text-lg',
    );
};

// Using with arrays
const classes = cn(
    ['text-red-500', 'font-bold'],
    ['hover:text-red-600', 'focus:ring-2'],
    isActive && ['bg-blue-500', 'text-white'],
);

Component Variants

import { cn } from 'flixburst-tailwind';

type ButtonVariant = 'primary' | 'secondary' | 'danger';

const getVariantClasses = (variant: ButtonVariant) => {
    return cn(
        'px-4 py-2 rounded',
        variant === 'primary' && 'bg-blue-500 text-white hover:bg-blue-600',
        variant === 'secondary' && 'bg-gray-200 text-gray-800 hover:bg-gray-300',
        variant === 'danger' && 'bg-red-500 text-white hover:bg-red-600',
    );
};

License

MIT