{"version":3,"file":"max-agent-ui.mjs","sources":["../../../projects/max-agent-ui/src/lib/components/assistant/assistant-conversation-state.ts","../../../projects/max-agent-ui/src/lib/config/assistant-bootstrap.config.ts","../../../projects/max-agent-ui/src/lib/config/assistant.config.ts","../../../projects/max-agent-ui/src/lib/config/assistant-endpoint.config.ts","../../../projects/max-agent-ui/src/lib/components/assistant/max-assistant.service.ts","../../../projects/max-agent-ui/src/lib/constants/icons.constant.ts","../../../projects/max-agent-ui/src/lib/components/usage/max-agent-usage.component.ts","../../../projects/max-agent-ui/src/lib/components/assistant/max-assistant-feedback.service.ts","../../../projects/max-agent-ui/src/lib/components/assistant/max-assistant-export.service.ts","../../../projects/max-agent-ui/src/lib/components/assistant/max-assistant-support.service.ts","../../../projects/max-agent-ui/src/lib/components/assistant/max-assistant-markdown.pipe.ts","../../../projects/max-agent-ui/src/lib/components/shift-card/max-agent-shift-card.component.ts","../../../projects/max-agent-ui/src/lib/components/shift-card/max-agent-shift-card.component.html","../../../projects/max-agent-ui/src/lib/components/person/max-agent-person.component.ts","../../../projects/max-agent-ui/src/lib/components/entity-option/max-agent-entity-option.component.ts","../../../projects/max-agent-ui/src/lib/components/entity-option/max-agent-entity-option.component.html","../../../projects/max-agent-ui/src/lib/components/person/person-presentation.ts","../../../projects/max-agent-ui/src/lib/components/capabilities/max-agent-capability-card.component.ts","../../../projects/max-agent-ui/src/lib/components/capabilities/max-agent-capabilities.component.ts","../../../projects/max-agent-ui/src/lib/components/capabilities/max-agent-capabilities.component.html","../../../projects/max-agent-ui/src/lib/components/assistant/max-assistant.component.ts","../../../projects/max-agent-ui/src/lib/components/assistant/max-assistant.component.html","../../../projects/max-agent-ui/src/public-api.ts","../../../projects/max-agent-ui/src/max-agent-ui.ts"],"sourcesContent":["import { Subject } from 'rxjs';\nimport type { AssistantChatResponse, AssistantConversationMessage } from '../../models/assistant.models';\n\n/** Owned by one assistant component. Never persists, shares across tabs, or decodes signed state. */\nexport class AssistantConversationState {\n  readonly resetRequests = new Subject<void>();\n  token?: string;\n  private identity?: string;\n\n  reset(): void {\n    this.resetRequests.next();\n    this.token = undefined;\n  }\n\n  accept(response: AssistantChatResponse): void {\n    this.token = response.conversationState?.length && response.conversationState.length <= 250_000\n      ? response.conversationState : undefined;\n  }\n\n  changedIdentity(identity: string): boolean {\n    const changed = this.identity !== undefined && this.identity !== identity;\n    this.identity = identity;\n    return changed;\n  }\n\n  history(messages: AssistantConversationMessage[], question = ''): AssistantConversationMessage[] {\n    let candidates = messages.slice(-8);\n    if (question && messages.length > 8) {\n      const ignored = new Set(['show', 'tell', 'what', 'that', 'this', 'with', 'from', 'have', 'were', 'many', 'about', 'please']);\n      const words = [...new Set(question.toLowerCase().match(/[\\p{L}\\p{N}]{4,}/gu) ?? [])].filter(word => !ignored.has(word));\n      const older = messages.slice(0, -4).map((message, index) => ({ message, index,\n        score: message.role === 'user' ? words.filter(word => message.content.toLowerCase().includes(word)).length : 0\n      })).filter(item => item.score > 0).sort((a, b) => b.score - a.score || b.index - a.index).slice(0, 2).sort((a, b) => a.index - b.index);\n      if (older.length) candidates = [...older.flatMap(item => messages.slice(item.index,\n        messages[item.index + 1]?.role === 'assistant' ? item.index + 2 : item.index + 1)), ...messages.slice(-4)];\n    }\n    const encoder = new TextEncoder();\n    let remaining = 8_000;\n    return candidates.reverse().flatMap(message => {\n      let content = '';\n      let bytes = 0;\n      for (const character of message.content) {\n        const size = encoder.encode(character).length;\n        if (bytes + size > Math.min(3_000, remaining)) break;\n        content += character;\n        bytes += size;\n      }\n      remaining -= bytes;\n      return content ? [{ ...message, content }] : [];\n    }).reverse();\n  }\n}\n","import { AssistantProduct } from '../models/assistant.models';\n\nexport interface AssistantBootstrapConfig {\n  initialMessage?: string;\n  initialDescription?: string;\n  initialSuggestions: string[];\n}\nconst INITIAL_MESSAGE = 'Hi! 👋';\nconst INITIAL_DESCRIPTION =\n  \"I'm here to help. Whether you need information, want to complete a task, or just have a question, let me know and we'll get started.\\n\\nI'm still in my early days and learning every day. If I can't do something just yet, I hope you'll bear with me—I'll always do my best to help.\\n\\nWhat would you like to do today?\";\n\nconst DEFAULT_ASSISTANT_BOOTSTRAP: AssistantBootstrapConfig = {\n  initialMessage: undefined,\n  initialSuggestions: []\n};\n\nconst ASSISTANT_BOOTSTRAP_BY_APP: Record<string, AssistantBootstrapConfig> = {\n  cortex: {\n    initialMessage: INITIAL_MESSAGE,\n    initialDescription: INITIAL_DESCRIPTION,\n    initialSuggestions: []\n  },\n  nemesys: {\n    initialMessage: INITIAL_MESSAGE,\n    initialDescription: INITIAL_DESCRIPTION,\n    initialSuggestions: []\n  },\n  attendance: {\n    initialMessage: INITIAL_MESSAGE,\n    initialDescription: INITIAL_DESCRIPTION,\n    initialSuggestions: []\n  }\n};\n\nexport function getAssistantBootstrapConfig(app?: AssistantProduct): AssistantBootstrapConfig {\n  const appKey = app?.trim().toLowerCase();\n\n  if (!appKey) {\n    return DEFAULT_ASSISTANT_BOOTSTRAP;\n  }\n\n  return ASSISTANT_BOOTSTRAP_BY_APP[appKey] ?? DEFAULT_ASSISTANT_BOOTSTRAP;\n}\n","import { InjectionToken } from '@angular/core';\n\nimport {\n  AssistantProduct,\n  AssistantRequestContext,\n  AssistantUser\n} from '../models/assistant.models';\n\nexport interface MaxAssistantConfig {\n  /** Per-request transient state supplied by the assistant, never persisted by the host. */\n  conversationStateVersion?: 1;\n  conversationState?: string;\n  apiBaseUrl?: string;\n  assistantApiUrl?: string;\n  app?: AssistantProduct;\n  user?: Partial<AssistantUser> | (() => Partial<AssistantUser>);\n  context?: Partial<AssistantRequestContext> | (() => Partial<AssistantRequestContext>);\n  requestHeaders?:\n    | Record<string, string>\n    | (() => Record<string, string>);\n}\n\nexport const MAX_ASSISTANT_CONFIG = new InjectionToken<MaxAssistantConfig>(\n  'MAX_ASSISTANT_CONFIG',\n  {\n    factory: () => ({})\n  }\n);\n","import { isDevMode } from '@angular/core';\n\nexport const ASSISTANT_CHAT_ENDPOINTS = {\n  development: '/agent-api/v1/chat',\n  production: 'https://agent.maxtime.cloud/v1/chat'\n} as const;\n\nexport const ASSISTANT_FEEDBACK_ENDPOINTS = {\n  development: '/agent-api/v1/feedback',\n  production: 'https://agent.maxtime.cloud/v1/feedback'\n} as const;\n\nexport function getDefaultAssistantChatUrl(developmentMode = isDevMode()): string {\n  return developmentMode\n    ? ASSISTANT_CHAT_ENDPOINTS.development\n    : ASSISTANT_CHAT_ENDPOINTS.production;\n}\n\nexport function getDefaultAssistantFeedbackUrl(developmentMode = isDevMode()): string {\n  return developmentMode\n    ? ASSISTANT_FEEDBACK_ENDPOINTS.development\n    : ASSISTANT_FEEDBACK_ENDPOINTS.production;\n}\n","import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { Observable, map, throwError } from 'rxjs';\n\nimport { MAX_ASSISTANT_CONFIG, MaxAssistantConfig } from '../../config/assistant.config';\nimport { getDefaultAssistantChatUrl } from '../../config/assistant-endpoint.config';\nimport {\n  AssistantChatRequest,\n  AssistantChatActivity,\n  AssistantChatResponse,\n  AssistantChatStreamEvent,\n  AssistantAnalyticsPage,\n  AssistantConfirmation,\n  AssistantConversationMessage,\n  AssistantProduct,\n  AssistantRequestContext,\n  AssistantStructuredAction,\n  AssistantUser,\n  AssistantUsage\n} from '../../models/assistant.models';\n\nconst DEFAULT_APP = 'cortex';\nconst DEFAULT_TIMEZONE = 'UTC';\nconst STREAM_IDLE_TIMEOUT_MS = 45_000;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class MaxAssistantService {\n  constructor(\n    @Inject(MAX_ASSISTANT_CONFIG) private readonly config: MaxAssistantConfig,\n    @Optional() private readonly http: HttpClient | null\n  ) {}\n\n  getUsage(config: MaxAssistantConfig = {}): Observable<AssistantUsage> {\n    const merged = this.mergeConfig(config);\n    if (!this.http) return throwError(() => new Error('HttpClient is unavailable.'));\n    const chatUrl = this.getChatUrl(merged);\n    const url = chatUrl.replace(/\\/chat\\/?(?:\\?.*)?$/, '/usage');\n    if (url === chatUrl) return throwError(() => new Error('The assistant usage endpoint is unavailable.'));\n    return this.http.get<AssistantUsage>(url, { headers: this.getHeaders(merged) }).pipe(map(value => {\n      if (!value || ![value.aiUsageClient, value.aiUsageUser].every(usage =>\n        typeof usage === 'number' && Number.isSafeInteger(usage) && usage >= 0)) {\n        throw new Error('AI usage is unavailable.');\n      }\n      return { aiUsageClient: value.aiUsageClient, aiUsageUser: value.aiUsageUser };\n    }));\n  }\n\n  sendMessage(\n    message: string,\n    conversationId?: string,\n    config: MaxAssistantConfig = {},\n    confirmation?: AssistantConfirmation,\n    history: AssistantConversationMessage[] = [],\n    onProgress?: (activity: AssistantChatActivity) => void\n  ): Observable<AssistantChatResponse> {\n    const assistantConfig = this.mergeConfig(config);\n    const context = this.getContext(assistantConfig);\n    const user = this.getRequestUser(assistantConfig);\n    const request: AssistantChatRequest = {\n      message,\n      ...(onProgress ? { stream: true } : {}),\n      conversationId,\n      history,\n      app: this.getApp(assistantConfig),\n      ...(user ? { user } : {}),\n      ...(context ? { context } : {}),\n      ...(confirmation ? { confirmation } : {})\n    };\n\n    return this.postMessage(request, assistantConfig, onProgress);\n  }\n\n  confirmAction(\n    actionId: number,\n    decision: AssistantConfirmation['decision'],\n    conversationId: string,\n    config: MaxAssistantConfig = {},\n    history: AssistantConversationMessage[] = []\n  ): Observable<AssistantChatResponse> {\n    return this.sendMessage(\n      decision === 'approve' ? 'Approve action' : 'Reject action',\n      conversationId,\n      config,\n      { actionId, decision },\n      history\n    );\n  }\n\n  sendStructuredAction(\n    message: string,\n    action: AssistantStructuredAction,\n    conversationId?: string,\n    config: MaxAssistantConfig = {},\n    history: AssistantConversationMessage[] = [],\n    onProgress?: (activity: AssistantChatActivity) => void\n  ): Observable<AssistantChatResponse> {\n    const assistantConfig = this.mergeConfig(config);\n    const context = this.getContext(assistantConfig);\n    const user = this.getRequestUser(assistantConfig);\n    const request: AssistantChatRequest = {\n      message,\n      conversationId,\n      history,\n      app: this.getApp(assistantConfig),\n      ...(user ? { user } : {}),\n      ...(context ? { context } : {}),\n      structuredAction: action,\n      ...(onProgress ? { stream: true } : {})\n    };\n\n    return this.postMessage(request, assistantConfig, onProgress);\n  }\n\n  retrieveAnalyticsPage(\n    message: string,\n    analyticsPage: AssistantAnalyticsPage,\n    conversationId?: string,\n    config: MaxAssistantConfig = {},\n    history: AssistantConversationMessage[] = []\n  ): Observable<AssistantChatResponse> {\n    const assistantConfig = this.mergeConfig(config);\n    const context = this.getContext(assistantConfig);\n    const user = this.getRequestUser(assistantConfig);\n    const request: AssistantChatRequest = {\n      message,\n      conversationId,\n      history,\n      app: this.getApp(assistantConfig),\n      ...(user ? { user } : {}),\n      ...(context ? { context } : {}),\n      analyticsPage\n    };\n\n    return this.postMessage(request, assistantConfig);\n  }\n\n  private postMessage(\n    request: AssistantChatRequest,\n    config: MaxAssistantConfig,\n    onProgress?: (activity: AssistantChatActivity) => void\n  ): Observable<AssistantChatResponse> {\n    request = { ...request,\n      ...(config.conversationStateVersion ? { conversationStateVersion: config.conversationStateVersion } : {}),\n      ...(request.conversationId && config.conversationState ? { conversationState: config.conversationState } : {})\n    };\n    if (!this.http) {\n      return throwError(\n        () => new Error('HttpClient is not available. Add provideHttpClient() to the host app.')\n      );\n    }\n\n    if (onProgress) {\n      return this.streamMessage(request, config, onProgress);\n    }\n\n    return this.http.post<AssistantChatResponse>(\n      this.getChatUrl(config),\n      request,\n      { headers: this.getHeaders(config) }\n    );\n  }\n\n  private streamMessage(\n    request: AssistantChatRequest,\n    config: MaxAssistantConfig,\n    onProgress: (activity: AssistantChatActivity) => void\n  ): Observable<AssistantChatResponse> {\n    return new Observable(subscriber => {\n      const controller = new AbortController();\n      const streamError = (message: string, code: string) => new HttpErrorResponse({\n        error: { message, code },\n        status: code === 'request_timeout' ? 504 : code === 'budget_exceeded' ? 429 : 502,\n        url: this.getChatUrl(config)\n      });\n      let idleTimer: ReturnType<typeof setTimeout>;\n      const resetIdleTimer = () => {\n        clearTimeout(idleTimer);\n        idleTimer = setTimeout(() => {\n          subscriber.error(streamError(\n            'This request is taking longer than expected. Please try again.',\n            'request_timeout'\n          ));\n          controller.abort();\n        }, STREAM_IDLE_TIMEOUT_MS);\n      };\n      resetIdleTimer();\n      const headers = this.getHeaders(config);\n      const fetchHeaders = Object.fromEntries(\n        headers.keys().map(name => [name, headers.get(name) ?? ''])\n      );\n\n      void fetch(this.getChatUrl(config), {\n        method: 'POST',\n        headers: fetchHeaders,\n        body: JSON.stringify(request),\n        signal: controller.signal\n      }).then(async response => {\n        if (!response.ok) {\n          const error = await response.json().catch(() => undefined);\n          throw new HttpErrorResponse({\n            error,\n            status: response.status,\n            statusText: response.statusText,\n            url: response.url\n          });\n        }\n\n        if (!response.body) {\n          throw new Error('The assistant response stream was unavailable.');\n        }\n\n        const reader = response.body.getReader();\n        const decoder = new TextDecoder();\n        let buffer = '';\n        let receivedResult = false;\n\n        const processLine = (line: string) => {\n          if (subscriber.closed) return;\n          const trimmedLine = line.trim();\n          if (!trimmedLine) {\n            return;\n          }\n\n          const event = JSON.parse(trimmedLine) as AssistantChatStreamEvent;\n          if (event.type === 'progress') {\n            onProgress(event);\n            return;\n          }\n          if (event.type === 'delta' || event.type === 'data') {\n            onProgress(event);\n            return;\n          }\n          if (event.type === 'error') {\n            throw streamError(event.message, event.code ?? 'request_failed');\n          }\n\n          if (event.type === 'result') {\n            receivedResult = true;\n            subscriber.next(event.response);\n            subscriber.complete();\n          }\n        };\n\n        while (true) {\n          const { done, value } = await reader.read();\n          if (done) {\n            break;\n          }\n\n          resetIdleTimer();\n          buffer += decoder.decode(value, { stream: true });\n          const lines = buffer.split('\\n');\n          buffer = lines.pop() ?? '';\n          lines.forEach(processLine);\n          if (receivedResult || subscriber.closed) {\n            return;\n          }\n        }\n\n        buffer += decoder.decode();\n        processLine(buffer);\n\n        if (!receivedResult) {\n          throw streamError(\n            'The connection was interrupted before the answer was ready. Please try again.',\n            'stream_interrupted'\n          );\n        }\n\n        subscriber.complete();\n      }).catch(error => {\n        if (!subscriber.closed) {\n          subscriber.error(error?.name === 'AbortError'\n            ? streamError(\n                'The connection was interrupted before the answer was ready. Please try again.',\n                'stream_interrupted'\n              )\n            : error);\n        }\n      });\n\n      return () => {\n        clearTimeout(idleTimer);\n        controller.abort();\n      };\n    });\n  }\n\n  private getChatUrl(config: MaxAssistantConfig): string {\n    return config.assistantApiUrl?.trim() || getDefaultAssistantChatUrl();\n  }\n\n  private getApp(config: MaxAssistantConfig): AssistantProduct {\n    return config.app || DEFAULT_APP;\n  }\n\n  private getUser(config: MaxAssistantConfig): AssistantUser {\n    if (typeof config.user === 'function') {\n      return config.user();\n    }\n\n    return config.user ?? {};\n  }\n\n  private getRequestUser(\n    config: MaxAssistantConfig\n  ): Pick<AssistantUser, 'name' | 'username' | 'email'> | undefined {\n    const configuredUser = this.getUser(config);\n    const user = {\n      ...this.getOptionalText('name', configuredUser.name),\n      ...this.getOptionalText('username', configuredUser.username),\n      ...this.getOptionalText('email', configuredUser.email)\n    };\n\n    return Object.keys(user).length > 0 ? user : undefined;\n  }\n\n  private getOptionalText<Key extends 'name' | 'username' | 'email'>(\n    key: Key,\n    value: AssistantUser[Key]\n  ): Partial<Pick<AssistantUser, Key>> {\n    if (typeof value !== 'string' || !value.trim()) {\n      return {};\n    }\n\n    return { [key]: value.trim() } as Partial<Pick<AssistantUser, Key>>;\n  }\n\n  private getContext(config: MaxAssistantConfig): AssistantRequestContext | undefined {\n    const configured = typeof config.context === 'function'\n      ? config.context()\n      : config.context;\n\n    if (!configured) {\n      return undefined;\n    }\n\n    return {\n      permissions: configured.permissions ?? [],\n      timezone: configured.timezone\n        ?? Intl.DateTimeFormat().resolvedOptions().timeZone\n        ?? DEFAULT_TIMEZONE,\n      ...(configured.tenantId ? { tenantId: configured.tenantId } : {}),\n      ...(configured.organisationId\n        ? { organisationId: configured.organisationId }\n        : {}),\n      ...(configured.userId ? { userId: configured.userId } : {}),\n      ...(configured.role ? { role: configured.role } : {}),\n      ...(configured.route ? { route: configured.route } : {}),\n      ...(configured.module ? { module: configured.module } : {})\n    };\n  }\n\n  private getHeaders(config: MaxAssistantConfig): HttpHeaders {\n    const user = this.getUser(config);\n    let headers = new HttpHeaders({ 'Content-Type': 'application/json' });\n    const configuredHeaders = typeof config.requestHeaders === 'function'\n      ? config.requestHeaders()\n      : config.requestHeaders ?? {};\n\n    for (const [name, value] of Object.entries(configuredHeaders)) {\n      const trimmedName = name.trim();\n      const trimmedValue = value.trim();\n\n      if (trimmedName && trimmedValue) {\n        headers = headers.set(trimmedName, trimmedValue);\n      }\n    }\n\n    if (user.token) {\n      headers = headers.set('x-auth-token', String(user.token));\n    }\n\n    if (user.version) {\n      headers = headers.set('x-version', String(user.version));\n    }\n\n    return headers;\n  }\n\n  private compactConfig(config: MaxAssistantConfig): MaxAssistantConfig {\n    return Object.fromEntries(\n      Object.entries(config).filter(([, value]) => value !== undefined)\n    ) as MaxAssistantConfig;\n  }\n\n  private mergeConfig(config: MaxAssistantConfig): MaxAssistantConfig {\n    const merged = {\n      ...this.config,\n      ...this.compactConfig(config)\n    };\n\n    if (config.user === undefined) {\n      return merged;\n    }\n\n    return {\n      ...merged,\n      user: {\n        ...this.getUser(this.config),\n        ...this.getUser(config)\n      }\n    };\n  }\n}\n","export const APP_ICONS = {\n  organisation: 'far fa-building',\n  add: 'far fa-plus',\n  aiAssistant: 'far fa-sparkles',\n  ai: 'far fa-sparkles',\n  account: 'far fa-user',\n  address: 'far fa-map-marked-alt',\n  admin: 'far fa-user-shield',\n  agency: 'far fa-handshake',\n  agencyShift: 'far fa-circle-a',\n  absenceCover: 'far fa-calendar-plus',\n  absenceDemand: 'far fa-calendar-minus',\n  audit: 'far fa-print-search',\n  back: 'far fa-arrow-left',\n  budget: 'far fa-circle-sterling',\n  cancel: 'far fa-times',\n  check: 'far fa-check',\n  close: 'far fa-xmark',\n  configuration: 'far fa-cog',\n  configurationActive: 'far fa-cog',\n  color: 'far fa-palette',\n  comparison: 'far fa-arrow-right',\n  configuredActivity: 'far fa-heart',\n  copy: 'far fa-copy',\n  cut: 'far fa-scissors',\n  database: 'far fa-database',\n  dashboard: 'far fa-objects-column',\n  delete: 'far fa-trash-can',\n  details: 'far fa-circle-info',\n  displayDensity: 'far fa-table-cells',\n  documents: 'far fa-file-lines',\n  drag: 'far fa-grip-dots-vertical',\n  edit: 'far fa-pen-to-square',\n  email: 'far fa-envelope',\n  disabledStatus: 'fas fa-lightbulb app-status-icon',\n  enabledStatus: 'fas fa-lightbulb-on app-status-icon',\n  errorStatus: 'fas fa-circle-exclamation app-status-icon',\n  exportConfig: 'far fa-file-export',\n  exportPdf: 'far fa-file-pdf',\n  exportXlsx: 'far fa-file-excel',\n  expand: 'far fa-chevron-right',\n  exportedStatus: 'fas fa-check-circle app-status-icon',\n  favorite: 'fas fa-star app-favorite-icon',\n  favoriteOutline: 'far fa-star',\n  filter: 'far fa-filter',\n  filteredActivity: 'far fa-user-plus',\n  groupedActivity: 'far fa-clock',\n  fitScreen: 'far fa-expand',\n  folder: 'far fa-folder',\n  folderOpen: 'far fa-folder-open',\n  collapse: 'far fa-chevron-down',\n  next: 'far fa-chevron-right',\n  moveDown: 'far fa-chevron-down',\n  moveUp: 'far fa-chevron-up',\n  nextCaret: 'far fa-caret-right',\n  help: 'far fa-circle-info',\n  headCountAnalysis: 'far fa-pie-chart',\n  history: 'far fa-clock-rotate-left',\n  hoursVariance: 'far fa-arrow-right-arrow-left',\n  holiday: 'far fa-umbrella-beach',\n  holidayScheme: 'far fa-calendar-image',\n  holidayRequest: 'far fa-file-circle-question',\n  hub: 'far fa-wave-pulse',\n  insights: 'far fa-chart-line',\n  issueDetails: 'far fa-file-user',\n  importConfig: 'far fa-file-import',\n  loading: 'far fa-spinner fa-spin',\n  loadingLarge: 'far fa-spinner fa-spin fa-2x',\n  learning: 'far fa-head-side-gear',\n  training: 'far fa-book-open',\n  lock: 'far fa-lock',\n  lockedStatus: 'fas fa-lock app-status-icon',\n  menu: 'far fa-bars',\n  medal: 'fas fa-medal',\n  more: 'far fa-ellipsis',\n  notification: 'far fa-bell',\n  notificationActive: 'far fa-bell-on',\n  openDetails: 'far fa-arrow-up-right-from-square',\n  options: 'far fa-ballot',\n  paste: 'far fa-paste',\n  people: 'far fa-users',\n  person: 'far fa-user',\n  phone: 'far fa-phone',\n  position: 'far fa-briefcase',\n  previousCaret: 'far fa-caret-left',\n  previous: 'far fa-chevron-left',\n  preview: 'far fa-eye',\n  refresh: 'far fa-rotate-right',\n  report: 'far fa-file-chart-column',\n  remove: 'far fa-minus',\n  save: 'far fa-floppy-disk',\n  scheduling: 'far fa-calendar-days',\n  search: 'far fa-magnifying-glass',\n  shiftBidding: 'far fa-hammer',\n  signOut: 'far fa-sign-out',\n  sortAscending: 'far fa-sort-alpha-asc',\n  sortDescending: 'far fa-sort-alpha-desc',\n  successStatus: 'fas fa-circle-check app-status-icon',\n  support: 'far fa-question-circle',\n  systemInformation: 'far fa-info',\n  teams: 'far fa-user-group',\n  timeOff: 'far fa-calendar-xmark',\n  timesheets: 'far fa-calendar-clock',\n  tools: 'far fa-toolbox',\n  toggleDown: 'far fa-angle-down',\n  toggleLeft: 'far fa-angle-left',\n  toggleRight: 'far fa-angle-right',\n  toggleUp: 'far fa-angle-up',\n  unallocated: 'far fa-user-slash',\n  unlock: 'far fa-unlock',\n  unlockedStatus: 'fas fa-unlock app-status-icon',\n  version: 'far fa-code-branch',\n  warningStatus: 'fas fa-triangle-exclamation app-status-icon',\n  unfilledPosition: 'fas fa-triangle-exclamation',\n  workflows: 'far fa-arrow-progress',\n  zoomIn: 'far fa-magnifying-glass-plus',\n  zoomOut: 'far fa-magnifying-glass-minus',\n  build: 'far fa-cube',\n  calendar: 'far fa-calendar',\n  calendarDay: 'far fa-calendar-day',\n  calendarWeek: 'far fa-calendar-week',\n  calculator: 'far fa-calculator',\n  chartBar: 'far fa-chart-column',\n  chartLine: 'far fa-chart-line',\n  chartPie: 'far fa-chart-pie',\n  kpi: 'far fa-gauge-high',\n  run: 'far fa-play',\n  publicHoliday: 'far fa-landmark',\n  break: 'far fa-mug-saucer',\n  breakdown: 'far fa-sort',\n  certificate: 'far fa-certificate',\n  contact: 'far fa-id-card',\n  contactBook: 'far fa-address-book',\n  contract: 'far fa-file-contract',\n  customInsightGroup: 'far fa-wand-magic',\n  department: 'far fa-building',\n  departmentFallback: 'far fa-sitemap',\n  attendanceStatistics: 'far fa-chart-column',\n  integrationGroup: 'far fa-plug',\n  location: 'far fa-location-dot',\n  members: 'far fa-user-group',\n  paid: 'far fa-money-bills-simple',\n  payElement: 'far fa-money-bills-simple',\n  payRule: 'far fa-money-check',\n  payRate: 'far fa-money-bill-alt',\n  paycode: 'far fa-barcode',\n  quantity: 'far fa-hashtag',\n  payExport: 'far fa-file-export',\n  punch: 'far fa-fingerprint',\n  role: 'far fa-user-tag',\n  shift: 'far fa-clock',\n  sickness: 'far fa-heart',\n  task: 'far fa-list-check',\n  templates: 'far fa-table-cells-large',\n  performance: 'far fa-chart-user',\n  discipline: 'far fa-scale-balanced',\n  rightToWork: 'far fa-id-card',\n  tier: 'far fa-layer-group',\n  requirements: 'far fa-star',\n  app: 'far fa-mobile',\n  clockapp: 'far fa-grid',\n  face: 'far fa-face-meh',\n  fingerprint: 'far fa-fingerprint',\n  ibeacon: 'far fa-sensor-on',\n  manual: 'far fa-user',\n  missing: 'far fa-exclamation',\n  mobile: 'far fa-mobile',\n  mobileapp: 'far fa-mobile',\n  nfc: 'far fa-nfc-signal',\n  nfctag: 'far fa-nfc-signal',\n  password: 'far fa-input-text',\n  pin: 'far fa-input-text',\n  pincode: 'far fa-input-text',\n  qr: 'far fa-qrcode',\n  rfid: 'far fa-tags',\n  rfidfob: 'far fa-tags',\n  in: 'far fa-sign-in',\n  out: 'far fa-sign-out',\n  unknown: 'far fa-question',\n  timeline: 'far fa-timeline',\n  profile: 'far fa-circle-user',\n} as const;\n\nexport type AppIcons = typeof APP_ICONS;\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\r\nimport { PopoverModule } from 'primeng/popover';\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { APP_ICONS } from '../../constants/icons.constant';\r\nimport type { AssistantUsage } from '../../models/assistant.models';\r\n\r\n@Component({\r\n  selector: 'max-agent-usage',\r\n  imports: [ButtonModule, PopoverModule, TooltipModule],\r\n  template: `\r\n    <button pButton class=\"usage-trigger\" type=\"button\" [icon]=\"usageIcon\" [text]=\"true\" [rounded]=\"true\" severity=\"secondary\"\n      aria-label=\"Monthly AI usage\" aria-haspopup=\"dialog\" [attr.aria-expanded]=\"panel.overlayVisible\"\r\n      pTooltip=\"Monthly AI usage\" tooltipPosition=\"bottom\" appendTo=\"body\" (click)=\"panel.toggle($event)\"></button>\n    <p-popover #panel appendTo=\"body\" ariaLabel=\"Monthly AI usage\" (onShow)=\"refresh.emit()\">\n      <div class=\"usage-meters\" [attr.aria-busy]=\"loading\">\r\n        @for (meter of meters(); track meter.label) {\r\n          <div class=\"usage-gauge\" role=\"meter\" tabindex=\"0\" [attr.aria-label]=\"description(meter.label, meter.value)\"\r\n            aria-valuemin=\"0\" aria-valuemax=\"100\" [attr.aria-valuenow]=\"meter.value === undefined ? null : gaugeValue(meter.value)\">\n            <div class=\"gauge-artwork\">\n            <svg viewBox=\"0 0 120 80\" aria-hidden=\"true\" focusable=\"false\">\r\n              <defs>\n                <linearGradient [attr.id]=\"meter.id + '-arrow'\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n                  <stop class=\"arrow-blue\" offset=\"0%\" />\n                  <stop class=\"arrow-purple\" offset=\"50%\" />\n                  <stop class=\"arrow-pink\" offset=\"100%\" />\n                </linearGradient>\n                <mask [attr.id]=\"meter.id\">\r\n                  <path d=\"M12 62 A48 48 0 0 1 108 62\" fill=\"none\" stroke=\"white\" stroke-width=\"16\" stroke-linecap=\"round\" />\r\n                </mask>\r\n              </defs>\r\n              <foreignObject x=\"0\" y=\"0\" width=\"120\" height=\"80\" [attr.mask]=\"'url(#' + meter.id + ')'\">\r\n                <div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"gauge-spectrum\"></div>\r\n              </foreignObject>\r\n              @if (meter.value !== undefined) {\r\n                <path class=\"gauge-indicator\" d=\"M9 62 L24 56 L24 68 Z\"\n                  [attr.fill]=\"'url(#' + meter.id + '-arrow)'\"\n                  [attr.transform]=\"'rotate(' + gaugeValue(meter.value) * 1.8 + ' 60 62)'\" />\r\n              }\r\n            </svg>\r\n            <i [class]=\"meter.icon\" class=\"gauge-scope\" aria-hidden=\"true\"></i>\n            </div>\n            @if (meter.value !== undefined) {\n              <div class=\"gauge-value\" aria-hidden=\"true\">{{ meter.value }}%</div>\n            }\n          </div>\r\n        }\r\n      </div>\r\n      @if (loading) { <p role=\"status\">Checking usage...</p> }\r\n      @else if (!usage) { <p role=\"status\">Usage unavailable. Please try again.</p> }\r\n    </p-popover>\r\n  `,\r\n  styleUrl: './max-agent-usage.component.scss'\r\n})\r\nexport class MaxAgentUsageComponent {\n  private static nextId = 0;\r\n  private readonly id = `usage-gauge-${MaxAgentUsageComponent.nextId++}`;\r\n  @Input() usage?: AssistantUsage;\r\n  @Input() loading = false;\n  @Output() refresh = new EventEmitter<void>();\r\n  protected readonly usageIcon = APP_ICONS.kpi;\n  protected gaugeValue(value: number): number { return Math.min(100, Math.max(0, value)); }\r\n  protected meters() {\r\n    return [{ label: 'Your', value: this.usage?.aiUsageUser, icon: APP_ICONS.account, id: this.id + '-user' },\r\n      { label: 'Organisation', value: this.usage?.aiUsageClient, icon: APP_ICONS.organisation, id: this.id + '-organisation' }];\r\n  }\r\n  protected description(label: string, value: number | undefined): string {\r\n    const status = this.loading ? 'Checking usage' : value === undefined ? 'Usage unavailable' : value >= 100 ? 'Usage limit reached' : 'Within your usage allowance';\r\n    return `${label} monthly AI usage: ${status}.`;\r\n  }\r\n}\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\n\nimport { MAX_ASSISTANT_CONFIG, MaxAssistantConfig } from '../../config/assistant.config';\nimport { getDefaultAssistantFeedbackUrl } from '../../config/assistant-endpoint.config';\nimport {\n  AssistantFeedbackRequest,\n  AssistantFeedbackResponse,\n  AssistantUser\n} from '../../models/assistant.models';\n\n@Injectable({ providedIn: 'root' })\nexport class MaxAssistantFeedbackService {\n  readonly endpoint = getDefaultAssistantFeedbackUrl();\n  readonly method = 'POST' as const;\n\n  constructor(\n    @Inject(MAX_ASSISTANT_CONFIG) private readonly config: MaxAssistantConfig,\n    @Optional() private readonly http: HttpClient | null\n  ) {}\n\n  submitFeedback(\n    feedback: AssistantFeedbackRequest,\n    config: MaxAssistantConfig = {}\n  ): Observable<AssistantFeedbackResponse> {\n    if (!this.http) {\n      return throwError(\n        () => new Error('HttpClient is not available. Add provideHttpClient() to the host app.')\n      );\n    }\n\n    const mergedConfig = this.mergeConfig(config);\n    return this.http.post<AssistantFeedbackResponse>(\n      this.getFeedbackUrl(mergedConfig),\n      feedback,\n      { headers: this.getHeaders(mergedConfig) }\n    );\n  }\n\n  private getFeedbackUrl(config: MaxAssistantConfig): string {\n    const configuredChatUrl = config.assistantApiUrl?.trim();\n    return configuredChatUrl\n      ? configuredChatUrl.replace(/\\/chat\\/?$/, '/feedback')\n      : getDefaultAssistantFeedbackUrl();\n  }\n\n  private getHeaders(config: MaxAssistantConfig): HttpHeaders {\n    const user = this.getUser(config);\n    const configuredHeaders = typeof config.requestHeaders === 'function'\n      ? config.requestHeaders()\n      : config.requestHeaders ?? {};\n    let headers = new HttpHeaders({ 'Content-Type': 'application/json' });\n\n    for (const [name, value] of Object.entries(configuredHeaders)) {\n      if (name.trim() && value.trim()) {\n        headers = headers.set(name.trim(), value.trim());\n      }\n    }\n\n    if (user.token) {\n      headers = headers.set('x-auth-token', String(user.token));\n    }\n    if (user.version) {\n      headers = headers.set('x-version', String(user.version));\n    }\n    return headers;\n  }\n\n  private getUser(config: MaxAssistantConfig): AssistantUser {\n    return typeof config.user === 'function' ? config.user() : config.user ?? {};\n  }\n\n  private mergeConfig(config: MaxAssistantConfig): MaxAssistantConfig {\n    const merged = {\n      ...this.config,\n      ...Object.fromEntries(Object.entries(config).filter(([, value]) => value !== undefined))\n    };\n\n    if (config.user === undefined) {\n      return merged;\n    }\n\n    return {\n      ...merged,\n      user: {\n        ...this.getUser(this.config),\n        ...this.getUser(config)\n      }\n    };\n  }\n}\n","import { Injectable } from '@angular/core';\n\nimport {\n  AssistantFieldValue,\n  AssistantResponseTable,\n  AssistantVisualisation,\n} from '../../models/assistant.models';\n\n@Injectable({ providedIn: 'root' })\nexport class MaxAssistantExportService {\n  async exportTableToExcel(table: AssistantResponseTable): Promise<void> {\n    const XLSX = await import('xlsx');\n    const worksheetData = [\n      table.columns.map(column => column.header),\n      ...table.rows.map(row =>\n        table.columns.map(column => this.toExportCellValue(row[column.field]))\n      ),\n    ];\n    const worksheet = XLSX.utils.aoa_to_sheet(worksheetData);\n    const workbook = XLSX.utils.book_new();\n\n    XLSX.utils.book_append_sheet(workbook, worksheet, 'Results');\n    const file = XLSX.write(workbook, {\n      bookType: 'xlsx',\n      compression: true,\n      type: 'array',\n    });\n    this.downloadFile(\n      new Blob([file], {\n        type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n      }),\n      `${this.exportFileName(table.title, 'agent-results')}.xlsx`\n    );\n  }\n\n  async exportVisualisationToPdf(\n    visualisation: AssistantVisualisation,\n    visualisationElement: HTMLElement\n  ): Promise<void> {\n    const canvas = visualisationElement.querySelector('canvas');\n    if (!canvas || !canvas.width || !canvas.height) {\n      throw new Error('The rendered chart is not available for export.');\n    }\n\n    const { jsPDF } = await import('jspdf');\n    const orientation = canvas.width > canvas.height ? 'landscape' : 'portrait';\n    const document = new jsPDF({ format: 'a4', orientation, unit: 'mm' });\n    const pageWidth = document.internal.pageSize.getWidth();\n    const pageHeight = document.internal.pageSize.getHeight();\n    const margin = 16;\n    const contentWidth = pageWidth - (margin * 2);\n    const chartTop = 30;\n    const availableHeight = pageHeight - chartTop - margin;\n    const scale = Math.min(contentWidth / canvas.width, availableHeight / canvas.height);\n    const imageWidth = canvas.width * scale;\n    const imageHeight = canvas.height * scale;\n    const imageX = (pageWidth - imageWidth) / 2;\n    const { Chart } = await import('chart.js');\n    const chart = Chart.getChart(canvas);\n    let chartImage: string;\n\n    if (chart) {\n      const originalPixelRatio = chart.options.devicePixelRatio;\n      // Render fresh chart pixels at 300 DPI; enlarging the screen bitmap blurs labels.\n      const printPixelRatio = Math.ceil((imageWidth / 25.4 * 300) / chart.width);\n      try {\n        chart.options.devicePixelRatio = Math.max(originalPixelRatio ?? 1, printPixelRatio);\n        chart.resize();\n        chart.update('none');\n        chartImage = canvas.toDataURL('image/png', 1);\n      } finally {\n        chart.options.devicePixelRatio = originalPixelRatio;\n        chart.resize();\n        chart.update('none');\n      }\n    } else {\n      chartImage = canvas.toDataURL('image/png', 1);\n    }\n\n    document.setFont('helvetica', 'bold');\n    document.setFontSize(16);\n    document.text(visualisation.title, margin, 20, { maxWidth: contentWidth });\n    document.addImage(\n      chartImage,\n      'PNG',\n      imageX,\n      chartTop,\n      imageWidth,\n      imageHeight,\n      undefined,\n      'FAST'\n    );\n\n    this.downloadFile(\n      new Blob([document.output('arraybuffer')], { type: 'application/pdf' }),\n      `${this.exportFileName(visualisation.title, 'agent-chart')}.pdf`\n    );\n  }\n\n  private toExportCellValue(value: AssistantFieldValue | undefined): string | number | boolean {\n    if (value === null || value === undefined) {\n      return '';\n    }\n\n    if (Array.isArray(value)) {\n      return value.map(item => this.toExportCellValue(item)).join(', ');\n    }\n\n    if (typeof value === 'object') {\n      const preferredValue = value['label'] ?? value['name'] ?? value['code'];\n      return preferredValue === undefined\n        ? JSON.stringify(value)\n        : String(this.toExportCellValue(preferredValue));\n    }\n\n    return value;\n  }\n\n  private exportFileName(title: string | undefined, fallback: string): string {\n    const normalised = (title || fallback)\n      .trim()\n      .toLocaleLowerCase()\n      .replace(/[^a-z0-9]+/g, '-')\n      .replace(/^-+|-+$/g, '');\n\n    return normalised || fallback;\n  }\n\n  private downloadFile(file: Blob, fileName: string): void {\n    const url = URL.createObjectURL(file);\n    const link = document.createElement('a');\n\n    link.href = url;\n    link.download = fileName;\n    link.click();\n    URL.revokeObjectURL(url);\n  }\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { map, Observable, throwError } from 'rxjs';\n\nimport { MAX_ASSISTANT_CONFIG, MaxAssistantConfig } from '../../config/assistant.config';\nimport {\n  AssistantSupportTag,\n  AssistantSelectableEntity,\n  AssistantSupportSeverity,\n  AssistantSupportTicketRequest,\n  AssistantSupportTicketResponse,\n  AssistantUser\n} from '../../models/assistant.models';\n\n@Injectable({ providedIn: 'root' })\nexport class MaxAssistantSupportService {\n  readonly ticketsEndpoint = '/ticket';\n  readonly tagsEndpoint = '/selection/lookup/supportticket/tag';\n  readonly severitiesEndpoint = '/selection/lookup/supportticket/severity';\n\n  constructor(\n    @Inject(MAX_ASSISTANT_CONFIG) private readonly config: MaxAssistantConfig,\n    @Optional() private readonly http: HttpClient | null\n  ) {}\n\n  getSupportTags(): Observable<AssistantSupportTag[]> {\n    if (!this.http) {\n      return throwError(\n        () => new Error('HttpClient is not available. Add provideHttpClient() to the host app.')\n      );\n    }\n\n    return this.http.get<AssistantSelectableEntity[]>(\n      this.getEndpoint(this.tagsEndpoint, this.mergeConfig({})),\n      { headers: this.getHeaders(this.mergeConfig({})) }\n    ).pipe(\n      map(tags => tags.map(tag => ({\n        ...tag,\n        icon: 'pi pi-tag',\n        severity: 'info' as const\n      })))\n    );\n  }\n\n  getSupportSeverities(): Observable<AssistantSupportSeverity[]> {\n    if (!this.http) {\n      return throwError(\n        () => new Error('HttpClient is not available. Add provideHttpClient() to the host app.')\n      );\n    }\n\n    return this.http.get<AssistantSupportSeverity[]>(\n      this.getEndpoint(this.severitiesEndpoint, this.mergeConfig({})),\n      { headers: this.getHeaders(this.mergeConfig({})) }\n    );\n  }\n\n  submitTicket(\n    ticket: AssistantSupportTicketRequest,\n    config: MaxAssistantConfig = {}\n  ): Observable<AssistantSupportTicketResponse> {\n    if (!this.http) {\n      return throwError(\n        () => new Error('HttpClient is not available. Add provideHttpClient() to the host app.')\n      );\n    }\n\n    const mergedConfig = this.mergeConfig(config);\n    const response$ = this.http.post(\n      this.getEndpoint(this.ticketsEndpoint, mergedConfig),\n      {\n        subject: ticket.subject,\n        body: ticket.query,\n        severity: ticket.severity,\n        tags: ticket.tags.map(({ id, label }) => ({ id, label }))\n      },\n      {\n        headers: this.getHeaders(mergedConfig),\n        responseType: 'text'\n      }\n    );\n\n    return response$.pipe(map(response => this.toTicketResponse(response)));\n  }\n\n  private toTicketResponse(_response: string): AssistantSupportTicketResponse {\n    return {\n      success: true,\n      message: 'Your support ticket has been created. You will receive an email with your reference number shortly.',\n      submittedAt: new Date().toISOString()\n    };\n  }\n\n  private getHeaders(config: MaxAssistantConfig): HttpHeaders {\n    const user = this.getUser(config);\n    const configuredHeaders = typeof config.requestHeaders === 'function'\n      ? config.requestHeaders()\n      : config.requestHeaders ?? {};\n    let headers = new HttpHeaders({ 'Content-Type': 'application/json' });\n\n    for (const [name, value] of Object.entries(configuredHeaders)) {\n      if (name.trim() && value.trim()) {\n        headers = headers.set(name.trim(), value.trim());\n      }\n    }\n\n    if (user.token) {\n      headers = headers.set('x-auth-token', String(user.token));\n    }\n    if (user.version) {\n      headers = headers.set('x-version', String(user.version));\n    }\n\n    return headers;\n  }\n\n  private getEndpoint(path: string, config: MaxAssistantConfig): string {\n    const baseUrl = config.apiBaseUrl?.trim();\n    return baseUrl ? `${baseUrl.replace(/\\/$/, '')}${path}` : path;\n  }\n\n  private getUser(config: MaxAssistantConfig): AssistantUser {\n    return typeof config.user === 'function' ? config.user() : config.user ?? {};\n  }\n\n  private mergeConfig(config: MaxAssistantConfig): MaxAssistantConfig {\n    const merged = {\n      ...this.config,\n      ...Object.fromEntries(Object.entries(config).filter(([, value]) => value !== undefined))\n    };\n\n    if (config.user === undefined) {\n      return merged;\n    }\n\n    return {\n      ...merged,\n      user: {\n        ...this.getUser(this.config),\n        ...this.getUser(config)\n      }\n    };\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { marked } from 'marked';\n\n@Pipe({\n  name: 'maxAssistantMarkdown',\n  standalone: true,\n  pure: true\n})\nexport class MaxAssistantMarkdownPipe implements PipeTransform {\n  transform(\n    value: string | null | undefined,\n    variant: 'default' | 'information' = 'default'\n  ): string {\n    if (!value) {\n      return '';\n    }\n\n    // Assistant responses may contain Markdown, but they must not be able to\n    // inject raw HTML. Angular sanitises the generated HTML again when it is\n    // assigned through [innerHTML].\n    const escapedValue = value\n      .replaceAll('&', '&amp;')\n      .replaceAll('<', '&lt;')\n      .replaceAll('>', '&gt;');\n\n    const rendered = marked.parse(escapedValue, {\n      async: false,\n      breaks: true,\n      gfm: true\n    });\n\n    if (variant !== 'information') return rendered;\n\n    // Only decorate bullet lists. Ordered instructions keep native numbering,\n    // including nested lists and an explicit starting number from Markdown.\n    const lists: string[] = [];\n    return rendered.replace(/<(\\/?)(ul|ol|li)(?:\\s[^>]*)?>/gu, (tag, closing: string, name: string) => {\n      if (name !== 'li') {\n        if (closing) lists.pop();\n        else lists.push(name);\n      } else if (!closing && lists.at(-1) === 'ul') {\n        return `${tag}<i class=\"fa-solid fa-arrow-right\" aria-hidden=\"true\"></i>`;\n      }\n      return tag;\n    });\n  }\n}\n","import { Component, Input } from '@angular/core';\n\nimport { APP_ICONS } from '../../constants/icons.constant';\nimport { AssistantShiftCard } from '../../models/assistant.models';\n\nexport type MaxAgentShiftCardVariant = 'definition' | 'rota' | 'assignment';\n\n@Component({\n  selector: 'max-agent-shift-card',\n  templateUrl: './max-agent-shift-card.component.html',\n  styleUrl: './max-agent-shift-card.component.scss'\n})\nexport class MaxAgentShiftCardComponent {\n  @Input({ required: true }) shift!: AssistantShiftCard;\n  @Input() variant: MaxAgentShiftCardVariant = 'rota';\n  protected readonly icons = APP_ICONS;\n\n  protected get assignmentColor(): string | undefined {\n    return this.shift.color?.trim() ? this.accentColor : undefined;\n  }\n\n  protected get accentColor(): string {\n    const color = this.shift.color?.trim();\n    if (!color) {\n      return '#64748b';\n    }\n    return /^(?:[0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(color)\n      ? `#${color}`\n      : color;\n  }\n\n  protected get timeLabel(): string {\n    const formatter = this.formatTimeToAmPm;\n    const start = formatter(this.shift.startTime);\n    const end = formatter(this.shift.endTime);\n    return start && end ? `${start} - ${end}` : start || end || 'All day';\n  }\n\n  protected get departmentLabel(): string {\n    const count = this.shift.departments?.length ?? 0;\n    return count\n      ? `${count} department${count === 1 ? '' : 's'}`\n      : 'All departments';\n  }\n\n  protected get taskLabel(): string {\n    const count = this.shift.taskCount ?? 0;\n    return `${count} task${count === 1 ? '' : 's'}`;\n  }\n\n  private formatTimeToAmPm(value: string): string {\n    const match = value.match(/^(\\d{1,2}):(\\d{2})/);\n    if (!match) {\n      return value;\n    }\n    const hour = Number(match[1]);\n    const displayHour = ((hour + 11) % 12) + 1;\n    return `${displayHour}:${match[2]} ${hour >= 12 ? 'PM' : 'AM'}`;\n  }\n}\n","<article\n  [class.max-agent-shift-card]=\"variant !== 'assignment'\"\n  [class.app-shift-card]=\"variant === 'assignment'\"\n  [class.app-shift-card--assignment]=\"variant === 'assignment'\"\n  [class.app-shift-card--interactive]=\"variant === 'assignment'\"\n  [class.p-2]=\"variant === 'assignment'\"\n  [class.white-space-normal]=\"variant === 'assignment'\"\n  [class.definition-card]=\"variant === 'definition'\"\n  [class.rota-card]=\"variant === 'rota'\"\n  [style.--max-agent-shift-accent]=\"accentColor\"\n  [style.--scheduler-card-accent]=\"variant === 'assignment' ? assignmentColor : null\"\n  [attr.aria-label]=\"(shift.description || shift.code || 'Shift') + ', ' + timeLabel\"\n>\n  @if(variant === 'assignment') {\n    <div class=\"app-shift-card__times\">{{ timeLabel }}</div>\n    <div class=\"app-shift-card__meta card-text flex align-items-center\"><i class=\"fa-fw flex-shrink-0\" [class]=\"icons.teams\" aria-hidden=\"true\"></i><span>{{ shift.team }}</span></div>\n    <div class=\"app-shift-card__meta card-text flex align-items-center\"><i class=\"fa-fw flex-shrink-0\" [class]=\"icons.location\" aria-hidden=\"true\"></i><span>{{ shift.location }}</span></div>\n    <div class=\"app-shift-card__meta card-text flex align-items-center\"><i class=\"fa-fw flex-shrink-0\" [class]=\"icons.role\" aria-hidden=\"true\"></i><span>{{ shift.role }}</span></div>\n  } @else {\n  <header>\n    <strong>{{ timeLabel }}</strong>\n    @if(variant === 'definition' && shift.days) {\n      <span>{{ shift.days }}</span>\n    }\n  </header>\n\n  @if(variant === 'definition') {\n    @if(shift.code) {\n      <p><i class=\"pi pi-tag\" aria-hidden=\"true\"></i><span>{{ shift.code }}</span></p>\n    }\n    @if(shift.description) {\n      <p><i class=\"pi pi-align-left\" aria-hidden=\"true\"></i><span>{{ shift.description }}</span></p>\n    }\n    <p><i class=\"pi pi-building\" aria-hidden=\"true\"></i><span>{{ departmentLabel }}</span></p>\n    @if((shift.taskCount ?? 0) > 0) {\n      <p><i class=\"pi pi-check-square\" aria-hidden=\"true\"></i><span>{{ taskLabel }}</span></p>\n    }\n  } @else {\n    @if(shift.location) {\n      <p><i class=\"pi pi-map-marker\" aria-hidden=\"true\"></i><span>{{ shift.location }}</span></p>\n    }\n    @if(shift.role) {\n      <p><i class=\"pi pi-user\" aria-hidden=\"true\"></i><span>{{ shift.role }}</span></p>\n    }\n  }\n  }\n</article>\n","import { ChangeDetectionStrategy, Component, Input, OnChanges } from '@angular/core';\nimport { AvatarModule } from 'primeng/avatar';\nimport { AssistantPerson } from '../../models/assistant.models';\n\n@Component({\n  selector: 'max-agent-person',\n  standalone: true,\n  imports: [AvatarModule],\n  host: { class: 'gap-2' },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <p-avatar class=\"flex-shrink-0\" shape=\"circle\" [image]=\"photo\" [label]=\"photo ? undefined : initials\"\n      [ariaLabel]=\"person.name + ' photo'\" (onImageError)=\"photoUnavailable = true\"></p-avatar>\n    <span class=\"person-copy\">\n      <span class=\"person-name\" [title]=\"person.name\">{{ person.name }}</span>\n      @if(code !== undefined && code !== '') { <small><em>#{{ code }}</em></small> }\n    </span>\n  `,\n  styles: `\n    :host { display: flex; align-items: center; min-width: 0; font-size: inherit; }\n    /* Match the avatar diameter to the two identity text lines at the host's font size. */\n    p-avatar { font: inherit; line-height: 1lh; width: 2lh; height: 2lh; }\n    .person-copy { display: flex; flex-direction: column; min-width: 0; line-height: 1lh; }\n    .person-name { font: inherit; font-weight: 600; color: var(--primary-color); overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }\n    small { color: var(--text-color-secondary); line-height: inherit; }\n  `,\n})\nexport class MaxAgentPersonComponent implements OnChanges {\n  @Input({ required: true }) person!: AssistantPerson;\n  protected photoUnavailable = false;\n  private previousPhoto?: string;\n  ngOnChanges(): void {\n    // Table presentation may recreate identity objects during change detection.\n    // Retry a failed image only when its URL changes.\n    if (this.previousPhoto !== this.person.photo) {\n      this.photoUnavailable = false;\n      this.previousPhoto = this.person.photo;\n    }\n  }\n  protected get code(): string | number | undefined { return this.person.code ?? this.person.id; }\n  protected get photo(): string | undefined {\n    const value = this.person.photo?.trim();\n    return !this.photoUnavailable && value && /^(?:https?:\\/\\/|data:image\\/(?:png|jpeg|webp|gif);base64,|\\/|assets\\/)/iu.test(value) ? value : undefined;\n  }\n  protected get initials(): string {\n    return this.person.name.split(/\\s+/u).filter(Boolean).slice(0, 2).map(part => part[0]?.toUpperCase()).join('');\n  }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { DividerModule } from 'primeng/divider';\nimport { MaxAgentPersonComponent } from '../person/max-agent-person.component';\n\nimport { APP_ICONS } from '../../constants/icons.constant';\nimport { AssistantSuggestionEntity, AssistantAvailablePerson } from '../../models/assistant.models';\n\nconst ENTITY_ICONS: Readonly<Partial<Record<AssistantSuggestionEntity['kind'], string>>> = {\n  team: 'pi pi-users',\n  role: 'pi pi-id-card',\n  location: 'pi pi-map-marker',\n  position: 'pi pi-briefcase',\n  department: 'pi pi-building',\n  entity: 'pi pi-tag',\n};\n\n@Component({\n  selector: 'max-agent-entity-option',\n  templateUrl: './max-agent-entity-option.component.html',\n  styleUrl: './max-agent-entity-option.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [NgTemplateOutlet, ButtonModule, DividerModule, MaxAgentPersonComponent],\n})\nexport class MaxAgentEntityOptionComponent {\n  @Input({ required: true }) entity!: AssistantSuggestionEntity;\n  @Input() disabled = false;\n  @Input() availability?: AssistantAvailablePerson;\n  protected readonly icons = APP_ICONS;\n\n  @Output() selected = new EventEmitter<void>();\n\n  protected get isPerson(): boolean {\n    return this.entity.kind === 'person' || this.entity.kind === 'employee';\n  }\n\n\n  protected get entityColor(): string | undefined {\n    return this.normaliseColor(this.entity.color);\n  }\n\n  protected get entityTextColor(): string | undefined {\n    return this.normaliseColor(this.entity.textColor);\n  }\n\n  protected get entityIcon(): string {\n    return ENTITY_ICONS[this.entity.kind] ?? 'pi pi-tag';\n  }\n\n  protected choose(): void {\n    if (!this.disabled) {\n      this.selected.emit();\n    }\n  }\n\n  private normaliseColor(value: string | undefined): string | undefined {\n    const color = value?.trim();\n    if (!color) {\n      return undefined;\n    }\n    return /^[\\da-f]{3,8}$/iu.test(color) ? `#${color}` : color;\n  }\n}\n","<ng-template #personHeader>\n  <max-agent-person class=\"flex-1\" [person]=\"entity\"></max-agent-person>\n</ng-template>\n@if(availability; as person) {\n  <article class=\"entity-option entity-option-person availability-person\" [attr.aria-label]=\"person.name\">\n    <header class=\"flex align-items-center gap-2\">\n      <ng-container [ngTemplateOutlet]=\"personHeader\"></ng-container>\n      <p-button class=\"flex-shrink-0\" label=\"Assign\" severity=\"primary\" size=\"small\" [disabled]=\"true\"></p-button>\n    </header>\n    <p-divider></p-divider>\n    <div class=\"flex flex-column gap-2\">\n      <div class=\"flex align-items-center gap-2\"><i class=\"fa-fw flex-shrink-0\" [class]=\"icons.teams\" title=\"Team\" aria-hidden=\"true\"></i><span>{{ person.team }}</span></div>\n      <div class=\"flex align-items-center gap-2\"><i class=\"fa-fw flex-shrink-0\" [class]=\"icons.role\" title=\"Role\" aria-hidden=\"true\"></i><span>{{ person.role }}</span></div>\n      <div class=\"flex align-items-center gap-2\"><i class=\"fa-fw flex-shrink-0\" [class]=\"icons.location\" title=\"Location\" aria-hidden=\"true\"></i><span>{{ person.location }}</span></div>\n    </div>\n  </article>\n} @else {\n<button\n  type=\"button\"\n  class=\"entity-option\"\n  [class.entity-option-person]=\"isPerson\"\n  [class.entity-option-tag]=\"!isPerson\"\n  [disabled]=\"disabled\"\n  [attr.aria-label]=\"'Choose ' + entity.name\"\n  [style.--max-agent-entity-color]=\"entityColor\"\n  [style.--max-agent-entity-text-color]=\"entityTextColor\"\n  (click)=\"choose()\"\n>\n  @if (isPerson) {\n    <ng-container [ngTemplateOutlet]=\"personHeader\"></ng-container>\n    <i class=\"pi pi-arrow-right option-arrow\" aria-hidden=\"true\"></i>\n  } @else {\n    <span class=\"entity-icon\" aria-hidden=\"true\">\n      <i [class]=\"entityIcon\"></i>\n    </span>\n    <span class=\"entity-name\">{{ entity.name }}</span>\n  }\n</button>\n}\n","import { AssistantCard, AssistantPerson, AssistantResponseTable } from '../../models/assistant.models';\n\nconst key = (value: string) => value.toLowerCase().replace(/[^a-z]/g, '');\nconst names = new Set(['employee', 'employeename', 'employeefullname', 'person', 'personname', 'fullname', 'staffname', 'workername']);\nconst codes = new Set(['code', 'empid', 'employeecode', 'employeeno', 'employeenumber', 'employeereference', 'employeeref', 'personcode', 'staffcode', 'employeereferencenumber']);\nconst ids = new Set(['id', 'employeeid', 'personid']);\nconst photos = new Set(['photo', 'photourl', 'employeephoto', 'personphoto']);\nconst text = (value: unknown): string | undefined => typeof value === 'string' || typeof value === 'number' ? String(value) : undefined;\n\nexport function personTable(table: AssistantResponseTable): AssistantResponseTable {\n  const matches = (column: AssistantResponseTable['columns'][number], test: (value: string) => boolean) => test(key(column.field)) || test(key(column.header));\n  const find = (test: (value: string) => boolean) => table.columns.find(column => matches(column, test));\n  const declaredPerson = table.columns.find(column => column.kind === 'person');\n  const explicitName = find(value => names.has(value));\n  const name = declaredPerson ?? explicitName ?? find(value => value === 'name');\n  const first = find(value => value === 'forename' || value === 'firstname');\n  const last = find(value => value === 'surname' || value === 'lastname');\n  const identityColumns = table.columns.filter(column => matches(column, value => codes.has(value) || ids.has(value) || photos.has(value)));\n  const personContext = /employee|people|person|staff/i.test(table.title ?? '') || identityColumns.some(column =>\n    matches(column, value => (codes.has(value) || ids.has(value)) && value !== 'id' && value !== 'code'));\n  if (!declaredPerson && !explicitName && !first && !personContext) return table;\n  if (!name && !first && !identityColumns.length) return table;\n  const hidden = new Set([...identityColumns.map(column => column.field), name?.field, explicitName?.field, first?.field, last?.field].filter(Boolean));\n  // Already typed grids still need duplicate identity columns removed.\n  if (declaredPerson?.header === 'Person' && table.people?.length === table.rows.length &&\n      table.columns.every(column => column === declaredPerson || !hidden.has(column.field))) return table;\n  const readIdentity = (row: AssistantResponseTable['rows'][number], fields: Set<string>) =>\n    identityColumns.filter(column => matches(column, value => fields.has(value)))\n      .map(column => text(row[column.field])).find(value => value !== undefined && value !== '');\n  const people = table.rows.map((row, index) => {\n    const existing = declaredPerson ? table.people?.[index] : undefined;\n    let nameValue = existing?.name || text(name ? row[name.field] : [first ? row[first.field] : undefined, last ? row[last.field] : undefined].filter(Boolean).join(' ')) || 'Unknown person';\n    const embeddedCode = nameValue.match(/\\s*\\(#\\s*([^)]*)\\)\\s*$/u);\n    if (embeddedCode) nameValue = nameValue.slice(0, embeddedCode.index).trim();\n    return { ...existing, name: nameValue,\n      code: existing?.code ?? readIdentity(row, codes) ?? embeddedCode?.[1] ?? readIdentity(row, ids) ?? existing?.id,\n      photo: existing?.photo ?? readIdentity(row, photos) ?? text(row['photo']) } satisfies AssistantPerson;\n  });\n  const personField = declaredPerson?.field ?? '__person';\n  return { ...table, people,\n    columns: [{ field: personField, header: 'Person', kind: 'person' }, ...table.columns.filter(column => !hidden.has(column.field))],\n    rows: table.rows.map((row, index) => ({ ...row, [personField]: people[index].name + (people[index].code !== undefined && people[index].code !== '' ? ` (#${people[index].code})` : '') })) };\n}\n\nexport function personCard(card: AssistantCard): AssistantCard {\n  if (card.person) return card;\n  const name = card.metrics.find(metric => names.has(key(metric.label)) || key(metric.label) === 'name');\n  const first = card.metrics.find(metric => /^(forename|firstname)$/.test(key(metric.label)));\n  const last = card.metrics.find(metric => /^(surname|lastname)$/.test(key(metric.label)));\n  const code = card.metrics.find(metric => codes.has(key(metric.label)) || ids.has(key(metric.label)));\n  const photo = card.metrics.find(metric => photos.has(key(metric.label)));\n  if (!name && !first) return card;\n  if (name && key(name.label) === 'name' && !first && !/employee|people|person|staff/i.test(card.title)) return card;\n  return { ...card, person: { name: name?.value ?? [first?.value, last?.value].filter(Boolean).join(' '), ...(code ? { code: code.value } : {}), ...(photo ? { photo: photo.value } : {}) },\n    metrics: card.metrics.filter(metric => ![name, first, last, code, photo].includes(metric)) };\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\n\n@Component({\n  selector: 'max-agent-capability-card',\n  standalone: true,\n  imports: [ButtonModule],\n  template: `\n    <button pButton type=\"button\" severity=\"secondary\" class=\"capability-option-card\"\n      [class.capability-tone-two]=\"tone % 4 === 1\" [class.capability-tone-three]=\"tone % 4 === 2\"\n      [class.capability-tone-four]=\"tone % 4 === 3\" [disabled]=\"disabled\"\n      [attr.aria-label]=\"accessibleLabel || label\" (click)=\"chosen.emit()\">\n      @if(ordinal) { <span class=\"capability-option-number\" aria-hidden=\"true\">{{ ordinal }}</span> }\n      <span class=\"flex flex-column gap-2\">\n        <span class=\"capability-option-copy\">{{ label }}</span>\n        @if(description) { <small>{{ description }}</small> }\n      </span>\n    </button>\n  `,\n  styleUrl: './max-agent-capability-card.component.scss',\n})\nexport class MaxAgentCapabilityCardComponent {\n  @Input({ required: true }) label = '';\n  @Input() description = '';\n  @Input() accessibleLabel = '';\n  @Input() ordinal?: number;\n  @Input() tone = 0;\n  @Input() disabled = false;\n  @Output() chosen = new EventEmitter<void>();\n}\n","import { Component, DestroyRef, ElementRef, EventEmitter, Injector, Input, Output, ViewChild, ViewEncapsulation, afterNextRender, computed, inject, signal } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\nimport { Subscription } from 'rxjs';\nimport { MaxAssistantConfig } from '../../config/assistant.config';\nimport { APP_ICONS } from '../../constants/icons.constant';\nimport { AssistantCapabilityTopic, AssistantSuggestionOption } from '../../models/assistant.models';\nimport { MaxAssistantService } from '../assistant/max-assistant.service';\nimport { MaxAgentCapabilityCardComponent } from './max-agent-capability-card.component';\n\n@Component({\n  selector: 'max-agent-capabilities',\n  standalone: true,\n  imports: [ButtonModule, DialogModule, ProgressSpinnerModule, MaxAgentCapabilityCardComponent],\n  templateUrl: './max-agent-capabilities.component.html',\n  styleUrl: './max-agent-capabilities.component.scss',\n  // Shared launcher styles intentionally cross the component boundary.\n  encapsulation: ViewEncapsulation.None,\n})\nexport class MaxAgentCapabilitiesComponent {\n  private static nextMascotId = 0;\n  readonly gradientId = `max-capabilities-gradient-${MaxAgentCapabilitiesComponent.nextMascotId++}`;\n  private readonly service = inject(MaxAssistantService);\n  private readonly injector = inject(Injector);\n  private readonly hostElement: ElementRef<HTMLElement> = inject(ElementRef);\n  private request?: Subscription;\n  @Input() configFactory: () => MaxAssistantConfig = () => ({});\n  @Input() busy = false;\n  protected readonly backIcon = APP_ICONS.back;\n  protected readonly assistantIcon = APP_ICONS.aiAssistant;\n  @Input() presentation: 'card' | 'button' = 'button';\n  @Output() selected = new EventEmitter<AssistantSuggestionOption>();\n  @ViewChild('launcher') private launcher?: ElementRef<HTMLButtonElement>;\n  @ViewChild('detailHeading') private detailHeading?: ElementRef<HTMLElement>;\n  @ViewChild('capabilityContent') private content?: ElementRef<HTMLElement>;\n  private topic?: string;\n  readonly visible = signal(false);\n  readonly loading = signal(false);\n  readonly failed = signal(false);\n  readonly options = signal<AssistantSuggestionOption[]>([]);\n  readonly guide = signal<AssistantCapabilityTopic[]>([]);\n  readonly selectedSection = signal<string | undefined>(undefined);\n  readonly topics = computed<AssistantCapabilityTopic[]>(() => {\n    const covered = new Set(this.guide().flatMap(topic => topic.groups.flatMap(group => group.capabilityKeys)));\n    // Older services, and newly added capabilities awaiting editorial grouping,\n    // remain discoverable instead of silently disappearing from the guide.\n    const remaining = this.guide().length\n      ? this.options().filter(option => !covered.has(option.structuredAction?.capabilityKey ?? '') &&\n        !this.guide().some(topic => topic.examples.includes(option.label)))\n      : this.options();\n    const sections = [...new Set(remaining.map(option => option.section || 'More ways to help'))];\n    return [...this.guide(), ...sections.map(title => {\n      const options = remaining.filter(option => (option.section || 'More ways to help') === title);\n      return { title, summary: options[0].label, introduction: options.map(option => option.label).join(' '),\n        groups: [], examples: options.map(option => option.label) };\n    })];\n  });\n  readonly sections = computed(() => this.topics().map(topic => topic.title));\n  readonly selectedTopic = computed(() => this.topics().find(topic => topic.title === this.selectedSection()));\n  readonly sectionOptions = computed(() => this.options().filter(option => (option.section || 'More ways to help') === this.selectedSection()));\n\n  protected get overlayTarget(): HTMLElement | 'body' {\n    return this.hostElement.nativeElement.closest<HTMLElement>('.assistant-window') ?? 'body';\n  }\n\n  constructor() { inject(DestroyRef).onDestroy(() => this.request?.unsubscribe()); }\n\n  open(): void {\n    this.selectedSection.set(undefined);\n    this.visible.set(true);\n    if (!this.options().length) this.load();\n  }\n\n  load(): void {\n    this.request?.unsubscribe();\n    this.loading.set(true);\n    this.failed.set(false);\n    // Fetch the maintained catalogue in an isolated request, never in the active chat.\n    this.request = this.service.sendMessage('What can you do?', undefined,\n      { ...this.configFactory(), conversationState: undefined, conversationStateVersion: undefined }).subscribe({\n      next: response => {\n        this.options.set((response.suggestions ?? []).filter((option): option is AssistantSuggestionOption =>\n          typeof option !== 'string' && option.presentation === 'capability_card'));\n        this.guide.set(response.capabilityGuide ?? []);\n        this.loading.set(false);\n      },\n      error: () => { this.failed.set(true); this.loading.set(false); },\n    });\n  }\n\n  showSection(section: string): void {\n    this.topic = section;\n    this.selectedSection.set(section);\n    // Wait for the detail heading to render before moving keyboard focus.\n    afterNextRender(() => this.detailHeading?.nativeElement.focus(), { injector: this.injector });\n  }\n\n  showAll(): void {\n    this.selectedSection.set(undefined);\n    afterNextRender(() => {\n      const button = Array.from(this.content?.nativeElement.querySelectorAll<HTMLButtonElement>('button') ?? [])\n        .find(candidate => candidate.getAttribute('aria-label') === 'Explore ' + this.topic);\n      button?.focus();\n    }, { injector: this.injector });\n  }\n\n  choose(option: AssistantSuggestionOption): void {\n    if (this.busy) return;\n    this.close();\n    this.selected.emit(option);\n  }\n\n  chooseExample(message: string): void {\n    const capabilityKey = this.selectedTopic()?.exampleCapabilityKeys?.[message];\n    if (capabilityKey && this.options().some(option => option.structuredAction?.capabilityKey === capabilityKey)) {\n      this.choose({ label: message, message, structuredAction: { capabilityKey, arguments: {} } });\n      return;\n    }\n    this.choose(this.options().find(option => option.label === message) ?? { label: message, message });\n  }\n\n  close(): void {\n    this.visible.set(false);\n    this.request?.unsubscribe();\n    this.loading.set(false);\n  }\n\n  restoreFocus(): void { this.launcher?.nativeElement.focus(); }\n\n  reset(): void {\n    this.close();\n    this.options.set([]);\n    this.guide.set([]);\n    this.selectedSection.set(undefined);\n    this.failed.set(false);\n  }\n}\n","<button #launcher pButton type=\"button\" severity=\"secondary\" class=\"max-capabilities-launcher max-assistant-launcher max-assistant-launcher-ai\"\n  [class.max-assistant-launcher-card]=\"presentation === 'card'\"\n  aria-label=\"Explore Max AI capabilities\" aria-haspopup=\"dialog\" [attr.aria-expanded]=\"visible()\"\n  (click)=\"open()\">\n  <svg class=\"max-capabilities-mascot\" viewBox=\"0 0 100 100\" aria-hidden=\"true\" focusable=\"false\">\n    <defs>\n      <linearGradient [attr.id]=\"gradientId\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n        <stop class=\"max-capabilities-gradient-blue\" offset=\"0%\" />\n        <stop class=\"max-capabilities-gradient-purple\" offset=\"50%\" />\n        <stop class=\"max-capabilities-gradient-pink\" offset=\"100%\" />\n      </linearGradient>\n    </defs>\n    <g class=\"max-capabilities-mascot-sparkles\" [attr.fill]=\"'url(#' + gradientId + ')'\">\n      <path d=\"m16 15 2 5 5 2-5 2-2 5-2-5-5-2 5-2Z\" />\n      <path d=\"m85 33 2 4 4 2-4 2-2 4-2-4-4-2 4-2Z\" />\n      <circle cx=\"80\" cy=\"13\" r=\"2\" />\n    </g>\n    <g class=\"max-capabilities-mascot-body\">\n      <g [attr.fill]=\"'url(#' + gradientId + ')'\">\n        <path d=\"M47 23v-8h6v8Z\" />\n        <circle cx=\"50\" cy=\"13\" r=\"5\" />\n        <rect x=\"17\" y=\"23\" width=\"66\" height=\"47\" rx=\"22\" />\n        <path d=\"M34 72q16-5 32 0l-3 15q-13 8-26 0Z\" />\n      </g>\n      <rect class=\"max-capabilities-mascot-face\" x=\"25\" y=\"32\" width=\"50\" height=\"29\" rx=\"13\" />\n      <g class=\"max-capabilities-mascot-eyes\" [attr.fill]=\"'url(#' + gradientId + ')'\">\n        <rect x=\"35\" y=\"40\" width=\"6\" height=\"9\" rx=\"3\" />\n        <rect x=\"59\" y=\"40\" width=\"6\" height=\"9\" rx=\"3\" />\n      </g>\n      <path class=\"max-capabilities-mascot-smile\" d=\"M45 53q5 4 10 0\" [attr.stroke]=\"'url(#' + gradientId + ')'\" />\n      <g [attr.stroke]=\"'url(#' + gradientId + ')'\">\n        <path class=\"max-capabilities-mascot-arm\" d=\"m29 76-9 6\" />\n        <path class=\"max-capabilities-mascot-arm max-capabilities-mascot-wave\" d=\"m72 76 12-9v-9\" />\n      </g>\n      <path class=\"max-capabilities-mascot-heart\" d=\"m50 79 2-3 4 1 1 3-7 6-7-6 1-3 4-1Z\" />\n    </g>\n  </svg>\n  @if(presentation === 'card') {\n    <span class=\"max-assistant-launcher-copy\">\n      <strong>See what I can help you with</strong>\n      <small>Explore my capabilities and try example questions.</small>\n    </span>\n  } @else {\n    <span class=\"max-assistant-launcher-label\">See what I can help you with</span>\n  }\n</button>\n\n<p-dialog header=\"Explore Max AI\" closeAriaLabel=\"Close capabilities\" [visible]=\"visible()\" (visibleChange)=\"!$event && close()\"\n  (onHide)=\"restoreFocus()\" [modal]=\"true\" [draggable]=\"false\" [resizable]=\"false\" [dismissableMask]=\"true\"\n  [appendTo]=\"overlayTarget\" styleClass=\"max-capabilities-dialog\" maskStyleClass=\"max-capabilities-overlay\"\n  contentStyleClass=\"max-capabilities-dialog-content\">\n  <ng-template #header>\n    <span class=\"max-capabilities-header-icon\" aria-hidden=\"true\">\n      <i [class]=\"assistantIcon\"></i>\n    </span>\n    <div class=\"max-capabilities-header-copy\">\n      <h2>Explore Max AI</h2>\n      <p>Explore my capabilities and try example questions.</p>\n    </div>\n  </ng-template>\n  <div #capabilityContent class=\"max-capabilities-content\" [attr.aria-busy]=\"loading()\">\n    @if(loading()) {\n      <div class=\"flex flex-column align-items-center gap-3 p-4\" role=\"status\">\n        <p-progressSpinner ariaLabel=\"Loading capabilities\" />\n        <p>Loading what I can help you with…</p>\n      </div>\n    } @else if(failed()) {\n      <div role=\"alert\" class=\"flex flex-column align-items-start gap-3\">\n        <p>I couldn’t load my capabilities. Please try again.</p>\n        <p-button label=\"Try again\" (onClick)=\"load()\" />\n      </div>\n    } @else if(!options().length) {\n      <p>No capabilities are available right now.</p>\n      <p-button label=\"Try again\" (onClick)=\"load()\" />\n    } @else if(selectedTopic(); as topic) {\n      <div class=\"max-capabilities-detail-header\">\n        <button pButton type=\"button\" label=\"Back to all capabilities\" [icon]=\"backIcon\" [text]=\"true\" (click)=\"showAll()\"></button>\n        <h3 #detailHeading tabindex=\"-1\">{{ topic.title }}</h3>\n      </div>\n      <div class=\"max-capabilities-detail-list\">\n        <p>{{ topic.introduction }}</p>\n        @for(group of topic.groups; track group.title) {\n          <section>\n            <h4>{{ group.title }}</h4>\n            <p>{{ group.description }}</p>\n          </section>\n        }\n        @if(topic.guidance) {\n          <section>\n            <h4>Details that help</h4>\n            <p>{{ topic.guidance }}</p>\n          </section>\n        }\n        @if(topic.limitations) {\n          <section>\n            <h4>What to keep in mind</h4>\n            <p>{{ topic.limitations }}</p>\n          </section>\n        }\n        <section>\n          <h4>Try asking</h4>\n          <p>Choose a question to start. I will ask for any person, team or other details needed from your organisation.</p>\n          <div class=\"flex flex-column align-items-start\">\n            @for(example of topic.examples; track example) {\n              <button pButton type=\"button\" [label]=\"example\" [text]=\"true\" [disabled]=\"busy\"\n                class=\"max-capabilities-example py-1\" [attr.aria-label]=\"'Ask: ' + example\" (click)=\"chooseExample(example)\"></button>\n            }\n          </div>\n        </section>\n      </div>\n    } @else {\n      <p>Choose a topic to see how I can help. Answers and actions use your Maxtime access.</p>\n      <div class=\"max-capabilities-topic-grid\">\n        @for(topic of topics(); track topic.title; let index = $index) {\n          <max-agent-capability-card [label]=\"topic.title\" [tone]=\"index\" [description]=\"topic.summary\"\n            [accessibleLabel]=\"'Explore ' + topic.title\" (chosen)=\"showSection(topic.title)\" />\n        }\n      </div>\n    }\n  </div>\n</p-dialog>\n","import { CommonModule } from '@angular/common';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport {\r\n  Component,\r\n  computed,\r\n  DestroyRef,\r\n  DoCheck,\r\n  ElementRef,\r\n  EventEmitter,\r\n  HostListener,\r\n  inject,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  signal,\r\n  ViewChild,\r\n  ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { ChartModule } from 'primeng/chart';\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\nimport { SelectModule } from 'primeng/select';\r\nimport { TagModule } from 'primeng/tag';\r\nimport { Textarea, TextareaModule } from 'primeng/textarea';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { of, switchMap, takeUntil } from 'rxjs';\r\nimport { AssistantConversationState } from './assistant-conversation-state';\r\n\r\nimport {\r\n  AssistantBootstrapConfig,\r\n  getAssistantBootstrapConfig,\r\n} from '../../config/assistant-bootstrap.config';\r\nimport { MAX_ASSISTANT_CONFIG, MaxAssistantConfig } from '../../config/assistant.config';\r\nimport {\r\n  AssistantChatActivity,\r\n  AssistantChatProgress,\r\n  AssistantChatResponse,\r\n  AssistantConfirmation,\r\n  AssistantConversationMessage,\r\n  AssistantDeveloperTrace,\r\n  AssistantDisplayResponse,\r\n  AssistantSuggestionEntity,\r\n  AssistantExtractedIntent,\r\n  AssistantFeedbackCategory,\r\n  AssistantFeedbackResponse,\r\n  AssistantFieldValue,\r\n  AssistantFieldMap,\r\n  AssistantHostAction,\r\n  AssistantHelpGuide,\r\n  AssistantMessage,\r\n  AssistantProduct,\r\n  AssistantRequestContext,\r\n  AssistantResponseTable,\r\n  AssistantResponseTableAction,\r\n  AssistantResponseTablePagination,\r\n  AssistantSearchResult,\r\n  AssistantSuggestion,\r\n  AssistantStructuredAction,\r\n  AssistantSuggestionOption,\r\n  AssistantSupportSeverity,\r\n  AssistantSupportTag,\r\n  AssistantSupportTicketResponse,\r\n  AssistantTraceStep,\r\n  AssistantUser,\r\n  AssistantVisualisation,\r\n} from '../../models/assistant.models';\r\nimport { MaxAssistantService } from './max-assistant.service';\r\nimport { MaxAgentUsageComponent } from '../usage/max-agent-usage.component';\r\nimport type { AssistantUsage } from '../../models/assistant.models';\r\nimport { MaxAssistantFeedbackService } from './max-assistant-feedback.service';\r\nimport { MaxAssistantExportService } from './max-assistant-export.service';\r\nimport { MaxAssistantSupportService } from './max-assistant-support.service';\r\nimport { MaxAssistantMarkdownPipe } from './max-assistant-markdown.pipe';\r\nimport { MaxAgentShiftCardComponent } from '../shift-card/max-agent-shift-card.component';\r\nimport { MaxAgentEntityOptionComponent } from '../entity-option/max-agent-entity-option.component';\r\nimport { MaxAgentPersonComponent } from '../person/max-agent-person.component';\r\nimport { personCard, personTable } from '../person/person-presentation';\r\nimport { MaxAgentCapabilitiesComponent } from '../capabilities/max-agent-capabilities.component';\r\nimport { MaxAgentCapabilityCardComponent } from '../capabilities/max-agent-capability-card.component';\r\n\r\nconst ASSISTANT_UI_COPY = {\r\n  title: 'Max AI',\r\n  subtitle: 'Your Personal AI Assistant',\r\n  clearLabel: 'Start a new session',\r\n  clearTooltip: 'Start a new session',\r\n  closeLabel: 'Close AI assistant',\r\n  closeTooltip: 'Close AI assistant',\r\n  feedbackLabel: 'Provide feedback on this response',\r\n  feedbackTooltip: 'Provide feedback',\r\n  placeholder: 'Ask Max AI',\r\n  startingMessage: 'Preparing your answer…',\r\n  errorMessage: 'Sorry, something went wrong while preparing your response. Please try again in a little while.',\r\n  offlineTitle: \"I'm currently offline\",\r\n  accessUnavailableTitle: \"I can't verify your access right now\",\r\n  accessUnavailableMessage: \"Sorry, I can't verify your access right now, so I can't answer your request. Please try again in a little while. You can continue using Maxtime in the meantime. If this continues, contact your administrator.\",\r\n  offlineMessage: \"Sorry, I can't connect right now. Please try again in a little while. You can continue using Maxtime in the meantime.\",\r\n};\r\n\r\nconst ASSISTANT_SEARCH_RESULT_ICONS: Readonly<Record<string, string>> = {\r\n  EMPLOYEE: 'pi pi-user',\r\n  PERSON: 'pi pi-user',\r\n  TEAM: 'pi pi-users',\r\n  SCHEDULE: 'pi pi-calendar',\r\n  LOCATION: 'pi pi-map-marker',\r\n  POSITION: 'pi pi-briefcase',\r\n  TIMESHEET: 'pi pi-clock',\r\n  CONFIGTEAM: 'pi pi-cog',\r\n  CONFIGLOCATION: 'pi pi-cog',\r\n  DEFAULT: 'pi pi-search',\r\n};\r\n\r\nconst ASSISTANT_HELP_ICONS: Readonly<Record<AssistantHelpGuide['icon'], string>> = {\r\n  action: 'pi pi-bolt',\r\n  analytics: 'pi pi-chart-bar',\r\n  budget: 'pi pi-wallet',\r\n  calendar: 'pi pi-calendar-plus',\r\n  document: 'pi pi-file',\r\n  knowledge: 'pi pi-book',\r\n  megaphone: 'pi pi-megaphone',\r\n  people: 'pi pi-user',\r\n  team: 'pi pi-users',\r\n  'time-off': 'pi pi-calendar-times',\r\n  timesheet: 'pi pi-clock',\r\n  workflow: 'pi pi-sitemap',\r\n};\r\n\r\ninterface SupportTicketFormValue {\r\n  name: string;\r\n  email: string;\r\n  phone: string;\r\n  subject: string;\r\n  query: string;\r\n  severity: AssistantSupportSeverity | null;\r\n  tags: AssistantSupportTag[];\r\n}\r\n\r\ninterface FeedbackFormValue {\r\n  category: AssistantFeedbackCategory;\r\n  query: string;\r\n  assistantResponse: string;\r\n  feedback: string;\r\n}\r\n\r\ninterface AssistantEntitySuggestionOption extends AssistantSuggestionOption {\r\n  presentation: 'person_card' | 'entity_tag';\r\n  entity: AssistantSuggestionEntity;\r\n}\r\n\r\n@Component({\r\n  selector: 'max-assistant',\r\n  imports: [\r\n    CommonModule,\r\n    MaxAgentUsageComponent,\r\n    FormsModule,\r\n    ButtonModule,\r\n    ChartModule,\r\n    MultiSelectModule,\r\n    SelectModule,\r\n    TagModule,\r\n    TextareaModule,\r\n    TooltipModule,\r\n    MaxAssistantMarkdownPipe,\r\n    MaxAgentEntityOptionComponent,\r\n    MaxAgentPersonComponent,\r\n    MaxAgentShiftCardComponent,\r\n    MaxAgentCapabilitiesComponent,\r\n    MaxAgentCapabilityCardComponent,\r\n  ],\r\n  templateUrl: './max-assistant.component.html',\r\n  encapsulation: ViewEncapsulation.Emulated,\r\n  styleUrls: ['./max-assistant.component.scss', './max-assistant.workspace.scss'],\r\n})\r\nexport class MaxAssistantComponent implements OnInit, DoCheck {\r\n  protected readonly aiUsage = signal<AssistantUsage | undefined>(undefined);\r\n  protected readonly usageLimitMessage = computed(() => {\r\n    const usage = this.aiUsage();\r\n    const user = (usage?.aiUsageUser ?? 0) >= 100;\r\n    const organisation = (usage?.aiUsageClient ?? 0) >= 100;\r\n    if (!user && !organisation) return '';\r\n    const scope = user && organisation ? 'Your user and organisation monthly AI usage limits have'\r\n      : organisation ? 'Your organisation monthly AI usage limit has' : 'Your monthly AI usage limit has';\r\n    return `${scope} been reached. Please contact your administrator to request an extension.`;\r\n  });\r\n  protected readonly usageLoading = signal(true);\r\n  protected readonly usageReady = computed(() => !this.usageLoading() && this.aiUsage() !== undefined);\r\n  protected readonly composerNotice = computed(() => this.usageLimitMessage() ||\r\n    (this.usageLoading() ? 'Checking AI usage...' : !this.aiUsage() ? 'Unable to check AI usage. Open Monthly AI usage to retry.' : ''));\r\n  private usageRequestVersion = 0;\r\n  private readonly assistantService = inject(MaxAssistantService);\r\n  private readonly exportService = inject(MaxAssistantExportService);\r\n  private readonly feedbackService = inject(MaxAssistantFeedbackService);\r\n  private readonly supportService = inject(MaxAssistantSupportService);\r\n  private readonly destroyRef = inject(DestroyRef);\r\n  private readonly defaultConfig = inject(MAX_ASSISTANT_CONFIG);\r\n  private readonly sessionState = new AssistantConversationState();\r\n  @ViewChild('messagesViewport') private messagesViewport?: ElementRef<HTMLElement>;\r\n  @ViewChild(MaxAgentCapabilitiesComponent) private capabilities?: MaxAgentCapabilitiesComponent;\r\n  protected readonly capabilityConfig = () => this.getAssistantConfig(false);\r\n\r\n  private activeTurnAnchorMessageId?: string;\r\n\r\n  private scrollToLatestTimer?: ReturnType<typeof setTimeout>;\r\n\r\n  private readonly visualisationDataCache = new WeakMap<\r\n    AssistantVisualisation,\r\n    { labels: string[]; datasets: Array<Record<string, unknown>> }\r\n  >();\r\n\r\n  private readonly visualisationOptionsCache = new WeakMap<\r\n    AssistantVisualisation,\r\n    Record<string, unknown>\r\n  >();\r\n\r\n  @ViewChild('composerInput') private composerInput?: ElementRef<HTMLTextAreaElement>;\r\n  @ViewChild('composerInput', { read: Textarea }) private composerTextarea?: Textarea;\r\n\r\n  @ViewChild('supportQueryInput') private supportQueryInput?: ElementRef<HTMLTextAreaElement>;\r\n\r\n  @ViewChild('feedbackInput') private feedbackInput?: ElementRef<HTMLTextAreaElement>;\r\n\r\n  @Input() app?: AssistantProduct;\r\n\r\n  @Input() assistantApiUrl?: string;\r\n\r\n  @Input() user?:\r\n    | Partial<AssistantUser>\r\n    | (() => Partial<AssistantUser>);\r\n\r\n  @Input() context?:\r\n    | Partial<AssistantRequestContext>\r\n    | (() => Partial<AssistantRequestContext>);\r\n\r\n  @Input() requestHeaders?:\r\n    | Record<string, string>\r\n    | (() => Record<string, string>);\r\n\r\n  @Input() developerDetailsEnabled = true;\r\n\r\n  @Output() hostAction = new EventEmitter<AssistantHostAction>();\r\n\r\n  @Output() closeRequested = new EventEmitter<void>();\r\n\r\n  protected readonly isSending = signal(false);\r\n\r\n  protected readonly input = signal('');\r\n\r\n  protected readonly conversationId = signal<string | undefined>(undefined);\r\n\r\n  protected readonly messages = signal<AssistantMessage[]>([]);\r\n\r\n  protected readonly expandedDetailMessageIds = signal<ReadonlySet<string>>(new Set<string>());\r\n\r\n  protected readonly expandedTraceStepKeys = signal<ReadonlySet<string>>(new Set<string>());\r\n\r\n  protected readonly loadingTablePage = signal<string | undefined>(undefined);\r\n\r\n  protected readonly tablePageErrors = signal<Readonly<Record<string, string>>>({});\r\n\r\n  protected readonly feedbackVisible = signal(false);\r\n\r\n  protected readonly feedbackSubmitting = signal(false);\r\n\r\n  protected readonly feedbackResult = signal<AssistantFeedbackResponse | undefined>(undefined);\r\n\r\n  protected readonly feedbackError = signal<string | undefined>(undefined);\r\n\r\n  protected readonly feedbackCategoryOptions: Array<{\r\n    label: string;\r\n    value: AssistantFeedbackCategory;\r\n  }> = [\r\n    { label: 'Incorrect answer', value: 'incorrect' },\r\n    { label: 'Incomplete answer', value: 'incomplete' },\r\n    { label: 'Hard to understand', value: 'unclear' },\r\n    { label: 'Unexpected behaviour', value: 'unexpected' },\r\n    { label: 'Suggestion', value: 'suggestion' },\r\n    { label: 'Other', value: 'other' }\r\n  ];\r\n\r\n  protected feedbackForm: FeedbackFormValue = this.createFeedbackForm();\r\n\r\n  protected readonly supportTicketVisible = signal(false);\r\n\r\n  protected readonly supportTicketSubmitting = signal(false);\r\n\r\n  protected readonly supportTagsLoading = signal(false);\r\n\r\n  protected readonly supportTags = signal<AssistantSupportTag[]>([]);\r\n\r\n  protected readonly supportSeverities = signal<AssistantSupportSeverity[]>([]);\r\n\r\n  protected readonly supportTicketResult = signal<AssistantSupportTicketResponse | undefined>(\r\n    undefined\r\n  );\r\n\r\n  protected readonly supportTicketError = signal<string | undefined>(undefined);\r\n\r\n  protected readonly supportTicketSubmissionFailed = signal(false);\r\n\r\n  protected supportTicketForm: SupportTicketFormValue = this.createSupportTicketForm();\r\n\r\n  ngOnInit(): void {\r\n    this.messages.set(this.createDefaultMessages());\r\n    this.refreshUsage();\r\n    this.destroyRef.onDestroy(() => {\r\n      this.sessionState.reset();\r\n      this.sessionState.resetRequests.complete();\r\n      clearTimeout(this.scrollToLatestTimer);\r\n    });\r\n  }\r\n\r\n  ngDoCheck(): void {\r\n    const configuredUser = typeof this.defaultConfig.user === 'function' ? this.defaultConfig.user() : this.defaultConfig.user;\r\n    const localUser = typeof this.user === 'function' ? this.user() : this.user;\r\n    const user = { ...configuredUser, ...localUser };\r\n    const contextSource = this.context ?? this.defaultConfig.context;\r\n    const context = typeof contextSource === 'function' ? contextSource() : contextSource;\r\n    if (this.sessionState.changedIdentity(JSON.stringify([this.app ?? this.defaultConfig.app,\r\n      user.token, user.version, user.username, user.email, context?.tenantId, context?.organisationId, context?.userId]))) {\r\n      this.clearChatSession();\r\n    }\r\n  }\r\n\r\n  resetSession(): void { this.clearChatSession(); }\r\n\r\n  // Also clears memory if the browser keeps this document in its back/forward cache.\r\n  @HostListener('window:pagehide')\r\n  protected onPageHide(): void { this.clearChatSession(false); }\r\n\r\n  focusComposer(): void {\r\n    this.composerInput?.nativeElement.focus();\r\n  }\r\n\r\n  @HostListener('window:resize')\r\n  protected resizeUsageNotice(): void {\r\n    if (this.composerNotice()) this.composerTextarea?.resize();\r\n  }\r\n\r\n  protected get uiCopy(): typeof ASSISTANT_UI_COPY {\r\n    return ASSISTANT_UI_COPY;\r\n  }\r\n\r\n  protected get bootstrapConfig(): AssistantBootstrapConfig {\r\n    return getAssistantBootstrapConfig(this.app);\r\n  }\r\n\r\n  protected isWelcomeMessage(message: AssistantMessage): boolean {\r\n    return (\r\n      this.messages()[0]?.id === message.id &&\r\n      message.role === 'assistant' &&\r\n      !message.displayResponse &&\r\n      !message.isStreaming\r\n    );\r\n  }\r\n\r\n  protected isWelcomeState(message: AssistantMessage): boolean {\r\n    return this.messages().length === 1 && this.isWelcomeMessage(message);\r\n  }\r\n\r\n  @HostListener('document:keydown.escape')\r\n  protected onDocumentEscape() {\r\n    if (this.feedbackVisible()) {\r\n      this.closeFeedback();\r\n      return;\r\n    }\r\n\r\n    if (this.supportTicketVisible()) {\r\n      this.closeSupportTicket();\r\n      return;\r\n    }\r\n\r\n    if (this.expandedDetailMessageIds().size) {\r\n      this.expandedDetailMessageIds.set(new Set<string>());\r\n      this.expandedTraceStepKeys.set(new Set<string>());\r\n    }\r\n  }\r\n\r\n  protected clearChatSession(refreshUsage = true) {\r\n    this.usageRequestVersion++;\r\n    this.aiUsage.set(undefined);\r\n    this.usageLoading.set(false);\r\n    this.capabilities?.reset();\r\n    this.sessionState.reset();\r\n    this.closeFeedback(false);\r\n    this.closeSupportTicket(false);\r\n    this.input.set('');\r\n    this.isSending.set(false);\r\n    this.conversationId.set(undefined);\r\n    this.expandedDetailMessageIds.set(new Set<string>());\r\n    this.expandedTraceStepKeys.set(new Set<string>());\r\n    this.loadingTablePage.set(undefined);\r\n    this.tablePageErrors.set({});\r\n    this.activeTurnAnchorMessageId = undefined;\r\n    this.messages.set(this.createDefaultMessages());\r\n    this.scrollToLatest();\r\n    if (refreshUsage) this.refreshUsage();\r\n  }\r\n\r\n  protected sendMessage(message = this.input(), action?: AssistantStructuredAction, label = message) {\r\n    const trimmedMessage = message.trim();\r\n\r\n    if (!trimmedMessage || !label.trim() || this.isSending() || !this.usageReady() || this.usageLimitMessage()) {\r\n      return;\r\n    }\r\n\r\n    const history = this.getConversationHistory(action ? '' : trimmedMessage);\r\n    if (!action) this.input.set('');\r\n    this.appendMessage(this.createMessage('user', label.trim()));\r\n    const initialProgress: AssistantChatProgress = {\r\n      type: 'progress',\r\n      stage: 'request',\r\n      message: this.uiCopy.startingMessage,\r\n    };\r\n    const streamingMessage: AssistantMessage = {\r\n      ...this.createMessage('assistant', this.uiCopy.startingMessage),\r\n      isStreaming: true,\r\n      processingUpdates: [initialProgress],\r\n    };\r\n    this.appendMessage(streamingMessage);\r\n    this.isSending.set(true);\r\n\r\n    const onProgress = (activity: AssistantChatActivity) => this.updateStreamingMessage(streamingMessage.id, activity);\r\n    const request = action\r\n      ? this.assistantService.sendStructuredAction(\r\n        trimmedMessage, action, this.conversationId(), this.getAssistantConfig(), history, onProgress\r\n      )\r\n      : this.assistantService.sendMessage(\r\n        trimmedMessage,\r\n        this.conversationId(),\r\n        this.getAssistantConfig(),\r\n        undefined,\r\n        history,\r\n        onProgress\r\n      );\r\n    request\r\n      .pipe(takeUntil(this.sessionState.resetRequests), takeUntilDestroyed(this.destroyRef))\r\n      .subscribe({\r\n        next: response => {\r\n          this.sessionState.accept(response);\r\n          this.conversationId.set(response.conversationId);\r\n          this.replaceMessage(\r\n            streamingMessage.id,\r\n            this.createAssistantResponseMessage(response, trimmedMessage)\r\n          );\r\n          this.isSending.set(false);\r\n        },\r\n        error: error => {\r\n          const preview = this.messages().find(message => message.id === streamingMessage.id);\r\n          if (preview?.displayResponse || preview?.cards?.length) {\r\n            this.replaceMessage(streamingMessage.id, {\r\n              ...preview,\r\n              content: 'The data was retrieved, but the explanation could not be completed.',\r\n              streamingContent: undefined,\r\n            });\r\n            this.isSending.set(false);\r\n            return;\r\n          }\r\n          this.replaceMessage(streamingMessage.id, this.createErrorMessage(error));\r\n          this.isSending.set(false);\r\n        }\r\n      });\r\n  }\r\n\r\n  protected suggestionLabel(suggestion: AssistantSuggestion): string {\r\n    return typeof suggestion === 'string' ? suggestion : suggestion.label;\r\n  }\r\n\r\n  protected isListMetric(metric: { label: string; value: string; list?: boolean }): boolean {\r\n    if (metric.list) {\r\n      return true;\r\n    }\r\n    return /\\b(?:teams?|roles?)\\b/iu.test(metric.label) &&\r\n      metric.value.split(/,|;|\\n/u).filter((value) => value.trim()).length > 1;\r\n  }\r\n\r\n  protected hasCapabilitySuggestions(\r\n    suggestions: AssistantSuggestion[] = []\r\n  ): boolean {\r\n    return suggestions.some(\r\n      suggestion =>\r\n        typeof suggestion !== 'string' &&\r\n        suggestion.presentation === 'capability_card'\r\n    );\r\n  }\r\n\r\n  protected capabilitySuggestionGroups(\r\n    suggestions: AssistantSuggestion[] = []\r\n  ): Array<{ section: string; options: AssistantSuggestionOption[] }> {\r\n    const groups = new Map<string, AssistantSuggestionOption[]>();\r\n    for (const suggestion of suggestions) {\r\n      if (\r\n        typeof suggestion === 'string' ||\r\n        suggestion.presentation !== 'capability_card'\r\n      ) {\r\n        continue;\r\n      }\r\n      const section = suggestion.section?.trim() || 'More';\r\n      groups.set(section, [...(groups.get(section) ?? []), suggestion]);\r\n    }\r\n    return [...groups.entries()].map(([section, options]) => ({\r\n      section,\r\n      options\r\n    }));\r\n  }\r\n\r\n  protected hasOptionCardSuggestions(\r\n    suggestions: AssistantSuggestion[] = [],\r\n    status?: AssistantChatResponse['status']\r\n  ): boolean {\r\n    return suggestions.some(\r\n      suggestion => {\r\n        if (typeof suggestion === 'string') {\r\n          return status === 'clarification_required';\r\n        }\r\n        return suggestion.presentation === 'option_card' ||\r\n          (status === 'clarification_required' &&\r\n            suggestion.presentation !== 'capability_card' &&\r\n            suggestion.presentation !== 'person_card' &&\r\n            suggestion.presentation !== 'entity_tag');\r\n      }\r\n    );\r\n  }\r\n\r\n  protected optionCardSuggestions(\r\n    suggestions: AssistantSuggestion[] = [],\r\n    status?: AssistantChatResponse['status']\r\n  ): AssistantSuggestion[] {\r\n    return suggestions.filter(\r\n      suggestion => {\r\n        if (typeof suggestion === 'string') {\r\n          return status === 'clarification_required';\r\n        }\r\n        return suggestion.presentation === 'option_card' ||\r\n          (status === 'clarification_required' &&\r\n            suggestion.presentation !== 'capability_card' &&\r\n            suggestion.presentation !== 'person_card' &&\r\n            suggestion.presentation !== 'entity_tag');\r\n      }\r\n    );\r\n  }\r\n\r\n  protected hasEntitySuggestions(suggestions: AssistantSuggestion[] = []): boolean {\r\n    return suggestions.some(\r\n      (suggestion) =>\r\n        typeof suggestion !== 'string' &&\r\n        (suggestion.presentation === 'person_card' || suggestion.presentation === 'entity_tag') &&\r\n        Boolean(suggestion.entity),\r\n    );\r\n  }\r\n\r\n  protected entitySuggestionOptions(\r\n    suggestions: AssistantSuggestion[] = [],\r\n  ): AssistantEntitySuggestionOption[] {\r\n    return suggestions.filter(\r\n      (suggestion): suggestion is AssistantEntitySuggestionOption =>\r\n        typeof suggestion !== 'string' &&\r\n        (suggestion.presentation === 'person_card' || suggestion.presentation === 'entity_tag') &&\r\n        Boolean(suggestion.entity),\r\n    );\r\n  }\r\n\r\n  protected useSuggestion(suggestion: AssistantSuggestion) {\r\n    if (typeof suggestion === 'string' || !suggestion.structuredAction) {\r\n      this.sendMessage(\r\n        typeof suggestion === 'string' ? suggestion : suggestion.message\r\n      );\r\n      return;\r\n    }\r\n\r\n    this.sendMessage(suggestion.message, suggestion.structuredAction, suggestion.label);\r\n  }\r\n\r\n  protected performHostAction(action: AssistantHostAction) {\r\n    this.hostAction.emit(action);\r\n  }\r\n\r\n  protected requestClose(): void {\r\n    this.capabilities?.close();\r\n    this.closeRequested.emit();\r\n  }\r\n\r\n  protected hasConversationStarted(): boolean {\r\n    return this.messages().some(message => message.role === 'user');\r\n  }\r\n\r\n  protected openSupportTicket(): void {\r\n    this.closeFeedback(false);\r\n    const user = this.getConfiguredUser();\r\n    this.supportTicketForm = this.createSupportTicketForm(user);\r\n    this.supportTicketResult.set(undefined);\r\n    this.supportTicketError.set(undefined);\r\n    this.supportTicketSubmissionFailed.set(false);\r\n    this.supportTags.set([]);\r\n    this.supportSeverities.set([]);\r\n    this.supportTagsLoading.set(true);\r\n    this.supportTicketVisible.set(true);\r\n\r\n    this.supportService\r\n      .getSupportTags()\r\n      .pipe(takeUntil(this.sessionState.resetRequests), takeUntilDestroyed(this.destroyRef))\r\n      .subscribe({\r\n        next: tags => {\r\n          this.supportTags.set(tags);\r\n          this.supportTagsLoading.set(false);\r\n        },\r\n        error: () => {\r\n          this.supportTagsLoading.set(false);\r\n          this.supportTicketError.set('Support tags could not be loaded. You can still submit the ticket.');\r\n        }\r\n      });\r\n\r\n    this.supportService\r\n      .getSupportSeverities()\r\n      .pipe(takeUntil(this.sessionState.resetRequests), takeUntilDestroyed(this.destroyRef))\r\n      .subscribe({\r\n        next: severities => this.supportSeverities.set(severities),\r\n        error: () => this.supportTicketError.set(\r\n          'Severity options could not be loaded. Please try again.'\r\n        )\r\n      });\r\n\r\n    setTimeout(() => this.supportQueryInput?.nativeElement.focus());\r\n  }\r\n\r\n  protected closeSupportTicket(restoreComposerFocus = true): void {\r\n    this.supportTicketVisible.set(false);\r\n    this.supportTicketSubmitting.set(false);\r\n    this.supportTicketResult.set(undefined);\r\n    this.supportTicketError.set(undefined);\r\n    this.supportTicketSubmissionFailed.set(false);\r\n\r\n    if (restoreComposerFocus) {\r\n      setTimeout(() => this.focusComposer());\r\n    }\r\n  }\r\n\r\n  protected canSubmitSupportTicket(): boolean {\r\n    return Boolean(\r\n      this.supportTicketForm.name.trim() &&\r\n      this.supportTicketForm.email.trim() &&\r\n      this.supportTicketForm.subject.trim() &&\r\n      this.supportTicketForm.query.trim() &&\r\n      this.supportTicketForm.severity &&\r\n      !this.supportTicketSubmitting()\r\n    );\r\n  }\r\n\r\n  protected supportSeverityColor(color: string): string {\r\n    const value = color?.trim() ?? '';\r\n    return value ? (value.startsWith('#') ? value : `#${value}`) : 'var(--max-accent)';\r\n  }\r\n\r\n  protected submitSupportTicket(): void {\r\n    if (!this.canSubmitSupportTicket()) {\r\n      return;\r\n    }\r\n    const severity = this.supportTicketForm.severity;\r\n    if (!severity) {\r\n      return;\r\n    }\r\n\r\n    this.supportTicketSubmitting.set(true);\r\n    this.supportTicketError.set(undefined);\r\n    this.supportTicketSubmissionFailed.set(false);\r\n    this.supportService\r\n      .submitTicket({\r\n        name: this.supportTicketForm.name.trim(),\r\n        email: this.supportTicketForm.email.trim(),\r\n        ...(this.supportTicketForm.phone.trim()\r\n          ? { phone: this.supportTicketForm.phone.trim() }\r\n          : {}),\r\n        subject: this.supportTicketForm.subject.trim(),\r\n        query: this.supportTicketForm.query.trim(),\r\n        severity,\r\n        tags: this.supportTicketForm.tags.map(({ id, label }) => ({ id, label })),\r\n        app: this.app ?? this.defaultConfig.app ?? 'nemesys'\r\n      }, this.getAssistantConfig(false))\r\n      .pipe(takeUntil(this.sessionState.resetRequests), takeUntilDestroyed(this.destroyRef))\r\n      .subscribe({\r\n        next: result => {\r\n          this.supportTicketResult.set(result);\r\n          this.supportTicketSubmitting.set(false);\r\n        },\r\n        error: () => {\r\n          this.supportTicketSubmitting.set(false);\r\n          this.supportTicketSubmissionFailed.set(true);\r\n          this.supportTicketError.set(\r\n            'Your ticket could not be created. Please try again shortly.'\r\n          );\r\n        }\r\n      });\r\n  }\r\n\r\n  protected openFeedback(responseMessage: AssistantMessage): void {\r\n    this.closeSupportTicket(false);\r\n    this.feedbackForm = this.createFeedbackForm(responseMessage);\r\n    this.feedbackResult.set(undefined);\r\n    this.feedbackError.set(undefined);\r\n    this.feedbackVisible.set(true);\r\n    setTimeout(() => this.feedbackInput?.nativeElement.focus());\r\n  }\r\n\r\n  protected closeFeedback(restoreComposerFocus = true): void {\r\n    this.feedbackVisible.set(false);\r\n    this.feedbackSubmitting.set(false);\r\n    this.feedbackResult.set(undefined);\r\n    this.feedbackError.set(undefined);\r\n\r\n    if (restoreComposerFocus) {\r\n      setTimeout(() => this.focusComposer());\r\n    }\r\n  }\r\n\r\n  protected canSubmitFeedback(): boolean {\r\n    return Boolean(\r\n      this.feedbackForm.category &&\r\n      this.feedbackForm.query.trim() &&\r\n      this.feedbackForm.feedback.trim() &&\r\n      !this.feedbackSubmitting()\r\n    );\r\n  }\r\n\r\n  protected submitFeedback(): void {\r\n    if (!this.canSubmitFeedback()) {\r\n      return;\r\n    }\r\n\r\n    this.feedbackSubmitting.set(true);\r\n    this.feedbackError.set(undefined);\r\n    this.feedbackService\r\n      .submitFeedback({\r\n        category: this.feedbackForm.category,\r\n        query: this.feedbackForm.query.trim(),\r\n        ...(this.feedbackForm.assistantResponse.trim()\r\n          ? { assistantResponse: this.feedbackForm.assistantResponse.trim() }\r\n          : {}),\r\n        feedback: this.feedbackForm.feedback.trim(),\r\n        app: this.app ?? this.defaultConfig.app ?? 'nemesys',\r\n        ...(this.conversationId() ? { conversationId: this.conversationId() } : {})\r\n      }, this.getAssistantConfig(false))\r\n      .pipe(takeUntil(this.sessionState.resetRequests), takeUntilDestroyed(this.destroyRef))\r\n      .subscribe({\r\n        next: result => {\r\n          this.feedbackResult.set(result);\r\n          this.feedbackSubmitting.set(false);\r\n        },\r\n        error: () => {\r\n          this.feedbackSubmitting.set(false);\r\n          this.feedbackError.set(\r\n            'Your feedback could not be submitted. Please check the details and try again.'\r\n          );\r\n        }\r\n      });\r\n  }\r\n\r\n  protected searchResultIcon(type: string): string {\r\n    return ASSISTANT_SEARCH_RESULT_ICONS[type.trim().toUpperCase()]\r\n      ?? ASSISTANT_SEARCH_RESULT_ICONS['DEFAULT'];\r\n  }\r\n\r\n  protected searchActionIcon(action: AssistantSearchResult['actions'][number]): string {\r\n    const linkType = action.hostAction.payload['linkType'];\r\n    return this.searchResultIcon(typeof linkType === 'string' ? linkType : action.label);\r\n  }\r\n\r\n  protected helpIcon(icon: AssistantHelpGuide['icon']): string {\r\n    return ASSISTANT_HELP_ICONS[icon];\r\n  }\r\n\r\n  protected helpGuideLabel(kind: AssistantHelpGuide['kind']): string {\r\n    switch (kind) {\r\n      case 'knowledge':\r\n      case 'information':\r\n        return 'Maxtime Knowledge Guide';\r\n      case 'analytics':\r\n        return 'Maxtime Analytics';\r\n      case 'action':\r\n        return 'Maxtime Action';\r\n      default:\r\n        return 'Maxtime Help Guide';\r\n    }\r\n  }\r\n\r\n  protected isContentGuide(kind: AssistantHelpGuide['kind']): boolean {\r\n    return kind === 'knowledge'\r\n      || kind === 'information'\r\n      || kind === 'analytics'\r\n      || kind === 'action';\r\n  }\r\n\r\n  protected helpGuideMarkdownVariant(\r\n    kind: AssistantHelpGuide['kind']\r\n  ): 'default' | 'information' {\r\n    return this.isContentGuide(kind) ? 'information' : 'default';\r\n  }\r\n\r\n  protected getTableRowActions(\r\n    table: AssistantResponseTable,\r\n    rowIndex: number\r\n  ): AssistantResponseTableAction[] {\r\n    return table.actions?.filter(action => action.rowIndex === rowIndex) ?? [];\r\n  }\r\n\r\n  protected useTableAction(action: AssistantResponseTableAction) {\r\n    if (action.disabled || this.isSending()) return;\r\n    const label = action.label.trim();\r\n    if (!label || this.isSending()) {\r\n      return;\r\n    }\r\n\r\n    const history = this.getConversationHistory();\r\n    this.appendMessage(this.createMessage('user', label));\r\n    this.isSending.set(true);\r\n    this.assistantService\r\n      .sendStructuredAction(\r\n        action.message,\r\n        action.structuredAction,\r\n        this.conversationId(),\r\n        this.getAssistantConfig(),\r\n        history\r\n      )\r\n      .pipe(\r\n        switchMap(response => {\r\n          if (!action.confirmOnClick || !response.pendingAction) {\r\n            return of(response);\r\n          }\r\n          return this.assistantService.confirmAction(\r\n            response.pendingAction.id,\r\n            'approve',\r\n            response.conversationId,\r\n            this.getAssistantConfig(),\r\n            history\r\n          );\r\n        }),\r\n        takeUntil(this.sessionState.resetRequests),\r\n        takeUntilDestroyed(this.destroyRef)\r\n      )\r\n      .subscribe({\r\n        next: response => {\r\n          this.sessionState.accept(response);\r\n          this.conversationId.set(response.conversationId);\r\n          this.appendMessage(\r\n            this.createAssistantResponseMessage(response, action.message)\r\n          );\r\n          this.isSending.set(false);\r\n        },\r\n        error: error => {\r\n          this.appendMessage(this.createErrorMessage(error));\r\n          this.isSending.set(false);\r\n        }\r\n      });\r\n  }\r\n\r\n  protected resolvePendingAction(\r\n    message: AssistantMessage,\r\n    decision: AssistantConfirmation['decision']\r\n  ) {\r\n    const pendingAction = message.pendingAction;\r\n    const currentConversationId = this.conversationId();\r\n\r\n    if (\r\n      !pendingAction ||\r\n      !currentConversationId ||\r\n      message.actionDecision ||\r\n      this.isSending()\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    this.messages.update(messages =>\r\n      messages.map(item =>\r\n        item.id === message.id ? { ...item, actionDecision: decision } : item\r\n      )\r\n    );\r\n    const userMessage = decision === 'approve'\r\n      ? `Approve: ${pendingAction.summary}`\r\n      : `Reject: ${pendingAction.summary}`;\r\n    const history = this.getConversationHistory();\r\n    this.appendMessage(this.createMessage('user', userMessage));\r\n    this.isSending.set(true);\r\n\r\n    this.assistantService\r\n      .confirmAction(\r\n        pendingAction.id,\r\n        decision,\r\n        currentConversationId,\r\n        this.getAssistantConfig(),\r\n        history\r\n      )\r\n      .pipe(takeUntil(this.sessionState.resetRequests), takeUntilDestroyed(this.destroyRef))\r\n      .subscribe({\r\n        next: response => {\r\n          this.sessionState.accept(response);\r\n          this.conversationId.set(response.conversationId);\r\n          this.appendMessage(this.createAssistantResponseMessage(response, userMessage));\r\n          this.isSending.set(false);\r\n        },\r\n        error: error => {\r\n          this.messages.update(messages =>\r\n            messages.map(item =>\r\n              item.id === message.id ? { ...item, actionDecision: undefined } : item\r\n            )\r\n          );\r\n          this.appendMessage(this.createErrorMessage(error));\r\n          this.isSending.set(false);\r\n        }\r\n      });\r\n  }\r\n\r\n  private createErrorMessage(error: unknown): AssistantMessage {\r\n    // A concurrent request may have consumed allowance since the last snapshot.\r\n    this.refreshUsage();\r\n    const isAccessUnavailable = error instanceof HttpErrorResponse && (\r\n      error.error?.code === 'authorization_unavailable' ||\r\n      error.error?.error === 'authorization_unavailable' ||\r\n      error.error?.message === 'Access could not be verified with the calling Maxtime product.'\r\n    );\r\n    // Do not label permissions, validation or a model timeout as an outage.\r\n    const isOffline = !isAccessUnavailable && (error instanceof HttpErrorResponse\r\n      ? error.status === 0 || (error.status === 500 && !error.error) ||\r\n        ([502, 503, 504].includes(error.status) && !error.error?.code)\r\n      : error instanceof TypeError && /fetch|network|load failed/iu.test(error.message));\r\n    return {\r\n      ...this.createMessage('assistant', isAccessUnavailable ? this.uiCopy.accessUnavailableMessage : isOffline ? this.uiCopy.offlineMessage : this.resolveErrorMessage(error)),\r\n      isError: true,\r\n      isOffline,\r\n      isAccessUnavailable\r\n    };\r\n  }\r\n\r\n  private resolveErrorMessage(error: unknown): string {\r\n    if (\r\n      error instanceof HttpErrorResponse &&\r\n      typeof error.error === 'object' &&\r\n      error.error !== null &&\r\n      'message' in error.error &&\r\n      typeof error.error.message === 'string' &&\r\n      error.error.message.trim()\r\n    ) {\r\n      return error.error.message.trim();\r\n    }\r\n    return this.uiCopy.errorMessage;\r\n  }\r\n\r\n  protected onComposerKeydown(event: KeyboardEvent) {\r\n    if (event.key === 'Enter' && !event.shiftKey) {\r\n      event.preventDefault();\r\n      this.sendMessage();\r\n    }\r\n  }\r\n\r\n  protected isDetailsVisible(messageId: string): boolean {\r\n    return this.expandedDetailMessageIds().has(messageId);\r\n  }\r\n\r\n  protected toggleDetails(messageId: string, initialStepId?: number) {\r\n    const opening = !this.isDetailsVisible(messageId);\r\n    this.expandedDetailMessageIds.set(\r\n      opening ? new Set([messageId]) : new Set<string>()\r\n    );\r\n    this.expandedTraceStepKeys.set(\r\n      opening && initialStepId !== undefined\r\n        ? new Set([this.traceStepKey(messageId, initialStepId)])\r\n        : new Set<string>()\r\n    );\r\n  }\r\n\r\n  protected isTraceStepExpanded(messageId: string, stepId: number): boolean {\r\n    return this.expandedTraceStepKeys().has(this.traceStepKey(messageId, stepId));\r\n  }\r\n\r\n  protected toggleTraceStep(messageId: string, stepId: number) {\r\n    const key = this.traceStepKey(messageId, stepId);\r\n    this.expandedTraceStepKeys.update(expandedKeys => {\r\n      const next = new Set(expandedKeys);\r\n      if (next.has(key)) {\r\n        next.delete(key);\r\n      } else {\r\n        next.add(key);\r\n      }\r\n      return next;\r\n    });\r\n  }\r\n\r\n  protected getResponseGrid(responseDetails: AssistantDisplayResponse): AssistantResponseTable[] {\r\n    return (responseDetails.grid?.length ? responseDetails.grid : responseDetails.tables ?? []).map(personTable);\r\n  }\r\n\r\n  protected readonly personCard = personCard;\r\n\r\n  protected retrieveNextTablePage(\r\n    message: AssistantMessage,\r\n    table: AssistantResponseTable,\r\n    tableIndex: number\r\n  ): void {\r\n    const pagination = table.pagination;\r\n    if (!pagination || !this.hasNextTablePage(table) || this.isSending()) {\r\n      return;\r\n    }\r\n    const nextOffset = table.rows.length;\r\n    if (nextOffset % pagination.pageSize !== 0) {\r\n      return;\r\n    }\r\n    const tableKey = this.tablePageKey(message.id, tableIndex);\r\n    const history = this.getConversationHistory();\r\n    this.tablePageErrors.update(errors => {\r\n      const next = { ...errors };\r\n      delete next[tableKey];\r\n      return next;\r\n    });\r\n    this.loadingTablePage.set(tableKey);\r\n    this.isSending.set(true);\r\n\r\n    this.assistantService\r\n      .retrieveAnalyticsPage(\r\n        pagination.query,\r\n        { offset: nextOffset, pageSize: 100 },\r\n        this.conversationId(),\r\n        this.getAssistantConfig(),\r\n        history\r\n      )\r\n      .pipe(takeUntil(this.sessionState.resetRequests), takeUntilDestroyed(this.destroyRef))\r\n      .subscribe({\r\n        next: response => {\r\n          // Paging an older table must not replace the active conversational topic.\r\n          this.mergeTablePage(message.id, tableIndex, response, pagination.query);\r\n          this.loadingTablePage.set(undefined);\r\n          this.isSending.set(false);\r\n        },\r\n        error: error => {\r\n          this.tablePageErrors.update(errors => ({\r\n            ...errors,\r\n            [tableKey]: this.resolveErrorMessage(error)\r\n          }));\r\n          this.loadingTablePage.set(undefined);\r\n          this.isSending.set(false);\r\n        }\r\n      });\r\n  }\r\n\r\n  protected tablePageStatus(table: AssistantResponseTable): string {\r\n    const pagination = table.pagination;\r\n    if (!pagination) {\r\n      return '';\r\n    }\r\n    const retrieved = table.rows.length;\r\n    return pagination.totalRecordsExact === false\r\n      ? `${retrieved.toLocaleString()} ${retrieved === 1 ? 'record' : 'records'} retrieved`\r\n      : `${Math.min(retrieved, pagination.totalRecords).toLocaleString()} of ${pagination.totalRecords.toLocaleString()} records retrieved`;\r\n  }\r\n\r\n  protected hasNextTablePage(table: AssistantResponseTable): boolean {\r\n    const pagination = table.pagination;\r\n    if (!pagination || pagination.nextOffset === undefined) {\r\n      return false;\r\n    }\r\n    if (pagination.hasMore !== undefined) {\r\n      return pagination.hasMore;\r\n    }\r\n    return Boolean(\r\n      pagination.remainingRecords > 0 &&\r\n      table.rows.length < pagination.totalRecords\r\n    );\r\n  }\r\n\r\n  protected nextTablePageLabel(pagination: AssistantResponseTablePagination): string {\r\n    const recordCount = pagination.totalRecordsExact === false\r\n      ? pagination.pageSize\r\n      : Math.min(pagination.pageSize, pagination.remainingRecords);\r\n    return `Retrieve next ${recordCount.toLocaleString()} ${recordCount === 1 ? 'record' : 'records'}`;\r\n  }\r\n\r\n  protected isTablePageLoading(messageId: string, tableIndex: number): boolean {\r\n    return this.loadingTablePage() === this.tablePageKey(messageId, tableIndex);\r\n  }\r\n\r\n  protected tablePageError(messageId: string, tableIndex: number): string | undefined {\r\n    return this.tablePageErrors()[this.tablePageKey(messageId, tableIndex)];\r\n  }\r\n\r\n  protected exportTable(table: AssistantResponseTable): void {\r\n    void this.exportService.exportTableToExcel(table);\r\n  }\r\n\r\n  protected exportVisualisation(\r\n    visualisation: AssistantVisualisation,\r\n    visualisationElement: HTMLElement\r\n  ): void {\r\n    void this.exportService.exportVisualisationToPdf(visualisation, visualisationElement);\r\n  }\r\n\r\n  protected chartType(\r\n    visualisation: AssistantVisualisation\r\n  ): 'bar' | 'line' | 'doughnut' | 'pie' | 'radar' | 'polarArea' {\r\n    switch (visualisation.type) {\r\n      case 'doughnut':\r\n      case 'pie':\r\n      case 'polarArea':\r\n      case 'radar':\r\n      case 'line':\r\n      case 'lineStyles':\r\n        return visualisation.type === 'lineStyles' ? 'line' : visualisation.type;\r\n      default:\r\n        return 'bar';\r\n    }\r\n  }\r\n\r\n  protected chartData(\r\n    visualisation: AssistantVisualisation\r\n  ): { labels: string[]; datasets: Array<Record<string, unknown>> } {\r\n    const cached = this.visualisationDataCache.get(visualisation);\r\n    if (cached) {\r\n      return cached;\r\n    }\r\n\r\n    const sourceDatasets = visualisation.datasets?.length\r\n      ? visualisation.datasets\r\n      : [{\r\n          label: visualisation.valueLabel || 'Value',\r\n          values: visualisation.values,\r\n          colors: visualisation.colors,\r\n        }];\r\n    const chartType = this.chartType(visualisation);\r\n    const isArcChart = chartType === 'doughnut' || chartType === 'pie' || chartType === 'polarArea';\r\n    const data = {\r\n      labels: visualisation.labels,\r\n      datasets: sourceDatasets.map((dataset, index) => {\r\n        const colour = dataset.color || this.chartColour(visualisation, index);\r\n        const categoryColours = dataset.colors?.length\r\n          ? dataset.colors\r\n          : visualisation.colors?.length\r\n            ? visualisation.colors\r\n            : visualisation.labels.map((_label, labelIndex) =>\r\n                this.chartColour(visualisation, labelIndex)\r\n              );\r\n        const datasetType = dataset.type || (\r\n          visualisation.type === 'barLine'\r\n            ? index === 0 ? 'bar' : 'line'\r\n            : undefined\r\n        );\r\n        const isLineDataset = datasetType === 'line' || chartType === 'line' || chartType === 'radar';\r\n        return {\r\n          label: dataset.label,\r\n          data: dataset.values.map(value => Number(value) || 0),\r\n          ...(datasetType ? { type: datasetType } : {}),\r\n          backgroundColor: isArcChart || (!isLineDataset && sourceDatasets.length === 1)\r\n            ? categoryColours\r\n            : this.colourWithOpacity(colour, isLineDataset ? 0.14 : 0.78),\r\n          borderColor: isArcChart ? '#ffffff' : colour,\r\n          borderWidth: isLineDataset ? 2 : isArcChart ? 2 : 1,\r\n          borderRadius: isLineDataset || isArcChart ? 0 : 6,\r\n          borderDash: dataset.borderDash || [],\r\n          fill: dataset.fill ?? false,\r\n          tension: isLineDataset ? 0.32 : 0,\r\n          pointStyle: ['circle', 'rectRot', 'triangle', 'rectRounded'][index % 4],\r\n          pointRadius: isLineDataset ? 3 : 0,\r\n          pointHoverRadius: isLineDataset ? 5 : 0,\r\n          ...(visualisation.type === 'stackedBar' ? { stack: 'combined' } : {}),\r\n        };\r\n      }),\r\n    };\r\n    this.visualisationDataCache.set(visualisation, data);\r\n    return data;\r\n  }\r\n\r\n  protected chartOptions(visualisation: AssistantVisualisation): Record<string, unknown> {\r\n    const cached = this.visualisationOptionsCache.get(visualisation);\r\n    if (cached) {\r\n      return cached;\r\n    }\r\n\r\n    const chartType = this.chartType(visualisation);\r\n    const isArcChart = chartType === 'doughnut' || chartType === 'pie';\r\n    const isRadialChart = chartType === 'polarArea' || chartType === 'radar';\r\n    const isHorizontal = visualisation.type === 'horizontalBar';\r\n    const isStacked = visualisation.type === 'stackedBar';\r\n    const axis = (title: string | undefined, stacked = false, beginAtZero = false) => ({\r\n      stacked,\r\n      beginAtZero,\r\n      border: { display: false },\r\n      grid: { color: '#e5e7eb', drawTicks: false },\r\n      ticks: { color: '#64748b', padding: 8, font: { size: 10 } },\r\n      title: {\r\n        display: Boolean(title),\r\n        text: title,\r\n        color: '#475569',\r\n        font: { size: 11, weight: 500 },\r\n      },\r\n    });\r\n    const options: Record<string, unknown> = {\r\n      responsive: true,\r\n      maintainAspectRatio: false,\r\n      animation: { duration: 500 },\r\n      interaction: { intersect: false, mode: 'index' },\r\n      plugins: {\r\n        legend: {\r\n          display: this.shouldShowChartLegend(visualisation),\r\n          position: 'bottom',\r\n          labels: {\r\n            color: '#475569',\r\n            usePointStyle: true,\r\n            boxWidth: 8,\r\n            boxHeight: 8,\r\n            padding: 16,\r\n            font: { size: 10 },\r\n          },\r\n        },\r\n        tooltip: {\r\n          enabled: true,\r\n          padding: 10,\r\n          usePointStyle: true,\r\n        },\r\n      },\r\n      ...(isArcChart\r\n        ? { cutout: chartType === 'doughnut' ? '58%' : 0 }\r\n        : isRadialChart\r\n          ? {\r\n              scales: {\r\n                r: {\r\n                  beginAtZero: true,\r\n                  grid: { color: '#e5e7eb' },\r\n                  angleLines: { color: '#e5e7eb' },\r\n                  ticks: { color: '#64748b', backdropColor: 'transparent', font: { size: 9 } },\r\n                  pointLabels: { color: '#475569', font: { size: 10 } },\r\n                },\r\n              },\r\n            }\r\n          : {\r\n              indexAxis: isHorizontal ? 'y' : 'x',\r\n              scales: {\r\n                x: axis(\r\n                  isHorizontal ? visualisation.yAxisLabel : visualisation.xAxisLabel,\r\n                  isStacked,\r\n                  isHorizontal\r\n                ),\r\n                y: axis(\r\n                  isHorizontal ? visualisation.xAxisLabel : visualisation.yAxisLabel,\r\n                  isStacked,\r\n                  !isHorizontal\r\n                ),\r\n              },\r\n            }),\r\n    };\r\n    this.visualisationOptionsCache.set(visualisation, options);\r\n    return options;\r\n  }\r\n\r\n  protected chartHeight(visualisation: AssistantVisualisation): number {\r\n    return visualisation.type === 'horizontalBar'\r\n      ? Math.max(300, Math.min(620, visualisation.labels.length * 34 + 90))\r\n      : 340;\r\n  }\r\n\r\n  private shouldShowChartLegend(visualisation: AssistantVisualisation): boolean {\r\n    if (['doughnut', 'pie', 'polarArea'].includes(visualisation.type)) {\r\n      return true;\r\n    }\r\n\r\n    return (visualisation.datasets?.length ?? 1) > 1;\r\n  }\r\n\r\n  protected chartAriaLabel(visualisation: AssistantVisualisation): string {\r\n    const datasets = visualisation.datasets?.length\r\n      ? visualisation.datasets\r\n      : [{ label: visualisation.valueLabel || 'Value', values: visualisation.values }];\r\n    const values = datasets.flatMap(dataset =>\r\n      visualisation.labels.map(\r\n        (label, index) => `${dataset.label}, ${label}: ${Number(dataset.values[index]) || 0}`\r\n      )\r\n    );\r\n    return `${visualisation.title} chart. ${values.join(', ')}.`;\r\n  }\r\n\r\n  private chartColour(visualisation: AssistantVisualisation, index: number): string {\r\n    const fallback = [\r\n      '#3B82F6', '#EC4899', '#10B981', '#F59E0B', '#8B5CF6', '#06B6D4',\r\n      '#EF4444', '#84CC16', '#F97316', '#6366F1', '#14B8A6', '#D946EF',\r\n    ];\r\n    return visualisation.colors?.[index] ?? fallback[index % fallback.length];\r\n  }\r\n\r\n  private colourWithOpacity(colour: string, opacity: number): string {\r\n    const match = /^#([0-9a-f]{6})$/iu.exec(colour.trim());\r\n    if (!match) {\r\n      return colour;\r\n    }\r\n    const value = Number.parseInt(match[1]!, 16);\r\n    return `rgba(${(value >> 16) & 255}, ${(value >> 8) & 255}, ${value & 255}, ${opacity})`;\r\n  }\r\n\r\n  protected formatTraceValue(value: AssistantFieldValue | undefined): string {\r\n    return JSON.stringify(value, null, 2);\r\n  }\r\n\r\n  protected traceMap(value: AssistantFieldValue | undefined): AssistantFieldMap | undefined {\r\n    return value !== null && typeof value === 'object' && !Array.isArray(value)\r\n      ? value\r\n      : undefined;\r\n  }\r\n\r\n  protected traceMapField(\r\n    value: AssistantFieldValue | undefined,\r\n    key: string\r\n  ): AssistantFieldMap | undefined {\r\n    return this.traceMap(this.traceMap(value)?.[key]);\r\n  }\r\n\r\n  protected traceArrayField(\r\n    value: AssistantFieldValue | undefined,\r\n    key: string\r\n  ): AssistantFieldValue[] {\r\n    const field = this.traceMap(value)?.[key];\r\n    return Array.isArray(field) ? field : [];\r\n  }\r\n\r\n  protected traceField(\r\n    value: AssistantFieldValue | undefined,\r\n    key: string\r\n  ): AssistantFieldValue | undefined {\r\n    return this.traceMap(value)?.[key];\r\n  }\r\n\r\n  protected traceEntries(\r\n    value: AssistantFieldValue | AssistantFieldMap | undefined,\r\n    excludedKeys: string[] = []\r\n  ): Array<{ key: string; label: string; value: AssistantFieldValue }> {\r\n    const record = this.traceMap(value);\r\n    const excluded = new Set(excludedKeys.map(key => key.toLocaleLowerCase()));\r\n    return record\r\n      ? Object.entries(record)\r\n          .filter(\r\n            ([key, entry]) =>\r\n              entry !== undefined && !excluded.has(key.toLocaleLowerCase())\r\n          )\r\n          .map(([key, entry]) => ({\r\n            key,\r\n            label: this.formatTraceLabel(key),\r\n            value: entry\r\n          }))\r\n      : [];\r\n  }\r\n\r\n  protected formatTraceLabel(value: string): string {\r\n    return value\r\n      .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\r\n      .replace(/_/g, ' ')\r\n      .replace(/\\b\\w/g, character => character.toUpperCase());\r\n  }\r\n\r\n  protected formatTraceScalar(value: AssistantFieldValue | undefined): string {\r\n    if (value === null) {\r\n      return 'None';\r\n    }\r\n    if (value === undefined) {\r\n      return 'Not supplied';\r\n    }\r\n    if (typeof value === 'boolean') {\r\n      return value ? 'Yes' : 'No';\r\n    }\r\n    if (typeof value === 'number') {\r\n      return Number.isInteger(value) ? String(value) : value.toFixed(6);\r\n    }\r\n    if (typeof value === 'string') {\r\n      return value || 'Empty';\r\n    }\r\n    return JSON.stringify(value);\r\n  }\r\n\r\n  protected formatSimilarity(value: AssistantFieldValue | undefined): string {\r\n    return typeof value === 'number' ? value.toFixed(4) : '—';\r\n  }\r\n\r\n  protected getHttpStatus(step: AssistantTraceStep): number | undefined {\r\n    const output = this.traceMap(step.output);\r\n    const http = this.traceMap(output?.['http']);\r\n    const status = http?.['statusCode'] ?? output?.['statusCode'] ?? step.error?.statusCode;\r\n    return typeof status === 'number' ? status : undefined;\r\n  }\r\n\r\n  protected isHttpSuccessful(step: AssistantTraceStep): boolean {\r\n    const status = this.getHttpStatus(step);\r\n    return status !== undefined && status >= 200 && status < 300;\r\n  }\r\n\r\n  protected traceStepTone(step: AssistantTraceStep): AssistantTraceStep['status'] {\r\n    return step.category === 'api_call' && this.isHttpSuccessful(step)\r\n      ? 'succeeded'\r\n      : step.status;\r\n  }\r\n\r\n  protected traceStepStatus(step: AssistantTraceStep): string {\r\n    if (step.category === 'api_call') {\r\n      const status = this.getHttpStatus(step);\r\n      if (status !== undefined) {\r\n        return `HTTP ${status} ${this.isHttpSuccessful(step) ? 'Success' : 'Error'}`;\r\n      }\r\n      return step.status === 'failed' ? 'Transport failed' : 'Completed';\r\n    }\r\n    return step.status === 'succeeded'\r\n      ? 'Completed'\r\n      : step.status === 'failed'\r\n        ? 'Stopped'\r\n        : 'Running';\r\n  }\r\n\r\n  protected formatTraceCategory(category: string): string {\r\n    const labels: Record<string, string> = {\r\n      request: 'Request intake',\r\n      intent_projection: 'Intent generalisation',\r\n      embedding: 'Intent embedding',\r\n      capability_routing: 'Capability matching',\r\n      argument_extraction: 'Argument extraction',\r\n      api_call: 'Nemesys API',\r\n      action: 'Workflow outcome',\r\n      response: 'Assistant response'\r\n    };\r\n    return labels[category] ?? this.formatTraceLabel(category);\r\n  }\r\n\r\n  private getAssistantConfig(includeConversation = true): MaxAssistantConfig {\r\n    const config: MaxAssistantConfig = includeConversation\r\n      ? { conversationStateVersion: 1, ...(this.sessionState.token ? { conversationState: this.sessionState.token } : {}) }\r\n      : {};\r\n\r\n    if (this.assistantApiUrl) {\r\n      config.assistantApiUrl = this.assistantApiUrl;\r\n    }\r\n\r\n    if (this.app) {\r\n      config.app = this.app;\r\n    }\r\n\r\n    if (this.user) {\r\n      config.user = this.user;\r\n    }\r\n\r\n    if (this.context) {\r\n      config.context = this.context;\r\n    }\r\n\r\n    if (this.requestHeaders) {\r\n      config.requestHeaders = this.requestHeaders;\r\n    }\r\n\r\n    return config;\r\n  }\r\n\r\n  private appendMessage(message: AssistantMessage) {\r\n    if (message.role === 'user') {\r\n      this.activeTurnAnchorMessageId = message.id;\r\n    }\r\n    this.messages.update(messages => [...messages, message]);\r\n    if (this.activeTurnAnchorMessageId) {\r\n      this.scrollToMessage(this.activeTurnAnchorMessageId);\r\n    } else {\r\n      this.scrollToLatest();\r\n    }\r\n  }\r\n\r\n  private updateStreamingMessage(messageId: string, activity: AssistantChatActivity) {\r\n    let messageUpdated = false;\r\n    this.messages.update(messages =>\r\n      messages.map(message => {\r\n        if (message.id !== messageId || !message.isStreaming) {\r\n          return message;\r\n        }\r\n\r\n        if (activity.type === 'delta') {\r\n          if (!activity.delta) {\r\n            return message;\r\n          }\r\n          messageUpdated = true;\r\n          return {\r\n            ...message,\r\n            streamingContent: `${message.streamingContent ?? ''}${activity.delta}`,\r\n            ...(message.displayResponse || message.cards?.length\r\n              ? { content: `${message.streamingContent ?? ''}${activity.delta}` }\r\n              : {}),\r\n          };\r\n        }\r\n\r\n        if (activity.type === 'data') {\r\n          messageUpdated = true;\r\n          return {\r\n            ...message,\r\n            ...activity.data,\r\n            displayResponse: activity.data.displayResponse ?? {},\r\n            content: message.streamingContent ?? '',\r\n            processingUpdates: [],\r\n          };\r\n        }\r\n\r\n        if (message.displayResponse || message.cards?.length) {\r\n          return message;\r\n        }\r\n\r\n        const progressMessage = activity.message.trim();\r\n        if (!progressMessage) {\r\n          return message;\r\n        }\r\n        const processingUpdates = message.processingUpdates ?? [];\r\n        const latestUpdate = processingUpdates.at(-1);\r\n        if (\r\n          latestUpdate?.stage === activity.stage &&\r\n          latestUpdate.message === progressMessage\r\n        ) {\r\n          return message;\r\n        }\r\n\r\n        messageUpdated = true;\r\n        return {\r\n          ...message,\r\n          content: progressMessage,\r\n          processingUpdates: [\r\n            { ...activity, message: progressMessage },\r\n          ],\r\n        };\r\n      })\r\n    );\r\n    if (messageUpdated) {\r\n      this.scrollToLatest();\r\n    }\r\n  }\r\n\r\n  private replaceMessage(messageId: string, replacement: AssistantMessage) {\r\n    this.messages.update(messages =>\r\n      messages.map(message =>\r\n        message.id === messageId\r\n          ? { ...replacement, id: messageId, isStreaming: false }\r\n          : message\r\n      )\r\n    );\r\n  }\r\n\r\n  private mergeTablePage(\r\n    messageId: string,\r\n    tableIndex: number,\r\n    response: AssistantChatResponse,\r\n    userQuery: string\r\n  ): void {\r\n    const nextDisplay = this.createDisplayResponse(response, userQuery);\r\n    const nextTable = this.getResponseGrid(nextDisplay)[0];\r\n    const tableKey = this.tablePageKey(messageId, tableIndex);\r\n    this.messages.update(messages => messages.map(message => {\r\n      if (message.id !== messageId) {\r\n        return message;\r\n      }\r\n      const developerTrace = this.mergeDeveloperTraces(\r\n        message.developerTrace,\r\n        response.developerTrace\r\n      );\r\n      if (!nextTable || !message.displayResponse) {\r\n        this.tablePageErrors.update(errors => ({\r\n          ...errors,\r\n          [tableKey]: response.answer\r\n        }));\r\n        return { ...message, developerTrace };\r\n      }\r\n      const tables = [...this.getResponseGrid(message.displayResponse)];\r\n      const currentTable = tables[tableIndex];\r\n      if (!currentTable) {\r\n        return { ...message, developerTrace };\r\n      }\r\n      const rowOffset = currentTable.rows.length;\r\n      if (\r\n        nextTable.pagination &&\r\n        nextTable.pagination.offset !== rowOffset\r\n      ) {\r\n        this.tablePageErrors.update(errors => ({\r\n          ...errors,\r\n          [tableKey]: 'The next records could not be retrieved in sequence. Please try the query again.'\r\n        }));\r\n        return { ...message, developerTrace };\r\n      }\r\n      const nextPagination = nextTable.pagination;\r\n      const totalRecords = nextPagination?.totalRecords ?? rowOffset + nextTable.rows.length;\r\n      const totalRecordsExact = nextPagination?.totalRecordsExact !== false;\r\n      const combinedRows = [...currentTable.rows, ...nextTable.rows];\r\n      const rows = totalRecordsExact\r\n        ? combinedRows.slice(0, totalRecords)\r\n        : combinedRows;\r\n      const hasMore = nextPagination?.hasMore ??\r\n        ((nextPagination?.remainingRecords ?? 0) > 0);\r\n      const remainingRecords = totalRecordsExact\r\n        ? Math.max(totalRecords - rows.length, 0)\r\n        : (nextPagination?.remainingRecords ?? 0);\r\n      const pagination = nextTable.pagination\r\n        ? {\r\n            query: nextTable.pagination.query,\r\n            offset: 0,\r\n            pageSize: nextTable.pagination.pageSize,\r\n            totalRecords,\r\n            totalRecordsExact,\r\n            returnedRecords: rows.length,\r\n            remainingRecords,\r\n            hasMore,\r\n            ...(hasMore ? { nextOffset: rows.length } : {})\r\n          }\r\n        : currentTable.pagination;\r\n      tables[tableIndex] = {\r\n        ...currentTable,\r\n        rows,\r\n        ...(currentTable.people ? { people: [...currentTable.people, ...(nextTable.people ?? [])].slice(0, rows.length) } : {}),\r\n        ...(nextTable.actions?.length\r\n          ? {\r\n              actions: [\r\n                ...(currentTable.actions ?? []),\r\n                ...nextTable.actions.map(action => ({\r\n                  ...action,\r\n                  rowIndex: action.rowIndex + rowOffset\r\n                }))\r\n              ]\r\n            }\r\n          : {}),\r\n        ...(pagination ? { pagination } : {})\r\n      };\r\n      return {\r\n        ...message,\r\n        displayResponse: {\r\n          ...message.displayResponse,\r\n          grid: tables,\r\n          tables\r\n        },\r\n        developerTrace\r\n      };\r\n    }));\r\n    this.scrollToLatest();\r\n  }\r\n\r\n  private mergeDeveloperTraces(\r\n    current?: AssistantDeveloperTrace,\r\n    next?: AssistantDeveloperTrace\r\n  ): AssistantDeveloperTrace | undefined {\r\n    if (!current) {\r\n      return next;\r\n    }\r\n    if (!next) {\r\n      return current;\r\n    }\r\n    const lastId = Math.max(0, ...current.steps.map(step => step.id));\r\n    const steps = [\r\n      ...current.steps,\r\n      ...next.steps.map((step, index) => ({ ...step, id: lastId + index + 1 }))\r\n    ];\r\n    if (!current.run || !next.run) {\r\n      return { ...(next.run ?? current.run ? { run: next.run ?? current.run } : {}), steps };\r\n    }\r\n    return {\r\n      run: {\r\n        ...current.run,\r\n        completedAt: next.run.completedAt,\r\n        durationMs: current.run.durationMs + next.run.durationMs,\r\n        llmCalls: current.run.llmCalls + next.run.llmCalls,\r\n        embeddingCalls: current.run.embeddingCalls + next.run.embeddingCalls,\r\n        apiCalls: current.run.apiCalls + next.run.apiCalls\r\n      },\r\n      steps\r\n    };\r\n  }\r\n\r\n  private tablePageKey(messageId: string, tableIndex: number): string {\r\n    return `${messageId}:${tableIndex}`;\r\n  }\r\n\r\n  private createDefaultMessages(): AssistantMessage[] {\r\n    if (!this.bootstrapConfig.initialMessage) {\r\n      return [];\r\n    }\r\n\r\n    return [\r\n      this.createMessage(\r\n        'assistant',\r\n        this.getInitialMessage(this.bootstrapConfig.initialMessage),\r\n        this.bootstrapConfig.initialSuggestions\r\n      )\r\n    ];\r\n  }\r\n\r\n  private getInitialMessage(initialMessage: string): string {\r\n    const user = this.getConfiguredUser();\r\n    const preferredName = [\r\n      user?.['firstName'],\r\n      user?.['firstname'],\r\n      user?.['displayName'],\r\n      user?.['name'],\r\n      user?.['username']\r\n    ].find(value => typeof value === 'string' && value.trim());\r\n\r\n    if (typeof preferredName !== 'string') {\r\n      return initialMessage;\r\n    }\r\n\r\n    const firstName = preferredName\r\n      .trim()\r\n      .split(/\\s|@/)[0];\r\n\r\n    if (!firstName) {\r\n      return initialMessage;\r\n    }\r\n\r\n    if (initialMessage.startsWith('Hi!')) {\r\n      return initialMessage.replace(/^Hi!/, `Hi ${firstName}!`);\r\n    }\r\n\r\n    return initialMessage.replace(/^Hello,/, `Hello ${firstName},`);\r\n  }\r\n\r\n  private getConfiguredUser(): Partial<AssistantUser> | undefined {\r\n    const configuredUser = this.user ?? this.defaultConfig.user;\r\n    return typeof configuredUser === 'function'\r\n      ? configuredUser()\r\n      : configuredUser;\r\n  }\r\n\r\n  private createSupportTicketForm(\r\n    user?: Partial<AssistantUser>\r\n  ): SupportTicketFormValue {\r\n    return {\r\n      name: this.getUserText(user, [\r\n        'displayName',\r\n        'name',\r\n        'username',\r\n        'firstName',\r\n        'firstname'\r\n      ]),\r\n      email: this.getUserText(user, ['email', 'emailAddress']),\r\n      phone: this.getUserText(user, ['phone', 'phoneNumber', 'mobile']),\r\n      subject: '',\r\n      query: '',\r\n      severity: null,\r\n      tags: []\r\n    };\r\n  }\r\n\r\n  private createFeedbackForm(responseMessage?: AssistantMessage): FeedbackFormValue {\r\n    const conversation = responseMessage\r\n      ? this.getConversationPair(responseMessage)\r\n      : { query: '', assistantResponse: '' };\r\n\r\n    return {\r\n      category: 'suggestion',\r\n      query: conversation.query,\r\n      assistantResponse: conversation.assistantResponse,\r\n      feedback: ''\r\n    };\r\n  }\r\n\r\n  private getConversationPair(responseMessage: AssistantMessage): {\r\n    query: string;\r\n    assistantResponse: string;\r\n  } {\r\n    const messages = this.messages();\r\n    const responseIndex = messages.findIndex(message => message.id === responseMessage.id);\r\n    let precedingUserIndex = -1;\r\n    for (let index = responseIndex - 1; index >= 0; index -= 1) {\r\n      if (messages[index]?.role === 'user') {\r\n        precedingUserIndex = index;\r\n        break;\r\n      }\r\n    }\r\n\r\n    return {\r\n      query: messages[precedingUserIndex]?.content ?? '',\r\n      assistantResponse: responseMessage.content\r\n    };\r\n  }\r\n\r\n  private getUserText(\r\n    user: Partial<AssistantUser> | undefined,\r\n    keys: string[]\r\n  ): string {\r\n    const value = keys\r\n      .map(key => user?.[key])\r\n      .find(field => typeof field === 'string' && field.trim());\r\n    return typeof value === 'string' ? value.trim() : '';\r\n  }\r\n\r\n  private createAssistantResponseMessage(\r\n    response: AssistantChatResponse,\r\n    userQuery: string\r\n  ): AssistantMessage {\r\n    if (response.aiUsage) {\r\n      this.usageRequestVersion++;\r\n      this.aiUsage.set(response.aiUsage);\r\n      this.usageLoading.set(false);\r\n    } else {\r\n      this.refreshUsage();\r\n    }\r\n    const displayResponse = this.createDisplayResponse(response, userQuery);\r\n\r\n    return this.createMessage(\r\n      'assistant',\r\n      displayResponse.agentInferredResponse || response.answer,\r\n      response.suggestions,\r\n      response.sources,\r\n      response.intent,\r\n      response.intentLabel,\r\n      response.app ?? response.product,\r\n      response.productLabel,\r\n      response.apiModule ?? response.contextResolution?.moduleKey,\r\n      response.confidence ?? response.contextResolution?.confidence,\r\n      response.parameters ?? response.entities,\r\n      response.apiCalls ?? this.getToolApiCalls(response),\r\n      response.apiResult,\r\n      response.mockResult,\r\n      response.llmUsed,\r\n      response.availableModules,\r\n      displayResponse,\r\n      response.status,\r\n      response.pendingAction,\r\n      response.toolExecution,\r\n      response.cards,\r\n      response.contextResolution.capabilityKey,\r\n      response.developerTrace\r\n    );\r\n  }\r\n\r\n  protected refreshUsage(): void {\r\n    const version = ++this.usageRequestVersion;\r\n    this.usageLoading.set(true);\r\n    this.assistantService.getUsage(this.getAssistantConfig(false))\r\n      .pipe(takeUntil(this.sessionState.resetRequests), takeUntilDestroyed(this.destroyRef))\r\n      .subscribe({\r\n        next: usage => {\r\n          if (version !== this.usageRequestVersion) return;\r\n          this.aiUsage.set(usage);\r\n          this.usageLoading.set(false);\r\n        },\r\n        error: () => {\r\n          if (version !== this.usageRequestVersion) return;\r\n          // A failed refresh is not evidence that an exhausted allowance was reset.\r\n          if (!this.usageLimitMessage()) this.aiUsage.set(undefined);\r\n          this.usageLoading.set(false);\r\n        }\r\n      });\r\n  }\r\n\r\n  private createMessage(\r\n    role: AssistantMessage['role'],\r\n    content: string,\r\n    suggestions: AssistantSuggestion[] = [],\r\n    sources: AssistantMessage['sources'] = [],\r\n    intent?: string,\r\n    intentLabel?: string,\r\n    app?: string,\r\n    productLabel?: string,\r\n    apiModule?: string,\r\n    confidence?: number,\r\n    parameters?: AssistantFieldMap,\r\n    apiCalls?: AssistantMessage['apiCalls'],\r\n    apiResult?: AssistantFieldMap,\r\n    mockResult?: AssistantFieldMap,\r\n    llmUsed?: boolean,\r\n    availableModules?: string[],\r\n    displayResponse?: AssistantDisplayResponse,\r\n    status?: AssistantChatResponse['status'],\r\n    pendingAction?: AssistantMessage['pendingAction'],\r\n    toolExecution?: AssistantMessage['toolExecution'],\r\n    cards?: AssistantMessage['cards'],\r\n    capabilityKey?: string,\r\n    developerTrace?: AssistantDeveloperTrace\r\n  ): AssistantMessage {\r\n    return {\r\n      id: this.createId(),\r\n      role,\r\n      content,\r\n      displayResponse,\r\n      formattedParameters: this.formatJson(displayResponse?.agentExtractedIntent?.parameters),\r\n      formattedApiHeaders: this.formatJson(displayResponse?.agentExtractedIntent?.api?.headers),\r\n      formattedApiBody: this.formatJson(displayResponse?.agentExtractedIntent?.api?.body),\r\n      formattedApiResponse: this.formatJson(displayResponse?.apiResponse),\r\n      formattedSampleJsonResponse: this.formatJson(displayResponse?.sampleJsonResponse),\r\n      suggestions,\r\n      sources,\r\n      intent,\r\n      intentLabel,\r\n      app,\r\n      productLabel,\r\n      apiModule,\r\n      confidence,\r\n      parameters,\r\n      entities: parameters,\r\n      apiCalls,\r\n      apiResult,\r\n      mockResult,\r\n      llmUsed,\r\n      availableModules,\r\n      status,\r\n      pendingAction,\r\n      toolExecution,\r\n      cards,\r\n      capabilityKey,\r\n      developerTrace,\r\n      createdAt: new Date()\r\n    };\r\n  }\r\n\r\n  private createDisplayResponse(\r\n    response: AssistantChatResponse,\r\n    userQuery: string\r\n  ): AssistantDisplayResponse {\r\n    const provided = response.displayResponse ?? {};\r\n    const extractedIntent = this.createExtractedIntent(response, provided.agentExtractedIntent);\r\n    const grid = this.getDisplayTables(provided, response);\r\n\r\n    return {\r\n      userQuery: provided.userQuery || userQuery,\r\n      agentInferredResponse: provided.agentInferredResponse || response.answer,\r\n      agentExtractedIntent: extractedIntent,\r\n      apiResponse: provided.apiResponse ?? response.apiResult,\r\n      sampleJsonResponse: provided.sampleJsonResponse ?? this.getSampleJsonResponseFallback(response),\r\n      grid,\r\n      tables: grid,\r\n      helpGuide: this.typedHelpGuide(provided.helpGuide),\r\n      searchResults: provided.searchResults,\r\n      visualisations: provided.visualisations,\r\n      shiftCardGroups: provided.shiftCardGroups,\r\n      availablePeople: provided.availablePeople,\r\n      rota: provided.rota,\r\n      markdown: provided.markdown\r\n    };\r\n  }\r\n\r\n  private typedHelpGuide(\r\n    guide: AssistantHelpGuide | undefined\r\n  ): AssistantHelpGuide | undefined {\r\n    return guide?.kind === 'analytics' || guide?.kind === 'action'\r\n      ? undefined\r\n      : guide;\r\n  }\r\n\r\n  private createExtractedIntent(\r\n    response: AssistantChatResponse,\r\n    provided?: AssistantExtractedIntent\r\n  ): AssistantExtractedIntent {\r\n    return {\r\n      project: provided?.project ?? response.productLabel ?? response.product ?? response.app,\r\n      projectKey: provided?.projectKey ?? response.product ?? response.app,\r\n      module: provided?.module ?? response.apiModule ?? response.contextResolution?.moduleKey,\r\n      intent: provided?.intent ?? response.intent ?? response.contextResolution?.capabilityKey,\r\n      intentLabel:\r\n        provided?.intentLabel\r\n        ?? response.intentLabel\r\n        ?? response.contextResolution?.capabilityLabel,\r\n      confidence:\r\n        provided?.confidence\r\n        ?? response.confidence\r\n        ?? response.contextResolution?.confidence,\r\n      parameters: provided?.parameters ?? response.parameters ?? response.entities,\r\n      api: provided?.api ?? response.apiCalls?.[0] ?? this.getToolApiCalls(response)?.[0]\r\n    };\r\n  }\r\n\r\n  private getToolApiCalls(\r\n    response: AssistantChatResponse\r\n  ): AssistantMessage['apiCalls'] | undefined {\r\n    if (!response.toolExecution) {\r\n      return undefined;\r\n    }\r\n\r\n    return [{\r\n      method: response.toolExecution.method,\r\n      url: response.toolExecution.endpoint,\r\n      purpose: response.toolExecution.toolName\r\n    }];\r\n  }\r\n\r\n  private getSampleJsonResponseFallback(response: AssistantChatResponse): AssistantFieldMap | undefined {\r\n    if (!response.mockResult || !Object.keys(response.mockResult).length) {\r\n      return undefined;\r\n    }\r\n\r\n    return response.mockResult;\r\n  }\r\n\r\n  private getDisplayTables(\r\n    provided: AssistantDisplayResponse,\r\n    response: AssistantChatResponse\r\n  ): AssistantResponseTable[] {\r\n    if (provided.grid?.length) {\r\n      return provided.grid;\r\n    }\r\n\r\n    if (provided.tables?.length) {\r\n      return provided.tables;\r\n    }\r\n\r\n    if (provided.availablePeople?.length || provided.shiftCardGroups?.length || provided.rota) {\r\n      return [];\r\n    }\r\n\r\n    const rows = this.extractTableRows(provided.apiResponse ?? response.apiResult);\r\n\r\n    if (!rows.length) {\r\n      return [];\r\n    }\r\n\r\n    const columns = this.getTableColumns(rows);\r\n\r\n    return [\r\n      {\r\n        title: 'API Response',\r\n        columns,\r\n        rows: rows.map(row => this.formatTableRow(row, columns.map(column => column.field)))\r\n      }\r\n    ];\r\n  }\r\n\r\n  private extractTableRows(value: unknown): AssistantFieldMap[] {\r\n    if (Array.isArray(value)) {\r\n      return value.filter(this.isFieldMap);\r\n    }\r\n\r\n    if (!this.isFieldMap(value)) {\r\n      return [];\r\n    }\r\n\r\n    const body = value['body'];\r\n\r\n    if (Array.isArray(body)) {\r\n      return body.filter(this.isFieldMap);\r\n    }\r\n\r\n    const items = value['items'];\r\n\r\n    if (Array.isArray(items)) {\r\n      return items.filter(this.isFieldMap);\r\n    }\r\n\r\n    return [];\r\n  }\r\n\r\n  private getTableColumns(rows: AssistantFieldMap[]): AssistantResponseTable['columns'] {\r\n    const fields = Array.from(new Set(rows.flatMap(row => Object.keys(row)))).slice(0, 8);\r\n\r\n    return fields.map(field => ({\r\n      field,\r\n      header: this.toColumnHeader(field)\r\n    }));\r\n  }\r\n\r\n  private formatTableRow(row: AssistantFieldMap, fields: string[]): AssistantFieldMap {\r\n    return Object.fromEntries(\r\n      fields.map(field => [field, this.formatCellValue(row[field])])\r\n    ) as AssistantFieldMap;\r\n  }\r\n\r\n  private formatCellValue(value: AssistantFieldValue | undefined): AssistantFieldValue {\r\n    if (Array.isArray(value)) {\r\n      return value.map(item => this.formatCellValue(item)).join(', ');\r\n    }\r\n\r\n    if (this.isFieldMap(value)) {\r\n      return value['label'] ?? value['name'] ?? value['code'] ?? JSON.stringify(value);\r\n    }\r\n\r\n    return value ?? '';\r\n  }\r\n\r\n  private toColumnHeader(field: string): string {\r\n    return field\r\n      .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\r\n      .replace(/[_-]+/g, ' ')\r\n      .replace(/\\b\\w/g, character => character.toUpperCase());\r\n  }\r\n\r\n  private formatJson(value: unknown): string | undefined {\r\n    if (value === undefined || this.isEmptyObject(value)) {\r\n      return undefined;\r\n    }\r\n\r\n    return JSON.stringify(value, null, 2);\r\n  }\r\n\r\n  private isEmptyObject(value: unknown): boolean {\r\n    return !!value && typeof value === 'object' && !Array.isArray(value) && !Object.keys(value).length;\r\n  }\r\n\r\n  private isFieldMap(value: unknown): value is AssistantFieldMap {\r\n    return !!value && typeof value === 'object' && !Array.isArray(value);\r\n  }\r\n\r\n  private createId(): string {\r\n    return globalThis.crypto?.randomUUID?.() || `${Date.now()}-${Math.random()}`;\r\n  }\r\n\r\n  private traceStepKey(messageId: string, stepId: number): string {\r\n    return `${messageId}:${stepId}`;\r\n  }\r\n\r\n  private getConversationHistory(question = ''): AssistantConversationMessage[] {\r\n    const messages = this.messages();\r\n    const firstUserIndex = messages.findIndex(message => message.role === 'user');\r\n    if (firstUserIndex < 0) {\r\n      return [];\r\n    }\r\n\r\n    return this.sessionState.history(messages\r\n      .slice(firstUserIndex)\r\n      .filter(message => !message.isError && !message.isStreaming)\r\n      .map(message => ({\r\n        role: message.role,\r\n        content: message.content,\r\n        ...(message.capabilityKey ? { capabilityKey: message.capabilityKey } : {})\r\n      })), question);\r\n  }\r\n\r\n  private scrollToLatest() {\r\n    if (this.scrollToLatestTimer) {\r\n      clearTimeout(this.scrollToLatestTimer);\r\n    }\r\n    this.scrollToLatestTimer = setTimeout(() => {\r\n      const element = this.messagesViewport?.nativeElement;\r\n\r\n      if (element) {\r\n        element.scrollTop = element.scrollHeight;\r\n      }\r\n      this.scrollToLatestTimer = undefined;\r\n    });\r\n  }\r\n\r\n  private scrollToMessage(messageId: string) {\r\n    setTimeout(() => {\r\n      const viewport = this.messagesViewport?.nativeElement;\r\n      const message = viewport?.querySelector<HTMLElement>(\r\n        `[data-message-id=\"${messageId}\"]`\r\n      );\r\n      if (!viewport || !message) {\r\n        return;\r\n      }\r\n      const viewportTop = viewport.getBoundingClientRect().top;\r\n      const messageTop = message.getBoundingClientRect().top;\r\n      const paddingTop = Number.parseFloat(getComputedStyle(viewport).paddingTop) || 0;\r\n      viewport.scrollTop = Math.max(\r\n        0,\r\n        viewport.scrollTop + messageTop - viewportTop - paddingTop\r\n      );\r\n    });\r\n  }\r\n}\r\n","<aside\n  class=\"assistant-window\"\r\n  [attr.aria-label]=\"uiCopy.title\"\r\n  role=\"region\"\r\n>\r\n  <section class=\"assistant-panel\">\r\n    <header class=\"assistant-header\">\r\n      <img\r\n        class=\"max-assistant-cloud-mascot\"\r\n        src=\"assets/max/max-assistant-sparkles-styled-gradient.png\"\n        alt=\"\"\r\n        aria-hidden=\"true\"\r\n      >\r\n      <div class=\"assistant-identity\">\r\n        <div class=\"assistant-name-row\">\r\n          <h2 class=\"assistant-name\">\r\n            <img\r\n              class=\"assistant-wordmark\"\r\n              src=\"assets/max/max-ai-wordmark-styled-gradient.png\"\r\n              [alt]=\"uiCopy.title\"\r\n            >\r\n          </h2>\r\n          <span class=\"assistant-beta-tag\">Beta</span>\r\n        </div>\r\n        <span class=\"assistant-subtitle\">{{ uiCopy.subtitle }}</span>\r\n      </div>\r\n      <div class=\"assistant-header-actions\">\r\n        <max-agent-usage [usage]=\"aiUsage()\" [loading]=\"usageLoading()\" (refresh)=\"refreshUsage()\" />\n        <button\r\n          type=\"button\"\r\n          class=\"header-action\"\r\n          [attr.aria-label]=\"uiCopy.clearLabel\"\r\n          [pTooltip]=\"uiCopy.clearTooltip\"\r\n          tooltipPosition=\"bottom\"\r\n          (click)=\"clearChatSession()\"\r\n        >\r\n          <i class=\"header-action-icon pi pi-refresh\" aria-hidden=\"true\"></i>\r\n        </button>\r\n        <button\r\n          type=\"button\"\r\n          class=\"header-action\"\r\n          [attr.aria-label]=\"uiCopy.closeLabel\"\r\n          [pTooltip]=\"uiCopy.closeTooltip\"\r\n          tooltipPosition=\"bottom\"\r\n          (click)=\"requestClose()\"\r\n        >\r\n          <i class=\"header-action-icon pi pi-times\" aria-hidden=\"true\"></i>\r\n        </button>\r\n      </div>\r\n    </header>\r\n\r\n    <div #messagesViewport class=\"assistant-messages\">\r\n      @for(message of messages(); track message.id) {\r\n        <article\r\n          class=\"message {{ message.role }}\"\r\n          [attr.data-message-id]=\"message.id\"\r\n          [class.welcome-message]=\"isWelcomeMessage(message)\"\r\n          [class.welcome]=\"isWelcomeState(message)\"\r\n          [class.error]=\"message.isError && !message.isOffline && !message.isAccessUnavailable\"\r\n          [class.streaming]=\"message.isStreaming\"\r\n          [attr.aria-live]=\"message.isStreaming ? 'polite' : null\"\r\n          [attr.aria-busy]=\"message.isStreaming || null\"\r\n          [attr.role]=\"message.isStreaming ? 'status' : null\"\r\n        >\r\n          @if(message.isAccessUnavailable) {\r\n            <section class=\"assistant-offline assistant-access-unavailable\" role=\"status\" aria-live=\"polite\">\r\n              <svg class=\"assistant-offline-art\" viewBox=\"0 0 200 160\" role=\"img\" [attr.aria-label]=\"uiCopy.accessUnavailableTitle\" focusable=\"false\">\r\n                <ellipse class=\"offline-shadow\" cx=\"100\" cy=\"143\" rx=\"52\" ry=\"6\" />\r\n                <path class=\"offline-cloud-body\" d=\"M100 16 151 36v39c0 31-24 49-51 61-27-12-51-30-51-61V36Z\" />\r\n                <path d=\"M84 73V60a16 16 0 0 1 32 0v13\" />\r\n                <path class=\"offline-plug\" d=\"M77 73h46v37H77Z\" />\r\n                <path d=\"M100 86v11\" />\r\n              </svg>\r\n              <p>{{ message.content }}</p>\r\n              <p-button label=\"Continue in Maxtime\" severity=\"secondary\" [outlined]=\"true\" (onClick)=\"requestClose()\" />\r\n            </section>\r\n          } @else if(message.isOffline) {\r\n            <section class=\"assistant-offline\" role=\"status\" aria-live=\"polite\">\r\n              <svg class=\"assistant-offline-art\" viewBox=\"0 0 200 160\" role=\"img\" [attr.aria-label]=\"uiCopy.offlineTitle\" focusable=\"false\">\r\n                <ellipse class=\"offline-shadow\" cx=\"100\" cy=\"143\" rx=\"61\" ry=\"6\" />\r\n                <g class=\"offline-cloud\">\r\n                  <path class=\"offline-cloud-body\" d=\"M61 86a23 23 0 0 1-3-46 32 32 0 0 1 61-9 27 27 0 0 1 20 55Z\" />\r\n                  <path class=\"offline-face\" d=\"M80 58q5 4 10 0m18 0q5 4 10 0M95 72h9\" />\r\n                </g>\r\n                <g class=\"offline-plug-left\">\r\n                  <path class=\"offline-cable\" d=\"M25 98v7q0 11 11 11h20\" />\r\n                  <path class=\"offline-plug\" d=\"M56 107h15v18H56q-5 0-5-5v-8q0-5 5-5Z\" />\r\n                  <path class=\"offline-cable\" d=\"M71 111h8m-8 10h8\" />\r\n                </g>\r\n                <g class=\"offline-plug-right\">\r\n                  <path class=\"offline-cable\" d=\"M174 98v7q0 11-11 11h-20\" />\r\n                  <path class=\"offline-plug\" d=\"M143 107h-15v18h15q5 0 5-5v-8q0-5-5-5Z\" />\r\n                  <path class=\"offline-cable\" d=\"M132 113v6\" />\r\n                </g>\r\n                <g class=\"offline-disconnected\" aria-hidden=\"true\">\r\n                  <path d=\"m101 105-5 22m-9-23-3-5m29 5 3-5\" />\r\n                </g>\r\n              </svg>\r\n              <p>{{ message.content }}</p>\r\n              <p-button label=\"Continue in Maxtime\" severity=\"secondary\" [outlined]=\"true\" (onClick)=\"requestClose()\" />\r\n            </section>\r\n          } @else if(message.isStreaming && !message.displayResponse && !message.cards?.length) {\r\n            <div class=\"assistant-processing\" aria-label=\"Max AI activity\">\r\n              @if(!message.streamingContent) {\r\n                <p class=\"assistant-processing-update active\">\r\n                  <span class=\"assistant-processing-sparkles\" aria-hidden=\"true\">\r\n                    @for (star of ['main', 'upper', 'lower', 'small']; track star) {\r\n                      <img\r\n                        class=\"assistant-processing-star {{ star }}\"\r\n                        src=\"assets/max/max-assistant-sparkles-styled-gradient.png\"\r\n                        alt=\"\"\r\n                      >\r\n                    }\r\n                  </span>\r\n                  <span>{{ message.content }}</span>\r\n                </p>\r\n              }\r\n              @if(message.streamingContent) {\r\n                <div class=\"assistant-streaming-answer assistant-markdown\">\r\n                  <span class=\"assistant-streaming-answer-text\">{{ message.streamingContent }}</span>\r\n                  <span class=\"assistant-streaming-cursor\" aria-hidden=\"true\"></span>\r\n                </div>\r\n              }\r\n            </div>\r\n          } @else if(message.displayResponse; as responseDetails) {\r\n            @if(responseDetails.helpGuide; as guide) {\r\n              <section\r\n                class=\"assistant-help-guide\"\r\n                [class.assistant-information-guide]=\"isContentGuide(guide.kind)\"\r\n                [class.assistant-continuation-guide]=\"guide.continuation\"\r\n                [attr.aria-label]=\"helpGuideLabel(guide.kind)\"\r\n              >\r\n                @if(!guide.continuation) {\r\n                  <header class=\"assistant-help-heading\">\r\n                    <span class=\"assistant-help-topic-icon\" aria-hidden=\"true\">\r\n                      <i [class]=\"helpIcon(guide.icon)\"></i>\r\n                    </span>\r\n                    <div>\r\n                      <span class=\"assistant-help-eyebrow\">\r\n                        {{ helpGuideLabel(guide.kind) }}\r\n                      </span>\r\n                      <h3>{{ guide.title }}</h3>\r\n                    </div>\r\n                  </header>\r\n                }\r\n\r\n                @if(guide.summary) {\r\n                  <p class=\"assistant-help-summary\">{{ guide.summary }}</p>\r\n                }\r\n\r\n                @if(guide.content) {\r\n                  <div\r\n                    class=\"assistant-help-content assistant-information-content assistant-markdown\"\r\n                    [innerHTML]=\"guide.content | maxAssistantMarkdown: helpGuideMarkdownVariant(guide.kind)\"\r\n                  ></div>\r\n                }\r\n\r\n                @if(guide.steps.length) {\r\n                  <section class=\"assistant-help-section assistant-help-steps\">\r\n                    <h4>Steps to follow</h4>\r\n                    <ol>\r\n                      @for(step of guide.steps; track $index) {\r\n                        <li>\n                          <span class=\"assistant-help-step-number\" aria-hidden=\"true\">{{ $index + 1 }}</span>\n                          <span>{{ step }}</span>\n                        </li>\n                      }\r\n                    </ol>\r\n                  </section>\r\n                }\r\n\r\n                @if(guide.tips?.length) {\r\n                  <aside class=\"assistant-help-callout assistant-help-tips\">\r\n                    <i class=\"pi pi-lightbulb\" aria-hidden=\"true\"></i>\r\n                    <div>\r\n                      <h4>Good to know</h4>\r\n                      <ul>\r\n                        @for(tip of guide.tips ?? []; track $index) {\r\n                          <li>{{ tip }}</li>\r\n                        }\r\n                      </ul>\r\n                    </div>\r\n                  </aside>\r\n                }\r\n\r\n                @if(guide.restrictions?.length) {\r\n                  <aside class=\"assistant-help-callout assistant-help-restrictions\">\r\n                    <i class=\"pi pi-info-circle\" aria-hidden=\"true\"></i>\r\n                    <div>\r\n                      <h4>Keep in mind</h4>\r\n                      <ul>\r\n                        @for(restriction of guide.restrictions ?? []; track $index) {\r\n                          <li>{{ restriction }}</li>\r\n                        }\r\n                      </ul>\r\n                    </div>\r\n                  </aside>\r\n                }\r\n\r\n                @if(guide.accessNote) {\r\n                  <p class=\"assistant-help-access\">\r\n                    <i class=\"pi pi-lock\" aria-hidden=\"true\"></i>\r\n                    <span>{{ guide.accessNote }}</span>\r\n                  </p>\r\n                }\r\n\r\n                @if(guide.navigation; as navigation) {\r\n                  <div class=\"assistant-help-navigation-row\">\r\n                    <button\r\n                      pButton\r\n                      type=\"button\"\r\n                      size=\"small\"\r\n                      class=\"assistant-help-navigation\"\r\n                      [label]=\"navigation.label\"\r\n                      [icon]=\"helpIcon(guide.icon)\"\r\n                      [disabled]=\"isSending()\"\r\n                      (click)=\"performHostAction(navigation.hostAction)\"\r\n                    ></button>\r\n                  </div>\r\n                }\r\n              </section>\r\n            } @else if(responseDetails.markdown || responseDetails.agentInferredResponse || message.content) {\r\n              <div\r\n                class=\"assistant-result assistant-markdown\"\r\n                [innerHTML]=\"(responseDetails.markdown || responseDetails.agentInferredResponse || message.content) | maxAssistantMarkdown\"\r\n              ></div>\r\n            }\r\n            @if(message.cards?.length) {\r\n              <div class=\"assistant-cards\">\r\n                @for(card of message.cards ?? []; track $index) {\r\n                  @let displayedCard = personCard(card);\r\n                  <section class=\"assistant-card\">\r\n                    <header>\r\n                      <span class=\"assistant-card-title\">{{ card.title }}</span>\r\n                      @if(card.subtitle) {\r\n                        <span class=\"assistant-card-subtitle\">{{ card.subtitle }}</span>\r\n                      }\r\n                    </header>\r\n                    @if(displayedCard.person; as person) {\r\n                      <max-agent-person [person]=\"person\"></max-agent-person>\r\n                    }\r\n                    <div class=\"assistant-card-metrics\">\r\n                      @for(metric of displayedCard.metrics; track metric.label) {\r\n                        <div class=\"assistant-card-metric\" [class.assistant-card-metric-wide]=\"isListMetric(metric)\" [attr.data-tone]=\"metric.tone || 'default'\">\r\n                          <span class=\"assistant-card-label\">{{ metric.label }}</span>\r\n                          <span class=\"assistant-card-value\">{{ metric.value }}</span>\r\n                        </div>\r\n                      }\r\n                    </div>\r\n                    @if(card.footer) {\r\n                      <footer>{{ card.footer }}</footer>\r\n                    }\r\n                  </section>\r\n                }\r\n              </div>\r\n            }\r\n            @if(responseDetails.searchResults?.length) {\r\n              <div class=\"assistant-cards assistant-search-results\" aria-label=\"Search results\">\r\n                @for(result of responseDetails.searchResults ?? []; track $index) {\r\n                  <section class=\"assistant-card assistant-search-result\">\r\n                    <header>\r\n                      <i\r\n                        class=\"assistant-search-result-icon\"\r\n                        [class]=\"searchResultIcon(result.type)\"\r\n                        aria-hidden=\"true\"\r\n                      ></i>\r\n                      <div class=\"assistant-search-result-copy\">\r\n                        <strong>{{ result.title }}</strong>\r\n                        <span>{{ result.type }}</span>\r\n                      </div>\r\n                    </header>\r\n                    <div class=\"suggestions\" aria-label=\"Available destinations\">\r\n                      @for(action of result.actions; track action.label) {\r\n                        <button\r\n                          pButton\r\n                          type=\"button\"\r\n                          size=\"small\"\r\n                          severity=\"secondary\"\r\n                          class=\"suggestion-chip\"\r\n                          [label]=\"action.label\"\r\n                          [icon]=\"searchActionIcon(action)\"\r\n                          [disabled]=\"isSending()\"\r\n                          (click)=\"performHostAction(action.hostAction)\"\r\n                        ></button>\r\n                      }\r\n                    </div>\r\n                  </section>\r\n                }\r\n              </div>\r\n            }\r\n            @if(message.pendingAction; as pendingAction) {\r\n              <section class=\"pending-action\" aria-label=\"Cortex action confirmation\">\r\n                <div class=\"pending-action-heading\">\r\n                  <strong>Confirmation required</strong>\r\n                  <span>{{ pendingAction.method }}</span>\r\n                </div>\r\n                <p>{{ pendingAction.summary }}</p>\r\n                <small>Expires {{ pendingAction.expiresAt | date: 'd MMM yyyy, h:mm a' }}</small>\r\n                @if(message.actionDecision; as actionDecision) {\r\n                  <p class=\"action-decision\">\r\n                    {{ actionDecision === 'approve' ? 'Approval sent' : 'Rejection sent' }}\r\n                  </p>\r\n                } @else {\r\n                  <div class=\"pending-action-buttons\">\r\n                    <button\r\n                      pButton\r\n                      type=\"button\"\r\n                      size=\"small\"\r\n                      severity=\"success\"\r\n                      label=\"Approve\"\r\n                      [disabled]=\"isSending()\"\r\n                      (click)=\"resolvePendingAction(message, 'approve')\"\r\n                    ></button>\r\n                    <button\r\n                      pButton\r\n                      type=\"button\"\r\n                      size=\"small\"\r\n                      outlined\r\n                      severity=\"secondary\"\r\n                      label=\"Reject\"\r\n                      [disabled]=\"isSending()\"\r\n                      (click)=\"resolvePendingAction(message, 'reject')\"\r\n                    ></button>\r\n                  </div>\r\n                }\r\n              </section>\r\n            }\r\n            @if(responseDetails.availablePeople?.length) {\r\n              <section class=\"assistant-people-section\" aria-label=\"Available people\">\r\n                <h3>Available people</h3>\r\n                <div class=\"entity-options\">\r\n                  @for(person of responseDetails.availablePeople; track person.id) {\r\n                    <max-agent-entity-option [entity]=\"person\" [availability]=\"person\"></max-agent-entity-option>\r\n                  }\r\n                </div>\r\n              </section>\r\n            }\r\n            @if(responseDetails.shiftCardGroups?.length) {\r\n              <div class=\"assistant-shift-groups\" aria-label=\"Team shifts\">\r\n                @for(group of responseDetails.shiftCardGroups ?? []; track group.title) {\r\n                  <section class=\"assistant-shift-group\">\r\n                    @if(group.variant !== 'assignment') { <h3>{{ group.title }}</h3> }\r\n                    <div class=\"assistant-shift-card-grid\">\r\n                      @for(shift of group.shifts; track shift.id || $index) {\r\n                        @if(shift.selection; as selection) {\r\n                          <button pButton type=\"button\" [text]=\"true\"\r\n                            class=\"assistant-shift-selection\"\r\n                            [attr.aria-label]=\"selection.label\"\r\n                            [disabled]=\"isSending()\"\r\n                            (click)=\"useSuggestion(selection)\">\r\n                              <max-agent-shift-card [shift]=\"shift\" [variant]=\"group.variant || 'rota'\"></max-agent-shift-card>\r\n                          </button>\r\n                        } @else {\r\n                        <max-agent-shift-card\r\n                          [shift]=\"shift\"\r\n                          [variant]=\"group.variant || 'definition'\"\r\n                        ></max-agent-shift-card>\r\n                        }\r\n                      }\r\n                    </div>\r\n                  </section>\r\n                }\r\n              </div>\r\n            }\r\n            @if(responseDetails.rota; as rota) {\r\n              <section class=\"assistant-rota\" [attr.aria-label]=\"rota.title\">\r\n                <div class=\"assistant-rota-heading\">\r\n                  <h3>{{ rota.title }}</h3>\r\n                  <div class=\"assistant-rota-summary\">\r\n                    @if(rota.startDate) {\r\n                      <span><small>From</small><strong>{{ rota.startDate }}</strong></span>\r\n                    }\r\n                    <span><small>Weeks</small><strong>{{ rota.weeksCount }}</strong></span>\r\n                    @if(rota.contracted) {\r\n                      <span><small>Contracted</small><strong>{{ rota.contracted }}</strong></span>\r\n                    }\r\n                    @if(rota.autoPublish) {\r\n                      <span><small>Auto publish</small><strong>{{ rota.autoPublish }}</strong></span>\r\n                    }\r\n                  </div>\r\n                </div>\r\n                <div class=\"assistant-rota-scroll\">\r\n                  @for(week of rota.weeks; track week.week) {\r\n                    <section class=\"assistant-rota-week\">\r\n                      <header class=\"assistant-rota-week-heading\">\r\n                        <strong>Week {{ week.week }}</strong>\r\n                        @if(week.duration) {\r\n                          <span>{{ week.duration }}</span>\r\n                        }\r\n                      </header>\r\n                      <div class=\"assistant-rota-week-grid\">\r\n                        @for(day of week.days; track day.day) {\r\n                          <article class=\"assistant-rota-day\">\r\n                            <header>\r\n                              <strong>{{ day.label }}</strong>\r\n                              @if(day.period) {\r\n                                <span>{{ day.period }}</span>\r\n                              }\r\n                            </header>\r\n                            <div class=\"assistant-rota-day-shifts\">\r\n                              @for(shift of day.shifts; track shift.id || $index) {\r\n                                <max-agent-shift-card\r\n                                  [shift]=\"shift\"\r\n                                  variant=\"rota\"\r\n                                ></max-agent-shift-card>\r\n                              } @empty {\r\n                                <span class=\"assistant-rota-empty\">No shifts</span>\r\n                              }\r\n                            </div>\r\n                          </article>\r\n                        }\r\n                      </div>\r\n                    </section>\r\n                  } @empty {\r\n                    <p class=\"assistant-rota-no-weeks\">No rota weeks were returned.</p>\r\n                  }\r\n                </div>\r\n              </section>\r\n            }\r\n            @if(responseDetails.visualisations?.length) {\r\n              <div class=\"assistant-visualisations\">\r\n                @for(visualisation of responseDetails.visualisations ?? []; track visualisation.title) {\r\n                  <section class=\"assistant-visualisation\">\r\n                    <header class=\"assistant-export-heading\">\r\n                      <h3>{{ visualisation.title }}</h3>\r\n                      <button\r\n                        pButton\r\n                        type=\"button\"\r\n                        size=\"small\"\r\n                        severity=\"secondary\"\r\n                        class=\"assistant-export-action assistant-export-action-pdf\"\r\n                        icon=\"pi pi-file-pdf\"\r\n                        [attr.aria-label]=\"'Export ' + visualisation.title + ' as PDF'\"\r\n                        (click)=\"exportVisualisation(visualisation, chartCanvas)\"\r\n                      ></button>\r\n                    </header>\r\n                    <div\r\n                      #chartCanvas\r\n                      class=\"assistant-chart-canvas\"\r\n                      role=\"img\"\r\n                      [attr.aria-label]=\"chartAriaLabel(visualisation)\"\r\n                      [style.height.px]=\"chartHeight(visualisation)\"\r\n                    >\r\n                      <p-chart\r\n                        class=\"assistant-prime-chart\"\r\n                        [type]=\"chartType(visualisation)\"\r\n                        [data]=\"chartData(visualisation)\"\r\n                        [options]=\"chartOptions(visualisation)\"\r\n                      ></p-chart>\r\n                    </div>\r\n                  </section>\r\n                }\r\n              </div>\r\n            }\r\n            @if(getResponseGrid(responseDetails).length) {\r\n              <div class=\"assistant-tables\">\r\n                @for(table of getResponseGrid(responseDetails); track $index; let tableIndex = $index) {\r\n                  <section class=\"assistant-table-section\">\r\n                    <header class=\"assistant-export-heading\">\r\n                      @if(table.title) {\r\n                        <h3>{{ table.title }}</h3>\r\n                      }\r\n                      @if(table.bulkActions?.length) {\r\n                        <div class=\"flex gap-2 flex-wrap justify-content-end ml-auto\">\r\n                          @for(action of table.bulkActions; track action.label) {\r\n                            <p-button [label]=\"action.label\" [severity]=\"action.tone || 'secondary'\" size=\"small\"\r\n                              [outlined]=\"action.outlined ?? action.tone === 'danger'\" [disabled]=\"isSending() || action.disabled === true\"\r\n                              (onClick)=\"useTableAction(action)\"></p-button>\r\n                          }\r\n                        </div>\r\n                      }\r\n                    </header>\r\n                    <div class=\"assistant-table-wrap\" [class.assistant-table-wrap--many-columns]=\"table.columns.length >= 5\">\r\n                      <table>\r\n                        <thead>\r\n                          <tr>\r\n                            @if(table.pagination) {\r\n                              <th class=\"assistant-table-serial\">SL. No</th>\r\n                            }\r\n                            @for(column of table.columns; track column.field) {\r\n                              <th [class.assistant-table-person]=\"column.kind === 'person'\"\r\n                                [class.assistant-table-value]=\"column.kind !== 'person'\"\r\n                                [class.w-full]=\"column.kind === 'person' && !!table.actions?.length\"\r\n                                [class.white-space-nowrap]=\"!!table.actions?.length && column.kind !== 'person'\">{{ column.header }}</th>\r\n                            }\r\n                            @if(table.actions?.length) {\r\n                              <th class=\"w-1 white-space-nowrap\">{{ table.actionsHeader ?? 'Actions' }}</th>\r\n                            }\r\n                          </tr>\r\n                        </thead>\r\n                        <tbody>\r\n                          @for(row of table.rows; track $index; let rowIndex = $index) {\r\n                            <tr>\r\n                              @if(table.pagination) {\r\n                                <td class=\"assistant-table-serial\">{{ rowIndex + 1 }}</td>\r\n                              }\r\n                              @for(column of table.columns; track column.field) {\r\n                                <td [class.assistant-table-person]=\"column.kind === 'person'\"\r\n                                  [class.assistant-table-value]=\"column.kind !== 'person'\"\r\n                                  [class.white-space-nowrap]=\"!!table.actions?.length && column.kind !== 'person'\">\r\n                                  @if(column.kind === 'person' && table.people?.[rowIndex]; as person) {\r\n                                    <max-agent-person [person]=\"person\"></max-agent-person>\r\n                                  } @else if(column.secondaryField) {\r\n                                    <div class=\"white-space-nowrap\">{{ row[column.field] }}</div>\r\n                                    @if(row[column.secondaryField]) {\r\n                                      <div class=\"white-space-nowrap\">{{ row[column.secondaryField] }}</div>\r\n                                    }\r\n                                  } @else { {{ row[column.field] }} }\r\n                                </td>\r\n                              }\r\n                              @if(table.actions?.length) {\r\n                                <td>\r\n                                  <div class=\"assistant-table-actions\">\r\n                                    @for(action of getTableRowActions(table, rowIndex); track action.label) {\r\n                                      <button\r\n                                        pButton\r\n                                        type=\"button\"\r\n                                        size=\"small\"\r\n                                        [severity]=\"action.tone || 'secondary'\"\r\n                                        [outlined]=\"action.outlined ?? action.tone === 'danger'\"\r\n                                        [label]=\"action.label\"\r\n                                        [disabled]=\"isSending() || action.disabled === true\"\r\n                                        (click)=\"useTableAction(action)\"\r\n                                      ></button>\r\n                                    }\r\n                                  </div>\r\n                                </td>\r\n                              }\r\n                            </tr>\r\n                          }\r\n                        </tbody>\r\n                      </table>\r\n                    </div>\r\n                    @if(table.pagination || (!table.actions?.length && !table.bulkActions?.length)) {\r\n                      <footer class=\"assistant-table-pagination flex-nowrap\">\r\n                        @if(table.pagination; as pagination) {\r\n                        <div class=\"flex flex-1 align-items-center flex-wrap gap-2\">\r\n                        <span>{{ tablePageStatus(table) }}</span>\r\n                        @if(hasNextTablePage(table)) {\r\n                          <button\r\n                            pButton\r\n                            type=\"button\"\r\n                            size=\"small\"\r\n                            severity=\"secondary\"\r\n                            class=\"assistant-table-page-action\"\r\n                            icon=\"pi pi-arrow-down\"\r\n                            [label]=\"nextTablePageLabel(pagination)\"\r\n                            [loading]=\"isTablePageLoading(message.id, tableIndex)\"\r\n                            [disabled]=\"isSending()\"\r\n                            (click)=\"retrieveNextTablePage(message, table, tableIndex)\"\r\n                          ></button>\r\n                        }\r\n                        </div>\r\n                        }\r\n                        @if(!table.actions?.length && !table.bulkActions?.length) {\r\n                          <button pButton type=\"button\" size=\"small\" severity=\"secondary\"\r\n                            class=\"assistant-export-action assistant-export-action-excel ml-auto flex-shrink-0\" icon=\"pi pi-file-excel\"\r\n                            [attr.aria-label]=\"'Export ' + (table.title || 'results') + ' to Excel'\"\r\n                            (click)=\"exportTable(table)\"></button>\r\n                        }\r\n                      </footer>\r\n                    }\r\n                    @if(table.pagination) {\r\n                      @if(tablePageError(message.id, tableIndex); as pageError) {\r\n                        <p class=\"assistant-table-page-error\" role=\"alert\">{{ pageError }}</p>\r\n                      }\r\n                    }\r\n                  </section>\r\n                }\r\n              </div>\r\n            }\r\n            @if(message.sources?.length) {\r\n              <div class=\"assistant-sources\">\r\n                <strong>Sources</strong>\r\n                @for(source of message.sources ?? []; track source.citation) {\r\n                  <span>{{ source.citation }}</span>\r\n                }\r\n              </div>\r\n            }\r\n            @if(developerDetailsEnabled && message.developerTrace?.steps?.length) {\r\n              @if(isDetailsVisible(message.id)) {\r\n                <div class=\"details-dialog-backdrop\" (click)=\"toggleDetails(message.id)\">\r\n                <section\r\n                  class=\"developer-details\"\r\n                  role=\"dialog\"\r\n                  aria-modal=\"true\"\r\n                  aria-label=\"Agent processing details\"\r\n                  (click)=\"$event.stopPropagation()\"\r\n                >\r\n                  <header class=\"developer-details-header\">\r\n                    <div>\r\n                      <span class=\"developer-eyebrow\">Developer trace</span>\r\n                      <h3>How this request was processed</h3>\r\n                      <p>A technical, step-by-step account of routing, inference, tools and results.</p>\r\n                    </div>\r\n                    <div class=\"details-dialog-actions\">\r\n                      <button\r\n                        type=\"button\"\r\n                        class=\"details-dialog-close\"\r\n                        aria-label=\"Close processing details\"\r\n                        (click)=\"toggleDetails(message.id)\"\r\n                      >\r\n                        <i class=\"pi pi-times\" aria-hidden=\"true\"></i>\r\n                      </button>\r\n                    </div>\r\n                  </header>\r\n\r\n                  @if(message.developerTrace!.run; as run) {\r\n                    <section class=\"trace-run-summary\" aria-label=\"Run summary\">\r\n                      <div class=\"trace-metric\"><span>Total runtime</span><strong>{{ run.durationMs }} ms</strong></div>\r\n                      <div class=\"trace-metric\"><span>Model calls</span><strong>{{ run.llmCalls }}</strong></div>\r\n                      <div class=\"trace-metric\"><span>Embedding calls</span><strong>{{ run.embeddingCalls }}</strong></div>\r\n                      <div class=\"trace-metric\"><span>API calls</span><strong>{{ run.apiCalls }}</strong></div>\r\n                      <div class=\"trace-loop-policy\">\r\n                        <div>\r\n                          <span>Execution architecture</span>\r\n                          <strong>Deterministic step pipeline</strong>\r\n                        </div>\r\n                        <span class=\"trace-no-loop\">No autonomous model loop</span>\r\n                        <p>{{ run.loopPolicy }}</p>\r\n                      </div>\r\n                    </section>\r\n                  }\r\n\r\n                  <ol class=\"workflow-trace\">\r\n                    @for(step of message.developerTrace!.steps; track step.id; let stepIndex = $index) {\r\n                      <li class=\"workflow-step\" [attr.data-status]=\"traceStepTone(step)\">\r\n                        <section class=\"workflow-section\">\r\n                          <button\r\n                            type=\"button\"\r\n                            class=\"workflow-step-toggle\"\r\n                            [attr.aria-expanded]=\"isTraceStepExpanded(message.id, step.id)\"\r\n                            (click)=\"toggleTraceStep(message.id, step.id)\"\r\n                          >\r\n                            <div>\r\n                              <span class=\"workflow-step-number\">Step {{ stepIndex + 1 }}</span>\r\n                              <h4>{{ step.title }}</h4>\r\n                              <span class=\"workflow-category\">{{ formatTraceCategory(step.category) }}</span>\r\n                            </div>\r\n                            <div class=\"workflow-meta\">\r\n                              <span class=\"workflow-status\">{{ traceStepStatus(step) }}</span>\r\n                              @if(step.durationMs !== undefined) {\r\n                                <span>{{ step.durationMs }} ms</span>\r\n                              }\r\n                              <i\r\n                                class=\"pi workflow-expand-icon\"\r\n                                [class.pi-chevron-down]=\"isTraceStepExpanded(message.id, step.id)\"\r\n                                [class.pi-chevron-right]=\"!isTraceStepExpanded(message.id, step.id)\"\r\n                                aria-hidden=\"true\"\r\n                              ></i>\r\n                            </div>\r\n                          </button>\r\n\r\n                          @if(isTraceStepExpanded(message.id, step.id)) {\r\n                          <div class=\"workflow-step-content\">\r\n                          @if(step.metadata?.summary) {\r\n                            <p class=\"workflow-summary\">{{ step.metadata!.summary }}</p>\r\n                          }\r\n\r\n                          @if(step.metadata?.technology; as technology) {\r\n                            <div class=\"trace-technology\">\r\n                              <span class=\"trace-section-label\">Technology</span>\r\n                              <div class=\"trace-inline-facts\">\r\n                                <span><small>Component</small>{{ technology.component }}</span>\r\n                                @if(technology.model) { <span><small>Model</small>{{ technology.model }}</span> }\r\n                                @if(technology.library) { <span><small>Library</small>{{ technology.library }}</span> }\r\n                                @if(technology.provider) { <span><small>Provider</small>{{ technology.provider }}</span> }\r\n                                @if(technology.operation) { <span><small>Operation</small>{{ technology.operation }}</span> }\r\n                              </div>\r\n                            </div>\r\n                          }\r\n\r\n                          @if(step.metadata?.control; as control) {\r\n                            <div class=\"trace-control\">\r\n                              <div>\r\n                                <span class=\"trace-section-label\">Stop control</span>\r\n                                <strong>{{ formatTraceLabel(control.mode) }}</strong>\r\n                              </div>\r\n                              @if(control.maximumIterations !== undefined) {\r\n                                <span>{{ control.iterationsUsed ?? 0 }} / {{ control.maximumIterations }} iteration</span>\r\n                              }\r\n                              <p>{{ control.stopCondition }}</p>\r\n                            </div>\r\n                          }\r\n\r\n                          @switch(step.category) {\r\n                            @case('request') {\r\n                              @if(traceField(step.input, 'userQuery'); as userQuery) {\r\n                                <div class=\"trace-query\">\r\n                                  <span>Original user query</span>\r\n                                  <blockquote>{{ formatTraceScalar(userQuery) }}</blockquote>\r\n                                </div>\r\n                              }\r\n                              <div class=\"trace-card-grid\">\r\n                                @for(group of [\r\n                                  { label: 'Product', value: traceMapField(step.input, 'product') },\r\n                                  { label: 'User', value: traceMapField(step.input, 'user') },\r\n                                  { label: 'Request context', value: traceMapField(step.input, 'requestContext') },\r\n                                  { label: 'Conversation', value: traceMapField(step.input, 'conversation') },\r\n                                  { label: 'Live API context', value: traceMapField(step.input, 'liveApi') }\r\n                                ]; track group.label) {\r\n                                  @if(group.value) {\r\n                                    <section class=\"trace-data-card\">\r\n                                      <h5>{{ group.label }}</h5>\r\n                                      <dl class=\"trace-field-list\">\r\n                                        @for(entry of traceEntries(group.value, group.label === 'User' ? ['permissions'] : []); track entry.key) {\r\n                                          <div><dt>{{ entry.label }}</dt><dd>{{ formatTraceScalar(entry.value) }}</dd></div>\r\n                                        }\r\n                                      </dl>\r\n                                    </section>\r\n                                  }\r\n                                }\r\n                              </div>\r\n                            }\r\n\r\n                            @case('intent_projection') {\r\n                              <div class=\"trace-transform\">\r\n                                <div>\r\n                                  <span>Original query</span>\r\n                                  <p>{{ formatTraceScalar(traceField(step.output, 'originalUserQuery') ?? traceField(step.input, 'originalUserQuery')) }}</p>\r\n                                </div>\r\n                                <span class=\"trace-transform-arrow\" aria-hidden=\"true\">→</span>\r\n                                <div class=\"trace-transform-result\">\r\n                                  <span>Generalised intent sent to embedding</span>\r\n                                  <p>{{ formatTraceScalar(traceField(step.output, 'generalisedIntent') ?? traceField(step.output, 'routingText')) }}</p>\r\n                                </div>\r\n                              </div>\r\n                              @if(traceArrayField(step.output, 'removedArguments').length) {\r\n                                <div class=\"trace-section\">\r\n                                  <span class=\"trace-section-label\">Arguments removed before routing</span>\r\n                                  <div class=\"trace-entity-list\">\r\n                                    @for(argument of traceArrayField(step.output, 'removedArguments'); track $index) {\r\n                                      <span><small>{{ formatTraceScalar(traceField(argument, 'kind')) }}</small>{{ formatTraceScalar(traceField(argument, 'value')) }}</span>\r\n                                    }\r\n                                  </div>\r\n                                </div>\r\n                              }\r\n                            }\r\n\r\n                            @case('embedding') {\r\n                              <div class=\"trace-query trace-query-compact\">\r\n                                <span>Embedded text</span>\r\n                                <blockquote>{{ formatTraceScalar(traceField(step.input, 'generalisedIntent')) }}</blockquote>\r\n                              </div>\r\n                              <div class=\"trace-stat-grid\">\r\n                                <div><span>Embedding model</span><strong>{{ formatTraceScalar(traceField(step.output, 'model') ?? traceField(step.input, 'model')) }}</strong></div>\r\n                                <div><span>Dimensions</span><strong>{{ formatTraceScalar(traceField(step.output, 'dimensions')) }}</strong></div>\r\n                                <div><span>Vector magnitude</span><strong>{{ formatTraceScalar(traceField(step.output, 'vectorMagnitude')) }}</strong></div>\r\n                                <div><span>Full vector exposed</span><strong>{{ formatTraceScalar(traceField(step.output, 'fullVectorShown')) }}</strong></div>\r\n                              </div>\r\n                              @if(traceField(step.output, 'vectorPreview'); as vectorPreview) {\r\n                                <div class=\"trace-vector\">\r\n                                  <span>Vector preview</span>\r\n                                  <code>{{ formatTraceScalar(vectorPreview) }}</code>\r\n                                </div>\r\n                              }\r\n                            }\r\n\r\n                            @case('capability_routing') {\r\n                              @if(traceMapField(step.output, 'routing'); as routing) {\r\n                                <div class=\"trace-supabase-call\">\r\n                                  <div><span>Routing strategy</span><strong>{{ formatTraceScalar(traceField(routing, 'strategy')) }}</strong></div>\r\n                                  <div><span>Cache status</span><strong>{{ formatTraceScalar(traceField(routing, 'cacheStatus')) }}</strong></div>\r\n                                  <div><span>Supabase RPC executed</span><strong>{{ formatTraceScalar(traceField(routing, 'supabaseRpcExecuted')) }}</strong></div>\r\n                                  <div><span>Vector search executed</span><strong>{{ formatTraceScalar(traceField(routing, 'vectorSearchExecuted')) }}</strong></div>\r\n                                  @if(traceField(routing, 'supabaseRpcExecuted')) {\r\n                                    <div><span>Supabase RPC</span><strong>{{ formatTraceScalar(traceField(routing, 'rpc')) }}</strong></div>\r\n                                    <div><span>Database</span><strong>{{ formatTraceScalar(traceField(routing, 'database')) }}</strong></div>\r\n                                    @if(traceArrayField(routing, 'tables').length) {\r\n                                      <div class=\"trace-table-list\">\r\n                                        <span>Tables searched</span>\r\n                                        <div>\r\n                                          @for(table of traceArrayField(routing, 'tables'); track $index) {\r\n                                            <code>{{ formatTraceScalar(table) }}</code>\r\n                                          }\r\n                                        </div>\r\n                                      </div>\r\n                                    }\r\n                                  }\r\n                                </div>\r\n                              } @else {\r\n                                <div class=\"trace-supabase-call\">\r\n                                  <div><span>Supabase RPC</span><strong>{{ formatTraceScalar(traceField(step.input, 'rpc')) }}</strong></div>\r\n                                  <div><span>Database</span><strong>{{ formatTraceScalar(traceField(step.input, 'database')) }}</strong></div>\r\n                                  @if(traceArrayField(step.input, 'tables').length) {\r\n                                    <div class=\"trace-table-list\">\r\n                                      <span>Tables searched</span>\r\n                                      <div>\r\n                                        @for(table of traceArrayField(step.input, 'tables'); track $index) {\r\n                                          <code>{{ formatTraceScalar(table) }}</code>\r\n                                        }\r\n                                      </div>\r\n                                    </div>\r\n                                  }\r\n                                </div>\r\n                              }\r\n                              @if(traceMapField(step.output, 'decision'); as decision) {\r\n                                <section class=\"trace-decision\">\r\n                                  <span>Routing decision</span>\r\n                                  <strong>{{ formatTraceScalar(decision['selectedCapabilityLabel'] ?? decision['selectedCapabilityKey']) }}</strong>\r\n                                  <div>\r\n                                    <span>Status: {{ formatTraceScalar(decision['status']) }}</span>\r\n                                    <span>Confidence: {{ formatSimilarity(decision['confidence']) }}</span>\r\n                                    <span>Runner-up: {{ formatSimilarity(decision['runnerUpConfidence']) }}</span>\r\n                                  </div>\r\n                                </section>\r\n                              }\r\n                              @if(traceArrayField(step.output, 'matchedCapabilities').length) {\r\n                                <div class=\"trace-ranking-wrap\">\r\n                                  <span class=\"trace-section-label\">Ranked capability matches</span>\r\n                                  <table class=\"trace-ranking\">\r\n                                    <thead><tr><th>#</th><th>Capability</th><th>Combined</th><th>Semantic</th><th>Definition</th><th>Example</th><th>Keyword</th></tr></thead>\r\n                                    <tbody>\r\n                                      @for(candidate of traceArrayField(step.output, 'matchedCapabilities'); track $index) {\r\n                                        <tr>\r\n                                          <td>{{ formatTraceScalar(traceField(candidate, 'rank')) }}</td>\r\n                                          <td><strong>{{ formatTraceScalar(traceField(candidate, 'label')) }}</strong><code>{{ formatTraceScalar(traceField(candidate, 'capabilityKey')) }}</code></td>\r\n                                          <td>{{ formatSimilarity(traceField(candidate, 'combinedScore')) }}</td>\r\n                                          <td>{{ formatSimilarity(traceField(candidate, 'semanticScore')) }}</td>\r\n                                          <td>{{ formatSimilarity(traceField(candidate, 'definitionScore')) }}</td>\r\n                                          <td>{{ formatSimilarity(traceField(candidate, 'exampleScore')) }}</td>\r\n                                          <td>{{ formatSimilarity(traceField(candidate, 'keywordScore')) }}</td>\r\n                                        </tr>\r\n                                      }\r\n                                    </tbody>\r\n                                  </table>\r\n                                </div>\r\n                              }\r\n                            }\r\n\r\n                            @case('argument_extraction') {\r\n                              <div class=\"trace-card-grid\">\r\n                                @if(traceMapField(step.output, 'selectedCapability') ?? traceMapField(step.input, 'selectedCapability'); as capability) {\r\n                                  <section class=\"trace-data-card trace-data-card-accent\">\r\n                                    <h5>Selected capability</h5>\r\n                                    <dl class=\"trace-field-list\">\r\n                                      @for(entry of traceEntries(capability); track entry.key) {\r\n                                        <div><dt>{{ entry.label }}</dt><dd>{{ formatTraceScalar(entry.value) }}</dd></div>\r\n                                      }\r\n                                    </dl>\r\n                                  </section>\r\n                                }\r\n                                @if(traceMapField(step.input, 'tool'); as tool) {\r\n                                  <section class=\"trace-data-card\">\r\n                                    <h5>Allowlisted tool</h5>\r\n                                    <dl class=\"trace-field-list\">\r\n                                      @for(entry of traceEntries(tool); track entry.key) {\r\n                                        <div><dt>{{ entry.label }}</dt><dd>{{ formatTraceScalar(entry.value) }}</dd></div>\r\n                                      }\r\n                                    </dl>\r\n                                  </section>\r\n                                }\r\n                              </div>\r\n                              @if(traceMapField(step.output, 'extractedArguments'); as arguments) {\r\n                                <section class=\"trace-arguments\">\r\n                                  <span class=\"trace-section-label\">Arguments extracted from the original query</span>\r\n                                  <dl class=\"trace-argument-grid\">\r\n                                    @for(entry of traceEntries(arguments); track entry.key) {\r\n                                      <div><dt>{{ entry.label }}</dt><dd>{{ formatTraceScalar(entry.value) }}</dd></div>\r\n                                    }\r\n                                  </dl>\r\n                                </section>\r\n                              }\r\n                              @if(traceMapField(step.output, 'plannedToolCall'); as plannedCall) {\r\n                                <div class=\"trace-tool-call\">\r\n                                  <span>Planned tool call</span>\r\n                                  <strong>{{ formatTraceScalar(plannedCall['method']) }} · {{ formatTraceScalar(plannedCall['toolName']) }}</strong>\r\n                                  <pre>{{ formatTraceValue(plannedCall['arguments']) }}</pre>\r\n                                </div>\r\n                              }\r\n                            }\r\n\r\n                            @case('api_call') {\r\n                              @if(traceField(step.input, 'sql'); as sql) {\r\n                                <div class=\"trace-tool-call trace-sql-query\">\r\n                                  <span>SQL sent to MySQL MCP</span>\r\n                                  <strong>{{ formatTraceScalar(traceField(step.input, 'toolName')) }}</strong>\r\n                                  <pre>{{ formatTraceScalar(sql) }}</pre>\r\n                                </div>\r\n                              }\r\n                              @if(traceField(step.input, 'method') || traceField(step.input, 'path')) {\r\n                                <div class=\"trace-api-route\">\r\n                                  <span class=\"trace-http-method\">{{ formatTraceScalar(traceField(step.input, 'method')) }}</span>\r\n                                  <code>{{ formatTraceScalar(traceField(step.input, 'path')) }}</code>\r\n                                  @if(getHttpStatus(step); as statusCode) {\r\n                                    <span class=\"trace-http-status\" [class.success]=\"isHttpSuccessful(step)\" [class.error]=\"!isHttpSuccessful(step)\">\r\n                                      HTTP {{ statusCode }} · {{ isHttpSuccessful(step) ? 'Success' : 'Error' }}\r\n                                    </span>\r\n                                  }\r\n                                </div>\r\n                              }\r\n                              <div class=\"trace-payload-grid\">\r\n                                @if(traceField(step.input, 'body'); as requestBody) {\r\n                                  <section><span>Request payload</span><pre>{{ formatTraceValue(requestBody) }}</pre></section>\r\n                                }\r\n                                @if(traceField(step.output, 'response'); as apiResponse) {\r\n                                  <section><span>API response</span><pre>{{ formatTraceValue(apiResponse) }}</pre></section>\r\n                                }\r\n                                @if(traceField(step.input, 'sql') && step.output !== undefined) {\r\n                                  <section><span>MySQL MCP execution details</span><pre>{{ formatTraceValue(step.output) }}</pre></section>\r\n                                }\r\n                              </div>\r\n                            }\r\n\r\n                            @case('action') {\r\n                              <div class=\"trace-card-grid\">\r\n                                <section class=\"trace-data-card\">\r\n                                  <h5>Workflow input</h5>\r\n                                  <dl class=\"trace-field-list\">\r\n                                    @for(entry of traceEntries(step.input); track entry.key) {\r\n                                      <div><dt>{{ entry.label }}</dt><dd>{{ formatTraceScalar(entry.value) }}</dd></div>\r\n                                    }\r\n                                  </dl>\r\n                                </section>\r\n                                <section class=\"trace-data-card trace-data-card-accent\">\r\n                                  <h5>Outcome</h5>\r\n                                  <dl class=\"trace-field-list\">\r\n                                    @for(entry of traceEntries(step.output); track entry.key) {\r\n                                      <div><dt>{{ entry.label }}</dt><dd>{{ formatTraceScalar(entry.value) }}</dd></div>\r\n                                    }\r\n                                  </dl>\r\n                                </section>\r\n                              </div>\r\n                            }\r\n\r\n                            @case('response') {\r\n                              @if(traceField(step.output, 'answer'); as answer) {\r\n                                <div class=\"trace-query\"><span>Final grounded response</span><blockquote>{{ formatTraceScalar(answer) }}</blockquote></div>\r\n                              }\r\n                              <dl class=\"trace-argument-grid\">\r\n                                @for(entry of traceEntries(step.output); track entry.key) {\r\n                                  @if(entry.key !== 'answer') {\r\n                                    <div><dt>{{ entry.label }}</dt><dd>{{ formatTraceScalar(entry.value) }}</dd></div>\r\n                                  }\r\n                                }\r\n                              </dl>\r\n                            }\r\n\r\n                            @default {\r\n                              <div class=\"trace-payload-grid\">\r\n                                @if(step.input !== undefined) {\r\n                                  <section><span>Input</span><pre>{{ formatTraceValue(step.input) }}</pre></section>\r\n                                }\r\n                                @if(step.output !== undefined) {\r\n                                  <section><span>Output</span><pre>{{ formatTraceValue(step.output) }}</pre></section>\r\n                                }\r\n                              </div>\r\n                            }\r\n                          }\r\n\r\n                          @if(step.error; as error) {\r\n                            <div class=\"trace-error\" [class.trace-warning]=\"step.category === 'api_call' && isHttpSuccessful(step)\">\r\n                              <strong class=\"trace-error-heading\">\r\n                                @if(step.category === 'api_call' && isHttpSuccessful(step)) {\r\n                                  Post-response processing stopped\r\n                                } @else {\r\n                                  Step stopped@if(error.statusCode) { · HTTP {{ error.statusCode }} }\r\n                                }\r\n                              </strong>\r\n                              <strong class=\"trace-error-legacy\" aria-hidden=\"true\">\r\n                                Failed@if(error.statusCode) { — HTTP {{ error.statusCode }} }\r\n                              </strong>\r\n                              <span>{{ error.message }}</span>\r\n                            </div>\r\n                          }\r\n                          </div>\r\n                          }\r\n                        </section>\r\n                      </li>\r\n                    }\r\n                  </ol>\r\n                </section>\r\n                </div>\r\n              }\r\n            }\r\n          } @else {\r\n            @if(message.role === 'assistant') {\r\n              <div\r\n                class=\"assistant-markdown\"\r\n                [innerHTML]=\"message.content | maxAssistantMarkdown\"\r\n              ></div>\r\n              @if(isWelcomeState(message) && bootstrapConfig.initialDescription; as initialDescription) {\r\n                <p class=\"welcome-description\">{{ initialDescription }}</p>\r\n              }\r\n              @if(isWelcomeState(message)) {\r\n                <div class=\"assistant-welcome-actions\">\r\n                <ng-container *ngTemplateOutlet=\"capabilityLauncher; context: { presentation: 'card' }\" />\r\n                <button\r\n                  pButton\r\n                  type=\"button\"\r\n                  class=\"support-welcome-card max-assistant-launcher max-assistant-launcher-card max-assistant-launcher-support\"\r\n                  aria-label=\"Raise a support ticket\"\r\n                  (click)=\"openSupportTicket()\"\r\n                >\r\n                  <span class=\"support-welcome-icon\" aria-hidden=\"true\">\r\n                    <i class=\"far fa-user-headset\"></i>\r\n                  </span>\r\n                  <span class=\"max-assistant-launcher-copy\">\r\n                    <strong>Raise a support ticket</strong>\r\n                    <small>Send details directly to our support team.</small>\r\n                  </span>\r\n                </button>\r\n                </div>\r\n              }\r\n            } @else {\r\n              <p>{{ message.content }}</p>\r\n            }\r\n          }\r\n          @if(message.role === 'assistant' && message.suggestions?.length) {\r\n            @if(hasCapabilitySuggestions(message.suggestions)) {\r\n              <div class=\"capability-options\" aria-label=\"Available Maxtime capabilities\">\r\n                @for(group of capabilitySuggestionGroups(message.suggestions); track group.section) {\r\n                  <section class=\"capability-option-section\">\r\n                    <h3>{{ group.section }}</h3>\r\n                    <div class=\"capability-option-grid\">\r\n                      @for(suggestion of group.options; track suggestion.structuredAction?.capabilityKey ?? suggestion.label; let optionIndex = $index) {\r\n                        <max-agent-capability-card [label]=\"suggestion.label\" [ordinal]=\"optionIndex + 1\" [tone]=\"optionIndex\"\r\n                          [disabled]=\"isSending()\" [accessibleLabel]=\"'Choose capability: ' + suggestion.label\"\r\n                          (chosen)=\"useSuggestion(suggestion)\" />\r\n                      }\r\n                    </div>\r\n                  </section>\r\n                }\r\n              </div>\r\n            } @else if(hasOptionCardSuggestions(message.suggestions, message.status) && !hasEntitySuggestions(message.suggestions)) {\r\n              <div class=\"clarification-options\" aria-label=\"Clarification options\">\r\n                <div class=\"capability-option-grid clarification-option-grid\">\r\n                  @for(suggestion of optionCardSuggestions(message.suggestions, message.status); track suggestionLabel(suggestion); let optionIndex = $index) {\r\n                    <button\r\n                      pButton\r\n                      type=\"button\"\r\n                      severity=\"secondary\"\r\n                      class=\"capability-option-card clarification-option-card\"\r\n                      [disabled]=\"isSending()\"\r\n                      [attr.aria-label]=\"'Choose option: ' + suggestionLabel(suggestion)\"\r\n                      (click)=\"useSuggestion(suggestion)\"\r\n                    >\r\n                      <span class=\"capability-option-number\" aria-hidden=\"true\">\r\n                        {{ optionIndex + 1 }}\r\n                      </span>\r\n                      <span class=\"capability-option-copy\">{{ suggestionLabel(suggestion) }}</span>\r\n                      <i class=\"pi pi-arrow-right capability-option-arrow\" aria-hidden=\"true\"></i>\r\n                    </button>\r\n                  }\r\n                </div>\r\n              </div>\r\n            } @else if(hasEntitySuggestions(message.suggestions)) {\r\n              <div class=\"entity-options\" aria-label=\"Matching options\">\r\n                @for(suggestion of entitySuggestionOptions(message.suggestions); track suggestion.entity.id ?? suggestion.label) {\r\n                  <max-agent-entity-option\r\n                    [entity]=\"suggestion.entity\"\r\n                    [disabled]=\"isSending()\"\r\n                    (selected)=\"useSuggestion(suggestion)\"\r\n                  ></max-agent-entity-option>\r\n                }\r\n                @for(suggestion of optionCardSuggestions(message.suggestions, message.status); track suggestionLabel(suggestion)) {\r\n                  <button pButton type=\"button\" severity=\"secondary\"\r\n                    class=\"capability-option-card clarification-option-card\"\r\n                    [disabled]=\"isSending()\" [label]=\"suggestionLabel(suggestion)\"\r\n                    (click)=\"useSuggestion(suggestion)\"></button>\r\n                }\r\n              </div>\r\n            } @else {\r\n              <div class=\"suggestions\">\r\n                @for(suggestion of message.suggestions ?? []; track suggestion) {\r\n                  <button\r\n                    pButton\r\n                    type=\"button\"\r\n                    size=\"small\"\r\n                    text\r\n                    severity=\"secondary\"\r\n                    class=\"suggestion-chip\"\r\n                    [label]=\"suggestionLabel(suggestion)\"\r\n                    (click)=\"useSuggestion(suggestion)\"\r\n                  ></button>\r\n                }\r\n              </div>\r\n            }\r\n          }\r\n          @if(message.role === 'assistant' && !isWelcomeMessage(message) && !message.isStreaming && !message.isOffline && !message.isAccessUnavailable) {\r\n            <div class=\"response-actions\">\r\n              <button\r\n                type=\"button\"\r\n                class=\"response-feedback-action\"\r\n                [attr.aria-label]=\"uiCopy.feedbackLabel\"\r\n                [pTooltip]=\"uiCopy.feedbackTooltip\"\r\n                tooltipPosition=\"bottom\"\r\n                (click)=\"openFeedback(message)\"\r\n              >\r\n                <i class=\"pi pi-comment\" aria-hidden=\"true\"></i>\r\n              </button>\r\n              @if(developerDetailsEnabled && message.developerTrace?.steps?.length) {\r\n                <button\r\n                  type=\"button\"\r\n                  class=\"details-toggle\"\r\n                  [attr.aria-expanded]=\"isDetailsVisible(message.id)\"\r\n                  (click)=\"toggleDetails(message.id, message.developerTrace!.steps[0]?.id)\"\r\n                >\r\n                  {{ isDetailsVisible(message.id) ? 'Hide Developer Trace' : 'Show Developer Trace' }}\r\n                </button>\r\n              }\r\n            </div>\r\n          }\r\n        </article>\r\n      }\r\n    </div>\r\n\r\n    <footer class=\"assistant-footer\">\r\n      @if (hasConversationStarted()) {\r\n        <div class=\"assistant-conversation-actions\">\r\n        <ng-container *ngTemplateOutlet=\"capabilityLauncher; context: { presentation: 'button' }\" />\r\n        <button\r\n          pButton\r\n          type=\"button\"\r\n          class=\"support-ticket-shortcut max-assistant-launcher max-assistant-launcher-support\"\r\n          aria-label=\"Raise a support ticket\"\r\n          (click)=\"openSupportTicket()\"\r\n        >\r\n          <i class=\"far fa-user-headset\" aria-hidden=\"true\"></i>\r\n          <span class=\"max-assistant-launcher-label\">Raise a support ticket</span>\r\n        </button>\r\n        </div>\r\n      }\r\n      <form class=\"assistant-composer\" (ngSubmit)=\"sendMessage()\">\r\n        <textarea\r\n          #composerInput\r\n          pTextarea\r\n          name=\"assistantPrompt\"\r\n          rows=\"1\"\r\n          [placeholder]=\"composerNotice() || uiCopy.placeholder\"\r\n          [ngModel]=\"composerNotice() || input()\"\r\n          [disabled]=\"!usageReady() || !!usageLimitMessage()\"\r\n          [class.usage-limited]=\"!!composerNotice()\"\r\n          [attr.aria-label]=\"composerNotice() || uiCopy.placeholder\"\r\n          [autoResize]=\"!!composerNotice()\"\r\n          (ngModelChange)=\"input.set($event)\"\r\n          (keydown)=\"onComposerKeydown($event)\"\r\n        >\r\n        </textarea>\r\n        <button\r\n          pButton\r\n          type=\"submit\"\r\n          icon=\"pi pi-send\"\r\n          aria-label=\"Send message\"\r\n          [disabled]=\"!input().trim() || isSending() || !usageReady() || !!usageLimitMessage()\"\r\n        ></button>\r\n      </form>\r\n    </footer>\r\n    <ng-template #capabilityLauncher let-presentation=\"presentation\">\r\n      <max-agent-capabilities [configFactory]=\"capabilityConfig\" [busy]=\"isSending() || !usageReady() || !!usageLimitMessage()\"\r\n        [presentation]=\"presentation\" (selected)=\"useSuggestion($event)\" />\r\n    </ng-template>\r\n  </section>\r\n\r\n  @if(supportTicketVisible()) {\r\n    <section class=\"support-ticket-overlay\" aria-label=\"Support ticket form\">\r\n      <div\r\n        class=\"support-ticket-dialog\"\r\n        role=\"dialog\"\r\n        aria-modal=\"true\"\r\n        aria-labelledby=\"supportTicketTitle\"\r\n      >\r\n        <header class=\"support-ticket-header\">\r\n          <span class=\"support-ticket-header-icon\" aria-hidden=\"true\">\r\n            <i class=\"far fa-user-headset\"></i>\r\n          </span>\r\n          <div>\r\n            <h2 id=\"supportTicketTitle\">Raise a support ticket</h2>\r\n            <p>Share the details and our support team will take it from here.</p>\r\n          </div>\r\n          <button\r\n            type=\"button\"\r\n            class=\"support-ticket-close\"\r\n            aria-label=\"Close support ticket form\"\r\n            (click)=\"closeSupportTicket()\"\r\n          >\r\n            <i class=\"pi pi-times\" aria-hidden=\"true\"></i>\r\n          </button>\r\n        </header>\r\n\r\n        @if(supportTicketSubmissionFailed()) {\r\n          <div class=\"support-ticket-error-page\" role=\"alert\">\r\n            <span class=\"support-ticket-error-icon\" aria-hidden=\"true\">\r\n              <i class=\"pi pi-times-circle\"></i>\r\n            </span>\r\n            <h3>Ticket could not be created</h3>\r\n            <p>{{ supportTicketError() }}</p>\r\n            <button\r\n              pButton\r\n              type=\"button\"\r\n              label=\"Close\"\r\n              icon=\"pi pi-times\"\r\n              severity=\"secondary\"\r\n              (click)=\"closeSupportTicket()\"\r\n            ></button>\r\n          </div>\r\n        } @else if(supportTicketResult(); as result) {\r\n          <div class=\"support-ticket-success\" role=\"status\">\r\n            <span class=\"support-ticket-success-icon\" aria-hidden=\"true\">\r\n              <i class=\"pi pi-check\"></i>\r\n            </span>\r\n            <h3>Ticket raised</h3>\r\n            <p>{{ result.message }}</p>\r\n            @if(result.ticketReference) {\r\n              <div class=\"support-ticket-reference\">\r\n                <span>Reference</span>\r\n                <strong>{{ result.ticketReference }}</strong>\r\n              </div>\r\n            }\r\n            <button\r\n              pButton\r\n              type=\"button\"\r\n              label=\"Done\"\r\n              icon=\"pi pi-check\"\r\n              (click)=\"closeSupportTicket()\"\r\n            ></button>\r\n          </div>\r\n        } @else {\r\n          <form class=\"support-ticket-form\" (ngSubmit)=\"submitSupportTicket()\">\r\n            <div class=\"support-ticket-fields\">\r\n              <label class=\"support-ticket-field\">\r\n                <span>Name</span>\r\n                <input\r\n                  type=\"text\"\r\n                  name=\"supportName\"\r\n                  autocomplete=\"name\"\r\n                  [value]=\"supportTicketForm.name\"\r\n                  readonly\r\n                />\r\n              </label>\r\n\r\n              <label class=\"support-ticket-field\">\r\n                <span>Email</span>\r\n                <input\r\n                  type=\"email\"\r\n                  name=\"supportEmail\"\r\n                  autocomplete=\"email\"\r\n                  [value]=\"supportTicketForm.email\"\r\n                  readonly\r\n                />\r\n              </label>\r\n\r\n              <label class=\"support-ticket-field support-ticket-field-wide\">\r\n                <span>Phone <small>Optional</small></span>\r\n                <input\r\n                  type=\"tel\"\r\n                  name=\"supportPhone\"\r\n                  autocomplete=\"tel\"\r\n                  placeholder=\"Add a contact number\"\r\n                  [(ngModel)]=\"supportTicketForm.phone\"\r\n                />\r\n              </label>\r\n\r\n              <label class=\"support-ticket-field\">\r\n                <span>Severity</span>\r\n                <p-select\r\n                  inputId=\"supportSeverity\"\r\n                  name=\"supportSeverity\"\r\n                  [options]=\"supportSeverities()\"\r\n                  optionLabel=\"label\"\r\n                  [fluid]=\"true\"\r\n                  [loading]=\"supportSeverities().length === 0\"\r\n                  [(ngModel)]=\"supportTicketForm.severity\"\r\n                >\r\n                  <ng-template #selectedItem let-severity>\r\n                    <p-tag\r\n                      class=\"support-severity-tag\"\r\n                      [value]=\"severity.label\"\r\n                      [style.--support-severity-color]=\"supportSeverityColor(severity.color)\"\r\n                      [rounded]=\"true\"\r\n                    ></p-tag>\r\n                  </ng-template>\r\n                  <ng-template #item let-severity>\r\n                    <p-tag\r\n                      class=\"support-severity-option\"\r\n                      [value]=\"severity.label\"\r\n                      [style.--support-severity-color]=\"supportSeverityColor(severity.color)\"\r\n                      [rounded]=\"true\"\r\n                    ></p-tag>\r\n                  </ng-template>\r\n                </p-select>\r\n              </label>\r\n\r\n              <label class=\"support-ticket-field\">\r\n                <span>Tags</span>\r\n                <p-multiselect\r\n                  inputId=\"supportTags\"\r\n                  name=\"supportTags\"\r\n                  placeholder=\"Select relevant areas\"\r\n                  [options]=\"supportTags()\"\r\n                  optionLabel=\"label\"\r\n                  dataKey=\"id\"\r\n                  display=\"chip\"\r\n                  [filter]=\"true\"\r\n                  filterBy=\"label\"\r\n                  [showToggleAll]=\"false\"\r\n                  [loading]=\"supportTagsLoading()\"\r\n                  [fluid]=\"true\"\r\n                  [(ngModel)]=\"supportTicketForm.tags\"\r\n                >\r\n                  <ng-template #selecteditems let-selectedTags>\r\n                    <span class=\"support-selected-tags\">\r\n                      @for(tag of selectedTags; track tag.id) {\r\n                        <p-tag\r\n                          class=\"support-selected-tag\"\r\n                          [value]=\"tag.label\"\r\n                          [icon]=\"tag.icon\"\r\n                          [severity]=\"tag.severity\"\r\n                          [rounded]=\"true\"\r\n                        ></p-tag>\r\n                      }\r\n                    </span>\r\n                  </ng-template>\r\n                  <ng-template #item let-tag>\r\n                    <p-tag\r\n                      class=\"support-tag-option\"\r\n                      [value]=\"tag.label\"\r\n                      [icon]=\"tag.icon\"\r\n                      [severity]=\"tag.severity\"\r\n                      [rounded]=\"true\"\r\n                    ></p-tag>\r\n                  </ng-template>\r\n                </p-multiselect>\r\n              </label>\r\n\r\n              <label class=\"support-ticket-field support-ticket-field-wide\">\r\n                <span>Subject</span>\r\n                <input\r\n                  type=\"text\"\r\n                  name=\"supportSubject\"\r\n                  maxlength=\"200\"\r\n                  placeholder=\"Summarise the issue\"\r\n                  required\r\n                  [(ngModel)]=\"supportTicketForm.subject\"\r\n                />\r\n              </label>\r\n\r\n              <label class=\"support-ticket-field support-ticket-field-wide\">\r\n                <span>How can we help?</span>\r\n                <textarea\r\n                  #supportQueryInput\r\n                  pTextarea\r\n                  name=\"supportQuery\"\r\n                  rows=\"5\"\r\n                  placeholder=\"Describe the issue, what you expected, and anything you've already tried.\"\r\n                  required\r\n                  [(ngModel)]=\"supportTicketForm.query\"\r\n                ></textarea>\r\n              </label>\r\n            </div>\r\n\r\n            @if(!supportTicketForm.name || !supportTicketForm.email) {\r\n              <p class=\"support-ticket-notice\" role=\"alert\">\r\n                Your signed-in name and email are required. Please refresh your Nemesys session and try again.\r\n              </p>\r\n            }\r\n            @if(supportTicketError(); as supportError) {\r\n              <p class=\"support-ticket-error\" role=\"alert\">{{ supportError }}</p>\r\n            }\r\n\r\n            <div class=\"support-ticket-actions\">\r\n              <button\r\n                pButton\r\n                type=\"button\"\r\n                label=\"Cancel\"\r\n                severity=\"secondary\"\r\n                outlined\r\n                (click)=\"closeSupportTicket()\"\r\n              ></button>\r\n              <button\r\n                pButton\r\n                type=\"submit\"\r\n                label=\"Submit ticket\"\r\n                icon=\"pi pi-send\"\r\n                [loading]=\"supportTicketSubmitting()\"\r\n                [disabled]=\"!canSubmitSupportTicket()\"\r\n              ></button>\r\n            </div>\r\n          </form>\r\n        }\r\n      </div>\r\n    </section>\r\n  }\r\n\r\n  @if(feedbackVisible()) {\r\n    <section\r\n      class=\"support-ticket-overlay feedback-overlay\"\r\n      aria-label=\"Feedback form\"\r\n    >\r\n      <div\r\n        class=\"support-ticket-dialog feedback-dialog\"\r\n        role=\"dialog\"\r\n        aria-modal=\"true\"\r\n        aria-labelledby=\"feedbackTitle\"\r\n      >\r\n        <header class=\"support-ticket-header feedback-header\">\r\n          <span class=\"support-ticket-header-icon\" aria-hidden=\"true\">\r\n            <i class=\"pi pi-comment\"></i>\r\n          </span>\r\n          <div>\r\n            <h2 id=\"feedbackTitle\">Help Max improve</h2>\r\n            <p>Tell us what Max could do better.</p>\r\n          </div>\r\n          <button\r\n            type=\"button\"\r\n            class=\"support-ticket-close feedback-close\"\r\n            aria-label=\"Close feedback form\"\r\n            (click)=\"closeFeedback()\"\r\n          >\r\n            <i class=\"pi pi-times\" aria-hidden=\"true\"></i>\r\n          </button>\r\n        </header>\r\n\r\n        @if(feedbackResult(); as result) {\r\n          <div class=\"support-ticket-success feedback-success\" role=\"status\">\r\n            <span class=\"support-ticket-success-icon\" aria-hidden=\"true\">\r\n              <i class=\"pi pi-check\"></i>\r\n            </span>\r\n            <h3>We value your feedback</h3>\r\n            <p>{{ result.message }}</p>\r\n            @if(result.feedbackReference; as feedbackReference) {\r\n              <div class=\"support-ticket-reference\">\r\n                <span>Reference</span>\r\n                <strong>{{ feedbackReference }}</strong>\r\n              </div>\r\n            }\r\n            <button\r\n              pButton\r\n              type=\"button\"\r\n              label=\"Done\"\r\n              icon=\"pi pi-check\"\r\n              (click)=\"closeFeedback()\"\r\n            ></button>\r\n          </div>\r\n        } @else {\r\n          <form class=\"support-ticket-form feedback-form\" (ngSubmit)=\"submitFeedback()\">\r\n            <div class=\"feedback-form-body\">\r\n              <div class=\"support-ticket-fields\">\r\n              <label class=\"support-ticket-field\">\r\n                <span>Feedback type</span>\r\n                <p-select\r\n                  inputId=\"feedbackCategory\"\r\n                  name=\"feedbackCategory\"\r\n                  [options]=\"feedbackCategoryOptions\"\r\n                  optionLabel=\"label\"\r\n                  optionValue=\"value\"\r\n                  [fluid]=\"true\"\r\n                  [(ngModel)]=\"feedbackForm.category\"\r\n                ></p-select>\r\n              </label>\r\n\r\n              <label class=\"support-ticket-field support-ticket-field-wide\">\r\n                <span>Your query</span>\r\n                <textarea\r\n                  pTextarea\r\n                  name=\"feedbackQuery\"\r\n                  rows=\"2\"\r\n                  placeholder=\"Enter the question or request you gave Max.\"\r\n                  readonly\r\n                  required\r\n                  [(ngModel)]=\"feedbackForm.query\"\r\n                ></textarea>\r\n              </label>\r\n\r\n              <label class=\"support-ticket-field support-ticket-field-wide\">\r\n                <span>Assistant response <small>Added automatically when available</small></span>\r\n                <textarea\r\n                  pTextarea\r\n                  name=\"feedbackAssistantResponse\"\r\n                  rows=\"3\"\r\n                  placeholder=\"No assistant response is available yet.\"\r\n                  [value]=\"feedbackForm.assistantResponse\"\r\n                  readonly\r\n                ></textarea>\r\n              </label>\r\n\r\n              <label class=\"support-ticket-field support-ticket-field-wide\">\r\n                <span>What could be improved?</span>\r\n                <textarea\r\n                  #feedbackInput\r\n                  pTextarea\r\n                  name=\"feedbackDetails\"\r\n                  rows=\"3\"\r\n                  placeholder=\"Tell us what you expected, what was missing, or how the response could be more useful.\"\r\n                  required\r\n                  [(ngModel)]=\"feedbackForm.feedback\"\r\n                ></textarea>\r\n              </label>\r\n              </div>\r\n\r\n              @if(feedbackError(); as error) {\r\n                <p class=\"support-ticket-error\" role=\"alert\">{{ error }}</p>\r\n              }\r\n            </div>\r\n\r\n            <footer class=\"support-ticket-actions feedback-actions\">\r\n              <button\r\n                pButton\r\n                type=\"button\"\r\n                label=\"Cancel\"\r\n                severity=\"secondary\"\r\n                outlined\r\n                (click)=\"closeFeedback()\"\r\n              ></button>\r\n              <button\r\n                pButton\r\n                type=\"submit\"\r\n                label=\"Send feedback\"\r\n                icon=\"pi pi-send\"\r\n                [loading]=\"feedbackSubmitting()\"\r\n                [disabled]=\"!canSubmitFeedback()\"\r\n              ></button>\r\n            </footer>\r\n          </form>\r\n        }\r\n      </div>\r\n    </section>\r\n  }\r\n</aside>\r\n","/*\n * Public API Surface of max-agent-ui\n */\n\nexport * from './lib/components/assistant/max-assistant.component';\nexport * from './lib/components/assistant/max-assistant-feedback.service';\nexport * from './lib/components/assistant/max-assistant.service';\nexport * from './lib/components/assistant/max-assistant-support.service';\nexport * from './lib/components/entity-option/max-agent-entity-option.component';\nexport * from './lib/components/person/max-agent-person.component';\nexport * from './lib/components/shift-card/max-agent-shift-card.component';\nexport * from './lib/config/assistant.config';\nexport * from './lib/constants/icons.constant';\nexport * from './lib/models/assistant.models';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i9"],"mappings":"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"}