Documentation
Utilities Reference
Helper functions exported by Angular AI Kit for common operations.
Overview
Available utility functions
cn()
Class name merging utility
formatDate()
Date formatting helper
truncateText()
Text truncation helper
generateId()
ID generation helper
debounce()
Function debouncing
copyToClipboard()
Clipboard helper
cn() - Class Name Utility
Combines clsx and tailwind-merge for dynamic class names
1// cn() - Class Name Utility2// Combines clsx and tailwind-merge for dynamic class names3 4import { cn } from '@angular-ai-kit/utils';5 6// Basic usage7cn('text-red-500', 'bg-blue-500')8// => 'text-red-500 bg-blue-500'9 10// Conditional classes11cn('base-class', {12 'active': isActive,13 'disabled': isDisabled,14})15// => 'base-class active' (if isActive is true)16 17// Merging conflicting Tailwind classes18cn('px-4 py-2', 'px-6')19// => 'py-2 px-6' (tailwind-merge handles conflicts)20 21// Multiple arguments22cn(23 'flex items-center',24 condition && 'justify-between',25 anotherCondition ? 'gap-4' : 'gap-2',26 customClasses27)28 29// In a computed signal30containerClasses = computed(() => {31 return cn(32 'rounded-lg border',33 {34 'border-primary': this.isSelected(),35 'border-border': !this.isSelected(),36 },37 this.customClasses()38 );39});Why use cn()?
- Handles conditional classes cleanly
- Merges conflicting Tailwind classes correctly
- Supports arrays, objects, and string arguments
- Type-safe with excellent DX
formatDate() - Date Formatting
Format dates with locale support and relative time
1// formatDate() - Date Formatting Utility2import { formatDate } from '@angular-ai-kit/utils';3 4// Format a date with default options5formatDate(new Date())6// => '12/25/2024, 10:30 AM'7 8// Custom format options9formatDate(new Date(), {10 dateStyle: 'long',11 timeStyle: 'short',12})13// => 'December 25, 2024 at 10:30 AM'14 15// Relative time16formatDate(new Date(), { relative: true })17// => 'just now', '5 minutes ago', 'yesterday', etc.18 19// With locale20formatDate(new Date(), {21 locale: 'de-DE',22 dateStyle: 'full',23})24// => 'Mittwoch, 25. Dezember 2024'formatTokenCount() - Token Count Formatting
Format token numbers for display
1// formatTokenCount() - Token Count Formatting2import { formatTokenCount } from '@angular-ai-kit/utils';3 4// Format token numbers5formatTokenCount(1234)6// => '1,234'7 8formatTokenCount(1234567)9// => '1.23M'10 11formatTokenCount(1234, { abbreviate: false })12// => '1,234'13 14// With unit15formatTokenCount(5000, { showUnit: true })16// => '5,000 tokens'truncateText() - Text Truncation
Truncate text with various options
1// truncateText() - Text Truncation Utility2import { truncateText } from '@angular-ai-kit/utils';3 4// Basic truncation5truncateText('This is a long message that should be truncated', 20)6// => 'This is a long me...'7 8// Custom ellipsis9truncateText('Long text here', 10, { ellipsis: '…' })10// => 'Long text…'11 12// Word-aware truncation13truncateText('This is a long message', 15, { wordBoundary: true })14// => 'This is a...'15 16// Middle truncation (for file paths, IDs)17truncateText('very-long-file-name.component.ts', 20, { position: 'middle' })18// => 'very-lon...onent.ts'generateId() - ID Generation
Generate unique identifiers
1// generateId() - ID Generation Utility2import { generateId, generateUUID } from '@angular-ai-kit/utils';3 4// Generate a short ID (default 8 chars)5generateId()6// => 'a1b2c3d4'7 8// Custom length9generateId(12)10// => 'a1b2c3d4e5f6'11 12// With prefix13generateId(8, 'msg_')14// => 'msg_a1b2c3d4'15 16// Full UUID17generateUUID()18// => '550e8400-e29b-41d4-a716-446655440000'debounce() - Function Debouncing
Delay function execution until after wait time
1// debounce() - Debounce Function Utility2import { debounce } from '@angular-ai-kit/utils';3 4// Create a debounced function5const debouncedSearch = debounce((query: string) => {6 // This will only execute after 300ms of no calls7 console.log('Searching:', query);8}, 300);9 10// Usage in component11@Component({12 template: `13 <input (input)="onSearchInput($event)" />14 `,15})16export class SearchComponent {17 private debouncedSearch = debounce(this.search.bind(this), 300);18 19 onSearchInput(event: Event) {20 const value = (event.target as HTMLInputElement).value;21 this.debouncedSearch(value);22 }23 24 private search(query: string) {25 // Make API call26 }27}28 29// With immediate option (execute first call immediately)30const debouncedFn = debounce(fn, 300, { leading: true });throttle() - Function Throttling
Limit function execution rate
1// throttle() - Throttle Function Utility2import { throttle } from '@angular-ai-kit/utils';3 4// Create a throttled function5const throttledScroll = throttle(() => {6 // This will execute at most once every 100ms7 console.log('Scroll position:', window.scrollY);8}, 100);9 10// Usage11window.addEventListener('scroll', throttledScroll);12 13// With trailing option14const throttledFn = throttle(fn, 100, { trailing: true });copyToClipboard() - Clipboard
Copy text to clipboard
1// copyToClipboard() - Clipboard Utility2import { copyToClipboard } from '@angular-ai-kit/utils';3 4// Copy text to clipboard5await copyToClipboard('Text to copy');6 7// Returns success status8const success = await copyToClipboard('Text to copy');9if (success) {10 showNotification('Copied!');11}12 13// With fallback for older browsers14copyToClipboard('Text', {15 fallbackToExecCommand: true,16})parseMarkdownCodeBlocks() - Parse Code Blocks
Extract code blocks from markdown
1// parseMarkdownCodeBlocks() - Parse Code Blocks2import { parseMarkdownCodeBlocks } from '@angular-ai-kit/utils';3 4const markdown = `5Here is some code:6\`\`\`typescript7const x = 1;8\`\`\`9And more text.10`;11 12const blocks = parseMarkdownCodeBlocks(markdown);13// => [14// { type: 'text', content: 'Here is some code:\n' },15// { type: 'code', language: 'typescript', content: 'const x = 1;' },16// { type: 'text', content: '\nAnd more text.' },17// ]escapeHtml() - HTML Escaping
Safely escape HTML entities
1// escapeHtml() - HTML Escape Utility2import { escapeHtml, unescapeHtml } from '@angular-ai-kit/utils';3 4// Escape HTML entities5escapeHtml('<script>alert("xss")</script>')6// => '<script>alert("xss")</script>'7 8// Unescape HTML entities9unescapeHtml('<div>')10// => '<div>'isValidUrl() - URL Validation
Validate and parse URLs
1// isValidUrl() - URL Validation Utility2import { isValidUrl, parseUrl } from '@angular-ai-kit/utils';3 4// Check if string is a valid URL5isValidUrl('https://example.com')6// => true7 8isValidUrl('not a url')9// => false10 11// Parse URL safely12const parsed = parseUrl('https://example.com/path?query=1');13// => { protocol: 'https:', host: 'example.com', path: '/path', ... }Importing Utilities
How to import utilities in your project
import {
cn,
formatDate,
truncateText,
generateId,
debounce,
copyToClipboard,
} from '@angular-ai-kit/utils';