feat(shared/lib): add cn utility (clsx + tailwind-merge)
This commit is contained in:
16
src/shared/lib/cn.test.ts
Normal file
16
src/shared/lib/cn.test.ts
Normal 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
7
src/shared/lib/cn.ts
Normal 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));
|
||||
}
|
||||
@@ -1 +1,2 @@
|
||||
export * from './api';
|
||||
export { cn } from './cn';
|
||||
|
||||
Reference in New Issue
Block a user