veza/packages/design-system/src/utils.ts
senke 8c0dd30685 feat(v0.13.2): consolidation design system — SUMI tokens, package, stories
TASK-DS-001: Migrated packages/design-system/ from legacy Kōdō to SUMI v2.0
  - New src/ structure with proper TypeScript exports
  - Component type registry documenting all 40+ UI components
  - cn() utility re-export
  - package.json with exports map for tokens subpaths

TASK-DS-002: Extracted design tokens as TypeScript objects
  - tokens/colors.ts: backgrounds, surfaces, text, pigments, semantic, glass, shadows, light theme
  - tokens/typography.ts: font families, sizes, weights, line heights, letter spacings
  - tokens/spacing.ts: spacing scale, radius, z-index, layout
  - tokens/motion.ts: durations and easing functions

TASK-DS-003: Added missing Storybook stories
  - EmptyState.stories.tsx (8 variants: default, icon, action, search, sizes, card, centered)
  - ButtonLoading.stories.tsx (6 variants: default, loading, text, destructive, outline, small)
  - ContentFadeIn.stories.tsx (2 variants: default, card)
  - DesignTokens.stories.tsx (visual token reference: pigments, backgrounds, text, typography, spacing, radius)
  - Total: 42 → 46 stories for UI components + design token showcase

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 09:45:09 +01:00

20 lines
555 B
TypeScript

/**
* SUMI Design System — Utility Functions
*
* Canonical implementation of cn() for merging Tailwind classes.
* Also available at apps/web/src/lib/utils.ts.
*/
import { type ClassValue, clsx } from 'clsx';
import { twMerge } from 'tailwind-merge';
/**
* Merge Tailwind CSS classes with deduplication.
* Combines clsx (conditional classes) + tailwind-merge (conflict resolution).
*
* @example
* cn('px-4 py-2', isActive && 'bg-primary', className)
*/
export function cn(...inputs: ClassValue[]): string {
return twMerge(clsx(inputs));
}