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// => '&lt;script&gt;alert(&quot;xss&quot;)&lt;/script&gt;'7 8// Unescape HTML entities9unescapeHtml('&lt;div&gt;')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';