feat(shared/lib): add cn utility (clsx + tailwind-merge)

This commit is contained in:
Ilia Mashkov
2026-03-06 23:10:52 +03:00
parent a57fea4590
commit 53b9a8bf7a
5 changed files with 62 additions and 0 deletions

16
src/shared/lib/cn.test.ts Normal file
View File

@@ -0,0 +1,16 @@
import { describe, expect, it } from 'vitest';
import { cn } from './cn';
describe('cn', () => {
it('merges class strings', () => {
expect(cn('foo', 'bar')).toBe('foo bar');
});
it('deduplicates conflicting Tailwind classes (last wins)', () => {
expect(cn('p-4', 'p-8')).toBe('p-8');
});
it('ignores falsy values', () => {
expect(cn('foo', false, undefined, null, 'bar')).toBe('foo bar');
});
});

7
src/shared/lib/cn.ts Normal file
View File

@@ -0,0 +1,7 @@
import { clsx, type ClassValue } from 'clsx';
import { twMerge } from 'tailwind-merge';
/** Merge Tailwind classes without conflicts. Later classes win on collision. */
export function cn(...inputs: ClassValue[]): string {
return twMerge(clsx(inputs));
}

View File

@@ -1 +1,2 @@
export * from './api';
export { cn } from './cn';