{"version":3,"file":"angular-ai-kit-core.mjs","sources":["../../../../packages/angular-ai-kit/src/lib/spartan-ui/utils/hlm.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/avatar/fallback/hlm-avatar-fallback.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/avatar/hlm-avatar.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/avatar/image/hlm-avatar-image.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/avatar/index.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/icon/hlm-icon.token.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/icon/hlm-icon.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/icon/index.ts","../../../../packages/angular-ai-kit/src/lib/icons/ai-icons.ts","../../../../packages/angular-ai-kit/src/lib/components/ui/icon-button/icon-button.component.ts","../../../../packages/angular-ai-kit/src/lib/components/chat/message-actions/message-actions.component.ts","../../../../packages/angular-ai-kit/src/lib/components/chat/message-actions/message-actions.component.html","../../../../packages/angular-ai-kit/src/lib/components/chat/user-message/user-message.component.ts","../../../../packages/angular-ai-kit/src/lib/components/chat/user-message/user-message.component.html","../../../../packages/angular-ai-kit/src/lib/components/chat/user-message/index.ts","../../../../packages/angular-ai-kit/src/lib/services/markdown.service.ts","../../../../packages/angular-ai-kit/src/lib/components/display/markdown-renderer/markdown-renderer.component.ts","../../../../packages/angular-ai-kit/src/lib/components/display/markdown-renderer/markdown-renderer.component.html","../../../../packages/angular-ai-kit/src/lib/components/display/feedback-buttons/feedback-buttons.component.ts","../../../../packages/angular-ai-kit/src/lib/components/display/feedback-buttons/feedback-buttons.component.html","../../../../packages/angular-ai-kit/src/lib/components/display/response-actions/response-actions.component.ts","../../../../packages/angular-ai-kit/src/lib/components/display/response-actions/response-actions.component.html","../../../../packages/angular-ai-kit/src/lib/components/display/ai-response/ai-response.component.ts","../../../../packages/angular-ai-kit/src/lib/components/display/ai-response/ai-response.component.html","../../../../packages/angular-ai-kit/src/lib/components/chat/message-list/message-list.component.ts","../../../../packages/angular-ai-kit/src/lib/components/chat/message-list/message-list.component.html","../../../../packages/angular-ai-kit/src/lib/components/chat/message-list/index.ts","../../../../packages/angular-ai-kit/src/lib/components/chat/chat-container/chat-container.component.ts","../../../../packages/angular-ai-kit/src/lib/components/chat/chat-container/chat-container.component.html","../../../../packages/angular-ai-kit/src/lib/components/chat/chat-container/index.ts","../../../../packages/angular-ai-kit/src/lib/components/chat/prompt-suggestions/prompt-suggestions.component.ts","../../../../packages/angular-ai-kit/src/lib/components/chat/prompt-suggestions/prompt-suggestions.component.html","../../../../packages/angular-ai-kit/src/lib/components/chat/conversation-list/conversation-list.component.ts","../../../../packages/angular-ai-kit/src/lib/components/chat/conversation-list/conversation-list.component.html","../../../../packages/angular-ai-kit/src/lib/components/chat/index.ts","../../../../packages/angular-ai-kit/src/lib/components/display/code-block/code-block.component.ts","../../../../packages/angular-ai-kit/src/lib/components/display/code-block/code-block.component.html","../../../../packages/angular-ai-kit/src/lib/components/display/streaming-text/streaming-text.component.ts","../../../../packages/angular-ai-kit/src/lib/components/display/streaming-text/streaming-text.component.html","../../../../packages/angular-ai-kit/src/lib/components/display/typing-indicator/typing-indicator.component.ts","../../../../packages/angular-ai-kit/src/lib/components/display/typing-indicator/typing-indicator.component.html","../../../../packages/angular-ai-kit/src/lib/components/input/attachment-card/attachment-card.component.ts","../../../../packages/angular-ai-kit/src/lib/components/input/attachment-card/attachment-card.component.html","../../../../packages/angular-ai-kit/src/lib/spartan-ui/badge/hlm-badge.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/badge/index.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/button/hlm-button.token.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/button/hlm-button.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/button/index.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/command/hlm-command.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/command/hlm-command-dialog.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/command/hlm-command-dialog-close-button.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/command/hlm-command-empty.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/command/hlm-command-group.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/command/hlm-command-group-label.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/command/hlm-command-icon.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/command/hlm-command-item.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/command/hlm-command-list.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/command/hlm-command-search.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/command/hlm-command-search-input.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/command/hlm-command-separator.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/command/hlm-command-shortcut.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/command/index.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/dropdown-menu/hlm-dropdown-menu.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/dropdown-menu/hlm-dropdown-menu-checkbox.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/dropdown-menu/hlm-dropdown-menu-checkbox-indicator.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/dropdown-menu/hlm-dropdown-menu-group.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/dropdown-menu/hlm-dropdown-menu-item.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/dropdown-menu/hlm-dropdown-menu-item-sub-indicator.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/dropdown-menu/hlm-dropdown-menu-label.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/dropdown-menu/hlm-dropdown-menu-radio.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/dropdown-menu/hlm-dropdown-menu-radio-indicator.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/dropdown-menu/hlm-dropdown-menu-separator.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/dropdown-menu/hlm-dropdown-menu-shortcut.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/dropdown-menu/hlm-dropdown-menu-sub.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/dropdown-menu/hlm-dropdown-menu-token.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/dropdown-menu/hlm-dropdown-menu-trigger.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/dropdown-menu/index.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/input-group/hlm-input-group.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/input-group/hlm-input-group-addon.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/input-group/hlm-input-group-button.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/input/hlm-input.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/input/index.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/input-group/hlm-input-group-input.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/input-group/hlm-input-group-text.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/textarea/hlm-textarea.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/textarea/index.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/input-group/hlm-input-group-textarea.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/input-group/index.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/popover/hlm-popover.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/popover/hlm-popover-content.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/popover/hlm-popover-trigger.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/popover/index.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/switch/hlm-switch-thumb.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/switch/hlm-switch.ts","../../../../packages/angular-ai-kit/src/lib/spartan-ui/switch/index.ts","../../../../packages/angular-ai-kit/src/lib/components/input/chat-input/chat-input.component.ts","../../../../packages/angular-ai-kit/src/lib/components/input/chat-input/chat-input.component.html","../../../../packages/angular-ai-kit/src/lib/components/input/index.ts","../../../../packages/angular-ai-kit/src/lib/components/index.ts","../../../../packages/angular-ai-kit/src/lib/directives/copy-to-clipboard/copy-to-clipboard.directive.ts","../../../../packages/angular-ai-kit/src/lib/directives/copy-to-clipboard/index.ts","../../../../packages/angular-ai-kit/src/lib/directives/auto-resize/auto-resize.directive.ts","../../../../packages/angular-ai-kit/src/lib/directives/auto-resize/index.ts","../../../../packages/angular-ai-kit/src/lib/directives/click-outside/click-outside.directive.ts","../../../../packages/angular-ai-kit/src/lib/directives/click-outside/index.ts","../../../../packages/angular-ai-kit/src/lib/directives/focus-trap/focus-trap.directive.ts","../../../../packages/angular-ai-kit/src/lib/directives/focus-trap/index.ts","../../../../packages/angular-ai-kit/src/lib/directives/index.ts","../../../../packages/angular-ai-kit/src/lib/services/code-highlight.service.ts","../../../../packages/angular-ai-kit/src/lib/tokens/di-tokens.ts","../../../../packages/angular-ai-kit/src/lib/tokens/index.ts","../../../../packages/angular-ai-kit/src/lib/types/chat-message.types.ts","../../../../packages/angular-ai-kit/src/lib/types/streaming.types.ts","../../../../packages/angular-ai-kit/src/lib/types/model.types.ts","../../../../packages/angular-ai-kit/src/lib/types/markdown.types.ts","../../../../packages/angular-ai-kit/src/lib/types/index.ts","../../../../packages/angular-ai-kit/src/index.ts","../../../../packages/angular-ai-kit/src/angular-ai-kit-core.ts"],"sourcesContent":["import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n  DestroyRef,\n  ElementRef,\n  HostAttributeToken,\n  Injector,\n  PLATFORM_ID,\n  effect,\n  inject,\n  runInInjectionContext,\n} from '@angular/core';\n\nexport function hlm(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs));\n}\n\n// Global map to track class managers per element\nconst elementClassManagers = new WeakMap<HTMLElement, ElementClassManager>();\n\n// Global mutation observer for all elements\nlet globalObserver: MutationObserver | null = null;\nconst observedElements = new Set<HTMLElement>();\n\ninterface ElementClassManager {\n  element: HTMLElement;\n  sources: Map<number, { classes: Set<string>; order: number }>;\n  baseClasses: Set<string>;\n  isUpdating: boolean;\n  nextOrder: number;\n  hasInitialized: boolean;\n}\n\nlet sourceCounter = 0;\n\n/**\n * This function dynamically adds and removes classes for a given element without requiring\n * the a class binding (e.g. `[class]=\"...\"`) which may interfere with other class bindings.\n *\n * 1. This will merge the existing classes on the element with the new classes.\n * 2. It will also remove any classes that were previously added by this function but are no longer present in the new classes.\n * 3. Multiple calls to this function on the same element will be merged efficiently.\n */\nexport function classes(\n  computed: () => ClassValue[] | string,\n  options: ClassesOptions = {}\n) {\n  runInInjectionContext(options.injector ?? inject(Injector), () => {\n    const elementRef = options.elementRef ?? inject(ElementRef);\n    const platformId = inject(PLATFORM_ID);\n    const destroyRef = inject(DestroyRef);\n    const baseClasses = inject(new HostAttributeToken('class'), {\n      optional: true,\n    });\n\n    const element = elementRef.nativeElement;\n\n    // Create unique identifier for this source\n    const sourceId = sourceCounter++;\n\n    // Get or create the class manager for this element\n    let manager = elementClassManagers.get(element);\n\n    if (!manager) {\n      // Initialize base classes from variation (host attribute 'class')\n      const initialBaseClasses = new Set<string>();\n\n      if (baseClasses) {\n        toClassList(baseClasses).forEach((cls) => initialBaseClasses.add(cls));\n      }\n\n      manager = {\n        element,\n        sources: new Map(),\n        baseClasses: initialBaseClasses,\n        isUpdating: false,\n        nextOrder: 0,\n        hasInitialized: false,\n      };\n      elementClassManagers.set(element, manager);\n\n      // Setup global observer if needed and register this element\n      setupGlobalObserver(platformId);\n      observedElements.add(element);\n    }\n\n    // Assign order once at registration time\n    const sourceOrder = manager.nextOrder++;\n\n    function updateClasses(): void {\n      // Get the new classes from the computed function\n      const newClasses = toClassList(computed());\n\n      // Update this source's classes, keeping the original order\n      manager!.sources.set(sourceId, {\n        classes: new Set(newClasses),\n        order: sourceOrder,\n      });\n\n      // Update the element\n      updateElement(manager!);\n    }\n\n    // Register cleanup with DestroyRef\n    destroyRef.onDestroy(() => {\n      // Remove this source from the manager\n      manager!.sources.delete(sourceId);\n\n      // If no more sources, clean up the manager\n      if (manager!.sources.size === 0) {\n        cleanupManager(element);\n      } else {\n        // Update element without this source's classes\n        updateElement(manager!);\n      }\n    });\n\n    /**\n     * We need this effect to track changes to the computed classes. Ideally, we would use\n     * afterRenderEffect here, but that doesn't run in SSR contexts, so we use a standard\n     * effect which works in both browser and SSR.\n     */\n    effect(updateClasses);\n  });\n}\n\n// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types\nfunction setupGlobalObserver(platformId: Object): void {\n  if (isPlatformBrowser(platformId) && !globalObserver) {\n    // Create single global observer that watches the entire document\n    globalObserver = new MutationObserver((mutations) => {\n      for (const mutation of mutations) {\n        if (\n          mutation.type === 'attributes' &&\n          mutation.attributeName === 'class'\n        ) {\n          const element = mutation.target as HTMLElement;\n          const manager = elementClassManagers.get(element);\n\n          // Only process elements we're managing\n          if (manager && observedElements.has(element)) {\n            if (manager.isUpdating) continue; // Ignore changes we're making\n\n            // Update base classes to include any externally added classes\n            const currentClasses = toClassList(element.className);\n            const allSourceClasses = new Set<string>();\n\n            // Collect all classes from all sources\n            for (const source of manager.sources.values()) {\n              for (const className of source.classes) {\n                allSourceClasses.add(className);\n              }\n            }\n\n            // Any classes not from sources become new base classes\n            manager.baseClasses.clear();\n\n            for (const className of currentClasses) {\n              if (!allSourceClasses.has(className)) {\n                manager.baseClasses.add(className);\n              }\n            }\n\n            updateElement(manager);\n          }\n        }\n      }\n    });\n\n    // Start observing the entire document for class attribute changes\n    globalObserver.observe(document, {\n      attributes: true,\n      attributeFilter: ['class'],\n      subtree: true, // Watch all descendants\n    });\n  }\n}\n\nfunction updateElement(manager: ElementClassManager): void {\n  if (manager.isUpdating) return; // Prevent recursive updates\n\n  manager.isUpdating = true;\n\n  // Handle initialization: capture base classes after first source registration\n  if (!manager.hasInitialized && manager.sources.size > 0) {\n    // Get current classes on element (may include SSR classes)\n    const currentClasses = toClassList(manager.element.className);\n\n    // Get all classes that will be applied by sources\n    const allSourceClasses = new Set<string>();\n    for (const source of manager.sources.values()) {\n      source.classes.forEach((className) => allSourceClasses.add(className));\n    }\n\n    // Only consider classes as \"base\" if they're not produced by any source\n    // This prevents SSR-rendered classes from being preserved as base classes\n    currentClasses.forEach((className) => {\n      if (!allSourceClasses.has(className)) {\n        manager.baseClasses.add(className);\n      }\n    });\n\n    manager.hasInitialized = true;\n  }\n\n  // Get classes from all sources, sorted by registration order (later takes precedence)\n  const sortedSources = Array.from(manager.sources.entries()).sort(\n    ([, a], [, b]) => a.order - b.order\n  );\n\n  const allSourceClasses: string[] = [];\n  for (const [, source] of sortedSources) {\n    allSourceClasses.push(...source.classes);\n  }\n\n  // Combine base classes with all source classes, ensuring base classes take precedence\n  const classesToApply =\n    allSourceClasses.length > 0 || manager.baseClasses.size > 0\n      ? twMerge(clsx([...allSourceClasses, ...manager.baseClasses]))\n      : '';\n\n  // Apply the classes to the element\n  if (manager.element.className !== classesToApply) {\n    manager.element.className = classesToApply;\n  }\n\n  manager.isUpdating = false;\n}\n\nfunction cleanupManager(element: HTMLElement): void {\n  // Remove from global tracking\n  observedElements.delete(element);\n  elementClassManagers.delete(element);\n\n  // If no more elements being tracked, cleanup global observer\n  if (observedElements.size === 0 && globalObserver) {\n    globalObserver.disconnect();\n    globalObserver = null;\n  }\n}\n\ninterface ClassesOptions {\n  elementRef?: ElementRef<HTMLElement>;\n  injector?: Injector;\n}\n\n// Cache for parsed class lists to avoid repeated string operations\nconst classListCache = new Map<string, string[]>();\n\nfunction toClassList(className: string | ClassValue[]): string[] {\n  // For simple string inputs, use cache to avoid repeated parsing\n  if (typeof className === 'string' && classListCache.has(className)) {\n    return classListCache.get(className)!;\n  }\n\n  const result = clsx(className)\n    .split(' ')\n    .filter((c) => c.length > 0);\n\n  // Cache string results, but limit cache size to prevent memory growth\n  if (typeof className === 'string' && classListCache.size < 1000) {\n    classListCache.set(className, result);\n  }\n\n  return result;\n}\n","import { Directive } from '@angular/core';\nimport { BrnAvatarFallback } from '@spartan-ng/brain/avatar';\nimport { classes } from '../../utils';\n\n@Directive({\n  selector: '[hlmAvatarFallback]',\n  exportAs: 'avatarFallback',\n  hostDirectives: [\n    {\n      directive: BrnAvatarFallback,\n    },\n  ],\n})\nexport class HlmAvatarFallback {\n  constructor() {\n    classes(\n      () => 'bg-muted flex size-full items-center justify-center rounded-full'\n    );\n  }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { BrnAvatar } from '@spartan-ng/brain/avatar';\nimport { classes } from '../utils';\n\n@Component({\n  selector: 'hlm-avatar',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    @if (_image()?.canShow()) {\n      <ng-content select=\"[hlmAvatarImage],[brnAvatarImage]\" />\n    } @else {\n      <ng-content select=\"[hlmAvatarFallback],[brnAvatarFallback]\" />\n    }\n  `,\n})\nexport class HlmAvatar extends BrnAvatar {\n  constructor() {\n    super();\n    classes(() => 'relative flex size-8 shrink-0 overflow-hidden rounded-full');\n  }\n}\n","import { Directive, inject } from '@angular/core';\nimport { BrnAvatarImage } from '@spartan-ng/brain/avatar';\nimport { classes } from '../../utils';\n\n@Directive({\n  selector: 'img[hlmAvatarImage]',\n  exportAs: 'avatarImage',\n  hostDirectives: [BrnAvatarImage],\n})\nexport class HlmAvatarImage {\n  public readonly canShow = inject(BrnAvatarImage).canShow;\n\n  constructor() {\n    classes(() => 'aspect-square size-full');\n  }\n}\n","import { HlmAvatarFallback } from './fallback';\nimport { HlmAvatar } from './hlm-avatar';\nimport { HlmAvatarImage } from './image';\n\nexport * from './fallback';\nexport * from './hlm-avatar';\nexport * from './image';\n\nexport const HlmAvatarImports = [\n  HlmAvatarFallback,\n  HlmAvatarImage,\n  HlmAvatar,\n] as const;\n","import { InjectionToken, type ValueProvider, inject } from '@angular/core';\nimport type { IconSize } from './hlm-icon';\n\nexport interface HlmIconConfig {\n  size: IconSize;\n}\n\nconst defaultConfig: HlmIconConfig = {\n  size: 'base',\n};\n\nconst HlmIconConfigToken = new InjectionToken<HlmIconConfig>('HlmIconConfig');\n\nexport function provideHlmIconConfig(\n  config: Partial<HlmIconConfig>\n): ValueProvider {\n  return {\n    provide: HlmIconConfigToken,\n    useValue: { ...defaultConfig, ...config },\n  };\n}\n\nexport function injectHlmIconConfig(): HlmIconConfig {\n  return inject(HlmIconConfigToken, { optional: true }) ?? defaultConfig;\n}\n","import { Directive, computed, input } from '@angular/core';\nimport { injectHlmIconConfig } from './hlm-icon.token';\n\nexport type IconSize =\n  | 'xs'\n  | 'sm'\n  | 'base'\n  | 'lg'\n  | 'xl'\n  | 'none'\n  | (Record<never, never> & string);\n\n@Directive({\n  selector: 'ng-icon[hlmIcon], ng-icon[hlm]',\n  host: {\n    '[style.--ng-icon__size]': '_computedSize()',\n  },\n})\nexport class HlmIcon {\n  private readonly _config = injectHlmIconConfig();\n  public readonly size = input<IconSize>(this._config.size);\n\n  protected readonly _computedSize = computed(() => {\n    const size = this.size();\n\n    switch (size) {\n      case 'xs':\n        return '12px';\n      case 'sm':\n        return '16px';\n      case 'base':\n        return '24px';\n      case 'lg':\n        return '32px';\n      case 'xl':\n        return '48px';\n      default: {\n        return size;\n      }\n    }\n  });\n}\n","import { NgIcon } from '@ng-icons/core';\nimport { HlmIcon } from './hlm-icon';\n\nexport * from './hlm-icon';\nexport * from './hlm-icon.token';\n\nexport const HlmIconImports = [HlmIcon, NgIcon] as const;\n","/**\n * AI Kit Icon Definitions\n *\n * Centralized icon registry using @ng-icons/lucide.\n * Import these icons in your component's viewProviders using provideIcons().\n *\n * @example\n * ```typescript\n * import { provideIcons } from '@ng-icons/core';\n * import { AI_ICONS } from '@angular-ai-kit/core';\n *\n * @Component({\n *   viewProviders: [provideIcons(AI_ICONS)],\n * })\n * export class MyComponent {}\n * ```\n */\nimport {\n  lucideBook,\n  lucideCheck,\n  lucideChevronRight,\n  lucideClock,\n  lucideCopy,\n  lucideGithub,\n  lucideMenu,\n  lucideMessageSquare,\n  lucidePencil,\n  lucidePlus,\n  lucideRefreshCw,\n  lucideSettings,\n  lucideSparkle,\n  lucideThumbsDown,\n  lucideThumbsUp,\n  lucideTrash2,\n  lucideUser,\n} from '@ng-icons/lucide';\n\n/**\n * All icons used in AI Kit components.\n * Use with provideIcons() in viewProviders.\n */\nexport const AI_ICONS = {\n  // Actions\n  lucideCopy,\n  lucideCheck,\n  lucideRefreshCw,\n  lucideTrash2,\n  lucidePlus,\n  lucidePencil,\n\n  // Feedback\n  lucideThumbsUp,\n  lucideThumbsDown,\n\n  // Avatars/Roles\n  lucideUser,\n  lucideSparkle,\n  lucideSettings,\n\n  // Navigation\n  lucideChevronRight,\n  lucideMenu,\n\n  // Chat\n  lucideMessageSquare,\n  lucideClock,\n\n  // Docs\n  lucideBook,\n  lucideGithub,\n};\n\n/**\n * Icon names as string literals for type-safe usage.\n */\nexport type AiIconName = keyof typeof AI_ICONS;\n\n/**\n * Message role icons mapping.\n */\nexport const ROLE_ICONS = {\n  user: 'lucideUser',\n  assistant: 'lucideSparkle',\n  system: 'lucideSettings',\n} as const;\n\n/**\n * Action icons mapping.\n */\nexport const ACTION_ICONS = {\n  copy: 'lucideCopy',\n  copied: 'lucideCheck',\n  edit: 'lucidePencil',\n  regenerate: 'lucideRefreshCw',\n  delete: 'lucideTrash2',\n  thumbsUp: 'lucideThumbsUp',\n  thumbsDown: 'lucideThumbsDown',\n  newChat: 'lucidePlus',\n} as const;\n","import { NgIcon, provideIcons } from '@ng-icons/core';\nimport { cn } from '@angular-ai-kit/utils';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ViewEncapsulation,\n  computed,\n  input,\n  output,\n} from '@angular/core';\nimport { AI_ICONS } from '../../../icons';\n\n/**\n * Size variants for the icon button\n */\nexport type IconButtonSize = 'sm' | 'md' | 'lg';\n\n/**\n * Variant styles for the icon button\n */\nexport type IconButtonVariant = 'ghost' | 'outline' | 'default';\n\n/**\n * Icon Button Component\n *\n * A reusable icon-only button with consistent styling across the library.\n * Used for action buttons like copy, edit, regenerate, thumbs up/down, etc.\n *\n * @example\n * ```html\n * <ai-icon-button\n *   icon=\"lucideCopy\"\n *   ariaLabel=\"Copy message\"\n *   (clicked)=\"handleCopy()\"\n * />\n * ```\n */\n@Component({\n  selector: 'ai-icon-button',\n  template: `\n    <button\n      type=\"button\"\n      [class]=\"buttonClasses()\"\n      [attr.aria-label]=\"ariaLabel()\"\n      [attr.aria-pressed]=\"ariaPressed()\"\n      [disabled]=\"disabled()\"\n      (click)=\"handleClick($event)\"\n    >\n      <ng-icon [name]=\"icon()\" [size]=\"iconSize()\" class=\"shrink-0\" />\n    </button>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [NgIcon],\n  viewProviders: [provideIcons(AI_ICONS)],\n  host: {\n    class: 'ai-icon-button-host contents',\n  },\n})\nexport class IconButtonComponent {\n  // ==========================================\n  // Inputs\n  // ==========================================\n\n  /** The icon name from lucide icons */\n  icon = input.required<string>();\n\n  /** Accessible label for screen readers */\n  ariaLabel = input.required<string>();\n\n  /** Size of the button */\n  size = input<IconButtonSize>('md');\n\n  /** Visual variant */\n  variant = input<IconButtonVariant>('ghost');\n\n  /** Whether the button is disabled */\n  disabled = input<boolean>(false);\n\n  /** For toggle buttons, whether it's pressed */\n  ariaPressed = input<boolean | undefined>(undefined);\n\n  /** Custom CSS classes */\n  customClasses = input<string>('');\n\n  // ==========================================\n  // Outputs\n  // ==========================================\n\n  /** Emitted when button is clicked */\n  clicked = output<MouseEvent>();\n\n  // ==========================================\n  // Computed Properties\n  // ==========================================\n\n  /** Icon size in pixels based on button size */\n  iconSize = computed(() => {\n    const sizeMap: Record<IconButtonSize, string> = {\n      sm: '12px', // xs\n      md: '16px', // sm\n      lg: '24px', // base\n    };\n    return sizeMap[this.size()];\n  });\n\n  /** Button classes */\n  buttonClasses = computed(() =>\n    cn(\n      // Base styles\n      'inline-flex items-center justify-center',\n      'rounded',\n      'cursor-pointer',\n      'transition-colors duration-150',\n      // Focus styles - subtle, no ring\n      'focus:outline-none focus-visible:outline-none',\n      // Size variants\n      {\n        'h-6 w-6': this.size() === 'sm',\n        'h-7 w-7': this.size() === 'md',\n        'h-8 w-8': this.size() === 'lg',\n      },\n      // Variant styles\n      {\n        // Ghost (default for action buttons)\n        'text-muted-foreground hover:bg-accent hover:text-foreground':\n          this.variant() === 'ghost',\n        // Outline\n        'border border-border text-muted-foreground hover:bg-accent hover:text-foreground':\n          this.variant() === 'outline',\n        // Default (filled)\n        'bg-primary text-primary-foreground hover:bg-primary/90':\n          this.variant() === 'default',\n      },\n      // Disabled state\n      {\n        'opacity-50 cursor-not-allowed pointer-events-none': this.disabled(),\n      },\n      // Custom classes\n      this.customClasses()\n    )\n  );\n\n  // ==========================================\n  // Methods\n  // ==========================================\n\n  /** Handle button click */\n  handleClick(event: MouseEvent): void {\n    if (!this.disabled()) {\n      this.clicked.emit(event);\n    }\n  }\n}\n","import { cn } from '@angular-ai-kit/utils';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  PLATFORM_ID,\n  ViewEncapsulation,\n  computed,\n  inject,\n  input,\n  output,\n  signal,\n} from '@angular/core';\nimport { IconButtonComponent } from '../../ui/icon-button';\n\n/**\n * Message Actions Component\n *\n * Action buttons for user messages with copy and edit functionality.\n * Designed to appear on hover/focus of the message.\n *\n * @example\n * ```html\n * <ai-message-actions\n *   [content]=\"messageContent\"\n *   [isVisible]=\"isHovered || isFocused\"\n *   (copy)=\"handleCopy()\"\n *   (edit)=\"handleEdit()\"\n * />\n * ```\n */\n@Component({\n  selector: 'ai-message-actions',\n  templateUrl: './message-actions.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [IconButtonComponent],\n  host: {\n    class: 'ai-message-actions-host inline-flex',\n  },\n})\nexport class MessageActionsComponent {\n  private platformId = inject(PLATFORM_ID);\n\n  // ==========================================\n  // Inputs\n  // ==========================================\n\n  /** Content to copy (for copy button) */\n  content = input<string>('');\n\n  /** Whether to show the copy button */\n  showCopy = input<boolean>(true);\n\n  /** Whether to show the edit button */\n  showEdit = input<boolean>(true);\n\n  /** Whether actions are visible (controlled by parent) */\n  isVisible = input<boolean>(false);\n\n  /** Whether actions are always visible */\n  alwaysVisible = input<boolean>(false);\n\n  /** Custom CSS classes */\n  customClasses = input<string>('');\n\n  // ==========================================\n  // Outputs\n  // ==========================================\n\n  /** Emitted when copy button is clicked */\n  copy = output<void>();\n\n  /** Emitted when edit button is clicked */\n  edit = output<void>();\n\n  // ==========================================\n  // State\n  // ==========================================\n\n  /** Whether copy was just clicked */\n  justCopied = signal(false);\n\n  // ==========================================\n  // Computed Properties\n  // ==========================================\n\n  /** Whether actions should be shown */\n  actionsVisible = computed(() => this.alwaysVisible() || this.isVisible());\n\n  /** Icon for copy button */\n  copyIcon = computed(() => (this.justCopied() ? 'lucideCheck' : 'lucideCopy'));\n\n  /** Copy button classes */\n  copyButtonClasses = computed(() =>\n    cn({\n      'text-foreground': this.justCopied(),\n    })\n  );\n\n  /** Container classes */\n  containerClasses = computed(() =>\n    cn(\n      'ai-message-actions flex items-center gap-1',\n      'transition-opacity duration-150',\n      {\n        'opacity-100 visible': this.actionsVisible(),\n        'opacity-0 invisible': !this.actionsVisible(),\n      },\n      this.customClasses()\n    )\n  );\n\n  // ==========================================\n  // Event Handlers\n  // ==========================================\n\n  /** Handle copy button click */\n  handleCopy(): void {\n    const content = this.content();\n    this.copy.emit();\n\n    if (isPlatformBrowser(this.platformId) && navigator.clipboard && content) {\n      navigator.clipboard.writeText(content).then(() => {\n        this.justCopied.set(true);\n        setTimeout(() => this.justCopied.set(false), 2000);\n      });\n    }\n  }\n\n  /** Handle edit button click */\n  handleEdit(): void {\n    this.edit.emit();\n  }\n}\n","<div [class]=\"containerClasses()\" [attr.aria-hidden]=\"!actionsVisible()\">\n  <!-- Copy Button -->\n  @if (showCopy()) {\n    <ai-icon-button\n      [icon]=\"copyIcon()\"\n      ariaLabel=\"Copy message\"\n      [customClasses]=\"copyButtonClasses()\"\n      (clicked)=\"handleCopy()\"\n    />\n  }\n\n  <!-- Edit Button -->\n  @if (showEdit()) {\n    <ai-icon-button\n      icon=\"lucidePencil\"\n      ariaLabel=\"Edit message\"\n      (clicked)=\"handleEdit()\"\n    />\n  }\n</div>\n","import { NgIcon, provideIcons } from '@ng-icons/core';\nimport { lucideUser } from '@ng-icons/lucide';\nimport { cn } from '@angular-ai-kit/utils';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  ViewEncapsulation,\n  computed,\n  input,\n  output,\n  signal,\n  viewChild,\n} from '@angular/core';\nimport { HlmAvatar, HlmAvatarFallback } from '../../../spartan-ui/avatar';\nimport { HlmIcon } from '../../../spartan-ui/icon';\nimport { UserMessage } from '../../../types';\nimport { MessageActionsComponent } from '../message-actions';\nimport { EditEvent } from './user-message.types';\n\n/**\n * User Message Component\n *\n * Displays user chat messages with a compact card style, hover actions,\n * inline editing, and text truncation with \"show more\" functionality.\n * Uses MessageActions sub-component for copy/edit buttons.\n *\n * Features:\n * - Compact card (not full-width), right-aligned\n * - Optional avatar (hidden by default, controlled via showAvatar)\n * - Copy and Edit buttons via MessageActions on hover\n * - Inline editing with Save/Cancel\n * - Truncation with \"Show more/less\" for long messages\n *\n * @example\n * ```html\n * <ai-user-message\n *   [message]=\"userMessage\"\n *   [showAvatar]=\"true\"\n *   (copy)=\"handleCopy($event)\"\n *   (edit)=\"handleEdit($event)\"\n * />\n * ```\n */\n@Component({\n  selector: 'ai-user-message',\n  templateUrl: './user-message.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    MessageActionsComponent,\n    HlmAvatar,\n    HlmAvatarFallback,\n    HlmIcon,\n    NgIcon,\n  ],\n  viewProviders: [provideIcons({ lucideUser })],\n  host: {\n    class: 'ai-user-message-host block',\n    '(mouseenter)': 'handleMouseEnter()',\n    '(mouseleave)': 'handleMouseLeave()',\n    '(focusin)': 'handleFocusIn()',\n    '(focusout)': 'handleFocusOut()',\n  },\n})\nexport class UserMessageComponent {\n  // View children\n  private editTextarea =\n    viewChild<ElementRef<HTMLTextAreaElement>>('editTextarea');\n\n  // ==========================================\n  // Inputs\n  // ==========================================\n\n  /** The user message to display */\n  message = input.required<UserMessage>();\n\n  /** Maximum characters before truncation */\n  maxChars = input<number>(200);\n\n  /** Whether to show the copy button */\n  showCopy = input<boolean>(true);\n\n  /** Whether to show the edit button */\n  showEdit = input<boolean>(true);\n\n  /** Whether to show an avatar */\n  showAvatar = input<boolean>(false);\n\n  /** Custom CSS classes */\n  customClasses = input<string>('');\n\n  // ==========================================\n  // Outputs\n  // ==========================================\n\n  /** Emitted when copy button is clicked with message content */\n  copy = output<string>();\n\n  /** Emitted when message is edited and saved */\n  edit = output<EditEvent>();\n\n  // ==========================================\n  // Internal State\n  // ==========================================\n\n  private _isHovered = signal(false);\n  private _isFocused = signal(false);\n  private _isExpanded = signal(false);\n  private _isEditing = signal(false);\n  private _editContent = signal('');\n\n  // Readonly signals for template\n  isHovered = this._isHovered.asReadonly();\n  isFocused = this._isFocused.asReadonly();\n  isExpanded = this._isExpanded.asReadonly();\n  isEditing = this._isEditing.asReadonly();\n  editContent = this._editContent.asReadonly();\n\n  // ==========================================\n  // Computed Properties\n  // ==========================================\n\n  /** Whether actions should be visible (on hover or focus) */\n  actionsVisible = computed(() => this._isHovered() || this._isFocused());\n\n  /** Whether the message exceeds maxChars */\n  isLongMessage = computed(() => {\n    const content = this.message().content;\n    return content.length > this.maxChars();\n  });\n\n  /** Whether the message is short (for pill-like styling) */\n  isShortMessage = computed(() => {\n    const content = this.message().content;\n    return content.length < 50 && !content.includes('\\n');\n  });\n\n  /** The content to display (truncated or full) */\n  displayContent = computed(() => {\n    const content = this.message().content;\n    if (this._isExpanded() || !this.isLongMessage()) {\n      return content;\n    }\n    return content.substring(0, this.maxChars()) + '...';\n  });\n\n  /** ARIA label for screen readers */\n  ariaLabel = computed(() => {\n    const content = this.message().content;\n    const preview = content.substring(0, 100);\n    return `Your message: ${preview}${content.length > 100 ? '...' : ''}`;\n  });\n\n  /** Container classes (right-aligned wrapper) */\n  containerClasses = computed(() =>\n    cn(\n      'ai-user-message',\n      'group',\n      this.showAvatar() ? 'flex flex-row-reverse gap-3 items-start' : '',\n      this.customClasses()\n    )\n  );\n\n  /** Avatar classes */\n  avatarClasses = computed(() => cn('ai-user-message-avatar shrink-0'));\n\n  /** Card classes (the message bubble) */\n  cardClasses = computed(() =>\n    cn(\n      'ai-user-message-card',\n      'inline-block max-w-[80%]',\n      'px-4 py-3',\n      'bg-message-user-bg',\n      'text-foreground',\n      'shadow-sm',\n      'transition-all duration-200',\n      'rounded-xl'\n    )\n  );\n\n  /** Content classes */\n  contentClasses = computed(() =>\n    cn('ai-user-message-content', 'text-sm leading-relaxed whitespace-pre-wrap')\n  );\n\n  /** Actions wrapper classes */\n  actionsWrapperClasses = computed(() => cn('mt-1.5'));\n\n  /** Textarea classes for edit mode */\n  textareaClasses = computed(() =>\n    cn(\n      'w-full',\n      'bg-transparent',\n      'border-none',\n      'focus:outline-none focus:ring-0',\n      'resize-none',\n      'text-sm leading-relaxed'\n    )\n  );\n\n  // ==========================================\n  // Methods\n  // ==========================================\n\n  /** Toggle expanded/collapsed state */\n  toggleExpand(): void {\n    this._isExpanded.update((v) => !v);\n  }\n\n  /** Handle copy from MessageActions */\n  handleCopy(): void {\n    this.copy.emit(this.message().content);\n  }\n\n  /** Start editing mode */\n  startEdit(): void {\n    this._editContent.set(this.message().content);\n    this._isEditing.set(true);\n    // Focus textarea after render\n    setTimeout(() => {\n      const textarea = this.editTextarea()?.nativeElement;\n      if (textarea) {\n        textarea.focus();\n        textarea.setSelectionRange(\n          textarea.value.length,\n          textarea.value.length\n        );\n      }\n    }, 0);\n  }\n\n  /** Cancel editing */\n  cancelEdit(): void {\n    this._isEditing.set(false);\n    this._editContent.set('');\n  }\n\n  /** Save edited content */\n  saveEdit(): void {\n    const newContent = this._editContent().trim();\n    const originalContent = this.message().content;\n\n    if (newContent && newContent !== originalContent) {\n      this.edit.emit({\n        originalContent,\n        newContent,\n      });\n    }\n    this._isEditing.set(false);\n    this._editContent.set('');\n  }\n\n  /** Handle textarea input */\n  handleEditInput(event: Event): void {\n    const target = event.target as HTMLTextAreaElement;\n    this._editContent.set(target.value);\n  }\n\n  /** Handle keyboard events in edit mode */\n  handleEditKeydown(event: KeyboardEvent): void {\n    if (event.key === 'Escape') {\n      event.preventDefault();\n      this.cancelEdit();\n    } else if (event.key === 'Enter' && (event.metaKey || event.ctrlKey)) {\n      event.preventDefault();\n      this.saveEdit();\n    }\n  }\n\n  /** Handle mouse enter */\n  handleMouseEnter(): void {\n    this._isHovered.set(true);\n  }\n\n  /** Handle mouse leave */\n  handleMouseLeave(): void {\n    this._isHovered.set(false);\n  }\n\n  /** Handle focus in */\n  handleFocusIn(): void {\n    this._isFocused.set(true);\n  }\n\n  /** Handle focus out */\n  handleFocusOut(): void {\n    this._isFocused.set(false);\n  }\n}\n","<article\n  [class]=\"containerClasses()\"\n  role=\"article\"\n  [attr.aria-label]=\"ariaLabel()\"\n>\n  <!-- Avatar -->\n  @if (showAvatar()) {\n    <div [class]=\"avatarClasses()\">\n      <hlm-avatar>\n        <span hlmAvatarFallback class=\"bg-muted text-muted-foreground\">\n          <ng-icon hlm name=\"lucideUser\" size=\"sm\" />\n        </span>\n      </hlm-avatar>\n    </div>\n  }\n\n  <!-- Content Wrapper -->\n  <div class=\"text-right\">\n    <!-- Message Card -->\n    <div [class]=\"cardClasses()\" class=\"text-left\">\n      @if (isEditing()) {\n        <!-- Edit Mode -->\n        <textarea\n          #editTextarea\n          id=\"ai-user-message-edit\"\n          name=\"ai-user-message-edit\"\n          [class]=\"textareaClasses()\"\n          [value]=\"editContent()\"\n          (input)=\"handleEditInput($event)\"\n          (keydown)=\"handleEditKeydown($event)\"\n          rows=\"3\"\n          aria-label=\"Edit message\"\n        ></textarea>\n\n        <!-- Edit Actions -->\n        <div class=\"mt-2 flex justify-end gap-2\">\n          <button\n            type=\"button\"\n            class=\"text-muted-foreground hover:bg-accent hover:text-foreground cursor-pointer rounded px-3 py-1 text-sm transition-colors\"\n            (click)=\"cancelEdit()\"\n          >\n            Cancel\n          </button>\n          <button\n            type=\"button\"\n            class=\"bg-primary text-primary-foreground hover:bg-primary/90 cursor-pointer rounded px-3 py-1 text-sm transition-colors\"\n            (click)=\"saveEdit()\"\n          >\n            Save\n          </button>\n        </div>\n      } @else {\n        <!-- Display Mode -->\n        <p [class]=\"contentClasses()\">{{ displayContent() }}</p>\n\n        <!-- Show More / Show Less -->\n        @if (isLongMessage()) {\n          <button\n            type=\"button\"\n            class=\"text-muted-foreground mt-1 block cursor-pointer text-xs hover:underline\"\n            (click)=\"toggleExpand()\"\n          >\n            {{ isExpanded() ? 'Show less' : 'Show more' }}\n          </button>\n        }\n      }\n    </div>\n\n    <!-- Action Buttons via MessageActions -->\n    @if (!isEditing()) {\n      <div [class]=\"actionsWrapperClasses()\">\n        <ai-message-actions\n          [content]=\"message().content\"\n          [showCopy]=\"showCopy()\"\n          [showEdit]=\"showEdit()\"\n          [isVisible]=\"actionsVisible()\"\n          (copy)=\"handleCopy()\"\n          (edit)=\"startEdit()\"\n        />\n      </div>\n    }\n  </div>\n</article>\n","/**\n * User Message Component barrel export\n */\nexport { UserMessageComponent } from './user-message.component';\nexport type { EditEvent } from './user-message.types';\n","import type { DOMPurify as DOMPurifyType } from 'dompurify';\nimport hljs from 'highlight.js';\nimport { Marked, Renderer } from 'marked';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Injectable, PLATFORM_ID, inject } from '@angular/core';\n\n// SVG icon for copy button\nconst COPY_ICON = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path></svg>`;\n\n/**\n * Service for parsing markdown content with syntax highlighting.\n *\n * Uses marked for markdown parsing, highlight.js for code syntax highlighting,\n * and DOMPurify for HTML sanitization (browser only).\n *\n * Features:\n * - Professional code blocks with header bar, language label, and copy button\n * - GitHub Dark syntax highlighting theme\n * - Full GFM (GitHub Flavored Markdown) support\n *\n * @example\n * ```typescript\n * const html = this.markdownService.parse('# Hello **World**');\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class MarkdownService {\n  private marked: Marked;\n  private platformId = inject(PLATFORM_ID);\n  private purify: DOMPurifyType | null = null;\n\n  constructor() {\n    // Create custom renderer for code blocks\n    const renderer = new Renderer();\n\n    // Custom code block renderer with header bar\n    renderer.code = ({ text, lang }: { text: string; lang?: string }) => {\n      const language = lang || 'plaintext';\n      const displayLang = this.getDisplayLanguage(language);\n\n      // Highlight the code\n      let highlighted: string;\n      try {\n        if (lang && hljs.getLanguage(lang)) {\n          highlighted = hljs.highlight(text, { language: lang }).value;\n        } else {\n          highlighted = hljs.highlightAuto(text).value;\n        }\n      } catch {\n        highlighted = this.escapeHtml(text);\n      }\n\n      // Encode the raw code for the copy button data attribute\n      const encodedCode = encodeURIComponent(text);\n\n      return `<div class=\"ai-code-block-wrapper\">\n        <div class=\"ai-code-block-header\">\n          <span class=\"ai-code-block-language\">${displayLang}</span>\n          <button class=\"ai-code-block-copy\" data-code=\"${encodedCode}\" title=\"Copy code\">\n            ${COPY_ICON}\n          </button>\n        </div>\n        <pre><code class=\"hljs language-${language}\">${highlighted}</code></pre>\n      </div>`;\n    };\n\n    // Configure marked with custom renderer\n    this.marked = new Marked({\n      renderer,\n      gfm: true, // GitHub Flavored Markdown\n      breaks: true, // Convert \\n to <br>\n    });\n\n    // Load DOMPurify only in browser\n    if (isPlatformBrowser(this.platformId)) {\n      import('dompurify').then((module) => {\n        this.purify = module.default;\n      });\n    }\n  }\n\n  /** Get display name for a language. */\n  private getDisplayLanguage(lang: string): string {\n    const langMap: Record<string, string> = {\n      js: 'javascript',\n      ts: 'typescript',\n      py: 'python',\n      rb: 'ruby',\n      sh: 'bash',\n      yml: 'yaml',\n      md: 'markdown',\n      plaintext: 'text',\n    };\n    return langMap[lang] || lang;\n  }\n\n  /** Escape HTML special characters. */\n  private escapeHtml(text: string): string {\n    return text\n      .replace(/&/g, '&amp;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;')\n      .replace(/\"/g, '&quot;')\n      .replace(/'/g, '&#039;');\n  }\n\n  /**\n   * Sanitize HTML content using DOMPurify (SSR-safe).\n   * Falls back to returning HTML as-is during SSR or before DOMPurify loads.\n   */\n  private sanitize(html: string): string {\n    // Use DOMPurify if available (browser only)\n    if (this.purify) {\n      return this.purify.sanitize(html, {\n        USE_PROFILES: { html: true },\n        ADD_ATTR: ['class', 'data-code', 'title'], // Allow code block attributes\n        ADD_TAGS: ['hlm-icon', 'ng-icon'], // Allow Angular components\n      });\n    }\n    // SSR or before DOMPurify loads - return as-is\n    // Note: Consumer should sanitize if using SSR\n    return html;\n  }\n\n  /**\n   * Parse markdown string to sanitized HTML.\n   *\n   * @param markdown - The markdown string to parse\n   * @returns Sanitized HTML string\n   */\n  parse(markdown: string): string {\n    if (!markdown) return '';\n\n    try {\n      const html = this.marked.parse(markdown) as string;\n      return this.sanitize(html);\n    } catch {\n      // Fallback to sanitized raw input on parse error\n      return this.sanitize(markdown);\n    }\n  }\n\n  /**\n   * Parse markdown asynchronously for large content.\n   *\n   * @param markdown - The markdown string to parse\n   * @returns Promise resolving to sanitized HTML string\n   */\n  async parseAsync(markdown: string): Promise<string> {\n    if (!markdown) return '';\n\n    try {\n      const html = await this.marked.parse(markdown);\n      return this.sanitize(html as string);\n    } catch {\n      // Fallback to sanitized raw input on parse error\n      return this.sanitize(markdown);\n    }\n  }\n\n  /**\n   * Extract plain text from markdown (strips all formatting).\n   *\n   * @param markdown - The markdown string\n   * @returns Plain text without formatting\n   */\n  toPlainText(markdown: string): string {\n    if (!markdown) return '';\n\n    // Remove code blocks\n    let text = markdown.replace(/```[\\s\\S]*?```/g, '');\n    // Remove inline code\n    text = text.replace(/`[^`]+`/g, '');\n    // Remove links but keep text\n    text = text.replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, '$1');\n    // Remove images\n    text = text.replace(/!\\[([^\\]]*)\\]\\([^)]+\\)/g, '');\n    // Remove headers\n    text = text.replace(/^#{1,6}\\s+/gm, '');\n    // Remove bold/italic\n    text = text.replace(/[*_]{1,3}([^*_]+)[*_]{1,3}/g, '$1');\n    // Remove blockquotes\n    text = text.replace(/^>\\s+/gm, '');\n    // Remove horizontal rules\n    text = text.replace(/^[-*_]{3,}$/gm, '');\n    // Collapse multiple newlines\n    text = text.replace(/\\n{3,}/g, '\\n\\n');\n\n    return text.trim();\n  }\n}\n","import { cn } from '@angular-ai-kit/utils';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  PLATFORM_ID,\n  ViewEncapsulation,\n  computed,\n  effect,\n  inject,\n  input,\n  output,\n  viewChild,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { MarkdownService } from '../../../services/markdown.service';\n\n/**\n * Markdown Renderer Component\n *\n * Renders markdown content with syntax highlighting for code blocks.\n * Wraps the MarkdownService and provides a clean component interface.\n *\n * Features:\n * - Full GFM (GitHub Flavored Markdown) support\n * - Code blocks with syntax highlighting\n * - Copy buttons on code blocks\n * - Sanitized HTML output\n *\n * @example\n * ```html\n * <ai-markdown-renderer\n *   [content]=\"markdownString\"\n *   (codeBlockCopy)=\"handleCopy($event)\"\n * />\n * ```\n */\n@Component({\n  selector: 'ai-markdown-renderer',\n  templateUrl: './markdown-renderer.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'ai-markdown-renderer block',\n    '[class]': 'hostClasses()',\n  },\n})\nexport class MarkdownRendererComponent implements AfterViewInit {\n  private platformId = inject(PLATFORM_ID);\n  private markdownService = inject(MarkdownService);\n  private sanitizer = inject(DomSanitizer);\n\n  // View children\n  private contentRef = viewChild<ElementRef<HTMLDivElement>>('contentArea');\n\n  // ==========================================\n  // Inputs\n  // ==========================================\n\n  /** The markdown content to render */\n  content = input.required<string>();\n\n  /** Custom CSS classes */\n  customClasses = input<string>('');\n\n  // ==========================================\n  // Outputs\n  // ==========================================\n\n  /** Emitted when a code block's copy button is clicked */\n  codeBlockCopy = output<string>();\n\n  // ==========================================\n  // Computed Properties\n  // ==========================================\n\n  /** Host element classes */\n  hostClasses = computed(() => cn('ai-markdown-content', this.customClasses()));\n\n  /**\n   * Rendered HTML from markdown.\n   *\n   * @security This uses `bypassSecurityTrustHtml` to allow interactive elements\n   * in rendered code blocks. This is safe when content comes from trusted sources.\n   */\n  renderedHtml = computed((): SafeHtml => {\n    const markdown = this.content();\n    if (!markdown) return '';\n\n    const html = this.markdownService.parse(markdown);\n    return this.sanitizer.bypassSecurityTrustHtml(html);\n  });\n\n  // ==========================================\n  // Lifecycle\n  // ==========================================\n\n  constructor() {\n    // Re-attach copy button handlers when content changes\n    effect(() => {\n      // Read content to track changes\n      this.content();\n\n      if (isPlatformBrowser(this.platformId)) {\n        // Use setTimeout to ensure DOM is updated\n        setTimeout(() => this.attachCopyHandlers(), 0);\n      }\n    });\n  }\n\n  ngAfterViewInit(): void {\n    this.attachCopyHandlers();\n  }\n\n  // ==========================================\n  // Private Methods\n  // ==========================================\n\n  /** Attach click handlers to code block copy buttons */\n  private attachCopyHandlers(): void {\n    if (!isPlatformBrowser(this.platformId)) return;\n\n    const contentEl = this.contentRef()?.nativeElement;\n    if (!contentEl) return;\n\n    // Find all copy buttons generated by the markdown renderer\n    const copyButtons = contentEl.querySelectorAll<HTMLButtonElement>(\n      '.ai-code-block-copy'\n    );\n\n    copyButtons.forEach((btn) => {\n      // Skip if already has a handler attached\n      if (btn.dataset['handlerAttached']) return;\n      btn.dataset['handlerAttached'] = 'true';\n\n      btn.addEventListener('click', () => {\n        const encodedCode = btn.dataset['code'];\n        if (encodedCode) {\n          const code = decodeURIComponent(encodedCode);\n\n          // Emit event\n          this.codeBlockCopy.emit(code);\n\n          // Copy to clipboard and show feedback\n          navigator.clipboard.writeText(code).then(() => {\n            const originalHtml = btn.innerHTML;\n            btn.innerHTML = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"/></svg>`;\n            btn.classList.add('copied');\n\n            setTimeout(() => {\n              btn.innerHTML = originalHtml;\n              btn.classList.remove('copied');\n            }, 2000);\n          });\n        }\n      });\n    });\n  }\n}\n","<div #contentArea class=\"ai-markdown-renderer-content\">\n  <span [innerHTML]=\"renderedHtml()\"></span>\n</div>\n","import { cn } from '@angular-ai-kit/utils';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ViewEncapsulation,\n  computed,\n  effect,\n  input,\n  output,\n  signal,\n} from '@angular/core';\nimport { IconButtonComponent } from '../../ui/icon-button';\n\n/**\n * Feedback value type\n */\nexport type FeedbackValue = 'up' | 'down' | null;\n\n/**\n * Feedback Buttons Component\n *\n * Thumbs up/down toggle buttons for AI response feedback.\n * Supports mutual exclusivity - selecting one deselects the other.\n *\n * @example\n * ```html\n * <ai-feedback-buttons\n *   [value]=\"feedbackValue()\"\n *   (valueChange)=\"handleFeedbackChange($event)\"\n * />\n * ```\n */\n@Component({\n  selector: 'ai-feedback-buttons',\n  templateUrl: './feedback-buttons.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [IconButtonComponent],\n  host: {\n    class: 'ai-feedback-buttons inline-flex items-center gap-1',\n    '[class]': 'hostClasses()',\n    role: 'group',\n    '[attr.aria-label]': '\"Feedback buttons\"',\n  },\n})\nexport class FeedbackButtonsComponent {\n  // ==========================================\n  // Inputs\n  // ==========================================\n\n  /**\n   * Current feedback value.\n   * - 'up': thumbs up selected\n   * - 'down': thumbs down selected\n   * - null: no selection\n   */\n  value = input<FeedbackValue>(null);\n\n  /** Whether the buttons are disabled */\n  disabled = input<boolean>(false);\n\n  /** Custom CSS classes */\n  customClasses = input<string>('');\n\n  // ==========================================\n  // Outputs\n  // ==========================================\n\n  /** Emitted when feedback value changes */\n  valueChange = output<FeedbackValue>();\n\n  /** Emitted specifically when thumbs up is clicked */\n  thumbsUp = output<void>();\n\n  /** Emitted specifically when thumbs down is clicked */\n  thumbsDown = output<void>();\n\n  // ==========================================\n  // State\n  // ==========================================\n\n  /** Internal state for immediate UI feedback */\n  private _internalValue = signal<FeedbackValue>(null);\n\n  /** Sync internal state when input value changes (for controlled mode) */\n  private _syncEffect = effect(() => {\n    const inputValue = this.value();\n    // Sync internal state to match input when parent controls the value\n    this._internalValue.set(inputValue);\n  });\n\n  // ==========================================\n  // Computed Properties\n  // ==========================================\n\n  /** Whether thumbs up is selected */\n  isThumbsUpSelected = computed(() => this._internalValue() === 'up');\n\n  /** Whether thumbs down is selected */\n  isThumbsDownSelected = computed(() => this._internalValue() === 'down');\n\n  /** Host element classes */\n  hostClasses = computed(() => cn(this.customClasses()));\n\n  /** Thumbs up button classes - theme aware */\n  thumbsUpClasses = computed(() =>\n    cn({\n      'text-foreground': this.isThumbsUpSelected(),\n    })\n  );\n\n  /** Thumbs down button classes - theme aware */\n  thumbsDownClasses = computed(() =>\n    cn({\n      'text-foreground': this.isThumbsDownSelected(),\n    })\n  );\n\n  /** Aria label for thumbs up */\n  thumbsUpLabel = computed(() =>\n    this.isThumbsUpSelected() ? 'Remove positive feedback' : 'Good response'\n  );\n\n  /** Aria label for thumbs down */\n  thumbsDownLabel = computed(() =>\n    this.isThumbsDownSelected() ? 'Remove negative feedback' : 'Bad response'\n  );\n\n  // ==========================================\n  // Methods\n  // ==========================================\n\n  /** Handle thumbs up click */\n  handleThumbsUp(): void {\n    if (this.disabled()) return;\n\n    const wasSelected = this.isThumbsUpSelected();\n    const newValue: FeedbackValue = wasSelected ? null : 'up';\n\n    this._internalValue.set(newValue);\n    this.valueChange.emit(newValue);\n\n    // Only emit thumbsUp event when selecting (not deselecting)\n    if (!wasSelected) {\n      this.thumbsUp.emit();\n    }\n  }\n\n  /** Handle thumbs down click */\n  handleThumbsDown(): void {\n    if (this.disabled()) return;\n\n    const wasSelected = this.isThumbsDownSelected();\n    const newValue: FeedbackValue = wasSelected ? null : 'down';\n\n    this._internalValue.set(newValue);\n    this.valueChange.emit(newValue);\n\n    // Only emit thumbsDown event when selecting (not deselecting)\n    if (!wasSelected) {\n      this.thumbsDown.emit();\n    }\n  }\n}\n","<!-- Thumbs Up Button -->\n<ai-icon-button\n  icon=\"lucideThumbsUp\"\n  [ariaLabel]=\"thumbsUpLabel()\"\n  [ariaPressed]=\"isThumbsUpSelected()\"\n  [disabled]=\"disabled()\"\n  [customClasses]=\"thumbsUpClasses()\"\n  (clicked)=\"handleThumbsUp()\"\n/>\n\n<!-- Thumbs Down Button -->\n<ai-icon-button\n  icon=\"lucideThumbsDown\"\n  [ariaLabel]=\"thumbsDownLabel()\"\n  [ariaPressed]=\"isThumbsDownSelected()\"\n  [disabled]=\"disabled()\"\n  [customClasses]=\"thumbsDownClasses()\"\n  (clicked)=\"handleThumbsDown()\"\n/>\n","import { cn } from '@angular-ai-kit/utils';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  PLATFORM_ID,\n  ViewEncapsulation,\n  computed,\n  inject,\n  input,\n  output,\n  signal,\n} from '@angular/core';\nimport { IconButtonComponent } from '../../ui/icon-button';\nimport { FeedbackButtonsComponent, FeedbackValue } from '../feedback-buttons';\n\n/**\n * Response Actions Component\n *\n * Action bar for AI responses with copy, regenerate, and feedback buttons.\n * Designed to be placed below AI response content.\n *\n * @example\n * ```html\n * <ai-response-actions\n *   [content]=\"responseText\"\n *   (copy)=\"handleCopy($event)\"\n *   (regenerate)=\"handleRegenerate()\"\n *   (thumbsUp)=\"handleThumbsUp()\"\n *   (thumbsDown)=\"handleThumbsDown()\"\n * />\n * ```\n */\n@Component({\n  selector: 'ai-response-actions',\n  templateUrl: './response-actions.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [IconButtonComponent, FeedbackButtonsComponent],\n  host: {\n    class: 'ai-response-actions-host block',\n  },\n})\nexport class ResponseActionsComponent {\n  private platformId = inject(PLATFORM_ID);\n\n  // ==========================================\n  // Inputs\n  // ==========================================\n\n  /** Content to copy (for copy button) */\n  content = input<string>('');\n\n  /** Whether to show the copy button */\n  showCopy = input<boolean>(true);\n\n  /** Whether to show the regenerate button */\n  showRegenerate = input<boolean>(true);\n\n  /** Whether to show feedback buttons */\n  showFeedback = input<boolean>(true);\n\n  /** Whether actions are always visible (vs hover/focus) */\n  alwaysVisible = input<boolean>(false);\n\n  /** Whether parent is hovered (for visibility control) */\n  isHovered = input<boolean>(false);\n\n  /** Whether parent is focused (for visibility control) */\n  isFocused = input<boolean>(false);\n\n  /** Custom CSS classes */\n  customClasses = input<string>('');\n\n  // ==========================================\n  // Outputs\n  // ==========================================\n\n  /** Emitted when copy button is clicked */\n  copy = output<string>();\n\n  /** Emitted when regenerate button is clicked */\n  regenerate = output<void>();\n\n  /** Emitted when thumbs up is clicked */\n  thumbsUp = output<void>();\n\n  /** Emitted when thumbs down is clicked */\n  thumbsDown = output<void>();\n\n  /** Emitted when feedback value changes */\n  feedbackChange = output<FeedbackValue>();\n\n  // ==========================================\n  // State\n  // ==========================================\n\n  /** Whether copy was just clicked */\n  justCopied = signal(false);\n\n  /** Current feedback value */\n  feedbackValue = signal<FeedbackValue>(null);\n\n  // ==========================================\n  // Computed Properties\n  // ==========================================\n\n  /** Whether actions should be visible */\n  actionsVisible = computed(\n    () => this.alwaysVisible() || this.isHovered() || this.isFocused()\n  );\n\n  /** Icon for copy button */\n  copyIcon = computed(() => (this.justCopied() ? 'lucideCheck' : 'lucideCopy'));\n\n  /** Copy button aria label */\n  copyLabel = computed(() => (this.justCopied() ? 'Copied!' : 'Copy response'));\n\n  /** Copy button classes */\n  copyButtonClasses = computed(() =>\n    cn({\n      'text-foreground': this.justCopied(),\n    })\n  );\n\n  /** Container classes */\n  containerClasses = computed(() =>\n    cn(\n      'ai-response-actions flex items-center gap-1',\n      'transition-opacity duration-200',\n      {\n        'opacity-100 visible': this.actionsVisible(),\n        'opacity-0 invisible': !this.actionsVisible(),\n      },\n      this.customClasses()\n    )\n  );\n\n  // ==========================================\n  // Event Handlers\n  // ==========================================\n\n  /** Handle copy button click */\n  handleCopy(): void {\n    const content = this.content();\n    this.copy.emit(content);\n\n    if (isPlatformBrowser(this.platformId) && navigator.clipboard) {\n      navigator.clipboard.writeText(content).then(() => {\n        this.justCopied.set(true);\n        setTimeout(() => this.justCopied.set(false), 2000);\n      });\n    }\n  }\n\n  /** Handle regenerate button click */\n  handleRegenerate(): void {\n    this.regenerate.emit();\n  }\n\n  /** Handle feedback value change */\n  handleFeedbackChange(value: FeedbackValue): void {\n    const previousValue = this.feedbackValue();\n    this.feedbackValue.set(value);\n    this.feedbackChange.emit(value);\n\n    // Emit specific events for thumbs up/down\n    if (value === 'up' && previousValue !== 'up') {\n      this.thumbsUp.emit();\n    } else if (value === 'down' && previousValue !== 'down') {\n      this.thumbsDown.emit();\n    }\n  }\n}\n","<div [class]=\"containerClasses()\">\n  <!-- Copy Button -->\n  @if (showCopy()) {\n    <ai-icon-button\n      [icon]=\"copyIcon()\"\n      [ariaLabel]=\"copyLabel()\"\n      [customClasses]=\"copyButtonClasses()\"\n      (clicked)=\"handleCopy()\"\n    />\n  }\n\n  <!-- Regenerate Button -->\n  @if (showRegenerate()) {\n    <ai-icon-button\n      icon=\"lucideRefreshCw\"\n      ariaLabel=\"Regenerate response\"\n      (clicked)=\"handleRegenerate()\"\n    />\n  }\n\n  <!-- Spacer -->\n  @if (showFeedback()) {\n    <div class=\"flex-1\"></div>\n  }\n\n  <!-- Feedback Buttons -->\n  @if (showFeedback()) {\n    <ai-feedback-buttons\n      [value]=\"feedbackValue()\"\n      (valueChange)=\"handleFeedbackChange($event)\"\n    />\n  }\n</div>\n","import { NgIcon, provideIcons } from '@ng-icons/core';\nimport { lucideSparkle } from '@ng-icons/lucide';\nimport { cn } from '@angular-ai-kit/utils';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ViewEncapsulation,\n  computed,\n  input,\n  output,\n  signal,\n} from '@angular/core';\nimport { HlmAvatar, HlmAvatarFallback } from '../../../spartan-ui/avatar';\nimport { HlmIcon } from '../../../spartan-ui/icon';\nimport { MarkdownRendererComponent } from '../markdown-renderer';\nimport { ResponseActionsComponent } from '../response-actions';\n\n/**\n * AI Response Component\n *\n * Displays AI response content with markdown rendering, syntax highlighting,\n * streaming cursor, and action buttons. Uses MarkdownRenderer and ResponseActions\n * sub-components for a clean, composable architecture.\n *\n * Features:\n * - Full markdown support (GFM) via MarkdownRenderer\n * - Code blocks with syntax highlighting\n * - Copy button on each code block\n * - Streaming cursor indicator\n * - Action buttons: copy, regenerate, thumbs up/down via ResponseActions\n *\n * @example\n * ```html\n * <ai-response\n *   [content]=\"response\"\n *   [isStreaming]=\"isLoading\"\n *   (copy)=\"handleCopy($event)\"\n *   (regenerate)=\"handleRegenerate()\"\n *   (thumbsUp)=\"handleThumbsUp()\"\n *   (thumbsDown)=\"handleThumbsDown()\"\n * />\n * ```\n */\n@Component({\n  selector: 'ai-response',\n  templateUrl: './ai-response.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    MarkdownRendererComponent,\n    ResponseActionsComponent,\n    HlmAvatar,\n    HlmAvatarFallback,\n    HlmIcon,\n    NgIcon,\n  ],\n  viewProviders: [provideIcons({ lucideSparkle })],\n  host: {\n    class: 'ai-response-host block',\n    '[attr.aria-live]': '\"polite\"',\n    '[attr.aria-busy]': 'isStreaming()',\n    '(mouseenter)': 'handleMouseEnter()',\n    '(mouseleave)': 'handleMouseLeave()',\n    '(focusin)': 'handleFocusIn()',\n    '(focusout)': 'handleFocusOut()',\n  },\n})\nexport class AiResponseComponent {\n  // ==========================================\n  // Inputs\n  // ==========================================\n\n  /** The markdown content to display */\n  content = input.required<string>();\n\n  /** Whether the content is currently streaming */\n  isStreaming = input<boolean>(false);\n\n  /** Whether to show action buttons */\n  showActions = input<boolean>(true);\n\n  /** Whether to show the streaming cursor */\n  showCursor = input<boolean>(true);\n\n  /** Whether to show the copy button */\n  showCopy = input<boolean>(true);\n\n  /** Whether to show the regenerate button */\n  showRegenerate = input<boolean>(true);\n\n  /** Whether to show feedback buttons */\n  showFeedback = input<boolean>(true);\n\n  /** Whether actions are always visible (vs hover/focus) */\n  actionsAlwaysVisible = input<boolean>(false);\n\n  /** Whether to show an avatar */\n  showAvatar = input<boolean>(false);\n\n  /** Custom CSS classes */\n  customClasses = input<string>('');\n\n  // ==========================================\n  // Outputs\n  // ==========================================\n\n  /** Emitted when copy button is clicked with full content */\n  copy = output<string>();\n\n  /** Emitted when a code block is copied */\n  codeBlockCopy = output<string>();\n\n  /** Emitted when regenerate button is clicked */\n  regenerate = output<void>();\n\n  /** Emitted when thumbs up is clicked */\n  thumbsUp = output<void>();\n\n  /** Emitted when thumbs down is clicked */\n  thumbsDown = output<void>();\n\n  // ==========================================\n  // State\n  // ==========================================\n\n  private _isHovered = signal(false);\n  isHovered = this._isHovered.asReadonly();\n\n  private _isFocused = signal(false);\n  isFocused = this._isFocused.asReadonly();\n\n  // ==========================================\n  // Computed Properties\n  // ==========================================\n\n  /** Container classes */\n  containerClasses = computed(() =>\n    cn(\n      'ai-response relative',\n      { 'flex gap-3': this.showAvatar() },\n      this.customClasses()\n    )\n  );\n\n  /** Avatar classes */\n  avatarClasses = computed(() => cn('ai-response-avatar shrink-0'));\n\n  /** Content wrapper classes */\n  contentClasses = computed(() =>\n    cn('ai-response-content text-sm leading-relaxed text-foreground')\n  );\n\n  /** Cursor classes */\n  cursorClasses = computed(() =>\n    cn('ai-response-cursor inline-block ml-0.5 text-foreground animate-pulse')\n  );\n\n  /** Actions wrapper classes */\n  actionsWrapperClasses = computed(() => cn('mt-2'));\n\n  // ==========================================\n  // Event Handlers\n  // ==========================================\n\n  /** Handle copy from ResponseActions */\n  handleCopy(content: string): void {\n    this.copy.emit(content);\n  }\n\n  /** Handle code block copy from MarkdownRenderer */\n  handleCodeBlockCopy(code: string): void {\n    this.codeBlockCopy.emit(code);\n  }\n\n  /** Handle regenerate from ResponseActions */\n  handleRegenerate(): void {\n    this.regenerate.emit();\n  }\n\n  /** Handle thumbs up from ResponseActions */\n  handleThumbsUp(): void {\n    this.thumbsUp.emit();\n  }\n\n  /** Handle thumbs down from ResponseActions */\n  handleThumbsDown(): void {\n    this.thumbsDown.emit();\n  }\n\n  /** Handle mouse enter */\n  handleMouseEnter(): void {\n    this._isHovered.set(true);\n  }\n\n  /** Handle mouse leave */\n  handleMouseLeave(): void {\n    this._isHovered.set(false);\n  }\n\n  /** Handle focus in */\n  handleFocusIn(): void {\n    this._isFocused.set(true);\n  }\n\n  /** Handle focus out */\n  handleFocusOut(): void {\n    this._isFocused.set(false);\n  }\n}\n","<div [class]=\"containerClasses()\">\n  <!-- Avatar -->\n  @if (showAvatar()) {\n    <div [class]=\"avatarClasses()\">\n      <hlm-avatar>\n        <span hlmAvatarFallback class=\"bg-primary text-primary-foreground\">\n          <ng-icon hlm name=\"lucideSparkle\" size=\"sm\" />\n        </span>\n      </hlm-avatar>\n    </div>\n  }\n\n  <!-- Content Wrapper -->\n  <div class=\"min-w-0 flex-1\">\n    <!-- Content Area with Markdown Rendering -->\n    <div [class]=\"contentClasses()\">\n      <ai-markdown-renderer\n        [content]=\"content()\"\n        (codeBlockCopy)=\"handleCodeBlockCopy($event)\"\n      />\n      @if (isStreaming() && showCursor()) {\n        <span [class]=\"cursorClasses()\">▊</span>\n      }\n    </div>\n\n    <!-- Action Bar -->\n    @if (showActions()) {\n      <div [class]=\"actionsWrapperClasses()\">\n        <ai-response-actions\n          [content]=\"content()\"\n          [showCopy]=\"showCopy()\"\n          [showRegenerate]=\"showRegenerate()\"\n          [showFeedback]=\"showFeedback()\"\n          [alwaysVisible]=\"actionsAlwaysVisible()\"\n          [isHovered]=\"isHovered()\"\n          [isFocused]=\"isFocused()\"\n          (copy)=\"handleCopy($event)\"\n          (regenerate)=\"handleRegenerate()\"\n          (thumbsUp)=\"handleThumbsUp()\"\n          (thumbsDown)=\"handleThumbsDown()\"\n        />\n      </div>\n    }\n  </div>\n</div>\n","import { cn } from '@angular-ai-kit/utils';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  PLATFORM_ID,\n  ViewEncapsulation,\n  computed,\n  effect,\n  inject,\n  input,\n  output,\n  viewChild,\n} from '@angular/core';\nimport { ChatMessage } from '../../../types';\nimport { AiResponseComponent } from '../../display/ai-response';\nimport { UserMessageComponent } from '../user-message';\nimport { EditEvent } from '../user-message/user-message.types';\n\n/**\n * MessageList Component\n *\n * Displays a scrollable list of chat messages with auto-scroll functionality.\n *\n * @example\n * ```html\n * <ai-message-list\n *   [messages]=\"messages\"\n *   [loading]=\"isLoading\"\n *   [autoScroll]=\"true\"\n *   (messageCopy)=\"handleCopy($event)\"\n *   (messageRegenerate)=\"handleRegenerate($event)\"\n * />\n * ```\n *\n * @usageNotes\n * - Automatically scrolls to bottom when new messages are added\n * - Shows typing indicator when loading is true\n * - Uses virtual scrolling for better performance with many messages\n * - Accessible with role=\"log\" for screen reader announcements\n */\n@Component({\n  selector: 'ai-message-list',\n  templateUrl: './message-list.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [UserMessageComponent, AiResponseComponent],\n  host: {\n    class: 'ai-message-list-host',\n  },\n})\nexport class MessageListComponent implements AfterViewInit {\n  // ==========================================\n  // Dependencies\n  // ==========================================\n\n  private platformId = inject(PLATFORM_ID);\n\n  // ==========================================\n  // Inputs\n  // ==========================================\n\n  /**\n   * Array of chat messages to display\n   */\n  messages = input.required<ChatMessage[]>();\n\n  /**\n   * Whether to show loading/typing indicator\n   * @default false\n   */\n  loading = input<boolean>(false);\n\n  /**\n   * Custom CSS classes to apply to the message list container\n   * @default ''\n   */\n  customClasses = input<string>('');\n\n  /**\n   * Whether to automatically scroll to bottom on new messages\n   * @default true\n   */\n  autoScroll = input<boolean>(true);\n\n  /**\n   * Whether to show avatars for each message\n   * @default true\n   */\n  showAvatars = input<boolean>(true);\n\n  /**\n   * Message to show when there are no messages\n   * @default 'No messages yet'\n   */\n  emptyMessage = input<string>('No messages yet');\n\n  /**\n   * Maximum height of the message list\n   * @default '100%'\n   */\n  maxHeight = input<string>('100%');\n\n  /**\n   * Whether to show the streaming cursor in AI responses\n   * @default false\n   */\n  showCursor = input<boolean>(false);\n\n  /**\n   * Whether action buttons are always visible (vs hover/focus only)\n   * @default false\n   */\n  actionsAlwaysVisible = input<boolean>(false);\n\n  // ==========================================\n  // Outputs\n  // ==========================================\n\n  /**\n   * Emitted when a message's copy button is clicked\n   */\n  messageCopy = output<{ content: string; message: ChatMessage }>();\n\n  /**\n   * Emitted when a message's regenerate button is clicked\n   */\n  messageRegenerate = output<ChatMessage>();\n\n  /**\n   * Emitted when a user message is edited\n   */\n  messageEdit = output<{ event: EditEvent; message: ChatMessage }>();\n\n  // ==========================================\n  // Template References\n  // ==========================================\n\n  /**\n   * Reference to the scroll container element\n   * @internal\n   */\n  scrollContainer = viewChild<ElementRef<HTMLDivElement>>('scrollContainer');\n\n  // ==========================================\n  // Computed Properties\n  // ==========================================\n\n  /**\n   * Container classes\n   */\n  containerClasses = computed(() => {\n    return cn(\n      'ai-message-list',\n      'flex flex-col gap-4 p-4',\n      'overflow-y-auto overflow-x-hidden',\n      'h-full', // Fill parent container height\n      'py-12',\n      this.customClasses()\n    );\n  });\n\n  /**\n   * Empty state classes\n   */\n  emptyStateClasses = computed(() => {\n    return cn(\n      'ai-message-list-empty',\n      'flex items-center justify-center',\n      'min-h-[200px]',\n      'text-center'\n    );\n  });\n\n  /**\n   * Typing indicator classes\n   */\n  typingIndicatorClasses = computed(() => {\n    return cn(\n      'ai-typing-indicator',\n      'p-4 rounded-lg',\n      'bg-muted',\n      'transition-all duration-200'\n    );\n  });\n\n  // ==========================================\n  // Lifecycle Hooks\n  // ==========================================\n\n  constructor() {\n    // Auto-scroll effect when messages change or loading state changes\n    effect(() => {\n      if (this.autoScroll()) {\n        // Access messages and loading to track changes\n        const messagesCount = this.messages().length;\n        const isLoading = this.loading();\n\n        // Trigger scroll when messages or loading changes\n        if (messagesCount > 0 || isLoading) {\n          this.scrollToBottom();\n        }\n      }\n    });\n  }\n\n  ngAfterViewInit(): void {\n    // Initial scroll to bottom\n    this.scrollToBottom();\n  }\n\n  // ==========================================\n  // Methods\n  // ==========================================\n\n  /**\n   * Scrolls the message list to the bottom\n   * @internal\n   */\n  private scrollToBottom(): void {\n    // Only run in browser environment\n    if (!isPlatformBrowser(this.platformId)) {\n      return;\n    }\n\n    // Use requestAnimationFrame for smooth scroll after render\n    requestAnimationFrame(() => {\n      const container = this.scrollContainer()?.nativeElement;\n      if (container) {\n        container.scrollTo({\n          top: container.scrollHeight,\n          behavior: 'smooth',\n        });\n      }\n    });\n  }\n\n  /**\n   * Handle message copy event\n   * @internal\n   */\n  handleMessageCopy(content: string, message: ChatMessage): void {\n    this.messageCopy.emit({ content, message });\n  }\n\n  /**\n   * Handle message regenerate event\n   * @internal\n   */\n  handleMessageRegenerate(message: ChatMessage): void {\n    this.messageRegenerate.emit(message);\n  }\n\n  /**\n   * Handle user message edit event\n   * @internal\n   */\n  handleMessageEdit(event: EditEvent, message: ChatMessage): void {\n    this.messageEdit.emit({ event, message });\n  }\n}\n","<div\n  [class]=\"containerClasses()\"\n  [style.max-height]=\"maxHeight()\"\n  role=\"log\"\n  aria-live=\"polite\"\n  aria-atomic=\"false\"\n  [attr.aria-label]=\"'Chat message list'\"\n  #scrollContainer\n>\n  <!-- Messages -->\n  @if (messages().length > 0) {\n    @for (message of messages(); track message.id) {\n      @if (message.role === 'assistant') {\n        <!-- AI Response with markdown rendering for assistant messages -->\n        <ai-response\n          [content]=\"message.content\"\n          [isStreaming]=\"message.status === 'streaming'\"\n          [showActions]=\"true\"\n          [showAvatar]=\"showAvatars()\"\n          [showCursor]=\"showCursor()\"\n          [actionsAlwaysVisible]=\"actionsAlwaysVisible()\"\n          (copy)=\"handleMessageCopy($event, message)\"\n          (regenerate)=\"handleMessageRegenerate(message)\"\n        />\n      } @else if (message.role === 'user') {\n        <!-- User message component -->\n        <ai-user-message\n          [message]=\"message\"\n          [showAvatar]=\"showAvatars()\"\n          (copy)=\"handleMessageCopy($event, message)\"\n          (edit)=\"handleMessageEdit($event, message)\"\n        />\n      }\n    }\n  } @else {\n    <!-- Empty state -->\n    <div [class]=\"emptyStateClasses()\">\n      <p class=\"text-muted-foreground\">\n        {{ emptyMessage() }}\n      </p>\n    </div>\n  }\n\n  <!-- Loading indicator - skeleton pattern -->\n  @if (loading()) {\n    <div [class]=\"typingIndicatorClasses()\" role=\"status\">\n      <!-- Skeleton avatar -->\n      <div\n        class=\"bg-muted-foreground/20 h-9 w-9 shrink-0 animate-pulse rounded-full\"\n      ></div>\n\n      <!-- Skeleton content lines -->\n      <div class=\"flex flex-1 flex-col gap-2\">\n        <div\n          class=\"bg-muted-foreground/20 h-4 w-3/4 animate-pulse rounded\"\n        ></div>\n        <div\n          class=\"bg-muted-foreground/20 h-4 w-1/2 animate-pulse rounded\"\n        ></div>\n      </div>\n\n      <span class=\"sr-only\">AI is thinking...</span>\n    </div>\n  }\n</div>\n","/**\n * MessageList component barrel export\n *\n * @module components/chat/message-list\n */\n\nexport { MessageListComponent } from './message-list.component';\n","import { cn } from '@angular-ai-kit/utils';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ViewEncapsulation,\n  computed,\n  input,\n  output,\n} from '@angular/core';\nimport { ChatMessage } from '../../../types';\nimport { MessageListComponent } from '../message-list';\n\n/**\n * ChatContainer Component\n *\n * Main container component for a chat interface. Integrates MessageList and provides\n * a complete chat layout with header and footer sections.\n *\n * @example\n * ```html\n * <ai-chat-container\n *   [messages]=\"messages\"\n *   [title]=\"'Chat with AI'\"\n *   [loading]=\"isLoading\"\n *   [showHeader]=\"true\"\n *   (messageCopy)=\"handleCopy($event)\"\n *   (messageRegenerate)=\"handleRegenerate($event)\"\n * />\n * ```\n *\n * @usageNotes\n * - Provides a full-height chat layout with flex design\n * - Optional header section with customizable title\n * - Integrates MessageListComponent for displaying messages\n * - Placeholder footer for input components (Phase 0.3)\n * - Responsive and mobile-friendly\n * - Dark mode support via CSS custom properties\n */\n@Component({\n  selector: 'ai-chat-container',\n  templateUrl: './chat-container.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [MessageListComponent],\n  host: {\n    class: 'ai-chat-container-host',\n  },\n})\nexport class ChatContainerComponent {\n  // ==========================================\n  // Inputs\n  // ==========================================\n\n  /**\n   * Array of chat messages to display\n   */\n  messages = input.required<ChatMessage[]>();\n\n  /**\n   * Title to display in the header\n   * @default 'Chat'\n   */\n  title = input<string>('');\n\n  /**\n   * Whether to show loading/typing indicator\n   * @default false\n   */\n  loading = input<boolean>(false);\n\n  /**\n   * Whether to show the header section\n   * @default true\n   */\n  showHeader = input<boolean>(true);\n\n  /**\n   * Whether to show the footer section\n   * @default true\n   */\n  showFooter = input<boolean>(true);\n\n  /**\n   * Whether to show header action buttons\n   * @default false\n   */\n  showHeaderActions = input<boolean>(false);\n\n  /**\n   * Custom CSS classes to apply to the container\n   * @default ''\n   */\n  customClasses = input<string>('');\n\n  /**\n   * Whether to automatically scroll to bottom on new messages\n   * @default true\n   */\n  autoScroll = input<boolean>(true);\n\n  /**\n   * Whether to show avatars in messages\n   * @default true\n   */\n  showAvatars = input<boolean>(true);\n\n  /**\n   * Message to show when there are no messages\n   * @default 'No messages yet. Start a conversation!'\n   */\n  emptyMessage = input<string>('No messages yet. Start a conversation!');\n\n  /**\n   * Maximum height for the messages section\n   * @default '100%'\n   */\n  messagesMaxHeight = input<string>('100%');\n\n  /**\n   * Whether the footer has content\n   * @internal\n   */\n  hasFooterContent = input<boolean>(false);\n\n  // ==========================================\n  // Outputs\n  // ==========================================\n\n  /**\n   * Emitted when a message is sent (placeholder for Phase 0.3)\n   */\n  messageSend = output<string>();\n\n  /**\n   * Emitted when a message's copy button is clicked\n   */\n  messageCopy = output<{ content: string; message: ChatMessage }>();\n\n  /**\n   * Emitted when a message's regenerate button is clicked\n   */\n  messageRegenerate = output<ChatMessage>();\n\n  // ==========================================\n  // Computed Properties\n  // ==========================================\n\n  /**\n   * Container classes\n   */\n  containerClasses = computed(() => {\n    return cn(\n      'ai-chat-container',\n      'flex flex-col h-full',\n      'bg-background',\n      'text-foreground',\n      'transition-colors duration-200',\n      this.customClasses()\n    );\n  });\n\n  /**\n   * Header classes\n   */\n  headerClasses = computed(() => {\n    return cn(\n      'ai-chat-header',\n      'border-b border-border',\n      'p-4 flex-shrink-0',\n      'bg-background'\n    );\n  });\n\n  /**\n   * Messages wrapper classes\n   */\n  messagesWrapperClasses = computed(() => {\n    return cn('ai-chat-messages', 'flex-1', 'min-h-0');\n  });\n\n  /**\n   * Footer classes\n   */\n  footerClasses = computed(() => {\n    return cn(\n      'ai-chat-footer',\n      'border-t border-border',\n      'p-4 flex-shrink-0',\n      'bg-background'\n    );\n  });\n\n  // ==========================================\n  // Methods\n  // ==========================================\n\n  /**\n   * Handle message copy event\n   * @internal\n   */\n  handleMessageCopy(event: { content: string; message: ChatMessage }): void {\n    this.messageCopy.emit(event);\n  }\n\n  /**\n   * Handle message regenerate event\n   * @internal\n   */\n  handleMessageRegenerate(message: ChatMessage): void {\n    this.messageRegenerate.emit(message);\n  }\n}\n","<div\n  [class]=\"containerClasses()\"\n  role=\"region\"\n  [attr.aria-label]=\"'Chat conversation'\"\n>\n  <!-- Header (optional) -->\n  @if (showHeader()) {\n    <header [class]=\"headerClasses()\">\n      <div class=\"flex items-center justify-between\">\n        <h2 class=\"text-foreground text-lg font-semibold\">\n          {{ title() || 'Chat' }}\n        </h2>\n        @if (showHeaderActions()) {\n          <div class=\"flex gap-2\">\n            <!-- Slot for header actions (future) -->\n            <ng-content select=\"[header-actions]\" />\n          </div>\n        }\n      </div>\n    </header>\n  }\n\n  <!-- Messages section -->\n  <div [class]=\"messagesWrapperClasses()\">\n    <ai-message-list\n      [messages]=\"messages()\"\n      [loading]=\"loading()\"\n      [autoScroll]=\"autoScroll()\"\n      [showAvatars]=\"showAvatars()\"\n      [emptyMessage]=\"emptyMessage()\"\n      [maxHeight]=\"messagesMaxHeight()\"\n      (messageCopy)=\"handleMessageCopy($event)\"\n      (messageRegenerate)=\"handleMessageRegenerate($event)\"\n    />\n  </div>\n\n  <!-- Footer (input section placeholder) -->\n  @if (showFooter()) {\n    <footer [class]=\"footerClasses()\">\n      <div class=\"flex items-center justify-center\">\n        <!-- Slot for input components (Phase 0.3) -->\n        <ng-content select=\"[footer-content]\" />\n\n        <!-- Default placeholder when no footer content is provided -->\n        @if (!hasFooterContent()) {\n          <div class=\"text-muted-foreground py-4 text-sm\">\n            No input component configured\n          </div>\n        }\n      </div>\n    </footer>\n  }\n</div>\n","/**\n * ChatContainer component barrel export\n *\n * @module components/chat/chat-container\n */\n\nexport { ChatContainerComponent } from './chat-container.component';\n","import { cn } from '@angular-ai-kit/utils';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ViewEncapsulation,\n  computed,\n  input,\n  output,\n} from '@angular/core';\nimport {\n  PromptSuggestion,\n  SuggestionsPosition,\n} from './prompt-suggestions.types';\n\n/**\n * Prompt Suggestions Component\n *\n * Displays a row of suggestion badges/chips for quick prompts.\n * Designed to be placed above or below a chat input.\n *\n * @example\n * ```html\n * <ai-prompt-suggestions\n *   [suggestions]=\"suggestions\"\n *   [position]=\"'bottom'\"\n *   (select)=\"handleSuggestionSelect($event)\"\n * />\n * ```\n */\n@Component({\n  selector: 'ai-prompt-suggestions',\n  templateUrl: './prompt-suggestions.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'ai-prompt-suggestions block',\n    '[class]': 'hostClasses()',\n  },\n})\nexport class PromptSuggestionsComponent {\n  // ==========================================\n  // Inputs\n  // ==========================================\n\n  /** Array of suggestion items to display */\n  suggestions = input.required<PromptSuggestion[]>();\n\n  /** Position relative to input (affects margin) */\n  position = input<SuggestionsPosition>('bottom');\n\n  /** Custom CSS classes */\n  customClasses = input<string>('');\n\n  // ==========================================\n  // Outputs\n  // ==========================================\n\n  /** Emitted when a suggestion is clicked */\n  select = output<PromptSuggestion>();\n\n  // ==========================================\n  // Computed Properties\n  // ==========================================\n\n  /** Host element classes */\n  hostClasses = computed(() =>\n    cn(\n      {\n        'mb-3': this.position() === 'top',\n        'mt-3': this.position() === 'bottom',\n      },\n      this.customClasses()\n    )\n  );\n\n  /** Container classes */\n  containerClasses = computed(() =>\n    cn('flex flex-wrap items-center justify-center gap-2')\n  );\n\n  /** Button classes - exact match of hlmBtn variant=\"outline\" + ChatInput overrides */\n  buttonClasses = computed(() =>\n    cn(\n      // Base hlmBtn styles\n      'cursor-pointer',\n      'inline-flex shrink-0 items-center justify-center gap-2',\n      'font-medium whitespace-nowrap',\n      'transition-all outline-none',\n      'disabled:pointer-events-none disabled:opacity-50',\n      // Focus styles\n      'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n      // Outline variant styles\n      'bg-background hover:bg-accent hover:text-accent-foreground',\n      'border border-border shadow-xs',\n      // Default size base\n      'h-9 py-2',\n      // ChatInput overrides (rounded-full, px-3, text-xs)\n      'rounded-full px-3 text-xs'\n    )\n  );\n\n  // ==========================================\n  // Methods\n  // ==========================================\n\n  /** Handle suggestion click */\n  handleClick(suggestion: PromptSuggestion): void {\n    this.select.emit(suggestion);\n  }\n}\n","<div [class]=\"containerClasses()\" role=\"group\" aria-label=\"Suggested prompts\">\n  @for (suggestion of suggestions(); track suggestion.label) {\n    <button\n      type=\"button\"\n      [class]=\"buttonClasses()\"\n      (click)=\"handleClick(suggestion)\"\n      [attr.aria-label]=\"'Use suggestion: ' + suggestion.label\"\n    >\n      @if (suggestion.icon) {\n        <span>{{ suggestion.icon }}</span>\n      }\n      {{ suggestion.label }}\n    </button>\n  }\n</div>\n","import { cn } from '@angular-ai-kit/utils';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ViewEncapsulation,\n  computed,\n  input,\n  output,\n} from '@angular/core';\nimport { IconButtonComponent } from '../../ui/icon-button';\nimport {\n  Conversation,\n  ConversationGroup,\n  GroupLabel,\n} from './conversation-list.types';\n\n/** Order of group labels for sorting */\nconst GROUP_ORDER: GroupLabel[] = [\n  'Today',\n  'Yesterday',\n  'Previous 7 days',\n  'Previous 30 days',\n  'Older',\n];\n\n/**\n * Conversation List Component\n *\n * Displays a grouped list of conversations with date-based grouping.\n * Supports active conversation highlighting and delete functionality.\n *\n * @example\n * ```html\n * <ai-conversation-list\n *   [conversations]=\"conversations\"\n *   [activeId]=\"activeConversationId\"\n *   (select)=\"handleSelect($event)\"\n *   (delete)=\"handleDelete($event)\"\n * />\n * ```\n */\n@Component({\n  selector: 'ai-conversation-list',\n  templateUrl: './conversation-list.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [IconButtonComponent],\n  host: {\n    class: 'ai-conversation-list block',\n  },\n})\nexport class ConversationListComponent {\n  // ==========================================\n  // Inputs\n  // ==========================================\n\n  /** Array of conversations to display */\n  conversations = input.required<Conversation[]>();\n\n  /** ID of the currently active conversation */\n  activeId = input<string | null>(null);\n\n  /** Whether to show delete buttons */\n  showDelete = input<boolean>(true);\n\n  /** Empty state message */\n  emptyMessage = input<string>('No conversations yet');\n\n  /** Custom CSS classes */\n  customClasses = input<string>('');\n\n  // ==========================================\n  // Outputs\n  // ==========================================\n\n  /** Emitted when a conversation is selected */\n  select = output<string>();\n\n  /** Emitted when delete is clicked */\n  delete = output<string>();\n\n  // ==========================================\n  // Computed Properties\n  // ==========================================\n\n  /** Whether the list is empty */\n  isEmpty = computed(() => this.conversations().length === 0);\n\n  /** Grouped conversations by date */\n  groups = computed((): ConversationGroup[] => {\n    const conversations = this.conversations();\n    const groupMap = new Map<GroupLabel, Conversation[]>();\n\n    // Group conversations by date\n    conversations.forEach((conv) => {\n      const label = this.getGroupLabel(conv.updatedAt);\n      if (!groupMap.has(label)) {\n        groupMap.set(label, []);\n      }\n      groupMap.get(label)?.push(conv);\n    });\n\n    // Return groups in order\n    const groups: ConversationGroup[] = [];\n    GROUP_ORDER.forEach((label) => {\n      const convs = groupMap.get(label);\n      if (convs && convs.length > 0) {\n        groups.push({ label, conversations: convs });\n      }\n    });\n\n    return groups;\n  });\n\n  /** Container classes */\n  containerClasses = computed(() =>\n    cn('ai-conversation-list-container', this.customClasses())\n  );\n\n  // ==========================================\n  // Methods\n  // ==========================================\n\n  /** Determine group label based on date */\n  private getGroupLabel(date: Date): GroupLabel {\n    const now = new Date();\n    const diffTime = now.getTime() - date.getTime();\n    const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24));\n\n    if (diffDays === 0) return 'Today';\n    if (diffDays === 1) return 'Yesterday';\n    if (diffDays <= 7) return 'Previous 7 days';\n    if (diffDays <= 30) return 'Previous 30 days';\n    return 'Older';\n  }\n\n  /** Check if conversation is active */\n  isActive(id: string): boolean {\n    return this.activeId() === id;\n  }\n\n  /** Handle conversation click */\n  handleSelect(id: string): void {\n    this.select.emit(id);\n  }\n\n  /** Handle delete click */\n  handleDelete(event: Event, id: string): void {\n    event.stopPropagation();\n    this.delete.emit(id);\n  }\n\n  /** Track function for groups */\n  trackByLabel(_index: number, group: ConversationGroup): string {\n    return group.label;\n  }\n\n  /** Track function for conversations */\n  trackById(_index: number, conversation: Conversation): string {\n    return conversation.id;\n  }\n}\n","<div [class]=\"containerClasses()\">\n  @if (isEmpty()) {\n    <!-- Empty State -->\n    <div class=\"text-muted-foreground px-2 py-4 text-center text-sm\">\n      {{ emptyMessage() }}\n    </div>\n  } @else {\n    <!-- Grouped Conversations -->\n    @for (group of groups(); track group.label) {\n      <div class=\"ai-conversation-group mb-2\">\n        <!-- Group Label -->\n        <div\n          class=\"text-muted-foreground mb-1 px-2 text-xs font-medium tracking-wider uppercase\"\n        >\n          {{ group.label }}\n        </div>\n\n        <!-- Conversation Items -->\n        <div class=\"space-y-0.5\">\n          @for (conversation of group.conversations; track conversation.id) {\n            <div class=\"group/item relative\">\n              <button\n                type=\"button\"\n                class=\"hover:bg-accent w-full cursor-pointer rounded-md px-2 py-1.5 text-left text-sm transition-colors\"\n                [class.bg-accent]=\"isActive(conversation.id)\"\n                [attr.data-active]=\"isActive(conversation.id)\"\n                [title]=\"conversation.title\"\n                (click)=\"handleSelect(conversation.id)\"\n              >\n                <span\n                  class=\"block truncate transition-[padding-right] group-hover/item:pr-7\"\n                >\n                  {{ conversation.title }}\n                </span>\n              </button>\n\n              <!-- Delete Button (on hover) -->\n              @if (showDelete()) {\n                <ai-icon-button\n                  icon=\"lucideTrash2\"\n                  ariaLabel=\"Delete conversation\"\n                  size=\"sm\"\n                  variant=\"ghost\"\n                  customClasses=\"absolute top-1/2 right-1 hidden -translate-y-1/2 group-hover/item:inline-flex hover:bg-destructive/10 hover:text-destructive\"\n                  (clicked)=\"handleDelete($event, conversation.id)\"\n                />\n              }\n            </div>\n          }\n        </div>\n      </div>\n    }\n  }\n</div>\n","/**\n * Chat components barrel export\n *\n * @module components/chat\n */\n\nexport { UserMessageComponent } from './user-message';\nexport type { EditEvent } from './user-message';\nexport { MessageListComponent } from './message-list';\nexport { ChatContainerComponent } from './chat-container';\nexport { MessageActionsComponent } from './message-actions';\nexport { PromptSuggestionsComponent } from './prompt-suggestions';\nexport type {\n  PromptSuggestion,\n  SuggestionsPosition,\n} from './prompt-suggestions';\nexport { ConversationListComponent } from './conversation-list';\nexport type {\n  Conversation,\n  ConversationGroup,\n  GroupLabel,\n} from './conversation-list';\n","import hljs from 'highlight.js';\nimport { cn } from '@angular-ai-kit/utils';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  OnChanges,\n  PLATFORM_ID,\n  SimpleChanges,\n  ViewEncapsulation,\n  computed,\n  inject,\n  input,\n  output,\n  signal,\n  viewChild,\n} from '@angular/core';\nimport { IconButtonComponent } from '../../ui/icon-button';\n\n/**\n * Language display name mapping\n */\nconst LANGUAGE_MAP: Record<string, string> = {\n  js: 'JavaScript',\n  javascript: 'JavaScript',\n  ts: 'TypeScript',\n  typescript: 'TypeScript',\n  py: 'Python',\n  python: 'Python',\n  rb: 'Ruby',\n  ruby: 'Ruby',\n  sh: 'Bash',\n  bash: 'Bash',\n  shell: 'Shell',\n  yml: 'YAML',\n  yaml: 'YAML',\n  md: 'Markdown',\n  markdown: 'Markdown',\n  json: 'JSON',\n  html: 'HTML',\n  css: 'CSS',\n  scss: 'SCSS',\n  sass: 'Sass',\n  less: 'Less',\n  sql: 'SQL',\n  graphql: 'GraphQL',\n  go: 'Go',\n  rust: 'Rust',\n  java: 'Java',\n  kotlin: 'Kotlin',\n  swift: 'Swift',\n  cpp: 'C++',\n  c: 'C',\n  csharp: 'C#',\n  cs: 'C#',\n  php: 'PHP',\n  plaintext: 'Text',\n  text: 'Text',\n  diff: 'Diff',\n  dockerfile: 'Dockerfile',\n  xml: 'XML',\n  toml: 'TOML',\n  ini: 'INI',\n};\n\n/**\n * Code Block Component\n *\n * Displays code with syntax highlighting, language label, and copy button.\n * Uses highlight.js for syntax highlighting.\n *\n * @example\n * ```html\n * <ai-code-block\n *   [code]=\"codeString\"\n *   language=\"typescript\"\n *   [showCopyButton]=\"true\"\n *   (copy)=\"handleCopy($event)\"\n * />\n * ```\n */\n@Component({\n  selector: 'ai-code-block',\n  templateUrl: './code-block.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [IconButtonComponent],\n  host: {\n    class: 'ai-code-block-host block',\n  },\n})\nexport class CodeBlockComponent implements AfterViewInit, OnChanges {\n  private platformId = inject(PLATFORM_ID);\n  private codeRef = viewChild<ElementRef<HTMLElement>>('codeElement');\n\n  // ==========================================\n  // Inputs\n  // ==========================================\n\n  /** The code to display */\n  code = input.required<string>();\n\n  /** Programming language for syntax highlighting */\n  language = input<string>('plaintext');\n\n  /** Whether to show the copy button */\n  showCopyButton = input<boolean>(true);\n\n  /** Whether to show line numbers */\n  showLineNumbers = input<boolean>(false);\n\n  /** Custom CSS classes */\n  customClasses = input<string>('');\n\n  // ==========================================\n  // Outputs\n  // ==========================================\n\n  /** Emitted when code is copied */\n  copy = output<string>();\n\n  // ==========================================\n  // State\n  // ==========================================\n\n  /** Whether copy was just clicked */\n  justCopied = signal(false);\n\n  /** Highlighted HTML content */\n  highlightedCode = signal<string>('');\n\n  // ==========================================\n  // Computed Properties\n  // ==========================================\n\n  /** Display name for the language */\n  displayLanguage = computed(() => {\n    const lang = this.language().toLowerCase();\n    return LANGUAGE_MAP[lang] || lang;\n  });\n\n  /** Icon for copy button */\n  copyIcon = computed(() => (this.justCopied() ? 'lucideCheck' : 'lucideCopy'));\n\n  /** Copy button aria label */\n  copyLabel = computed(() => (this.justCopied() ? 'Copied!' : 'Copy code'));\n\n  /** Wrapper classes */\n  wrapperClasses = computed(() =>\n    cn('ai-code-block-wrapper', this.customClasses())\n  );\n\n  /** Copy button classes */\n  copyButtonClasses = computed(() =>\n    cn({\n      'text-foreground': this.justCopied(),\n    })\n  );\n\n  /** Code lines for line numbers */\n  codeLines = computed(() => {\n    const code = this.code();\n    return code.split('\\n');\n  });\n\n  // ==========================================\n  // Lifecycle\n  // ==========================================\n\n  ngAfterViewInit(): void {\n    this.highlightCode();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['code'] || changes['language']) {\n      this.highlightCode();\n    }\n  }\n\n  // ==========================================\n  // Private Methods\n  // ==========================================\n\n  /** Apply syntax highlighting to code */\n  private highlightCode(): void {\n    const code = this.code();\n    const lang = this.language();\n\n    if (!code) {\n      this.highlightedCode.set('');\n      return;\n    }\n\n    try {\n      let highlighted: string;\n      if (lang && hljs.getLanguage(lang)) {\n        highlighted = hljs.highlight(code, { language: lang }).value;\n      } else {\n        highlighted = hljs.highlightAuto(code).value;\n      }\n      this.highlightedCode.set(highlighted);\n    } catch {\n      // Fallback to escaped plain text\n      this.highlightedCode.set(this.escapeHtml(code));\n    }\n  }\n\n  /** Escape HTML special characters */\n  private escapeHtml(text: string): string {\n    return text\n      .replace(/&/g, '&amp;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;')\n      .replace(/\"/g, '&quot;')\n      .replace(/'/g, '&#039;');\n  }\n\n  // ==========================================\n  // Event Handlers\n  // ==========================================\n\n  /** Handle copy button click */\n  handleCopy(): void {\n    const code = this.code();\n    this.copy.emit(code);\n\n    if (isPlatformBrowser(this.platformId) && navigator.clipboard) {\n      navigator.clipboard.writeText(code).then(() => {\n        this.justCopied.set(true);\n        setTimeout(() => this.justCopied.set(false), 2000);\n      });\n    }\n  }\n}\n","<div [class]=\"wrapperClasses()\">\n  <!-- Header Bar -->\n  <div class=\"ai-code-block-header\">\n    <!-- Language Label -->\n    <span class=\"ai-code-block-language\">{{ displayLanguage() }}</span>\n\n    <!-- Spacer -->\n    <div class=\"flex-1\"></div>\n\n    <!-- Copy Button -->\n    @if (showCopyButton()) {\n      <ai-icon-button\n        [icon]=\"copyIcon()\"\n        [ariaLabel]=\"copyLabel()\"\n        size=\"sm\"\n        [customClasses]=\"copyButtonClasses()\"\n        (clicked)=\"handleCopy()\"\n      />\n    }\n  </div>\n\n  <!-- Code Content -->\n  <div class=\"ai-code-block-content\">\n    @if (showLineNumbers()) {\n      <!-- With Line Numbers -->\n      <div class=\"ai-code-block-with-lines\">\n        <div class=\"ai-code-block-line-numbers\" aria-hidden=\"true\">\n          @for (line of codeLines(); track $index; let i = $index) {\n            <span class=\"ai-code-block-line-number\">{{ i + 1 }}</span>\n          }\n        </div>\n        <pre\n          class=\"ai-code-block-pre\"\n        ><code #codeElement class=\"hljs language-{{ language() }}\" [innerHTML]=\"highlightedCode()\"></code></pre>\n      </div>\n    } @else {\n      <!-- Without Line Numbers -->\n      <pre\n        class=\"ai-code-block-pre\"\n      ><code #codeElement class=\"hljs language-{{ language() }}\" [innerHTML]=\"highlightedCode()\"></code></pre>\n    }\n  </div>\n</div>\n","import { cn } from '@angular-ai-kit/utils';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  OnInit,\n  PLATFORM_ID,\n  ViewEncapsulation,\n  computed,\n  effect,\n  inject,\n  input,\n  signal,\n} from '@angular/core';\n\n/**\n * StreamingTextComponent\n *\n * Displays text with a typewriter animation effect for streaming AI responses.\n * Features character-by-character reveal with configurable speed and cursor.\n *\n * @example\n * ```html\n * <ai-streaming-text\n *   [content]=\"message.content\"\n *   [isStreaming]=\"true\"\n *   [speed]=\"30\"\n * />\n * ```\n */\n@Component({\n  selector: 'ai-streaming-text',\n  templateUrl: './streaming-text.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'ai-streaming-text-host inline',\n    '[attr.aria-live]': '\"polite\"',\n    '[attr.aria-busy]': 'isStreaming()',\n  },\n})\nexport class StreamingTextComponent implements OnInit {\n  private platformId = inject(PLATFORM_ID);\n  private destroyRef = inject(DestroyRef);\n\n  // Inputs\n  content = input.required<string>();\n  isStreaming = input<boolean>(false);\n  speed = input<number>(30); // ms per character\n  showCursor = input<boolean>(true);\n  cursorChar = input<string>('▊');\n  customClasses = input<string>('');\n\n  // Internal state\n  displayedText = signal('');\n  private currentIndex = 0;\n  private animationTimeoutId: ReturnType<typeof setTimeout> | null = null;\n\n  // Computed classes\n  contentClasses = computed(() => {\n    return cn(\n      'ai-streaming-text-content',\n      'whitespace-pre-wrap break-words',\n      this.customClasses()\n    );\n  });\n\n  cursorClasses = computed(() => {\n    return cn(\n      'ai-streaming-text-cursor',\n      'inline-block',\n      'text-primary',\n      'animate-cursor-blink'\n    );\n  });\n\n  constructor() {\n    // Effect to handle content changes during streaming\n    effect(() => {\n      const fullText = this.content();\n      const streaming = this.isStreaming();\n\n      if (!isPlatformBrowser(this.platformId)) {\n        // SSR: show full text immediately\n        this.displayedText.set(fullText);\n        return;\n      }\n\n      if (streaming) {\n        // Start or continue animation\n        this.animateText(fullText);\n      } else {\n        // Show full text immediately when not streaming\n        this.cancelAnimation();\n        this.displayedText.set(fullText);\n        this.currentIndex = fullText.length;\n      }\n    });\n\n    // Cleanup on destroy\n    this.destroyRef.onDestroy(() => {\n      this.cancelAnimation();\n    });\n  }\n\n  ngOnInit(): void {\n    // Initial text display\n    if (!this.isStreaming()) {\n      this.displayedText.set(this.content());\n      this.currentIndex = this.content().length;\n    }\n  }\n\n  /**\n   * Animate text character by character\n   */\n  private animateText(fullText: string): void {\n    // If we already have all the text displayed, just update\n    if (this.currentIndex >= fullText.length) {\n      this.displayedText.set(fullText);\n      return;\n    }\n\n    // If new content is shorter (shouldn't happen often), reset\n    if (fullText.length < this.currentIndex) {\n      this.currentIndex = 0;\n    }\n\n    // Reveal next character\n    const revealNextChar = () => {\n      if (this.currentIndex < fullText.length) {\n        this.currentIndex++;\n        this.displayedText.set(fullText.slice(0, this.currentIndex));\n\n        // Schedule next character\n        this.animationTimeoutId = setTimeout(revealNextChar, this.speed());\n      }\n    };\n\n    // Start revealing if not already at end\n    if (this.currentIndex < fullText.length) {\n      // Cancel any existing animation\n      this.cancelAnimation();\n      // Start new animation\n      revealNextChar();\n    }\n  }\n\n  /**\n   * Cancel ongoing animation\n   */\n  private cancelAnimation(): void {\n    if (this.animationTimeoutId !== null) {\n      clearTimeout(this.animationTimeoutId);\n      this.animationTimeoutId = null;\n    }\n  }\n\n  /**\n   * Reset animation state (useful for testing)\n   */\n  reset(): void {\n    this.cancelAnimation();\n    this.currentIndex = 0;\n    this.displayedText.set('');\n  }\n}\n","<span [class]=\"contentClasses()\">{{ displayedText() }}</span>\n@if (isStreaming() && showCursor()) {\n  <span [class]=\"cursorClasses()\" aria-hidden=\"true\">{{ cursorChar() }}</span>\n}\n","import { cn } from '@angular-ai-kit/utils';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ViewEncapsulation,\n  computed,\n  input,\n} from '@angular/core';\n\n/**\n * TypingIndicatorComponent\n *\n * Animated dots indicator showing that the AI is processing a response.\n * Features configurable animation and background options.\n *\n * Options:\n * - `showBackground`: Toggle card background on/off\n * - `animation`: 'shimmer' (bounce) or 'wave' (up/down)\n *\n * @example\n * ```html\n * <ai-typing-indicator />\n *\n * <ai-typing-indicator [showBackground]=\"false\" />\n *\n * <ai-typing-indicator animation=\"wave\" />\n *\n * <ai-typing-indicator\n *   [showBackground]=\"false\"\n *   animation=\"wave\"\n *   [showAvatar]=\"true\"\n * />\n * ```\n */\n@Component({\n  selector: 'ai-typing-indicator',\n  templateUrl: './typing-indicator.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'ai-typing-indicator-host block',\n    '[attr.role]': '\"status\"',\n    '[attr.aria-label]': '\"AI is typing\"',\n  },\n})\nexport class TypingIndicatorComponent {\n  // Inputs\n  showAvatar = input<boolean>(true);\n  text = input<string>('');\n  dotCount = input<number>(3);\n  customClasses = input<string>('');\n  showBackground = input<boolean>(true);\n  animation = input<'shimmer' | 'wave'>('shimmer');\n\n  // Generate array for dots iteration\n  dots = computed(() => {\n    return Array.from({ length: this.dotCount() }, (_, i) => i);\n  });\n\n  // Computed classes\n  containerClasses = computed(() => {\n    return cn(\n      'ai-typing-indicator',\n      'flex items-center gap-3',\n      'px-4 py-3',\n      this.customClasses()\n    );\n  });\n\n  avatarClasses = computed(() => {\n    return cn(\n      'ai-typing-indicator-avatar',\n      'flex h-8 w-8 shrink-0 items-center justify-center',\n      'rounded-full',\n      'bg-primary text-primary-foreground',\n      'text-sm font-medium'\n    );\n  });\n\n  bubbleClasses = computed(() => {\n    const hasBackground = this.showBackground();\n\n    return cn(\n      'ai-typing-indicator-bubble',\n      'flex items-center gap-1.5',\n      // Add bubble styling when background is enabled\n      hasBackground && [\n        'rounded-2xl rounded-tl-sm',\n        'bg-card',\n        'border border-border',\n        'px-4 py-3',\n        'shadow-sm',\n      ],\n      // No background gets simple padding only\n      !hasBackground && 'px-1 py-1'\n    );\n  });\n\n  dotClasses = computed(() => {\n    const isWave = this.animation() === 'wave';\n\n    return cn(\n      'h-2 w-2',\n      'rounded-full',\n      'bg-foreground-muted',\n      // Animation class based on animation type\n      isWave ? 'typing-dot-wave' : 'typing-dot'\n    );\n  });\n\n  textClasses = computed(() => {\n    return cn(\n      'ai-typing-indicator-text',\n      'ml-2',\n      'text-sm text-foreground-muted'\n    );\n  });\n\n  /** Get animation delay for each dot */\n  getDotDelay(index: number): string {\n    return `${index * 0.2}s`;\n  }\n}\n","<div [class]=\"containerClasses()\">\n  <!-- Avatar -->\n  @if (showAvatar()) {\n    <div [class]=\"avatarClasses()\">\n      <svg\n        class=\"h-4 w-4\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        viewBox=\"0 0 24 24\"\n        aria-hidden=\"true\"\n      >\n        <path\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n          stroke-width=\"2\"\n          d=\"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\n        />\n      </svg>\n    </div>\n  }\n\n  <!-- Bubble with dots -->\n  <div [class]=\"bubbleClasses()\">\n    <!-- Animated dots -->\n    @for (i of dots(); track i) {\n      <span\n        [class]=\"dotClasses()\"\n        [style.animation-delay]=\"getDotDelay(i)\"\n        aria-hidden=\"true\"\n      ></span>\n    }\n\n    <!-- Optional text -->\n    @if (text()) {\n      <span [class]=\"textClasses()\">{{ text() }}</span>\n    }\n  </div>\n\n  <!-- Screen reader text -->\n  <span class=\"sr-only\">AI is thinking...</span>\n</div>\n","import { NgIcon, provideIcons } from '@ng-icons/core';\nimport { lucideFile, lucideX } from '@ng-icons/lucide';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  PLATFORM_ID,\n  ViewEncapsulation,\n  inject,\n  input,\n  output,\n} from '@angular/core';\nimport { HlmIcon } from '../../../spartan-ui/icon';\n\n/**\n * AttachmentCardComponent\n *\n * Displays a file attachment with preview (for images) or icon (for other files).\n * Shows file name, size, and a remove button on hover.\n *\n * @example\n * ```html\n * <ai-attachment-card\n *   [file]=\"file\"\n *   (remove)=\"handleRemove(file)\"\n * />\n * ```\n */\n@Component({\n  selector: 'ai-attachment-card',\n  templateUrl: './attachment-card.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [HlmIcon, NgIcon],\n  providers: [\n    provideIcons({\n      lucideFile,\n      lucideX,\n    }),\n  ],\n  host: {\n    class: 'ai-attachment-card-host block',\n  },\n})\nexport class AttachmentCardComponent {\n  private platformId = inject(PLATFORM_ID);\n\n  /** The file to display */\n  file = input.required<File>();\n\n  /** Emits when the remove button is clicked */\n  remove = output<void>();\n\n  /** Handle remove button click */\n  handleRemove(): void {\n    this.remove.emit();\n  }\n\n  /** Check if file is an image */\n  isImageFile(): boolean {\n    return this.file().type.startsWith('image/');\n  }\n\n  /** Format file size in human-readable format */\n  formatFileSize(bytes: number): string {\n    if (bytes === 0) return '0 B';\n    const k = 1024;\n    const sizes = ['B', 'KB', 'MB', 'GB'];\n    const i = Math.floor(Math.log(bytes) / Math.log(k));\n    return Math.round((bytes / Math.pow(k, i)) * 10) / 10 + ' ' + sizes[i];\n  }\n\n  /** Get file preview URL for images */\n  getFilePreviewUrl(): string {\n    if (isPlatformBrowser(this.platformId) && this.isImageFile()) {\n      return URL.createObjectURL(this.file());\n    }\n    return '';\n  }\n}\n","<div\n  class=\"group border-border bg-card hover:border-border-hover relative flex max-w-[220px] items-center gap-2 rounded-lg border p-2 transition-all hover:shadow-sm\"\n>\n  @if (isImageFile()) {\n    <!-- Image Preview -->\n    <div class=\"bg-muted relative h-12 w-12 shrink-0 overflow-hidden rounded\">\n      <img\n        [src]=\"getFilePreviewUrl()\"\n        [alt]=\"file().name\"\n        class=\"h-full w-full object-cover\"\n      />\n    </div>\n  } @else {\n    <!-- File Icon -->\n    <div\n      class=\"bg-muted flex h-12 w-12 shrink-0 items-center justify-center rounded\"\n    >\n      <ng-icon\n        hlm\n        name=\"lucideFile\"\n        size=\"base\"\n        class=\"text-muted-foreground\"\n      />\n    </div>\n  }\n\n  <!-- File Info -->\n  <div class=\"min-w-0 flex-1 pr-6\">\n    <p\n      class=\"text-foreground truncate text-xs font-medium\"\n      [title]=\"file().name\"\n    >\n      {{ file().name }}\n    </p>\n    <p class=\"text-muted-foreground text-xs\">\n      {{ formatFileSize(file().size) }}\n    </p>\n  </div>\n\n  <!-- Remove Button (visible on hover) -->\n  <button\n    type=\"button\"\n    class=\"border-border bg-muted hover:bg-accent hover:text-accent-foreground absolute -top-[7px] -right-[7px] z-10 flex size-4 cursor-pointer items-center justify-center rounded-full border opacity-0 shadow-sm transition-all group-hover:opacity-100\"\n    [attr.aria-label]=\"'Remove ' + file().name\"\n    (click)=\"handleRemove()\"\n  >\n    <ng-icon hlm name=\"lucideX\" size=\"xs\" class=\"text-foreground/70\" />\n  </button>\n</div>\n","import { type VariantProps, cva } from 'class-variance-authority';\nimport { Directive, input } from '@angular/core';\nimport { classes } from '../utils';\n\nconst badgeVariants = cva(\n  'focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&_ng-icon]:pointer-events-none [&_ng-icon]:size-3',\n  {\n    variants: {\n      variant: {\n        default:\n          'bg-primary text-primary-foreground [a&]:hover:bg-primary/90 border-transparent',\n        secondary:\n          'bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90 border-transparent',\n        destructive:\n          'bg-destructive [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 border-transparent text-white',\n        outline:\n          'text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground',\n      },\n    },\n    defaultVariants: {\n      variant: 'default',\n    },\n  }\n);\n\nexport type BadgeVariants = VariantProps<typeof badgeVariants>;\n\n@Directive({\n  selector: '[hlmBadge]',\n  host: {\n    'data-slot': 'badge',\n  },\n})\nexport class HlmBadge {\n  public readonly variant = input<BadgeVariants['variant']>('default');\n\n  constructor() {\n    classes(() => badgeVariants({ variant: this.variant() }));\n  }\n}\n","import { HlmBadge } from './hlm-badge';\n\nexport * from './hlm-badge';\n\nexport const HlmBadgeImports = [HlmBadge] as const;\n","import { InjectionToken, type ValueProvider, inject } from '@angular/core';\nimport type { ButtonVariants } from './hlm-button';\n\nexport interface BrnButtonConfig {\n  variant: ButtonVariants['variant'];\n  size: ButtonVariants['size'];\n}\n\nconst defaultConfig: BrnButtonConfig = {\n  variant: 'default',\n  size: 'default',\n};\n\nconst BrnButtonConfigToken = new InjectionToken<BrnButtonConfig>(\n  'BrnButtonConfig'\n);\n\nexport function provideBrnButtonConfig(\n  config: Partial<BrnButtonConfig>\n): ValueProvider {\n  return {\n    provide: BrnButtonConfigToken,\n    useValue: { ...defaultConfig, ...config },\n  };\n}\n\nexport function injectBrnButtonConfig(): BrnButtonConfig {\n  return inject(BrnButtonConfigToken, { optional: true }) ?? defaultConfig;\n}\n","import { type VariantProps, cva } from 'class-variance-authority';\nimport type { ClassValue } from 'clsx';\nimport { Directive, input, signal } from '@angular/core';\nimport { BrnButton } from '@spartan-ng/brain/button';\nimport { classes } from '../utils';\nimport { injectBrnButtonConfig } from './hlm-button.token';\n\nexport const buttonVariants = cva(\n  \"cursor-pointer focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_ng-icon]:pointer-events-none [&_ng-icon]:shrink-0 [&_ng-icon:not([class*='text-'])]:text-base\",\n  {\n    variants: {\n      variant: {\n        default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n        destructive:\n          'bg-destructive hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-white',\n        outline:\n          'bg-background hover:bg-accent hover:text-accent-foreground bg-input hover:bg-muted border border-border shadow-xs',\n        secondary:\n          'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n        ghost:\n          'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',\n        link: 'text-primary underline-offset-4 hover:underline',\n      },\n      size: {\n        default: 'h-9 px-4 py-2 has-[>ng-icon]:px-3',\n        sm: 'h-8 gap-1.5 rounded-md px-3 has-[>ng-icon]:px-2.5',\n        lg: 'h-10 rounded-md px-6 has-[>ng-icon]:px-4',\n        icon: 'size-9',\n        'icon-sm': 'size-8',\n        'icon-lg': 'size-10',\n      },\n    },\n    defaultVariants: {\n      variant: 'default',\n      size: 'default',\n    },\n  }\n);\n\nexport type ButtonVariants = VariantProps<typeof buttonVariants>;\n\n@Directive({\n  selector: 'button[hlmBtn], a[hlmBtn]',\n  exportAs: 'hlmBtn',\n  hostDirectives: [{ directive: BrnButton, inputs: ['disabled'] }],\n  host: {\n    'data-slot': 'button',\n  },\n})\nexport class HlmButton {\n  private readonly _config = injectBrnButtonConfig();\n\n  private readonly _additionalClasses = signal<ClassValue>('');\n\n  public readonly variant = input<ButtonVariants['variant']>(\n    this._config.variant\n  );\n\n  public readonly size = input<ButtonVariants['size']>(this._config.size);\n\n  constructor() {\n    classes(() => [\n      buttonVariants({ variant: this.variant(), size: this.size() }),\n      this._additionalClasses(),\n    ]);\n  }\n\n  setClass(classes: string): void {\n    this._additionalClasses.set(classes);\n  }\n}\n","import { HlmButton } from './hlm-button';\n\nexport * from './hlm-button';\nexport * from './hlm-button.token';\n\nexport const HlmButtonImports = [HlmButton] as const;\n","import { Directive } from '@angular/core';\nimport { BrnCommand } from '@spartan-ng/brain/command';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: '[hlmCommand],hlm-command',\n  hostDirectives: [\n    {\n      directive: BrnCommand,\n      inputs: ['id', 'filter'],\n      outputs: ['valueChange'],\n    },\n  ],\n  host: {\n    'data-slot': 'command',\n  },\n})\nexport class HlmCommand {\n  constructor() {\n    classes(\n      () =>\n        'bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md'\n    );\n  }\n}\n","import {\n  Directive,\n  ElementRef,\n  Renderer2,\n  contentChild,\n  effect,\n  inject,\n  signal,\n} from '@angular/core';\nimport { BrnCommandSearchInputToken } from '@spartan-ng/brain/command';\nimport { injectExposesStateProvider } from '@spartan-ng/brain/core';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: '[hlmCommandDialog]',\n  host: {\n    'data-slot': 'command-dialog',\n  },\n})\nexport class HlmCommandDialog {\n  private readonly _stateProvider = injectExposesStateProvider({ host: true });\n  public readonly state =\n    this._stateProvider.state ?? signal('closed').asReadonly();\n  private readonly _renderer = inject(Renderer2);\n  private readonly _element = inject(ElementRef);\n\n  /** Access the search field */\n  private readonly _searchInput = contentChild(BrnCommandSearchInputToken, {\n    read: ElementRef,\n  });\n\n  constructor() {\n    classes(\n      () =>\n        'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-top-[2%] data-[state=open]:slide-in-from-top-[2%]'\n    );\n\n    effect(() => {\n      this._renderer.setAttribute(\n        this._element.nativeElement,\n        'data-state',\n        this.state()\n      );\n\n      const searchInput = this._searchInput();\n\n      if (this.state() === 'open' && searchInput) {\n        searchInput.nativeElement.focus();\n      }\n    });\n  }\n}\n","import { Directive } from '@angular/core';\nimport { BrnDialogClose } from '@spartan-ng/brain/dialog';\nimport { HlmButton, provideBrnButtonConfig } from '../button';\nimport { provideHlmIconConfig } from '../icon';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: '[hlmCommandDialogCloseBtn]',\n  providers: [\n    provideBrnButtonConfig({ variant: 'ghost' }),\n    provideHlmIconConfig({ size: 'xs' }),\n  ],\n  hostDirectives: [HlmButton, BrnDialogClose],\n})\nexport class HlmCommandDialogCloseButton {\n  constructor() {\n    classes(\n      () =>\n        'focus-visible:ring-ring hover:bg-accent hover:text-accent-foreground ring-offset-background absolute top-3 right-3 inline-flex !h-5 h-10 !w-5 items-center justify-center rounded-md !p-1 px-4 py-2 text-sm font-medium transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none'\n    );\n  }\n}\n","import { Directive } from '@angular/core';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: '[hlmCommandEmpty]',\n  host: {\n    'data-slot': 'command-empty',\n  },\n})\nexport class HlmCommandEmpty {\n  constructor() {\n    classes(() => 'py-6 text-center text-sm');\n  }\n}\n","import { Directive } from '@angular/core';\nimport { BrnCommandGroup } from '@spartan-ng/brain/command';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: '[hlmCommandGroup],hlm-command-group',\n  hostDirectives: [\n    {\n      directive: BrnCommandGroup,\n      inputs: ['id'],\n    },\n  ],\n  host: {\n    'data-slot': 'command-group',\n  },\n})\nexport class HlmCommandGroup {\n  constructor() {\n    classes(\n      () => 'text-foreground block overflow-hidden p-1 data-[hidden]:hidden'\n    );\n  }\n}\n","import { Directive } from '@angular/core';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: '[hlmCommandGroupLabel],hlm-command-group-label',\n  host: {\n    'data-slot': 'command-group-label',\n    role: 'presentation',\n  },\n})\nexport class HlmCommandGroupLabel {\n  constructor() {\n    classes(() => 'text-muted-foreground px-2 py-1.5 text-xs font-medium');\n  }\n}\n","import { Directive } from '@angular/core';\nimport { provideHlmIconConfig } from '../icon';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: '[hlmCommandIcon]',\n  providers: [provideHlmIconConfig({ size: 'sm' })],\n  host: {\n    'data-slot': 'command-icon',\n  },\n})\nexport class HlmCommandIcon {\n  constructor() {\n    classes(() => 'text-muted-foreground pointer-events-none shrink-0');\n  }\n}\n","import { Directive } from '@angular/core';\nimport { BrnCommandItem } from '@spartan-ng/brain/command';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: 'button[hlmCommandItem],button[hlm-command-item]',\n  hostDirectives: [\n    {\n      directive: BrnCommandItem,\n      inputs: ['value', 'disabled', 'id'],\n      outputs: ['selected'],\n    },\n  ],\n  host: {\n    'data-slot': 'command-item',\n  },\n})\nexport class HlmCommandItem {\n  constructor() {\n    classes(\n      () =>\n        \"data-[selected]:bg-accent data-[selected=true]:text-accent-foreground [&>ng-icon:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-lg px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[hidden]:hidden [&>ng-icon]:pointer-events-none [&>ng-icon]:shrink-0 [&>ng-icon:not([class*='text-'])]:text-base\"\n    );\n  }\n}\n","import { Directive } from '@angular/core';\nimport { BrnCommandList } from '@spartan-ng/brain/command';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: '[hlmCommandList],hlm-command-list',\n  hostDirectives: [\n    {\n      directive: BrnCommandList,\n      inputs: ['id'],\n    },\n  ],\n  host: {\n    'data-slot': 'command-list',\n  },\n})\nexport class HlmCommandList {\n  constructor() {\n    classes(() => 'max-h-[300px] overflow-x-hidden overflow-y-auto');\n  }\n}\n","import { Directive } from '@angular/core';\nimport { provideHlmIconConfig } from '../icon';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: '[hlmCommandSearch],hlm-command-search',\n  providers: [provideHlmIconConfig({ size: 'sm' })],\n  host: {\n    'data-slot': 'command-search',\n  },\n})\nexport class HlmCommandSearch {\n  constructor() {\n    classes(\n      () =>\n        'flex h-9 items-center gap-2 border-b px-3 [&>_ng-icon]:flex-none [&>_ng-icon]:opacity-50'\n    );\n  }\n}\n","import { Directive } from '@angular/core';\nimport { BrnCommandSearchInput } from '@spartan-ng/brain/command';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: 'input[hlmCommandSearchInput],input[hlm-command-search-input]',\n  hostDirectives: [{ directive: BrnCommandSearchInput, inputs: ['value'] }],\n  host: {\n    'data-slot': 'command-search-input',\n  },\n})\nexport class HlmCommandSearchInput {\n  constructor() {\n    classes(\n      () =>\n        'placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none disabled:cursor-not-allowed disabled:opacity-50'\n    );\n  }\n}\n","import { Directive } from '@angular/core';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: '[hlmCommandSeparator],hlm-command-separator',\n  host: {\n    'data-slot': 'command-separator',\n    role: 'separator',\n  },\n})\nexport class HlmCommandSeparator {\n  constructor() {\n    classes(() => 'bg-border -mx-1 block h-px');\n  }\n}\n","import { Directive } from '@angular/core';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: '[hlmCommandShortcut],hlm-command-shortcut',\n  host: {\n    'data-slot': 'command-shortcut',\n  },\n})\nexport class HlmCommandShortcut {\n  constructor() {\n    classes(() => 'text-muted-foreground ml-auto text-xs tracking-widest');\n  }\n}\n","import { HlmCommand } from './hlm-command';\nimport { HlmCommandDialog } from './hlm-command-dialog';\nimport { HlmCommandDialogCloseButton } from './hlm-command-dialog-close-button';\nimport { HlmCommandEmpty } from './hlm-command-empty';\nimport { HlmCommandGroup } from './hlm-command-group';\nimport { HlmCommandGroupLabel } from './hlm-command-group-label';\nimport { HlmCommandIcon } from './hlm-command-icon';\nimport { HlmCommandItem } from './hlm-command-item';\nimport { HlmCommandList } from './hlm-command-list';\nimport { HlmCommandSearch } from './hlm-command-search';\nimport { HlmCommandSearchInput } from './hlm-command-search-input';\nimport { HlmCommandSeparator } from './hlm-command-separator';\nimport { HlmCommandShortcut } from './hlm-command-shortcut';\n\nexport * from './hlm-command';\nexport * from './hlm-command-dialog';\nexport * from './hlm-command-dialog-close-button';\nexport * from './hlm-command-empty';\nexport * from './hlm-command-group';\nexport * from './hlm-command-group-label';\nexport * from './hlm-command-icon';\nexport * from './hlm-command-item';\nexport * from './hlm-command-list';\nexport * from './hlm-command-search';\nexport * from './hlm-command-search-input';\nexport * from './hlm-command-separator';\nexport * from './hlm-command-shortcut';\n\nexport const HlmCommandImports = [\n  HlmCommand,\n  HlmCommandItem,\n  HlmCommandSeparator,\n  HlmCommandGroup,\n  HlmCommandList,\n  HlmCommandShortcut,\n  HlmCommandIcon,\n  HlmCommandDialogCloseButton,\n  HlmCommandDialog,\n  HlmCommandSearchInput,\n  HlmCommandSearch,\n  HlmCommandGroupLabel,\n  HlmCommandEmpty,\n] as const;\n","import { type NumberInput } from '@angular/cdk/coercion';\nimport { CdkMenu } from '@angular/cdk/menu';\nimport {\n  Directive,\n  inject,\n  input,\n  numberAttribute,\n  signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: '[hlmDropdownMenu],hlm-dropdown-menu',\n  hostDirectives: [CdkMenu],\n  host: {\n    'data-slot': 'dropdown-menu',\n    '[attr.data-state]': '_state()',\n    '[attr.data-side]': '_side()',\n    '[style.--side-offset]': 'sideOffset()',\n  },\n})\nexport class HlmDropdownMenu {\n  private readonly _host = inject(CdkMenu);\n\n  protected readonly _state = signal('open');\n  protected readonly _side = signal('top');\n\n  public readonly sideOffset = input<number, NumberInput>(1, {\n    transform: numberAttribute,\n  });\n\n  constructor() {\n    classes(\n      () =>\n        'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 my-[--spacing(var(--side-offset))] min-w-[8rem] origin-top overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md'\n    );\n\n    this.setSideWithDarkMagic();\n    // this is a best effort, but does not seem to work currently\n    // TODO: figure out a way for us to know the host is about to be closed. might not be possible with CDK\n    this._host.closed\n      .pipe(takeUntilDestroyed())\n      .subscribe(() => this._state.set('closed'));\n  }\n\n  private setSideWithDarkMagic() {\n    /**\n     * This is an ugly workaround to at least figure out the correct side of where a submenu\n     * will appear and set the attribute to the host accordingly\n     *\n     * First of all we take advantage of the menu stack not being aware of the root\n     * object immediately after it is added. This code executes before the root element is added,\n     * which means the stack is still empty and the peek method returns undefined.\n     */\n    const isRoot = this._host.menuStack.peek() === undefined;\n    setTimeout(() => {\n      // our menu trigger directive leaves the last position used for use immediately after opening\n      // we can access it here and determine the correct side.\n      // eslint-disable-next-line\n      const ps = (this._host as any)._parentTrigger._spartanLastPosition;\n      if (!ps) {\n        // if we have no last position we default to the most likely option\n        // I hate that we have to do this and hope we can revisit soon and improve\n        this._side.set(isRoot ? 'top' : 'left');\n        return;\n      }\n      const side = isRoot\n        ? ps.originY\n        : ps.originX === 'end'\n          ? 'right'\n          : 'left';\n      this._side.set(side);\n    });\n  }\n}\n","import { type BooleanInput } from '@angular/cdk/coercion';\nimport { CdkMenuItemCheckbox } from '@angular/cdk/menu';\nimport { Directive, booleanAttribute, inject, input } from '@angular/core';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: '[hlmDropdownMenuCheckbox]',\n  hostDirectives: [\n    {\n      directive: CdkMenuItemCheckbox,\n      inputs: ['cdkMenuItemDisabled: disabled', 'cdkMenuItemChecked: checked'],\n      outputs: ['cdkMenuItemTriggered: triggered'],\n    },\n  ],\n  host: {\n    'data-slot': 'dropdown-menu-checkbox-item',\n    '[attr.data-disabled]': 'disabled() ? \"\" : null',\n    '[attr.data-checked]': 'checked() ? \"\" : null',\n  },\n})\nexport class HlmDropdownMenuCheckbox {\n  private readonly _cdkMenuItem = inject(CdkMenuItemCheckbox);\n  public readonly checked = input<boolean, BooleanInput>(\n    this._cdkMenuItem.checked,\n    { transform: booleanAttribute }\n  );\n  public readonly disabled = input<boolean, BooleanInput>(\n    this._cdkMenuItem.disabled,\n    { transform: booleanAttribute }\n  );\n\n  constructor() {\n    classes(\n      () =>\n        'hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground group relative flex w-full cursor-default items-center rounded-sm py-1.5 pr-2 pl-8 text-sm transition-colors outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50'\n    );\n  }\n}\n","import { NgIcon, provideIcons } from '@ng-icons/core';\nimport { lucideCheck } from '@ng-icons/lucide';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { classes } from '../utils';\n\n@Component({\n  selector: 'hlm-dropdown-menu-checkbox-indicator',\n  imports: [NgIcon],\n  providers: [provideIcons({ lucideCheck })],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: ` <ng-icon class=\"text-base\" name=\"lucideCheck\" /> `,\n})\nexport class HlmDropdownMenuCheckboxIndicator {\n  constructor() {\n    classes(\n      () =>\n        'pointer-events-none absolute left-2 flex size-3.5 items-center justify-center opacity-0 group-data-[checked]:opacity-100'\n    );\n  }\n}\n","import { CdkMenuGroup } from '@angular/cdk/menu';\nimport { Directive } from '@angular/core';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: '[hlmDropdownMenuGroup],hlm-dropdown-menu-group',\n  hostDirectives: [CdkMenuGroup],\n  host: {\n    'data-slot': 'dropdown-menu-group',\n  },\n})\nexport class HlmDropdownMenuGroup {\n  constructor() {\n    classes(() => 'block');\n  }\n}\n","import { type BooleanInput } from '@angular/cdk/coercion';\nimport { CdkMenuItem } from '@angular/cdk/menu';\nimport { Directive, booleanAttribute, input } from '@angular/core';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: 'button[hlmDropdownMenuItem]',\n  hostDirectives: [\n    {\n      directive: CdkMenuItem,\n      inputs: ['cdkMenuItemDisabled: disabled'],\n      outputs: ['cdkMenuItemTriggered: triggered'],\n    },\n  ],\n  host: {\n    'data-slot': 'dropdown-menu-item',\n    '[disabled]': 'disabled() || null',\n    '[attr.data-disabled]': 'disabled() ? \"\" : null',\n    '[attr.data-variant]': 'variant()',\n    '[attr.data-inset]': 'inset() ? \"\" : null',\n  },\n})\nexport class HlmDropdownMenuItem {\n  public readonly disabled = input<boolean, BooleanInput>(false, {\n    transform: booleanAttribute,\n  });\n\n  public readonly variant = input<'default' | 'destructive'>('default');\n\n  public readonly inset = input<boolean, BooleanInput>(false, {\n    transform: booleanAttribute,\n  });\n\n  constructor() {\n    classes(\n      () =>\n        \"hover:bg-accent focus-visible:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[ng-icon]:!text-destructive [&_ng-icon:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_ng-icon]:pointer-events-none [&_ng-icon]:shrink-0 [&_svg:not([class*='text-'])]:text-base\"\n    );\n  }\n}\n","import { NgIcon, provideIcons } from '@ng-icons/core';\nimport { lucideChevronRight } from '@ng-icons/lucide';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { classes } from '../utils';\n\n@Component({\n  selector: 'hlm-dropdown-menu-item-sub-indicator',\n  imports: [NgIcon],\n  providers: [provideIcons({ lucideChevronRight })],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: ` <ng-icon name=\"lucideChevronRight\" class=\"text-base\" /> `,\n})\nexport class HlmDropdownMenuItemSubIndicator {\n  constructor() {\n    classes(() => 'ml-auto size-4');\n  }\n}\n","import { type BooleanInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, input } from '@angular/core';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: '[hlmDropdownMenuLabel],hlm-dropdown-menu-label',\n  host: {\n    'data-slot': 'dropdown-menu-label',\n    '[attr.data-inset]': 'inset() ? \"\" : null',\n  },\n})\nexport class HlmDropdownMenuLabel {\n  constructor() {\n    classes(() => 'block px-2 py-1.5 text-sm font-medium data-[inset]:pl-8');\n  }\n\n  public readonly inset = input<boolean, BooleanInput>(false, {\n    transform: booleanAttribute,\n  });\n}\n","import { type BooleanInput } from '@angular/cdk/coercion';\nimport { CdkMenuItemRadio } from '@angular/cdk/menu';\nimport { Directive, booleanAttribute, inject, input } from '@angular/core';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: '[hlmDropdownMenuRadio]',\n  hostDirectives: [\n    {\n      directive: CdkMenuItemRadio,\n      inputs: ['cdkMenuItemDisabled: disabled', 'cdkMenuItemChecked: checked'],\n      outputs: ['cdkMenuItemTriggered: triggered'],\n    },\n  ],\n  host: {\n    'data-slot': 'dropdown-menu-radio-item',\n    '[attr.data-disabled]': 'disabled() ? \"\" : null',\n    '[attr.data-checked]': 'checked() ? \"\" : null',\n  },\n})\nexport class HlmDropdownMenuRadio {\n  private readonly _cdkMenuItem = inject(CdkMenuItemRadio);\n  public readonly checked = input<boolean, BooleanInput>(\n    this._cdkMenuItem.checked,\n    { transform: booleanAttribute }\n  );\n  public readonly disabled = input<boolean, BooleanInput>(\n    this._cdkMenuItem.disabled,\n    { transform: booleanAttribute }\n  );\n\n  constructor() {\n    classes(\n      () =>\n        'hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground group relative flex w-full cursor-default items-center rounded-sm py-1.5 pr-2 pl-8 text-sm transition-colors outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50'\n    );\n  }\n}\n","import { NgIcon, provideIcons } from '@ng-icons/core';\nimport { lucideCircle } from '@ng-icons/lucide';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { classes } from '../utils';\n\n@Component({\n  selector: 'hlm-dropdown-menu-radio-indicator',\n  imports: [NgIcon],\n  providers: [provideIcons({ lucideCircle })],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <ng-icon name=\"lucideCircle\" class=\"text-[0.5rem] *:[svg]:fill-current\" />\n  `,\n})\nexport class HlmDropdownMenuRadioIndicator {\n  constructor() {\n    classes(\n      () =>\n        'pointer-events-none absolute left-2 flex size-3.5 items-center justify-center opacity-0 group-data-[checked]:opacity-100'\n    );\n  }\n}\n","import { Directive } from '@angular/core';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: '[hlmDropdownMenuSeparator],hlm-dropdown-menu-separator',\n  host: {\n    'data-slot': 'dropdown-menu-separator',\n  },\n})\nexport class HlmDropdownMenuSeparator {\n  constructor() {\n    classes(() => 'bg-border -mx-1 my-1 block h-px');\n  }\n}\n","import { Directive } from '@angular/core';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: '[hlmDropdownMenuShortcut],hlm-dropdown-menu-shortcut',\n  host: {\n    'data-slot': 'dropdown-menu-shortcut',\n  },\n})\nexport class HlmDropdownMenuShortcut {\n  constructor() {\n    classes(() => 'text-muted-foreground ml-auto text-xs tracking-widest');\n  }\n}\n","import { CdkMenu } from '@angular/cdk/menu';\nimport { Directive, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: '[hlmDropdownMenuSub],hlm-dropdown-menu-sub',\n  hostDirectives: [CdkMenu],\n  host: {\n    'data-slot': 'dropdown-menu-sub',\n    '[attr.data-state]': '_state()',\n    '[attr.data-side]': '_side()',\n  },\n})\nexport class HlmDropdownMenuSub {\n  private readonly _host = inject(CdkMenu);\n\n  protected readonly _state = signal('open');\n  protected readonly _side = signal('top');\n\n  constructor() {\n    this.setSideWithDarkMagic();\n    // this is a best effort, but does not seem to work currently\n    // TODO: figure out a way for us to know the host is about to be closed. might not be possible with CDK\n    this._host.closed\n      .pipe(takeUntilDestroyed())\n      .subscribe(() => this._state.set('closed'));\n\n    classes(\n      () =>\n        'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-top overflow-hidden rounded-md border p-1 shadow-lg'\n    );\n  }\n\n  private setSideWithDarkMagic() {\n    /**\n     * This is an ugly workaround to at least figure out the correct side of where a submenu\n     * will appear and set the attribute to the host accordingly\n     *\n     * First of all we take advantage of the menu stack not being aware of the root\n     * object immediately after it is added. This code executes before the root element is added,\n     * which means the stack is still empty and the peek method returns undefined.\n     */\n    const isRoot = this._host.menuStack.peek() === undefined;\n    setTimeout(() => {\n      // our menu trigger directive leaves the last position used for use immediately after opening\n      // we can access it here and determine the correct side.\n      // eslint-disable-next-line\n      const ps = (this._host as any)._parentTrigger._spartanLastPosition;\n      if (!ps) {\n        // if we have no last position we default to the most likely option\n        // I hate that we have to do this and hope we can revisit soon and improve\n        this._side.set(isRoot ? 'top' : 'left');\n        return;\n      }\n      const side = isRoot\n        ? ps.originY\n        : ps.originX === 'end'\n          ? 'right'\n          : 'left';\n      this._side.set(side);\n    });\n  }\n}\n","import { InjectionToken, type ValueProvider, inject } from '@angular/core';\nimport { type MenuAlign, type MenuSide } from '@spartan-ng/brain/core';\n\nexport interface HlmDropdownMenuConfig {\n  align: MenuAlign;\n  side: MenuSide;\n}\n\nconst defaultConfig: HlmDropdownMenuConfig = {\n  align: 'start',\n  side: 'bottom',\n};\n\nconst HlmDropdownMenuConfigToken = new InjectionToken<HlmDropdownMenuConfig>(\n  'HlmDropdownMenuConfig'\n);\n\nexport function provideHlmDropdownMenuConfig(\n  config: Partial<HlmDropdownMenuConfig>\n): ValueProvider {\n  return {\n    provide: HlmDropdownMenuConfigToken,\n    useValue: { ...defaultConfig, ...config },\n  };\n}\n\nexport function injectHlmDropdownMenuConfig(): HlmDropdownMenuConfig {\n  return (\n    inject(HlmDropdownMenuConfigToken, { optional: true }) ?? defaultConfig\n  );\n}\n","import { CdkMenuTrigger } from '@angular/cdk/menu';\nimport { Directive, computed, effect, inject, input } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n  type MenuAlign,\n  type MenuSide,\n  createMenuPosition,\n} from '@spartan-ng/brain/core';\nimport { injectHlmDropdownMenuConfig } from './hlm-dropdown-menu-token';\n\n@Directive({\n  selector: '[hlmDropdownMenuTrigger]',\n  hostDirectives: [\n    {\n      directive: CdkMenuTrigger,\n      inputs: [\n        'cdkMenuTriggerFor: hlmDropdownMenuTrigger',\n        'cdkMenuTriggerData: hlmDropdownMenuTriggerData',\n      ],\n      outputs: [\n        'cdkMenuOpened: hlmDropdownMenuOpened',\n        'cdkMenuClosed: hlmDropdownMenuClosed',\n      ],\n    },\n  ],\n  host: {\n    'data-slot': 'dropdown-menu-trigger',\n  },\n})\nexport class HlmDropdownMenuTrigger {\n  private readonly _cdkTrigger = inject(CdkMenuTrigger, { host: true });\n  private readonly _config = injectHlmDropdownMenuConfig();\n\n  public readonly align = input<MenuAlign>(this._config.align);\n  public readonly side = input<MenuSide>(this._config.side);\n\n  private readonly _menuPosition = computed(() =>\n    createMenuPosition(this.align(), this.side())\n  );\n\n  constructor() {\n    // once the trigger opens we wait until the next tick and then grab the last position\n    // used to position the menu. we store this in our trigger which the brnMenu directive has\n    // access to through DI\n    this._cdkTrigger.opened.pipe(takeUntilDestroyed()).subscribe(() =>\n      setTimeout(\n        () =>\n          // eslint-disable-next-line\n          ((this._cdkTrigger as any)._spartanLastPosition = (\n            this._cdkTrigger as any\n          ).overlayRef._positionStrategy._lastPosition)\n      )\n    );\n\n    effect(() => {\n      this._cdkTrigger.menuPosition = this._menuPosition();\n    });\n  }\n}\n","import { HlmDropdownMenu } from './hlm-dropdown-menu';\nimport { HlmDropdownMenuCheckbox } from './hlm-dropdown-menu-checkbox';\nimport { HlmDropdownMenuCheckboxIndicator } from './hlm-dropdown-menu-checkbox-indicator';\nimport { HlmDropdownMenuGroup } from './hlm-dropdown-menu-group';\nimport { HlmDropdownMenuItem } from './hlm-dropdown-menu-item';\nimport { HlmDropdownMenuItemSubIndicator } from './hlm-dropdown-menu-item-sub-indicator';\nimport { HlmDropdownMenuLabel } from './hlm-dropdown-menu-label';\nimport { HlmDropdownMenuRadio } from './hlm-dropdown-menu-radio';\nimport { HlmDropdownMenuRadioIndicator } from './hlm-dropdown-menu-radio-indicator';\nimport { HlmDropdownMenuSeparator } from './hlm-dropdown-menu-separator';\nimport { HlmDropdownMenuShortcut } from './hlm-dropdown-menu-shortcut';\nimport { HlmDropdownMenuSub } from './hlm-dropdown-menu-sub';\nimport { HlmDropdownMenuTrigger } from './hlm-dropdown-menu-trigger';\n\nexport * from './hlm-dropdown-menu';\nexport * from './hlm-dropdown-menu-checkbox';\nexport * from './hlm-dropdown-menu-checkbox-indicator';\nexport * from './hlm-dropdown-menu-group';\nexport * from './hlm-dropdown-menu-item';\nexport * from './hlm-dropdown-menu-item-sub-indicator';\nexport * from './hlm-dropdown-menu-label';\nexport * from './hlm-dropdown-menu-radio';\nexport * from './hlm-dropdown-menu-radio-indicator';\nexport * from './hlm-dropdown-menu-separator';\nexport * from './hlm-dropdown-menu-shortcut';\nexport * from './hlm-dropdown-menu-sub';\nexport * from './hlm-dropdown-menu-token';\nexport * from './hlm-dropdown-menu-trigger';\n\nexport const HlmDropdownMenuImports = [\n  HlmDropdownMenu,\n  HlmDropdownMenuCheckbox,\n  HlmDropdownMenuCheckboxIndicator,\n  HlmDropdownMenuGroup,\n  HlmDropdownMenuItem,\n  HlmDropdownMenuItemSubIndicator,\n  HlmDropdownMenuLabel,\n  HlmDropdownMenuRadio,\n  HlmDropdownMenuRadioIndicator,\n  HlmDropdownMenuSeparator,\n  HlmDropdownMenuShortcut,\n  HlmDropdownMenuSub,\n  HlmDropdownMenuTrigger,\n] as const;\n","import { Directive } from '@angular/core';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: '[hlmInputGroup],hlm-input-group',\n  host: {\n    'data-slot': 'input-group',\n    role: 'group',\n  },\n})\nexport class HlmInputGroup {\n  constructor() {\n    classes(() => [\n      'group/input-group border-border bg-input relative flex w-full items-center rounded-md border shadow-xs transition-[color,box-shadow] outline-none',\n      'h-9 min-w-0 has-[>textarea]:h-auto',\n      // Variants based on alignment.\n      'has-[>[data-align=inline-start]]:[&>input]:pl-2',\n      'has-[>[data-align=inline-end]]:[&>input]:pr-2',\n      'has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3',\n      'has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3',\n      // Focus state - subtle border change only, no ring\n      'has-[[data-slot=input-group-control]:focus-visible]:border-ring',\n      // Error state.\n      'has-[>.ng-invalid.ng-touched]:ring-destructive/20 has-[>.ng-invalid.ng-touched]:border-destructive dark:has-[>.ng-invalid.ng-touched]:ring-destructive/40',\n    ]);\n  }\n}\n","import { type VariantProps, cva } from 'class-variance-authority';\nimport { Directive, input } from '@angular/core';\nimport { classes } from '../utils';\n\nconst inputGroupAddonVariants = cva(\n  \"text-muted-foreground flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>ng-icon:not([class*='text-'])]:text-base\",\n  {\n    variants: {\n      align: {\n        'inline-start':\n          'order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]',\n        'inline-end':\n          'order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]',\n        'block-start':\n          'order-first w-full justify-start px-3 pt-3 group-has-[>input]/input-group:pt-2.5 [.border-b]:pb-3',\n        'block-end':\n          'order-last w-full justify-start px-3 pb-3 group-has-[>input]/input-group:pb-2.5 [.border-t]:pt-3',\n      },\n    },\n    defaultVariants: {\n      align: 'inline-start',\n    },\n  }\n);\n\ntype InputGroupAddonVariants = VariantProps<typeof inputGroupAddonVariants>;\n\n@Directive({\n  selector: 'hlm-input-group-addon,[hlmInputGroupAddon]',\n  host: {\n    role: 'group',\n    'data-slot': 'input-group-addon',\n    '[attr.data-align]': 'align()',\n  },\n})\nexport class HlmInputGroupAddon {\n  public readonly align =\n    input<InputGroupAddonVariants['align']>('inline-start');\n\n  constructor() {\n    classes(() => inputGroupAddonVariants({ align: this.align() }));\n  }\n}\n","import { type VariantProps, cva } from 'class-variance-authority';\nimport { Directive, input } from '@angular/core';\nimport { HlmButton, provideBrnButtonConfig } from '../button';\nimport { classes } from '../utils';\n\nconst inputGroupAddonVariants = cva(\n  'flex items-center gap-2 text-sm shadow-none',\n  {\n    variants: {\n      size: {\n        xs: \"h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-2 has-[>ng-icon]:px-2 [&>ng-icon:not([class*='text-'])]:text-sm\",\n        sm: 'h-8 gap-1.5 rounded-md px-2.5 has-[>ng-icon]:px-2.5',\n        'icon-xs':\n          'size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>ng-icon]:p-0',\n        'icon-sm': 'size-8 p-0 has-[>ng-icon]:p-0',\n      },\n    },\n    defaultVariants: {\n      size: 'xs',\n    },\n  }\n);\n\ntype InputGroupAddonVariants = VariantProps<typeof inputGroupAddonVariants>;\n\n@Directive({\n  selector: 'button[hlmInputGroupButton]',\n  providers: [\n    provideBrnButtonConfig({\n      variant: 'ghost',\n    }),\n  ],\n  hostDirectives: [\n    {\n      directive: HlmButton,\n      inputs: ['variant'],\n    },\n  ],\n  host: {\n    '[attr.data-size]': 'size()',\n    '[type]': 'type()',\n  },\n})\nexport class HlmInputGroupButton {\n  public readonly size = input<InputGroupAddonVariants['size']>('xs');\n  public readonly type = input<'button' | 'submit' | 'reset'>('button');\n\n  constructor() {\n    classes(() => inputGroupAddonVariants({ size: this.size() }));\n  }\n}\n","import { type VariantProps, cva } from 'class-variance-authority';\nimport type { ClassValue } from 'clsx';\nimport {\n  Directive,\n  type DoCheck,\n  Injector,\n  computed,\n  effect,\n  forwardRef,\n  inject,\n  input,\n  linkedSignal,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport { BrnFormFieldControl } from '@spartan-ng/brain/form-field';\nimport { ErrorStateMatcher, ErrorStateTracker } from '@spartan-ng/brain/forms';\nimport { classes } from '../utils';\n\nexport const inputVariants = cva(\n  'file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground bg-input border-border focus-visible:border-ring focus-visible:ring-ring/50 flex h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:ring-[3px] disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n  {\n    variants: {\n      error: {\n        auto: '[&.ng-invalid.ng-touched]:border-destructive [&.ng-invalid.ng-touched]:ring-destructive/20 dark:[&.ng-invalid.ng-touched]:ring-destructive/40',\n        true: 'border-destructive focus-visible:border-destructive focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40',\n      },\n    },\n    defaultVariants: {\n      error: 'auto',\n    },\n  }\n);\ntype InputVariants = VariantProps<typeof inputVariants>;\n\n@Directive({\n  selector: '[hlmInput]',\n  providers: [\n    {\n      provide: BrnFormFieldControl,\n      useExisting: forwardRef(() => HlmInput),\n    },\n  ],\n})\nexport class HlmInput implements BrnFormFieldControl, DoCheck {\n  private readonly _injector = inject(Injector);\n  private readonly _additionalClasses = signal<ClassValue>('');\n\n  private readonly _errorStateTracker: ErrorStateTracker;\n\n  private readonly _defaultErrorStateMatcher = inject(ErrorStateMatcher);\n  private readonly _parentForm = inject(NgForm, { optional: true });\n  private readonly _parentFormGroup = inject(FormGroupDirective, {\n    optional: true,\n  });\n\n  public readonly error = input<InputVariants['error']>('auto');\n\n  protected readonly _state = linkedSignal(() => ({ error: this.error() }));\n\n  public readonly ngControl: NgControl | null = this._injector.get(\n    NgControl,\n    null\n  );\n\n  public readonly errorState = computed(() =>\n    this._errorStateTracker.errorState()\n  );\n\n  constructor() {\n    this._errorStateTracker = new ErrorStateTracker(\n      this._defaultErrorStateMatcher,\n      this.ngControl,\n      this._parentFormGroup,\n      this._parentForm\n    );\n\n    classes(() => [\n      inputVariants({ error: this._state().error }),\n      this._additionalClasses(),\n    ]);\n\n    effect(() => {\n      const error = this._errorStateTracker.errorState();\n      untracked(() => {\n        if (this.ngControl) {\n          const shouldShowError =\n            error &&\n            this.ngControl.invalid &&\n            (this.ngControl.touched || this.ngControl.dirty);\n          this._errorStateTracker.errorState.set(\n            shouldShowError ? true : false\n          );\n          this.setError(shouldShowError ? true : 'auto');\n        }\n      });\n    });\n  }\n\n  ngDoCheck() {\n    this._errorStateTracker.updateErrorState();\n  }\n\n  setError(error: InputVariants['error']) {\n    this._state.set({ error });\n  }\n\n  setClass(classes: string): void {\n    this._additionalClasses.set(classes);\n  }\n}\n","import { HlmInput } from './hlm-input';\n\nexport * from './hlm-input';\n\nexport const HlmInputImports = [HlmInput] as const;\n","import { Directive } from '@angular/core';\nimport { HlmInput } from '../input';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: 'input[hlmInputGroupInput]',\n  hostDirectives: [HlmInput],\n  host: {\n    'data-slot': 'input-group-control',\n  },\n})\nexport class HlmInputGroupInput {\n  constructor() {\n    classes(\n      () =>\n        `flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent`\n    );\n  }\n}\n","import { Directive } from '@angular/core';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: 'span[hlmInputGroupText]',\n})\nexport class HlmInputGroupText {\n  constructor() {\n    classes(\n      () =>\n        `text-muted-foreground flex items-center gap-2 text-sm [&_ng-icon]:pointer-events-none [&_ng-icon:not([class*='text-'])]:text-base`\n    );\n  }\n}\n","import { type VariantProps, cva } from 'class-variance-authority';\nimport { ClassValue } from 'clsx';\nimport {\n  Directive,\n  type DoCheck,\n  Injector,\n  computed,\n  effect,\n  forwardRef,\n  inject,\n  input,\n  linkedSignal,\n  signal,\n  untracked,\n} from '@angular/core';\nimport { FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport { BrnFormFieldControl } from '@spartan-ng/brain/form-field';\nimport { ErrorStateMatcher, ErrorStateTracker } from '@spartan-ng/brain/forms';\nimport { classes } from '../utils';\n\nexport const textareaVariants = cva(\n  'border-border placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 bg-input flex [field-sizing:content] min-h-16 w-full rounded-md border px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n  {\n    variants: {\n      error: {\n        auto: '[&.ng-invalid.ng-touched]:border-destructive [&.ng-invalid.ng-touched]:ring-destructive/20 dark:[&.ng-invalid.ng-touched]:ring-destructive/40',\n        true: 'border-destructive focus-visible:border-destructive focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40',\n      },\n    },\n    defaultVariants: {\n      error: 'auto',\n    },\n  }\n);\ntype TextareaVariants = VariantProps<typeof textareaVariants>;\n\n@Directive({\n  selector: '[hlmTextarea]',\n  providers: [\n    {\n      provide: BrnFormFieldControl,\n      useExisting: forwardRef(() => HlmTextarea),\n    },\n  ],\n  host: {\n    'data-slot': 'textarea',\n  },\n})\nexport class HlmTextarea implements BrnFormFieldControl, DoCheck {\n  private readonly _injector = inject(Injector);\n  private readonly _additionalClasses = signal<ClassValue>('');\n\n  private readonly _errorStateTracker: ErrorStateTracker;\n\n  private readonly _defaultErrorStateMatcher = inject(ErrorStateMatcher);\n  private readonly _parentForm = inject(NgForm, { optional: true });\n  private readonly _parentFormGroup = inject(FormGroupDirective, {\n    optional: true,\n  });\n\n  public readonly error = input<TextareaVariants['error']>('auto');\n\n  protected readonly _state = linkedSignal(() => ({ error: this.error() }));\n\n  public readonly ngControl: NgControl | null = this._injector.get(\n    NgControl,\n    null\n  );\n\n  public readonly errorState = computed(() =>\n    this._errorStateTracker.errorState()\n  );\n\n  constructor() {\n    classes(() => [\n      textareaVariants({ error: this._state().error }),\n      this._additionalClasses(),\n    ]);\n\n    this._errorStateTracker = new ErrorStateTracker(\n      this._defaultErrorStateMatcher,\n      this.ngControl,\n      this._parentFormGroup,\n      this._parentForm\n    );\n\n    effect(() => {\n      const error = this._errorStateTracker.errorState();\n      untracked(() => {\n        if (this.ngControl) {\n          const shouldShowError =\n            error &&\n            this.ngControl.invalid &&\n            (this.ngControl.touched || this.ngControl.dirty);\n          this._errorStateTracker.errorState.set(\n            shouldShowError ? true : false\n          );\n          this.setError(shouldShowError ? true : 'auto');\n        }\n      });\n    });\n  }\n\n  ngDoCheck() {\n    this._errorStateTracker.updateErrorState();\n  }\n\n  public setError(error: TextareaVariants['error']): void {\n    this._state.set({ error });\n  }\n\n  public setClass(classes: string): void {\n    this._additionalClasses.set(classes);\n  }\n}\n","import { HlmTextarea } from './hlm-textarea';\n\nexport * from './hlm-textarea';\n\nexport const HlmTextareaImports = [HlmTextarea] as const;\n","import { Directive } from '@angular/core';\nimport { HlmTextarea } from '../textarea';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: 'textarea[hlmInputGroupTextarea]',\n  hostDirectives: [HlmTextarea],\n  host: {\n    'data-slot': 'input-group-control',\n  },\n})\nexport class HlmInputGroupTextarea {\n  constructor() {\n    classes(\n      () =>\n        'flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent'\n    );\n  }\n}\n","import { HlmInputGroup } from './hlm-input-group';\nimport { HlmInputGroupAddon } from './hlm-input-group-addon';\nimport { HlmInputGroupButton } from './hlm-input-group-button';\nimport { HlmInputGroupInput } from './hlm-input-group-input';\nimport { HlmInputGroupText } from './hlm-input-group-text';\nimport { HlmInputGroupTextarea } from './hlm-input-group-textarea';\n\nexport * from './hlm-input-group';\nexport * from './hlm-input-group-addon';\nexport * from './hlm-input-group-button';\nexport * from './hlm-input-group-input';\nexport * from './hlm-input-group-text';\nexport * from './hlm-input-group-textarea';\n\nexport const HlmInputGroupImports = [\n  HlmInputGroup,\n  HlmInputGroupAddon,\n  HlmInputGroupButton,\n  HlmInputGroupInput,\n  HlmInputGroupText,\n  HlmInputGroupTextarea,\n] as const;\n","import { Directive } from '@angular/core';\nimport { BrnPopover } from '@spartan-ng/brain/popover';\n\n@Directive({\n  selector: '[hlmPopover],hlm-popover',\n  hostDirectives: [\n    {\n      directive: BrnPopover,\n      inputs: [\n        'align',\n        'autoFocus',\n        'closeDelay',\n        'closeOnOutsidePointerEvents',\n        'sideOffset',\n        'state',\n        'offsetX',\n      ],\n      outputs: ['stateChanged', 'closed'],\n    },\n  ],\n})\nexport class HlmPopover {}\n","import {\n  Directive,\n  ElementRef,\n  Renderer2,\n  effect,\n  inject,\n  signal,\n} from '@angular/core';\nimport { injectExposesStateProvider } from '@spartan-ng/brain/core';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: '[hlmPopoverContent],[brnPopoverContent][hlm]',\n})\nexport class HlmPopoverContent {\n  private readonly _stateProvider = injectExposesStateProvider({ host: true });\n  public state = this._stateProvider.state ?? signal('closed');\n  private readonly _renderer = inject(Renderer2);\n  private readonly _element = inject(ElementRef);\n\n  constructor() {\n    effect(() => {\n      this._renderer.setAttribute(\n        this._element.nativeElement,\n        'data-state',\n        this.state()\n      );\n    });\n\n    classes(\n      () =>\n        'border-border bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative w-72 rounded-md border p-4 shadow-md outline-none'\n    );\n  }\n}\n","import { Directive } from '@angular/core';\nimport { BrnPopoverTrigger } from '@spartan-ng/brain/popover';\n\n@Directive({\n  selector: 'button[hlmPopoverTrigger],button[hlmPopoverTriggerFor]',\n  hostDirectives: [\n    {\n      directive: BrnPopoverTrigger,\n      inputs: ['id', 'brnPopoverTriggerFor: hlmPopoverTriggerFor', 'type'],\n    },\n  ],\n  host: {\n    'data-slot': 'popover-trigger',\n  },\n})\nexport class HlmPopoverTrigger {}\n","import { HlmPopover } from './hlm-popover';\nimport { HlmPopoverContent } from './hlm-popover-content';\nimport { HlmPopoverTrigger } from './hlm-popover-trigger';\n\nexport * from './hlm-popover';\nexport * from './hlm-popover-content';\nexport * from './hlm-popover-trigger';\n\nexport const HlmPopoverImports = [\n  HlmPopover,\n  HlmPopoverContent,\n  HlmPopoverTrigger,\n] as const;\n","import { Directive } from '@angular/core';\nimport { classes } from '../utils';\n\n@Directive({\n  selector: 'brn-switch-thumb[hlm],[hlmSwitchThumb]',\n})\nexport class HlmSwitchThumb {\n  constructor() {\n    classes(\n      () =>\n        'bg-background dark:group-data-[state=unchecked]:bg-foreground dark:group-data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform group-data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0'\n    );\n  }\n}\n","import type { ClassValue } from 'clsx';\nimport type { BooleanInput } from '@angular/cdk/coercion';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  booleanAttribute,\n  computed,\n  forwardRef,\n  input,\n  linkedSignal,\n  model,\n  output,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { ChangeFn, TouchFn } from '@spartan-ng/brain/forms';\nimport { BrnSwitch, BrnSwitchThumb } from '@spartan-ng/brain/switch';\nimport { hlm } from '../utils';\nimport { HlmSwitchThumb } from './hlm-switch-thumb';\n\nexport const HLM_SWITCH_VALUE_ACCESSOR = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => HlmSwitch),\n  multi: true,\n};\n\n@Component({\n  selector: 'hlm-switch',\n  imports: [BrnSwitchThumb, BrnSwitch, HlmSwitchThumb],\n  providers: [HLM_SWITCH_VALUE_ACCESSOR],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'contents',\n    '[attr.id]': 'null',\n    '[attr.aria-label]': 'null',\n    '[attr.aria-labelledby]': 'null',\n    '[attr.aria-describedby]': 'null',\n  },\n  template: `\n    <brn-switch\n      [class]=\"_computedClass()\"\n      [checked]=\"checked()\"\n      (checkedChange)=\"handleChange($event)\"\n      (touched)=\"_onTouched?.()\"\n      [disabled]=\"_disabled()\"\n      [id]=\"id()\"\n      [aria-label]=\"ariaLabel()\"\n      [aria-labelledby]=\"ariaLabelledby()\"\n      [aria-describedby]=\"ariaDescribedby()\"\n    >\n      <brn-switch-thumb hlm />\n    </brn-switch>\n  `,\n})\nexport class HlmSwitch implements ControlValueAccessor {\n  public readonly userClass = input<ClassValue>('', { alias: 'class' });\n  protected readonly _computedClass = computed(() =>\n    hlm(\n      'data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 group inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] data-[disabled=true]:cursor-not-allowed data-[disabled=true]:opacity-50',\n      this.userClass()\n    )\n  );\n\n  /** The checked state of the switch. */\n  public readonly checked = model<boolean>(false);\n\n  /** Emits when the checked state of the switch changes. */\n  public readonly checkedChange = output<boolean>();\n\n  /** The disabled state of the switch. */\n  public readonly disabled = input<boolean, BooleanInput>(false, {\n    transform: booleanAttribute,\n  });\n\n  /** Used to set the id on the underlying brn element. */\n  public readonly id = input<string | null>(null);\n\n  /** Used to set the aria-label attribute on the underlying brn element. */\n  public readonly ariaLabel = input<string | null>(null, {\n    alias: 'aria-label',\n  });\n\n  /** Used to set the aria-labelledby attribute on the underlying brn element. */\n  public readonly ariaLabelledby = input<string | null>(null, {\n    alias: 'aria-labelledby',\n  });\n\n  /** Used to set the aria-describedby attribute on the underlying brn element. */\n  public readonly ariaDescribedby = input<string | null>(null, {\n    alias: 'aria-describedby',\n  });\n\n  protected readonly _disabled = linkedSignal(this.disabled);\n\n  protected _onChange?: ChangeFn<boolean>;\n  protected _onTouched?: TouchFn;\n\n  protected handleChange(value: boolean): void {\n    this.checked.set(value);\n    this._onChange?.(value);\n    this.checkedChange.emit(value);\n  }\n\n  /** CONROL VALUE ACCESSOR */\n\n  writeValue(value: boolean): void {\n    this.checked.set(Boolean(value));\n  }\n\n  registerOnChange(fn: ChangeFn<boolean>): void {\n    this._onChange = fn;\n  }\n\n  registerOnTouched(fn: TouchFn): void {\n    this._onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this._disabled.set(isDisabled);\n  }\n}\n","import { HlmSwitch } from './hlm-switch';\nimport { HlmSwitchThumb } from './hlm-switch-thumb';\n\nexport * from './hlm-switch';\nexport * from './hlm-switch-thumb';\n\nexport const HlmSwitchImports = [HlmSwitch, HlmSwitchThumb] as const;\n","import { NgIcon, provideIcons } from '@ng-icons/core';\nimport {\n  lucideArrowUp,\n  lucideAtSign,\n  lucideBlocks,\n  lucideBookOpen,\n  lucideGlobe,\n  lucideLightbulb,\n  lucideMic,\n  lucidePaperclip,\n  lucidePlus,\n  lucideSearch,\n  lucideX,\n} from '@ng-icons/lucide';\nimport { cn } from '@angular-ai-kit/utils';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  PLATFORM_ID,\n  ViewEncapsulation,\n  afterNextRender,\n  computed,\n  inject,\n  input,\n  output,\n  signal,\n  viewChild,\n} from '@angular/core';\nimport { BrnCommandEmpty } from '@spartan-ng/brain/command';\nimport { BrnPopoverImports } from '@spartan-ng/brain/popover';\n// Spartan UI imports from embedded components\nimport { HlmAvatarImports } from '../../../spartan-ui/avatar';\nimport { HlmBadge } from '../../../spartan-ui/badge';\nimport { HlmButton } from '../../../spartan-ui/button';\nimport { HlmCommandImports } from '../../../spartan-ui/command';\nimport { HlmDropdownMenuImports } from '../../../spartan-ui/dropdown-menu';\nimport { HlmIcon } from '../../../spartan-ui/icon';\nimport { HlmInputGroupImports } from '../../../spartan-ui/input-group';\nimport { HlmPopoverImports } from '../../../spartan-ui/popover';\nimport { HlmSwitch } from '../../../spartan-ui/switch';\n// Library components\nimport {\n  PromptSuggestion,\n  PromptSuggestionsComponent,\n  SuggestionsPosition,\n} from '../../chat/prompt-suggestions';\nimport { AttachmentCardComponent } from '../attachment-card';\n\n/**\n * Source option for the sources dropdown\n */\nexport interface SourceOption {\n  value: string;\n  label: string;\n  icon?: string;\n}\n\n/**\n * Model option for the model selector dropdown\n */\nexport interface ModelOption {\n  name: string;\n  badge?: string;\n}\n\n/**\n * Context item for the context/mention dropdown\n */\nexport interface ContextItem {\n  type: 'page' | 'file' | 'user';\n  title: string;\n  icon: string;\n}\n\n/**\n * ChatInputComponent\n *\n * Full-featured chat input with:\n * - Auto-resizing textarea\n * - File attachments with preview\n * - Context/mention popover (@)\n * - Model selector dropdown\n * - Sources dropdown with toggles\n * - Research mode toggle\n * - Voice input button\n * - Prompt suggestions\n *\n * @example\n * ```html\n * <ai-chat-input\n *   [disabled]=\"isLoading()\"\n *   [placeholder]=\"'Type a message...'\"\n *   [suggestions]=\"promptSuggestions\"\n *   (messageSend)=\"handleSend($event)\"\n * />\n * ```\n */\n@Component({\n  selector: 'ai-chat-input',\n  templateUrl: './chat-input.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    HlmButton,\n    HlmInputGroupImports,\n    HlmDropdownMenuImports,\n    HlmCommandImports,\n    HlmPopoverImports,\n    HlmAvatarImports,\n    HlmIcon,\n    HlmBadge,\n    HlmSwitch,\n    NgIcon,\n    BrnPopoverImports,\n    BrnCommandEmpty,\n    PromptSuggestionsComponent,\n    AttachmentCardComponent,\n  ],\n  providers: [\n    provideIcons({\n      lucidePaperclip,\n      lucideArrowUp,\n      lucideGlobe,\n      lucideMic,\n      lucideLightbulb,\n      lucideBlocks,\n      lucideBookOpen,\n      lucidePlus,\n      lucideAtSign,\n      lucideSearch,\n      lucideX,\n    }),\n  ],\n  host: {\n    class: 'ai-chat-input-host block',\n  },\n})\nexport class ChatInputComponent {\n  private platformId = inject(PLATFORM_ID);\n  private textareaRef =\n    viewChild<ElementRef<HTMLTextAreaElement>>('textareaRef');\n\n  // Inputs\n  placeholder = input<string>('Message...');\n  disabled = input<boolean>(false);\n  maxHeight = input<number>(120);\n\n  // Visibility toggles - all default to true\n  showContextButton = input<boolean>(true);\n  showAttachmentButton = input<boolean>(true);\n  showResearchButton = input<boolean>(true);\n  showSourcesButton = input<boolean>(true);\n  showModelName = input<boolean>(true);\n  showMicButton = input<boolean>(true);\n\n  // Suggestions feature (uses library types)\n  suggestions = input<PromptSuggestion[]>([]);\n  showSuggestions = input<boolean>(true);\n  suggestionsPosition = input<SuggestionsPosition>('bottom');\n\n  // Custom classes\n  customClasses = input<string>('');\n\n  // Outputs\n  messageSend = output<string>();\n  inputCleared = output<void>();\n  suggestionSelect = output<PromptSuggestion>();\n\n  // Button action outputs\n  contextClick = output<void>();\n  fileSelect = output<File[]>();\n  researchModeChange = output<boolean>();\n  sourceChange = output<string>();\n  recordingChange = output<boolean>();\n\n  // State\n  inputValue = signal('');\n  attachments = signal<File[]>([]);\n\n  // Button states\n  researchMode = signal(false);\n  isRecording = signal(false);\n  selectedSource = signal('all');\n\n  // Source options (legacy - kept for backward compatibility)\n  readonly sourceOptions: SourceOption[] = [\n    { value: 'all', label: 'All sources' },\n    { value: 'web', label: 'Web only' },\n    { value: 'docs', label: 'Documents' },\n  ];\n\n  // Model options\n  readonly modelOptions: ModelOption[] = [\n    { name: 'Auto' },\n    { name: 'Agent Mode', badge: 'Beta' },\n    { name: 'Plan Mode' },\n  ];\n\n  // Model selection state\n  selectedModel = signal<ModelOption>(this.modelOptions[0]);\n\n  // Sources toggle states\n  webSearchEnabled = signal(true);\n  appsIntegrationsEnabled = signal(true);\n\n  // Context items for the context/mention dropdown\n  readonly contextItems: ContextItem[] = [\n    { type: 'page', title: 'Meeting Notes', icon: '📝' },\n    { type: 'page', title: 'Project Dashboard', icon: '📊' },\n    { type: 'page', title: 'Documentation', icon: '📚' },\n    { type: 'file', title: 'Report.pdf', icon: '📄' },\n    { type: 'file', title: 'Data.csv', icon: '📈' },\n  ];\n\n  // Selected contexts\n  selectedContexts = signal<ContextItem[]>([]);\n\n  // Computed: check if has contexts\n  hasContext = computed(() => this.selectedContexts().length > 0);\n\n  // Computed: check if has attachments\n  hasAttachments = computed(() => this.attachments().length > 0);\n\n  // Computed: available context items (not already selected)\n  availableContextItems = computed(() => {\n    const selected = this.selectedContexts().map((c) => c.title);\n    return this.contextItems.filter((item) => !selected.includes(item.title));\n  });\n\n  // File input ref\n  private fileInputRef = viewChild<ElementRef<HTMLInputElement>>('fileInput');\n\n  // Computed\n  canSend = computed(() => {\n    return this.inputValue().trim().length > 0 && !this.disabled();\n  });\n\n  /** Show suggestions only when input is empty and feature is enabled */\n  suggestionsVisible = computed(() => {\n    return (\n      this.showSuggestions() &&\n      this.suggestions().length > 0 &&\n      this.inputValue().trim().length === 0\n    );\n  });\n\n  constructor() {\n    // Auto-resize textarea after render\n    afterNextRender(() => {\n      this.resizeTextarea();\n    });\n  }\n\n  // Computed classes\n  containerClasses = computed(() => {\n    return cn(\n      'ai-chat-input',\n      'w-full max-w-4xl mx-auto',\n      '-mt-3',\n      'px-4 pb-4',\n      this.customClasses()\n    );\n  });\n\n  // Methods\n  handleInput(event: Event): void {\n    const textarea = event.target as HTMLTextAreaElement;\n    this.inputValue.set(textarea.value);\n    this.resizeTextarea();\n  }\n\n  handleKeydown(event: KeyboardEvent): void {\n    // Enter without Shift sends the message\n    if (event.key === 'Enter' && !event.shiftKey) {\n      event.preventDefault();\n      this.handleSend();\n    }\n    // Escape clears the input\n    if (event.key === 'Escape') {\n      this.handleClear();\n    }\n  }\n\n  /** Clear the input and emit inputCleared event */\n  handleClear(): void {\n    if (this.inputValue().length > 0) {\n      this.inputValue.set('');\n      this.resetTextarea();\n      this.inputCleared.emit();\n    }\n  }\n\n  handleSend(): void {\n    if (!this.canSend()) return;\n\n    const message = this.inputValue().trim();\n    this.messageSend.emit(message);\n    this.inputValue.set('');\n    this.attachments.set([]); // Clear attachments after sending\n    this.resetTextarea();\n  }\n\n  /** Handle suggestion selection from PromptSuggestions component */\n  handleSuggestionSelect(suggestion: PromptSuggestion): void {\n    this.inputValue.set(suggestion.prompt);\n    this.suggestionSelect.emit(suggestion);\n    this.focus();\n    this.resizeTextarea();\n  }\n\n  /**\n   * Focus the textarea\n   */\n  focus(): void {\n    const textarea = this.textareaRef()?.nativeElement;\n    if (textarea) {\n      textarea.focus();\n    }\n  }\n\n  private resizeTextarea(): void {\n    if (!isPlatformBrowser(this.platformId)) return;\n\n    const textarea = this.textareaRef()?.nativeElement;\n    if (!textarea) return;\n\n    // Reset height to auto to get accurate scrollHeight\n    textarea.style.height = 'auto';\n\n    // Set new height, capped at maxHeight\n    const newHeight = Math.min(textarea.scrollHeight, this.maxHeight());\n    textarea.style.height = `${newHeight}px`;\n  }\n\n  private resetTextarea(): void {\n    if (!isPlatformBrowser(this.platformId)) return;\n\n    const textarea = this.textareaRef()?.nativeElement;\n    if (!textarea) return;\n\n    textarea.style.height = 'auto';\n    textarea.value = '';\n  }\n\n  // Button action methods\n\n  /** Trigger file input click */\n  triggerFileInput(): void {\n    this.fileInputRef()?.nativeElement.click();\n  }\n\n  /** Handle file selection */\n  handleFileSelect(event: Event): void {\n    const input = event.target as HTMLInputElement;\n    if (input.files && input.files.length > 0) {\n      const files = Array.from(input.files);\n      // Add to attachments\n      this.attachments.update((current) => [...current, ...files]);\n      this.fileSelect.emit(files);\n      // Reset input so same file can be selected again\n      input.value = '';\n    }\n  }\n\n  /** Toggle research mode */\n  toggleResearch(): void {\n    this.researchMode.update((v) => !v);\n    this.researchModeChange.emit(this.researchMode());\n  }\n\n  /** Select a source option */\n  selectSource(value: string): void {\n    this.selectedSource.set(value);\n    this.sourceChange.emit(value);\n  }\n\n  /** Select a model option */\n  selectModel(model: ModelOption): void {\n    this.selectedModel.set(model);\n  }\n\n  /** Toggle web search */\n  toggleWebSearch(): void {\n    this.webSearchEnabled.update((v) => !v);\n  }\n\n  /** Toggle apps & integrations */\n  toggleAppsIntegrations(): void {\n    this.appsIntegrationsEnabled.update((v) => !v);\n  }\n\n  /** Add a context item */\n  addContext(item: ContextItem): void {\n    this.selectedContexts.update((contexts) => [...contexts, item]);\n  }\n\n  /** Remove a context item */\n  removeContext(item: ContextItem): void {\n    this.selectedContexts.update((contexts) =>\n      contexts.filter((c) => c.title !== item.title)\n    );\n  }\n\n  /** Toggle microphone recording */\n  toggleMic(): void {\n    this.isRecording.update((v) => !v);\n    this.recordingChange.emit(this.isRecording());\n  }\n\n  /** Remove an attachment */\n  removeAttachment(file: File): void {\n    this.attachments.update((attachments) =>\n      attachments.filter((f) => f !== file)\n    );\n  }\n}\n","<div [class]=\"containerClasses()\">\n  <!-- Hidden file input for attachments -->\n  <input\n    #fileInput\n    id=\"ai-chat-file-input\"\n    name=\"ai-chat-file-input\"\n    type=\"file\"\n    multiple\n    accept=\"image/*,.pdf,.doc,.docx,.txt,.csv,.json,.xml\"\n    hidden\n    (change)=\"handleFileSelect($event)\"\n    aria-hidden=\"true\"\n  />\n\n  <!-- Quick Suggestions (top position) -->\n  @if (suggestionsVisible() && suggestionsPosition() === 'top') {\n    <ai-prompt-suggestions\n      [suggestions]=\"suggestions()\"\n      position=\"top\"\n      customClasses=\"mb-3\"\n      (select)=\"handleSuggestionSelect($event)\"\n    />\n  }\n\n  <!-- Main Input Group -->\n  <div hlmInputGroup class=\"rounded-2xl\">\n    <!-- Block-start: Context button with popover -->\n    @if (showContextButton()) {\n      <div hlmInputGroupAddon align=\"block-start\">\n        <hlm-popover sideOffset=\"5\">\n          <button\n            hlmInputGroupButton\n            hlmPopoverTrigger\n            variant=\"outline\"\n            class=\"rounded-full\"\n            [size]=\"hasContext() ? 'icon-sm' : 'sm'\"\n            aria-label=\"Add context\"\n          >\n            <ng-icon hlm name=\"lucideAtSign\" size=\"sm\" />\n            @if (!hasContext()) {\n              <span class=\"hidden sm:inline\">Add context</span>\n            }\n          </button>\n\n          <div\n            hlmPopoverContent\n            class=\"rounded-xl p-0\"\n            *brnPopoverContent=\"let ctx\"\n          >\n            <hlm-command class=\"rounded-2xl\">\n              <hlm-command-search class=\"border-border\">\n                <ng-icon\n                  hlm\n                  name=\"lucideSearch\"\n                  size=\"sm\"\n                  class=\"shrink-0 opacity-50\"\n                />\n                <input\n                  id=\"ai-context-search\"\n                  name=\"ai-context-search\"\n                  type=\"text\"\n                  hlm-command-search-input\n                  placeholder=\"Search pages, files...\"\n                />\n              </hlm-command-search>\n\n              <hlm-command-list>\n                <!-- Pages -->\n                <hlm-command-group id=\"pages\">\n                  <hlm-command-group-label>Pages</hlm-command-group-label>\n                  @for (item of availableContextItems(); track item.title) {\n                    @if (item.type === 'page') {\n                      <button\n                        hlm-command-item\n                        [value]=\"item.title\"\n                        (click)=\"addContext(item); ctx.close()\"\n                      >\n                        <span class=\"mr-2\">{{ item.icon }}</span>\n                        {{ item.title }}\n                      </button>\n                    }\n                  }\n                </hlm-command-group>\n\n                <!-- Files -->\n                <hlm-command-group id=\"files\">\n                  <hlm-command-group-label>Files</hlm-command-group-label>\n                  @for (item of availableContextItems(); track item.title) {\n                    @if (item.type === 'file') {\n                      <button\n                        hlm-command-item\n                        [value]=\"item.title\"\n                        (click)=\"addContext(item); ctx.close()\"\n                      >\n                        <span class=\"mr-2\">{{ item.icon }}</span>\n                        {{ item.title }}\n                      </button>\n                    }\n                  }\n                </hlm-command-group>\n              </hlm-command-list>\n\n              <!-- Empty state -->\n              <div *brnCommandEmpty hlmCommandEmpty>No results found.</div>\n            </hlm-command>\n          </div>\n        </hlm-popover>\n\n        <!-- Selected context badges -->\n        <div class=\"no-scrollbar -m-1.5 flex gap-1 overflow-y-auto p-1.5\">\n          @for (context of selectedContexts(); track context.title) {\n            <button\n              hlmInputGroupButton\n              variant=\"secondary\"\n              class=\"rounded-full\"\n              size=\"sm\"\n              (click)=\"removeContext(context)\"\n            >\n              <span class=\"mr-1\">{{ context.icon }}</span>\n              {{ context.title }}\n              <ng-icon hlm name=\"lucideX\" size=\"sm\" class=\"ml-1\" />\n            </button>\n          }\n        </div>\n      </div>\n    }\n\n    <!-- Attachments Display -->\n    @if (hasAttachments()) {\n      <div hlmInputGroupAddon align=\"block-start\">\n        <div\n          class=\"no-scrollbar -m-2 flex gap-3 overflow-y-auto px-2 pt-2 pb-4\"\n        >\n          @for (file of attachments(); track file.name + file.size) {\n            <ai-attachment-card\n              [file]=\"file\"\n              (remove)=\"removeAttachment(file)\"\n            />\n          }\n        </div>\n      </div>\n    }\n\n    <!-- Textarea -->\n    <textarea\n      hlmInputGroupTextarea\n      #textareaRef\n      id=\"ai-chat-message-input\"\n      name=\"ai-chat-message-input\"\n      class=\"max-h-96\"\n      [placeholder]=\"placeholder()\"\n      [disabled]=\"disabled()\"\n      [value]=\"inputValue()\"\n      (input)=\"handleInput($event)\"\n      (keydown)=\"handleKeydown($event)\"\n      aria-label=\"Message input\"\n      aria-describedby=\"keyboard-hint\"\n    ></textarea>\n    <span id=\"keyboard-hint\" class=\"sr-only\">\n      Press Enter to send, Shift+Enter for new line, Escape to clear\n    </span>\n\n    <!-- Block-end: Toolbar -->\n    <div hlmInputGroupAddon align=\"block-end\" class=\"no-scrollbar gap-1\">\n      <!-- Attachment -->\n      @if (showAttachmentButton()) {\n        <button\n          hlmInputGroupButton\n          class=\"rounded-full\"\n          size=\"icon-sm\"\n          aria-label=\"Attach file\"\n          (click)=\"triggerFileInput()\"\n        >\n          <ng-icon hlm name=\"lucidePaperclip\" size=\"sm\" />\n        </button>\n      }\n\n      <!-- Research toggle - subtle active state -->\n      @if (showResearchButton()) {\n        <button\n          hlmInputGroupButton\n          class=\"data-[active=true]:bg-accent data-[active=true]:text-accent-foreground rounded-full\"\n          size=\"sm\"\n          [attr.data-active]=\"researchMode()\"\n          [attr.aria-pressed]=\"researchMode()\"\n          aria-label=\"Toggle research mode\"\n          (click)=\"toggleResearch()\"\n        >\n          <ng-icon hlm name=\"lucideLightbulb\" size=\"sm\" />\n          <span class=\"hidden sm:inline\">Research</span>\n        </button>\n      }\n\n      <!-- Model selector dropdown -->\n      @if (showModelName()) {\n        <button\n          hlmInputGroupButton\n          class=\"rounded-full\"\n          size=\"sm\"\n          [hlmDropdownMenuTrigger]=\"modelMenu\"\n        >\n          {{ selectedModel().name }}\n        </button>\n        <ng-template #modelMenu>\n          <hlm-dropdown-menu\n            class=\"border-border w-50 rounded-xl **:data-[slot=dropdown-menu-checkbox-item]:rounded-lg\"\n          >\n            <hlm-dropdown-menu-group>\n              <hlm-dropdown-menu-label class=\"text-muted-foreground text-xs\">\n                Select Mode\n              </hlm-dropdown-menu-label>\n              @for (model of modelOptions; track model.name) {\n                <button\n                  hlmDropdownMenuCheckbox\n                  [checked]=\"selectedModel().name === model.name\"\n                  (click)=\"selectModel(model)\"\n                >\n                  <span>{{ model.name }}</span>\n                  @if (model.badge) {\n                    <span\n                      hlmBadge\n                      variant=\"secondary\"\n                      class=\"ml-2 h-5 rounded-sm bg-blue-100 px-1 text-xs text-blue-800 dark:bg-blue-900 dark:text-blue-100\"\n                    >\n                      {{ model.badge }}\n                    </span>\n                  }\n                  <hlm-dropdown-menu-checkbox-indicator />\n                </button>\n              }\n            </hlm-dropdown-menu-group>\n          </hlm-dropdown-menu>\n        </ng-template>\n      }\n\n      <!-- Sources dropdown - icon only on mobile -->\n      @if (showSourcesButton()) {\n        <button\n          hlmInputGroupButton\n          class=\"rounded-full\"\n          size=\"sm\"\n          [hlmDropdownMenuTrigger]=\"sourcesMenu\"\n        >\n          <ng-icon hlm name=\"lucideGlobe\" size=\"sm\" />\n          <span class=\"hidden sm:inline\">All Sources</span>\n        </button>\n        <ng-template #sourcesMenu>\n          <hlm-dropdown-menu\n            class=\"border-border w-75 rounded-xl **:data-[slot=dropdown-menu-item]:rounded-lg\"\n          >\n            <hlm-dropdown-menu-group>\n              <!-- Web Search toggle -->\n              <button hlmDropdownMenuItem (click)=\"$event.stopPropagation()\">\n                <label for=\"web-search\" class=\"flex flex-1 items-center\">\n                  <ng-icon hlm name=\"lucideGlobe\" class=\"mr-2\" size=\"sm\" />\n                  Web Search\n                  <hlm-switch\n                    id=\"web-search\"\n                    class=\"ml-auto\"\n                    [checked]=\"webSearchEnabled()\"\n                    (click)=\"$event.stopPropagation(); toggleWebSearch()\"\n                  />\n                </label>\n              </button>\n            </hlm-dropdown-menu-group>\n            <hlm-dropdown-menu-separator />\n            <hlm-dropdown-menu-group>\n              <!-- Apps & Integrations toggle -->\n              <button hlmDropdownMenuItem (click)=\"$event.stopPropagation()\">\n                <label for=\"app-integrations\" class=\"flex flex-1 items-center\">\n                  <ng-icon hlm name=\"lucideBlocks\" class=\"mr-2\" size=\"sm\" />\n                  Apps and Integrations\n                  <hlm-switch\n                    id=\"app-integrations\"\n                    class=\"ml-auto\"\n                    [checked]=\"appsIntegrationsEnabled()\"\n                    (click)=\"$event.stopPropagation(); toggleAppsIntegrations()\"\n                  />\n                </label>\n              </button>\n              <button hlmDropdownMenuItem>\n                <ng-icon hlm name=\"lucideBookOpen\" size=\"sm\" />\n                Help Center\n              </button>\n            </hlm-dropdown-menu-group>\n            <hlm-dropdown-menu-separator />\n            <hlm-dropdown-menu-group>\n              <button hlmDropdownMenuItem>\n                <ng-icon hlm name=\"lucidePlus\" size=\"sm\" />\n                Connect Apps\n              </button>\n              <hlm-dropdown-menu-label class=\"text-muted-foreground text-xs\">\n                We'll only search in the sources selected here.\n              </hlm-dropdown-menu-label>\n            </hlm-dropdown-menu-group>\n          </hlm-dropdown-menu>\n        </ng-template>\n      }\n\n      <!-- Spacer to push mic and send to right on desktop -->\n      <div class=\"flex-1\"></div>\n\n      <!-- Mic button -->\n      @if (showMicButton()) {\n        <button\n          hlmInputGroupButton\n          class=\"rounded-full\"\n          size=\"icon-sm\"\n          [class.animate-pulse]=\"isRecording()\"\n          [class.text-red-500]=\"isRecording()\"\n          [attr.aria-pressed]=\"isRecording()\"\n          aria-label=\"Voice input\"\n          (click)=\"toggleMic()\"\n        >\n          <ng-icon hlm name=\"lucideMic\" size=\"sm\" />\n        </button>\n      }\n\n      <!-- Send button -->\n      <button\n        hlmInputGroupButton\n        [variant]=\"canSend() ? 'default' : 'secondary'\"\n        class=\"rounded-full\"\n        size=\"icon-sm\"\n        [disabled]=\"!canSend()\"\n        [attr.aria-disabled]=\"!canSend()\"\n        aria-label=\"Send message\"\n        (click)=\"handleSend()\"\n      >\n        <ng-icon hlm name=\"lucideArrowUp\" size=\"sm\" />\n      </button>\n    </div>\n  </div>\n\n  <!-- Quick Suggestions (bottom position) -->\n  @if (suggestionsVisible() && suggestionsPosition() === 'bottom') {\n    <ai-prompt-suggestions\n      [suggestions]=\"suggestions()\"\n      position=\"bottom\"\n      customClasses=\"mt-3\"\n      (select)=\"handleSuggestionSelect($event)\"\n    />\n  }\n</div>\n","/**\n * Input components barrel export\n *\n * @module input\n */\n\nexport * from './attachment-card';\nexport * from './chat-input';\n","/**\n * Components barrel export\n *\n * @module components\n */\n\nexport * from './chat';\nexport * from './display';\nexport * from './input';\nexport * from './ui';\n","/**\n * Copy to Clipboard Directive\n *\n * Copies text to the clipboard when the host element is clicked.\n * Provides keyboard accessibility and visual feedback.\n *\n * @example\n * ```html\n * <button aiCopyToClipboard [text]=\"codeContent\" (copied)=\"onCopied()\">\n *   Copy Code\n * </button>\n * ```\n */\nimport { isPlatformBrowser } from '@angular/common';\nimport { Directive, PLATFORM_ID, inject, input, output } from '@angular/core';\n\n/**\n * Directive for copying text to clipboard\n */\n@Directive({\n  selector: '[aiCopyToClipboard]',\n  host: {\n    '(click)': 'copy()',\n    '(keydown.enter)': 'copy()',\n    '(keydown.space)': 'copy()',\n    '[attr.role]': '\"button\"',\n    '[attr.tabindex]': '0',\n    '[attr.aria-label]': 'ariaLabel()',\n  },\n})\nexport class CopyToClipboardDirective {\n  private platformId = inject(PLATFORM_ID);\n\n  /**\n   * Text to copy to clipboard\n   */\n  text = input.required<string>({\n    alias: 'aiCopyToClipboard',\n  });\n\n  /**\n   * Custom ARIA label\n   * @default 'Copy to clipboard'\n   */\n  ariaLabel = input<string>('Copy to clipboard');\n\n  /**\n   * Emitted when text is successfully copied\n   */\n  copied = output<string>();\n\n  /**\n   * Emitted when copy fails\n   */\n  copyError = output<Error>();\n\n  /**\n   * Copy text to clipboard\n   */\n  async copy(): Promise<void> {\n    if (!isPlatformBrowser(this.platformId)) {\n      return;\n    }\n\n    try {\n      const textToCopy = this.text();\n\n      if (!textToCopy) {\n        throw new Error('No text provided to copy');\n      }\n\n      // Modern Clipboard API\n      if (navigator.clipboard && window.isSecureContext) {\n        await navigator.clipboard.writeText(textToCopy);\n      } else {\n        // Fallback for older browsers\n        this.fallbackCopy(textToCopy);\n      }\n\n      this.copied.emit(textToCopy);\n    } catch (error) {\n      const err =\n        error instanceof Error ? error : new Error('Failed to copy text');\n      this.copyError.emit(err);\n    }\n  }\n\n  /**\n   * Fallback copy method for browsers without Clipboard API\n   */\n  private fallbackCopy(text: string): void {\n    const textarea = document.createElement('textarea');\n    textarea.value = text;\n    textarea.style.position = 'fixed';\n    textarea.style.left = '-999999px';\n    textarea.style.top = '-999999px';\n    document.body.appendChild(textarea);\n    textarea.focus();\n    textarea.select();\n\n    try {\n      const successful = document.execCommand('copy');\n      if (!successful) {\n        throw new Error('Copy command failed');\n      }\n    } finally {\n      document.body.removeChild(textarea);\n    }\n  }\n}\n","/**\n * Barrel export for CopyToClipboard directive\n */\nexport * from './copy-to-clipboard.directive';\n","/**\n * Auto Resize Directive\n *\n * Automatically adjusts textarea height based on content.\n * Supports min/max height constraints and SSR compatibility.\n *\n * @example\n * ```html\n * <textarea\n *   aiAutoResize\n *   [minHeight]=\"60\"\n *   [maxHeight]=\"300\"\n *   placeholder=\"Type your message...\">\n * </textarea>\n * ```\n */\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n  Directive,\n  ElementRef,\n  PLATFORM_ID,\n  Renderer2,\n  afterNextRender,\n  effect,\n  inject,\n  input,\n} from '@angular/core';\n\n/**\n * Directive for auto-resizing textareas\n */\n@Directive({\n  selector: 'textarea[aiAutoResize]',\n  host: {\n    '(input)': 'adjust()',\n    '(focus)': 'adjust()',\n  },\n})\nexport class AutoResizeDirective {\n  private elementRef = inject<ElementRef<HTMLTextAreaElement>>(ElementRef);\n  private renderer = inject(Renderer2);\n  private platformId = inject(PLATFORM_ID);\n\n  /**\n   * Minimum height in pixels\n   * @default 60\n   */\n  minHeight = input<number>(60);\n\n  /**\n   * Maximum height in pixels\n   * @default Infinity\n   */\n  maxHeight = input<number>(Infinity);\n\n  /**\n   * Additional offset for height calculation\n   * @default 0\n   */\n  offset = input<number>(0);\n\n  constructor() {\n    // Initial adjustment after render\n    afterNextRender(() => {\n      this.adjust();\n    });\n\n    // Adjust when min/max height changes\n    effect(() => {\n      this.minHeight();\n      this.maxHeight();\n      this.adjust();\n    });\n  }\n\n  /**\n   * Adjust the textarea height based on content\n   */\n  adjust(): void {\n    if (!isPlatformBrowser(this.platformId)) {\n      return;\n    }\n\n    const textarea = this.elementRef.nativeElement;\n    const minH = this.minHeight();\n    const maxH = this.maxHeight();\n    const offset = this.offset();\n\n    // Reset height to recalculate\n    this.renderer.setStyle(textarea, 'height', 'auto');\n    this.renderer.setStyle(textarea, 'overflow-y', 'hidden');\n\n    // Calculate new height\n    const scrollHeight = textarea.scrollHeight + offset;\n    let newHeight = scrollHeight;\n\n    // Apply min/max constraints\n    if (newHeight < minH) {\n      newHeight = minH;\n    } else if (newHeight > maxH) {\n      newHeight = maxH;\n      this.renderer.setStyle(textarea, 'overflow-y', 'auto');\n    }\n\n    // Set the new height\n    this.renderer.setStyle(textarea, 'height', `${newHeight}px`);\n  }\n}\n","/**\n * Barrel export for AutoResize directive\n */\nexport * from './auto-resize.directive';\n","/**\n * Click Outside Directive\n *\n * Detects clicks outside the host element.\n * Useful for closing dropdowns, modals, and popups.\n *\n * @example\n * ```html\n * <div aiClickOutside (clickOutside)=\"closeDropdown()\">\n *   <!-- Dropdown content -->\n * </div>\n * ```\n */\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n  DestroyRef,\n  Directive,\n  ElementRef,\n  PLATFORM_ID,\n  afterNextRender,\n  inject,\n  input,\n  output,\n  signal,\n} from '@angular/core';\n\n/**\n * Directive for detecting clicks outside an element\n */\n@Directive({\n  selector: '[aiClickOutside]',\n})\nexport class ClickOutsideDirective {\n  private elementRef = inject(ElementRef);\n  private platformId = inject(PLATFORM_ID);\n  private document = inject(DOCUMENT);\n  private destroyRef = inject(DestroyRef);\n\n  private isEnabled = signal(true);\n  private clickHandler?: (event: Event) => void;\n\n  /**\n   * Whether the directive is enabled\n   * @default true\n   */\n  enabled = input(true);\n\n  /**\n   * Elements to exclude from outside click detection\n   * Clicks on these elements will not trigger the output\n   */\n  exclude = input<HTMLElement[]>([]);\n\n  /**\n   * Emitted when a click outside the element is detected\n   */\n  clickOutside = output<MouseEvent>();\n\n  constructor() {\n    afterNextRender(() => {\n      if (isPlatformBrowser(this.platformId)) {\n        this.setupListener();\n      }\n    });\n\n    // Cleanup on destroy\n    this.destroyRef.onDestroy(() => {\n      this.removeListener();\n    });\n  }\n\n  /**\n   * Setup the click listener\n   */\n  private setupListener(): void {\n    // Store handler reference for proper cleanup\n    this.clickHandler = (event: Event) => {\n      const mouseEvent = event as MouseEvent;\n      const enabled = this.enabled();\n\n      if (!enabled) {\n        return;\n      }\n\n      const clickedInside = this.elementRef.nativeElement.contains(\n        mouseEvent.target\n      );\n\n      if (clickedInside) {\n        return;\n      }\n\n      // Check excluded elements\n      const excludedElements = this.exclude();\n      const clickedOnExcluded = excludedElements.some((element) =>\n        element?.contains(mouseEvent.target as Node)\n      );\n\n      if (clickedOnExcluded) {\n        return;\n      }\n\n      this.clickOutside.emit(mouseEvent);\n    };\n\n    this.document.addEventListener('click', this.clickHandler, true);\n  }\n\n  /**\n   * Remove the click listener\n   */\n  private removeListener(): void {\n    if (this.clickHandler && isPlatformBrowser(this.platformId)) {\n      this.document.removeEventListener('click', this.clickHandler, true);\n      this.clickHandler = undefined;\n    }\n  }\n}\n","/**\n * Barrel export for ClickOutside directive\n */\nexport * from './click-outside.directive';\n","/**\n * Focus Trap Directive\n *\n * Traps keyboard focus within an element for accessibility.\n * Essential for modals, dialogs, and popups to maintain focus management.\n *\n * @example\n * ```html\n * <div aiFocusTrap [enabled]=\"isModalOpen\" (focusEscape)=\"closeModal()\">\n *   <!-- Modal content -->\n *   <button #firstFocusable>Cancel</button>\n *   <button>Confirm</button>\n * </div>\n * ```\n */\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n  DestroyRef,\n  Directive,\n  ElementRef,\n  PLATFORM_ID,\n  afterNextRender,\n  effect,\n  inject,\n  input,\n  output,\n} from '@angular/core';\n\n/**\n * Directive for trapping focus within an element\n */\n@Directive({\n  selector: '[aiFocusTrap]',\n  host: {\n    '(keydown.tab)': 'handleTab($event)',\n    '(keydown.escape)': 'handleEscape($event)',\n  },\n})\nexport class FocusTrapDirective {\n  private elementRef = inject(ElementRef);\n  private platformId = inject(PLATFORM_ID);\n  private document = inject(DOCUMENT);\n  private destroyRef = inject(DestroyRef);\n\n  private previousActiveElement: HTMLElement | null = null;\n\n  /**\n   * Whether focus trap is enabled\n   * @default true\n   */\n  enabled = input(true);\n\n  /**\n   * Whether to restore focus to previous element on disable\n   * @default true\n   */\n  restoreFocus = input(true);\n\n  /**\n   * Whether pressing Escape should emit focusEscape event\n   * @default true\n   */\n  enableEscapeKey = input(true);\n\n  /**\n   * Emitted when Escape key is pressed\n   */\n  focusEscape = output<KeyboardEvent>();\n\n  constructor() {\n    afterNextRender(() => {\n      if (isPlatformBrowser(this.platformId)) {\n        this.initialize();\n      }\n    });\n\n    // Watch for enabled changes\n    effect(() => {\n      const enabled = this.enabled();\n      if (enabled && isPlatformBrowser(this.platformId)) {\n        this.activate();\n      } else if (!enabled && this.restoreFocus()) {\n        this.deactivate();\n      }\n    });\n\n    // Cleanup on destroy\n    this.destroyRef.onDestroy(() => {\n      if (this.restoreFocus()) {\n        this.restorePreviousFocus();\n      }\n    });\n  }\n\n  /**\n   * Initialize the focus trap\n   */\n  private initialize(): void {\n    if (this.enabled()) {\n      this.activate();\n    }\n  }\n\n  /**\n   * Activate the focus trap\n   */\n  private activate(): void {\n    // Save current focus\n    this.previousActiveElement = this.document.activeElement as HTMLElement;\n\n    // Focus first focusable element\n    const firstFocusable = this.getFirstFocusableElement();\n    if (firstFocusable) {\n      firstFocusable.focus();\n    }\n  }\n\n  /**\n   * Deactivate the focus trap and restore previous focus\n   */\n  private deactivate(): void {\n    this.restorePreviousFocus();\n  }\n\n  /**\n   * Restore focus to the previously focused element\n   */\n  private restorePreviousFocus(): void {\n    if (this.previousActiveElement && this.previousActiveElement.focus) {\n      this.previousActiveElement.focus();\n      this.previousActiveElement = null;\n    }\n  }\n\n  /**\n   * Handle Tab key navigation\n   */\n  handleTab(event: Event): void {\n    const keyboardEvent = event as KeyboardEvent;\n\n    if (!this.enabled()) {\n      return;\n    }\n\n    const focusableElements = this.getFocusableElements();\n\n    if (focusableElements.length === 0) {\n      keyboardEvent.preventDefault();\n      return;\n    }\n\n    const firstElement = focusableElements[0];\n    const lastElement = focusableElements[focusableElements.length - 1];\n    const activeElement = this.document.activeElement;\n\n    // Shift + Tab (backwards)\n    if (keyboardEvent.shiftKey) {\n      if (activeElement === firstElement) {\n        keyboardEvent.preventDefault();\n        lastElement.focus();\n      }\n    } else {\n      // Tab (forwards)\n      if (activeElement === lastElement) {\n        keyboardEvent.preventDefault();\n        firstElement.focus();\n      }\n    }\n  }\n\n  /**\n   * Handle Escape key\n   */\n  handleEscape(event: Event): void {\n    const keyboardEvent = event as KeyboardEvent;\n\n    if (this.enabled() && this.enableEscapeKey()) {\n      this.focusEscape.emit(keyboardEvent);\n    }\n  }\n\n  /**\n   * Get all focusable elements within the container\n   */\n  private getFocusableElements(): HTMLElement[] {\n    const focusableSelectors = [\n      'a[href]',\n      'button:not([disabled])',\n      'textarea:not([disabled])',\n      'input:not([disabled])',\n      'select:not([disabled])',\n      '[tabindex]:not([tabindex=\"-1\"])',\n      '[contenteditable=\"true\"]',\n    ].join(', ');\n\n    const elements = Array.from(\n      this.elementRef.nativeElement.querySelectorAll(focusableSelectors)\n    ) as HTMLElement[];\n\n    return elements.filter((el) => this.isVisible(el));\n  }\n\n  /**\n   * Get the first focusable element\n   */\n  private getFirstFocusableElement(): HTMLElement | null {\n    const elements = this.getFocusableElements();\n    return elements.length > 0 ? elements[0] : null;\n  }\n\n  /**\n   * Check if an element is visible\n   */\n  private isVisible(element: HTMLElement): boolean {\n    return !!(\n      element.offsetWidth ||\n      element.offsetHeight ||\n      element.getClientRects().length\n    );\n  }\n}\n","/**\n * Barrel export for FocusTrap directive\n */\nexport * from './focus-trap.directive';\n","/**\n * Barrel export for all directives\n */\nexport * from './copy-to-clipboard';\nexport * from './auto-resize';\nexport * from './click-outside';\nexport * from './focus-trap';\n","import hljs from 'highlight.js';\nimport { Injectable } from '@angular/core';\n\n/**\n * Code highlighting result\n */\nexport interface HighlightResult {\n  /** The highlighted HTML string */\n  value: string;\n  /** The detected or specified language */\n  language: string;\n}\n\n/**\n * Code Highlighting Service\n *\n * Provides consistent syntax highlighting across the library using highlight.js.\n * Includes enhanced support for Angular template syntax.\n *\n * Features:\n * - Syntax highlighting for 190+ languages via highlight.js\n * - Enhanced Angular template syntax highlighting\n * - Support for Angular property bindings `[prop]`\n * - Support for Angular event bindings `(event)`\n * - Support for Angular two-way bindings `[(ngModel)]`\n * - Support for Angular control flow syntax `@if`, `@for`, `@switch`, `@defer`\n *\n * @example\n * ```typescript\n * const result = this.codeHighlightService.highlight(code, 'typescript');\n * // Or with auto-detection\n * const result = this.codeHighlightService.highlight(code);\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class CodeHighlightService {\n  /**\n   * Language aliases for common shorthand names\n   */\n  private readonly languageAliases: Record<string, string> = {\n    js: 'javascript',\n    ts: 'typescript',\n    py: 'python',\n    rb: 'ruby',\n    sh: 'bash',\n    yml: 'yaml',\n    md: 'markdown',\n    angular: 'xml', // Angular templates use XML-like syntax\n    ng: 'xml',\n  };\n\n  /**\n   * Get display name for a language\n   */\n  getDisplayLanguage(lang: string): string {\n    const displayMap: Record<string, string> = {\n      js: 'javascript',\n      ts: 'typescript',\n      py: 'python',\n      rb: 'ruby',\n      sh: 'bash',\n      yml: 'yaml',\n      md: 'markdown',\n      plaintext: 'text',\n      angular: 'angular',\n      ng: 'angular',\n      xml: 'html',\n    };\n    return displayMap[lang] || lang;\n  }\n\n  /**\n   * Resolve language alias to actual highlight.js language\n   */\n  private resolveLanguage(lang: string): string {\n    return this.languageAliases[lang.toLowerCase()] || lang;\n  }\n\n  /**\n   * Highlight code with syntax highlighting\n   *\n   * @param code - The source code to highlight\n   * @param language - Optional language identifier (auto-detects if not provided)\n   * @returns HighlightResult with highlighted HTML and detected language\n   */\n  highlight(code: string, language?: string): HighlightResult {\n    if (!code) {\n      return { value: '', language: language || 'plaintext' };\n    }\n\n    const resolvedLang = language ? this.resolveLanguage(language) : undefined;\n    let result: HighlightResult;\n\n    try {\n      if (resolvedLang && hljs.getLanguage(resolvedLang)) {\n        const highlighted = hljs.highlight(code, { language: resolvedLang });\n        result = {\n          value: highlighted.value,\n          language: language || resolvedLang,\n        };\n      } else {\n        const highlighted = hljs.highlightAuto(code);\n        result = {\n          value: highlighted.value,\n          language: highlighted.language || 'plaintext',\n        };\n      }\n    } catch {\n      result = {\n        value: this.escapeHtml(code),\n        language: language || 'plaintext',\n      };\n    }\n\n    // Note: Angular-specific syntax enhancement is available but disabled by default\n    // to maintain consistent simple highlighting. Enable if needed:\n    // if (this.isAngularTemplate(language)) {\n    //   result.value = this.enhanceAngularSyntax(result.value);\n    // }\n\n    return result;\n  }\n\n  /**\n   * Check if the language is an Angular template\n   */\n  private isAngularTemplate(language?: string): boolean {\n    if (!language) return false;\n    const angularLangs = ['html', 'xml', 'angular', 'ng', 'htm'];\n    return angularLangs.includes(language.toLowerCase());\n  }\n\n  /**\n   * Enhance highlighted HTML with Angular-specific syntax highlighting\n   *\n   * This post-processes the highlight.js output to add classes for:\n   * - Property bindings: [property]\n   * - Event bindings: (event)\n   * - Two-way bindings: [(ngModel)]\n   * - Control flow: @if, @for, @switch, @defer, @let\n   * - Template references: #ref\n   *\n   * Note: highlight.js outputs HTML like:\n   *   [<span class=\"hljs-attr\">property</span>]=\"value\"\n   * So we need to match around the existing hljs spans.\n   */\n  private enhanceAngularSyntax(html: string): string {\n    // Two-way bindings: [(ngModel)]=\"value\" - must be processed FIRST\n    // Pattern: [(<span class=\"hljs-attr\">name</span>)]\n    html = html.replace(\n      /\\[\\(<span class=\"hljs-attr\">([^<]+)<\\/span>\\)\\]/g,\n      '<span class=\"hljs-ng-binding\">[(</span><span class=\"hljs-ng-twoway\">$1</span><span class=\"hljs-ng-binding\">)]</span>'\n    );\n\n    // Property bindings: [property]=\"value\"\n    // Pattern: [<span class=\"hljs-attr\">property</span>]\n    html = html.replace(\n      /\\[<span class=\"hljs-attr\">([^<]+)<\\/span>\\]/g,\n      '<span class=\"hljs-ng-binding\">[</span><span class=\"hljs-ng-property\">$1</span><span class=\"hljs-ng-binding\">]</span>'\n    );\n\n    // Event bindings: (event)=\"handler\"\n    // Pattern: (<span class=\"hljs-attr\">event</span>)\n    html = html.replace(\n      /\\(<span class=\"hljs-attr\">([^<]+)<\\/span>\\)/g,\n      '<span class=\"hljs-ng-binding\">(</span><span class=\"hljs-ng-event\">$1</span><span class=\"hljs-ng-binding\">)</span>'\n    );\n\n    // Control flow: @if, @for, @switch, @defer, @let, @else, @empty, @case, @default, @placeholder, @loading, @error\n    html = html.replace(\n      /(@)(if|for|switch|defer|let|else|empty|case|default|placeholder|loading|error)\\b/g,\n      '<span class=\"hljs-ng-control\">$1$2</span>'\n    );\n\n    // Template reference variables: #ref (outside of hljs spans)\n    html = html.replace(\n      /(#)([a-zA-Z][a-zA-Z0-9_]*)\\b/g,\n      '<span class=\"hljs-ng-ref\">$1$2</span>'\n    );\n\n    // Structural directives: *ngIf, *ngFor (legacy)\n    // Pattern: *<span class=\"hljs-attr\">ngIf</span> or just *ngIf\n    html = html.replace(\n      /\\*<span class=\"hljs-attr\">([^<]+)<\\/span>/g,\n      '<span class=\"hljs-ng-structural\">*$1</span>'\n    );\n    html = html.replace(\n      /(\\*)(ng[A-Za-z]+)\\b/g,\n      '<span class=\"hljs-ng-structural\">$1$2</span>'\n    );\n\n    return html;\n  }\n\n  /**\n   * Escape HTML special characters\n   */\n  escapeHtml(text: string): string {\n    return text\n      .replace(/&/g, '&amp;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;')\n      .replace(/\"/g, '&quot;')\n      .replace(/'/g, '&#039;');\n  }\n\n  /**\n   * Check if a language is supported by highlight.js\n   */\n  isLanguageSupported(language: string): boolean {\n    const resolved = this.resolveLanguage(language);\n    return !!hljs.getLanguage(resolved);\n  }\n\n  /**\n   * Get list of all supported languages\n   */\n  getSupportedLanguages(): string[] {\n    return hljs.listLanguages();\n  }\n}\n","/**\n * Angular AI Kit - Dependency Injection Tokens\n *\n * These injection tokens provide extensibility points for services and configuration.\n * They allow users to provide their own implementations without modifying the library.\n */\nimport { InjectionToken } from '@angular/core';\nimport type { MarkdownOptions, ThemeConfig } from '../types';\n\n/**\n * Abstract ChatService interface for type safety\n */\nexport interface ChatService {\n  /**\n   * Send a message to the chat service\n   */\n  sendMessage(content: string): Promise<string>;\n\n  /**\n   * Get chat history\n   */\n  getHistory(): Promise<Array<{ role: string; content: string }>>;\n\n  /**\n   * Clear chat history\n   */\n  clearHistory(): void;\n}\n\n/**\n * Abstract StreamingService interface for type safety\n */\nexport interface StreamingService {\n  /**\n   * Stream a response from the AI service\n   */\n  stream(content: string): AsyncIterableIterator<string>;\n\n  /**\n   * Stop the current stream\n   */\n  stop(): void;\n}\n\n/**\n * Token counter function type\n */\nexport type TokenCounterFn = (text: string, model?: string) => number;\n\n/**\n * Injection token for chat service\n *\n * @example\n * ```typescript\n * // Provide a custom chat service\n * {\n *   provide: CHAT_SERVICE,\n *   useClass: MyChatService\n * }\n * ```\n */\nexport const CHAT_SERVICE = new InjectionToken<ChatService>('CHAT_SERVICE', {\n  providedIn: 'root',\n  factory: () => {\n    throw new Error(\n      'CHAT_SERVICE not provided. Please provide a ChatService implementation.'\n    );\n  },\n});\n\n/**\n * Injection token for streaming service\n *\n * @example\n * ```typescript\n * // Provide a custom streaming service\n * {\n *   provide: STREAMING_SERVICE,\n *   useClass: MyStreamingService\n * }\n * ```\n */\nexport const STREAMING_SERVICE = new InjectionToken<StreamingService>(\n  'STREAMING_SERVICE',\n  {\n    providedIn: 'root',\n    factory: () => {\n      throw new Error(\n        'STREAMING_SERVICE not provided. Please provide a StreamingService implementation.'\n      );\n    },\n  }\n);\n\n/**\n * Injection token for token counter utility\n *\n * @example\n * ```typescript\n * // Provide a custom token counter\n * {\n *   provide: TOKEN_COUNTER,\n *   useValue: (text: string) => Math.ceil(text.length / 4)\n * }\n * ```\n */\nexport const TOKEN_COUNTER = new InjectionToken<TokenCounterFn>(\n  'TOKEN_COUNTER',\n  {\n    providedIn: 'root',\n    factory: () => {\n      // Default implementation: approximate GPT tokens (1 token ≈ 4 characters)\n      return (text: string) => Math.ceil(text.length / 4);\n    },\n  }\n);\n\n/**\n * Injection token for markdown options\n *\n * @example\n * ```typescript\n * // Provide custom markdown options\n * {\n *   provide: MARKDOWN_OPTIONS,\n *   useValue: {\n *     breaks: true,\n *     gfm: true,\n *     sanitize: true\n *   }\n * }\n * ```\n */\nexport const MARKDOWN_OPTIONS = new InjectionToken<MarkdownOptions>(\n  'MARKDOWN_OPTIONS',\n  {\n    providedIn: 'root',\n    factory: () => ({\n      breaks: true,\n      gfm: true,\n      sanitize: true,\n      highlight: true,\n    }),\n  }\n);\n\n/**\n * Injection token for theme configuration\n *\n * @example\n * ```typescript\n * // Provide custom theme config\n * {\n *   provide: THEME_CONFIG,\n *   useValue: {\n *     mode: 'dark',\n *     customColors: {\n *       primary: { 500: '#3b82f6' }\n *     }\n *   }\n * }\n * ```\n */\nexport const THEME_CONFIG = new InjectionToken<ThemeConfig>('THEME_CONFIG', {\n  providedIn: 'root',\n  factory: () => ({\n    mode: 'auto',\n  }),\n});\n","/**\n * Barrel export for DI tokens\n */\nexport * from './di-tokens';\n","/**\n * Angular AI Kit - Chat Message Types\n */\n\n/**\n * Chat message role\n */\nexport type ChatRole = 'user' | 'assistant' | 'system';\n\n/**\n * Message status\n */\nexport type MessageStatus =\n  | 'pending'\n  | 'sent'\n  | 'delivered'\n  | 'failed'\n  | 'streaming';\n\n/**\n * Base message interface\n */\nexport interface BaseMessage {\n  id: string;\n  content: string;\n  timestamp: Date;\n  status?: MessageStatus;\n}\n\n/**\n * User message\n */\nexport interface UserMessage extends BaseMessage {\n  role: 'user';\n  attachments?: File[];\n}\n\n/**\n * Assistant message\n */\nexport interface AssistantMessage extends BaseMessage {\n  role: 'assistant';\n  model?: string;\n  tokenCount?: number;\n  finishReason?: 'stop' | 'length' | 'content_filter' | 'tool_calls';\n}\n\n/**\n * System message\n */\nexport interface SystemMessage extends BaseMessage {\n  role: 'system';\n  priority?: 'low' | 'normal' | 'high';\n}\n\n/**\n * Discriminated union of all message types\n */\nexport type ChatMessage = UserMessage | AssistantMessage | SystemMessage;\n\n/**\n * Message metadata\n */\nexport interface MessageMetadata {\n  conversationId?: string;\n  parentMessageId?: string;\n  edited?: boolean;\n  editedAt?: Date;\n  retryCount?: number;\n}\n\n/**\n * Extended chat message with metadata\n */\nexport type ExtendedChatMessage = ChatMessage & {\n  metadata?: MessageMetadata;\n};\n\n/**\n * Type guard for user message\n */\nexport function isUserMessage(message: ChatMessage): message is UserMessage {\n  return message.role === 'user';\n}\n\n/**\n * Type guard for assistant message\n */\nexport function isAssistantMessage(\n  message: ChatMessage\n): message is AssistantMessage {\n  return message.role === 'assistant';\n}\n\n/**\n * Type guard for system message\n */\nexport function isSystemMessage(\n  message: ChatMessage\n): message is SystemMessage {\n  return message.role === 'system';\n}\n","/**\n * Angular AI Kit - Streaming Types\n */\n\n/**\n * Streaming state\n */\nexport type StreamingState =\n  | 'idle'\n  | 'connecting'\n  | 'streaming'\n  | 'completed'\n  | 'error';\n\n/**\n * Streaming status interface\n */\nexport interface StreamingStatus {\n  state: StreamingState;\n  progress?: number;\n  bytesReceived?: number;\n  error?: Error;\n}\n\n/**\n * Streaming options\n */\nexport interface StreamingOptions {\n  /**\n   * Speed of the typewriter effect in milliseconds per character\n   * @default 30\n   */\n  speed?: number;\n\n  /**\n   * Whether to show cursor while streaming\n   * @default true\n   */\n  showCursor?: boolean;\n\n  /**\n   * Cursor character\n   * @default '▊'\n   */\n  cursorChar?: string;\n\n  /**\n   * Whether to enable streaming\n   * @default true\n   */\n  enabled?: boolean;\n\n  /**\n   * Callback when streaming starts\n   */\n  onStart?: () => void;\n\n  /**\n   * Callback for each chunk received\n   */\n  onChunk?: (chunk: string) => void;\n\n  /**\n   * Callback when streaming completes\n   */\n  onComplete?: (fullContent: string) => void;\n\n  /**\n   * Callback when streaming errors\n   */\n  onError?: (error: Error) => void;\n}\n\n/**\n * Streaming chunk\n */\nexport interface StreamingChunk {\n  content: string;\n  index: number;\n  isComplete: boolean;\n}\n\n/**\n * Stream event types\n */\nexport type StreamEventType = 'start' | 'chunk' | 'complete' | 'error';\n\n/**\n * Stream event\n */\nexport interface StreamEvent {\n  type: StreamEventType;\n  data?: unknown;\n  timestamp: Date;\n}\n","/**\n * Angular AI Kit - Model Types\n */\n\n/**\n * AI Model information\n */\nexport interface ModelInfo {\n  /**\n   * Unique model identifier\n   */\n  id: string;\n\n  /**\n   * Display name of the model\n   */\n  name: string;\n\n  /**\n   * Model provider (e.g., 'openai', 'anthropic', 'google')\n   */\n  provider?: string;\n\n  /**\n   * Context window size in tokens\n   */\n  contextWindow: number;\n\n  /**\n   * Maximum output tokens\n   */\n  maxTokens: number;\n\n  /**\n   * Whether the model supports streaming\n   * @default false\n   */\n  supportsStreaming?: boolean;\n\n  /**\n   * Model version\n   */\n  version?: string;\n\n  /**\n   * Model description\n   */\n  description?: string;\n\n  /**\n   * Pricing information (cost per 1M tokens)\n   */\n  pricing?: {\n    input: number;\n    output: number;\n  };\n}\n\n/**\n * Model configuration\n */\nexport interface ModelConfig {\n  /**\n   * The model to use\n   */\n  model: string;\n\n  /**\n   * Temperature (0-2)\n   * @default 1\n   */\n  temperature?: number;\n\n  /**\n   * Top P (0-1)\n   * @default 1\n   */\n  topP?: number;\n\n  /**\n   * Maximum tokens to generate\n   */\n  maxTokens?: number;\n\n  /**\n   * Stop sequences\n   */\n  stop?: string[];\n\n  /**\n   * Presence penalty (-2 to 2)\n   * @default 0\n   */\n  presencePenalty?: number;\n\n  /**\n   * Frequency penalty (-2 to 2)\n   * @default 0\n   */\n  frequencyPenalty?: number;\n\n  /**\n   * Whether to stream responses\n   * @default false\n   */\n  stream?: boolean;\n}\n\n/**\n * Model capabilities\n */\nexport interface ModelCapabilities {\n  /**\n   * Supports function calling\n   */\n  functionCalling?: boolean;\n\n  /**\n   * Supports vision (image inputs)\n   */\n  vision?: boolean;\n\n  /**\n   * Supports audio\n   */\n  audio?: boolean;\n\n  /**\n   * Supports code generation\n   */\n  codeGeneration?: boolean;\n\n  /**\n   * Supports JSON mode\n   */\n  jsonMode?: boolean;\n}\n\n/**\n * Extended model info with capabilities\n */\nexport interface ExtendedModelInfo extends ModelInfo {\n  capabilities?: ModelCapabilities;\n}\n","/**\n * Angular AI Kit - Markdown Types\n */\n\n/**\n * Markdown rendering options\n */\nexport interface MarkdownOptions {\n  /**\n   * Enable GFM (GitHub Flavored Markdown)\n   * @default true\n   */\n  gfm?: boolean;\n\n  /**\n   * Enable line breaks\n   * @default true\n   */\n  breaks?: boolean;\n\n  /**\n   * Sanitize HTML output for security\n   * @default true\n   */\n  sanitize?: boolean;\n\n  /**\n   * Enable syntax highlighting for code blocks\n   * @default true\n   */\n  highlight?: boolean;\n\n  /**\n   * Custom highlight function\n   */\n  highlightFn?: (code: string, lang: string) => string;\n\n  /**\n   * Base URL for relative links\n   */\n  baseUrl?: string;\n\n  /**\n   * Custom renderer options\n   */\n  renderer?: {\n    /**\n     * Custom heading renderer\n     */\n    heading?: (text: string, level: number) => string;\n\n    /**\n     * Custom link renderer\n     */\n    link?: (href: string, title: string, text: string) => string;\n\n    /**\n     * Custom image renderer\n     */\n    image?: (href: string, title: string, text: string) => string;\n\n    /**\n     * Custom code renderer\n     */\n    code?: (code: string, language: string) => string;\n  };\n}\n\n/**\n * Markdown parse result\n */\nexport interface MarkdownParseResult {\n  /**\n   * Rendered HTML\n   */\n  html: string;\n\n  /**\n   * Extracted metadata (frontmatter)\n   */\n  metadata?: Record<string, unknown>;\n\n  /**\n   * Table of contents\n   */\n  toc?: Array<{\n    level: number;\n    text: string;\n    id: string;\n  }>;\n}\n","/**\n * Barrel export for all types\n */\nexport * from './chat-message.types';\nexport * from './streaming.types';\nexport * from './model.types';\nexport * from './markdown.types';\nexport * from './theme.types';\n","/**\n * Angular AI Kit - Public API\n */\n\n// Components\nexport * from './lib/components';\n\n// Directives\nexport * from './lib/directives';\n\n// Services\nexport * from './lib/services';\n\n// DI Tokens\nexport * from './lib/tokens';\n\n// Types\nexport * from './lib/types';\n\n// Icons\nexport * from './lib/icons';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["defaultConfig","i1","i1.HlmButton","inputGroupAddonVariants","i1.HlmInput","i1.HlmTextarea","i1.HlmInputGroup","i2.HlmInputGroupAddon","i3.HlmInputGroupButton","i4.HlmInputGroupTextarea","i5.HlmDropdownMenu","i6.HlmDropdownMenuCheckbox","i7.HlmDropdownMenuCheckboxIndicator","i8.HlmDropdownMenuGroup","i9.HlmDropdownMenuItem","i10.HlmDropdownMenuLabel","i11.HlmDropdownMenuSeparator","i12.HlmDropdownMenuTrigger","i13.HlmCommand","i14.HlmCommandItem","i15.HlmCommandGroup","i16.HlmCommandList","i17.HlmCommandSearchInput","i18.HlmCommandSearch","i19.HlmCommandGroupLabel","i20.HlmCommandEmpty","i21.HlmPopover","i22.HlmPopoverContent","i23.HlmPopoverTrigger","i24"],"mappings":"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"}