@interopio/io-assist-ng 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interopio-io-assist-ng.mjs","sources":["../../src/lib/shared/constants/ui-strings.ts","../../src/lib/shared/services/component-effect-manager/component-effect-manager.service.ts","../../src/lib/shared/services/consumer-asset-loader/consumer-asset-loader.service.ts","../../src/lib/shared/services/io/io.service.ts","../../src/lib/io-assist.component.ts","../../src/lib/io-assist.component.html","../../src/lib/routes/routes.enum.ts","../../src/lib/shared/components/app-panel/enums.ts","../../src/lib/shared/components/app-button/enum.ts","../../src/lib/shared/components/app-button/app-button.component.ts","../../src/lib/shared/components/app-button/app-button.component.html","../../src/lib/shared/components/app-icon/enum.ts","../../src/lib/shared/components/app-icon/icons.ts","../../src/lib/shared/components/app-icon/app-icon.component.ts","../../src/lib/shared/components/app-icon/app-icon.component.html","../../src/lib/shared/components/app-panel/app-panel.component.ts","../../src/lib/shared/components/app-panel/app-panel.component.html","../../src/lib/shared/services/overlay/overlay.service.ts","../../src/lib/shared/store/auth/auth.actions.enum.ts","../../src/lib/shared/store/auth/auth.actions.ts","../../src/lib/shared/enums/loading-state.enum.ts","../../src/lib/shared/store/auth/auth.selector.ts","../../src/lib/shared/store/auth/auth.facade.ts","../../src/lib/shared/store/message/message.actions.enum.ts","../../src/lib/shared/store/message/message.actions.ts","../../src/lib/shared/store/message/types.ts","../../src/lib/shared/store/message/message.selector.ts","../../src/lib/shared/store/message/message.facade.ts","../../src/lib/shared/components/app-spinner/enum.ts","../../src/lib/shared/components/app-spinner/app-spinner.component.ts","../../src/lib/shared/components/app-spinner/app-spinner.component.html","../../src/lib/shared/store/thread/thread.actions.enum.ts","../../src/lib/shared/store/thread/thread.actions.ts","../../src/lib/shared/store/thread/thread.selector.ts","../../src/lib/shared/store/thread/thread.facade.ts","../../src/lib/shared/store/working-context/working-context.actions.enum.ts","../../src/lib/shared/store/working-context/working-context.actions.ts","../../src/lib/shared/store/working-context/working-context.selector.ts","../../src/lib/shared/store/working-context/working-context.facade.ts","../../src/lib/shared/components/app-md-formatter/app-md-formatter.component.ts","../../src/lib/shared/components/app-md-formatter/app-md-formatter.component.html","../../src/lib/shared/components/app-md-formatter/utils.ts","../../src/lib/shared/services/subscription-cleanup/subscription-cleanup.service.ts","../../src/lib/shared/services/io-intel-web/context.ts","../../src/lib/shared/services/io-intel-web/elicitation/enums.ts","../../src/lib/shared/services/io-intel-web/elicitation/utils.ts","../../src/lib/shared/services/io-intel-web/elicitation/elicitation.service.ts","../../src/lib/shared/store/message/message.utils.ts","../../src/lib/shared/store/agent/agent.actions.enum.ts","../../src/lib/shared/store/agent/agent.actions.ts","../../src/lib/shared/store/agent/agent.selector.ts","../../src/lib/shared/store/agent/agent.facade.ts","../../src/lib/shared/services/agent/agent.service.ts","../../src/lib/shared/services/io-intel-web/types.ts","../../src/lib/shared/services/io-intel-web/io-intel-web.utils.ts","../../src/lib/shared/services/io-intel-web/sampling/sampling.service.ts","../../src/lib/shared/services/io-intel-web/io-intel-web.service.ts","../../src/lib/shared/services/working-context/working-context.service.ts","../../src/lib/components/working-context-panel/working-context-panel.component.ts","../../src/lib/components/working-context-panel/working-context-panel.component.html","../../src/lib/components/header/header.component.ts","../../src/lib/components/header/header.component.html","../../src/lib/shared/store/web-search/web-search.actions.enum.ts","../../src/lib/shared/store/web-search/web-search.actions.ts","../../src/lib/shared/store/web-search/web-search.selector.ts","../../src/lib/shared/store/web-search/web-search.facade.ts","../../src/lib/shared/components/app-input/app-input.component.ts","../../src/lib/shared/components/app-input/app-input.component.html","../../src/lib/shared/store/prompt/prompt.actions.enum.ts","../../src/lib/shared/store/prompt/prompt.actions.ts","../../src/lib/shared/store/prompt/prompt.selector.ts","../../src/lib/shared/store/prompt/prompt.facade.ts","../../src/lib/components/prompt/enums.ts","../../src/lib/components/prompt/prompt-list-item/prompt-list-item.component.ts","../../src/lib/components/prompt/prompt-list-item/prompt-list-item.component.html","../../src/lib/components/prompt/prompt-list/prompt-list.component.ts","../../src/lib/components/prompt/prompt-list/prompt-list.component.html","../../src/lib/shared/store/tool/tool.actions.enum.ts","../../src/lib/shared/store/tool/tool.actions.ts","../../src/lib/shared/store/tool/tool.selector.ts","../../src/lib/shared/store/tool/tool.facade.ts","../../src/lib/components/tool/tool-list-item/tool-info/tool-info.component.ts","../../src/lib/components/tool/tool-list-item/tool-info/tool-info.component.html","../../src/lib/shared/components/app-toggle/app-toggle.component.ts","../../src/lib/shared/components/app-toggle/app-toggle.component.html","../../src/lib/shared/components/app-tooltip/enum.ts","../../src/lib/shared/components/app-tooltip/app-tooltip.component.ts","../../src/lib/shared/components/app-tooltip/app-tooltip.component.html","../../src/lib/shared/store/tool/enums.ts","../../src/lib/components/tool/tool-list-item/tool-list-item.component.ts","../../src/lib/components/tool/tool-list-item/tool-list-item.component.html","../../src/lib/components/tool/tool-list/tool-list.component.ts","../../src/lib/components/tool/tool-list/tool-list.component.html","../../src/lib/components/input-area/input-area-action-bar/input-area-action-bar.component.ts","../../src/lib/components/input-area/input-area-action-bar/input-area-action-bar.component.html","../../src/lib/components/input-area/input-area-send-button/input-area-send-button.component.ts","../../src/lib/components/input-area/input-area-send-button/input-area-send-button.component.html","../../src/lib/components/input-area/input-area.component.ts","../../src/lib/components/input-area/input-area.component.html","../../src/lib/components/scroll-area/scroll-area.component.ts","../../src/lib/components/scroll-area/scroll-area.component.html","../../src/lib/shared/services/copy-to-clipboard/copy-to-clipboard.service.ts","../../src/lib/shared/components/app-copy-to-clipboard-button/app-copy-to-clipboard-button.component.ts","../../src/lib/shared/components/app-copy-to-clipboard-button/app-copy-to-clipboard-button.component.html","../../src/lib/components/messages/message-footer/message-footer.component.ts","../../src/lib/components/messages/message-footer/message-footer.component.html","../../src/lib/components/messages/assistant-message/assistant-message.component.ts","../../src/lib/components/messages/assistant-message/assistant-message.component.html","../../src/lib/components/messages/tool-message/tool-message.component.ts","../../src/lib/components/messages/tool-message/tool-message.component.html","../../src/lib/components/messages/tool-trace-message/tool-trace-message.component.ts","../../src/lib/components/messages/tool-trace-message/tool-trace-message.component.html","../../src/lib/components/messages/user-message/user-message.component.ts","../../src/lib/components/messages/user-message/user-message.component.html","../../src/lib/components/messages/message-area/message-area.component.ts","../../src/lib/components/messages/message-area/message-area.component.html","../../src/lib/components/prompt/favorite-prompts/favorite-prompt-list.component.ts","../../src/lib/components/prompt/favorite-prompts/favorite-prompt-list.component.html","../../src/lib/shared/constants/agents.ts","../../src/lib/shared/store/thread/enums.ts","../../src/lib/components/threads/thread-history-list-item/thread-history-list-item.component.ts","../../src/lib/components/threads/thread-history-list-item/thread-history-list-item.component.html","../../src/lib/components/threads/thread-history-list-item-divider/thread-history-list-item-divider.component.ts","../../src/lib/components/threads/thread-history-list-item-divider/thread-history-list-item-divider.component.html","../../src/lib/components/threads/thread-history-list/thread-history-list.component.ts","../../src/lib/components/threads/thread-history-list/thread-history-list.component.html","../../src/lib/components/threads/thread-history/thread-history.component.ts","../../src/lib/components/threads/thread-history/thread-history.component.html","../../src/lib/components/chat/chat.component.ts","../../src/lib/components/chat/chat.component.html","../../src/lib/components/login/login.component.ts","../../src/lib/components/login/login.component.html","../../src/lib/shared/guards/auth.guard.ts","../../src/lib/routes/app.routes.ts","../../src/lib/shared/services/agent/agent-manager/agent-manager.service.ts","../../src/lib/shared/store/agent/agent.effects.ts","../../src/lib/shared/store/agent/agent.reducer.ts","../../src/lib/shared/services/auth/auth.service.ts","../../src/lib/shared/store/auth/auth.effects.ts","../../src/lib/shared/store/auth/auth.reducer.ts","../../src/lib/shared/services/thread/thread.service.ts","../../src/lib/shared/store/message/message.effects.ts","../../src/lib/shared/store/message/message.reducer.ts","../../src/lib/shared/constants/ui-prefs-keys.ts","../../src/lib/shared/services/prompt/prompt.service.ts","../../src/lib/shared/store/prompt/prompt.effects.ts","../../src/lib/shared/store/prompt/prompt.reducer.ts","../../src/lib/shared/store/thread/thread.effects.ts","../../src/lib/shared/store/thread/thread.reducer.ts","../../src/lib/shared/services/tools/tools.service.ts","../../src/lib/shared/store/tool/tool.effects.ts","../../src/lib/shared/store/tool/tool.reducer.ts","../../src/lib/shared/store/working-context/working-context.effects.ts","../../src/lib/shared/store/working-context/working-context.reducer.ts","../../src/lib/shared/store/app.state.ts","../../src/lib/io-assist.providers.ts","../../src/public-api.ts","../../src/interopio-io-assist-ng.ts"],"sourcesContent":["/**\n * Shared UI strings for the whole application\n * Strings are grouped by component, feature or defaults\n */\nexport const UI_STRINGS = {\n LOGIN_COMPONENT: {\n TITLE: 'Login',\n USERNAME_PLACEHOLDER: 'Enter your username',\n PASSWORD_PLACEHOLDER: 'Enter your password',\n LOGIN_BUTTON_TEXT: 'Login',\n INVALID_CREDENTIALS: 'Invalid username or password',\n MISSING_CREDENTIALS: 'Please enter both username and password',\n },\n INPUT_COMPONENT: {\n DEFAULT_PLACEHOLDER: 'Enter text here',\n INPUT_PLACEHOLDER: 'Type your message...',\n },\n PANEL_COMPONENT: {\n DEFAULT_TITLE: 'Panel',\n CLOSE_BUTTON: 'Close',\n },\n WORKING_CONTEXT_PANEL_COMPONENT: {\n TITLE: 'Working Context',\n VIEW_WORKING_CONTEXT_BUTTON: 'View Context',\n LOADING_CONTEXT: 'Loading working context...',\n CALLOUT_TEXT:\n 'The working context provides additional information to assist the agent in generating accurate responses.',\n },\n CHAT_COMPONENT: {\n LOGOUT: 'Logout',\n },\n THREAD_HISTORY_COMPONENT: {\n NO_THREADS: 'No available message threads.',\n LOADING_THREADS: 'Loading threads...',\n DIVIDERS: {\n JUST_NOW: 'Just now',\n FIVE_MINS_AGO: '5 mins ago',\n THIRTY_MINS_AGO: '30 mins ago',\n ONE_HOUR_AGO: '1 hour ago',\n TWO_HOURS_AGO: '2 hours ago',\n SIX_HOURS_AGO: '6 hours ago',\n TWELVE_HOURS_AGO: '12 hours ago',\n TODAY: 'Today',\n YESTERDAY: 'Yesterday',\n TWO_DAYS_AGO: '2 days ago',\n LAST_WEEK: 'Last Week',\n TWO_WEEKS_AGO: '2 weeks ago',\n ONE_MONTH_AGO: '1 month ago',\n THREE_MONTHS_AGO: '3 months ago',\n SIX_MONTHS_AGO: '6 months ago',\n MORE_THAN_YEAR_AGO: 'more than 1 year ago',\n },\n },\n PROMPT_LIST_COMPONENT: {\n AVAILABLE_PROMPTS: 'Available Prompts',\n FAVORITE_PROMPTS: 'Favorite Prompts',\n NO_PROMPTS: 'No prompts available.',\n LOADING_PROMPTS: 'Loading prompts...',\n NO_FAVORITE_PROMPTS: 'No favorite prompts available.',\n INPUT_TOOLTIP: 'Search prompts...',\n },\n TOOL_LIST_COMPONENT: {\n AVAILABLE_TOOLS: 'Available Tools',\n NO_TOOLS: 'No tools available.',\n LOADING_TOOLS: 'Loading tools...',\n INPUT_TOOLTIP: 'Search tools...',\n },\n TOOL_LIST_ITEM_COMPONENT: {\n ENABLE_BUTTON: 'Enable',\n DISABLE_BUTTON: 'Disable',\n },\n TOOL_INFO: {\n DEFAULT_TOOL_DESCRIPTION: 'No description available.',\n },\n TOOL_MESSAGE: {\n TOOL_EXECUTION_SUCCESS: 'Tool executed successfully.',\n TOOL_EXECUTION_PENDING: 'Tool execution in progress...',\n },\n TOOL_TRACE_MESSAGE_COMPONENT: {\n EXPAND_BUTTON_TEXT: 'Show Tool Trace Details',\n COLLAPSE_BUTTON_TEXT: 'Hide Tool Trace Details',\n CLOSE_BUTTON_TEXT: 'CLOSE',\n },\n GENERAL: {\n EDIT: 'Edit',\n DELETE: 'Delete',\n SAVE: 'Save',\n CANCEL: 'Cancel',\n CONFIRM: 'Confirm',\n SUBMIT: 'Submit',\n SEARCH: 'Search',\n LOADING: 'Loading',\n COPY: 'Copy',\n RELOAD: 'Reload',\n NO_SEARCH_RESULTS: 'No results found',\n WELCOME_MESSAGE(user: string): string {\n return `Welcome, ${user}! How can I assist you today?`;\n },\n CANNOT_CONNECT_TO_IO: 'Cannot connect to IO.',\n AI_CONTENT_INFO: 'Ai-generated content may be incorrect',\n },\n SAMPLING_MODAL: {\n TITLE: 'Before We Go On…',\n HEADING: 'Permission to Proceed',\n TEXT: `I can dive deeper to give a clearer answer, but I’ll need your permission first. Continue?`,\n },\n ELICITATION_MODAL: {\n TITLE: 'Before We Go On…',\n HEADING: 'Permission to Proceed',\n FALLBACK_TEXT:\n 'I can dive deeper to give a clearer answer, but I’ll need your permission first. Continue?',\n },\n};\n","import {\n DestroyRef,\n effect,\n EffectRef,\n Inject,\n inject,\n Injectable,\n InjectionToken,\n Injector,\n signal,\n WritableSignal,\n} from '@angular/core';\n\nexport type NamedEffect = {\n name: string;\n effectRef: EffectRef;\n};\n\nconst COMPONENT_NAME = new InjectionToken<string>('COMPONENT_NAME');\n\n/**\n * ComponentEffectManagerService\n *\n * A centralized service for managing Angular effects within a component lifecycle.\n * This service provides a structured approach to registering, tracking, and cleaning up\n * effects, ensuring proper memory management and debugging capabilities.\n *\n * Purpose:\n * - Register named effects with descriptive identifiers for easy debugging\n * - Automatically track all active effects per component instance\n * - Ensure proper cleanup on component destruction to prevent memory leaks\n * - Provide console logging for effect registration and destruction during development\n *\n * Usage Pattern:\n * 1. Provide the service in the component's providers array with a factory function\n * that passes the component name\n * 2. Inject the service in the component\n * 3. Call registerEffects() method in ngOnInit() or constructor\n * 4. Use descriptive naming convention for effect names: 'ComponentName.action.on.trigger'\n *\n * Example:\n * ```typescript\n * @Component({\n * selector: 'my-component',\n * providers: [\n * {\n * provide: ComponentEffectManagerService,\n * useFactory: () => new ComponentEffectManagerService('MyComponent'),\n * },\n * ],\n * })\n * export class MyComponent implements OnInit {\n * // Provided in current component\n * private readonly _effectService = inject(ComponentEffectManagerService);\n *\n * public ngOnInit(): void {\n * this.registerEffects();\n * }\n *\n * private registerEffects(): void {\n * this._effectService.registerEffect(\n * 'MyComponent.updateTitle.on.nameChange',\n * () => this.name() && this.title.set(this.name())\n * );\n * }\n * }\n * ```\n *\n * Effect Naming Convention:\n * Format: 'ComponentName.action.on.trigger'\n * - ComponentName: The full component class name (e.g., 'LoginComponent', 'InputAreaComponent')\n * - action: What the effect does (e.g., 'clearError', 'focusInput', 'updateTitle')\n * - trigger: What signal/state change triggers it (e.g., 'passwordChange', 'isEditModeEnabled')\n *\n * Examples:\n * - 'LoginComponent.clearError.on.passwordChange'\n * - 'InputAreaComponent.updateValue.on.selectedPrompt'\n * - 'ThreadHistoryListItemComponent.focusInput.on.isEditModeEnabled'\n *\n * Benefits:\n * - Centralized effect management prevents scattered effect() calls throughout components\n * - Named effects make debugging easier by providing clear identifiers in logs\n * - Automatic cleanup prevents memory leaks\n * - Consistent pattern across all components improves maintainability\n * - Easy to track which effects are active for a given component instance\n */\n@Injectable()\nexport class ComponentEffectManagerService {\n private _injector: Injector = inject(Injector);\n private _namedEffects: WritableSignal<NamedEffect[] | null> = signal<NamedEffect[] | null>(\n null,\n );\n private readonly _destroyRef: DestroyRef = inject(DestroyRef);\n\n constructor(\n // eslint-disable-next-line @angular-eslint/prefer-inject\n @Inject(COMPONENT_NAME) public componentNameInjected: string,\n ) {\n this.registerEffect(`${this.componentNameInjected}.namedEffectsListChange`, () => {\n const effects = this._namedEffects();\n\n if (!effects || effects.length === 0) return;\n\n console.info(\n `Change in registered effects for component: ${this.componentNameInjected}`,\n effects.map((e) => e.name),\n );\n });\n\n this._destroyRef.onDestroy(() => {\n this.destroyAllEffects();\n });\n }\n\n public registerEffect(name: string, effectFn: () => void): void {\n if (!name || name.trim() === '') {\n console.warn('Effect name must be a non-empty string.');\n\n return;\n }\n\n const currentEffects: NamedEffect[] = this._namedEffects() ?? [];\n\n if (currentEffects.find((e) => e.name === name)) {\n console.warn(`Effect with name \"${name}\" is already running.`);\n\n return;\n }\n\n // runs the effect\n const effectRef: EffectRef = effect(\n () => {\n effectFn();\n },\n { injector: this._injector },\n );\n\n const namedEffect: NamedEffect = {\n name,\n effectRef,\n };\n\n this._namedEffects.set([...currentEffects, namedEffect]);\n }\n\n public destroyEffect(name: string): void {\n const currentEffects: NamedEffect[] = this._namedEffects() ?? [];\n\n const effectToDestroy: NamedEffect | undefined = currentEffects.find(\n (e) => e.name === name,\n );\n\n if (!effectToDestroy) {\n console.warn(`No effect found with name \"${name}\" to destroy.`);\n\n return;\n }\n\n effectToDestroy.effectRef.destroy();\n\n const updatedEffects: NamedEffect[] = currentEffects.filter((e) => e.name !== name);\n\n this._namedEffects.set(updatedEffects.length > 0 ? updatedEffects : null);\n }\n\n public destroyAllEffects(): void {\n const effects: NamedEffect[] | null = this._namedEffects();\n\n if (!effects || effects.length === 0) return;\n\n console.info(`Destroying ${effects.length} effects for: ${this.componentNameInjected}`);\n\n effects.forEach((namedEffect) => namedEffect.effectRef.destroy());\n\n this._namedEffects.set(null);\n }\n}\n","import { Injectable, signal, WritableSignal } from '@angular/core';\n\n/**\n * Service to load consumer assets like stylesheets and scripts.\n *\n * Assets are directly appended to the document head and body.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ConsumerAssetLoaderService {\n private readonly _links: string[] = [\n 'https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap',\n 'https://cdnjs.cloudflare.com/ajax/libs/prism/1.30.0/themes/prism-twilight.min.css',\n // add more stylesheets if needed\n ];\n\n private readonly _scripts: string[] = [\n 'https://cdnjs.cloudflare.com/ajax/libs/prism/1.30.0/prism.min.js',\n 'https://cdnjs.cloudflare.com/ajax/libs/prism/1.30.0/plugins/autoloader/prism-autoloader.min.js',\n // add more scripts if needed\n ];\n\n private _isLoaded: WritableSignal<boolean> = signal(false);\n\n public loadConsumerAssets(): void {\n if (this._isLoaded()) {\n console.warn('Consumer assets have already been loaded.');\n\n return;\n }\n\n this.loadLinks();\n this.loadScripts();\n\n this._isLoaded.set(true);\n }\n\n private loadLinks(): void {\n this._links.forEach((href: string) => {\n const linkElement: HTMLLinkElement = document.createElement('link');\n\n linkElement.rel = 'stylesheet';\n linkElement.href = href;\n\n document.head.appendChild(linkElement);\n });\n }\n\n private loadScripts(): void {\n this._scripts.forEach((src: string) => {\n const scriptElement: HTMLScriptElement = document.createElement('script');\n\n scriptElement.src = src;\n\n document.body.appendChild(scriptElement);\n });\n }\n}\n","import { inject, Injectable, Signal, signal, WritableSignal, DestroyRef } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { IOConnectBrowser } from '@interopio/browser';\nimport { IOConnectDesktop } from '@interopio/desktop';\nimport { IoIntelWeb, IoIntelWebFactory } from '@interopio/intel-web';\nimport { IOConnectModals } from '@interopio/modals-api';\nimport { IOConnectStore } from '@interopio/ng';\nimport { map } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class IOConnectService {\n private readonly _ioConnectStore: IOConnectStore = inject(IOConnectStore);\n private readonly _destroyRef: DestroyRef = inject(DestroyRef);\n private _isUnsubscribed: WritableSignal<boolean> = signal<boolean>(false);\n\n private _isDarkMode: WritableSignal<boolean> = signal<boolean>(false);\n public get isDarkMode(): Signal<boolean> {\n return this._isDarkMode;\n }\n\n private get _ioConnect(): IOConnectDesktop.API | IOConnectBrowser.API {\n return this._ioConnectStore.getIOConnect();\n }\n\n public readonly isIoConnectReady: Signal<boolean>;\n\n constructor() {\n this.isIoConnectReady = toSignal(\n this._ioConnectStore.ready().pipe(map((r) => r.error === undefined)),\n { initialValue: false },\n );\n\n this._destroyRef.onDestroy(() => {\n this.handleDestroy();\n });\n }\n\n public async subscribeToThemeChanges(): Promise<void> {\n const ioThemesAPI: IOConnectDesktop.Themes.API | IOConnectBrowser.Themes.API | undefined =\n this._ioConnect.themes;\n\n if (!ioThemesAPI) return;\n\n const currentTheme = await ioThemesAPI.getCurrent();\n\n if (!currentTheme) return;\n\n // Set initial theme\n this.changeTheme(currentTheme);\n\n // Subscribe to future changes\n ioThemesAPI.onChanged(this.changeTheme.bind(this));\n }\n\n public async fetchPrefs<T>(key: string): Promise<T | undefined> {\n const prefs: IOConnectDesktop.Preferences.AppPreferences | undefined =\n await this._ioConnect.prefs.get();\n\n if (!prefs || !prefs.data) return Promise.reject('No preferences found');\n\n return prefs.data[key] as T | undefined;\n }\n\n public async updatePrefs<T>(key: string, value: T): Promise<void> {\n const currentPrefs: IOConnectDesktop.Preferences.AppPreferences | undefined =\n await this._ioConnect.prefs.get();\n\n const prefsData = { ...currentPrefs?.data };\n prefsData[key] = value;\n\n await this._ioConnect.prefs.update(prefsData);\n }\n\n public handleDestroy(): void {\n this._isUnsubscribed.set(true);\n }\n\n public async initializeIOIntelWeb(config: IoIntelWeb.WebConfig): Promise<IoIntelWeb.API> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).io = this._ioConnect;\n return IoIntelWebFactory(this._ioConnect as IOConnectBrowser.API, config);\n }\n\n public requestModalDialog(\n options: IOConnectModals.DialogRequestConfig,\n ): Promise<IOConnectModals.DialogResponse> {\n const ioBrowserAPI = this._ioConnect as IOConnectBrowser.API;\n if (!ioBrowserAPI.modals || !ioBrowserAPI.modals.dialogs) {\n throw new Error('IO Connect Modals API is not available.');\n }\n\n return ioBrowserAPI.modals.dialogs.request(options);\n }\n\n private changeTheme = (theme: { name: string }): void => {\n if (this._isUnsubscribed()) return;\n\n const themeName: string = theme.name;\n\n if (!themeName) {\n console.warn('Received invalid theme name:', themeName);\n\n return;\n }\n\n document.documentElement.className = '';\n document.documentElement.classList.add(themeName);\n\n this._isDarkMode.set(themeName === 'dark');\n };\n}\n","import {\n AfterViewInit,\n Component,\n inject,\n input,\n InputSignal,\n OnInit,\n Signal,\n} from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\n\nimport { UI_STRINGS } from './shared/constants/ui-strings';\nimport { ComponentEffectManagerService as EffectService } from './shared/services/component-effect-manager/component-effect-manager.service';\nimport { ConsumerAssetLoaderService } from './shared/services/consumer-asset-loader/consumer-asset-loader.service';\nimport { IOConnectService } from './shared/services/io/io.service';\n\nexport type IoAssistTempConfig = {\n isIoAssistLibReady: boolean;\n};\n\n@Component({\n selector: 'io-assist',\n imports: [RouterOutlet],\n templateUrl: './io-assist.component.html',\n providers: [\n {\n provide: EffectService,\n useFactory: () => new EffectService('IoAssist'),\n },\n ],\n})\nexport class IoAssist implements AfterViewInit, OnInit {\n protected readonly UI_STRINGS = UI_STRINGS.GENERAL;\n\n public readonly config: InputSignal<IoAssistTempConfig> = input.required();\n\n // Provided in root\n private readonly _ioService: IOConnectService = inject(IOConnectService);\n\n // Provided in current component\n private readonly _effectService: EffectService = inject(EffectService);\n\n protected readonly isIoReady: Signal<boolean> = this._ioService.isIoConnectReady;\n\n private readonly _consumerAssetLoaderService: ConsumerAssetLoaderService = inject(\n ConsumerAssetLoaderService,\n );\n\n public ngOnInit(): void {\n this.registerEffects();\n }\n\n // Must be explicitly called after view init to ensure that the DOM is ready for asset injection\n public ngAfterViewInit(): void {\n this._consumerAssetLoaderService.loadConsumerAssets();\n }\n\n private registerEffects(): void {\n this._effectService.registerEffect(\n 'IoAssist.subscribeToThemeChanges',\n () => this.isIoReady() && this._ioService.subscribeToThemeChanges(),\n );\n }\n}\n","@if (!isIoReady()) {\n <div class=\"flex flex-1 w-full h-lvh bg-app-background font-default\">\n <div class=\"m-auto text-center\">\n <p class=\"text-sm text-gray-500\">{{ UI_STRINGS.CANNOT_CONNECT_TO_IO }}</p>\n </div>\n </div>\n}\n\n@if (isIoReady()) {\n <div class=\"flex flex-1 w-full h-lvh bg-app-background font-default\">\n <router-outlet />\n </div>\n}\n","export enum APP_ROUTES_ENUM {\n ROOT = '',\n WILDCARD = '**',\n LOGIN = 'login',\n CHAT = 'chat',\n}\n","export enum PANEL_BUTTON_ACTION_TYPE {\n CLOSE = 'CLOSE',\n SUBMIT = 'SUBMIT',\n}\n","export enum APP_BUTTON_TYPES {\n DEFAULT = 'button-default',\n SUBMIT = 'button-submit',\n DANGER = 'button-danger',\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, input, InputSignal, output, OutputEmitterRef } from '@angular/core';\n\nimport { APP_BUTTON_TYPES } from './enum';\nimport { AppButtonType } from './types';\n\n@Component({\n selector: 'app-button',\n imports: [CommonModule],\n templateUrl: './app-button.component.html',\n})\nexport class AppButtonComponent {\n protected readonly APP_BUTTON_TYPES = APP_BUTTON_TYPES;\n\n public buttonType: InputSignal<AppButtonType> = input<AppButtonType>(APP_BUTTON_TYPES.DEFAULT);\n public disabled: InputSignal<boolean> = input<boolean>(false);\n public onClick: OutputEmitterRef<void> = output<void>();\n}\n","<button\n class=\"app-button\"\n [ngClass]=\"{\n 'flex justify-center items-center rounded-sm cursor-pointer gap-1 px-spacing-6 py-spacing-3': true,\n 'hover:text-text-states-active hover:border-border-hover': !disabled(),\n 'disabled:bg-button-background-disabled disabled:text-button-text-states-disabled disabled:cursor-not-allowed':\n disabled(),\n 'border-border-default text-text-default border': buttonType() === APP_BUTTON_TYPES.DEFAULT,\n 'bg-button-submit-background hover:opacity-95 text-white':\n buttonType() === APP_BUTTON_TYPES.SUBMIT,\n 'bg-button-danger-background': buttonType() === APP_BUTTON_TYPES.DANGER,\n }\"\n [disabled]=\"disabled()\"\n (click)=\"onClick.emit()\"\n>\n <ng-content></ng-content>\n</button>\n","export enum APP_ICON_SIZES {\n XXXS = '6px',\n XXS = '10px',\n XS = '12px',\n S = '16px',\n M = '20px',\n L = '24px',\n XL = '32px',\n}\n\nexport enum APP_ICON_VARIANTS {\n DEFAULT = 'default',\n THREAD_HISTORY = 'thread-history',\n PROMPT_PANEL = 'prompt-panel',\n TOOL_PANEL = 'tool-panel',\n HOME = 'home',\n CLOSE = 'close',\n LOGOUT = 'logout',\n PAPER_PLANE = 'paper-plane',\n ARROW_UP = 'arrow-up',\n ARROW_DOWN = 'arrow-down',\n RECTANGLE = 'rectangle',\n STAR_OUTLINE = 'star-outline',\n STAR_FILLED = 'star-filled',\n EDIT = 'edit',\n DELETE = 'delete',\n SEARCH = 'search',\n INFO = 'info',\n CHECK = 'check',\n RELOAD = 'reload',\n COPY = 'copy',\n CHEVRON_DOWN = 'chevron-down',\n CHEVRON_UP = 'chevron-up',\n CHEVRON_RIGHT = 'chevron-right',\n CIRCLE_FILLED = 'circle-filled',\n CIRCLE_OUTLINE = 'circle-outline',\n}\n\nexport enum APP_ICON_BACKGROUND_SHAPES {\n RECTANGLE = 'rectangle',\n CIRCLE = 'circle',\n}\n","import { APP_ICON_VARIANTS } from './enum';\nimport { AppIcon } from './types';\n\n/**\n * When you need to add an icon, please make sure to add it here and not directly in the component.\n * This will help us keep track of all the icons used in the application and make it easier to manage them.\n *\n * Also, make sure to update the `APP_ICON_VARIANTS` in `enums.ts` to include the new icon name.\n */\nexport const iconList: AppIcon[] = [\n {\n title: 'Close',\n name: APP_ICON_VARIANTS.CLOSE,\n svgPath: `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\"><!--!Font Awesome Free v7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d=\"M183.1 137.4C170.6 124.9 150.3 124.9 137.8 137.4C125.3 149.9 125.3 170.2 137.8 182.7L275.2 320L137.9 457.4C125.4 469.9 125.4 490.2 137.9 502.7C150.4 515.2 170.7 515.2 183.2 502.7L320.5 365.3L457.9 502.6C470.4 515.1 490.7 515.1 503.2 502.6C515.7 490.1 515.7 469.8 503.2 457.3L365.8 320L503.1 182.6C515.6 170.1 515.6 149.8 503.1 137.3C490.6 124.8 470.3 124.8 457.8 137.3L320.5 274.7L183.1 137.4z\"/></svg>\n`,\n },\n {\n title: 'Thread History',\n name: APP_ICON_VARIANTS.THREAD_HISTORY,\n svgPath: `<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M-6.79492e-07 1.63672C-7.78251e-07 0.73298 0.732979 -4.80594e-08 1.63672 -1.07315e-07L10.3633 -6.7949e-07C11.267 -7.38746e-07 12 0.732979 12 1.63672L12 10.3643C11.9997 11.2678 11.2669 12 10.3633 12L1.63672 12C0.733141 12 0.000260558 11.2678 -1.07253e-07 10.3643L-6.79492e-07 1.63672ZM10.3633 11.1816C10.815 11.1816 11.1814 10.8159 11.1816 10.3643L11.1816 1.63672C11.1816 1.18485 10.8151 0.818359 10.3633 0.818359L4.5 0.818359L4.5 11.1816L10.3633 11.1816ZM0.818359 10.3643C0.81862 10.8159 1.18501 11.1816 1.63672 11.1816L3.75 11.1816L3.75 0.818359L1.63672 0.818359C1.18485 0.818359 0.818359 1.18485 0.818359 1.63672L0.818359 10.3643ZM1.5 7.50098L3 7.50098L3 8.25098L1.5 8.25098L1.5 7.50098ZM3 5.25098L3 6.00098L1.5 6.00098L1.5 5.25098L3 5.25098ZM3 3.00098L3 3.75098L1.5 3.75098L1.5 3.00098L3 3.00098Z\" fill=\"#B0B2B5\"/>\n</svg>\n`,\n },\n {\n title: 'Home',\n name: APP_ICON_VARIANTS.HOME,\n svgPath: `<svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M10.6406 1.125C10.3594 0.820312 9.86719 0.820312 9.58594 1.125L8.95312 1.73438L10.3125 3.09375L10.9219 2.46094C11.2266 2.17969 11.2266 1.6875 10.9219 1.40625L10.6406 1.125ZM4.42969 6.28125C4.3125 6.375 4.24219 6.51562 4.21875 6.63281L3.86719 8.17969L5.41406 7.82812C5.53125 7.80469 5.67188 7.73438 5.76562 7.61719L9.77344 3.60938L8.4375 2.27344L4.42969 6.28125ZM9.04688 0.585938C9.63281 0 10.5938 0 11.1797 0.585938L11.4609 0.867188C12.0469 1.45312 12.0469 2.41406 11.4609 3L6.30469 8.15625C6.09375 8.36719 5.83594 8.50781 5.57812 8.55469L3.44531 9.04688C3.32812 9.07031 3.1875 9.04688 3.09375 8.95312C3 8.85938 2.97656 8.71875 3 8.60156L3.49219 6.46875C3.5625 6.21094 3.67969 5.95312 3.89062 5.74219L9.04688 0.585938ZM1.875 1.54688H4.875C5.0625 1.54688 5.25 1.73438 5.25 1.92188C5.25 2.13281 5.0625 2.29688 4.875 2.29688H1.875C1.24219 2.29688 0.75 2.8125 0.75 3.42188V10.1719C0.75 10.8047 1.24219 11.2969 1.875 11.2969H8.625C9.23438 11.2969 9.75 10.8047 9.75 10.1719V7.17188C9.75 6.98438 9.91406 6.79688 10.125 6.79688C10.3125 6.79688 10.5 6.98438 10.5 7.17188V10.1719C10.5 11.2266 9.65625 12.0469 8.625 12.0469H1.875C0.820312 12.0469 0 11.2266 0 10.1719V3.42188C0 2.39062 0.820312 1.54688 1.875 1.54688Z\" fill=\"#B0B2B5\"/>\n</svg>\n`,\n },\n {\n title: 'Logout',\n name: APP_ICON_VARIANTS.LOGOUT,\n svgPath: `<svg width=\"13\" height=\"13\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\"><!--!Font Awesome Free v7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d=\"M224 160C241.7 160 256 145.7 256 128C256 110.3 241.7 96 224 96L160 96C107 96 64 139 64 192L64 448C64 501 107 544 160 544L224 544C241.7 544 256 529.7 256 512C256 494.3 241.7 480 224 480L160 480C142.3 480 128 465.7 128 448L128 192C128 174.3 142.3 160 160 160L224 160zM566.6 342.6C579.1 330.1 579.1 309.8 566.6 297.3L438.6 169.3C426.1 156.8 405.8 156.8 393.3 169.3C380.8 181.8 380.8 202.1 393.3 214.6L466.7 288L256 288C238.3 288 224 302.3 224 320C224 337.7 238.3 352 256 352L466.7 352L393.3 425.4C380.8 437.9 380.8 458.2 393.3 470.7C405.8 483.2 426.1 483.2 438.6 470.7L566.6 342.7z\"/></svg>`,\n },\n {\n title: 'Prompt Panel',\n name: APP_ICON_VARIANTS.PROMPT_PANEL,\n svgPath: `<svg width=\"12\" height=\"16\" viewBox=\"0 0 12 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M0 1.5C0 0.6875 0.65625 0 1.5 0H10.5C11.3125 0 12 0.6875 12 1.5V15.3125C12 15.7188 11.6875 16 11.2812 16C11.1562 16 11.0312 15.9688 10.9062 15.9062L6 12.625L1.0625 15.9062C0.9375 15.9688 0.8125 16 0.6875 16C0.28125 16 0 15.7188 0 15.3125V1.5ZM1.5 1C1.21875 1 1 1.25 1 1.5V14.75L5.71875 11.5938C5.875 11.5 6.09375 11.5 6.25 11.5938L11 14.75V1.5C11 1.25 10.75 1 10.5 1H1.5Z\" fill=\"#B0B2B5\"/>\n</svg>\n`,\n },\n {\n title: 'Tool Panel',\n name: APP_ICON_VARIANTS.TOOL_PANEL,\n svgPath: `<svg width=\"16\" height=\"13\" viewBox=\"0 0 16 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M1 2H2V1H1V2ZM0 0.75C0 0.34375 0.3125 0 0.75 0H2.25C2.65625 0 3 0.34375 3 0.75V2.25C3 2.6875 2.65625 3 2.25 3H0.75C0.3125 3 0 2.6875 0 2.25V0.75ZM5 1H15C15.25 1 15.5 1.25 15.5 1.5C15.5 1.78125 15.25 2 15 2H5C4.71875 2 4.5 1.78125 4.5 1.5C4.5 1.25 4.71875 1 5 1ZM5 6H15C15.25 6 15.5 6.25 15.5 6.5C15.5 6.78125 15.25 7 15 7H5C4.71875 7 4.5 6.78125 4.5 6.5C4.5 6.25 4.71875 6 5 6ZM5 11H15C15.25 11 15.5 11.25 15.5 11.5C15.5 11.7812 15.25 12 15 12H5C4.71875 12 4.5 11.7812 4.5 11.5C4.5 11.25 4.71875 11 5 11ZM1 6V7H2V6H1ZM0.75 5H2.25C2.65625 5 3 5.34375 3 5.75V7.25C3 7.6875 2.65625 8 2.25 8H0.75C0.3125 8 0 7.6875 0 7.25V5.75C0 5.34375 0.3125 5 0.75 5ZM1 12H2V11H1V12ZM0 10.75C0 10.3438 0.3125 10 0.75 10H2.25C2.65625 10 3 10.3438 3 10.75V12.25C3 12.6875 2.65625 13 2.25 13H0.75C0.3125 13 0 12.6875 0 12.25V10.75Z\" fill=\"#B0B2B5\"/>\n</svg>\n`,\n },\n {\n title: 'Send Message Disabled',\n name: APP_ICON_VARIANTS.PAPER_PLANE,\n svgPath: `<svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M2.15625 0.46875L15.9688 6.46875C16.9688 6.90625 16.9688 8.3125 15.9688 8.75L2.15625 14.75C1.09375 15.2188 0 14.0312 0.5625 13L2.75 8.96875C2.875 8.71875 3.125 8.53125 3.4375 8.5L8.9375 7.8125C9.03125 7.8125 9.125 7.71875 9.125 7.59375C9.125 7.5 9.03125 7.40625 8.9375 7.40625L3.4375 6.71875C3.125 6.65625 2.875 6.5 2.75 6.25L0.5625 2.21875C0 1.1875 1.09375 0 2.15625 0.46875Z\" fill=\"#62656A\"/>\n</svg>\n`,\n },\n {\n title: 'Send Message',\n name: APP_ICON_VARIANTS.ARROW_UP,\n svgPath: `<svg width=\"14\" height=\"16\" viewBox=\"0 0 14 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M7.66406 0.457031L13.2891 6.08203C13.7461 6.50391 13.7461 7.24219 13.2891 7.66406C12.8672 8.12109 12.1289 8.12109 11.707 7.66406L8.01562 3.97266V14.7305C8.01562 15.3633 7.48828 15.8555 6.89062 15.8555C6.25781 15.8555 5.76562 15.3633 5.76562 14.7305V3.97266L2.03906 7.66406C1.61719 8.12109 0.878906 8.12109 0.457031 7.66406C0 7.24219 0 6.50391 0.457031 6.08203L6.08203 0.457031C6.50391 0 7.24219 0 7.66406 0.457031Z\" fill=\"white\"/>\n</svg>\n`,\n },\n {\n title: 'Send Message',\n name: APP_ICON_VARIANTS.ARROW_DOWN,\n svgPath: `<svg width=\"12\" height=\"13\" viewBox=\"0 0 12 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M6.21875 12.4062L2.84375 9.03125C2.70312 8.89062 2.70312 8.63281 2.84375 8.49219C2.98438 8.35156 3.24219 8.35156 3.38281 8.49219L6.125 11.2344V0.875C6.125 0.6875 6.28906 0.5 6.5 0.5C6.6875 0.5 6.875 0.6875 6.875 0.875V11.2344L9.59375 8.49219C9.73438 8.35156 9.99219 8.35156 10.1328 8.49219C10.2734 8.63281 10.2734 8.89062 10.1328 9.03125L6.75781 12.4062C6.61719 12.5469 6.35938 12.5469 6.21875 12.4062Z\" fill=\"#B0B2B5\"/>\n</svg>\n`,\n },\n {\n title: 'Stop Generation',\n name: APP_ICON_VARIANTS.RECTANGLE,\n svgPath: `<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M0 2C0 0.90625 0.875 0 2 0H12C13.0938 0 14 0.90625 14 2V12C14 13.125 13.0938 14 12 14H2C0.875 14 0 13.125 0 12V2Z\" fill=\"white\"/>\n</svg>\n`,\n },\n {\n title: 'Add To Favorites',\n name: APP_ICON_VARIANTS.STAR_OUTLINE,\n svgPath: `<svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M4.78125 3.96094C4.66406 4.19531 4.45312 4.33594 4.21875 4.38281L1.00781 4.85156L3.32812 7.17188C3.51562 7.33594 3.58594 7.59375 3.53906 7.82812L3 11.1094L5.85938 9.5625C6.09375 9.44531 6.35156 9.44531 6.58594 9.5625L9.44531 11.1094L8.90625 7.82812C8.85938 7.59375 8.92969 7.33594 9.11719 7.17188L11.4375 4.85156L8.22656 4.38281C7.96875 4.33594 7.75781 4.19531 7.66406 3.96094L6.21094 1.00781L4.78125 3.96094ZM9.42188 11.9531H9.44531L6.23438 10.2188L3.02344 11.9531C2.83594 12.0469 2.60156 12.0234 2.41406 11.9062C2.25 11.7656 2.15625 11.5547 2.20312 11.3438L2.8125 7.71094L0.210938 5.13281C0.046875 4.96875 0 4.75781 0.0703125 4.54688C0.140625 4.35938 0.304688 4.19531 0.515625 4.17188L4.10156 3.63281L5.71875 0.328125C5.8125 0.140625 6 0 6.21094 0C6.44531 0 6.63281 0.140625 6.72656 0.328125L8.34375 3.63281L11.9297 4.17188C12.1406 4.19531 12.3047 4.35938 12.375 4.54688C12.4453 4.75781 12.3984 4.96875 12.2344 5.13281L9.63281 7.71094L10.2422 11.3438C10.2891 11.5547 10.1953 11.7656 10.0312 11.9062C9.84375 12.0234 9.63281 12.0469 9.42188 11.9531Z\" fill=\"#B0B2B5\"/>\n</svg>\n`,\n },\n {\n title: 'Remove From Favorites',\n name: APP_ICON_VARIANTS.STAR_FILLED,\n svgPath: `<svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M6.89062 0.421875L8.41406 3.53906L11.7656 4.03125C12.0469 4.07812 12.2812 4.26562 12.375 4.54688C12.4688 4.80469 12.3984 5.10938 12.1875 5.29688L9.75 7.71094L10.3359 11.1328C10.3828 11.4141 10.2656 11.6953 10.0312 11.8594C9.79688 12.0469 9.49219 12.0469 9.23438 11.9297L6.23438 10.3125L3.21094 11.9297C2.97656 12.0469 2.67188 12.0469 2.4375 11.8594C2.20312 11.6953 2.08594 11.4141 2.13281 11.1328L2.69531 7.71094L0.257812 5.29688C0.0703125 5.10938 0 4.80469 0.0703125 4.54688C0.164062 4.26562 0.398438 4.07812 0.679688 4.03125L4.05469 3.53906L5.55469 0.421875C5.67188 0.164062 5.92969 0 6.23438 0C6.51562 0 6.77344 0.164062 6.89062 0.421875Z\" fill=\"#EAEAEB\"/>\n</svg>\n`,\n },\n {\n title: 'Edit',\n name: APP_ICON_VARIANTS.EDIT,\n svgPath: `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\"><!--!Font Awesome Pro v7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2025 Fonticons, Inc.--><path d=\"M505 122.9L517.1 135C526.5 144.4 526.5 159.6 517.1 168.9L488 198.1L441.9 152L471 122.9C480.4 113.5 495.6 113.5 504.9 122.9zM273.8 320.2L408 185.9L454.1 232L319.8 366.2C316.9 369.1 313.3 371.2 309.4 372.3L250.9 389L267.6 330.5C268.7 326.6 270.8 323 273.7 320.1zM437.1 89L239.8 286.2C231.1 294.9 224.8 305.6 221.5 317.3L192.9 417.3C190.5 425.7 192.8 434.7 199 440.9C205.2 447.1 214.2 449.4 222.6 447L322.6 418.4C334.4 415 345.1 408.7 353.7 400.1L551 202.9C579.1 174.8 579.1 129.2 551 101.1L538.9 89C510.8 60.9 465.2 60.9 437.1 89zM152 128C103.4 128 64 167.4 64 216L64 488C64 536.6 103.4 576 152 576L424 576C472.6 576 512 536.6 512 488L512 376C512 362.7 501.3 352 488 352C474.7 352 464 362.7 464 376L464 488C464 510.1 446.1 528 424 528L152 528C129.9 528 112 510.1 112 488L112 216C112 193.9 129.9 176 152 176L264 176C277.3 176 288 165.3 288 152C288 138.7 277.3 128 264 128L152 128z\"/></svg>`,\n },\n {\n title: 'Delete',\n name: APP_ICON_VARIANTS.DELETE,\n svgPath: `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\"><!--!Font Awesome Free v7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d=\"M262.2 48C248.9 48 236.9 56.3 232.2 68.8L216 112L120 112C106.7 112 96 122.7 96 136C96 149.3 106.7 160 120 160L520 160C533.3 160 544 149.3 544 136C544 122.7 533.3 112 520 112L424 112L407.8 68.8C403.1 56.3 391.2 48 377.8 48L262.2 48zM128 208L128 512C128 547.3 156.7 576 192 576L448 576C483.3 576 512 547.3 512 512L512 208L464 208L464 512C464 520.8 456.8 528 448 528L192 528C183.2 528 176 520.8 176 512L176 208L128 208zM288 280C288 266.7 277.3 256 264 256C250.7 256 240 266.7 240 280L240 456C240 469.3 250.7 480 264 480C277.3 480 288 469.3 288 456L288 280zM400 280C400 266.7 389.3 256 376 256C362.7 256 352 266.7 352 280L352 456C352 469.3 362.7 480 376 480C389.3 480 400 469.3 400 456L400 280z\"/></svg>`,\n },\n {\n title: 'Search',\n name: APP_ICON_VARIANTS.SEARCH,\n svgPath: `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\"><!--!Font Awesome Free v7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d=\"M480 272C480 317.9 465.1 360.3 440 394.7L566.6 521.4C579.1 533.9 579.1 554.2 566.6 566.7C554.1 579.2 533.8 579.2 521.3 566.7L394.7 440C360.3 465.1 317.9 480 272 480C157.1 480 64 386.9 64 272C64 157.1 157.1 64 272 64C386.9 64 480 157.1 480 272zM272 416C351.5 416 416 351.5 416 272C416 192.5 351.5 128 272 128C192.5 128 128 192.5 128 272C128 351.5 192.5 416 272 416z\"/></svg>`,\n },\n {\n title: 'Info',\n name: APP_ICON_VARIANTS.INFO,\n svgPath: `<svg width=\"13\" height=\"12\" viewBox=\"0 0 13 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M6.28125 0.75C4.38281 0.75 2.67188 1.75781 1.73438 3.375C0.773438 5.01562 0.773438 7.00781 1.73438 8.625C2.67188 10.2656 4.38281 11.25 6.28125 11.25C8.15625 11.25 9.86719 10.2656 10.8047 8.625C11.7656 7.00781 11.7656 5.01562 10.8047 3.375C9.86719 1.75781 8.15625 0.75 6.28125 0.75ZM6.28125 12C4.125 12 2.15625 10.875 1.07812 9C0 7.14844 0 4.875 1.07812 3C2.15625 1.14844 4.125 0 6.28125 0C8.41406 0 10.3828 1.14844 11.4609 3C12.5391 4.875 12.5391 7.14844 11.4609 9C10.3828 10.875 8.41406 12 6.28125 12ZM5.15625 8.25H5.90625V6H5.34375C5.13281 6 4.96875 5.83594 4.96875 5.625C4.96875 5.4375 5.13281 5.25 5.34375 5.25H6.28125C6.46875 5.25 6.65625 5.4375 6.65625 5.625V8.25H7.40625C7.59375 8.25 7.78125 8.4375 7.78125 8.625C7.78125 8.83594 7.59375 9 7.40625 9H5.15625C4.94531 9 4.78125 8.83594 4.78125 8.625C4.78125 8.4375 4.94531 8.25 5.15625 8.25ZM6.28125 4.3125C5.95312 4.3125 5.71875 4.07812 5.71875 3.75C5.71875 3.44531 5.95312 3.1875 6.28125 3.1875C6.58594 3.1875 6.84375 3.44531 6.84375 3.75C6.84375 4.07812 6.58594 4.3125 6.28125 4.3125Z\" fill=\"#B0B2B5\"/>\n</svg>\n`,\n },\n {\n title: 'Check',\n name: APP_ICON_VARIANTS.CHECK,\n svgPath: `<svg width=\"7\" height=\"6\" viewBox=\"0 0 7 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M2.37743 5.11736L0.102534 2.84247C-0.0341781 2.70576 -0.0341781 2.48417 0.102534 2.34746L0.597542 1.85245C0.734255 1.71574 0.955838 1.71574 1.09255 1.85245L2.62504 3.38494L5.90745 0.102534C6.04416 -0.0341781 6.26575 -0.0341781 6.40246 0.102534L6.89747 0.597542C7.03418 0.734255 7.03418 0.955838 6.89747 1.09255L2.87265 5.11736C2.73594 5.25407 2.51414 5.25407 2.37743 5.11736Z\" fill=\"white\"/>\n</svg>\n`,\n },\n {\n title: 'RELOAD',\n name: APP_ICON_VARIANTS.RELOAD,\n svgPath: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M13.0312 11.2812C13.125 11.125 13.3125 11 13.5 11C13.875 11 14.125 11.4062 13.9062 11.75C12.6875 13.7188 10.4688 15 8 15C4.125 15 1 11.875 1 8C1 4.15625 4.125 1 8 1C9.75 1 11.3438 1.65625 12.5625 2.71875L13.5312 1.75C13.6875 1.59375 13.9062 1.5 14.125 1.5C14.5938 1.5 15 1.90625 15 2.375V5.5C15 5.78125 14.75 6 14.5 6H11.3438C10.875 6 10.5 5.625 10.5 5.15625C10.5 4.9375 10.5625 4.71875 10.75 4.5625L11.875 3.4375C10.8125 2.5625 9.46875 2 8 2C4.6875 2 2 4.6875 2 8C2 11.3125 4.6875 14 8 14C10.0938 14 11.9688 12.9062 13.0312 11.2812ZM14 2.71875L11.6875 5H14V2.71875Z\" fill=\"#26272A\"/>\n</svg>\n`,\n },\n {\n title: 'COPY',\n name: APP_ICON_VARIANTS.COPY,\n svgPath: `<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M10.5 8.25C10.8984 8.25 11.25 7.92188 11.25 7.5V2.71875C11.25 2.625 11.2031 2.53125 11.1328 2.46094L9.53906 0.867188C9.46875 0.796875 9.375 0.75 9.28125 0.75H6.75C6.32812 0.75 6 1.10156 6 1.5V7.5C6 7.92188 6.32812 8.25 6.75 8.25H10.5ZM11.6484 1.92188C11.8594 2.13281 12 2.4375 12 2.71875V7.5C12 8.34375 11.3203 9 10.5 9H6.75C5.90625 9 5.25 8.34375 5.25 7.5V1.5C5.25 0.679688 5.90625 0 6.75 0H9.28125C9.5625 0 9.86719 0.140625 10.0781 0.351562L11.6484 1.92188ZM1.5 3H4.5V3.75H1.5C1.07812 3.75 0.75 4.10156 0.75 4.5V10.5C0.75 10.9219 1.07812 11.25 1.5 11.25H5.25C5.64844 11.25 6 10.9219 6 10.5V9.75H6.75V10.5C6.75 11.3438 6.07031 12 5.25 12H1.5C0.65625 12 0 11.3438 0 10.5V4.5C0 3.67969 0.65625 3 1.5 3Z\" fill=\"#B0B2B5\"/>\n</svg>\n`,\n },\n {\n title: 'Chevron Up',\n name: APP_ICON_VARIANTS.CHEVRON_UP,\n svgPath: `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\"><!--!Font Awesome Free v7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d=\"M297.4 169.4C309.9 156.9 330.2 156.9 342.7 169.4L534.7 361.4C547.2 373.9 547.2 394.2 534.7 406.7C522.2 419.2 501.9 419.2 489.4 406.7L320 237.3L150.6 406.6C138.1 419.1 117.8 419.1 105.3 406.6C92.8 394.1 92.8 373.8 105.3 361.3L297.3 169.3z\"/></svg>\n`,\n },\n {\n title: 'Chevron Down',\n name: APP_ICON_VARIANTS.CHEVRON_DOWN,\n svgPath: `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\"><!--!Font Awesome Free v7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d=\"M297.4 470.6C309.9 483.1 330.2 483.1 342.7 470.6L534.7 278.6C547.2 266.1 547.2 245.8 534.7 233.3C522.2 220.8 501.9 220.8 489.4 233.3L320 402.7L150.6 233.4C138.1 220.9 117.8 220.9 105.3 233.4C92.8 245.9 92.8 266.2 105.3 278.7L297.3 470.7z\"/></svg>\n`,\n },\n {\n title: 'Chevron Right',\n name: APP_ICON_VARIANTS.CHEVRON_RIGHT,\n svgPath: `<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M8.78128 6.52982C9.07416 6.23694 9.07416 5.76107 8.78128 5.46819L4.28128 0.968191C3.98841 0.675316 3.51253 0.675316 3.21966 0.968191C2.92678 1.26107 2.92678 1.73694 3.21966 2.02982L7.19016 5.99994L3.22228 9.97007C2.92941 10.2629 2.92941 10.7388 3.22228 11.0317C3.51516 11.3246 3.99103 11.3246 4.28391 11.0317L8.78391 6.53169L8.78128 6.52982Z\" fill=\"#95989D\"/>\n</svg>\n`,\n },\n {\n title: 'Circle Filled',\n name: APP_ICON_VARIANTS.CIRCLE_FILLED,\n svgPath: `<svg width=\"6\" height=\"6\" viewBox=\"0 0 6 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<circle cx=\"3\" cy=\"3\" r=\"3\" fill=\"#F25F1F\"/>\n</svg>\n`,\n },\n {\n title: 'Circle Outline',\n name: APP_ICON_VARIANTS.CIRCLE_OUTLINE,\n svgPath: `<svg width=\"6\" height=\"6\" viewBox=\"0 0 6 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"3\" cy=\"3\" r=\"2.5\" fill=\"none\" stroke=\"#F25F1F\" stroke-width=\"1\"/>\n</svg>\n`,\n },\n];\n\nexport const defaultIcon: AppIcon = {\n title: 'Icon Title',\n name: APP_ICON_VARIANTS.DEFAULT,\n svgPath: `<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M-6.79492e-07 1.63672C-7.78251e-07 0.73298 0.732979 -4.80594e-08 1.63672 -1.07315e-07L10.3633 -6.7949e-07C11.267 -7.38746e-07 12 0.732979 12 1.63672L12 10.3643C11.9997 11.2678 11.2669 12 10.3633 12L1.63672 12C0.733141 12 0.000260558 11.2678 -1.07253e-07 10.3643L-6.79492e-07 1.63672ZM10.3633 11.1816C10.815 11.1816 11.1814 10.8159 11.1816 10.3643L11.1816 1.63672C11.1816 1.18485 10.8151 0.818359 10.3633 0.818359L4.5 0.818359L4.5 11.1816L10.3633 11.1816ZM0.818359 10.3643C0.81862 10.8159 1.18501 11.1816 1.63672 11.1816L3.75 11.1816L3.75 0.818359L1.63672 0.818359C1.18485 0.818359 0.818359 1.18485 0.818359 1.63672L0.818359 10.3643ZM1.5 7.50098L3 7.50098L3 8.25098L1.5 8.25098L1.5 7.50098ZM3 5.25098L3 6.00098L1.5 6.00098L1.5 5.25098L3 5.25098ZM3 3.00098L3 3.75098L1.5 3.75098L1.5 3.00098L3 3.00098Z\" fill=\"#B0B2B5\"/>\n</svg>\n`,\n};\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n computed,\n ElementRef,\n inject,\n input,\n InputSignal,\n OnChanges,\n OnInit,\n output,\n OutputEmitterRef,\n Signal,\n signal,\n ViewChild,\n WritableSignal,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\nimport { APP_ICON_BACKGROUND_SHAPES, APP_ICON_SIZES } from './enum';\nimport { defaultIcon, iconList } from './icons';\nimport { AppIcon, AppIconBackgroundShapeType, AppIconSizeType, AppIconVariantsType } from './types';\nimport { ComponentEffectManagerService as EffectService } from '../../services/component-effect-manager/component-effect-manager.service';\n/**\n * AppIconComponent - A reusable icon component with dynamic styling support\n *\n * Basic Usage:\n * @example\n * ```html\n * <app-icon [variant]=\"APP_ICON_VARIANTS.CLOSE\"></app-icon>\n * ```\n *\n * Advanced Usage:\n * @example\n * ```html\n * <app-icon\n * [variant]=\"APP_ICON_VARIANTS.CLOSE\"\n * [size]=\"APP_ICON_SIZES.M\"\n * [iconFill]=\"'app-text-primary'\"\n * [backgroundColor]=\"'app-bg-secondary'\"\n * [hoverIconFill]=\"'app-text-primary-dark'\"\n * [disabledIconFill]=\"'app-text-states-disabled'\"\n * [hoverBackgroundColor]=\"'app-bg-hover-secondary'\"\n * [hoverBackgroundShape]=\"APP_ICON_BACKGROUND_SHAPES.CIRCLE\"\n * (onClick)=\"handleIconClick()\"\n * ></app-icon>\n * ```\n *\n * Color Variables:\n * - Provide CSS variable names with/without the `--` prefix\n * - Example: `[iconFill]=\"'app-text-primary'\"` uses `var(--app-text-primary)`\n * - Colors must be defined in `_defaults.css`\n *\n * Available Inputs:\n * @input variant - Required. Icon type from APP_ICON_VARIANTS enum\n * @input size - Icon size from APP_ICON_SIZES or custom px value (default: XS)\n * @input iconFill - Fill color for normal state (default: app-text-default)\n * @input disabledIconFill - Fill color when disabled (default: app-text-states-disabled)\n * @input hoverIconFill - Fill color on hover (default: app-text-states-hover)\n * @input backgroundColor - Background color (optional)\n * @input hoverBackgroundColor - Background color on hover (optional)\n * @input hoverBackgroundShape - Shape of hover background (default: CIRCLE)\n * @input isDisabled - Disables icon and applies disabled styles (default: false)\n * @input isHostSameSize - Determines if host element should match icon size (default: true)\n * @input isHoveredExternal - External hover state control (optional) - use when you want to\n * control hover state from parent component\n * @input tabIndex - Tab index for keyboard navigation (default: 0)\n *\n * @output onClick - Emits when icon is clicked (not emitted when disabled)\n *\n * Notes:\n * - Default styles applied automatically, overrides optional\n * - Hover effects only active when not disabled\n * - Icon inherits hover state from host element\n */ @Component({\n selector: 'app-icon',\n imports: [CommonModule],\n templateUrl: './app-icon.component.html',\n host: {\n '[class]': 'hostClasses()',\n '[style]': 'hostStyles()',\n '[style.width.px]': 'isWrapped() ? sizeAsNumber() * 2 : sizeAsNumber()',\n '[style.height.px]': 'isWrapped() ? sizeAsNumber() * 2 : sizeAsNumber()',\n '(click)': 'handleClick($event)',\n '(keydown)': 'handleKeyDown($event)',\n '(mouseenter)': 'onMouseEnter()',\n '(mouseleave)': 'onMouseLeave()',\n '[attr.title]': 'getTitle()',\n '[attr.tabindex]': 'tabIndex()',\n },\n providers: [\n {\n provide: EffectService,\n useFactory: () => new EffectService('AppIconComponent'),\n },\n ],\n})\nexport class AppIconComponent implements OnChanges, OnInit {\n protected readonly APP_ICON_SIZES = APP_ICON_SIZES;\n\n private readonly _domSanitizer: DomSanitizer = inject(DomSanitizer);\n private readonly _iconList: AppIcon[] = iconList;\n private readonly _defaultIcon: AppIcon = defaultIcon;\n\n private _safeSvg!: SafeHtml;\n\n // For icon\n public variant: InputSignal<AppIconVariantsType> = input.required<AppIconVariantsType>();\n public size: InputSignal<AppIconSizeType> = input<AppIconSizeType>(APP_ICON_SIZES.XS);\n public iconFill: InputSignal<string> = input<string>('');\n public disabledIconFill: InputSignal<string> = input<string>('');\n public hoverIconFill: InputSignal<string> = input<string>('');\n public isDisabled: InputSignal<boolean> = input<boolean>(false);\n public isWrapped: InputSignal<boolean> = input<boolean>(true);\n public title: InputSignal<string> = input<string>('');\n\n // For host element\n public backgroundColor: InputSignal<string> = input<string>('');\n public hoverBackgroundShape: InputSignal<AppIconBackgroundShapeType> =\n input<AppIconBackgroundShapeType>(APP_ICON_BACKGROUND_SHAPES.CIRCLE);\n public hoverBackgroundColor: InputSignal<string> = input<string>('');\n public onClick: OutputEmitterRef<Event> = output<Event>();\n public isHoveredExternal: InputSignal<boolean | null> = input<boolean | null>(null);\n public tabIndex: InputSignal<number> = input<number>(0);\n\n @ViewChild('iconDiv', { static: false }) iconDivRef!: ElementRef<HTMLDivElement>;\n\n // Provided in current component\n private readonly _effectService: EffectService = inject(EffectService);\n\n public isHostHoveredSignal: WritableSignal<boolean> = signal(false);\n\n protected isHovered: Signal<boolean> = computed<boolean>(() => {\n // Use external hover if provided, otherwise internal signal\n return this.isHoveredExternal() !== null\n ? !!this.isHoveredExternal()\n : this.isHostHoveredSignal();\n });\n\n public getTitle: Signal<string> = computed<string>(() => {\n if (this.title()) {\n return this.title();\n }\n\n const match: AppIcon | undefined = this._iconList.find(\n (icon: AppIcon) => icon.name === this.variant(),\n );\n\n if (!match) {\n return this._defaultIcon.title;\n }\n\n return match.title;\n });\n\n protected hostClasses: Signal<string> = computed<string>(() => {\n const classListArray: string[] = [\n 'flex items-center justify-center',\n this.isDisabled() ? 'cursor-not-allowed' : 'cursor-pointer',\n this.hoverBackgroundShape() === APP_ICON_BACKGROUND_SHAPES.CIRCLE ? 'rounded-full' : '',\n ];\n\n return classListArray.filter((c) => c !== '').join(' ');\n });\n\n protected hostStyles: Signal<Record<string, string>> = computed<Record<string, string>>(() => {\n const styles: Record<string, string> = {};\n\n const bg: string = this.trimPrefix(this.backgroundColor());\n const hoverBg: string = this.trimPrefix(this.hoverBackgroundColor());\n\n if (this.isHovered() && hoverBg && !this.isDisabled()) {\n styles['background-color'] = `var(--${hoverBg})`;\n }\n\n if (!this.isHovered() && bg) {\n styles['background-color'] = `var(--${bg})`;\n }\n\n return styles;\n });\n\n protected getIconStyles: Signal<Record<string, string>> = computed<Record<string, string>>(\n () => {\n const styles: Record<string, string> = {};\n\n const dynamicFill: string = this.isDisabled()\n ? this.trimPrefix(this.disabledIconFill())\n : this.trimPrefix(this.iconFill());\n\n const staticFill: string = this.isDisabled()\n ? 'var(--app-text-states-disabled)'\n : 'var(--app-text-default)';\n\n styles['fill'] = dynamicFill ? `var(--${dynamicFill})` : staticFill;\n\n return styles;\n },\n );\n\n public ngOnInit(): void {\n this.registerEffects();\n }\n\n public ngOnChanges(): void {\n this.getIconSvgPath();\n }\n\n protected onMouseEnter(): void {\n if (this.isDisabled()) return;\n\n this.isHostHoveredSignal.set(true);\n }\n\n protected onMouseLeave(): void {\n if (this.isDisabled()) return;\n\n this.isHostHoveredSignal.set(false);\n }\n\n private applyIconHoverStyles(): void {\n if (!this.iconDivRef) return;\n\n const hoverFill = this.trimPrefix(this.hoverIconFill());\n const fillValue = hoverFill ? `var(--${hoverFill})` : 'var(--app-text-states-hover)';\n\n this.iconDivRef.nativeElement.style.fill = fillValue;\n }\n\n private removeIconHoverStyles(): void {\n if (!this.iconDivRef) return;\n\n const dynamicFill: string = this.isDisabled()\n ? this.trimPrefix(this.disabledIconFill())\n : this.trimPrefix(this.iconFill());\n\n const staticFill: string = this.isDisabled()\n ? 'var(--app-text-states-disabled)'\n : 'var(--app-text-default)';\n\n const fillValue: string = dynamicFill ? `var(--${dynamicFill})` : staticFill;\n\n this.iconDivRef.nativeElement.style.fill = fillValue;\n }\n\n protected getIconSvgPath(): string {\n const svgString: string =\n this._iconList.find((icon: AppIcon) => icon.name === this.variant())?.svgPath ||\n this._defaultIcon.svgPath;\n\n const svgNoFill: string = svgString.replace(/fill=\"[^\"]*\"/g, 'fill=\"defaultColor\"');\n\n const svgNoWidthHeight: string = svgNoFill\n .replace(/width=\"[^\"]*\"/g, '')\n .replace(/height=\"[^\"]*\"/g, '');\n\n this._safeSvg = this._domSanitizer.bypassSecurityTrustHtml(svgNoWidthHeight);\n\n return this._safeSvg as string;\n }\n\n protected getIconClasses(): string {\n const sizeValue: AppIconSizeType = this.size();\n const widthClass =\n typeof sizeValue === 'string' ? parseInt(sizeValue.replace('px', ''), 10) : sizeValue;\n const heightClass = widthClass;\n\n return `w-[${widthClass}px] h-[${heightClass}px] flex justify-center items-center`;\n }\n\n protected sizeAsNumber(): number {\n const sizeWithUnit: AppIconSizeType = this.size();\n\n if (typeof sizeWithUnit === 'number') {\n return sizeWithUnit;\n }\n\n if (typeof sizeWithUnit === 'string') {\n return parseInt(sizeWithUnit.replace('px', ''), 10);\n }\n\n return 0;\n }\n\n protected handleClick(event?: Event): void {\n if (!event) return;\n\n if (this.isDisabled()) {\n event?.stopPropagation();\n event?.preventDefault();\n\n return;\n }\n\n this.onClick.emit(event);\n }\n\n protected handleKeyDown(event: KeyboardEvent): void {\n if (!event) return;\n\n if (event.key !== 'Enter' && event.key !== 'Space' && event.key !== ' ') return;\n\n event.preventDefault();\n this.onClick.emit(event);\n\n // Remove focus from the icon after click\n (event.target as HTMLElement)?.blur();\n }\n\n private trimPrefix(colorClass: string): string {\n return colorClass.replace(/^--/, '').trim();\n }\n\n private registerEffects(): void {\n this._effectService.registerEffect('AppIcon.toggleHoverStylesEffect', () => {\n if (this.isDisabled()) return;\n\n if (this.isHovered()) {\n this.applyIconHoverStyles();\n\n return;\n }\n\n this.removeIconHoverStyles();\n });\n }\n}\n","<div\n class=\"icon-wrapper\"\n [ngClass]=\"{\n 'flex flex-col justify-center pointer-events-none': true,\n 'cursor-pointer': isDisabled() === false,\n 'cursor-not-allowed': isDisabled() === true,\n }\"\n [style.width.px]=\"sizeAsNumber()\"\n [style.height.px]=\"sizeAsNumber()\"\n>\n <div\n #iconDiv\n class=\"icon-wrapper__svg\"\n [ngClass]=\"getIconClasses()\"\n [ngStyle]=\"getIconStyles()\"\n [innerHTML]=\"getIconSvgPath()\"\n ></div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n input,\n InputSignal,\n output,\n OutputEmitterRef,\n Type,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { PANEL_BUTTON_ACTION_TYPE } from './enums';\nimport { AppPanelActionType, AppPanelFooterButton } from './types';\nimport { UI_STRINGS } from '../../constants/ui-strings';\nimport { AppButtonComponent } from '../app-button/app-button.component';\nimport { AppIconComponent } from '../app-icon/app-icon.component';\nimport { APP_ICON_SIZES, APP_ICON_VARIANTS } from '../app-icon/enum';\n\nconst MODULES = [CommonModule];\nconst COMPONENTS = [AppButtonComponent, AppIconComponent];\n\n/**\n * This is a reusable app panel component. It can displayed in two ways:\n * 1. As a standalone component in a template with ngIf to control its visibility\n * 2. As an overlay using the OverlayService to manage its display and state\n */\n@Component({\n selector: 'app-panel',\n templateUrl: './app-panel.component.html',\n imports: [...MODULES, ...COMPONENTS],\n})\nexport class AppPanelComponent {\n protected readonly UI_STRINGS = UI_STRINGS.PANEL_COMPONENT;\n protected readonly APP_ICON_VARIANTS = APP_ICON_VARIANTS;\n protected readonly APP_ICON_SIZES = APP_ICON_SIZES;\n\n @ViewChild('panelBodyContent', { read: ViewContainerRef, static: false })\n public panelBodyContent!: ViewContainerRef;\n\n public isHeaderCloseButtonDisplayed: InputSignal<boolean> = input<boolean>(false);\n public title: InputSignal<string | undefined> = input<string | undefined>(\n this.UI_STRINGS.DEFAULT_TITLE,\n );\n public description: InputSignal<string | undefined> = input<string | undefined>(undefined);\n public footerButtons: InputSignal<AppPanelFooterButton[]> = input<AppPanelFooterButton[]>([]);\n\n public onClose: OutputEmitterRef<void> = output<void>();\n public onSubmit: OutputEmitterRef<AppPanelActionType> = output<AppPanelActionType>();\n\n protected handleButtonClick(action: AppPanelActionType): void {\n switch (action) {\n case PANEL_BUTTON_ACTION_TYPE.CLOSE:\n this.onClose.emit();\n break;\n case PANEL_BUTTON_ACTION_TYPE.SUBMIT:\n this.onSubmit.emit(PANEL_BUTTON_ACTION_TYPE.SUBMIT);\n break;\n default:\n break;\n }\n }\n\n public injectBodyContent<T>(component: Type<T>): void {\n const container: ViewContainerRef | undefined = this.panelBodyContent;\n\n if (!container) throw new Error('Panel body content container is not defined');\n\n container.clear();\n container.createComponent(component);\n }\n}\n","<div\n class=\"app-panel\"\n [ngClass]=\"{\n 'flex flex-col bg-panel-background rounded-2xl border border-panel-border p-6 gap-3 shadow-panel-box-shadow w-auto md:min-w-[540px] min-w-[320px] max-w-[960px] max-h-[90vh] box-border overflow-hidden': true,\n }\"\n>\n <!-- Panel Header -->\n <div\n class=\"app-panel__header\"\n [ngClass]=\"{\n 'flex justify-end text-text-black-white text-xl font-weight-600 gap-2 flex-shrink-0': true,\n }\"\n >\n @if (title()) {\n <span\n [ngClass]=\"{\n 'flex flex-1 items-center text-text-black-white leading-[24px] truncate': true,\n }\"\n >{{ title() }}</span\n >\n }\n\n @if (isHeaderCloseButtonDisplayed()) {\n <app-icon\n [variant]=\"APP_ICON_VARIANTS.CLOSE\"\n [size]=\"APP_ICON_SIZES.M\"\n [iconFill]=\"'--app-text-black-white'\"\n [hoverIconFill]=\"'--app-text-black-white'\"\n (onClick)=\"onClose.emit()\"\n ></app-icon>\n }\n </div>\n\n <div\n class=\"app-panel__description\"\n [ngClass]=\"{\n 'flex-shrink-0': true,\n }\"\n >\n @if (description()) {\n <p\n [ngClass]=\"{\n 'text-text-secondary text-sm truncate': true,\n }\"\n >\n {{ description() }}\n </p>\n }\n </div>\n\n <!-- Scrollable wrapper for content -->\n <div\n class=\"app-panel__scrollable-wrapper\"\n [ngClass]=\"{\n 'flex-1 min-h-0 overflow-y-auto overflow-x-hidden custom-scrollbar': true,\n }\"\n >\n <div\n class=\"app-panel__content\"\n [ngClass]=\"{\n 'text-text-black-white font-weight-400 break-words w-full': true,\n }\"\n >\n <ng-content select=\"[panel-content]\"></ng-content>\n </div>\n\n <div #panelBodyContent></div>\n </div>\n\n <div\n class=\"app-panel__footer\"\n [ngClass]=\"{\n 'empty:hidden flex justify-end gap-2 flex-shrink-0 w-full': true,\n }\"\n >\n <ng-content select=\"[panel-footer]\"></ng-content>\n\n @if (footerButtons()) {\n @for (button of footerButtons(); track button) {\n <app-button\n [buttonType]=\"button.type\"\n [disabled]=\"false\"\n (click)=\"handleButtonClick(button.action)\"\n >{{ button.label }}</app-button\n >\n }\n }\n </div>\n</div>\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n ComponentRef,\n computed,\n EnvironmentInjector,\n inject,\n Injectable,\n Signal,\n signal,\n WritableSignal,\n} from '@angular/core';\n\nimport { AppPanelComponent } from '../../components/app-panel/app-panel.component';\nimport { AppPanelOverlayConfig } from '../../components/app-panel/types';\n\n/**\n * Service to manage overlay states such as:\n * - displaying or hiding the thread history UI\n * - other overlay states can be added here in the future\n *\n * TODO: Extract state in a root store when state grows beyond this simple use case\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class OverlayService {\n private _isThreadHistoryDisplayed: WritableSignal<boolean> = signal(false);\n\n private _overlayCDK = inject(Overlay);\n private _injector = inject(EnvironmentInjector);\n\n public readonly isThreadHistoryDisplayed: Signal<boolean> = computed(() =>\n this._isThreadHistoryDisplayed(),\n );\n\n public displayThreadHistory(): void {\n this._isThreadHistoryDisplayed.set(true);\n }\n\n public hideThreadHistory(): void {\n this._isThreadHistoryDisplayed.set(false);\n }\n\n public showPanelOverlay(config?: AppPanelOverlayConfig): OverlayRef {\n if (!config) throw new Error('Overlay config is required to display the panel overlay');\n\n if (!config.content) throw new Error('Overlay content component is required');\n\n const overlayRef: OverlayRef = this._overlayCDK.create({\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-dark-backdrop',\n panelClass: 'panel-overlay-container',\n positionStrategy: this._overlayCDK\n .position()\n .global()\n .centerHorizontally()\n .centerVertically(),\n });\n\n const portal: ComponentPortal<AppPanelComponent> = new ComponentPortal<AppPanelComponent>(\n AppPanelComponent,\n null,\n this._injector,\n );\n\n const panelRef: ComponentRef<AppPanelComponent> = overlayRef.attach(portal);\n\n panelRef.setInput('title', config.title ?? '');\n panelRef.setInput('description', config.description ?? '');\n panelRef.setInput('footerButtons', config.footerButtons ?? []);\n panelRef.setInput(\n 'isHeaderCloseButtonDisplayed',\n config.isHeaderCloseButtonDisplayed ?? true,\n );\n\n setTimeout(() => {\n panelRef.instance.injectBodyContent(config.content!);\n }, 0);\n\n panelRef.instance.onClose.subscribe(() => overlayRef.dispose());\n\n // Use this to handle on submit events from the panel if needed in the future\n //panelRef.instance.onSubmit.subscribe((action) => {});\n\n return overlayRef;\n }\n}\n","export enum AUTH_ACTIONS {\n LOGIN = '[Auth] Login',\n LOGIN_SUCCESS = '[Auth] Login Success',\n LOGIN_FAILURE = '[Auth] Login Failure',\n LOGOUT = '[Auth] Logout',\n LOGOUT_SUCCESS = '[Auth] Logout Success',\n LOGOUT_FAILURE = '[Auth] Logout Failure',\n}\n","import { createAction, props } from '@ngrx/store';\n\nimport { AUTH_ACTIONS } from './auth.actions.enum';\n\nexport const login = createAction(\n AUTH_ACTIONS.LOGIN,\n props<{ username: string; password: string }>(),\n);\nexport const loginSuccess = createAction(AUTH_ACTIONS.LOGIN_SUCCESS, props<{ username: string }>());\nexport const loginFailure = createAction(AUTH_ACTIONS.LOGIN_FAILURE, props<{ error: Error }>());\n\nexport const logout = createAction(AUTH_ACTIONS.LOGOUT);\nexport const logoutSuccess = createAction(AUTH_ACTIONS.LOGOUT_SUCCESS);\nexport const logoutFailure = createAction(AUTH_ACTIONS.LOGOUT_FAILURE, props<{ error: Error }>());\n","export enum LOADING_STATE {\n LOADING = 'loading',\n SUCCESS = 'success',\n NOT_STARTED = 'not_started',\n ERROR = 'error',\n}\n\nexport enum MESSAGES_LOADING_STATE {\n FETCH_MESSAGES_FROM_THREAD_SUCCESS = 'FETCH_MESSAGES_FROM_THREAD_SUCCESS',\n GET_RESPONSE_SUCCESS = 'GET_RESPONSE_SUCCESS',\n ERROR = 'ERROR',\n LOADING_FROM_THREAD = 'LOADING_FROM_THREAD',\n LOADING_RESPONSE = 'LOADING_RESPONSE',\n NOT_STARTED = 'NOT_STARTED',\n}\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { AuthReducerStateType } from './auth.reducer';\nimport { LOADING_STATE } from '../../enums/loading-state.enum';\n\nexport const selectAuthStore = createFeatureSelector<AuthReducerStateType>('authStore');\n\nexport const selectUsername = createSelector(\n selectAuthStore,\n (state: AuthReducerStateType) => state.username,\n);\n\nexport const selectIsAuthenticated = createSelector(\n selectAuthStore,\n (state: AuthReducerStateType) => state.isAuthenticated,\n);\n\nexport const selectAuthLoadingState = createSelector(\n selectAuthStore,\n (state: AuthReducerStateType) => state.loadingState,\n);\n\nexport const selectIsPendingAuthOperation = createSelector(\n selectAuthStore,\n (state: AuthReducerStateType) => state.loadingState.type === LOADING_STATE.LOADING,\n);\n","import { inject, Injectable, Signal } from '@angular/core';\nimport { Store } from '@ngrx/store';\n\nimport { login, logout } from './auth.actions';\nimport {\n selectAuthLoadingState,\n selectIsAuthenticated,\n selectIsPendingAuthOperation,\n selectUsername,\n} from './auth.selector';\nimport { LoadingType } from '../../types/loading.type';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthFacade {\n private readonly store: Store = inject(Store);\n\n private readonly _username: Signal<string | null> = this.store.selectSignal<string | null>(\n selectUsername,\n );\n public get username(): Signal<string | null> {\n return this._username;\n }\n\n private readonly _isAuthenticated: Signal<boolean> =\n this.store.selectSignal<boolean>(selectIsAuthenticated);\n public get isAuthenticated(): Signal<boolean> {\n return this._isAuthenticated;\n }\n\n private readonly _authLoadingState: Signal<LoadingType> =\n this.store.selectSignal<LoadingType>(selectAuthLoadingState);\n public get authLoadingState(): Signal<LoadingType> {\n return this._authLoadingState;\n }\n\n private readonly _isPendingAuthOperation: Signal<boolean> = this.store.selectSignal<boolean>(\n selectIsPendingAuthOperation,\n );\n public get isPendingAuthOperation(): Signal<boolean> {\n return this._isPendingAuthOperation;\n }\n\n public dispatchLogin(username: string, password: string): void {\n return this.store.dispatch(login({ username, password }));\n }\n\n public dispatchLogout(): void {\n return this.store.dispatch(logout());\n }\n}\n","export enum MESSAGE_ACTIONS {\n GET_RESPONSE = '[Message] Get Response',\n GET_RESPONSE_SUCCESS = '[Message] Get Response Success',\n GET_RESPONSE_FAILURE = '[Message] Get Response Failure',\n RELOAD_RESPONSE = '[Message] Reload Response',\n CLEAR_MESSAGES = '[Message] Clear Messages',\n FETCH_MESSAGES_FROM_THREAD = '[Message] Fetch Messages From Thread',\n FETCH_MESSAGES_FROM_THREAD_SUCCESS = '[Message] Fetch Messages From Thread Success',\n FETCH_MESSAGES_FROM_THREAD_FAILURE = '[Message] Fetch Messages From Thread Failure',\n ADD_USER_MESSAGE = '[Message] Add User Message',\n ADD_ASSISTANT_MESSAGE = '[Message] Add Assistant Message',\n ADD_TOOL_CALL = '[Message] Add Tool Call',\n ADD_TOOL_RESULT = '[Message] Add Tool Result',\n ABORT_RESPONSE_GENERATION = '[Message] Abort Response Generation',\n TOGGLE_TOOL_TRACE = '[Message] Toggle Tool Trace',\n TOGGLE_TOOL_MESSAGE = '[Message] Toggle Tool Message',\n}\n","import { IoIntelWeb } from '@interopio/intel-web';\nimport { createAction, props } from '@ngrx/store';\n\nimport { MESSAGE_ACTIONS } from './message.actions.enum';\nimport {\n GetResponseParams,\n ToolResult,\n UIAssistantMessage,\n UIResponseMessage,\n UIToolMessage,\n UIUserMessage,\n} from './types';\nimport { UIThread } from '../thread/types';\n\nexport const getResponse = createAction(\n MESSAGE_ACTIONS.GET_RESPONSE,\n props<{ params: GetResponseParams; isStream?: boolean; agent?: IoIntelWeb.Agents.Agent }>(),\n);\nexport const getResponseSuccess = createAction(MESSAGE_ACTIONS.GET_RESPONSE_SUCCESS);\nexport const getResponseFailure = createAction(\n MESSAGE_ACTIONS.GET_RESPONSE_FAILURE,\n props<{ error: Error }>(),\n);\n\nexport const reloadResponse = createAction(\n MESSAGE_ACTIONS.RELOAD_RESPONSE,\n props<{ params: GetResponseParams; isStream?: boolean; agent?: IoIntelWeb.Agents.Agent }>(),\n);\n\nexport const fetchMessagesFromThread = createAction(\n MESSAGE_ACTIONS.FETCH_MESSAGES_FROM_THREAD,\n props<{ thread: UIThread }>(),\n);\n\nexport const fetchMessagesFromThreadSuccess = createAction(\n MESSAGE_ACTIONS.FETCH_MESSAGES_FROM_THREAD_SUCCESS,\n props<{ messages: UIResponseMessage[] }>(),\n);\n\nexport const fetchMessagesFromThreadFailure = createAction(\n MESSAGE_ACTIONS.FETCH_MESSAGES_FROM_THREAD_FAILURE,\n props<{ error: Error }>(),\n);\n\nexport const addUserMessage = createAction(\n MESSAGE_ACTIONS.ADD_USER_MESSAGE,\n props<{ message: UIUserMessage }>(),\n);\n\nexport const addAssistantMessage = createAction(\n MESSAGE_ACTIONS.ADD_ASSISTANT_MESSAGE,\n props<{ message: UIAssistantMessage }>(),\n);\n\nexport const addToolCall = createAction(\n MESSAGE_ACTIONS.ADD_TOOL_CALL,\n props<{ message: UIToolMessage }>(),\n);\n\nexport const addToolResult = createAction(\n MESSAGE_ACTIONS.ADD_TOOL_RESULT,\n props<{ toolCallId: string; result: ToolResult }>(),\n);\n\nexport const abortResponseGeneration = createAction(MESSAGE_ACTIONS.ABORT_RESPONSE_GENERATION);\n\nexport const clearMessages = createAction(MESSAGE_ACTIONS.CLEAR_MESSAGES);\n\nexport const toggleToolTrace = createAction(\n MESSAGE_ACTIONS.TOGGLE_TOOL_TRACE,\n props<{ stateForMessageId: string }>(),\n);\n\nexport const toggleToolMessage = createAction(\n MESSAGE_ACTIONS.TOGGLE_TOOL_MESSAGE,\n props<{ toolMessageId: string; parentToolTraceId: string }>(),\n);\n","export type GetResponseParams = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n messages: UIMessage[] | any[];\n resourceId?: string;\n runId?: string;\n threadId?: string;\n runtimeContext?: Record<string, unknown>;\n instructions?: string;\n maxTokens?: number;\n temperature?: number;\n output?: unknown;\n // TODO: think if we need the others\n};\n\nexport enum UI_MESSAGE_PART_TYPES {\n TEXT = 'text',\n TOOL_INVOCATION = 'tool-invocation',\n STEP_START = 'step-start',\n}\n\nexport enum UI_MESSAGE_ROLES {\n USER = 'user',\n ASSISTANT = 'assistant',\n TOOL = 'tool',\n}\n\nexport enum TOOL_RESULT_TYPES {\n TEXT = 'text',\n IMAGE = 'image',\n AUDIO = 'audio',\n}\n\nexport type UIMessageType =\n | UI_MESSAGE_ROLES.USER\n | UI_MESSAGE_ROLES.ASSISTANT\n | UI_MESSAGE_ROLES.TOOL;\n\nexport type UIMessageBase = {\n id: string;\n role: UIMessageType;\n content?: string;\n displayFooter?: boolean;\n responseForUserQueryId?: string;\n};\n\nexport type UIUserMessage = UIMessageBase & {\n role: UI_MESSAGE_ROLES.USER;\n};\n\nexport type UIAssistantMessage = UIMessageBase & {\n role: UI_MESSAGE_ROLES.ASSISTANT;\n};\n\nexport type UIToolMessage = UIMessageBase & {\n toolName: string;\n role: UI_MESSAGE_ROLES.TOOL;\n args?: Record<string, unknown>;\n result?: ToolResult | [ToolResult];\n isExpanded?: boolean;\n};\n\nexport type ToolTextResult = {\n type: TOOL_RESULT_TYPES.TEXT;\n text: string;\n};\n\nexport type ToolImageResult = {\n type: TOOL_RESULT_TYPES.IMAGE;\n data: string; // base64-encoded image data\n mimeType: string; // TODO: more explicit mime type enum when we support multiple image types\n};\n\nexport type ToolAudioResult = {\n type: TOOL_RESULT_TYPES.AUDIO;\n data: string; // base64-encoded audio data\n mimeType: string; // TODO: more explicit mime type enum when we support audio\n};\n\nexport type ToolTraceState = {\n stateForMessageId: string;\n executedTools: UIToolMessage[];\n uiMessage: string;\n isExpanded?: boolean;\n};\n\nexport type ToolResult = ToolTextResult | ToolImageResult | ToolAudioResult;\n\nexport type UIResponseMessage = UIAssistantMessage | UIToolMessage | UIUserMessage;\n\nexport type UIMessage = UIUserMessage | UIResponseMessage;\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { MessageReducerStateType } from './message.reducer';\nimport { UI_MESSAGE_ROLES } from './types';\nimport { MESSAGES_LOADING_STATE } from '../../enums/loading-state.enum';\n\nexport const selectMessageStore = createFeatureSelector<MessageReducerStateType>('messageStore');\n\nexport const selectAllMessages = createSelector(\n selectMessageStore,\n (state: MessageReducerStateType) => state.messages,\n);\n\nexport const selectMessageLength = createSelector(\n selectMessageStore,\n (state: MessageReducerStateType) => state.messages.length,\n);\n\nexport const selectLastUserMessage = createSelector(\n selectMessageStore,\n (state: MessageReducerStateType) =>\n [...state.messages].reverse().find((message) => message.role === UI_MESSAGE_ROLES.USER),\n);\n\nexport const selectIsLastUserMessage = createSelector(\n selectMessageStore,\n (state: MessageReducerStateType) =>\n state.messages.length > 0 &&\n state.messages[state.messages.length - 1].role === UI_MESSAGE_ROLES.USER,\n);\n\nexport const selectIsGeneratingResponse = createSelector(\n selectMessageStore,\n (state: MessageReducerStateType) =>\n state.loadingState.type === MESSAGES_LOADING_STATE.LOADING_RESPONSE,\n);\n\nexport const selectIsLoadingMessagesFromThread = createSelector(\n selectMessageStore,\n (state: MessageReducerStateType) =>\n state.loadingState.type === MESSAGES_LOADING_STATE.LOADING_FROM_THREAD,\n);\n\n// covers both loading states - loading from thread and loading response\nexport const selectIsLoadingMessages = createSelector(\n selectMessageStore,\n (state: MessageReducerStateType) =>\n state.loadingState.type === MESSAGES_LOADING_STATE.LOADING_FROM_THREAD ||\n state.loadingState.type === MESSAGES_LOADING_STATE.LOADING_RESPONSE,\n);\n\nexport const selectIsFetchedFromThreadSuccess = createSelector(\n selectMessageStore,\n (state: MessageReducerStateType) =>\n state.loadingState.type === MESSAGES_LOADING_STATE.FETCH_MESSAGES_FROM_THREAD_SUCCESS,\n);\n\nexport const selectLoadingErrorMessage = createSelector(\n selectMessageStore,\n (state: MessageReducerStateType) =>\n state.loadingState.type === MESSAGES_LOADING_STATE.ERROR\n ? state.loadingState.message\n : undefined,\n);\n\nexport const selectToolTraceState = createSelector(\n selectMessageStore,\n (state: MessageReducerStateType) => state.toolTraceState,\n);\n","import { inject, Injectable, Signal } from '@angular/core';\nimport { IoIntelWeb } from '@interopio/intel-web';\nimport { Store } from '@ngrx/store';\n\nimport {\n abortResponseGeneration,\n clearMessages,\n fetchMessagesFromThread,\n getResponse,\n reloadResponse,\n toggleToolMessage,\n toggleToolTrace,\n} from './message.actions';\nimport {\n selectAllMessages,\n selectIsFetchedFromThreadSuccess,\n selectIsGeneratingResponse,\n selectIsLastUserMessage,\n selectIsLoadingMessages,\n selectIsLoadingMessagesFromThread,\n selectLastUserMessage,\n selectLoadingErrorMessage,\n selectMessageLength,\n selectToolTraceState,\n} from './message.selector';\nimport { GetResponseParams, ToolTraceState, UIMessage, UIUserMessage } from './types';\nimport { UIThread } from '../thread/types';\n\n@Injectable()\nexport class MessageFacade {\n private readonly _store: Store = inject(Store);\n\n private readonly _allMessages: Signal<UIMessage[]> =\n this._store.selectSignal<UIMessage[]>(selectAllMessages);\n public get allMessages(): Signal<UIMessage[]> {\n return this._allMessages;\n }\n\n private readonly _messageLength: Signal<number> =\n this._store.selectSignal<number>(selectMessageLength);\n public get messageLength(): Signal<number> {\n return this._messageLength;\n }\n\n private readonly _lastUserMessage: Signal<UIUserMessage | undefined> = this._store.selectSignal<\n UIUserMessage | undefined\n >(selectLastUserMessage);\n public get lastUserMessage(): Signal<UIUserMessage | undefined> {\n return this._lastUserMessage;\n }\n\n private readonly _isLastUserMessage: Signal<boolean> =\n this._store.selectSignal<boolean>(selectIsLastUserMessage);\n public get isLastUserMessage(): Signal<boolean> {\n return this._isLastUserMessage;\n }\n\n private readonly _isGeneratingResponse: Signal<boolean> = this._store.selectSignal<boolean>(\n selectIsGeneratingResponse,\n );\n public get isGeneratingResponse(): Signal<boolean> {\n return this._isGeneratingResponse;\n }\n\n private readonly _isLoadingMessagesFromThread: Signal<boolean> =\n this._store.selectSignal<boolean>(selectIsLoadingMessagesFromThread);\n public get isLoadingMessagesFromThread(): Signal<boolean> {\n return this._isLoadingMessagesFromThread;\n }\n\n private readonly _isLoadingMessages =\n this._store.selectSignal<boolean>(selectIsLoadingMessages);\n public get isLoadingMessages(): Signal<boolean> {\n return this._isLoadingMessages;\n }\n\n private readonly _isSuccessFetchedFromThread: Signal<boolean> =\n this._store.selectSignal<boolean>(selectIsFetchedFromThreadSuccess);\n public get isSuccessFetchedFromThread(): Signal<boolean> {\n return this._isSuccessFetchedFromThread;\n }\n\n private readonly _loadingErrorMessage: Signal<string | undefined> = this._store.selectSignal<\n string | undefined\n >(selectLoadingErrorMessage);\n\n public get loadingErrorMessage(): Signal<string | undefined> {\n return this._loadingErrorMessage;\n }\n\n private readonly _toolTraceState = this._store.selectSignal(selectToolTraceState);\n public get toolTraceState(): Signal<ToolTraceState[]> {\n return this._toolTraceState;\n }\n\n public getMessageById(id: string): UIMessage {\n const match: UIMessage | undefined = this._allMessages().find(\n (m: UIMessage) => m.id === id,\n );\n\n if (!match) throw new Error(`Unable to find matching message with id: ${id}`);\n\n return match;\n }\n\n public dispatchGetResponse(\n params: GetResponseParams,\n isStream?: boolean,\n agent?: IoIntelWeb.Agents.Agent,\n ): void {\n this._store.dispatch(getResponse({ params, isStream, agent }));\n }\n\n public dispatchReloadResponse(\n params: GetResponseParams,\n isStream?: boolean,\n agent?: IoIntelWeb.Agents.Agent,\n ): void {\n this._store.dispatch(reloadResponse({ params, isStream, agent }));\n }\n\n public dispatchClearMessages(): void {\n this._store.dispatch(clearMessages());\n }\n\n public dispatchFetchMessagesFromThread(thread: UIThread): void {\n this._store.dispatch(fetchMessagesFromThread({ thread }));\n }\n\n public dispatchAbortResponseGeneration(): void {\n this._store.dispatch(abortResponseGeneration());\n }\n\n public dispatchToggleToolTrace(stateForMessageId: string): void {\n this._store.dispatch(toggleToolTrace({ stateForMessageId }));\n }\n\n public dispatchToggleToolMessage(toolMessageId: string, parentToolTraceId: string): void {\n this._store.dispatch(toggleToolMessage({ toolMessageId, parentToolTraceId }));\n }\n}\n","export enum APP_SPINNER_COMPONENT_SIZE {\n SMALL = 'small',\n MEDIUM = 'medium',\n LARGE = 'large',\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, input, InputSignal } from '@angular/core';\n\nimport { APP_SPINNER_COMPONENT_SIZE } from './enum';\nimport { AppSpinnerComponentType } from './types';\n\n@Component({\n selector: 'app-spinner',\n imports: [CommonModule],\n templateUrl: './app-spinner.component.html',\n})\nexport class AppSpinnerComponent {\n protected readonly APP_SPINNER_COMPONENT_SIZE = APP_SPINNER_COMPONENT_SIZE;\n\n public size: InputSignal<AppSpinnerComponentType> = input<AppSpinnerComponentType>(\n APP_SPINNER_COMPONENT_SIZE.MEDIUM,\n );\n}\n","<div\n class=\"app-spinner\"\n [ngClass]=\"{\n 'flex items-center justify-center': true,\n }\"\n>\n <div\n class=\"app-spinner__circle\"\n [ngClass]=\"{\n 'rounded-full animate-spin border-t-proto-background-light border-proto-text-disabled': true,\n 'w-6 h-6 border-2': size() === APP_SPINNER_COMPONENT_SIZE.SMALL,\n 'w-12 h-12 border-4': size() === APP_SPINNER_COMPONENT_SIZE.MEDIUM,\n 'w-16 h-16 border-8': size() === APP_SPINNER_COMPONENT_SIZE.LARGE,\n }\"\n ></div>\n</div>\n","export enum THREAD_ACTIONS {\n FETCH_THREADS = '[Thread] Fetch Threads',\n FETCH_THREADS_SUCCESS = '[Thread] Fetch Threads Success',\n FETCH_THREADS_FAILURE = '[Thread] Fetch Threads Failure',\n RENAME_THREAD = '[Thread] Rename Thread',\n RENAME_THREAD_SUCCESS = '[Thread] Rename Thread Success',\n RENAME_THREAD_FAILURE = '[Thread] Rename Thread Failure',\n DELETE_THREAD = '[Thread] Delete Thread',\n DELETE_THREAD_SUCCESS = '[Thread] Delete Thread Success',\n DELETE_THREAD_FAILURE = '[Thread] Delete Thread Failure',\n CHANGE_ACTIVE_THREAD = '[Thread] Activate Thread',\n}\n","import { createAction, props } from '@ngrx/store';\n\nimport { THREAD_ACTIONS } from './thread.actions.enum';\nimport { UIThread } from './types';\n\nexport const fetchThreads = createAction(\n THREAD_ACTIONS.FETCH_THREADS,\n props<{ agentId: string }>(),\n);\n\nexport const fetchThreadsSuccess = createAction(\n THREAD_ACTIONS.FETCH_THREADS_SUCCESS,\n props<{ threads: UIThread[] }>(),\n);\n\nexport const fetchThreadsFailure = createAction(\n THREAD_ACTIONS.FETCH_THREADS_FAILURE,\n props<{ error: string }>(),\n);\n\nexport const renameThread = createAction(\n THREAD_ACTIONS.RENAME_THREAD,\n props<{ thread: UIThread; newTitle: string }>(),\n);\n\nexport const renameThreadSuccess = createAction(\n THREAD_ACTIONS.RENAME_THREAD_SUCCESS,\n props<{ id: string; newName: string }>(),\n);\n\nexport const renameThreadFailure = createAction(\n THREAD_ACTIONS.RENAME_THREAD_FAILURE,\n props<{ error: Error }>(),\n);\n\nexport const deleteThread = createAction(\n THREAD_ACTIONS.DELETE_THREAD,\n props<{ thread: UIThread }>(),\n);\n\nexport const deleteThreadSuccess = createAction(\n THREAD_ACTIONS.DELETE_THREAD_SUCCESS,\n props<{ id: string }>(),\n);\n\nexport const deleteThreadFailure = createAction(\n THREAD_ACTIONS.DELETE_THREAD_FAILURE,\n props<{ error: Error }>(),\n);\n\nexport const changeActiveThread = createAction(\n THREAD_ACTIONS.CHANGE_ACTIVE_THREAD,\n props<{ threadId: string | null }>(),\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { ThreadReducerStateType } from './thread.reducer';\nimport { LOADING_STATE } from '../../enums/loading-state.enum';\n\nexport const selectThreadsStore = createFeatureSelector<ThreadReducerStateType>('threadsStore');\n\nexport const selectAllThreads = createSelector(\n selectThreadsStore,\n (state: ThreadReducerStateType) => state.threads,\n);\n\nexport const selectThreadLength = createSelector(\n selectThreadsStore,\n (state: ThreadReducerStateType) => state.threads.length,\n);\n\nexport const selectThreadLoadingState = createSelector(\n selectThreadsStore,\n (state: ThreadReducerStateType) => state.loadingState,\n);\n\nexport const selectIsFetchingThreads = createSelector(\n selectThreadsStore,\n (state: ThreadReducerStateType) => state.loadingState.type === LOADING_STATE.LOADING,\n);\n\nexport const selectActiveThreadId = createSelector(\n selectThreadsStore,\n (state: ThreadReducerStateType) => state.activeThreadId,\n);\n\nexport const selectActiveThread = createSelector(\n selectThreadsStore,\n (state: ThreadReducerStateType) =>\n state.threads.find((thread) => thread.id === state.activeThreadId) || null,\n);\n","import { inject, Injectable, Signal } from '@angular/core';\nimport { Store } from '@ngrx/store';\n\nimport { changeActiveThread, deleteThread, fetchThreads, renameThread } from './thread.actions';\nimport {\n selectActiveThread,\n selectActiveThreadId,\n selectAllThreads,\n selectIsFetchingThreads,\n selectThreadLength,\n selectThreadLoadingState,\n} from './thread.selector';\nimport { UIThread } from './types';\nimport { LoadingType } from '../../types/loading.type';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ThreadFacade {\n private readonly _store: Store = inject(Store);\n\n private readonly _allThreads: Signal<UIThread[]> =\n this._store.selectSignal<UIThread[]>(selectAllThreads);\n public get allThreads(): Signal<UIThread[]> {\n return this._allThreads;\n }\n\n private readonly _threadLength: Signal<number> =\n this._store.selectSignal<number>(selectThreadLength);\n public get threadLength(): Signal<number> {\n return this._threadLength;\n }\n\n private readonly _threadLoadingState: Signal<LoadingType> =\n this._store.selectSignal<LoadingType>(selectThreadLoadingState);\n public get threadLoadingState(): Signal<LoadingType> {\n return this._threadLoadingState;\n }\n\n private readonly _isFetchingThreads: Signal<boolean> =\n this._store.selectSignal<boolean>(selectIsFetchingThreads);\n public get isFetchingThreads(): Signal<boolean> {\n return this._isFetchingThreads;\n }\n\n private readonly _activeThreadId: Signal<string | null> = this._store.selectSignal<\n string | null\n >(selectActiveThreadId);\n public get activeThreadId(): Signal<string | null> {\n return this._activeThreadId;\n }\n\n private readonly _activeThread: Signal<UIThread | null> =\n this._store.selectSignal<UIThread | null>(selectActiveThread);\n public get activeThread(): Signal<UIThread | null> {\n return this._activeThread;\n }\n\n public dispatchFetchThreads(agentId: string): void {\n this._store.dispatch(fetchThreads({ agentId }));\n }\n\n public dispatchRenameThread(thread: UIThread, newTitle: string): void {\n this._store.dispatch(renameThread({ thread, newTitle }));\n }\n\n public dispatchDeleteThread(thread: UIThread): void {\n this._store.dispatch(deleteThread({ thread }));\n }\n\n public dispatchChangeActiveThread(threadId: string | null): void {\n this._store.dispatch(changeActiveThread({ threadId }));\n }\n}\n","export enum WORKING_CONTEXT_ACTIONS {\n GET_WORKING_CONTEXT = '[Working Context] Get Working Context',\n GET_WORKING_CONTEXT_SUCCESS = '[Working Context] Get Working Context Success',\n GET_WORKING_CONTEXT_FAILURE = '[Working Context] Get Working Context Failure',\n UPDATE_WORKING_CONTEXT = '[Working Context] Update Working Context',\n FETCH_IS_WORKING_CONTEXT_ENABLED = '[Working Context] Is Working Context Enabled',\n FETCH_IS_WORKING_CONTEXT_ENABLED_SUCCESS = '[Working Context] Is Working Context Enabled Success',\n FETCH_IS_WORKING_CONTEXT_ENABLED_FAILURE = '[Working Context] Is Working Context Enabled Failure',\n}\n","import { IoIntelWorkingContext } from '@interopio/working-context';\nimport { createAction, props } from '@ngrx/store';\n\nimport { WORKING_CONTEXT_ACTIONS } from './working-context.actions.enum';\n\nexport const getWorkingContext = createAction(WORKING_CONTEXT_ACTIONS.GET_WORKING_CONTEXT);\nexport const getWorkingContextSuccess = createAction(\n WORKING_CONTEXT_ACTIONS.GET_WORKING_CONTEXT_SUCCESS,\n props<{ workingContext: Record<string, IoIntelWorkingContext.Property> }>(),\n);\nexport const getWorkingContextFailure = createAction(\n WORKING_CONTEXT_ACTIONS.GET_WORKING_CONTEXT_FAILURE,\n props<{ error: Error }>(),\n);\n\nexport const updateWorkingContext = createAction(\n WORKING_CONTEXT_ACTIONS.UPDATE_WORKING_CONTEXT,\n props<{ workingContext: Record<string, IoIntelWorkingContext.Property> }>(),\n);\n\nexport const fetchIsWorkingContextEnabled = createAction(\n WORKING_CONTEXT_ACTIONS.FETCH_IS_WORKING_CONTEXT_ENABLED,\n);\nexport const fetchIsWorkingContextEnabledSuccess = createAction(\n WORKING_CONTEXT_ACTIONS.FETCH_IS_WORKING_CONTEXT_ENABLED_SUCCESS,\n props<{ isEnabled: boolean }>(),\n);\nexport const fetchIsWorkingContextEnabledFailure = createAction(\n WORKING_CONTEXT_ACTIONS.FETCH_IS_WORKING_CONTEXT_ENABLED_FAILURE,\n props<{ error: Error }>(),\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { WorkingContextReducerStateType } from './working-context.reducer';\n\nexport const selectWorkingContextStore =\n createFeatureSelector<WorkingContextReducerStateType>('workingContextStore');\n\nexport const selectWorkingContext = createSelector(\n selectWorkingContextStore,\n (state: WorkingContextReducerStateType) => state.workingContext,\n);\n\nexport const isWorkingContextEnabled = createSelector(\n selectWorkingContextStore,\n (state: WorkingContextReducerStateType) => state.isEnabled,\n);\n","import { inject, Injectable, Signal } from '@angular/core';\nimport { IoIntelWorkingContext } from '@interopio/working-context';\nimport { Store } from '@ngrx/store';\n\nimport {\n fetchIsWorkingContextEnabled,\n getWorkingContext,\n updateWorkingContext,\n} from './working-context.actions';\nimport { isWorkingContextEnabled, selectWorkingContext } from './working-context.selector';\n\n@Injectable()\nexport class WorkingContextFacade {\n private readonly _store: Store = inject(Store);\n\n private readonly _workingContext: Signal<Record<string, IoIntelWorkingContext.Property>> =\n this._store.selectSignal<Record<string, IoIntelWorkingContext.Property>>(\n selectWorkingContext,\n );\n public get workingContext(): Signal<Record<string, IoIntelWorkingContext.Property>> {\n return this._workingContext;\n }\n\n private readonly _isWorkingContextEnabled: Signal<boolean> =\n this._store.selectSignal<boolean>(isWorkingContextEnabled);\n public get isWorkingContextEnabled(): Signal<boolean> {\n return this._isWorkingContextEnabled;\n }\n\n public dispatchGetWorkingContext(): void {\n this._store.dispatch(getWorkingContext());\n }\n\n public dispatchUpdateWorkingContext(\n workingContext: Record<string, IoIntelWorkingContext.Property>,\n ): void {\n this._store.dispatch(updateWorkingContext({ workingContext }));\n }\n\n public dispatchFetchIsWorkingContextEnabled(): void {\n this._store.dispatch(fetchIsWorkingContextEnabled());\n }\n}\n","import { Component, input, InputSignal } from '@angular/core';\nimport { HeadingComponent, PrismComponent, RemarkModule } from 'ngx-remark';\nimport remarkGfm from 'remark-gfm';\nimport remarkParse from 'remark-parse';\nimport { unified } from 'unified';\n\nconst MODULES = [RemarkModule];\nconst COMPONENTS = [PrismComponent, HeadingComponent];\n\n@Component({\n selector: 'app-md-formatter',\n templateUrl: './app-md-formatter.component.html',\n styleUrls: ['./app-md-formatter.component.css'],\n imports: [...MODULES, ...COMPONENTS],\n})\nexport class AppMdFormatterComponent {\n protected readonly processor = unified().use(remarkGfm).use(remarkParse);\n\n public readonly content: InputSignal<string> = input.required<string>();\n}\n","<remark class=\"remark\" [processor]=\"processor\" [markdown]=\"content()\">\n <!-- Handles Code Blocks Rendering -->\n <remark-prism\n *remarkTemplate=\"'code'; let node\"\n class=\"io-assist-code-theme\"\n [code]=\"node.value\"\n [language]=\"node.lang\"\n />\n\n <!-- Custom Links Rendering -->\n <span *remarkTemplate=\"'link'; let node\">\n <a\n style=\"color: var(--app-accent-color-1)\"\n [href]=\"node?.url\"\n [title]=\"node.title ?? ''\"\n [remarkNode]=\"node\"\n >\n </a>\n </span>\n\n <!-- Handles Heading Rendering -->\n <remark-heading *remarkTemplate=\"'heading'; let node\" [node]=\"node\"></remark-heading>\n</remark>\n","export const textToJSONMarkdown = (content: unknown): string => {\n return '```json\\n' + JSON.stringify(content, null, 2) + '\\n```';\n};\n","import { DestroyRef, inject, Injectable } from '@angular/core';\nimport { UnsubscribeFunction } from 'callback-registry';\n\ntype NamedSubscription = {\n name: string;\n fn: UnsubscribeFunction;\n};\n\n/**\n * Service to manage and clean up functions that require unsubscribing.\n *\n * Service is not provided in root to allow for scoped usage.\n * This means that the service lifecycle will be the same as the component or module that provides it which\n * means that once the component is destroyed the subscriptions will be cleaned up automatically.\n *\n * Usage:\n * 1. Inject the service in your component or module.\n * 2. Use the `add` method to register subscriptions with a unique name and their corresponding unsubscribe function.\n * 3. When the component or module is destroyed, all registered subscriptions will be automatically cleaned up.\n * 4. Additional manual cleanup by name can be performed using the `manualUnsubscribe` method.\n *\n */\n@Injectable()\nexport class SubscriptionCleanupService {\n private _subscriptions: Map<string, NamedSubscription> = new Map<string, NamedSubscription>();\n private readonly _destroyRef: DestroyRef = inject(DestroyRef);\n\n constructor() {\n this._destroyRef.onDestroy(() => {\n this.handleDestroy();\n });\n }\n\n public add(name: string, func: UnsubscribeFunction): void {\n if (!func) return;\n\n if (!name || name.trim() === '') {\n console.warn('Subscription name is required.');\n\n return;\n }\n\n if (this._subscriptions.has(name)) {\n console.warn(\n `Subscription with name \"${name}\" already exists. Unsubscribing and overwriting.`,\n );\n\n this.manualUnsubscribe(name);\n }\n\n this._subscriptions.set(name, { name, fn: func });\n }\n\n public manualUnsubscribe(name: string): void {\n const subscription: NamedSubscription | undefined = this._subscriptions.get(name);\n\n if (!subscription) return;\n\n try {\n // Calling the unsubscribe function\n subscription.fn();\n } catch (error) {\n console.error(`Error during subscription ${name} cleanup:`, error);\n }\n\n this._subscriptions.delete(name);\n }\n\n public handleDestroy(): void {\n const successfulUnsubscribes: string[] = [];\n const failedUnsubscribes: string[] = [];\n\n for (const [name, { fn }] of this._subscriptions) {\n try {\n fn();\n\n successfulUnsubscribes.push(name);\n } catch (error) {\n console.error(`Error during subscription ${name} cleanup:`, error);\n\n failedUnsubscribes.push(name);\n }\n }\n\n this._subscriptions.clear();\n\n console.info(`Successfully unsubscribed from [${successfulUnsubscribes.join(', ')}]`);\n\n if (failedUnsubscribes.length > 0) {\n console.warn(\n `Failed to unsubscribe from subscriptions: [${failedUnsubscribes.join(', ')}]`,\n );\n }\n }\n}\n","import { IoIntelWeb } from '@interopio/intel-web';\nimport { IoIntelWorkingContextFactory } from '@interopio/working-context';\n\nexport const contextConfig: IoIntelWeb.WorkingContextConfig = {\n factory: IoIntelWorkingContextFactory,\n config: {\n schema: {\n clientNames: {\n type: 'string',\n description:\n 'Names of client that is being worked on at the moment. Fetched from the workspace context',\n source: {\n context: {\n location: {\n workspace: {\n target: 'hybrid',\n },\n },\n path: 'client.names',\n },\n },\n },\n instrument: {\n type: 'string',\n description:\n 'The name of the instrument within the portfolio of the working context client that is being worked on at the moment. Fetched from the workspace context',\n source: {\n context: {\n location: {\n workspace: {\n target: 'hybrid',\n },\n },\n path: 'instrument.name',\n },\n },\n },\n clientNamesChannel: {\n type: 'string',\n description:\n 'Names of client that is being worked on at the moment taken from the channel context. Fetched from the channel context -> this has lower priority than workspace context',\n source: {\n context: {\n location: {\n channel: {\n target: 'my',\n },\n },\n path: 'client.names',\n },\n },\n },\n instrumentChannel: {\n type: 'string',\n description:\n 'The name of the instrument within the portfolio of the working context client that is being worked on at the moment taken from the channel context. Fetched from the channel context -> this has lower priority than workspace context',\n source: {\n context: {\n location: {\n channel: {\n target: 'my',\n },\n },\n path: 'instrument.name',\n },\n },\n },\n },\n },\n};\n","export enum ELICITATION_ACTION {\n ACCEPT = 'accept',\n DECLINE = 'decline',\n CANCEL = 'cancel',\n}\n","import { IoIntelWeb } from '@interopio/intel-web';\n\nexport const validateElicitationRequest = (\n request: IoIntelWeb.ElicitationRequestParams,\n): boolean => {\n // Basic meta tags validation of the elicitation request\n if (!isElicitRequestForIOToolResult(request._meta)) {\n return false;\n }\n\n // Other validations can be added here as needed\n // if (...) {\n // return false;\n // }\n\n return true;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst isElicitRequestForIOToolResult = (_meta: Record<string, any> | undefined): boolean => {\n if (!_meta || !_meta['toolName']) {\n console.warn('Elicitation request is missing required _meta.toolName field.');\n\n return false;\n }\n\n const toolName: string = _meta['toolName'];\n\n if (typeof toolName !== 'string' || toolName.trim().length === 0) {\n console.warn('Elicitation request has invalid _meta.toolName field.');\n\n return false;\n }\n\n if (!toolName.startsWith('io_connect')) {\n console.warn('Elicitation request is not intended for io_connect.');\n\n return false;\n }\n\n return true;\n};\n","import { inject, Injectable } from '@angular/core';\nimport { IoIntelWeb } from '@interopio/intel-web';\nimport { IOConnectModals } from '@interopio/modals-api';\n\nimport { ELICITATION_ACTION } from './enums';\nimport { validateElicitationRequest } from './utils';\nimport { UI_STRINGS } from '../../../constants/ui-strings';\nimport { IOConnectService } from '../../io/io.service';\n\n/**\n * Service responsible for handling elicitation requests from the IoIntelWeb API.\n *\n * Instructions to keep in mind when developing on how elicitation is handled in IO Assist:\n *\n * - When an elicitation request is received, it is first validated using `validateElicitationRequest`.\n * - An elicitation request is considered valid based on set of checks - currently, it checks if the request is intended for io-tool.\n * - If the request is VALID, a modal dialog is presented to the user asking for their approval to proceed with the elicitation.\n * - The user has three options in the modal dialog:\n * - ACCEPT: The user agrees to provide the requested information.\n * - We are currently using dummy data for the elicited information. In the future, this should be replaced with actual user input handling\n * TODO: Future Task - Replace dummy data with actual user input handling - https://interopio.atlassian.net/browse/IOINTEL-160\n * - DECLINE: The user refuses to provide the requested information. A rejection response is sent back.\n * - CANCEL: The user cancels the elicitation request. A cancel response is sent back.\n * - If the request is INVALID or if any error occurs during the process, the request is automatically canceled.\n *\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ElicitationService {\n private readonly UI_STRINGS = UI_STRINGS.ELICITATION_MODAL;\n private readonly _ioConnectService: IOConnectService = inject(IOConnectService);\n\n public async handleElicitationRequest(\n serverName: string,\n request: IoIntelWeb.ElicitationRequestParams,\n ): Promise<IoIntelWeb.ElicitationResponse> {\n const isRequestValid: boolean = validateElicitationRequest(request);\n\n if (!isRequestValid) {\n // TODO: Temporary cancel all invalid requests - in the future, we might want to handle this differently\n return this.cancelResponse('Elicitation request validation failed.');\n }\n\n try {\n return await this.getElicitationModalResponse(serverName, request);\n } catch (error) {\n const errorMessage =\n 'Error occurred while getting elicitation modal response. Request canceled. ' +\n (error instanceof Error ? error.message : String(error));\n\n return this.cancelResponse(errorMessage);\n }\n }\n\n private async getElicitationModalResponse(\n serverName: string,\n request: IoIntelWeb.ElicitationRequestParams,\n ): Promise<IoIntelWeb.ElicitationResponse> {\n console.info(\n 'Showing elicitation request from server:',\n serverName,\n 'requesting:',\n request,\n );\n\n const dialogOptions: IOConnectModals.DialogRequestConfig = {\n templateName: 'noInputsConfirmationDialog',\n variables: {\n title: this.UI_STRINGS.TITLE,\n heading: this.UI_STRINGS.HEADING,\n text: request.message ?? this.UI_STRINGS.FALLBACK_TEXT,\n actionButtons: [\n { variant: 'primary', text: 'Accept', id: ELICITATION_ACTION.ACCEPT },\n { variant: 'outline', text: 'Decline', id: ELICITATION_ACTION.DECLINE },\n { variant: 'outline', text: 'Cancel', id: ELICITATION_ACTION.CANCEL },\n ],\n },\n };\n\n const elicitationDialogResponse: IOConnectModals.DialogResponse =\n await this._ioConnectService.requestModalDialog(dialogOptions);\n\n if (!elicitationDialogResponse || !elicitationDialogResponse.responseButtonClicked) {\n throw new Error('No response from elicitation modal dialog.');\n }\n\n switch (elicitationDialogResponse.responseButtonClicked.id) {\n case ELICITATION_ACTION.ACCEPT:\n return this.acceptResponse();\n case ELICITATION_ACTION.DECLINE:\n return this.declineResponse();\n case ELICITATION_ACTION.CANCEL:\n return this.cancelResponse();\n default:\n // At this point probably a timeout has occurred\n return this.cancelResponse('Elicitation dialog was closed without a response.');\n }\n }\n\n // TODO: Future Task - Replace dummy data with actual user input handling\n private acceptResponse(logMessage?: string): IoIntelWeb.ElicitationConfirmationResponse {\n console.info(logMessage ?? 'User accepted the elicitation request.');\n\n return {\n action: ELICITATION_ACTION.ACCEPT,\n // Our internal io_connect tools do not expect any content back and we do not support external elicitation requests yet\n content: {},\n };\n }\n\n private declineResponse(logMessage?: string): IoIntelWeb.ElicitationRejectionResponse {\n console.info(logMessage ?? 'User declined the elicitation request.');\n\n return {\n action: ELICITATION_ACTION.DECLINE,\n };\n }\n\n private cancelResponse(logMessage?: string): IoIntelWeb.ElicitationCancelResponse {\n console.info(logMessage ?? 'User canceled the elicitation request.');\n\n return {\n action: ELICITATION_ACTION.CANCEL,\n };\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */ // TODO: Remove this line after fixing any 'any' types\nimport { of, Observable } from 'rxjs';\n\nimport {\n getResponseFailure,\n addAssistantMessage,\n addToolCall,\n addToolResult,\n getResponseSuccess,\n} from './message.actions';\nimport { MessageReducerStateType } from './message.reducer';\nimport { ToolResult, ToolTraceState, UI_MESSAGE_ROLES, UIMessage, UIToolMessage } from './types';\n\nexport const handleResponseStream = (responseStream: any): Observable<any> => {\n if (!responseStream || typeof responseStream.processDataStream !== 'function') {\n console.error(\n 'Invalid response object received in getResponseSuccess effect:',\n responseStream,\n );\n return of(\n getResponseFailure({\n error: new Error('Invalid response object'),\n }),\n );\n }\n\n let streamedContent = '';\n let assistantMsgResponseId = crypto.randomUUID();\n\n // Helper to reset both streamedContent and assistantMsgResponseId\n const resetStreamedContentAndId = () => {\n streamedContent = '';\n assistantMsgResponseId = crypto.randomUUID();\n };\n\n return new Observable<any>((observer) => {\n responseStream.processDataStream({\n onTextPart: (text: any) => {\n streamedContent += text;\n\n observer.next(\n addAssistantMessage({\n message: {\n id: assistantMsgResponseId,\n role: UI_MESSAGE_ROLES.ASSISTANT,\n content: streamedContent,\n },\n }),\n );\n },\n onToolCallPart: (toolCall: any) => {\n resetStreamedContentAndId();\n\n observer.next(\n addToolCall({\n message: {\n id: toolCall.toolCallId,\n toolName: toolCall.toolName,\n args: toolCall.args,\n role: UI_MESSAGE_ROLES.TOOL,\n },\n }),\n );\n },\n onToolResultPart: (toolResult: any) => {\n observer.next(\n addToolResult({\n toolCallId: toolResult.toolCallId,\n result: toolResult.result,\n }),\n );\n },\n onErrorPart: (error: any) => {\n observer.next(getResponseFailure({ error }));\n observer.complete();\n },\n onFinishStepPart: (_unusedPart: any) => {\n resetStreamedContentAndId();\n },\n onFinishMessagePart: (part: any) => {\n resetStreamedContentAndId();\n\n if (!part || part.finishReason !== 'stop') return;\n\n observer.next(getResponseSuccess());\n },\n });\n });\n};\n\n/**\n * Utility function to construct message state when messages come in bulk.\n * Usually when fetching messages from a thread.\n *\n * @param messages - Array of UIMessage to update fields for\n * @param shouldSetDisplayFooter - Whether to set the displayFooter field\n * @param shouldSetResponseForUserQueryId - Whether to set the responseForUserQueryId field\n *\n * @returns Updated array of UIMessage\n */\nexport const updateMessageFields = (\n messages: UIMessage[],\n shouldSetDisplayFooter: boolean,\n shouldSetResponseForUserQueryId?: boolean,\n): UIMessage[] => {\n let lastUserMessageId: string | undefined = undefined;\n\n return messages.map((msg: UIMessage, msgIndex: number) => {\n if (msg.role === UI_MESSAGE_ROLES.USER) {\n lastUserMessageId = msg.id;\n }\n\n const nextMessage: UIMessage | undefined = messages[msgIndex + 1];\n\n const isLastMessage: boolean = msgIndex === messages.length - 1;\n const isNextMessageUser: boolean =\n !!nextMessage && nextMessage.role === UI_MESSAGE_ROLES.USER;\n\n return {\n ...msg,\n displayFooter: shouldSetDisplayFooter\n ? isLastMessage || isNextMessageUser\n : msg.displayFooter,\n responseForUserQueryId: shouldSetResponseForUserQueryId\n ? lastUserMessageId\n : msg.responseForUserQueryId,\n // Add other fields to update as needed\n };\n });\n};\n\n/**\n * Function to get the response text for a given user message ID.\n *\n * A response is considered all messages that the user message has triggered,\n * including assistant messages and tool messages until another user message is found.\n *\n * @param userQueryId - ID of the user message to get the response for\n * @returns response text corresponding to the user message ID\n */\nexport const responseToText = (messages: UIMessage[], userQueryId: string): string => {\n const stringResponse = messages\n .filter(\n (message) =>\n message.role !== UI_MESSAGE_ROLES.USER &&\n message.responseForUserQueryId === userQueryId,\n )\n .map((message) => {\n switch (message.role) {\n case UI_MESSAGE_ROLES.ASSISTANT:\n return message.content || '';\n case UI_MESSAGE_ROLES.TOOL:\n return `Tool (${message.toolName}) input: ${JSON.stringify(message.args || '')} result: ${JSON.stringify(message.result || '')}`;\n default:\n return '';\n }\n })\n .join('\\n');\n\n return stringResponse;\n};\n\n/**\n * Function to add a tool trace call entry to the tool trace state array.\n *\n * @param state - Current MessageReducerStateType\n * @param currentTool - The tool message to add\n *\n * @returns Updated array of ToolTraceState\n */\nexport const addToolTraceCallEntry = (\n state: MessageReducerStateType,\n currentTool: UIToolMessage,\n): ToolTraceState[] => {\n const messages: UIMessage[] = state.messages;\n const toolTraceState: ToolTraceState[] = state.toolTraceState;\n\n // Find the last message that is not a tool message so we can link the tool trace to it\n const reversedMessages: UIMessage[] = messages.slice().reverse();\n const lastMessage = reversedMessages.find(\n (msg: UIMessage) => msg.role !== UI_MESSAGE_ROLES.TOOL,\n );\n\n if (!lastMessage) {\n // Normally we always have at least one non-tool message (the user message that triggered the tool calls)\n return toolTraceState;\n }\n\n const existingToolTraceIndex = state.toolTraceState.findIndex(\n (state: ToolTraceState) => state.stateForMessageId === lastMessage?.id,\n );\n\n if (existingToolTraceIndex !== -1) {\n return state.toolTraceState.map((state, index) => {\n const shouldUpdateExisting: boolean = index === existingToolTraceIndex;\n\n if (shouldUpdateExisting) {\n return {\n ...state,\n executedTools: [...state.executedTools, currentTool],\n uiMessage: `Called tool: ${currentTool.toolName}`,\n };\n }\n\n return state;\n });\n }\n\n return toolTraceState.concat({\n stateForMessageId: lastMessage ? lastMessage.id : '',\n executedTools: [currentTool],\n uiMessage: `Called tool: ${currentTool.toolName}`,\n });\n};\n\n/**\n * Function to add a tool result to its corresponding tool call in the tool trace state array.\n *\n * @param state - Current array of ToolTraceState\n * @param toolCallId - ID of the tool call message\n * @param result - Result of the tool call\n *\n * @returns Updated array of ToolTraceState\n */\nexport const addToolTraceResultEntry = (\n state: ToolTraceState[],\n toolCallId: string,\n result: ToolResult,\n): ToolTraceState[] => {\n return state.map((traceState: ToolTraceState) => {\n const executedTools: UIToolMessage[] = traceState.executedTools;\n\n const matchingToolCall: UIToolMessage | undefined = executedTools.find(\n (toolMsg: UIToolMessage) => toolMsg.id === toolCallId,\n );\n\n if (!matchingToolCall) {\n return traceState;\n }\n\n const updatedToolCall = {\n ...matchingToolCall,\n result,\n };\n\n return {\n ...traceState,\n executedTools: executedTools.map((toolMsg: UIToolMessage) =>\n toolMsg.id === toolCallId ? updatedToolCall : toolMsg,\n ),\n };\n });\n};\n\n/***\n * Function to update the last tool trace entry in the tool trace state array.\n *\n * @param state - Current array of ToolTraceState\n * @param isError - Whether the update is due to an error\n * @param isAborted - Whether the update is due to an abortion\n *\n * @returns Updated array of ToolTraceState\n */\nexport const updateLastToolTraceEntry = (\n state: ToolTraceState[],\n isError?: boolean,\n isAborted?: boolean,\n) => {\n const lastToolTraceState: ToolTraceState | undefined =\n state.length > 0 ? state[state.length - 1] : undefined;\n\n if (!lastToolTraceState) {\n return state;\n }\n\n return state.map((traceState: ToolTraceState) => {\n const usedToolsCount: number = lastToolTraceState.executedTools.length;\n const usedTools: boolean = usedToolsCount > 0;\n const isUpdatingCurrentTraceState: boolean =\n traceState.stateForMessageId === lastToolTraceState.stateForMessageId;\n\n if (!isUpdatingCurrentTraceState) {\n return traceState;\n }\n\n if (isError) {\n return {\n ...traceState,\n uiMessage: 'Tool tracing was interrupted due to error',\n };\n }\n\n if (isAborted) {\n return {\n ...traceState,\n uiMessage: usedTools\n ? `User aborted after using ${usedToolsCount} ${\n usedToolsCount === 1 ? 'tool' : 'tools'\n }`\n : 'User aborted before using any tools',\n };\n }\n\n return {\n ...traceState,\n uiMessage: usedTools\n ? `Used ${usedToolsCount} ${usedToolsCount === 1 ? 'tool' : 'tools'}`\n : '',\n };\n });\n};\n\nexport const handleToolTraceStateOnThreadFetch = (\n fetchedMessages: UIMessage[],\n): ToolTraceState[] => {\n const toolTraceStates: ToolTraceState[] = [];\n\n let traceState: ToolTraceState | null = null;\n let validTraceId: string | null = null;\n\n for (const msg of fetchedMessages) {\n const isUserOrAssistant =\n msg.role === UI_MESSAGE_ROLES.USER || msg.role === UI_MESSAGE_ROLES.ASSISTANT;\n\n if (isUserOrAssistant && traceState) {\n traceState.uiMessage = `Used ${traceState.executedTools.length} ${\n traceState.executedTools.length === 1 ? 'tool' : 'tools'\n }`;\n\n toolTraceStates.push(traceState);\n traceState = null;\n }\n\n if (isUserOrAssistant && !traceState) {\n validTraceId = msg.id;\n\n continue;\n }\n\n if (msg.role === UI_MESSAGE_ROLES.TOOL) {\n const executedTools: UIToolMessage[] =\n traceState && Array.isArray(traceState.executedTools)\n ? [...traceState.executedTools, msg as UIToolMessage]\n : [msg as UIToolMessage];\n\n traceState = {\n stateForMessageId: validTraceId || msg.responseForUserQueryId || msg.id,\n executedTools,\n uiMessage: '',\n };\n }\n }\n\n return toolTraceStates;\n};\n\n// TODO: This is a temporary skip logic due to missing metadata.\n// Skip logic is currently needed when sampling requests are rendered in the UI\n// but they should not be visible to the end user.\nexport const SKIP_UI_ID_PREFIX = 'SKIP_UI_';\n\nexport const generateSkipUiId = (): string => {\n return SKIP_UI_ID_PREFIX + crypto.randomUUID();\n};\n\nexport const shouldSkipUiDisplay = (msg: UIMessage): boolean => {\n return msg.id.startsWith(SKIP_UI_ID_PREFIX);\n};\n","export enum AGENT_ACTIONS {\n LIST_AVAILABLE_AGENTS = '[Agent] List Available Agents',\n LIST_AVAILABLE_AGENTS_SUCCESS = '[Agent] List Available Agents Success',\n LIST_AVAILABLE_AGENTS_FAILURE = '[Agent] List Available Agents Failure',\n SET_SELECTED_AGENT = '[Agent] Set Selected Agent',\n}\n","import { IoIntelWeb } from '@interopio/intel-web';\nimport { createAction, props } from '@ngrx/store';\n\nimport { AGENT_ACTIONS } from './agent.actions.enum';\n\nexport const listAvailableAgents = createAction(AGENT_ACTIONS.LIST_AVAILABLE_AGENTS);\nexport const listAvailableAgentsSuccess = createAction(\n AGENT_ACTIONS.LIST_AVAILABLE_AGENTS_SUCCESS,\n props<{ agents: IoIntelWeb.Agents.Agent[] }>(),\n);\nexport const listAvailableAgentsFailure = createAction(\n AGENT_ACTIONS.LIST_AVAILABLE_AGENTS_FAILURE,\n props<{ error: Error }>(),\n);\nexport const selectAgent = createAction(\n AGENT_ACTIONS.SET_SELECTED_AGENT,\n props<{ agentId: string }>(),\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { AgentReducerStateType } from './agent.reducer';\nimport { LOADING_STATE } from '../../enums/loading-state.enum';\n\nexport const selectAgentStore = createFeatureSelector<AgentReducerStateType>('agentStore');\n\nexport const selectAvailableAgents = createSelector(\n selectAgentStore,\n (state: AgentReducerStateType) => state.availableAgents,\n);\nexport const selectSelectedAgent = createSelector(\n selectAgentStore,\n (state: AgentReducerStateType) => state.selectedAgent,\n);\nexport const selectIsLoadingAgents = createSelector(\n selectAgentStore,\n (state: AgentReducerStateType) => state.loadingState.type === LOADING_STATE.LOADING,\n);\n","import { inject, Injectable, Signal } from '@angular/core';\nimport { IoIntelWeb } from '@interopio/intel-web';\nimport { Store } from '@ngrx/store';\n\nimport { listAvailableAgents } from './agent.actions';\nimport { selectAvailableAgents, selectSelectedAgent } from './agent.selector';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AgentFacade {\n private readonly _store: Store = inject(Store);\n\n private readonly _availableAgents: Signal<IoIntelWeb.Agents.Agent[]> =\n this._store.selectSignal<IoIntelWeb.Agents.Agent[]>(selectAvailableAgents);\n public get availableAgents(): Signal<IoIntelWeb.Agents.Agent[]> {\n return this._availableAgents;\n }\n\n private readonly _selectedAgent: Signal<IoIntelWeb.Agents.Agent | null> =\n this._store.selectSignal<IoIntelWeb.Agents.Agent | null>(selectSelectedAgent);\n public get selectedAgent(): Signal<IoIntelWeb.Agents.Agent | null> {\n return this._selectedAgent;\n }\n\n public dispatchListAvailableAgents(): void {\n this._store.dispatch(listAvailableAgents());\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { inject, Injectable, Signal } from '@angular/core';\nimport { IoIntelWeb } from '@interopio/intel-web';\n\nimport { AgentFacade } from '../../store/agent/agent.facade';\nimport { AuthFacade } from '../../store/auth/auth.facade';\nimport { GetResponseParams } from '../../store/message/types';\nimport { ThreadFacade } from '../../store/thread/thread.facade';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AgentService {\n private readonly _agentFacade: AgentFacade = inject(AgentFacade);\n private readonly _authFacade: AuthFacade = inject(AuthFacade);\n private readonly _theadFacade: ThreadFacade = inject(ThreadFacade);\n\n private readonly _selectedAgent: Signal<IoIntelWeb.Agents.Agent | null> =\n this._agentFacade.selectedAgent;\n private readonly _availableAgents: Signal<IoIntelWeb.Agents.Agent[]> =\n this._agentFacade.availableAgents;\n private readonly _currentUser: Signal<string | null> = this._authFacade.username;\n private readonly _activeThreadId: Signal<string | null> = this._theadFacade.activeThreadId;\n\n public getResponse(\n params: GetResponseParams,\n isStream: boolean = true,\n agent?: IoIntelWeb.Agents.Agent,\n ): Promise<any> {\n if (!agent) {\n agent = this._selectedAgent() || this._availableAgents()[0];\n }\n\n if (!agent) {\n return Promise.reject(new Error('No agent available for response generation'));\n }\n\n const responseParams: GetResponseParams = this.constructParams(params);\n\n return isStream ? agent.stream(responseParams) : agent.generate(responseParams);\n }\n\n public reloadResponse(\n params: GetResponseParams,\n isStream: boolean = true,\n agent?: IoIntelWeb.Agents.Agent,\n ): Promise<any> {\n return this.getResponse(params, isStream, agent);\n }\n\n public abortOperation(): void {\n const selectedAgent: IoIntelWeb.Agents.Agent =\n this._selectedAgent() ?? this._availableAgents()[0];\n\n if (!selectedAgent) {\n throw new Error('No agent available to abort operation');\n }\n\n selectedAgent.abortOperation();\n }\n\n private constructParams(params: GetResponseParams): GetResponseParams {\n const currentUser: string | null = this._currentUser();\n\n if (!currentUser) {\n throw new Error('User is not logged in.');\n }\n\n return {\n ...params,\n threadId: params.threadId ?? this._activeThreadId() ?? crypto.randomUUID(),\n resourceId: params.resourceId ?? currentUser,\n runId: params.runId ?? crypto.randomUUID(),\n };\n }\n}\n","export enum SAMPLING_STOP_REASONS {\n END_TURN = 'endTurn',\n STOP_SEQUENCE = 'stopSequence',\n MAX_TOKENS = 'maxTokens',\n}\n\nexport type SamplingStopReasonType =\n | SAMPLING_STOP_REASONS.END_TURN\n | SAMPLING_STOP_REASONS.STOP_SEQUENCE\n | SAMPLING_STOP_REASONS.MAX_TOKENS;\n","import { SAMPLING_STOP_REASONS, SamplingStopReasonType } from './types';\n\n/**\n * Get the sampling stop reason match from the model response\n *\n * @param finishReason - finish reason from model response\n * @returns string representing the sampling stop reason\n */\nexport const getSamplingStopReason = (finishReason: string): SamplingStopReasonType => {\n if (!finishReason) {\n throw new Error('Finish reason is undefined');\n }\n\n switch (finishReason) {\n case 'length':\n return SAMPLING_STOP_REASONS.MAX_TOKENS;\n case 'stop':\n return SAMPLING_STOP_REASONS.END_TURN;\n // TODO: Revisit if a valid match exists for these cases in the future for LanguageModelV1FinishReason.\n // Currently it overlaps with 'stop' and 'length' cases and no valid match for stop-sequence which is almost the same as 'stop'.\n // case 'what-is-the-case-for-stop-sequence':\n // return SAMPLING_STOP_REASONS.STOP_SEQUENCE;\n default:\n throw new Error(`Unknown finish reason: ${finishReason}`);\n }\n};\n","import { inject, Injectable } from '@angular/core';\nimport { IoIntelWeb } from '@interopio/intel-web';\nimport { IOConnectModals } from '@interopio/modals-api';\n\nimport { UI_STRINGS } from '../../../constants/ui-strings';\nimport { generateSkipUiId } from '../../../store/message/message.utils';\nimport { AgentService } from '../../agent/agent.service';\nimport { IOConnectService } from '../../io/io.service';\nimport { getSamplingStopReason } from '../io-intel-web.utils';\nimport { SamplingStopReasonType } from '../types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SamplingService {\n private readonly UI_STRINGS = UI_STRINGS.SAMPLING_MODAL;\n private readonly _ioConnectService: IOConnectService = inject(IOConnectService);\n private readonly _agentService: AgentService = inject(AgentService);\n\n public async handleSamplingRequest(\n serverName: string,\n request: IoIntelWeb.SamplingRequestParams,\n ): Promise<IoIntelWeb.SamplingSuccessResponse | IoIntelWeb.SamplingErrorResponse> {\n try {\n return await this.getSamplingModalResponse(serverName, request);\n } catch (error) {\n console.error('Error occurred while getting sampling modal response:', error);\n\n return {\n code: -1,\n message: 'An error occurred while processing the sampling request.',\n };\n }\n }\n\n private async getSamplingModalResponse(\n serverName: string,\n request: IoIntelWeb.SamplingRequestParams,\n ): Promise<IoIntelWeb.SamplingSuccessResponse | IoIntelWeb.SamplingErrorResponse> {\n console.info('Showing sampling request from server:', serverName, 'requesting:', request);\n\n const dialogOptions: IOConnectModals.DialogRequestConfig = {\n templateName: 'noInputsConfirmationDialog',\n variables: {\n title: this.UI_STRINGS.TITLE,\n heading: this.UI_STRINGS.HEADING,\n text: this.UI_STRINGS.TEXT,\n actionButtons: [\n { variant: 'primary', text: 'YES', id: 'yes' },\n { variant: 'outline', text: 'NO', id: 'no' },\n ],\n },\n };\n\n const samplingDialogResponse: IOConnectModals.DialogResponse =\n await this._ioConnectService.requestModalDialog(dialogOptions);\n\n if (!samplingDialogResponse || !samplingDialogResponse.responseButtonClicked) {\n throw new Error('No response from sampling modal dialog.');\n }\n\n if (samplingDialogResponse.responseButtonClicked?.id === 'yes') {\n return await this.getSamplingResponse(request);\n }\n\n console.info('User denied the sampling request.');\n\n return {\n code: -1,\n message: 'User denied the sampling request.',\n };\n }\n\n // TODO:\n // - Handle different content types properly (not just text) - currently only text content is handled in our UI\n private async getSamplingResponse(\n request: IoIntelWeb.SamplingRequestParams,\n ): Promise<IoIntelWeb.SamplingSuccessResponse> {\n const formattedMessages = request.messages.map(\n (element: { role: IoIntelWeb.SamplingRole; content: IoIntelWeb.SamplingContent }) => {\n return {\n id: generateSkipUiId(),\n role: element.role,\n content: (element.content as IoIntelWeb.SamplingTextContent).text,\n };\n },\n );\n\n const params = {\n messages: formattedMessages,\n instructions: request.systemPrompt || undefined,\n // current model max tokens is 16384 - errors otherwise\n // TODO: Find a value that would work as a fallback value for most models so we successfully generate sampling response\n maxTokens: request.maxTokens,\n temperature: request.temperature || undefined,\n runtimeContext: {\n modelPreferences: request.modelPreferences || undefined,\n },\n output: request._meta?.['structuredOutput'],\n // TODO: Skipping stopSequences for now - implement proper handling in future\n };\n\n const response = await this._agentService.getResponse(params, false);\n\n if (!response) {\n throw new Error('Failed to generate response for sampling success response.');\n }\n\n console.info('Generated response for sampling success response:', response);\n\n const responseMessage = response.response.messages[0];\n\n const responseModelId: string = response.response.modelId;\n\n const stopReason: SamplingStopReasonType = getSamplingStopReason(response.finishReason);\n\n return {\n role: responseMessage.role as IoIntelWeb.SamplingRole,\n content: {\n type: 'text',\n text: responseMessage.content,\n },\n model: responseModelId,\n stopReason: stopReason,\n };\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { computed, inject, Injectable, Signal, signal, WritableSignal } from '@angular/core';\nimport { IoIntelWeb } from '@interopio/intel-web';\nimport { IoIntelWorkingContext } from '@interopio/working-context';\n\nimport { contextConfig } from './context';\nimport { LOADING_STATE } from '../../enums/loading-state.enum';\nimport { LoadingType } from '../../types/loading.type';\nimport { IOConnectService } from '../io/io.service';\nimport { ElicitationService } from './elicitation/elicitation.service';\nimport { SamplingService } from './sampling/sampling.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class IOIntelWebService {\n private readonly _ioConnectService: IOConnectService = inject(IOConnectService);\n private readonly _samplingService: SamplingService = inject(SamplingService);\n private readonly _elicitationService: ElicitationService = inject(ElicitationService);\n\n private _ioIntelWeb: WritableSignal<IoIntelWeb.API | null> = signal(null);\n private get _ioIntelWebAPI(): IoIntelWeb.API {\n const api: IoIntelWeb.API | null = this._ioIntelWeb();\n\n if (!api) {\n throw new Error('IO Intel Web API is not initialized.');\n }\n\n return api;\n }\n\n private get _workingContextAPI(): IoIntelWorkingContext.API {\n const api: IoIntelWeb.API = this._ioIntelWebAPI;\n\n if (!api.context) {\n throw new Error('IO Intel Web API does not have working context enabled.');\n }\n\n return api.context;\n }\n\n private _loadingState: WritableSignal<LoadingType> = signal({\n type: LOADING_STATE.NOT_STARTED,\n });\n public get loadingState(): Signal<LoadingType> {\n return this._loadingState;\n }\n public get isInitialized(): Signal<boolean> {\n return computed(\n () =>\n this._ioIntelWeb() !== null && this._loadingState().type === LOADING_STATE.SUCCESS,\n );\n }\n public get isInitializing(): Signal<boolean> {\n return computed(() => this._loadingState().type === LOADING_STATE.LOADING);\n }\n public get isError(): Signal<string> {\n const loadingState = this._loadingState();\n\n return computed(\n () => (loadingState.type === LOADING_STATE.ERROR && loadingState.message) || '',\n );\n }\n\n private _hasContextConfig: WritableSignal<boolean> = signal(false);\n\n /** Note that initialization takes time and must be handled accordingly across components - display proper UI loading indication.\n * Initialization takes place right after a successful login.\n */\n public async initialize(): Promise<void> {\n const ioIntelWebAPI: IoIntelWeb.API | null = await this._safeInitialize();\n\n if (ioIntelWebAPI) {\n (window as any).intel = ioIntelWebAPI; // For debugging purposes\n\n this._ioIntelWeb.set(ioIntelWebAPI);\n this._loadingState.set({ type: LOADING_STATE.SUCCESS });\n\n return;\n }\n\n const error: Error = new Error('Failed to initialize IoIntelWeb API');\n\n this._loadingState.set({\n type: LOADING_STATE.ERROR,\n message: error.message,\n });\n\n throw error;\n }\n\n private async _safeInitialize(): Promise<IoIntelWeb.API | null> {\n if (this.isInitialized()) throw new Error('IO Intel Web is already initialized!');\n\n if (this.isInitializing()) throw new Error('IO Intel Web is already initializing...');\n\n this._loadingState.set({ type: LOADING_STATE.LOADING });\n\n const config: IoIntelWeb.WebConfig = {\n mcp: {\n clientsConfig: {\n capabilities: {\n sampling: {\n handler: this._samplingService.handleSamplingRequest.bind(\n this._samplingService,\n ),\n },\n elicitation: {\n handler: this._elicitationService.handleElicitationRequest.bind(\n this._elicitationService,\n ),\n },\n },\n },\n ioIntel: {\n remote: {\n streamableHttp: {\n url: 'http://localhost:8989/mcp',\n name: 'io.Intel Dev HTTP',\n },\n },\n web: { enabled: true },\n },\n },\n server: {\n baseUrl: window.location.host.includes('localhost')\n ? 'http://localhost:4111'\n : 'https://iointel-demos-io-assist-mastra.interop.io',\n },\n context: (window as any).iodesktop ? undefined : contextConfig,\n // context: contextConfig,\n };\n\n this._hasContextConfig.set(!!config.context);\n\n console.info('Working context configuration provided:', this._hasContextConfig());\n\n try {\n // TODO: Extract configuration to environment variables or a config file\n return await this._ioConnectService.initializeIOIntelWeb(config);\n } catch (error) {\n console.error('Error initializing IoIntelWeb API:', error);\n return null;\n }\n }\n\n public listAgents(): Promise<IoIntelWeb.Agents.Agent[]> {\n return this._ioIntelWebAPI.agents.list();\n }\n\n public listThreads(\n config: IoIntelWeb.Threads.ListThreadsParams,\n ): Promise<IoIntelWeb.Threads.Thread[]> {\n return this._ioIntelWebAPI.threads.list(config);\n }\n\n public listTools(): Promise<IoIntelWeb.Tools.Tool[]> {\n return this._ioIntelWebAPI.tools.list();\n }\n\n public toggleTool(toolName: string, enable: boolean): Promise<IoIntelWeb.Tools.Tool> {\n return Promise.resolve(this._ioIntelWebAPI.tools.toggleTool(toolName, enable));\n }\n\n public getWorkingContext(): Promise<Record<string, IoIntelWorkingContext.Property>> {\n return Promise.resolve(this._workingContextAPI.get());\n }\n\n public onWorkingContextChange(\n callback: (data: Record<string, IoIntelWorkingContext.Property>) => void,\n ): IoIntelWorkingContext.UnsubscribeFunction {\n return this._workingContextAPI.onChanged(callback);\n }\n\n public isWorkingContextEnabled(): Promise<boolean> {\n return Promise.resolve(this._hasContextConfig() && !!this._workingContextAPI);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { IoIntelWorkingContext } from '@interopio/working-context';\n\nimport { IOIntelWebService } from '../io-intel-web/io-intel-web.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WorkingContextService {\n private readonly _ioIntelWebService: IOIntelWebService = inject(IOIntelWebService);\n\n public getWorkingContext(): Promise<Record<string, IoIntelWorkingContext.Property>> {\n return this._ioIntelWebService.getWorkingContext();\n }\n\n public onWorkingContextChange(\n callback: (workingContext: Record<string, IoIntelWorkingContext.Property>) => void,\n ): IoIntelWorkingContext.UnsubscribeFunction {\n return this._ioIntelWebService.onWorkingContextChange(callback);\n }\n\n public isWorkingContextEnabled(): Promise<boolean> {\n return Promise.resolve(this._ioIntelWebService.isWorkingContextEnabled());\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, OnInit, Signal } from '@angular/core';\nimport { IoIntelWorkingContext } from '@interopio/working-context';\n\nimport { AppIconComponent } from '../../shared/components/app-icon/app-icon.component';\nimport { APP_ICON_SIZES, APP_ICON_VARIANTS } from '../../shared/components/app-icon/enum';\nimport { AppMdFormatterComponent } from '../../shared/components/app-md-formatter/app-md-formatter.component';\nimport { textToJSONMarkdown } from '../../shared/components/app-md-formatter/utils';\nimport { UI_STRINGS } from '../../shared/constants/ui-strings';\nimport { SubscriptionCleanupService } from '../../shared/services/subscription-cleanup/subscription-cleanup.service';\nimport { WorkingContextService } from '../../shared/services/working-context/working-context.service';\nimport { WorkingContextFacade } from '../../shared/store/working-context/working-context.facade';\n\nconst MODULES = [CommonModule];\nconst COMPONENTS = [AppIconComponent, AppMdFormatterComponent];\n\n@Component({\n selector: 'working-context-panel',\n templateUrl: './working-context-panel.component.html',\n imports: [...MODULES, ...COMPONENTS],\n providers: [WorkingContextFacade, SubscriptionCleanupService],\n})\nexport class WorkingContextPanelComponent implements OnInit {\n protected readonly UI_STRINGS = UI_STRINGS.WORKING_CONTEXT_PANEL_COMPONENT;\n protected readonly APP_ICON_VARIANTS = APP_ICON_VARIANTS;\n protected readonly APP_ICON_SIZES = APP_ICON_SIZES;\n\n private readonly WORKING_CONTEXT_CHANGES_SUB_KEY = 'working-context-changes-panel-subscription';\n\n private readonly _workingContextService: WorkingContextService = inject(WorkingContextService);\n private readonly _subscriptionCleanupService: SubscriptionCleanupService = inject(\n SubscriptionCleanupService,\n );\n\n // Provided in this component\n private readonly _workingContextFacade: WorkingContextFacade = inject(WorkingContextFacade);\n\n protected readonly workingContext: Signal<Record<string, IoIntelWorkingContext.Property>> =\n this._workingContextFacade.workingContext;\n\n private _unsubscribeFn: (() => void) | undefined | null;\n\n public ngOnInit(): void {\n this._workingContextFacade.dispatchGetWorkingContext();\n\n this._unsubscribeFn = this._workingContextService.onWorkingContextChange(\n (workingContext) => {\n this._workingContextFacade.dispatchUpdateWorkingContext(workingContext);\n },\n );\n\n if (!this._unsubscribeFn) {\n return;\n }\n\n this._subscriptionCleanupService.add(\n this.WORKING_CONTEXT_CHANGES_SUB_KEY,\n this._unsubscribeFn,\n );\n }\n\n protected handleGetContext(): void {\n this._workingContextFacade.dispatchGetWorkingContext();\n }\n\n protected textToJSONMarkdown(): string {\n return textToJSONMarkdown(this.workingContext());\n }\n}\n","<div class=\"flex flex-1 flex-col p-4 gap-4\">\n <div\n class=\"flex items-center gap-2 mb-4 p-4 bg-app-background-secondary border border-border-default rounded\"\n >\n <app-icon\n [variant]=\"APP_ICON_VARIANTS.INFO\"\n [size]=\"APP_ICON_SIZES.M\"\n [iconFill]=\"'--app-accent-color-1'\"\n [isWrapped]=\"false\"\n (click)=\"handleGetContext()\"\n >\n </app-icon>\n\n <p class=\"text-sm text-proto-text-default\">\n {{ UI_STRINGS.CALLOUT_TEXT }}\n </p>\n </div>\n\n <div class=\"flex flex-1 justify-end space-y-2\">\n <app-icon\n [variant]=\"APP_ICON_VARIANTS.RELOAD\"\n [size]=\"APP_ICON_SIZES.M\"\n [isWrapped]=\"false\"\n (click)=\"handleGetContext()\"\n >\n </app-icon>\n </div>\n\n <app-md-formatter [content]=\"textToJSONMarkdown()\"></app-md-formatter>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, OnInit, Signal } from '@angular/core';\n\nimport { APP_BUTTON_TYPES } from '../../shared/components/app-button/enum';\nimport { AppIconComponent } from '../../shared/components/app-icon/app-icon.component';\nimport { APP_ICON_SIZES, APP_ICON_VARIANTS } from '../../shared/components/app-icon/enum';\nimport { PANEL_BUTTON_ACTION_TYPE } from '../../shared/components/app-panel/enums';\nimport { AppSpinnerComponent } from '../../shared/components/app-spinner/app-spinner.component';\nimport { APP_SPINNER_COMPONENT_SIZE } from '../../shared/components/app-spinner/enum';\nimport { UI_STRINGS } from '../../shared/constants/ui-strings';\nimport { OverlayService } from '../../shared/services/overlay/overlay.service';\nimport { AuthFacade } from '../../shared/store/auth/auth.facade';\nimport { MessageFacade } from '../../shared/store/message/message.facade';\nimport { ThreadFacade } from '../../shared/store/thread/thread.facade';\nimport { WorkingContextFacade } from '../../shared/store/working-context/working-context.facade';\nimport { WorkingContextPanelComponent } from '../working-context-panel/working-context-panel.component';\n\nconst MODULES = [CommonModule];\nconst COMPONENTS = [AppSpinnerComponent, AppIconComponent];\n\n@Component({\n selector: 'header',\n templateUrl: './header.component.html',\n imports: [...MODULES, ...COMPONENTS],\n providers: [WorkingContextFacade],\n host: {\n style: 'display: flex; width: 100%;',\n },\n})\nexport class HeaderComponent implements OnInit {\n protected readonly APP_SPINNER_COMPONENT_SIZE = APP_SPINNER_COMPONENT_SIZE;\n protected readonly UI_STRINGS = UI_STRINGS;\n protected readonly APP_ICON_VARIANTS = APP_ICON_VARIANTS;\n protected readonly APP_ICON_SIZES = APP_ICON_SIZES;\n\n // Provided in root\n private readonly _overlayService: OverlayService = inject(OverlayService);\n private readonly _authFacade: AuthFacade = inject(AuthFacade);\n private readonly _threadFacade: ThreadFacade = inject(ThreadFacade);\n\n // Provided by parent component\n private readonly _messageFacade: MessageFacade = inject(MessageFacade);\n\n // Provided in this component\n private readonly _workingContextFacade: WorkingContextFacade = inject(WorkingContextFacade);\n\n protected readonly isPendingLogout: Signal<boolean> = this._authFacade.isPendingAuthOperation;\n protected readonly isThreadHistoryDisplayed: Signal<boolean> =\n this._overlayService.isThreadHistoryDisplayed;\n protected readonly isLoadingMessages: Signal<boolean> = this._messageFacade.isLoadingMessages;\n protected readonly messageLength: Signal<number> = this._messageFacade.messageLength;\n protected readonly isWorkingContextEnabled: Signal<boolean> =\n this._workingContextFacade.isWorkingContextEnabled;\n\n public ngOnInit(): void {\n this._workingContextFacade.dispatchFetchIsWorkingContextEnabled();\n }\n\n protected handleLogout(): void {\n this._authFacade.dispatchLogout();\n }\n\n protected displayThreadHistory(): void {\n this._overlayService.displayThreadHistory();\n }\n\n protected displayHome(): void {\n this._messageFacade.dispatchClearMessages();\n\n this._threadFacade.dispatchChangeActiveThread(null);\n }\n\n protected handleWorkingContextPanelOpen(): void {\n this._overlayService.showPanelOverlay({\n title: UI_STRINGS.WORKING_CONTEXT_PANEL_COMPONENT.TITLE,\n content: WorkingContextPanelComponent,\n isHeaderCloseButtonDisplayed: true,\n footerButtons: [\n {\n label: UI_STRINGS.GENERAL.CANCEL,\n action: PANEL_BUTTON_ACTION_TYPE.CLOSE,\n type: APP_BUTTON_TYPES.DEFAULT,\n },\n ],\n });\n }\n}\n","@let showHomeButton = isLoadingMessages() || messageLength() > 0;\n@let showThreadPanelToggleButton = !isThreadHistoryDisplayed();\n\n<div\n class=\"header\"\n [ngClass]=\"{\n 'flex flex-1 justify-start px-4 py-2 gap-4 self-stretch': true,\n }\"\n>\n @if (showThreadPanelToggleButton || showHomeButton) {\n <div\n [ngClass]=\"{\n flex: true,\n }\"\n >\n @if (showThreadPanelToggleButton) {\n <app-icon\n [ngClass]=\"{\n 'me-2': true,\n }\"\n [variant]=\"APP_ICON_VARIANTS.THREAD_HISTORY\"\n (click)=\"displayThreadHistory()\"\n ></app-icon>\n }\n\n @if (showHomeButton) {\n <app-icon [variant]=\"APP_ICON_VARIANTS.HOME\" (click)=\"displayHome()\"></app-icon>\n }\n </div>\n }\n\n <!-- Context Area -->\n @if (isWorkingContextEnabled()) {\n <button\n [ngClass]=\"{\n 'flex justify-center items-center px-2 py-[1px] border-[1px] rounded-[4px] text-text-default cursor-pointer': true,\n 'hover:text-text-states-hover hover:text-states-hover': true,\n }\"\n (click)=\"handleWorkingContextPanelOpen()\"\n >\n <span\n [ngClass]=\"{\n 'font-weight-400 text-xs capitalize': true,\n }\"\n >\n {{ UI_STRINGS.WORKING_CONTEXT_PANEL_COMPONENT.VIEW_WORKING_CONTEXT_BUTTON }}\n </span>\n </button>\n }\n\n <button\n [ngClass]=\"{\n 'flex flex-1 justify-end text-proto-text-default': true,\n }\"\n (click)=\"handleLogout()\"\n >\n @if (isPendingLogout()) {\n <app-spinner [size]=\"APP_SPINNER_COMPONENT_SIZE.SMALL\"></app-spinner>\n }\n\n @if (!isPendingLogout()) {\n <app-icon [variant]=\"APP_ICON_VARIANTS.LOGOUT\" (click)=\"handleLogout()\"></app-icon>\n }\n </button>\n</div>\n","export enum WEB_SEARCH_ACTIONS {\n FETCH_WEB_SEARCH_ENABLED_PREFS_STATE = '[Web Search] Fetch Web Search Enabled Prefs State',\n FETCH_WEB_SEARCH_ENABLED_PREFS_STATE_SUCCESS = '[Web Search] Fetch Web Search Enabled Prefs State Success',\n FETCH_WEB_SEARCH_ENABLED_PREFS_STATE_FAILURE = '[Web Search] Fetch Web Search Enabled Prefs State Failure',\n TOGGLE_WEB_SEARCH_ENABLED = '[Web Search] Toggle Web Search Enabled',\n TOGGLE_WEB_SEARCH_ENABLED_SUCCESS = '[Web Search] Toggle Web Search Enabled Success',\n TOGGLE_WEB_SEARCH_ENABLED_FAILURE = '[Web Search] Toggle Web Search Enabled Failure',\n}\n","import { createAction, props } from '@ngrx/store';\n\nimport { WEB_SEARCH_ACTIONS } from './web-search.actions.enum';\n\nexport const fetchWebSearchEnabledPrefsState = createAction(\n WEB_SEARCH_ACTIONS.FETCH_WEB_SEARCH_ENABLED_PREFS_STATE,\n);\nexport const fetchWebSearchEnabledPrefsStateSuccess = createAction(\n WEB_SEARCH_ACTIONS.FETCH_WEB_SEARCH_ENABLED_PREFS_STATE_SUCCESS,\n props<{ isEnabled: boolean }>(),\n);\nexport const fetchWebSearchEnabledPrefsStateFailure = createAction(\n WEB_SEARCH_ACTIONS.FETCH_WEB_SEARCH_ENABLED_PREFS_STATE_FAILURE,\n props<{ error: Error }>(),\n);\nexport const toggleWebSearchEnabled = createAction(\n WEB_SEARCH_ACTIONS.TOGGLE_WEB_SEARCH_ENABLED,\n props<{ isCurrentlyEnabled: boolean }>(),\n);\nexport const toggleWebSearchEnabledSuccess = createAction(\n WEB_SEARCH_ACTIONS.TOGGLE_WEB_SEARCH_ENABLED_SUCCESS,\n props<{ isEnabled: boolean }>(),\n);\nexport const toggleWebSearchEnabledFailure = createAction(\n WEB_SEARCH_ACTIONS.TOGGLE_WEB_SEARCH_ENABLED_FAILURE,\n props<{ error: Error }>(),\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { WebSearchReducerStateType } from './web-search.reducer';\nimport { LOADING_STATE } from '../../enums/loading-state.enum';\n\nexport const selectWebSearchStore =\n createFeatureSelector<WebSearchReducerStateType>('webSearchStore');\n\nexport const selectIsWebSearchEnabled = createSelector(\n selectWebSearchStore,\n (state: WebSearchReducerStateType) => state.isWebSearchEnabled,\n);\n\nexport const selectIsWebSearchEnabledPending = createSelector(\n selectWebSearchStore,\n (state: WebSearchReducerStateType) => state.loadingState.type === LOADING_STATE.LOADING,\n);\n","import { inject, Injectable, Signal } from '@angular/core';\nimport { Store } from '@ngrx/store';\n\nimport { fetchWebSearchEnabledPrefsState, toggleWebSearchEnabled } from './web-search.actions';\nimport { selectIsWebSearchEnabled, selectIsWebSearchEnabledPending } from './web-search.selector';\n\n@Injectable()\nexport class WebSearchFacade {\n private readonly store: Store = inject(Store);\n\n private readonly _isWebSearchEnabled: Signal<boolean> =\n this.store.selectSignal<boolean>(selectIsWebSearchEnabled);\n public get isWebSearchEnabled(): Signal<boolean> {\n return this._isWebSearchEnabled;\n }\n\n private readonly _isWebSearchEnabledPending: Signal<boolean> = this.store.selectSignal<boolean>(\n selectIsWebSearchEnabledPending,\n );\n public get isWebSearchEnabledPending(): Signal<boolean> {\n return this._isWebSearchEnabledPending;\n }\n\n public dispatchFetchWebSearchEnabledPrefsState(): void {\n this.store.dispatch(fetchWebSearchEnabledPrefsState());\n }\n\n public dispatchToggleWebSearchEnabled(isCurrentlyEnabled: boolean): void {\n this.store.dispatch(toggleWebSearchEnabled({ isCurrentlyEnabled }));\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n input,\n InputSignal,\n output,\n OutputEmitterRef,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { UI_STRINGS } from '../../constants/ui-strings';\nimport { AppIconComponent } from '../app-icon/app-icon.component';\nimport { APP_ICON_SIZES, APP_ICON_VARIANTS } from '../app-icon/enum';\n\nenum INPUT_TYPES_ENUM {\n TEXT = 'text',\n PASSWORD = 'password',\n EMAIL = 'email',\n NUMBER = 'number',\n SEARCH = 'search',\n TEL = 'tel',\n URL = 'url',\n}\n\ntype AppInputType = INPUT_TYPES_ENUM[keyof INPUT_TYPES_ENUM];\n\nconst MODULES = [FormsModule, CommonModule];\nconst COMPONENTS = [AppIconComponent];\n\n/**\n * A reusable input component with various customization options.\n * Behaves like a standard HTML input element.\n *\n * Inputs:\n * @type {InputSignal<string>} placeholder - Placeholder text for the input field.\n * @type {InputSignal<AppInputType>} type - Type of the input field (e.g., text, password).\n * @type {InputSignal<string>} label - Label text for the input field.\n * @type {InputSignal<boolean>} isLabelSrOnly - Whether the label is only for screen readers.\n * @type {InputSignal<boolean>} disabled - Whether the input field is disabled.\n * @type {InputSignal<string>} error - Error message to display below the input field.\n * @type {InputSignal<boolean>} showLeadingIcon - Whether to show a leading icon.\n * @type {InputSignal<APP_ICON_VARIANTS>} leadingIconVariant - Variant of the leading icon.\n * @type {InputSignal<boolean>} showTrailingIcon - Whether to show a trailing icon.\n * @type {InputSignal<APP_ICON_VARIANTS>} trailingIconVariant - Variant of the trailing icon.\n * @type {InputSignal<APP_ICON_SIZES>} iconsSize - Size of the icons.\n *\n * Outputs:\n * @type {OutputEmitterRef<string>} onValueChange - Emits the current value of the input field on change.\n */\n@Component({\n selector: 'app-input',\n imports: [...MODULES, ...COMPONENTS],\n templateUrl: './app-input.component.html',\n})\nexport class AppInputComponent {\n protected readonly APP_INPUT_COMPONENT_STRINGS = UI_STRINGS.INPUT_COMPONENT;\n\n public readonly placeholder: InputSignal<string> = input<string>(\n this.APP_INPUT_COMPONENT_STRINGS.DEFAULT_PLACEHOLDER,\n );\n public readonly type: InputSignal<AppInputType> = input<AppInputType>(INPUT_TYPES_ENUM.TEXT);\n public readonly label: InputSignal<string> = input<string>('');\n public readonly isLabelSrOnly: InputSignal<boolean> = input<boolean>(false);\n public readonly disabled: InputSignal<boolean> = input<boolean>(false);\n public readonly error: InputSignal<string> = input<string>('');\n public readonly showLeadingIcon: InputSignal<boolean> = input<boolean>(false);\n public readonly leadingIconVariant: InputSignal<APP_ICON_VARIANTS> = input<APP_ICON_VARIANTS>(\n APP_ICON_VARIANTS.SEARCH,\n );\n public readonly showTrailingIcon: InputSignal<boolean> = input<boolean>(false);\n public readonly trailingIconVariant: InputSignal<APP_ICON_VARIANTS> = input<APP_ICON_VARIANTS>(\n APP_ICON_VARIANTS.CLOSE,\n );\n public readonly iconsSize: InputSignal<APP_ICON_SIZES> = input<APP_ICON_SIZES>(\n APP_ICON_SIZES.XS,\n );\n\n public onValueChange: OutputEmitterRef<string> = output<string>();\n\n protected isActive: WritableSignal<boolean> = signal<boolean>(false);\n protected value: WritableSignal<string> = signal<string>('');\n\n protected onKeyUp(event: Event): void {\n const target: HTMLInputElement = event.target as HTMLInputElement;\n\n this.value.set(target.value);\n this.onValueChange.emit(target.value);\n }\n\n protected clearContent(): void {\n this.value.set('');\n\n this.onValueChange.emit('');\n }\n}\n","@if (label()) {\n <span\n class=\"app-input-label\"\n [ngClass]=\"{\n 'flex text-input-default text-sm mb-2': true,\n 'text-input-label-disabled': disabled(),\n 'sr-only': isLabelSrOnly(),\n }\"\n >{{ label() }}</span\n >\n}\n\n<div\n class=\"app-input\"\n [ngClass]=\"{\n 'flex flex-col items-start justify-center w-full p-2 mb-2 rounded-input-radius border-[1px]': true,\n 'hover:bg-input-background-hover hover:border-input-border-hover':\n !disabled() && !error() && !isActive(),\n 'focus-within:bg-input-background-active focus-within:border-input-border-active':\n !disabled() && !error() && isActive(),\n 'bg-input-background-disabled border-none': disabled(),\n 'border-input-border bg-input-background': !error() && !disabled(),\n 'border-input-error-border': error(),\n }\"\n>\n <div\n class=\"app-input-wrapper__inner\"\n [ngClass]=\"{\n 'flex gap-spacing-2 items-center w-full': true,\n }\"\n >\n @if (showLeadingIcon()) {\n <app-icon\n class=\"app-input-wrapper__leading-icon\"\n [variant]=\"leadingIconVariant()\"\n [size]=\"iconsSize()\"\n [isDisabled]=\"disabled()\"\n [disabledIconFill]=\"'--app-input-icon-disabled'\"\n [iconFill]=\"isActive() ? '--app-input-icon-active' : '--app-input-icon'\"\n [isWrapped]=\"false\"\n ></app-icon>\n }\n\n <input\n class=\"app-input-wrapper__field\"\n [ngClass]=\"{\n 'flex-1 min-w-0 bg-transparent border-0 outline-none font-default text-xs': true,\n 'text-input-text': !disabled() && !isActive(),\n 'text-input-text-active': isActive(),\n 'text-input-icon-disabled cursor-not-allowed': disabled(),\n }\"\n [type]=\"type()\"\n [placeholder]=\"placeholder()\"\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n (focus)=\"isActive.set(true)\"\n (blur)=\"isActive.set(false)\"\n (keyup)=\"onKeyUp($event)\"\n />\n\n @if (showTrailingIcon() && value()) {\n <app-icon\n class=\"app-input-wrapper__trailing-icon\"\n [ngClass]=\"{\n 'cursor-pointer': true,\n }\"\n [variant]=\"trailingIconVariant()\"\n [size]=\"iconsSize()\"\n [isDisabled]=\"disabled()\"\n [disabledIconFill]=\"'app-input-icon-disabled'\"\n [iconFill]=\"isActive() ? 'app-input-icon-active' : 'app-input-icon'\"\n [isWrapped]=\"false\"\n (onClick)=\"clearContent()\"\n ></app-icon>\n }\n </div>\n</div>\n\n@if (error()) {\n <div\n class=\"app-input-error\"\n [ngClass]=\"{\n 'flex gap-1 items-center justify-end w-full': true,\n }\"\n >\n <div\n [ngClass]=\"{\n 'flex items-center justify-center shrink-0': true,\n }\"\n >\n <!-- TODO: Replace with an actual icon -->\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n [ngClass]=\"{\n 'w-3 h-3 text-input-error-text': true,\n }\"\n >\n <path d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </div>\n <p\n class=\"app-input-error__text\"\n [ngClass]=\"{\n 'flex-1 min-w-0 font-default font-weight-weight-400 text-input-error text-input-error-text leading-input-error tracking-input-error': true,\n }\"\n >\n {{ error() }}\n </p>\n </div>\n}\n","export enum PROMPT_ACTIONS {\n FETCH_PROMPTS = '[Prompt] Fetch Prompts',\n FETCH_PROMPTS_SUCCESS = '[Prompt] Fetch Prompts Success',\n FETCH_PROMPTS_FAILURE = '[Prompt] Fetch Prompts Failure',\n SELECT_PROMPT = '[Prompt] Select Prompt',\n CREATE_PROMPT = '[Prompt] Create Prompt',\n CREATE_PROMPT_SUCCESS = '[Prompt] Create Prompt Success',\n CREATE_PROMPT_FAILURE = '[Prompt] Create Prompt Failure',\n DELETE_PROMPT = '[Prompt] Delete Prompt',\n DELETE_PROMPT_SUCCESS = '[Prompt] Delete Prompt Success',\n DELETE_PROMPT_FAILURE = '[Prompt] Delete Prompt Failure',\n UPDATE_PROMPT = '[Prompt] Update Prompt',\n UPDATE_PROMPT_SUCCESS = '[Prompt] Update Prompt Success',\n UPDATE_PROMPT_FAILURE = '[Prompt] Update Prompt Failure',\n TOGGLE_FAVORITE = '[Prompt] Toggle Favorite',\n}\n","import { createAction, props } from '@ngrx/store';\n\nimport { PROMPT_ACTIONS } from './prompt.actions.enum';\nimport { Prompt, UIPrompt } from '../../../temp/temp-interfaces';\n\n// =========================================================================== Fetch\nexport const fetchPrompts = createAction(PROMPT_ACTIONS.FETCH_PROMPTS);\nexport const fetchPromptsSuccess = createAction(\n PROMPT_ACTIONS.FETCH_PROMPTS_SUCCESS,\n props<{ prompts: UIPrompt[]; favorites: string[] }>(),\n);\nexport const fetchPromptsFailure = createAction(\n PROMPT_ACTIONS.FETCH_PROMPTS_FAILURE,\n props<{ error: Error }>(),\n);\nexport const selectPrompt = createAction(\n PROMPT_ACTIONS.SELECT_PROMPT,\n props<{ prompt: UIPrompt }>(),\n);\n\n// =========================================================================== Create\nexport const createPrompt = createAction(PROMPT_ACTIONS.CREATE_PROMPT, props<{ prompt: Prompt }>());\nexport const createPromptSuccess = createAction(\n PROMPT_ACTIONS.CREATE_PROMPT_SUCCESS,\n props<{ prompt: Prompt }>(),\n);\nexport const createPromptFailure = createAction(\n PROMPT_ACTIONS.CREATE_PROMPT_FAILURE,\n props<{ error: Error }>(),\n);\n\n// =========================================================================== Update\n// TODO: Add update prompt type\nexport const updatePrompt = createAction(\n PROMPT_ACTIONS.UPDATE_PROMPT,\n props<{\n name: string;\n prompt: { role: 'user' | 'assistant'; content: { type: 'text'; text: string } }[];\n description: string;\n }>(),\n);\nexport const updatePromptSuccess = createAction(\n PROMPT_ACTIONS.UPDATE_PROMPT_SUCCESS,\n props<{\n name: string;\n prompt: { role: 'user' | 'assistant'; content: { type: 'text'; text: string } }[];\n description: string;\n }>(),\n);\nexport const updatePromptFailure = createAction(\n PROMPT_ACTIONS.UPDATE_PROMPT_FAILURE,\n props<{ error: Error; name: string }>(),\n);\n\n// =========================================================================== Delete\nexport const deletePrompt = createAction(\n PROMPT_ACTIONS.DELETE_PROMPT,\n props<{\n name: string;\n }>(),\n);\nexport const deletePromptSuccess = createAction(\n PROMPT_ACTIONS.DELETE_PROMPT_SUCCESS,\n props<{ name: string }>(),\n);\nexport const deletePromptFailure = createAction(\n PROMPT_ACTIONS.DELETE_PROMPT_FAILURE,\n props<{ error: Error; name: string }>(),\n);\n\n// =========================================================================== Favorites\nexport const togglePromptFavorite = createAction(\n PROMPT_ACTIONS.TOGGLE_FAVORITE,\n props<{\n name: string;\n }>(),\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { PromptReducerStateType } from './prompt.reducer';\nimport { LOADING_STATE } from '../../enums/loading-state.enum';\n\nexport const selectPromptStore = createFeatureSelector<PromptReducerStateType>('promptStore');\n\nexport const selectAllPrompts = createSelector(\n selectPromptStore,\n (state: PromptReducerStateType) => state.prompts,\n);\n\nexport const selectFavoritePromptNames = createSelector(\n selectPromptStore,\n (state: PromptReducerStateType) => state.favoritePromptNames,\n);\n\nexport const selectIsFetchingPrompts = createSelector(\n selectPromptStore,\n (state: PromptReducerStateType) =>\n state.loadingState.fetchingState.type === LOADING_STATE.LOADING,\n);\n\nexport const selectSelectedPrompt = createSelector(\n selectPromptStore,\n (state: PromptReducerStateType) => state.selectedPrompt,\n);\n\nexport const selectPromptCreationState = createSelector(\n selectPromptStore,\n (state: PromptReducerStateType) => state.loadingState.createLoadingState,\n);\n\nexport const selectIsCreatingNewPrompt = createSelector(\n selectPromptStore,\n (state: PromptReducerStateType) =>\n state.loadingState.createLoadingState.type === LOADING_STATE.LOADING,\n);\n","import { inject, Injectable, Signal } from '@angular/core';\nimport { Store } from '@ngrx/store';\n\nimport {\n createPrompt,\n deletePrompt,\n fetchPrompts,\n selectPrompt,\n togglePromptFavorite,\n updatePrompt,\n} from './prompt.actions';\nimport {\n selectAllPrompts,\n selectFavoritePromptNames,\n selectIsCreatingNewPrompt,\n selectIsFetchingPrompts,\n selectPromptCreationState,\n selectSelectedPrompt,\n} from './prompt.selector';\nimport { Prompt, UIPrompt } from '../../../temp/temp-interfaces';\nimport { LoadingType } from '../../types/loading.type';\n\n@Injectable()\nexport class PromptFacade {\n private readonly _store: Store = inject(Store);\n\n private readonly _allPrompts: Signal<UIPrompt[]> =\n this._store.selectSignal<UIPrompt[]>(selectAllPrompts);\n public get allPrompts(): Signal<UIPrompt[]> {\n return this._allPrompts;\n }\n private readonly _favoritePromptNames: Signal<string[]> =\n this._store.selectSignal<string[]>(selectFavoritePromptNames);\n public get favoritePromptNames(): Signal<string[]> {\n return this._favoritePromptNames;\n }\n\n private readonly _selectedPrompt: Signal<Prompt | null> =\n this._store.selectSignal<Prompt | null>(selectSelectedPrompt);\n public get selectedPrompt(): Signal<Prompt | null> {\n return this._selectedPrompt;\n }\n\n private readonly _isFetchingPrompts: Signal<boolean> =\n this._store.selectSignal<boolean>(selectIsFetchingPrompts);\n public get isFetchingPrompts(): Signal<boolean> {\n return this._isFetchingPrompts;\n }\n\n private readonly _promptCreationState: Signal<LoadingType> =\n this._store.selectSignal<LoadingType>(selectPromptCreationState);\n public get promptCreationState(): Signal<LoadingType> {\n return this._promptCreationState;\n }\n\n private readonly _isCreatingNewPrompt: Signal<boolean> =\n this._store.selectSignal<boolean>(selectIsCreatingNewPrompt);\n public get isCreatingNewPrompt(): Signal<boolean> {\n return this._isCreatingNewPrompt;\n }\n\n public dispatchFetchPrompts(): void {\n this._store.dispatch(fetchPrompts());\n }\n\n public dispatchSelectPrompt(prompt: UIPrompt): void {\n this._store.dispatch(selectPrompt({ prompt }));\n }\n\n public dispatchCreatePrompt(prompt: Prompt): void {\n this._store.dispatch(createPrompt({ prompt }));\n }\n\n // TODO: Add update prompt type\n public dispatchUpdatePrompt(\n name: string,\n prompt: { role: 'user' | 'assistant'; content: { type: 'text'; text: string } }[],\n description: string,\n ): void {\n this._store.dispatch(updatePrompt({ name, prompt, description }));\n }\n\n public dispatchDeletePrompt(name: string): void {\n this._store.dispatch(deletePrompt({ name }));\n }\n\n public dispatchToggleFavoritePrompt(name: string): void {\n this._store.dispatch(togglePromptFavorite({ name }));\n }\n}\n","export enum USER_PROMPT_STATE {\n UPDATING = 'updating',\n DELETING = 'deleting',\n IDLE = 'idle',\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n computed,\n inject,\n input,\n InputSignal,\n Signal,\n signal,\n WritableSignal,\n} from '@angular/core';\n\nimport { AppIconComponent } from '../../../shared/components/app-icon/app-icon.component';\nimport { APP_ICON_VARIANTS } from '../../../shared/components/app-icon/enum';\nimport { APP_SPINNER_COMPONENT_SIZE } from '../../../shared/components/app-spinner/enum';\nimport { PromptFacade } from '../../../shared/store/prompt/prompt.facade';\nimport { UIPrompt } from '../../../temp/temp-interfaces';\nimport { USER_PROMPT_STATE } from '../enums';\n\nconst MODULES = [CommonModule];\nconst COMPONENTS = [AppIconComponent];\n\n@Component({\n selector: 'prompt-list-item',\n templateUrl: './prompt-list-item.component.html',\n imports: [MODULES, COMPONENTS],\n host: {\n '[class]': 'hostClasses()',\n '(mouseenter)': 'handleMouseEnter()',\n '(mouseleave)': 'handleMouseLeave()',\n },\n})\nexport class PromptListItemComponent {\n public readonly prompt: InputSignal<UIPrompt> = input.required<UIPrompt>();\n public readonly isDisplayedInFavoriteList: InputSignal<boolean> = input<boolean>(false);\n\n protected readonly APP_SPINNER_COMPONENT_SIZE = APP_SPINNER_COMPONENT_SIZE;\n protected readonly APP_ICON_VARIANTS = APP_ICON_VARIANTS;\n\n protected readonly isUpdatePending: Signal<boolean> = computed<boolean>(() => {\n return this.prompt().state === USER_PROMPT_STATE.UPDATING;\n });\n protected readonly isDeletePending: Signal<boolean> = computed<boolean>(() => {\n return this.prompt().state === USER_PROMPT_STATE.DELETING;\n });\n\n private readonly _promptFacade: PromptFacade = inject(PromptFacade);\n\n private readonly _favoritePromptNames: Signal<string[]> =\n this._promptFacade.favoritePromptNames;\n protected readonly isCurrentPromptInFavorites: Signal<boolean> = computed<boolean>(() => {\n return this._favoritePromptNames().includes(this.prompt().name);\n });\n\n // Signal to track mouse hover state on host element\n protected readonly isHostHoveredSignal: WritableSignal<boolean> = signal<boolean>(false);\n\n protected hostClasses: Signal<string> = computed<string>(() => {\n const baseClasses = 'flex w-full';\n\n // Only apply width constraints on desktop for favorite lists\n if (this.isDisplayedInFavoriteList()) {\n return `${baseClasses} md:w-auto md:max-w-[352px] md:min-w-[250px] border border-border-default hover:border-border-hover rounded-2xl`;\n }\n\n return baseClasses;\n });\n\n protected handleMouseEnter(): void {\n this.isHostHoveredSignal.set(true);\n }\n\n protected handleMouseLeave(): void {\n this.isHostHoveredSignal.set(false);\n }\n\n protected handlePromptSelect(): void {\n this._promptFacade.dispatchSelectPrompt(this.prompt());\n }\n\n // TODO: Temp function to demonstrate updating a prompt - replace with actual UI interaction once design is ready\n protected handlePromptUpdate(): void {\n const editedMessages: {\n role: 'user' | 'assistant';\n content: { type: 'text'; text: string };\n }[] = [\n {\n role: 'user',\n content: {\n type: 'text',\n text: 'Example edited text',\n },\n },\n ];\n\n this._promptFacade.dispatchUpdatePrompt(\n this.prompt().name,\n editedMessages,\n this.prompt().description + ' (updated)',\n );\n }\n\n protected handlePromptDelete(): void {\n this._promptFacade.dispatchDeletePrompt(this.prompt().name);\n }\n\n protected handlePromptToggleFavorite(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n\n this._promptFacade.dispatchToggleFavoritePrompt(this.prompt().name);\n }\n}\n","@let promptName = prompt().name;\n<!-- @let isAnyOperationPending = isUpdatePending() || isDeletePending(); -->\n<!-- @let favoriteListItemMode = isDisplayedInFavoriteList(); -->\n@let isFavorite = isCurrentPromptInFavorites();\n\n<div\n class=\"flex flex-1 justify-between items-center px-2 py-1 gap-2 cursor-pointer min-w-0\"\n tabindex=\"0\"\n [ngClass]=\"{\n 'hover:bg-app-background-secondary rounded-md': !isDisplayedInFavoriteList(),\n 'h-[48px] hover:shadow-[0_0.5px_0.5px_0.5px_rgba(0,0,0,0.15)] rounded-2xl':\n isDisplayedInFavoriteList(),\n }\"\n (click)=\"handlePromptSelect()\"\n (keyup)=\"handlePromptSelect()\"\n>\n <!-- Prompt Icon -->\n <app-icon\n class=\"shrink-0\"\n [variant]=\"APP_ICON_VARIANTS.PROMPT_PANEL\"\n [isHoveredExternal]=\"isHostHoveredSignal()\"\n ></app-icon>\n\n <!-- Prompt Title -->\n <span\n class=\"flex-1 min-w-0 overflow-hidden text-ellipsis whitespace-nowrap text-xs\"\n [ngClass]=\"{\n 'text-text-default': true,\n 'text-text-states-hover': isHostHoveredSignal(),\n }\"\n >{{ promptName }}</span\n >\n\n <!-- Temporary commenting this out sine we don't have the actions ready yet -->\n <!-- TODO: PROVIDE ICON -->\n <!-- <button\n class=\"p-1 bg-proto-border-default text-proto-text-default disabled:bg-proto-text-disabled disabled:text-proto-text-default disabled:cursor-not-allowed\"\n tabindex=\"0\"\n [disabled]=\"isAnyOperationPending\"\n (click)=\"handlePromptUpdate()\"\n (keyup)=\"handlePromptUpdate()\"\n >\n @if (!isUpdatePending()) {\n Update\n }\n\n @if (isUpdatePending()) {\n <app-spinner [size]=\"APP_SPINNER_COMPONENT_SIZE.SMALL\" />\n }\n </button>\n\n <button\n class=\"p-1 bg-proto-border-default text-proto-text-default disabled:bg-proto-text-disabled disabled:text-proto-text-default disabled:cursor-not-allowed\"\n tabindex=\"0\"\n [disabled]=\"isAnyOperationPending\"\n (click)=\"handlePromptDelete()\"\n (keyup)=\"handlePromptDelete()\"\n >\n @if (!isDeletePending()) {\n Delete\n }\n\n @if (isDeletePending()) {\n <app-spinner [size]=\"APP_SPINNER_COMPONENT_SIZE.SMALL\" />\n }\n </button> -->\n\n <app-icon\n class=\"p-2 ps-1 shrink-0\"\n [variant]=\"isFavorite ? APP_ICON_VARIANTS.STAR_FILLED : APP_ICON_VARIANTS.STAR_OUTLINE\"\n [isHoveredExternal]=\"isHostHoveredSignal()\"\n (click)=\"handlePromptToggleFavorite($event)\"\n ></app-icon>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n computed,\n inject,\n input,\n InputSignal,\n OnInit,\n signal,\n Signal,\n WritableSignal,\n} from '@angular/core';\n\nimport { AppInputComponent } from '../../../shared/components/app-input/app-input.component';\nimport { APP_SPINNER_COMPONENT_SIZE } from '../../../shared/components/app-spinner/enum';\nimport { UI_STRINGS } from '../../../shared/constants/ui-strings';\nimport { PromptFacade } from '../../../shared/store/prompt/prompt.facade';\nimport { Prompt, UIPrompt } from '../../../temp/temp-interfaces';\nimport { PromptListItemComponent } from '../prompt-list-item/prompt-list-item.component';\n\nconst MODULES = [CommonModule];\nconst COMPONENTS = [PromptListItemComponent, AppInputComponent];\n\n@Component({\n selector: 'prompt-list',\n templateUrl: './prompt-list.component.html',\n imports: [...COMPONENTS, ...MODULES],\n providers: [PromptFacade],\n})\nexport class PromptListComponent implements OnInit {\n private readonly _promptFacade: PromptFacade = inject(PromptFacade);\n\n public showFavoriteOnly: InputSignal<boolean> = input<boolean>(false);\n\n protected readonly UI_STRINGS = UI_STRINGS.PROMPT_LIST_COMPONENT;\n protected readonly APP_SPINNER_COMPONENT_SIZE = APP_SPINNER_COMPONENT_SIZE;\n\n private readonly _prompts: Signal<UIPrompt[]> = this._promptFacade.allPrompts;\n private readonly _favoritePromptNames: Signal<string[]> =\n this._promptFacade.favoritePromptNames;\n\n protected searchTerm: WritableSignal<string> = signal<string>('');\n\n protected readonly promptsToDisplay: Signal<UIPrompt[]> = computed(() => {\n return this.showFavoriteOnly()\n ? this._prompts().filter((p) => this._favoritePromptNames().includes(p.name))\n : this._prompts().filter(\n (p) => p.name.toLowerCase().includes(this.searchTerm().toLowerCase()), // Filter by search term when displaying all\n );\n });\n protected readonly isFetchingPrompts: Signal<boolean> = this._promptFacade.isFetchingPrompts;\n protected readonly isCreatingNewPrompt: Signal<boolean> =\n this._promptFacade.isCreatingNewPrompt;\n\n public ngOnInit(): void {\n this._promptFacade.dispatchFetchPrompts();\n }\n\n protected handlePromptCreate(): void {\n const newPrompt: Prompt = {\n name: 'new-prompt-' + crypto.randomUUID(),\n description: 'New prompt description',\n messages: [\n {\n role: 'user',\n content: {\n type: 'text',\n text: 'New prompt message',\n },\n },\n ],\n source: {\n mcpName: 'customPrompts',\n isUserDefined: true,\n },\n };\n\n this._promptFacade.dispatchCreatePrompt(newPrompt);\n }\n}\n","@let isLoading = isFetchingPrompts();\n@let noAvailablePrompts = !isLoading && promptsToDisplay().length === 0;\n@let hasPrompts = !isLoading && promptsToDisplay().length > 0;\n@let isFavoriteOnlyList = showFavoriteOnly();\n@let shouldRenderInfoSection = isLoading || noAvailablePrompts;\n\n@if (!isFavoriteOnlyList && !isLoading) {\n <app-input\n [ngClass]=\"{\n 'sticky top-0': true,\n }\"\n [placeholder]=\"UI_STRINGS.INPUT_TOOLTIP\"\n [showLeadingIcon]=\"true\"\n [showTrailingIcon]=\"true\"\n (onValueChange)=\"searchTerm.set($event)\"\n />\n}\n\n<div\n class=\"prompt-list\"\n [ngClass]=\"{\n 'flex flex-col w-full h-full gap-[10px] py-2 pt-4 min-h-0': true,\n }\"\n>\n @if (isFavoriteOnlyList) {\n <div\n class=\"prompt-list__header\"\n [ngClass]=\"{\n 'flex items-center p-2 w-full shrink-0': true,\n }\"\n >\n <span\n [ngClass]=\"{\n 'text-xs text-text-default tracking-wide': true,\n }\"\n ><p>{{ UI_STRINGS.FAVORITE_PROMPTS }}</p></span\n >\n </div>\n }\n\n <!-- Info section -->\n @if (shouldRenderInfoSection) {\n <div\n class=\"prompt-list__info\"\n [ngClass]=\"{\n 'flex justify-center items-center h-16': true,\n }\"\n >\n @if (isLoading) {\n <span\n [ngClass]=\"{\n 'text-proto-text-default': true,\n }\"\n >{{ UI_STRINGS.LOADING_PROMPTS }}</span\n >\n }\n\n @if (noAvailablePrompts && !isFavoriteOnlyList) {\n <span\n [ngClass]=\"{\n 'text-proto-text-default': true,\n }\"\n >{{ UI_STRINGS.NO_PROMPTS }}</span\n >\n }\n\n @if (noAvailablePrompts && isFavoriteOnlyList) {\n <span\n [ngClass]=\"{\n 'text-proto-text-default': true,\n }\"\n >{{ UI_STRINGS.NO_FAVORITE_PROMPTS }}</span\n >\n }\n </div>\n }\n\n <div\n class=\"prompt-list__items\"\n [ngClass]=\"{\n 'flex flex-col gap-3 w-full min-h-0 overflow-y-auto overflow-x-hidden custom-scrollbar': true,\n 'md:flex-row md:flex-wrap md:justify-center': isFavoriteOnlyList,\n }\"\n >\n @if (hasPrompts) {\n @for (prompt of promptsToDisplay(); track prompt.name) {\n <prompt-list-item\n [prompt]=\"prompt\"\n [isDisplayedInFavoriteList]=\"isFavoriteOnlyList\"\n ></prompt-list-item>\n }\n }\n </div>\n</div>\n\n@if (!isFavoriteOnlyList && !isLoading) {\n <!-- TODO: This is temp add UI when design is ready -->\n <!-- TODO: Use the dummy create functionality in dev only -->\n <!-- <app-button [disabled]=\"isCreatingNewPrompt()\" (click)=\"handlePromptCreate()\">\n @if (!isCreatingNewPrompt()) {\n Create New Prompt\n }\n\n @if (isCreatingNewPrompt()) {\n <app-spinner class=\"mr-2\" [size]=\"APP_SPINNER_COMPONENT_SIZE.SMALL\"></app-spinner>\n }\n </app-button> -->\n}\n","export enum TOOL_ACTIONS {\n FETCH_TOOLS = '[Tool] Fetch Tools',\n FETCH_TOOLS_SUCCESS = '[Tool] Fetch Tools Success',\n FETCH_TOOLS_FAILURE = '[Tool] Fetch Tools Failure',\n TOGGLE_TOOL = '[Tool] Toggle Tool',\n TOGGLE_TOOL_SUCCESS = '[Tool] Toggle Tool Success',\n TOGGLE_TOOL_FAILURE = '[Tool] Toggle Tool Failure',\n}\n","import { createAction, props } from '@ngrx/store';\n\nimport { TOOL_ACTIONS } from './tool.actions.enum';\nimport { UITool } from './types';\n\n// =========================================================================== Fetch\nexport const fetchTools = createAction(TOOL_ACTIONS.FETCH_TOOLS);\nexport const fetchToolsSuccess = createAction(\n TOOL_ACTIONS.FETCH_TOOLS_SUCCESS,\n props<{ tools: UITool[] }>(),\n);\nexport const fetchToolsFailure = createAction(\n TOOL_ACTIONS.FETCH_TOOLS_FAILURE,\n props<{ error: Error }>(),\n);\n\n// =========================================================================== Enable / Disable\nexport const toggleTool = createAction(TOOL_ACTIONS.TOGGLE_TOOL, props<{ tool: UITool }>());\nexport const toggleToolSuccess = createAction(\n TOOL_ACTIONS.TOGGLE_TOOL_SUCCESS,\n props<{ tool: UITool }>(),\n);\nexport const toggleToolFailure = createAction(\n TOOL_ACTIONS.TOGGLE_TOOL_FAILURE,\n props<{ error: Error; tool: UITool }>(),\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { ToolReducerStateType } from './tool.reducer';\nimport { UITool } from './types';\nimport { LOADING_STATE } from '../../enums/loading-state.enum';\n\nexport const selectToolStore = createFeatureSelector<ToolReducerStateType>('toolStore');\n\nexport const selectAllTools = createSelector(\n selectToolStore,\n (state: ToolReducerStateType) => state.tools,\n);\n\nexport const selectToolFetchingState = createSelector(\n selectToolStore,\n (state: ToolReducerStateType) => state.loadingState.fetchingState,\n);\n\nexport const selectIsFetchingTools = createSelector(\n selectToolStore,\n (state: ToolReducerStateType) =>\n state.loadingState.fetchingState.type === LOADING_STATE.LOADING,\n);\n\nexport const selectEnabledTools = createSelector(selectToolStore, (state: ToolReducerStateType) =>\n state.tools.filter((tool: UITool) => tool.enabled),\n);\n","import { inject, Injectable, Signal } from '@angular/core';\nimport { Store } from '@ngrx/store';\n\nimport { fetchTools, toggleTool } from './tool.actions';\nimport { selectAllTools, selectEnabledTools, selectIsFetchingTools } from './tool.selector';\nimport { UITool } from './types';\n\n@Injectable()\nexport class ToolFacade {\n private readonly _store: Store = inject(Store);\n\n private readonly _allTools: Signal<UITool[]> =\n this._store.selectSignal<UITool[]>(selectAllTools);\n public get allTools() {\n return this._allTools;\n }\n\n private readonly _isFetchingTools: Signal<boolean> =\n this._store.selectSignal<boolean>(selectIsFetchingTools);\n public get isFetchingTools(): Signal<boolean> {\n return this._isFetchingTools;\n }\n\n private readonly _enabledTools: Signal<UITool[]> =\n this._store.selectSignal<UITool[]>(selectEnabledTools);\n public get enabledTools(): Signal<UITool[]> {\n return this._enabledTools;\n }\n\n public dispatchFetchTools(): void {\n this._store.dispatch(fetchTools());\n }\n\n public dispatchToggleTool(tool: UITool): void {\n this._store.dispatch(toggleTool({ tool }));\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, input, InputSignal } from '@angular/core';\n\nimport { UI_STRINGS } from '../../../../shared/constants/ui-strings';\nimport { UITool } from '../../../../shared/store/tool/types';\n\n@Component({\n selector: 'tool-info',\n templateUrl: './tool-info.component.html',\n imports: [CommonModule],\n})\nexport class ToolInfoComponent {\n protected readonly UI_STRINGS = UI_STRINGS.TOOL_INFO;\n\n public readonly tool: InputSignal<UITool> = input.required<UITool>();\n}\n","<div\n class=\"flex justify-center bg-app-background-secondary text-text-default border border-border-default p-4 rounded-md leading-[17px] text-xs min-w-[240px] max-w-[320px]\"\n>\n <div>\n <span class=\"text-text-states-active font-weight-600\">Server name: </span>\n {{ tool().source.mcpName }}\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, input, InputSignal, output, OutputEmitterRef } from '@angular/core';\n\nimport { AppIconComponent } from '../app-icon/app-icon.component';\nimport { APP_ICON_SIZES, APP_ICON_VARIANTS } from '../app-icon/enum';\n\nconst MODULES = [CommonModule];\nconst COMPONENTS = [AppIconComponent];\n\n/**\n * AppToggleComponent\n *\n * A reusable toggle switch component that provides a visual on/off state indicator.\n * The component supports disabled state and emits events when toggled.\n *\n * @example\n * ```html\n * <app-toggle\n * [isChecked]=\"isChecked\"\n * [isDisabled]=\"isDisabled\"\n * (onToggle)=\"handleToggle($event)\">\n * </app-toggle>\n * ```\n *\n * @input {boolean} isChecked - Determines if the toggle is in the checked (on) state. Default: false\n * @input {boolean} isDisabled - Determines if the toggle is disabled and cannot be interacted with. Default: false\n *\n * @output {boolean} onToggle - Emits the new checked state when the toggle is clicked\n */\n@Component({\n selector: 'app-toggle',\n imports: [...MODULES, ...COMPONENTS],\n templateUrl: './app-toggle.component.html',\n})\nexport class AppToggleComponent {\n protected readonly APP_ICON_VARIANTS = APP_ICON_VARIANTS;\n protected readonly APP_ICON_SIZES = APP_ICON_SIZES;\n\n public readonly isChecked: InputSignal<boolean> = input<boolean>(false);\n public readonly isDisabled: InputSignal<boolean> = input<boolean>(false);\n\n public readonly onToggle: OutputEmitterRef<boolean> = output<boolean>();\n\n protected handleToggle(): void {\n if (!this.isDisabled()) {\n this.onToggle.emit(!this.isChecked());\n }\n }\n\n protected handleKeyDown(event: KeyboardEvent): void {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.handleToggle();\n }\n }\n}\n","<div\n class=\"app-toggle\"\n [ngClass]=\"{\n 'relative inline-flex items-center w-[34px] h-[16px] rounded-full transition-colors duration-300 ease-in-out': true,\n 'hover:bg-toggle-background-hover-disabled': !isChecked() && !isDisabled(),\n 'hover:bg-toggle-background-hover-enabled': isChecked() && !isDisabled(),\n 'cursor-pointer': !isDisabled(),\n 'cursor-not-allowed opacity-50': isDisabled(),\n 'bg-toggle-background-disabled': !isChecked(),\n 'bg-toggle-background-enabled': isChecked(),\n }\"\n [attr.role]=\"'switch'\"\n [attr.aria-checked]=\"isChecked()\"\n [attr.aria-disabled]=\"isDisabled()\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n (click)=\"handleToggle()\"\n (keydown)=\"handleKeyDown($event)\"\n>\n <div\n class=\"app-toggle__icon-wrapper\"\n [ngClass]=\"{\n 'flex flex-1 justify-end z-10 transition-all duration-300': true,\n 'justify-start': isChecked(),\n }\"\n >\n <app-icon\n class=\"app-toggle__icon\"\n [ngClass]=\"{\n 'm-[4px]': true,\n }\"\n [variant]=\"isChecked() ? APP_ICON_VARIANTS.CHECK : APP_ICON_VARIANTS.CLOSE\"\n [size]=\"APP_ICON_SIZES.XXS\"\n [iconFill]=\"'--app-text-states-active'\"\n [isWrapped]=\"false\"\n >\n </app-icon>\n </div>\n\n <!-- Toggle Circle -->\n <div\n class=\"app-toggle__circle\"\n [ngClass]=\"{\n 'absolute w-[12px] h-[12px] bg-toggle-circle rounded-full transition-all duration-300 ease-in-out flex items-center justify-center': true,\n 'left-[2px]': !isChecked(),\n 'left-[20px]': isChecked(),\n }\"\n ></div>\n</div>\n","export enum TOOLTIP_POSITIONS {\n TOP = 'top',\n BOTTOM = 'bottom',\n LEFT = 'left',\n RIGHT = 'right',\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n HostListener,\n input,\n InputSignal,\n Signal,\n signal,\n viewChild,\n WritableSignal,\n} from '@angular/core';\n\nimport { TOOLTIP_POSITIONS } from './enum';\nimport { TooltipPositionType } from './types';\n\n/**\n * AppTooltipComponent - A flexible tooltip component that displays contextual information.\n *\n * This component intelligently positions a tooltip around a trigger element in one of four directions:\n * TOP, BOTTOM, LEFT, or RIGHT. It automatically measures the tooltip's size and calculates the best\n * position to keep it visible within the viewport.\n *\n * **How it works:**\n * 1. When hovering over the trigger element, the tooltip is rendered but kept invisible\n * 2. The component measures the tooltip's actual width and height\n * 3. It calculates the ideal position based on the trigger element's location and the chosen direction\n * 4. If the tooltip would go outside the viewport, it adjusts the position to keep it visible (with 8px padding)\n * 5. Once positioned, the tooltip smoothly fades in with a 150ms transition\n * 6. The tooltip automatically repositions itself when the window is scrolled or resized\n *\n * **TOP Placement Calculation (Visual Schema):**\n * ```\n * ┌─────────────────────────────────────────┐\n * │ Viewport │\n * │ │\n * │ ┌───────────────┐ │\n * │ │ Tooltip │ ← y = triggerRect.top - tooltipHeight - offset\n * │ └───────────────┘ │\n * │ ↑ │\n * │ (offset) │\n * │ ↓ │\n * │ ┌─────────────┐ │\n * │ │ Trigger │ │\n * │ └─────────────┘ │\n * │ ↑ ↑ │\n * │ rect.left rect.left + width │\n * │ │\n * │ x = rect.left + (width / 2) - (tooltipWidth / 2)\n * │ └─────┬─────┘ └────┬────┘ │\n * │ trigger center center tooltip │\n * └─────────────────────────────────────────┘\n *\n * Horizontal (x): Center tooltip above trigger\n * • Start at trigger's left edge\n * • Move right by half the trigger's width (finds center)\n * • Move left by half the tooltip's width (centers tooltip)\n *\n * Vertical (y): Place tooltip above trigger\n * • Start at trigger's top edge\n * • Move up by tooltip's full height\n * • Move up by offset distance (gap between elements)\n *\n * Clamping: Keep tooltip within viewport bounds\n * • Ensure x is at least 8px from left edge\n * • Ensure x leaves 8px space on right edge\n * ```\n *\n * **Usage:**\n * ```html\n * <app-tooltip [tooltipPosition]=\"'top'\" [triggerOffset]=\"14\">\n * <button tooltip-trigger>Hover me</button>\n * <span tooltip-content>This is the tooltip text</span>\n * </app-tooltip>\n * ```\n *\n * @input tooltipPosition - Where to show the tooltip: 'top' | 'bottom' | 'left' | 'right' (default: 'top')\n * @input triggerOffset - Distance in pixels between the trigger element and tooltip (default: 14)\n */\n@Component({\n selector: 'app-tooltip',\n templateUrl: './app-tooltip.component.html',\n imports: [CommonModule],\n})\nexport class AppTooltipComponent {\n protected readonly TOOLTIP_POSITIONS = TOOLTIP_POSITIONS;\n\n public readonly tooltipPosition: InputSignal<TooltipPositionType> = input<TooltipPositionType>(\n this.TOOLTIP_POSITIONS.TOP,\n );\n public readonly triggerOffset: InputSignal<number> = input<number>(14);\n\n protected readonly isVisible: WritableSignal<boolean> = signal<boolean>(false);\n protected readonly isPositioned: WritableSignal<boolean> = signal<boolean>(false);\n protected readonly coordinates: WritableSignal<{ x: number; y: number }> = signal<{\n x: number;\n y: number;\n }>({\n x: 0,\n y: 0,\n });\n protected readonly tooltipWidth: WritableSignal<number> = signal<number>(0);\n protected readonly tooltipHeight: WritableSignal<number> = signal<number>(0);\n\n // View Children\n protected readonly tooltipTriggerElement: Signal<ElementRef | undefined> =\n viewChild('triggerElement');\n protected readonly tooltipContainer: Signal<ElementRef | undefined> =\n viewChild('tooltipContainer');\n\n protected async showTooltip(): Promise<void> {\n this.isVisible.set(true);\n this.isPositioned.set(false);\n\n // Wait for next frame to ensure DOM is rendered\n await new Promise((resolve) => requestAnimationFrame(resolve));\n\n const el = this.tooltipContainer()?.nativeElement;\n\n if (!el) return;\n\n this.measureTooltip(); // measures real width/height\n this.updatePosition(); // calculates coordinates and sets them\n\n this.isPositioned.set(true);\n }\n\n protected hideTooltip(): void {\n this.isVisible.set(false);\n this.isPositioned.set(false);\n }\n\n @HostListener('window:scroll')\n @HostListener('window:resize')\n onViewportChange() {\n if (this.isVisible()) {\n this.updatePosition();\n }\n }\n\n private updatePosition(): void {\n const triggerEl = this.tooltipTriggerElement()?.nativeElement;\n const tooltipWidth: number = this.tooltipWidth();\n const tooltipHeight: number = this.tooltipHeight();\n\n if (!triggerEl || tooltipWidth === 0 || tooltipHeight === 0) {\n console.warn('Tooltip positioning skipped:', {\n triggerEl: !!triggerEl,\n tooltipWidth,\n tooltipHeight,\n });\n\n return;\n }\n\n const triggerRect = triggerEl.getBoundingClientRect();\n const offset: number = this.triggerOffset();\n\n let x: number = 0;\n let y: number = 0;\n\n let position: TooltipPositionType = this.tooltipPosition();\n\n if (!position) {\n console.warn('Invalid tooltip position:', position, 'Falling back to TOP');\n\n position = TOOLTIP_POSITIONS.TOP;\n }\n\n if (position === TOOLTIP_POSITIONS.TOP) {\n // Center horizontally above trigger\n x = triggerRect.left + triggerRect.width / 2 - tooltipWidth / 2;\n y = triggerRect.top - tooltipHeight - offset;\n\n // Clamp horizontally to viewport\n x = Math.max(8, Math.min(x, window.innerWidth - tooltipWidth - 8));\n }\n\n if (position === TOOLTIP_POSITIONS.BOTTOM) {\n // Center horizontally below trigger\n x = triggerRect.left + triggerRect.width / 2 - tooltipWidth / 2;\n y = triggerRect.bottom + offset;\n\n // Clamp horizontally to viewport\n x = Math.max(8, Math.min(x, window.innerWidth - tooltipWidth - 8));\n }\n\n if (position === TOOLTIP_POSITIONS.LEFT) {\n // Center vertically to the left of trigger\n x = triggerRect.left - tooltipWidth - offset;\n y = triggerRect.top + triggerRect.height / 2 - tooltipHeight / 2;\n\n // Clamp vertically to viewport\n y = Math.max(8, Math.min(y, window.innerHeight - tooltipHeight - 8));\n }\n\n if (position === TOOLTIP_POSITIONS.RIGHT) {\n // Center vertically to the right of trigger\n x = triggerRect.right + offset;\n y = triggerRect.top + triggerRect.height / 2 - tooltipHeight / 2;\n\n // Clamp vertically to viewport\n y = Math.max(8, Math.min(y, window.innerHeight - tooltipHeight - 8));\n }\n\n this.coordinates.set({ x, y });\n }\n\n private measureTooltip(): void {\n const el = this.tooltipContainer()?.nativeElement;\n if (!el) return;\n\n const rect = el.getBoundingClientRect();\n\n this.tooltipWidth.set(rect.width);\n this.tooltipHeight.set(rect.height);\n }\n}\n","<span\n #triggerElement\n [ngClass]=\"{\n 'inline-block': true,\n }\"\n (mouseenter)=\"showTooltip()\"\n (mouseleave)=\"hideTooltip()\"\n (focusin)=\"showTooltip()\"\n (focusout)=\"hideTooltip()\"\n>\n <ng-content select=\"[tooltip-trigger]\"></ng-content>\n</span>\n\n<!-- Tooltip Template -->\n<ng-template #tooltipTemplate>\n <div\n #tooltipContainer\n class=\"app-tooltip\"\n [ngClass]=\"{\n 'fixed z-[999999] pointer-events-none transition-opacity duration-150': true,\n 'opacity-0': !isPositioned(),\n 'opacity-100': isPositioned(),\n }\"\n [ngStyle]=\"{ left: coordinates().x + 'px', top: coordinates().y + 'px' }\"\n >\n <ng-content select=\"[tooltip-content]\"></ng-content>\n </div>\n</ng-template>\n\n<!-- Rendered tooltip -->\n@if (isVisible()) {\n <ng-container *ngTemplateOutlet=\"tooltipTemplate\"></ng-container>\n}\n","export enum USER_TOOL_STATE {\n IDLE = 'IDLE',\n ENABLING_DISABLING = 'ENABLING_DISABLING',\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n computed,\n inject,\n input,\n InputSignal,\n signal,\n Signal,\n WritableSignal,\n} from '@angular/core';\n\nimport { ToolInfoComponent } from './tool-info/tool-info.component';\nimport { AppIconComponent } from '../../../shared/components/app-icon/app-icon.component';\nimport { APP_ICON_SIZES, APP_ICON_VARIANTS } from '../../../shared/components/app-icon/enum';\nimport { APP_SPINNER_COMPONENT_SIZE } from '../../../shared/components/app-spinner/enum';\nimport { AppToggleComponent } from '../../../shared/components/app-toggle/app-toggle.component';\nimport { AppTooltipComponent } from '../../../shared/components/app-tooltip/app-tooltip.component';\nimport { TOOLTIP_POSITIONS } from '../../../shared/components/app-tooltip/enum';\nimport { UI_STRINGS } from '../../../shared/constants/ui-strings';\nimport { USER_TOOL_STATE } from '../../../shared/store/tool/enums';\nimport { ToolFacade } from '../../../shared/store/tool/tool.facade';\nimport { UITool } from '../../../shared/store/tool/types';\n\nconst COMPONENTS = [AppToggleComponent, AppIconComponent, AppTooltipComponent, ToolInfoComponent];\nconst MODULES = [CommonModule];\n\n@Component({\n selector: 'tool-list-item',\n templateUrl: './tool-list-item.component.html',\n imports: [...COMPONENTS, ...MODULES],\n host: {\n '(mouseenter)': 'handleMouseEnter()',\n '(mouseleave)': 'handleMouseLeave()',\n },\n})\nexport class ToolListItemComponent {\n public readonly tool: InputSignal<UITool> = input.required<UITool>();\n\n protected readonly APP_SPINNER_COMPONENT_SIZE = APP_SPINNER_COMPONENT_SIZE;\n protected readonly UI_STRINGS = UI_STRINGS.TOOL_LIST_ITEM_COMPONENT;\n protected readonly APP_ICON_VARIANTS = APP_ICON_VARIANTS;\n protected readonly APP_ICON_SIZES = APP_ICON_SIZES;\n protected readonly TOOLTIP_POSITIONS = TOOLTIP_POSITIONS;\n\n private readonly _toolFacade: ToolFacade = inject(ToolFacade);\n private readonly _enabledTools: Signal<UITool[]> = this._toolFacade.enabledTools;\n\n protected isHovered: WritableSignal<boolean> = signal<boolean>(false);\n\n protected readonly isEnabled: Signal<boolean> = computed<boolean>(() =>\n this._enabledTools().includes(this.tool()),\n );\n protected readonly isOperationPending: Signal<boolean> = computed<boolean>(\n () => this.tool().state !== USER_TOOL_STATE.IDLE,\n );\n\n protected handleToolToggle(tool: UITool): void {\n return this._toolFacade.dispatchToggleTool(tool);\n }\n\n protected handleMouseEnter(): void {\n this.isHovered.set(true);\n }\n\n protected handleMouseLeave(): void {\n this.isHovered.set(false);\n }\n}\n","@let toolName = tool().name;\n<div\n class=\"flex justify-between content-center items-center px-2 py-1 gap-2 cursor-pointer rounded-md\"\n tabindex=\"0\"\n [ngClass]=\"{\n 'hover:bg-app-background-secondary': isHovered(),\n }\"\n>\n <app-toggle [isChecked]=\"isEnabled()\" (onToggle)=\"handleToolToggle(tool())\" />\n\n <!-- Tool Title -->\n <span\n class=\"flex flex-1 text-text-default text-xs\"\n [ngClass]=\"{\n 'text-text-states-hover': isHovered(),\n }\"\n >{{ toolName }}</span\n >\n\n <!-- Tool Info -->\n <!-- TODO: Implement -->\n <app-tooltip [tooltipPosition]=\"TOOLTIP_POSITIONS.TOP\">\n <app-icon\n tooltip-trigger\n [variant]=\"APP_ICON_VARIANTS.INFO\"\n [iconFill]=\"!isHovered() ? '--app-text-default' : '--app-text-states-active'\"\n [hoverBackgroundColor]=\"'--app-icon-background-hover'\"\n [size]=\"APP_ICON_SIZES.XS\"\n ></app-icon>\n\n <tool-info tooltip-content [tool]=\"tool()\"></tool-info>\n </app-tooltip>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, OnInit, signal, Signal, WritableSignal } from '@angular/core';\n\nimport { AppInputComponent } from '../../../shared/components/app-input/app-input.component';\nimport { UI_STRINGS } from '../../../shared/constants/ui-strings';\nimport { ToolFacade } from '../../../shared/store/tool/tool.facade';\nimport { UITool } from '../../../shared/store/tool/types';\nimport { ToolListItemComponent } from '../tool-list-item/tool-list-item.component';\n\nconst MODULES = [CommonModule];\nconst COMPONENTS = [ToolListItemComponent, AppInputComponent];\n\n@Component({\n selector: 'tool-list',\n templateUrl: './tool-list.component.html',\n imports: [...MODULES, ...COMPONENTS],\n providers: [ToolFacade],\n})\nexport class ToolListComponent implements OnInit {\n protected readonly UI_STRINGS = UI_STRINGS.TOOL_LIST_COMPONENT;\n\n private readonly _toolFacade: ToolFacade = inject(ToolFacade);\n\n protected readonly tools: Signal<UITool[]> = this._toolFacade.allTools;\n protected readonly isLoading: Signal<boolean> = this._toolFacade.isFetchingTools;\n\n protected searchTerm: WritableSignal<string> = signal<string>('');\n\n protected readonly filteredTools: Signal<UITool[]> = computed(() => {\n if (!this.searchTerm()) {\n return this.tools();\n }\n return this.tools().filter((tool) =>\n tool.name.toLowerCase().includes(this.searchTerm().toLowerCase()),\n );\n });\n\n public ngOnInit(): void {\n this._toolFacade.dispatchFetchTools();\n }\n}\n","@let isLoadingTools = isLoading();\n@let hasTools = !isLoadingTools && filteredTools().length > 0;\n@let noAvailableTools = !isLoadingTools && filteredTools().length === 0;\n\n@if (!isLoadingTools) {\n <app-input\n [ngClass]=\"{\n 'sticky top-0': true,\n }\"\n [placeholder]=\"UI_STRINGS.INPUT_TOOLTIP\"\n [showLeadingIcon]=\"true\"\n [showTrailingIcon]=\"true\"\n (onValueChange)=\"searchTerm.set($event)\"\n />\n}\n\n<div\n class=\"tool-list\"\n [ngClass]=\"{\n 'flex flex-col items-center gap-3 pt-4': true,\n }\"\n>\n @if (isLoadingTools) {\n <span\n [ngClass]=\"{\n 'text-proto-text-default': true,\n }\"\n >{{ UI_STRINGS.LOADING_TOOLS }}</span\n >\n }\n\n @if (hasTools) {\n @for (tool of filteredTools(); track tool.name) {\n <tool-list-item\n [ngClass]=\"{\n 'w-full': true,\n }\"\n [tool]=\"tool\"\n ></tool-list-item>\n }\n }\n\n @if (noAvailableTools) {\n <span\n [ngClass]=\"{\n 'text-proto-text-default': true,\n }\"\n >{{ UI_STRINGS.NO_TOOLS }}</span\n >\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject } from '@angular/core';\n\nimport { APP_BUTTON_TYPES } from '../../../shared/components/app-button/enum';\nimport { AppIconComponent } from '../../../shared/components/app-icon/app-icon.component';\nimport { APP_ICON_SIZES, APP_ICON_VARIANTS } from '../../../shared/components/app-icon/enum';\nimport { PANEL_BUTTON_ACTION_TYPE } from '../../../shared/components/app-panel/enums';\nimport { UI_STRINGS } from '../../../shared/constants/ui-strings';\nimport { OverlayService } from '../../../shared/services/overlay/overlay.service';\nimport { WebSearchFacade } from '../../../shared/store/web-search/web-search.facade';\nimport { PromptListComponent } from '../../prompt/prompt-list/prompt-list.component';\nimport { ToolListComponent } from '../../tool/tool-list/tool-list.component';\n\nconst MODULES = [CommonModule];\nconst COMPONENTS = [AppIconComponent];\n\n@Component({\n selector: 'input-area-action-bar',\n imports: [...MODULES, ...COMPONENTS],\n templateUrl: './input-area-action-bar.component.html',\n providers: [WebSearchFacade],\n})\nexport class InputAreaActionBarComponent {\n protected readonly UI_STRINGS = UI_STRINGS;\n protected readonly APP_ICON_VARIANTS = APP_ICON_VARIANTS;\n protected readonly APP_ICON_SIZES = APP_ICON_SIZES;\n\n // Provided in root\n private readonly _overlayService: OverlayService = inject(OverlayService);\n // Provided in current component\n private readonly _webSearchFacade: WebSearchFacade = inject(WebSearchFacade);\n\n // protected readonly isWebSearchEnabled: Signal<boolean> =\n // this._webSearchFacade.isWebSearchEnabled;\n // protected readonly isWebSearchEnabledPending: Signal<boolean> =\n // this._webSearchFacade.isWebSearchEnabledPending;\n\n // Temporary Hide the control of web search until we decide how to handle it\n // public ngOnInit(): void {\n // this._webSearchFacade.dispatchFetchWebSearchEnabledPrefsState();\n // }\n\n protected handlePromptPanelOverlayOpen(): void {\n this._overlayService.showPanelOverlay({\n title: UI_STRINGS.PROMPT_LIST_COMPONENT.AVAILABLE_PROMPTS,\n content: PromptListComponent,\n isHeaderCloseButtonDisplayed: true,\n footerButtons: [\n {\n label: UI_STRINGS.GENERAL.CANCEL,\n action: PANEL_BUTTON_ACTION_TYPE.CLOSE,\n type: APP_BUTTON_TYPES.DEFAULT,\n },\n ],\n });\n }\n\n protected handleToolPanelOverlayOpen(): void {\n this._overlayService.showPanelOverlay({\n title: UI_STRINGS.TOOL_LIST_COMPONENT.AVAILABLE_TOOLS,\n content: ToolListComponent,\n isHeaderCloseButtonDisplayed: true,\n footerButtons: [\n {\n label: UI_STRINGS.GENERAL.CANCEL,\n action: PANEL_BUTTON_ACTION_TYPE.CLOSE,\n type: APP_BUTTON_TYPES.DEFAULT,\n },\n ],\n });\n }\n\n // protected handleWebSearchToggle(): void {\n // this._webSearchFacade.dispatchToggleWebSearchEnabled(this.isWebSearchEnabled());\n // }\n}\n","<div\n class=\"input-area-action-bar\"\n [ngClass]=\"{\n 'flex flex-1 gap-0.5': true,\n }\"\n>\n <!-- TODO: Replace below text with icons -->\n <app-icon\n [variant]=\"APP_ICON_VARIANTS.PROMPT_PANEL\"\n [size]=\"APP_ICON_SIZES.S\"\n [hoverBackgroundColor]=\"'app-icon-background-hover'\"\n (onClick)=\"handlePromptPanelOverlayOpen()\"\n >\n </app-icon>\n <app-icon\n [variant]=\"APP_ICON_VARIANTS.TOOL_PANEL\"\n [size]=\"APP_ICON_SIZES.S\"\n [hoverBackgroundColor]=\"'app-icon-background-hover'\"\n (onClick)=\"handleToolPanelOverlayOpen()\"\n >\n </app-icon>\n <!-- TODO:\n * Provide Icon\n * Temporary Hide the control of web search until we decide how to handle it -->\n <!-- <button\n class=\"px-4 py-2 bg-proto-border-default text-proto-text-default rounded hover:bg-proto-background-light cursor-pointer\"\n [disabled]=\"isWebSearchEnabledPending()\"\n (click)=\"handleWebSearchToggle()\"\n >\n @if (isWebSearchEnabledPending()) {\n Loading...\n } @else if (isWebSearchEnabled()) {\n Disable Web Search\n } @else {\n Enable Web Search\n }\n </button> -->\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n inject,\n input,\n InputSignal,\n output,\n OutputEmitterRef,\n Signal,\n} from '@angular/core';\n\nimport { AppIconComponent } from '../../../shared/components/app-icon/app-icon.component';\nimport { APP_ICON_SIZES, APP_ICON_VARIANTS } from '../../../shared/components/app-icon/enum';\nimport { MessageFacade } from '../../../shared/store/message/message.facade';\nimport { UIUserMessage, UI_MESSAGE_ROLES } from '../../../shared/store/message/types';\nimport { ThreadFacade } from '../../../shared/store/thread/thread.facade';\n\nconst COMPONENTS = [AppIconComponent];\nconst MODULES = [CommonModule];\n\n@Component({\n selector: 'input-area-send-button',\n imports: [...MODULES, ...COMPONENTS],\n templateUrl: './input-area-send-button.component.html',\n})\nexport class InputAreaSendButtonComponent {\n public readonly APP_ICON_VARIANTS = APP_ICON_VARIANTS;\n public readonly APP_ICON_SIZES = APP_ICON_SIZES;\n\n public readonly userQuery: InputSignal<string> = input.required<string>();\n public readonly onSend: OutputEmitterRef<void> = output<void>();\n\n // Provided in root\n private readonly _threadFacade: ThreadFacade = inject(ThreadFacade);\n\n // Provided by parent\n private readonly _messageFacade: MessageFacade = inject(MessageFacade);\n\n protected readonly messageLength: Signal<number> = this._messageFacade.messageLength;\n protected readonly isGeneratingResponse: Signal<boolean> =\n this._messageFacade.isGeneratingResponse;\n protected readonly isLoadingMessagesFromThread: Signal<boolean> =\n this._messageFacade.isLoadingMessagesFromThread;\n private readonly _activeThreadId: Signal<string | null> = this._threadFacade.activeThreadId;\n\n public handleSendMessage(): void {\n if (this.userQuery().trim() === '') {\n return;\n }\n\n if (this.isGeneratingResponse() || this.isLoadingMessagesFromThread()) {\n return;\n }\n\n const userMessage: UIUserMessage = {\n id: crypto.randomUUID(),\n role: UI_MESSAGE_ROLES.USER,\n content: this.userQuery().trim(),\n };\n\n // Passing a random thread ID will create a new thread on the backend\n const activeThreadId: string = this._activeThreadId() ?? crypto.randomUUID();\n\n if (!this._activeThreadId()) {\n // If there is no active thread ID, we need to create a new thread\n this._threadFacade.dispatchChangeActiveThread(activeThreadId);\n }\n\n this._messageFacade.dispatchGetResponse({\n messages: [userMessage],\n threadId: activeThreadId,\n });\n\n this.onSend.emit();\n }\n\n protected handleStopMessage(): void {\n this._messageFacade.dispatchAbortResponseGeneration();\n }\n}\n","@let showStopButton = isGeneratingResponse() && messageLength() > 0;\n@let disableInputButton = (!userQuery().trim() || isLoadingMessagesFromThread()) && !showStopButton;\n\n@let showDefaultIcon = !showStopButton && disableInputButton;\n@let showSendIcon = !showStopButton && !disableInputButton;\n\n@if (showDefaultIcon) {\n <app-icon\n [isDisabled]=\"disableInputButton\"\n [backgroundColor]=\"'--app-icon-background-disabled'\"\n [disabledIconFill]=\"'--app-icon-disabled'\"\n [variant]=\"APP_ICON_VARIANTS.PAPER_PLANE\"\n [size]=\"APP_ICON_SIZES.S\"\n ></app-icon>\n}\n\n@if (showSendIcon) {\n <app-icon\n [variant]=\"APP_ICON_VARIANTS.ARROW_UP\"\n [backgroundColor]=\"'--app-accent-color-1'\"\n [iconFill]=\"'--app-neutrals-0'\"\n [hoverIconFill]=\"'--app-neutrals-0'\"\n [hoverBackgroundColor]=\"'--app-accent-color-1'\"\n [size]=\"APP_ICON_SIZES.S\"\n (onClick)=\"handleSendMessage()\"\n ></app-icon>\n}\n\n@if (showStopButton) {\n <app-icon\n [variant]=\"APP_ICON_VARIANTS.RECTANGLE\"\n [backgroundColor]=\"'--app-accent-color-1'\"\n [iconFill]=\"'--app-neutrals-0'\"\n [hoverIconFill]=\"'--app-neutrals-0'\"\n [hoverBackgroundColor]=\"'--app-accent-color-1'\"\n [size]=\"APP_ICON_SIZES.S\"\n (onClick)=\"handleStopMessage()\"\n ></app-icon>\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n computed,\n ElementRef,\n inject,\n Signal,\n signal,\n viewChild,\n WritableSignal,\n OnInit,\n} from '@angular/core';\n\nimport { InputAreaActionBarComponent } from './input-area-action-bar/input-area-action-bar.component';\nimport { InputAreaSendButtonComponent } from './input-area-send-button/input-area-send-button.component';\nimport { UI_STRINGS } from '../../shared/constants/ui-strings';\nimport { ComponentEffectManagerService as EffectService } from '../../shared/services/component-effect-manager/component-effect-manager.service';\nimport { MessageFacade } from '../../shared/store/message/message.facade';\nimport { UI_MESSAGE_ROLES, UIMessage, UIUserMessage } from '../../shared/store/message/types';\nimport { PromptFacade } from '../../shared/store/prompt/prompt.facade';\nimport { Prompt } from '../../temp/temp-interfaces';\n\nconst COMPONENTS = [InputAreaActionBarComponent, InputAreaSendButtonComponent];\nconst MODULES = [CommonModule];\n\n// TODO: Simplify component - extract into smaller components - input area - input field, button area, etc.\n@Component({\n selector: 'input-area',\n templateUrl: './input-area.component.html',\n styleUrls: ['./input-area.component.css'],\n imports: [COMPONENTS, MODULES],\n providers: [\n PromptFacade,\n {\n provide: EffectService,\n useFactory: () => new EffectService('InputAreaComponent'),\n },\n ],\n})\nexport class InputAreaComponent implements OnInit {\n protected inputValue: WritableSignal<string> = signal<string>('');\n\n protected readonly UI_STRINGS = UI_STRINGS.INPUT_COMPONENT;\n protected readonly sendButton: Signal<InputAreaSendButtonComponent | undefined> = viewChild(\n InputAreaSendButtonComponent,\n );\n protected readonly inputAreaRef: Signal<ElementRef | undefined> =\n viewChild<ElementRef>('inputTextArea');\n\n // Provided in current component\n private readonly _promptFacade: PromptFacade = inject(PromptFacade);\n private readonly _effectService: EffectService = inject(EffectService);\n\n // Provided by parent\n private readonly _messageFacade: MessageFacade = inject(MessageFacade);\n private readonly _userMessages: Signal<UIUserMessage[]> = computed<UIUserMessage[]>(() => {\n const allMessages: UIMessage[] = this._messageFacade.allMessages();\n\n return allMessages.filter((message: UIMessage) => message.role === UI_MESSAGE_ROLES.USER);\n });\n private readonly _currentUserMessage: WritableSignal<UIUserMessage | null> =\n signal<UIUserMessage | null>(null);\n\n private readonly _selectedPrompt: Signal<Prompt | null> = this._promptFacade.selectedPrompt;\n\n public ngOnInit(): void {\n this.registerEffects();\n }\n\n protected handleInputChange(event: Event): void {\n const target: HTMLTextAreaElement = event.target as HTMLTextAreaElement;\n\n this.setInputValue(target.value);\n }\n\n private setInputValue(value: string): void {\n this.inputValue.set(value);\n\n // Use queueMicrotask to ensure textarea DOM updates are applied before calculating scrollHeight for resize\n queueMicrotask(() => this.resizeTextArea());\n }\n\n protected handleKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Enter' && event.shiftKey) {\n return;\n }\n\n if (event.key === 'Enter') {\n // Prevent adding a new line\n event.preventDefault();\n\n // send message\n this.sendButton()?.handleSendMessage();\n return;\n }\n\n if (event.key === 'ArrowUp' && event.shiftKey) {\n this.browseUserMessages('up');\n }\n\n if (event.key === 'ArrowDown' && event.shiftKey) {\n this.browseUserMessages('down');\n }\n }\n\n private browseUserMessages(direction: 'up' | 'down'): void {\n const userMessages: UIUserMessage[] = this._userMessages();\n\n if (userMessages.length === 0) {\n return;\n }\n\n const currentMessage: UIUserMessage | null = this._currentUserMessage();\n\n const isAtFirstMessage: boolean =\n currentMessage?.id === this._userMessages()[0].id && direction === 'up';\n\n if (isAtFirstMessage) {\n return;\n }\n\n const hasReachedLast: boolean =\n this._currentUserMessage()?.id ===\n this._userMessages()[this._userMessages().length - 1].id && direction === 'down';\n\n if (hasReachedLast) {\n return;\n }\n\n const currentMessageExists: boolean =\n currentMessage !== null &&\n userMessages.some((msg: UIUserMessage) => msg.id === currentMessage.id);\n\n if (!currentMessageExists) {\n const index: number = direction === 'up' ? userMessages.length - 1 : 0;\n\n this._currentUserMessage.set(userMessages[index]);\n\n return;\n }\n\n const currentMessageIndex: number = userMessages.findIndex(\n (msg: UIUserMessage) => msg.id === currentMessage?.id,\n );\n\n if (direction === 'up') {\n const index: number = currentMessageIndex > 0 ? currentMessageIndex - 1 : 0;\n\n this._currentUserMessage.set(userMessages[index]);\n\n return;\n }\n\n const index: number =\n currentMessageIndex < userMessages.length - 1\n ? currentMessageIndex + 1\n : userMessages.length - 1;\n\n this._currentUserMessage.set(userMessages[index]);\n }\n\n private resizeTextArea(): void {\n const textarea: HTMLTextAreaElement | undefined = this.inputAreaRef()?.nativeElement;\n\n if (!textarea) {\n return;\n }\n\n textarea.style.height = '21px'; // Always reset to initial height\n textarea.style.height = Math.min(textarea.scrollHeight, 260) + 'px';\n }\n\n private registerEffects(): void {\n this._effectService.registerEffect(\n 'InputArea.updatesInputValue.on.currentUserMessage',\n () => {\n const currentMessage = this._currentUserMessage();\n\n if (currentMessage === null) {\n return;\n }\n\n this.setInputValue(currentMessage.content || '');\n },\n );\n\n // TODO: Refactor to set the correct value once we decide how to handle prompt selection:\n // 1. We auto-fill the input area with the prompt description when selected\n // 2. We just set the prompt as context for the AI model and don't fill the input area\n // 3. Something else\n // For now, we just auto-fill the input area with the prompt description when selected.\n this._effectService.registerEffect('InputArea.updatesInputValue.on.selectedPrompt', () => {\n const prompt = this._selectedPrompt();\n\n if (!prompt) return;\n\n // TODO: Replace with actual messages once we decide how to handle prompt selection\n const description = prompt?.description;\n\n if (description === undefined || description == null || description.trim() === '') {\n return;\n }\n\n this.setInputValue(description);\n });\n }\n}\n","<div\n class=\"input-area\"\n [ngClass]=\"{\n 'w-full': true,\n }\"\n>\n <div\n class=\"input-area__container\"\n [ngClass]=\"{\n relative: true,\n }\"\n >\n <!-- External gradient glow/fog effect -->\n <div\n class=\"input-area__glow\"\n style=\"\n background: linear-gradient(\n 90deg,\n var(--app-accent-color-1) 0%,\n var(--app-accent-color-2) 100%\n );\n \"\n [ngClass]=\"{\n 'absolute inset-6 opacity-0 blur-3xl animate-gradient-glow': true,\n }\"\n ></div>\n\n <!-- Gradient border effect -->\n <div\n class=\"input-area__border\"\n style=\"\n background: linear-gradient(\n 90deg,\n var(--app-accent-color-1) 0%,\n var(--app-accent-color-2) 100%\n );\n \"\n [ngClass]=\"{\n 'absolute inset-0 p-[2px] rounded-[16px]': true,\n }\"\n >\n <div\n [ngClass]=\"{\n 'w-full h-full bg-app-background rounded-[16px]': true,\n }\"\n ></div>\n </div>\n\n <!-- Main input container -->\n <div\n class=\"input-area__content\"\n [ngClass]=\"{\n 'relative transition-all duration-200': true,\n }\"\n >\n <div\n [ngClass]=\"{\n 'flex flex-col gap-4 p-6': true,\n }\"\n >\n <!-- Text input area -->\n <div\n class=\"input-area__textarea-wrapper\"\n [ngClass]=\"{\n 'flex gap-3 items-start px-1': true,\n }\"\n >\n <textarea\n #inputTextArea\n placeholder=\"{{ UI_STRINGS.INPUT_PLACEHOLDER }}\"\n class=\"input-area__textarea\"\n rows=\"1\"\n [ngClass]=\"{\n 'flex-1 custom-scrollbar text-text-default text-sm leading-4 min-h-[10px] max-h-[260px] resize-none border-none outline-none': true,\n 'placeholder:text-text-states-disabled': true,\n 'hover:placeholder:text-text-default hover:text-text-states-active': true,\n }\"\n [value]=\"inputValue()\"\n (input)=\"handleInputChange($event)\"\n (keydown)=\"handleKeyDown($event)\"\n ></textarea>\n </div>\n <!-- Footer with toolbar and send button -->\n <div\n class=\"input-area__footer\"\n [ngClass]=\"{\n 'flex gap-3 items-center justify-between': true,\n }\"\n >\n <input-area-action-bar\n [ngClass]=\"{\n 'flex-1': true,\n }\"\n ></input-area-action-bar>\n\n <input-area-send-button\n [userQuery]=\"inputValue()\"\n (onSend)=\"inputValue.set('')\"\n ></input-area-send-button>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n input,\n InputSignal,\n OnDestroy,\n signal,\n Signal,\n viewChild,\n WritableSignal,\n} from '@angular/core';\n\nimport { AppIconComponent } from '../../shared/components/app-icon/app-icon.component';\nimport { APP_ICON_VARIANTS, APP_ICON_SIZES } from '../../shared/components/app-icon/enum';\n\nconst MODULES = [CommonModule];\nconst COMPONENTS = [AppIconComponent];\n\n/**\n * A reusable scrollable area component that can:\n * - wrap around any content/component\n * - automatically scroll to the bottom on condition\n * - detect if the user is close to the bottom to display a \"scroll to bottom\" button\n * - observe content changes to recalculate scroll position or spacer height changes\n *\n * Usage:\n * <scroll-area [forceScrollToBottom]=\"true|false\"\n * [isSpacerExpanded]=\"true|false\">\n * ... content ...\n * </scroll-area>\n *\n * @param forceScrollToBottom - if true, the scroll area will automatically scroll to the bottom when new content is added, default is false.\n * @param isSpacerExpanded - if true, a spacer element will be added at the bottom to push content up, default is false.\n * This is useful when you want to ensure that new content is always visible without user interaction.\n * The spacer will collapse gradually as new content grows, until it reaches zero height. Then the content overflows as normal.\n * @param elementToObserve - an optional ElementRef to observe for content changes. If not provided, the scroll area itself will be observed.\n *\n */\n@Component({\n selector: 'scroll-area',\n templateUrl: './scroll-area.component.html',\n imports: [...MODULES, ...COMPONENTS],\n host: {\n class: 'scroll-area flex flex-col flex-1 min-h-0 relative',\n },\n})\nexport class ScrollAreaComponent implements AfterViewInit, OnDestroy {\n protected readonly APP_ICON_VARIANTS = APP_ICON_VARIANTS;\n protected readonly APP_ICON_SIZES = APP_ICON_SIZES;\n\n public shouldExpandSpacer: InputSignal<boolean> = input(false);\n public isForceScrollToBottomEnabled: InputSignal<boolean> = input(false);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public elementToObserve: InputSignal<ElementRef<any> | null> = input<ElementRef<any> | null>(\n null,\n );\n\n protected readonly scrollArea: Signal<ElementRef | undefined> = viewChild<\n ElementRef | undefined\n >('scrollArea');\n protected readonly spacerElement: Signal<ElementRef | undefined> = viewChild<\n ElementRef | undefined\n >('spacerElement');\n protected isCloseToBottom: WritableSignal<boolean> = signal(true);\n\n private readonly _threshold: number = 20; // in pixels\n private _mutationObserver?: MutationObserver | undefined;\n\n public ngAfterViewInit(): void {\n if (!this.scrollArea()?.nativeElement) return;\n\n this._mutationObserver = new MutationObserver(() => {\n // Calculate if we are close to the bottom before the content changes\n this.isCloseToBottom.set(this._calculateIsCloseToBottom());\n\n this.handleSpacerBehavior();\n\n this.handleOnScroll(); // make sure to recalculate if we are close to bottom after content changes to show/hide button\n });\n\n if (!this._mutationObserver) return;\n\n const elToObserve: HTMLElement = this.elementToObserve()\n ? this.elementToObserve()?.nativeElement\n : this.scrollArea()?.nativeElement;\n\n this._mutationObserver.observe(elToObserve, {\n childList: true,\n });\n\n // Initial scroll to bottom on component load\n this.scrollToBottom();\n }\n\n protected scrollToBottom(): void {\n if (!this.scrollArea()) return;\n\n this.scrollArea()?.nativeElement.scrollTo({\n top: this.scrollArea()?.nativeElement.scrollHeight,\n behavior: 'smooth',\n });\n }\n\n protected handleOnScroll(): void {\n this.isCloseToBottom.set(this._calculateIsCloseToBottom());\n }\n\n private _calculateIsCloseToBottom(): boolean {\n if (!this.scrollArea()) return false;\n\n const currentPosition: number =\n this.scrollArea()?.nativeElement.scrollTop +\n this.scrollArea()?.nativeElement.offsetHeight;\n\n const height: number = this.scrollArea()?.nativeElement.scrollHeight;\n\n return height - currentPosition < this._threshold;\n }\n\n private handleSpacerBehavior(): void {\n if (!this.scrollArea() || !this.scrollArea()?.nativeElement) return;\n\n if (!this.spacerElement() || !this.spacerElement()?.nativeElement) return;\n\n const scrollElement: HTMLElement = this.scrollArea()?.nativeElement;\n const spacerElement: HTMLElement = this.spacerElement()?.nativeElement;\n\n if (this.shouldExpandSpacer()) {\n // Push up the spacer to the height of the scroll area minus a small offset to completely hiding content\n spacerElement.style.minHeight = `${scrollElement.clientHeight - 150}px`;\n\n this.scrollToBottom();\n return;\n }\n\n // If spacer is not expanded, reduce its height based on the overflow as content grows inside scroll area\n const overflow: number =\n scrollElement.scrollHeight - scrollElement.scrollTop - scrollElement.clientHeight;\n\n // We should not forget the threshold here as it plays part in showing the scroll to bottom button\n if (overflow <= this._threshold) return;\n\n // Reduce spacer height by the overflow amount\n const newHeight: number = Math.max(spacerElement.offsetHeight - overflow, 0);\n\n spacerElement.style.minHeight = `${newHeight}px`;\n }\n\n public ngOnDestroy(): void {\n if (!this._mutationObserver) return;\n\n this._mutationObserver.disconnect();\n this._mutationObserver = undefined;\n }\n}\n","<div\n #scrollArea\n class=\"scroll-area\"\n [ngClass]=\"{\n 'flex flex-1 flex-col min-h-0 overflow-y-auto custom-scrollbar': true,\n }\"\n (scroll)=\"handleOnScroll()\"\n>\n <ng-content></ng-content>\n\n <div #spacerElement class=\"scroll-area__spacer\"></div>\n</div>\n\n@if (!isCloseToBottom()) {\n <app-icon\n class=\"scroll-area__scroll-to-bottom-button\"\n [ngClass]=\"{\n 'absolute bottom-5 flex flex-1 justify-center items-center self-center cursor-pointer rounded-full shadow-xs transition-shadow shadow-border-default z-999': true,\n 'hover:shadow-border-hover': true,\n 'transition-opacity duration-500 ease-in-out': true,\n }\"\n [variant]=\"APP_ICON_VARIANTS.ARROW_DOWN\"\n [size]=\"APP_ICON_SIZES.S\"\n [backgroundColor]=\"'--app-background-secondary'\"\n (onClick)=\"scrollToBottom()\"\n ></app-icon>\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class CopyToClipboardService {\n public copyToClipboard = async (text: string): Promise<void> => {\n if (!navigator.clipboard) throw new Error('Clipboard API not available');\n\n if (!navigator.clipboard.writeText)\n throw new Error('Clipboard writeText method not available');\n\n try {\n await navigator.clipboard.writeText(text);\n\n console.info('Text copied to clipboard successfully');\n } catch (err) {\n console.warn(\n 'Failed to copy text using Clipboard API, falling back to textarea method',\n err,\n );\n\n /**\n * Fallback when the Clipboard API is not available or fails\n * Reasons that it might fail include:\n * - The user denied permission\n * - The page is not served over HTTPS\n * - The browser doesn't support it or app is rendered in an iframe\n */\n const textarea = document.createElement('textarea');\n\n textarea.value = text; // Set the text to be copied\n\n // Other styling to avoid flash of textarea, moving viewport or tabbing into it\n textarea.style.position = 'fixed';\n textarea.style.opacity = '0';\n textarea.tabIndex = -1;\n textarea.style.left = '-9999px';\n\n document.body.appendChild(textarea);\n\n textarea.focus();\n textarea.select();\n\n // Copy the text\n document.execCommand('copy');\n\n // Clean up\n document.body.removeChild(textarea);\n }\n };\n}\n","import { Component, inject, input } from '@angular/core';\n\nimport { UI_STRINGS } from '../../constants/ui-strings';\nimport { CopyToClipboardService } from '../../services/copy-to-clipboard/copy-to-clipboard.service';\n\n@Component({\n selector: 'app-copy-to-clipboard-button',\n templateUrl: './app-copy-to-clipboard-button.component.html',\n providers: [CopyToClipboardService],\n})\nexport class AppCopyToClipboardButtonComponent {\n public readonly textToCopy = input.required<string>();\n\n protected readonly UI_STRINGS = UI_STRINGS.GENERAL;\n\n private _copyToClipboardService: CopyToClipboardService = inject(CopyToClipboardService);\n\n public handleCopyResponse(): void {\n this._copyToClipboardService.copyToClipboard(this.textToCopy());\n }\n}\n","<button class=\"app-opy-to-clipboard-button\" (click)=\"handleCopyResponse()\">\n <ng-content>{{ UI_STRINGS.COPY }}</ng-content>\n</button>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, input, InputSignal, Signal } from '@angular/core';\n\nimport { AppCopyToClipboardButtonComponent } from '../../../shared/components/app-copy-to-clipboard-button/app-copy-to-clipboard-button.component';\nimport { AppIconComponent } from '../../../shared/components/app-icon/app-icon.component';\nimport { APP_ICON_SIZES, APP_ICON_VARIANTS } from '../../../shared/components/app-icon/enum';\nimport { MessageFacade } from '../../../shared/store/message/message.facade';\nimport { responseToText } from '../../../shared/store/message/message.utils';\nimport { UI_MESSAGE_ROLES, UIMessage, UIUserMessage } from '../../../shared/store/message/types';\nimport { ThreadFacade } from '../../../shared/store/thread/thread.facade';\n\nconst MODULES = [CommonModule];\nconst COMPONENTS = [AppCopyToClipboardButtonComponent, AppIconComponent];\n\n/**\n * The message footer component is rendered below each full response message.\n *\n * Examples:\n *\n * (1) Simple response:\n * ------------- Hello (user message)\n * ------------- Hi there! How can I assist you today? (assistant message)\n * [ Copy ] [ Reload ]\n *\n * (2) Long response:\n * ------------- Hello (user message)\n * ------------- Hello how are you (assistant message)\n * ------------- (more assistant message parts)\n * ------------- (more assistant message parts)\n * ------------- (tool calls)\n * ------------- (tool calls)\n * ------------- (more assistant message parts)\n * [ Copy ] [ Reload ]\n *\n * Where the buttons in the footer allow the user to copy the entire assistant response\n * without the user message\n *\n * Or regenerate the response by re-sending the last user message\n *\n * @messageFooterId - The ID of the user message to which this footer belongs\n * Needed to be able to fetch the corresponding assistant messages.\n * The same as the id of the user message that triggered the response.\n */\n@Component({\n selector: 'message-footer',\n imports: [...MODULES, ...COMPONENTS],\n templateUrl: './message-footer.component.html',\n})\nexport class MessageFooterComponent {\n public readonly messageFooterId: InputSignal<string> = input.required<string>();\n\n protected readonly APP_ICON_VARIANTS = APP_ICON_VARIANTS;\n protected readonly APP_ICON_SIZES = APP_ICON_SIZES;\n\n // Provided in root component\n private readonly _threadFacade: ThreadFacade = inject(ThreadFacade);\n\n // Provided in parent component\n private readonly _messageFacade: MessageFacade = inject(MessageFacade);\n\n private readonly _activeThreadId: Signal<string | null> = this._threadFacade.activeThreadId;\n private readonly _allMessages: Signal<UIMessage[]> = this._messageFacade.allMessages;\n\n protected handleResponseToText(): string {\n return responseToText(this._allMessages(), this.messageFooterId());\n }\n\n protected handleRegenerateResponse() {\n const messageToReload: UIMessage = this._messageFacade.getMessageById(\n this.messageFooterId(),\n );\n\n if (messageToReload.content === '')\n throw new Error('Trying to reload a message with no content.');\n\n const userMessage: UIUserMessage = {\n ...messageToReload, // All others should be the same\n id: crypto.randomUUID(), // only new id is needed\n role: UI_MESSAGE_ROLES.USER, // and role explicitly set\n };\n\n const activeThreadId: string | null = this._activeThreadId();\n\n if (!activeThreadId)\n throw new Error('There are currently no selected threads. Unable to reload.');\n\n this._messageFacade.dispatchReloadResponse({\n messages: [userMessage],\n threadId: activeThreadId,\n });\n }\n}\n","<div\n class=\"message-footer\"\n [ngClass]=\"{\n 'flex flex-1 gap-[2px]': true,\n }\"\n>\n <app-copy-to-clipboard-button [textToCopy]=\"handleResponseToText()\">\n <app-icon [variant]=\"APP_ICON_VARIANTS.COPY\"></app-icon>\n </app-copy-to-clipboard-button>\n <app-icon [variant]=\"APP_ICON_VARIANTS.RELOAD\" (click)=\"handleRegenerateResponse()\"></app-icon>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, input, InputSignal } from '@angular/core';\n\nimport { AppMdFormatterComponent } from '../../../shared/components/app-md-formatter/app-md-formatter.component';\nimport { UIAssistantMessage } from '../../../shared/store/message/types';\nimport { MessageFooterComponent } from '../message-footer/message-footer.component';\n\nconst MODULES = [CommonModule];\nconst COMPONENTS = [AppMdFormatterComponent, MessageFooterComponent];\n\n@Component({\n selector: 'assistant-message',\n templateUrl: './assistant-message.component.html',\n imports: [...MODULES, ...COMPONENTS],\n})\nexport class AssistantMessageComponent {\n public readonly message: InputSignal<UIAssistantMessage> = input.required<UIAssistantMessage>();\n}\n","@let shouldDisplayFooter =\n message().displayFooter && message().responseForUserQueryId && message().content !== '';\n\n<div\n class=\"assistant-message\"\n [ngClass]=\"{\n 'flex flex-col flex-1 self-stretch text-text-states-active leading-[19px]': true,\n }\"\n>\n <app-md-formatter [content]=\"message().content ?? ''\"></app-md-formatter>\n\n @if (shouldDisplayFooter) {\n <message-footer [messageFooterId]=\"message().responseForUserQueryId ?? ''\"></message-footer>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, input, InputSignal } from '@angular/core';\n\nimport { AppIconComponent } from '../../../shared/components/app-icon/app-icon.component';\nimport { APP_ICON_SIZES, APP_ICON_VARIANTS } from '../../../shared/components/app-icon/enum';\nimport { AppMdFormatterComponent } from '../../../shared/components/app-md-formatter/app-md-formatter.component';\nimport { textToJSONMarkdown } from '../../../shared/components/app-md-formatter/utils';\nimport { UI_STRINGS } from '../../../shared/constants/ui-strings';\nimport { MessageFacade } from '../../../shared/store/message/message.facade';\nimport { TOOL_RESULT_TYPES, ToolResult, UIToolMessage } from '../../../shared/store/message/types';\n\nconst MODULES = [CommonModule];\nconst COMPONENTS = [AppIconComponent, AppMdFormatterComponent];\n\n@Component({\n selector: 'tool-message',\n templateUrl: './tool-message.component.html',\n imports: [...MODULES, ...COMPONENTS],\n styleUrls: ['./tool-message.component.css'],\n})\nexport class ToolMessageComponent {\n protected readonly APP_ICON_VARIANTS = APP_ICON_VARIANTS;\n protected readonly APP_ICON_SIZES = APP_ICON_SIZES;\n protected readonly UI_STRINGS = UI_STRINGS.TOOL_MESSAGE;\n\n public readonly message: InputSignal<UIToolMessage> = input.required<UIToolMessage>();\n public readonly parentToolTraceId: InputSignal<string> = input.required<string>();\n\n private readonly _messageFacade: MessageFacade = inject(MessageFacade);\n\n protected handleToggle(): void {\n this._messageFacade.dispatchToggleToolMessage(this.message().id, this.parentToolTraceId());\n }\n\n protected handleArgsToJSONMarkdown(): string {\n return textToJSONMarkdown(this.message().args);\n }\n\n protected handleResultToJSONMarkdown(): string {\n const result = this.message().result;\n\n if (!result) {\n return 'No result available.';\n }\n\n if (!Array.isArray(result)) {\n const parsedResult = this.parseTextResultTextContent(result);\n\n return textToJSONMarkdown(parsedResult);\n }\n\n const parsedResults: ToolResult[] = result.map((res: ToolResult) => {\n if (res.type === TOOL_RESULT_TYPES.TEXT) {\n return this.parseTextResultTextContent(res);\n }\n\n /**\n *\n * TODO: Custom handling for other MCP result types: image, audio\n * For now, return as is:\n *\n * Image Content\n * {\n * \"type\": \"image\",\n * \"data\": \"base64-encoded-image-data\",\n * \"mimeType\": \"image/jpeg\"\n * }\n *\n * Audio Content:\n * {\n * \"type\": \"audio\",\n * \"data\": \"base64-encoded-audio-data\",\n * \"mimeType\": \"audio/mpeg\"\n * }\n */\n return res;\n });\n\n return parsedResults.map((res) => textToJSONMarkdown(res)).join('\\n\\n---\\n\\n');\n }\n\n private parseTextResultTextContent(result: ToolResult): ToolResult {\n let parsedText: unknown;\n\n if (result.type !== TOOL_RESULT_TYPES.TEXT) {\n return result;\n }\n\n if (result.type === TOOL_RESULT_TYPES.TEXT) {\n try {\n parsedText = JSON.parse(result.text as string);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, unused-imports/no-unused-vars\n } catch (_unusedErr: unknown) {\n parsedText = result.text;\n }\n }\n\n return {\n type: result.type,\n text: parsedText,\n } as ToolResult;\n }\n}\n","@let hasResult = message().result !== undefined && message().result !== null;\n@let isExpanded = message().isExpanded !== undefined ? message().isExpanded : false;\n\n<div\n class=\"tool-message-wrapper\"\n [ngClass]=\"{\n 'flex flex-col text-text-states-active justify-start py-2 text-[13px] font-weight-600 leading-[100%]': true,\n }\"\n>\n <div\n class=\"tool-message__header-wrapper\"\n [ngClass]=\"{ 'flex items-center justify-center gap-2 px-1': true }\"\n >\n <app-icon\n [title]=\"\n hasResult ? UI_STRINGS.TOOL_EXECUTION_SUCCESS : UI_STRINGS.TOOL_EXECUTION_PENDING\n \"\n [iconFill]=\"hasResult ? '--app-accent-color-1' : 'text-text-states-active'\"\n [hoverIconFill]=\"hasResult ? '--app-accent-color-1' : 'text-text-states-active'\"\n [size]=\"APP_ICON_SIZES.XXXS\"\n [variant]=\"\n hasResult ? APP_ICON_VARIANTS.CIRCLE_FILLED : APP_ICON_VARIANTS.CIRCLE_OUTLINE\n \"\n ></app-icon>\n\n <div\n class=\"tool-message__header\"\n tabindex=\"0\"\n [ngClass]=\"{ 'flex flex-1 cursor-pointer': true }\"\n (click)=\"handleToggle()\"\n (keyup)=\"handleToggle()\"\n >\n <div class=\"flex flex-1 ps-2 items-center\">\n {{ message().toolName }}\n </div>\n\n <app-icon\n [variant]=\"\n isExpanded ? APP_ICON_VARIANTS.CHEVRON_UP : APP_ICON_VARIANTS.CHEVRON_DOWN\n \"\n ></app-icon>\n </div>\n </div>\n\n @if (isExpanded) {\n <div\n class=\"tool-message__detail-pane\"\n [ngClass]=\"{\n 'flex flex-col gap-4 list-none pt-2 px-2 w-full': true,\n }\"\n >\n <div\n class=\"tool-message__detail-pane-section\"\n [ngClass]=\"{\n 'px-3 border-l border-text-default': true,\n }\"\n >\n <div class=\"tool-message__detail-pane-section-content\" [ngClass]=\"{ 'px-2': true }\">\n <span>Input</span>\n <app-md-formatter [content]=\"handleArgsToJSONMarkdown()\"></app-md-formatter>\n\n <span>Output</span>\n <app-md-formatter [content]=\"handleResultToJSONMarkdown()\"></app-md-formatter>\n </div>\n </div>\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, input, InputSignal, Signal } from '@angular/core';\n\nimport { AppButtonComponent } from '../../../shared/components/app-button/app-button.component';\nimport { AppIconComponent } from '../../../shared/components/app-icon/app-icon.component';\nimport { APP_ICON_VARIANTS } from '../../../shared/components/app-icon/enum';\nimport { UI_STRINGS } from '../../../shared/constants/ui-strings';\nimport { MessageFacade } from '../../../shared/store/message/message.facade';\nimport { ToolTraceState, UI_MESSAGE_ROLES } from '../../../shared/store/message/types';\nimport { ToolMessageComponent } from '../tool-message/tool-message.component';\n\nconst MODULES = [CommonModule];\nconst COMPONENTS = [AppIconComponent, ToolMessageComponent, AppButtonComponent];\n\n@Component({\n selector: 'tool-trace-message',\n templateUrl: './tool-trace-message.component.html',\n imports: [...MODULES, ...COMPONENTS],\n})\nexport class ToolTraceMessageComponent {\n protected readonly APP_ICON_VARIANTS = APP_ICON_VARIANTS;\n protected readonly UI_MESSAGE_ROLES = UI_MESSAGE_ROLES;\n protected readonly UI_STRINGS = UI_STRINGS.TOOL_TRACE_MESSAGE_COMPONENT;\n\n public readonly parentMessage: InputSignal<string> = input.required<string>();\n\n // Provided in parent component\n private readonly _messageFacade: MessageFacade = inject(MessageFacade);\n\n private readonly toolTraceState: Signal<ToolTraceState[]> = this._messageFacade.toolTraceState;\n protected readonly currentToolTraceState: Signal<ToolTraceState | undefined> = computed<\n ToolTraceState | undefined\n >(() => {\n return this.toolTraceState().find(\n (state: ToolTraceState) => state.stateForMessageId === this.parentMessage(),\n );\n });\n\n protected toggleExpanded(): void {\n this._messageFacade.dispatchToggleToolTrace(this.parentMessage());\n }\n}\n","@let uiMessage = currentToolTraceState()?.uiMessage ?? 'No UI Message';\n@let executedTools = currentToolTraceState()?.executedTools ?? [];\n@let isExpanded = currentToolTraceState()?.isExpanded ?? false;\n@let toolTraceId = currentToolTraceState()?.stateForMessageId ?? '';\n\n<div\n class=\"tool-trace-message\"\n [id]=\"'tool-trace-message-' + parentMessage()\"\n [ngClass]=\"{\n 'relative flex flex-col flex-1 gap-2 text-text-default rounded-[8px]': true,\n }\"\n>\n <!-- Gradient border effect - only when expanded -->\n @if (isExpanded) {\n <div\n class=\"tool-trace-message__border\"\n style=\"\n background: linear-gradient(\n 90deg,\n var(--app-accent-color-1) 0%,\n var(--app-accent-color-2) 100%\n );\n \"\n [ngClass]=\"{\n 'absolute inset-0 p-[2px] rounded-[8px]': true,\n }\"\n >\n <div\n [ngClass]=\"{\n 'w-full h-full bg-app-background rounded-[8px]': true,\n }\"\n ></div>\n </div>\n }\n\n <!-- Main content container -->\n <div\n class=\"tool-trace-message__content\"\n [ngClass]=\"{\n 'relative flex flex-col gap-2 px-4 py-6': true,\n }\"\n >\n <div\n class=\"tool-trace-message__header\"\n tabindex=\"0\"\n [ngClass]=\"{\n 'flex items-center gap-2 cursor-pointer hover:text-text-states-active': true,\n 'cursor-default': executedTools.length === 0,\n 'flex-row-reverse justify-end': isExpanded,\n }\"\n (click)=\"toggleExpanded()\"\n (keyup.enter)=\"toggleExpanded()\"\n (keyup.space)=\"toggleExpanded()\"\n >\n <span class=\"tool-trace-message__title\">{{ uiMessage }}</span>\n\n @if (executedTools.length > 0) {\n <app-icon\n class=\"tool-trace-message__expand-icon\"\n [iconFill]=\"isExpanded ? '--app-accent-color-1' : '--app-text-default'\"\n [hoverIconFill]=\"\n isExpanded ? '--app-accent-color-1' : '--app-text-states-active'\n \"\n [title]=\"\n isExpanded ? UI_STRINGS.COLLAPSE_BUTTON_TEXT : UI_STRINGS.EXPAND_BUTTON_TEXT\n \"\n [variant]=\"\n isExpanded\n ? APP_ICON_VARIANTS.CHEVRON_DOWN\n : APP_ICON_VARIANTS.CHEVRON_RIGHT\n \"\n ></app-icon>\n }\n </div>\n\n @if (isExpanded && executedTools.length > 0) {\n <div class=\"tool-trace-message__body\">\n @for (tool of executedTools; track tool.id) {\n <tool-message [message]=\"tool\" [parentToolTraceId]=\"toolTraceId\"></tool-message>\n }\n </div>\n\n <div class=\"tool-trace-message__footer\">\n <app-button (onClick)=\"toggleExpanded()\">{{\n UI_STRINGS.CLOSE_BUTTON_TEXT\n }}</app-button>\n </div>\n }\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, input, InputSignal, Signal } from '@angular/core';\n\nimport { AppIconComponent } from '../../../shared/components/app-icon/app-icon.component';\nimport { APP_ICON_SIZES, APP_ICON_VARIANTS } from '../../../shared/components/app-icon/enum';\nimport { AppSpinnerComponent } from '../../../shared/components/app-spinner/app-spinner.component';\nimport { APP_SPINNER_COMPONENT_SIZE } from '../../../shared/components/app-spinner/enum';\nimport { MessageFacade } from '../../../shared/store/message/message.facade';\nimport { UI_MESSAGE_ROLES, UIMessage, UIUserMessage } from '../../../shared/store/message/types';\nimport { ThreadFacade } from '../../../shared/store/thread/thread.facade';\n\nconst MODULES = [CommonModule];\nconst COMPONENTS = [AppSpinnerComponent, AppIconComponent];\n\n@Component({\n selector: 'user-message',\n templateUrl: './user-message.component.html',\n imports: [...MODULES, ...COMPONENTS],\n})\nexport class UserMessageComponent {\n protected readonly APP_SPINNER_COMPONENT_SIZE = APP_SPINNER_COMPONENT_SIZE;\n protected readonly APP_ICON_VARIANTS = APP_ICON_VARIANTS;\n protected readonly APP_ICON_SIZES = APP_ICON_SIZES;\n\n public readonly message: InputSignal<UIUserMessage> = input.required<UIUserMessage>();\n\n // Provided in root\n private readonly _threadFacade: ThreadFacade = inject(ThreadFacade);\n\n // Provided in parent component\n private readonly _messageFacade: MessageFacade = inject(MessageFacade);\n\n protected readonly isGeneratingResponse: Signal<boolean> =\n this._messageFacade.isGeneratingResponse;\n protected readonly lastUserMessage: Signal<UIUserMessage | undefined> =\n this._messageFacade.lastUserMessage;\n protected readonly error: Signal<string | undefined> = this._messageFacade.loadingErrorMessage;\n\n private readonly _activeThreadId: Signal<string | null> = this._threadFacade.activeThreadId;\n\n protected reloadResponse() {\n const messageToReload: UIMessage = this.message();\n\n const userMessage: UIUserMessage = {\n ...messageToReload, // All others should be the same\n id: crypto.randomUUID(), // only new id is needed\n role: UI_MESSAGE_ROLES.USER, // and role explicitly set\n };\n\n const activeThreadId: string | null = this._activeThreadId();\n\n if (!activeThreadId)\n throw new Error('There are currently no selected threads. Unable to reload.');\n\n this._messageFacade.dispatchReloadResponse({\n messages: [userMessage],\n threadId: activeThreadId,\n });\n }\n}\n","@let showLoadingSpinner = isGeneratingResponse() && message().id === lastUserMessage()?.id;\n@let showReloadButton = error() && message().id === lastUserMessage()?.id;\n@let showError = error() && message().id === lastUserMessage()?.id;\n\n<div\n class=\"user-message\"\n [ngClass]=\"{\n 'flex flex-col justify-end': true,\n }\"\n>\n <div class=\"user-message__inner\" [ngClass]=\"{ 'flex items-end justify-end': true }\">\n <div\n class=\"user-message__actions\"\n [ngClass]=\"{\n 'flex items-end px-2': true,\n }\"\n >\n @if (showLoadingSpinner) {\n <app-spinner [size]=\"APP_SPINNER_COMPONENT_SIZE.SMALL\" />\n }\n\n @if (showReloadButton) {\n <app-icon\n [variant]=\"APP_ICON_VARIANTS.RELOAD\"\n [size]=\"APP_ICON_SIZES.S\"\n [backgroundColor]=\"'--app-accent-color-3'\"\n [iconFill]=\"'--app-neutrals-1000'\"\n [hoverIconFill]=\"'--app-accent-color-3'\"\n (click)=\"reloadResponse()\"\n >Reload</app-icon\n >\n }\n </div>\n\n <div class=\"user-message__content\">\n <div\n class=\"user-message__bubble\"\n [ngClass]=\"{\n 'flex p-4 list-none text-user-message-text bg-user-message-background rounded-2xl max-w-[620px]': true,\n }\"\n >\n {{ message().content }}\n </div>\n </div>\n </div>\n\n @if (showError) {\n <div\n class=\"user-message__error\"\n [ngClass]=\"{\n 'flex justify-end py-1 text-text-danger': true,\n }\"\n >\n {{ error() }}\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, inject, Signal, viewChild } from '@angular/core';\n\nimport { AppSpinnerComponent } from '../../../shared/components/app-spinner/app-spinner.component';\nimport { APP_SPINNER_COMPONENT_SIZE } from '../../../shared/components/app-spinner/enum';\nimport { MessageFacade } from '../../../shared/store/message/message.facade';\nimport { ToolTraceState, UI_MESSAGE_ROLES, UIMessage } from '../../../shared/store/message/types';\nimport { ScrollAreaComponent } from '../../scroll-area/scroll-area.component';\nimport { AssistantMessageComponent } from '../assistant-message/assistant-message.component';\nimport { ToolTraceMessageComponent } from '../tool-trace-message/tool-trace-message.component';\nimport { UserMessageComponent } from '../user-message/user-message.component';\n\nconst COMPONENTS = [\n ScrollAreaComponent,\n AssistantMessageComponent,\n UserMessageComponent,\n AppSpinnerComponent,\n ToolTraceMessageComponent,\n];\nconst MODULES = [CommonModule];\n\n@Component({\n selector: 'message-area',\n templateUrl: './message-area.component.html',\n imports: [...COMPONENTS, ...MODULES],\n})\nexport class MessageAreaComponent {\n protected readonly UI_MESSAGE_ROLES = UI_MESSAGE_ROLES;\n protected readonly APP_SPINNER_COMPONENT_SIZE = APP_SPINNER_COMPONENT_SIZE;\n\n protected readonly messageAreaRef: Signal<ElementRef | undefined> = viewChild<\n ElementRef | undefined\n >('messageArea');\n\n private readonly _messageFacade: MessageFacade = inject(MessageFacade);\n\n protected readonly allMessages: Signal<UIMessage[]> = this._messageFacade.allMessages;\n protected readonly isLoadingMessagesFromThread: Signal<boolean> =\n this._messageFacade.isLoadingMessagesFromThread;\n protected readonly isSuccessFetchedFromThread: Signal<boolean> =\n this._messageFacade.isSuccessFetchedFromThread;\n protected readonly isLastUserMessage: Signal<boolean> = this._messageFacade.isLastUserMessage;\n protected readonly toolTraceState: Signal<ToolTraceState[]> =\n this._messageFacade.toolTraceState;\n\n protected showToolTraceForMessage(messageId: string): boolean {\n return this.toolTraceState().some(\n (state: ToolTraceState) =>\n state.stateForMessageId === messageId && state.executedTools.length > 0,\n );\n }\n}\n","<scroll-area\n [isForceScrollToBottomEnabled]=\"isSuccessFetchedFromThread()\"\n [shouldExpandSpacer]=\"isLastUserMessage()\"\n [elementToObserve]=\"messageAreaRef() ?? null\"\n>\n @if (isLoadingMessagesFromThread()) {\n <div\n [ngClass]=\"{\n 'flex flex-1 justify-center items-center p-4': true,\n }\"\n >\n <app-spinner [size]=\"APP_SPINNER_COMPONENT_SIZE.MEDIUM\"></app-spinner>\n </div>\n }\n\n <div\n #messageArea\n class=\"message-area\"\n [ngClass]=\"{\n 'flex flex-1 flex-col gap-8 w-full min-w-[200px] max-w-[920px] mx-auto px-4': true,\n }\"\n >\n @for (message of allMessages(); track message) {\n @if (message.role === UI_MESSAGE_ROLES.USER) {\n <user-message [message]=\"message\"></user-message>\n <!-- Handles tool messages inside -->\n }\n\n @if (message.role === UI_MESSAGE_ROLES.ASSISTANT) {\n <assistant-message [message]=\"message\"></assistant-message>\n }\n\n @if (showToolTraceForMessage(message.id)) {\n <tool-trace-message [parentMessage]=\"message.id\"></tool-trace-message>\n }\n }\n </div>\n</scroll-area>\n","import { Component } from '@angular/core';\n\nimport { PromptListComponent } from '../prompt-list/prompt-list.component';\n\n@Component({\n selector: 'favorite-prompt-list',\n templateUrl: './favorite-prompt-list.component.html',\n imports: [PromptListComponent],\n})\nexport class FavoritePromptListComponent {}\n","<prompt-list [showFavoriteOnly]=\"true\"></prompt-list>\n","// TODO: Replace this when we decide to support multiple agents\n// Allow dynamic agent selection - keep it saved it a store.\nexport const SELECTED_AGENT = 'ioAgent';\n","export enum THREAD_STATE {\n RENAMING = 'renaming',\n DELETING = 'deleting',\n LOADING = 'loading',\n IDLE = 'idle',\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n inject,\n input,\n InputSignal,\n Signal,\n signal,\n viewChild,\n WritableSignal,\n} from '@angular/core';\n\nimport { AppIconComponent } from '../../../shared/components/app-icon/app-icon.component';\nimport { APP_ICON_SIZES, APP_ICON_VARIANTS } from '../../../shared/components/app-icon/enum';\nimport { AppSpinnerComponent } from '../../../shared/components/app-spinner/app-spinner.component';\nimport { APP_SPINNER_COMPONENT_SIZE } from '../../../shared/components/app-spinner/enum';\nimport { UI_STRINGS } from '../../../shared/constants/ui-strings';\nimport { ComponentEffectManagerService as EffectService } from '../../../shared/services/component-effect-manager/component-effect-manager.service';\nimport { OverlayService } from '../../../shared/services/overlay/overlay.service';\nimport { MessageFacade } from '../../../shared/store/message/message.facade';\nimport { THREAD_STATE } from '../../../shared/store/thread/enums';\nimport { ThreadFacade } from '../../../shared/store/thread/thread.facade';\nimport { UIThread } from '../../../shared/store/thread/types';\n\nconst COMPONENTS = [AppSpinnerComponent, AppIconComponent];\nconst MODULES = [CommonModule];\n\n@Component({\n selector: 'thread-history-list-item',\n templateUrl: './thread-history-list-item.component.html',\n imports: [...MODULES, ...COMPONENTS],\n providers: [\n {\n provide: EffectService,\n useFactory: () => new EffectService('ThreadHistoryListItemComponent'),\n },\n ],\n})\nexport class ThreadHistoryListItemComponent {\n protected readonly UI_STRINGS = UI_STRINGS.GENERAL;\n protected readonly APP_SPINNER_COMPONENT_SIZE = APP_SPINNER_COMPONENT_SIZE;\n protected readonly THREAD_STATE = THREAD_STATE;\n protected readonly APP_ICON_VARIANTS = APP_ICON_VARIANTS;\n protected readonly APP_ICON_SIZES = APP_ICON_SIZES;\n\n public readonly thread: InputSignal<UIThread> = input.required();\n protected isEditModeEnabled: WritableSignal<boolean> = signal<boolean>(false);\n\n protected threadNameInput: Signal<ElementRef | undefined> = viewChild<ElementRef | undefined>(\n 'threadNameInput',\n );\n\n // Provided in root\n private readonly _threadFacade: ThreadFacade = inject(ThreadFacade);\n private readonly _messageFacade: MessageFacade = inject(MessageFacade);\n private readonly _overlayService: OverlayService = inject(OverlayService);\n\n // Provided in current component\n private readonly _effectService: EffectService = inject(EffectService);\n\n protected readonly activeThreadId: Signal<string | null> = this._threadFacade.activeThreadId;\n\n constructor() {\n this.registerEffects();\n }\n\n protected handleEditModeEnable(): void {\n this.isEditModeEnabled.set(true);\n }\n\n protected handleEditModeDisable(): void {\n this.isEditModeEnabled.set(false);\n }\n\n protected handleThreadSelection(): void {\n if (this.isEditModeEnabled()) return;\n\n if (this.thread().id === this.activeThreadId()) {\n return this._overlayService.hideThreadHistory();\n }\n\n this._threadFacade.dispatchChangeActiveThread(this.thread().id);\n\n this._overlayService.hideThreadHistory();\n\n this._messageFacade.dispatchFetchMessagesFromThread(this.thread());\n }\n\n protected onRenameThread(newName: string): void {\n if (newName.trim() === '' || newName === this.thread().title) return;\n\n this._threadFacade.dispatchRenameThread(this.thread(), newName);\n }\n\n protected onDeleteThread(thread: UIThread): void {\n this._threadFacade.dispatchDeleteThread(thread);\n }\n\n private registerEffects(): void {\n this._effectService.registerEffect(\n 'ThreadHistoryListItem.focusThreadNameInput.on.isEditModeEnabled',\n () => this.isEditModeEnabled() && this.threadNameInput()?.nativeElement.focus(),\n );\n }\n}\n","@let isCurrentlyActive = activeThreadId() === thread().id;\n@let isTryingToDeleteThread = thread().state === THREAD_STATE.DELETING;\n@let isTryingToRenameThread = thread().state === THREAD_STATE.RENAMING;\n\n<div\n class=\"flex flex-1 justify-start gap-2 px-4 h-8 rounded-md hover:bg-thread-list-item-hover-background group\"\n tabindex=\"0\"\n [ngClass]=\"{\n 'bg-thread-list-item-hover-background': isCurrentlyActive,\n }\"\n (keyup.enter)=\"handleThreadSelection()\"\n (click)=\"handleThreadSelection()\"\n>\n <div class=\"flex items-center gap-2 cursor-pointer p-2 flex-1 min-w-0\">\n @if (!isEditModeEnabled()) {\n <div\n class=\"flex items-center text-xs text-text-default flex-1 min-w-0 overflow-hidden\"\n [ngClass]=\"{\n 'text-text-states-active': isCurrentlyActive,\n }\"\n >\n <span class=\"truncate block\" [attr.title]=\"thread().title\">\n {{ thread().title }}\n </span>\n\n @if (\n thread().state === THREAD_STATE.RENAMING ||\n thread().state === THREAD_STATE.DELETING\n ) {\n <app-spinner\n class=\"pl-2 flex-shrink-0\"\n tabindex=\"-1\"\n [size]=\"APP_SPINNER_COMPONENT_SIZE.SMALL\"\n ></app-spinner>\n }\n </div>\n }\n\n @if (isEditModeEnabled()) {\n <input\n #threadNameInput\n class=\"flex-1 px-2 border border-proto-border-default rounded text-proto-text-default\"\n [value]=\"thread().title\"\n (blur)=\"handleEditModeDisable(); onRenameThread(threadNameInput.value)\"\n (keydown.enter)=\"onRenameThread(threadNameInput.value)\"\n (keydown.escape)=\"handleEditModeDisable(); $event.stopPropagation()\"\n />\n }\n\n <!-- Thread Action Buttons -->\n <div\n class=\"hidden group-hover:flex gap-2 ml-auto\"\n [ngClass]=\"{ flex: isCurrentlyActive, hidden: !isCurrentlyActive }\"\n >\n <app-icon\n [variant]=\"APP_ICON_VARIANTS.EDIT\"\n [tabIndex]=\"isCurrentlyActive ? 0 : -1\"\n [size]=\"APP_ICON_SIZES.S\"\n [isDisabled]=\"isTryingToDeleteThread || isTryingToRenameThread\"\n (click)=\"handleEditModeEnable()\"\n />\n <app-icon\n [variant]=\"APP_ICON_VARIANTS.DELETE\"\n [tabIndex]=\"isCurrentlyActive ? 0 : -1\"\n [size]=\"APP_ICON_SIZES.S\"\n [isDisabled]=\"isTryingToRenameThread || isTryingToDeleteThread\"\n (click)=\"onDeleteThread(thread()); $event.stopPropagation()\"\n />\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, input, InputSignal } from '@angular/core';\n\n@Component({\n selector: 'thread-history-list-item-divider',\n templateUrl: './thread-history-list-item-divider.component.html',\n imports: [CommonModule],\n})\nexport class ThreadHistoryListItemDividerComponent {\n public dividerLabel: InputSignal<string> = input<string>('');\n}\n","<span\n class=\"thread-history-list-item-divider\"\n [ngClass]=\"{\n 'text-xs text-proto-text-disabled cursor-default': true,\n }\"\n >{{ dividerLabel() }}</span\n>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, Signal, OnInit } from '@angular/core';\n\nimport { AppSpinnerComponent } from '../../../shared/components/app-spinner/app-spinner.component';\nimport { APP_SPINNER_COMPONENT_SIZE } from '../../../shared/components/app-spinner/enum';\nimport { SELECTED_AGENT } from '../../../shared/constants/agents';\nimport { UI_STRINGS } from '../../../shared/constants/ui-strings';\nimport { ThreadFacade } from '../../../shared/store/thread/thread.facade';\nimport { UIThread } from '../../../shared/store/thread/types';\nimport { ThreadHistoryListItemComponent } from '../thread-history-list-item/thread-history-list-item.component';\nimport { ThreadHistoryListItemDividerComponent } from '../thread-history-list-item-divider/thread-history-list-item-divider.component';\n\nexport type ThreadWithDivider = {\n thread: UIThread;\n showDivider: boolean;\n divider: string;\n};\n\nconst MODULES = [CommonModule];\nconst COMPONENTS = [\n ThreadHistoryListItemComponent,\n ThreadHistoryListItemDividerComponent,\n AppSpinnerComponent,\n];\n\n@Component({\n selector: 'thread-history-list',\n templateUrl: './thread-history-list.component.html',\n imports: [...MODULES, ...COMPONENTS],\n})\nexport class ThreadHistoryListComponent implements OnInit {\n protected readonly UI_STRINGS = UI_STRINGS.THREAD_HISTORY_COMPONENT;\n protected readonly UI_STRINGS_GENERAL = UI_STRINGS.GENERAL;\n protected readonly APP_SPINNER_COMPONENT_SIZE = APP_SPINNER_COMPONENT_SIZE;\n\n private readonly _threadFacade: ThreadFacade = inject(ThreadFacade);\n\n protected readonly isFetchingThreads: Signal<boolean> = this._threadFacade.isFetchingThreads;\n protected readonly threads: Signal<UIThread[]> = this._threadFacade.allThreads;\n protected readonly threadsWithDivider: Signal<ThreadWithDivider[]> = computed<\n ThreadWithDivider[]\n >(() => {\n const result: ThreadWithDivider[] = [];\n let lastDivider: string = '';\n\n // Perform sort by date\n const filteredThreads: UIThread[] = [...this.threads()].sort(\n (a: UIThread, b: UIThread) =>\n new Date(b.updatedAt ? b.updatedAt : b.createdAt).getTime() -\n new Date(a.updatedAt ? a.updatedAt : a.createdAt).getTime(),\n );\n\n filteredThreads.forEach((thread: UIThread) => {\n const divider: string = this.getDividerLabel(\n new Date(thread.updatedAt ? thread.updatedAt : thread.createdAt),\n );\n const showDivider: boolean = divider !== lastDivider;\n lastDivider = divider;\n\n result.push({ thread, showDivider, divider });\n });\n\n return result;\n });\n\n public ngOnInit(): void {\n // TODO: Configure agentId and resourceId properly\n this._threadFacade.dispatchFetchThreads(SELECTED_AGENT);\n }\n\n public getDividerLabel(date: Date): string {\n const diffMs: number = Date.now() - date.getTime();\n const diffMinutes: number = Math.floor(diffMs / (1000 * 60));\n const diffHours: number = Math.floor(diffMs / (1000 * 60 * 60));\n const diffDays: number = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n if (diffMinutes < 5) return this.UI_STRINGS.DIVIDERS.JUST_NOW;\n if (diffMinutes < 30) return this.UI_STRINGS.DIVIDERS.FIVE_MINS_AGO;\n if (diffMinutes < 60) return this.UI_STRINGS.DIVIDERS.THIRTY_MINS_AGO;\n if (diffHours < 1) return this.UI_STRINGS.DIVIDERS.ONE_HOUR_AGO;\n if (diffHours < 2) return this.UI_STRINGS.DIVIDERS.TWO_HOURS_AGO;\n if (diffHours < 6) return this.UI_STRINGS.DIVIDERS.SIX_HOURS_AGO;\n if (diffHours < 12) return this.UI_STRINGS.DIVIDERS.TWELVE_HOURS_AGO;\n if (diffDays === 0) return this.UI_STRINGS.DIVIDERS.TODAY;\n if (diffDays === 1) return this.UI_STRINGS.DIVIDERS.YESTERDAY;\n if (diffDays === 2) return this.UI_STRINGS.DIVIDERS.TWO_DAYS_AGO;\n if (diffDays < 7) return this.UI_STRINGS.DIVIDERS.LAST_WEEK;\n if (diffDays < 14) return this.UI_STRINGS.DIVIDERS.TWO_WEEKS_AGO;\n if (diffDays < 30) return this.UI_STRINGS.DIVIDERS.ONE_MONTH_AGO;\n if (diffDays < 90) return this.UI_STRINGS.DIVIDERS.THREE_MONTHS_AGO;\n if (diffDays < 180) return this.UI_STRINGS.DIVIDERS.SIX_MONTHS_AGO;\n\n return this.UI_STRINGS.DIVIDERS.MORE_THAN_YEAR_AGO;\n }\n}\n","@let isLoading = isFetchingThreads();\n@let hasNoThreads = !isLoading && threadsWithDivider().length === 0;\n@let hasThreads = !isLoading && threadsWithDivider().length > 0;\n\n@if (isLoading) {\n <app-spinner [size]=\"APP_SPINNER_COMPONENT_SIZE.MEDIUM\"></app-spinner>\n}\n\n@if (hasNoThreads) {\n <p\n [ngClass]=\"{\n 'flex flex-1 justify-center items-center text-proto-text-default': true,\n }\"\n >\n {{ UI_STRINGS.NO_THREADS }}\n </p>\n}\n\n@if (hasThreads) {\n @for (threadWithDivider of threadsWithDivider(); track threadWithDivider.thread.id) {\n @if (threadWithDivider.showDivider) {\n <thread-history-list-item-divider\n [ngClass]=\"{\n 'p-2 pb-0': true,\n }\"\n [dividerLabel]=\"threadWithDivider.divider\"\n ></thread-history-list-item-divider>\n }\n\n <thread-history-list-item [thread]=\"threadWithDivider.thread\"></thread-history-list-item>\n }\n}\n","import { Component, inject, Signal } from '@angular/core';\n\nimport { AppIconComponent } from '../../../shared/components/app-icon/app-icon.component';\nimport { APP_ICON_VARIANTS } from '../../../shared/components/app-icon/enum';\nimport { UI_STRINGS } from '../../../shared/constants/ui-strings';\nimport { IOConnectService } from '../../../shared/services/io/io.service';\nimport { OverlayService } from '../../../shared/services/overlay/overlay.service';\nimport { ThreadFacade } from '../../../shared/store/thread/thread.facade';\nimport { ThreadHistoryListComponent } from '../thread-history-list/thread-history-list.component';\n\n@Component({\n selector: 'thread-history',\n templateUrl: './thread-history.component.html',\n imports: [ThreadHistoryListComponent, AppIconComponent],\n})\nexport class ThreadHistoryComponent {\n protected readonly UI_STRINGS = UI_STRINGS.GENERAL;\n protected readonly APP_ICON_VARIANTS = APP_ICON_VARIANTS;\n\n // Provided in root\n private readonly _overlayService: OverlayService = inject(OverlayService);\n private readonly _threadFacade: ThreadFacade = inject(ThreadFacade);\n private readonly _ioConnectService: IOConnectService = inject(IOConnectService);\n\n protected readonly threadsLength: Signal<number> = this._threadFacade.threadLength;\n protected readonly isDarkMode: Signal<boolean> = this._ioConnectService.isDarkMode;\n\n protected hideThreadHistory(): void {\n this._overlayService.hideThreadHistory();\n }\n}\n","<div\n class=\"absolute left-0 top-0 md:static md:left-auto md:top-auto flex flex-col w-full h-full bg-app-background-secondary z-10 md:w-[368px] md:min-w-[368px] md:max-w-[368px] flex-shrink-0\"\n>\n <!-- Thread History Header -->\n <div class=\"flex items-center gap-4 px-4 py-2\">\n <!-- Thread Header Title Section -->\n <app-icon [variant]=\"APP_ICON_VARIANTS.THREAD_HISTORY\" (click)=\"hideThreadHistory()\" />\n\n <!-- IO.Assist Logo -->\n @if (isDarkMode()) {\n <svg\n width=\"68\"\n height=\"14\"\n viewBox=\"0 0 68 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M0.220798 3.28877H1.38651V13.2145H0.220798V3.28877ZM0.255084 1.38592C0.106512 1.22592 0.0322266 1.04306 0.0322266 0.837346C0.0322266 0.631632 0.106512 0.454489 0.255084 0.305918C0.415084 0.145918 0.597941 0.065918 0.803655 0.065918C1.00937 0.065918 1.18651 0.145918 1.33508 0.305918C1.49508 0.454489 1.57508 0.631632 1.57508 0.837346C1.57508 1.04306 1.49508 1.22592 1.33508 1.38592C1.18651 1.53449 1.00937 1.60877 0.803655 1.60877C0.597941 1.60877 0.415084 1.53449 0.255084 1.38592Z\"\n fill=\"white\"\n />\n <path\n d=\"M8.38897 12.3745C9.5204 12.3745 10.4804 11.9745 11.269 11.1745C12.069 10.3631 12.469 9.38592 12.469 8.24306C12.469 7.11163 12.069 6.14592 11.269 5.34592C10.4804 4.53449 9.5204 4.12877 8.38897 4.12877C7.26897 4.12877 6.30897 4.53449 5.50897 5.34592C4.70897 6.14592 4.30897 7.11163 4.30897 8.24306C4.30897 9.38592 4.70897 10.3631 5.50897 11.1745C6.30897 11.9745 7.26897 12.3745 8.38897 12.3745ZM8.38897 13.5059C6.93754 13.5059 5.69182 12.9916 4.65182 11.9631C3.62325 10.9345 3.10897 9.69449 3.10897 8.24306C3.10897 6.79163 3.62325 5.55735 4.65182 4.5402C5.69182 3.51163 6.93754 2.99735 8.38897 2.99735C9.85182 2.99735 11.0975 3.51163 12.1261 4.5402C13.1547 5.55735 13.669 6.79163 13.669 8.24306C13.669 9.69449 13.1547 10.9345 12.1261 11.9631C11.0975 12.9916 9.85182 13.5059 8.38897 13.5059Z\"\n fill=\"white\"\n />\n <path\n d=\"M16.4192 13.4039C16.072 13.4039 15.78 13.2855 15.5433 13.0488C15.3066 12.812 15.1882 12.528 15.1882 12.1965C15.1882 11.8651 15.3066 11.581 15.5433 11.3443C15.78 11.1076 16.072 10.9892 16.4192 10.9892C16.7349 10.9892 17.0111 11.1076 17.2478 11.3443C17.4845 11.581 17.6029 11.8651 17.6029 12.1965C17.6029 12.528 17.4845 12.812 17.2478 13.0488C17.0111 13.2855 16.7349 13.4039 16.4192 13.4039Z\"\n fill=\"#F25F1F\"\n />\n <path\n d=\"M22.7104 9.13449H28.1276L25.4361 2.08877H25.4018L22.7104 9.13449ZM30.9733 13.2145H29.7047L28.5733 10.2831H22.2476L21.1161 13.2145H19.8647L24.8361 0.357346H26.0018L30.9733 13.2145Z\"\n fill=\"white\"\n />\n <path\n d=\"M39.5573 5.84306H38.3744C38.3744 5.35163 38.1459 4.94592 37.6887 4.62592C37.243 4.29449 36.6487 4.12877 35.9059 4.12877C35.1401 4.12877 34.5401 4.26592 34.1059 4.5402C33.6716 4.80306 33.4544 5.15735 33.4544 5.60306C33.4544 6.11735 33.6144 6.51735 33.9344 6.80306C34.2544 7.07735 34.6544 7.24878 35.1344 7.31735C35.6144 7.38592 36.1287 7.47163 36.6773 7.57449C37.2373 7.66592 37.7573 7.7802 38.2373 7.91735C38.7173 8.05449 39.1173 8.3402 39.4373 8.77449C39.7573 9.19735 39.9173 9.76877 39.9173 10.4888C39.9173 11.4373 39.5573 12.1802 38.8373 12.7173C38.1287 13.2431 37.1516 13.5059 35.9059 13.5059C34.7059 13.5059 33.7402 13.2031 33.0087 12.5973C32.2773 11.9802 31.9116 11.1916 31.9116 10.2316H33.0944C33.0944 10.8602 33.3459 11.3745 33.8487 11.7745C34.3516 12.1745 35.0373 12.3745 35.9059 12.3745C36.7973 12.3745 37.4887 12.2088 37.9801 11.8773C38.4716 11.5345 38.7173 11.0545 38.7173 10.4373C38.7173 10.0031 38.5973 9.6602 38.3573 9.40877C38.1173 9.14592 37.8087 8.96306 37.4316 8.8602C37.0544 8.75735 36.6373 8.67735 36.1801 8.6202C35.723 8.56306 35.2602 8.49449 34.7916 8.41449C34.3344 8.32306 33.9173 8.19163 33.5401 8.0202C33.163 7.83735 32.8544 7.55163 32.6144 7.16306C32.3744 6.76306 32.2544 6.25449 32.2544 5.63735C32.2544 4.7802 32.5973 4.12877 33.283 3.68306C33.9802 3.22592 34.8544 2.99735 35.9059 2.99735C36.9916 2.99735 37.8716 3.26592 38.5459 3.80306C39.2201 4.32877 39.5573 5.00877 39.5573 5.84306Z\"\n fill=\"white\"\n />\n <path\n d=\"M48.9323 5.84306H47.7494C47.7494 5.35163 47.5209 4.94592 47.0637 4.62592C46.618 4.29449 46.0237 4.12877 45.2809 4.12877C44.5151 4.12877 43.9151 4.26592 43.4809 4.5402C43.0466 4.80306 42.8294 5.15735 42.8294 5.60306C42.8294 6.11735 42.9894 6.51735 43.3094 6.80306C43.6294 7.07735 44.0294 7.24878 44.5094 7.31735C44.9894 7.38592 45.5037 7.47163 46.0523 7.57449C46.6123 7.66592 47.1323 7.7802 47.6123 7.91735C48.0923 8.05449 48.4923 8.3402 48.8123 8.77449C49.1323 9.19735 49.2923 9.76877 49.2923 10.4888C49.2923 11.4373 48.9323 12.1802 48.2123 12.7173C47.5037 13.2431 46.5266 13.5059 45.2809 13.5059C44.0809 13.5059 43.1151 13.2031 42.3837 12.5973C41.6523 11.9802 41.2866 11.1916 41.2866 10.2316H42.4694C42.4694 10.8602 42.7209 11.3745 43.2237 11.7745C43.7266 12.1745 44.4123 12.3745 45.2809 12.3745C46.1723 12.3745 46.8637 12.2088 47.3551 11.8773C47.8466 11.5345 48.0923 11.0545 48.0923 10.4373C48.0923 10.0031 47.9723 9.6602 47.7323 9.40877C47.4923 9.14592 47.1837 8.96306 46.8066 8.8602C46.4294 8.75735 46.0123 8.67735 45.5551 8.6202C45.098 8.56306 44.6352 8.49449 44.1666 8.41449C43.7094 8.32306 43.2923 8.19163 42.9151 8.0202C42.538 7.83735 42.2294 7.55163 41.9894 7.16306C41.7494 6.76306 41.6294 6.25449 41.6294 5.63735C41.6294 4.7802 41.9723 4.12877 42.658 3.68306C43.3551 3.22592 44.2294 2.99735 45.2809 2.99735C46.3666 2.99735 47.2466 3.26592 47.9209 3.80306C48.5951 4.32877 48.9323 5.00877 48.9323 5.84306Z\"\n fill=\"white\"\n />\n <path\n d=\"M51.0044 3.28877H52.1701V13.2145H51.0044V3.28877ZM51.0387 1.38592C50.8901 1.22592 50.8159 1.04306 50.8159 0.837346C50.8159 0.631632 50.8901 0.454489 51.0387 0.305918C51.1987 0.145918 51.3816 0.065918 51.5873 0.065918C51.793 0.065918 51.9701 0.145918 52.1187 0.305918C52.2787 0.454489 52.3587 0.631632 52.3587 0.837346C52.3587 1.04306 52.2787 1.22592 52.1187 1.38592C51.9701 1.53449 51.793 1.60877 51.5873 1.60877C51.3816 1.60877 51.1987 1.53449 51.0387 1.38592Z\"\n fill=\"white\"\n />\n <path\n d=\"M61.5383 5.84306H60.3555C60.3555 5.35163 60.1269 4.94592 59.6697 4.62592C59.224 4.29449 58.6297 4.12877 57.8869 4.12877C57.1212 4.12877 56.5212 4.26592 56.0869 4.5402C55.6526 4.80306 55.4355 5.15735 55.4355 5.60306C55.4355 6.11735 55.5955 6.51735 55.9155 6.80306C56.2355 7.07735 56.6355 7.24878 57.1155 7.31735C57.5955 7.38592 58.1097 7.47163 58.6583 7.57449C59.2183 7.66592 59.7383 7.7802 60.2183 7.91735C60.6983 8.05449 61.0983 8.3402 61.4183 8.77449C61.7383 9.19735 61.8983 9.76877 61.8983 10.4888C61.8983 11.4373 61.5383 12.1802 60.8183 12.7173C60.1097 13.2431 59.1326 13.5059 57.8869 13.5059C56.6869 13.5059 55.7212 13.2031 54.9897 12.5973C54.2583 11.9802 53.8926 11.1916 53.8926 10.2316H55.0755C55.0755 10.8602 55.3269 11.3745 55.8297 11.7745C56.3326 12.1745 57.0183 12.3745 57.8869 12.3745C58.7783 12.3745 59.4697 12.2088 59.9612 11.8773C60.4526 11.5345 60.6983 11.0545 60.6983 10.4373C60.6983 10.0031 60.5783 9.6602 60.3383 9.40877C60.0983 9.14592 59.7897 8.96306 59.4126 8.8602C59.0355 8.75735 58.6183 8.67735 58.1612 8.6202C57.704 8.56306 57.2412 8.49449 56.7726 8.41449C56.3155 8.32306 55.8983 8.19163 55.5212 8.0202C55.144 7.83735 54.8355 7.55163 54.5955 7.16306C54.3555 6.76306 54.2355 6.25449 54.2355 5.63735C54.2355 4.7802 54.5783 4.12877 55.264 3.68306C55.9612 3.22592 56.8355 2.99735 57.8869 2.99735C58.9726 2.99735 59.8526 3.26592 60.5269 3.80306C61.2012 4.32877 61.5383 5.00877 61.5383 5.84306Z\"\n fill=\"white\"\n />\n <path\n d=\"M65.2562 4.45449V10.8831C65.2562 11.2716 65.3647 11.5631 65.5819 11.7573C65.799 11.9516 66.079 12.0488 66.4219 12.0488H67.3133V13.2145H66.4219C65.759 13.2145 65.2047 13.0031 64.759 12.5802C64.3133 12.1573 64.0905 11.5916 64.0905 10.8831V4.45449H62.9247V3.28877H64.0905V1.04306H65.2562V3.28877H67.3133V4.45449H65.2562Z\"\n fill=\"white\"\n />\n </svg>\n }\n\n @if (!isDarkMode()) {\n <svg\n width=\"68\"\n height=\"14\"\n viewBox=\"0 0 121 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M0.336735 5.7551H2.41837V23.4796H0.336735V5.7551ZM0.397959 2.35714C0.132653 2.07143 0 1.7449 0 1.37755C0 1.0102 0.132653 0.693878 0.397959 0.428571C0.683674 0.142857 1.0102 0 1.37755 0C1.7449 0 2.06122 0.142857 2.32653 0.428571C2.61225 0.693878 2.7551 1.0102 2.7551 1.37755C2.7551 1.7449 2.61225 2.07143 2.32653 2.35714C2.06122 2.62245 1.7449 2.7551 1.37755 2.7551C1.0102 2.7551 0.683674 2.62245 0.397959 2.35714Z\"\n fill=\"#26272A\"\n />\n <path\n d=\"M14.9228 21.9796C16.9432 21.9796 18.6574 21.2653 20.0656 19.8367C21.4942 18.3878 22.2085 16.6429 22.2085 14.602C22.2085 12.5816 21.4942 10.8571 20.0656 9.42857C18.6574 7.97959 16.9432 7.2551 14.9228 7.2551C12.9228 7.2551 11.2085 7.97959 9.77989 9.42857C8.35132 10.8571 7.63704 12.5816 7.63704 14.602C7.63704 16.6429 8.35132 18.3878 9.77989 19.8367C11.2085 21.2653 12.9228 21.9796 14.9228 21.9796ZM14.9228 24C12.3309 24 10.1064 23.0816 8.24928 21.2449C6.41255 19.4082 5.49418 17.1939 5.49418 14.602C5.49418 12.0102 6.41255 9.80612 8.24928 7.98979C10.1064 6.15306 12.3309 5.23469 14.9228 5.23469C17.535 5.23469 19.7595 6.15306 21.5962 7.98979C23.433 9.80612 24.3513 12.0102 24.3513 14.602C24.3513 17.1939 23.433 19.4082 21.5962 21.2449C19.7595 23.0816 17.535 24 14.9228 24Z\"\n fill=\"#26272A\"\n />\n <path\n d=\"M29.2625 23.8178C28.6425 23.8178 28.1211 23.6064 27.6984 23.1837C27.2756 22.7609 27.0643 22.2536 27.0643 21.6618C27.0643 21.07 27.2756 20.5627 27.6984 20.1399C28.1211 19.7172 28.6425 19.5058 29.2625 19.5058C29.8262 19.5058 30.3194 19.7172 30.7421 20.1399C31.1648 20.5627 31.3762 21.07 31.3762 21.6618C31.3762 22.2536 31.1648 22.7609 30.7421 23.1837C30.3194 23.6064 29.8262 23.8178 29.2625 23.8178Z\"\n fill=\"#F25F1F\"\n />\n <path\n d=\"M40.4968 16.1939H50.1702L45.3641 3.61224H45.3029L40.4968 16.1939ZM55.2519 23.4796H52.9866L50.9662 18.2449H39.6702L37.6498 23.4796H35.4151L44.2927 0.520407H46.3743L55.2519 23.4796Z\"\n fill=\"#26272A\"\n />\n <path\n d=\"M70.5805 10.3163H68.4682C68.4682 9.43878 68.0601 8.71428 67.2437 8.14286C66.4478 7.55102 65.3866 7.2551 64.0601 7.2551C62.6927 7.2551 61.6213 7.5 60.8458 7.98979C60.0703 8.45918 59.6825 9.09184 59.6825 9.88775C59.6825 10.8061 59.9682 11.5204 60.5397 12.0306C61.1111 12.5204 61.8254 12.8265 62.6825 12.949C63.5397 13.0714 64.458 13.2245 65.4376 13.4082C66.4376 13.5714 67.3662 13.7755 68.2233 14.0204C69.0805 14.2653 69.7948 14.7755 70.3662 15.551C70.9376 16.3061 71.2233 17.3265 71.2233 18.6122C71.2233 20.3061 70.5805 21.6327 69.2948 22.5918C68.0295 23.5306 66.2846 24 64.0601 24C61.9172 24 60.1927 23.4592 58.8866 22.3776C57.5805 21.2755 56.9274 19.8673 56.9274 18.1531H59.0397C59.0397 19.2755 59.4886 20.1939 60.3866 20.9082C61.2846 21.6224 62.509 21.9796 64.0601 21.9796C65.6519 21.9796 66.8866 21.6837 67.7642 21.0918C68.6417 20.4796 69.0805 19.6224 69.0805 18.5204C69.0805 17.7449 68.8662 17.1327 68.4376 16.6837C68.009 16.2143 67.458 15.8878 66.7846 15.7041C66.1111 15.5204 65.3662 15.3776 64.5499 15.2755C63.7335 15.1735 62.907 15.051 62.0703 14.9082C61.254 14.7449 60.5091 14.5102 59.8356 14.2041C59.1621 13.8776 58.6111 13.3673 58.1825 12.6735C57.754 11.9592 57.5397 11.051 57.5397 9.94898C57.5397 8.41837 58.1519 7.2551 59.3764 6.45918C60.6213 5.64286 62.1825 5.23469 64.0601 5.23469C65.9988 5.23469 67.5703 5.71429 68.7744 6.67347C69.9784 7.61224 70.5805 8.82653 70.5805 10.3163Z\"\n fill=\"#26272A\"\n />\n <path\n d=\"M87.3216 10.3163H85.2093C85.2093 9.43878 84.8011 8.71428 83.9848 8.14286C83.1889 7.55102 82.1277 7.2551 80.8011 7.2551C79.4338 7.2551 78.3624 7.5 77.5869 7.98979C76.8113 8.45918 76.4236 9.09184 76.4236 9.88775C76.4236 10.8061 76.7093 11.5204 77.2807 12.0306C77.8522 12.5204 78.5664 12.8265 79.4236 12.949C80.2807 13.0714 81.1991 13.2245 82.1787 13.4082C83.1787 13.5714 84.1073 13.7755 84.9644 14.0204C85.8216 14.2653 86.5358 14.7755 87.1073 15.551C87.6787 16.3061 87.9644 17.3265 87.9644 18.6122C87.9644 20.3061 87.3216 21.6327 86.0358 22.5918C84.7705 23.5306 83.0256 24 80.8011 24C78.6583 24 76.9338 23.4592 75.6277 22.3776C74.3215 21.2755 73.6685 19.8673 73.6685 18.1531H75.7807C75.7807 19.2755 76.2297 20.1939 77.1277 20.9082C78.0256 21.6224 79.2501 21.9796 80.8011 21.9796C82.393 21.9796 83.6277 21.6837 84.5052 21.0918C85.3828 20.4796 85.8215 19.6224 85.8215 18.5204C85.8215 17.7449 85.6073 17.1327 85.1787 16.6837C84.7501 16.2143 84.1991 15.8878 83.5256 15.7041C82.8522 15.5204 82.1073 15.3776 81.2909 15.2755C80.4746 15.1735 79.6481 15.051 78.8113 14.9082C77.995 14.7449 77.2501 14.5102 76.5767 14.2041C75.9032 13.8776 75.3522 13.3673 74.9236 12.6735C74.495 11.9592 74.2807 11.051 74.2807 9.94898C74.2807 8.41837 74.893 7.2551 76.1175 6.45918C77.3624 5.64286 78.9236 5.23469 80.8011 5.23469C82.7399 5.23469 84.3113 5.71429 85.5154 6.67347C86.7195 7.61224 87.3216 8.82653 87.3216 10.3163Z\"\n fill=\"#26272A\"\n />\n <path\n d=\"M91.0218 5.7551H93.1034V23.4796H91.0218V5.7551ZM91.083 2.35714C90.8177 2.07143 90.6851 1.7449 90.6851 1.37755C90.6851 1.0102 90.8177 0.693878 91.083 0.428571C91.3687 0.142857 91.6953 0 92.0626 0C92.43 0 92.7463 0.142857 93.0116 0.428571C93.2973 0.693878 93.4402 1.0102 93.4402 1.37755C93.4402 1.7449 93.2973 2.07143 93.0116 2.35714C92.7463 2.62245 92.43 2.7551 92.0626 2.7551C91.6953 2.7551 91.3687 2.62245 91.083 2.35714Z\"\n fill=\"#26272A\"\n />\n <path\n d=\"M109.832 10.3163H107.72C107.72 9.43878 107.312 8.71428 106.496 8.14286C105.7 7.55102 104.638 7.2551 103.312 7.2551C101.945 7.2551 100.873 7.5 100.098 7.98979C99.3221 8.45918 98.9343 9.09184 98.9343 9.88775C98.9343 10.8061 99.2201 11.5204 99.7915 12.0306C100.363 12.5204 101.077 12.8265 101.934 12.949C102.791 13.0714 103.71 13.2245 104.689 13.4082C105.689 13.5714 106.618 13.7755 107.475 14.0204C108.332 14.2653 109.047 14.7755 109.618 15.551C110.189 16.3061 110.475 17.3265 110.475 18.6122C110.475 20.3061 109.832 21.6327 108.547 22.5918C107.281 23.5306 105.536 24 103.312 24C101.169 24 99.4446 23.4592 98.1384 22.3776C96.8323 21.2755 96.1792 19.8673 96.1792 18.1531H98.2915C98.2915 19.2755 98.7405 20.1939 99.6384 20.9082C100.536 21.6224 101.761 21.9796 103.312 21.9796C104.904 21.9796 106.138 21.6837 107.016 21.0918C107.894 20.4796 108.332 19.6224 108.332 18.5204C108.332 17.7449 108.118 17.1327 107.689 16.6837C107.261 16.2143 106.71 15.8878 106.036 15.7041C105.363 15.5204 104.618 15.3776 103.802 15.2755C102.985 15.1735 102.159 15.051 101.322 14.9082C100.506 14.7449 99.7609 14.5102 99.0874 14.2041C98.4139 13.8776 97.8629 13.3673 97.4343 12.6735C97.0058 11.9592 96.7915 11.051 96.7915 9.94898C96.7915 8.41837 97.4037 7.2551 98.6282 6.45918C99.8731 5.64286 101.434 5.23469 103.312 5.23469C105.251 5.23469 106.822 5.71429 108.026 6.67347C109.23 7.61224 109.832 8.82653 109.832 10.3163Z\"\n fill=\"#26272A\"\n />\n <path\n d=\"M116.471 7.83673V19.3163C116.471 20.0102 116.665 20.5306 117.053 20.8776C117.441 21.2245 117.941 21.398 118.553 21.398H120.145V23.4796H118.553C117.369 23.4796 116.38 23.102 115.584 22.3469C114.788 21.5918 114.39 20.5816 114.39 19.3163V7.83673H112.308V5.7551H114.39V1.7449H116.471V5.7551H120.145V7.83673H116.471Z\"\n fill=\"#26272A\"\n />\n </svg>\n }\n </div>\n\n <!-- Thread History List -->\n <thread-history-list class=\"flex flex-1 flex-col p-2\"></thread-history-list>\n\n <!-- Thread History Footer TODO: Revert and implement once we decide to support chat model picking -->\n <!-- <div class=\"flex items-center px-4 py-2 border-t border-proto-border-default\">\n <select\n class=\"p-2 border border-proto-border-default rounded text-proto-text-default bg-proto-background-light w-full\"\n >\n <option value=\"gpt-4\">GPT-4</option>\n <option value=\"gpt-3.5-turbo\">GPT-3.5 Turbo</option>\n </select>\n </div> -->\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, Signal } from '@angular/core';\n\nimport { UI_STRINGS } from '../../shared/constants/ui-strings';\nimport { OverlayService } from '../../shared/services/overlay/overlay.service';\nimport { AuthFacade } from '../../shared/store/auth/auth.facade';\nimport { MessageFacade } from '../../shared/store/message/message.facade';\nimport { HeaderComponent } from '../header/header.component';\nimport { InputAreaComponent } from '../input-area/input-area.component';\nimport { MessageAreaComponent } from '../messages/message-area/message-area.component';\nimport { FavoritePromptListComponent } from '../prompt/favorite-prompts/favorite-prompt-list.component';\nimport { ThreadHistoryComponent } from '../threads/thread-history/thread-history.component';\n\nconst COMPONENTS = [\n ThreadHistoryComponent,\n FavoritePromptListComponent,\n InputAreaComponent,\n HeaderComponent,\n MessageAreaComponent,\n];\nconst MODULES = [CommonModule];\n\n@Component({\n selector: 'chat',\n templateUrl: './chat.component.html',\n imports: [MODULES, COMPONENTS],\n providers: [MessageFacade],\n host: {\n class: 'flex flex-1 flex-col bg-app-background min-h-0 text-app-text-default',\n },\n})\nexport class ChatComponent {\n protected readonly UI_STRINGS = UI_STRINGS;\n\n // Provided in root\n private readonly _overlayService: OverlayService = inject(OverlayService);\n private readonly _authFacade: AuthFacade = inject(AuthFacade);\n\n // Provided in this component\n private readonly _messageFacade: MessageFacade = inject(MessageFacade);\n\n protected readonly isLoadingMessages: Signal<boolean> = this._messageFacade.isLoadingMessages;\n protected readonly messageLength: Signal<number> = this._messageFacade.messageLength;\n protected readonly loggedInUser: Signal<string> = computed<string>(() => {\n const username: string | null = this._authFacade.username();\n\n if (!username) {\n return 'Guest';\n }\n\n return username;\n });\n\n protected readonly isThreadHistoryDisplayed: Signal<boolean> =\n this._overlayService.isThreadHistoryDisplayed;\n}\n","@let showMessageArea = isLoadingMessages() || messageLength() > 0;\n@let showWelcomeMessage = !showMessageArea;\n@let showFavoritePrompts = !showMessageArea;\n\n<div\n [ngClass]=\"{\n 'flex flex-1 min-h-0 overflow-hidden': true,\n }\"\n>\n @if (isThreadHistoryDisplayed()) {\n <thread-history></thread-history>\n }\n\n <div\n [ngClass]=\"{\n 'flex flex-col flex-1 min-h-0 min-w-0 items-center justify-end': true,\n }\"\n >\n <!-- Chat Header -->\n <header></header>\n\n <!-- Chat Main Content -->\n <div\n [ngClass]=\"{\n 'flex flex-col flex-1 min-h-0 pb-0 w-full px-4 overflow-hidden': true,\n 'pt-24 md:pt-20 gap-12 md:gap-14': !showMessageArea,\n 'pt-0 gap-0': showMessageArea,\n }\"\n >\n @if (showWelcomeMessage) {\n <div\n [ngClass]=\"{\n 'flex flex-col gap-3 items-center pt-[160px]': true,\n }\"\n >\n <h2\n [ngClass]=\"{\n 'text-3xl md:text-[44px] font-bold text-proto-text-default text-center': true,\n }\"\n >\n {{ UI_STRINGS.GENERAL.WELCOME_MESSAGE(loggedInUser()) }}\n </h2>\n </div>\n }\n\n <div\n [ngClass]=\"{\n 'flex flex-1 min-h-0 flex-col items-center': true,\n 'gap-6': !showMessageArea,\n 'gap-0': showMessageArea,\n }\"\n >\n @if (showMessageArea) {\n <message-area\n [ngClass]=\"{\n 'flex-1 flex flex-col min-h-0 w-full': true,\n }\"\n ></message-area>\n }\n\n <input-area\n [ngClass]=\"{\n 'flex max-w-[920px] w-full': true,\n }\"\n ></input-area>\n\n @if (showFavoritePrompts) {\n <favorite-prompt-list\n [ngClass]=\"{\n 'flex-1 min-h-0 max-w-[920px] w-full': true,\n }\"\n ></favorite-prompt-list>\n }\n </div>\n </div>\n\n <div\n [ngClass]=\"{\n 'flex justify-center items-center text-center p-4': true,\n }\"\n >\n <span\n [ngClass]=\"{\n 'text-xs text-text-default tracking-wide': true,\n }\"\n >{{ UI_STRINGS.GENERAL.AI_CONTENT_INFO }}</span\n >\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, Signal, signal, WritableSignal, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { AppButtonComponent } from '../../shared/components/app-button/app-button.component';\nimport { APP_BUTTON_TYPES } from '../../shared/components/app-button/enum';\nimport { AppInputComponent } from '../../shared/components/app-input/app-input.component';\nimport { AppPanelComponent } from '../../shared/components/app-panel/app-panel.component';\nimport { AppSpinnerComponent } from '../../shared/components/app-spinner/app-spinner.component';\nimport { APP_SPINNER_COMPONENT_SIZE } from '../../shared/components/app-spinner/enum';\nimport { UI_STRINGS } from '../../shared/constants/ui-strings';\nimport { LOADING_STATE } from '../../shared/enums/loading-state.enum';\nimport { ComponentEffectManagerService as EffectService } from '../../shared/services/component-effect-manager/component-effect-manager.service';\nimport { AuthFacade } from '../../shared/store/auth/auth.facade';\nimport { LoadingType } from '../../shared/types/loading.type';\n\nconst COMPONENTS = [AppButtonComponent, AppInputComponent, AppPanelComponent, AppSpinnerComponent];\nconst MODULES = [CommonModule, FormsModule];\n\n@Component({\n selector: 'login',\n imports: [...COMPONENTS, ...MODULES],\n templateUrl: './login.component.html',\n providers: [\n {\n provide: EffectService,\n useFactory: () => new EffectService('LoginComponent'),\n },\n ],\n})\nexport class LoginComponent implements OnInit {\n protected readonly APP_BUTTON_TYPES = APP_BUTTON_TYPES;\n protected readonly LOGIN_COMPONENT_STRINGS = UI_STRINGS.LOGIN_COMPONENT;\n protected readonly APP_SPINNER_COMPONENT_SIZE = APP_SPINNER_COMPONENT_SIZE;\n\n protected username: WritableSignal<string> = signal<string>('');\n protected password: WritableSignal<string> = signal<string>('');\n protected error: WritableSignal<string> = signal<string>('');\n\n // Provided in root\n private readonly _authFacade: AuthFacade = inject(AuthFacade);\n\n // Provided in current component\n private readonly _effectService: EffectService = inject(EffectService);\n\n protected readonly authLoadingState: Signal<LoadingType> = this._authFacade.authLoadingState;\n protected readonly isPendingLogin: Signal<boolean> = this._authFacade.isPendingAuthOperation;\n protected readonly isAuthenticated: Signal<boolean> = this._authFacade.isAuthenticated;\n\n public ngOnInit(): void {\n this.registerEffects();\n }\n\n protected handleSubmit(): void {\n if (!this.username() || !this.password()) {\n this.error.set(this.LOGIN_COMPONENT_STRINGS.MISSING_CREDENTIALS);\n return;\n }\n\n this._authFacade.dispatchLogin(this.username(), this.password());\n }\n\n private registerEffects(): void {\n this._effectService.registerEffect(\n 'LoginComponent.clearError.on.passwordChange',\n () => this.password() && this.error.set(''),\n );\n this._effectService.registerEffect(\n 'LoginComponent.clearError.on.usernameChange',\n () => this.username() && this.error.set(''),\n );\n\n this._effectService.registerEffect(\n 'LoginComponent.setError.on.authLoadingStateError',\n () => {\n const state: LoadingType = this.authLoadingState();\n\n if (state.type === LOADING_STATE.ERROR)\n this.error.set(state.message ?? 'Unknown error');\n },\n );\n }\n}\n","<div\n class=\"login\"\n [ngClass]=\"{\n 'flex justify-center items-center h-screen w-screen bg-app-background': true,\n }\"\n>\n <app-panel [isHeaderCloseButtonDisplayed]=\"false\" [title]=\"LOGIN_COMPONENT_STRINGS.TITLE\">\n <ng-container panel-content>\n <app-input\n [placeholder]=\"LOGIN_COMPONENT_STRINGS.USERNAME_PLACEHOLDER\"\n [type]=\"'text'\"\n [label]=\"'Username'\"\n (onValueChange)=\"username.set($event)\"\n ></app-input>\n\n <app-input\n [placeholder]=\"LOGIN_COMPONENT_STRINGS.PASSWORD_PLACEHOLDER\"\n [type]=\"'password'\"\n [label]=\"'Password'\"\n (onValueChange)=\"password.set($event)\"\n ></app-input>\n\n @if (error()) {\n <div\n [ngClass]=\"{\n 'text-text-danger': true,\n }\"\n >\n {{ error() }}\n </div>\n }\n </ng-container>\n\n <ng-container panel-footer>\n @if (isPendingLogin()) {\n <app-spinner [size]=\"APP_SPINNER_COMPONENT_SIZE.SMALL\"></app-spinner>\n }\n\n @if (!isPendingLogin()) {\n <app-button\n [buttonType]=\"APP_BUTTON_TYPES.SUBMIT\"\n [disabled]=\"isPendingLogin()\"\n (onClick)=\"handleSubmit()\"\n >{{ LOGIN_COMPONENT_STRINGS.LOGIN_BUTTON_TEXT }}</app-button\n >\n }\n </ng-container>\n </app-panel>\n</div>\n","import { inject, Injectable, Signal } from '@angular/core';\nimport { CanActivate, Router } from '@angular/router';\n\nimport { APP_ROUTES_ENUM } from '../../routes/routes.enum';\nimport { AuthFacade } from '../store/auth/auth.facade';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthGuard implements CanActivate {\n private readonly _router: Router = inject(Router);\n private readonly _authFacade: AuthFacade = inject(AuthFacade);\n private readonly _isAuthenticated: Signal<boolean> = this._authFacade.isAuthenticated;\n\n canActivate(): boolean {\n return this._isAuthenticated()\n ? true\n : (this._router.navigate([APP_ROUTES_ENUM.LOGIN]), false);\n }\n}\n","import { Routes } from '@angular/router';\n\nimport { APP_ROUTES_ENUM } from './routes.enum';\nimport { ChatComponent } from '../components/chat/chat.component';\nimport { LoginComponent } from '../components/login/login.component';\nimport { AuthGuard } from '../shared/guards/auth.guard';\n\nexport const routes: Routes = [\n { path: APP_ROUTES_ENUM.ROOT, component: LoginComponent },\n { path: APP_ROUTES_ENUM.LOGIN, component: LoginComponent },\n { path: APP_ROUTES_ENUM.CHAT, component: ChatComponent, canActivate: [AuthGuard] },\n { path: APP_ROUTES_ENUM.WILDCARD, redirectTo: APP_ROUTES_ENUM.ROOT },\n];\n","import { inject, Injectable } from '@angular/core';\nimport { IoIntelWeb } from '@interopio/intel-web';\n\nimport { IOIntelWebService } from '../../io-intel-web/io-intel-web.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AgentManagerService {\n private readonly _ioIntelWebService: IOIntelWebService = inject(IOIntelWebService);\n\n public async listAgents(): Promise<IoIntelWeb.Agents.Agent[]> {\n try {\n return await this._ioIntelWebService.listAgents();\n } catch (error) {\n console.error('Error fetching agents:', error);\n\n throw new Error('Failed to fetch agents.');\n }\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { IoIntelWeb } from '@interopio/intel-web';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { mergeMap, from, of, map, catchError } from 'rxjs';\n\nimport {\n listAvailableAgents,\n listAvailableAgentsFailure,\n listAvailableAgentsSuccess,\n} from './agent.actions';\nimport { AgentManagerService } from '../../services/agent/agent-manager/agent-manager.service';\n\n@Injectable()\nexport class AgentEffects {\n private readonly _actions$: Actions = inject(Actions);\n private readonly _agentManagerService: AgentManagerService = inject(AgentManagerService);\n\n listAvailableAgents$ = createEffect(() =>\n this._actions$.pipe(\n ofType(listAvailableAgents),\n mergeMap(() =>\n from(this._agentManagerService.listAgents()).pipe(\n map((agents: IoIntelWeb.Agents.Agent[]) =>\n listAvailableAgentsSuccess({ agents }),\n ),\n catchError((error: Error) => of(listAvailableAgentsFailure({ error }))),\n ),\n ),\n ),\n );\n}\n","import { IoIntelWeb } from '@interopio/intel-web';\nimport { createReducer, on } from '@ngrx/store';\n\nimport {\n listAvailableAgents,\n listAvailableAgentsSuccess,\n listAvailableAgentsFailure,\n selectAgent,\n} from './agent.actions';\nimport { LOADING_STATE } from '../../enums/loading-state.enum';\nimport { LoadingType } from '../../types/loading.type';\n\nexport type AgentReducerStateType = {\n availableAgents: IoIntelWeb.Agents.Agent[];\n selectedAgent: IoIntelWeb.Agents.Agent | null;\n loadingState: LoadingType;\n};\n\nexport const initialState: AgentReducerStateType = {\n availableAgents: [],\n selectedAgent: null,\n loadingState: { type: LOADING_STATE.NOT_STARTED },\n};\n\nexport const agentReducer = createReducer(\n initialState,\n on(\n listAvailableAgents,\n (state): AgentReducerStateType => ({\n ...state,\n loadingState: { type: LOADING_STATE.LOADING },\n }),\n ),\n on(\n listAvailableAgentsSuccess,\n (state, { agents }): AgentReducerStateType => ({\n ...state,\n availableAgents: agents,\n loadingState: { type: LOADING_STATE.SUCCESS },\n }),\n ),\n on(\n listAvailableAgentsFailure,\n (state, { error }): AgentReducerStateType => ({\n ...state,\n loadingState: { type: LOADING_STATE.ERROR, message: error.message },\n }),\n ),\n on(\n selectAgent,\n (state, { agentId }): AgentReducerStateType => ({\n ...state,\n selectedAgent: state.availableAgents.find((agent) => agent.id === agentId) || null,\n }),\n ),\n);\n","import { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { delay, Observable, of, tap } from 'rxjs';\n\nimport { APP_ROUTES_ENUM } from '../../../routes/routes.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService {\n private _router: Router = inject(Router);\n\n public login(username: string, password: string): Observable<null> {\n return of(null).pipe(\n delay(2000),\n tap(() => {\n if (username !== 'admin' || password !== 'pass123') {\n throw new Error('Invalid credentials');\n }\n }),\n );\n }\n\n public logout(): Observable<null> {\n return of(null).pipe(\n delay(2000),\n tap(() => this._router.navigate([APP_ROUTES_ENUM.LOGIN])),\n );\n }\n}\n","import { effect, inject, Injectable, Signal, signal, WritableSignal } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { mergeMap, from, of, catchError, map } from 'rxjs';\n\nimport {\n login,\n loginFailure,\n loginSuccess,\n logout,\n logoutSuccess,\n logoutFailure,\n} from './auth.actions';\nimport { APP_ROUTES_ENUM } from '../../../routes/routes.enum';\nimport { AuthService } from '../../services/auth/auth.service';\nimport { IOIntelWebService } from '../../services/io-intel-web/io-intel-web.service';\nimport { AgentFacade } from '../agent/agent.facade';\n\n@Injectable()\nexport class AuthEffects {\n private _username: WritableSignal<string | null> = signal<string | null>(null);\n\n private readonly _actions$: Actions = inject(Actions);\n private readonly _store: Store = inject(Store);\n private readonly _router: Router = inject(Router);\n\n private readonly _authService: AuthService = inject(AuthService);\n private readonly _ioIntelWebService: IOIntelWebService = inject(IOIntelWebService);\n\n private readonly _agentFacade: AgentFacade = inject(AgentFacade);\n\n private readonly _isIoIntelWebAvailable: Signal<boolean> =\n this._ioIntelWebService.isInitialized;\n private readonly _isIoIntelWebInitializing: Signal<boolean> =\n this._ioIntelWebService.isInitializing;\n\n private _ioWebServiceInitializedEffect?: ReturnType<typeof effect>;\n\n constructor() {\n // Effect runs only once for the first time API is initialized\n if (this._ioIntelWebService.isInitialized()) {\n // If already initialized, dispatch login success action\n\n if (!this._username()) return;\n\n this._store.dispatch(loginSuccess({ username: this._username()! }));\n\n return;\n }\n\n this._ioWebServiceInitializedEffect = effect((onCleanup) => {\n if (!this._ioIntelWebService.isInitialized()) return;\n\n if (!this._username()) return;\n\n // dispatch login success action\n this._store.dispatch(loginSuccess({ username: this._username()! }));\n\n // Stop watching after first successful fetch\n onCleanup(() => this._ioWebServiceInitializedEffect?.destroy());\n });\n }\n\n login$ = createEffect(() =>\n this._actions$.pipe(\n ofType(login),\n mergeMap(({ username, password }) =>\n from(this._authService.login(username, password)).pipe(\n mergeMap(() => {\n if (!this._isIoIntelWebAvailable() || this._isIoIntelWebInitializing()) {\n this._ioIntelWebService.initialize();\n this._username.set(username);\n\n // Success action will be dispatched after IoIntelWeb is initialized\n return of();\n } else {\n return of(loginSuccess({ username }));\n }\n }),\n catchError((error) => of(loginFailure({ error }))),\n ),\n ),\n ),\n );\n\n loginSuccess$ = createEffect(\n () =>\n this._actions$.pipe(\n ofType(loginSuccess),\n map(() => {\n // Dispatch actions needed after logged in user with initialized IoIntelWeb API\n this._agentFacade.dispatchListAvailableAgents();\n // this._xxxFacade.dispatchListXXX();\n\n // Finally navigate to main app route\n this._router.navigate([APP_ROUTES_ENUM.CHAT]);\n }),\n ),\n { dispatch: false },\n );\n\n logout$ = createEffect(() =>\n this._actions$.pipe(\n ofType(logout),\n mergeMap(() =>\n from(this._authService.logout()).pipe(\n map(() => logoutSuccess()),\n catchError((error) => of(logoutFailure({ error }))),\n ),\n ),\n ),\n );\n}\n","import { createReducer, on } from '@ngrx/store';\n\nimport {\n login,\n loginFailure,\n loginSuccess,\n logout,\n logoutFailure,\n logoutSuccess,\n} from './auth.actions';\nimport { LOADING_STATE } from '../../enums/loading-state.enum';\nimport { LoadingType } from '../../types/loading.type';\n\nexport type AuthReducerStateType = {\n username: string | null;\n isAuthenticated: boolean;\n loadingState: LoadingType;\n};\n\nexport const initialState: AuthReducerStateType = {\n username: null,\n isAuthenticated: false,\n loadingState: { type: LOADING_STATE.NOT_STARTED },\n};\n\nexport const authReducer = createReducer(\n initialState,\n on(login, (state) => {\n return {\n ...state,\n loadingState: { type: LOADING_STATE.LOADING as typeof LOADING_STATE.LOADING },\n };\n }),\n on(loginSuccess, (state, { username }) => {\n return {\n ...state,\n username, // TODO: append + '-1' or '-2' to simulate different users and managing threads per user\n isAuthenticated: true,\n loadingState: { type: LOADING_STATE.SUCCESS as typeof LOADING_STATE.SUCCESS },\n };\n }),\n on(loginFailure, (state, { error }) => {\n return {\n ...state,\n loadingState: {\n type: LOADING_STATE.ERROR as typeof LOADING_STATE.ERROR,\n message: error.message,\n },\n };\n }),\n on(logout, (state) => {\n return {\n ...state,\n loadingState: { type: LOADING_STATE.LOADING as typeof LOADING_STATE.LOADING },\n };\n }),\n on(logoutSuccess, (state) => {\n return {\n ...state,\n username: null,\n isAuthenticated: false,\n loadingState: { type: LOADING_STATE.SUCCESS as typeof LOADING_STATE.SUCCESS },\n };\n }),\n on(logoutFailure, (state, { error }) => {\n return {\n ...state,\n loadingState: {\n type: LOADING_STATE.ERROR as typeof LOADING_STATE.ERROR,\n message: error.message,\n },\n };\n }),\n);\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { inject, Injectable } from '@angular/core';\nimport { IoIntelWeb } from '@interopio/intel-web';\n\nimport { shouldSkipUiDisplay } from '../../store/message/message.utils';\nimport {\n UIResponseMessage,\n UIMessageType,\n UI_MESSAGE_ROLES,\n UI_MESSAGE_PART_TYPES,\n UIUserMessage,\n} from '../../store/message/types';\nimport { UIThread } from '../../store/thread/types';\nimport { IOIntelWebService } from '../io-intel-web/io-intel-web.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ThreadService {\n private readonly _ioIntelWebService: IOIntelWebService = inject(IOIntelWebService);\n\n public fetchThreads(agentId: string, resourceId: string): Promise<IoIntelWeb.Threads.Thread[]> {\n return this._ioIntelWebService.listThreads({ agentId, resourceId });\n }\n\n public renameThread(thread: UIThread, newTitle: string): Promise<void> {\n if (!newTitle || newTitle.trim() === '') {\n throw new Error('Invalid thread title');\n }\n\n if (thread.title === newTitle) {\n throw new Error('Thread title is the same');\n }\n\n return thread.update({ title: newTitle });\n }\n\n public deleteThread(thread: UIThread): Promise<void> {\n return thread.delete();\n }\n\n public async toUIThreads(threads: IoIntelWeb.Threads.Thread[]): Promise<UIThread[]> {\n if (threads.length === 0) return Promise.resolve([]);\n\n const convertToUIThreadPromises: Promise<UIThread | null>[] = threads.map(\n async (thread: IoIntelWeb.Threads.Thread) => {\n return this.convertSingleUIThread(thread);\n },\n );\n\n const uiThreads: (UIThread | null)[] = await Promise.all(convertToUIThreadPromises);\n\n return uiThreads.filter((thread: UIThread | null) => thread !== null);\n }\n\n public async fetchMessagesFromThread(thread: UIThread): Promise<UIResponseMessage[]> {\n // TODO: Maybe limit should be optional in future - for now we fetch last 100 messages\n try {\n const messages = await thread.getMessages({ limit: 100 });\n\n if (!messages || !messages.uiMessages) {\n return [];\n }\n\n return this.convertToUIResponseMessages(messages.uiMessages);\n } catch (error: any) {\n console.error('Failed to fetch thread messages:', error);\n return [];\n }\n }\n\n /**\n * The uiMessages can look like this:\n * They are of 'role' either 'user' or 'assistant'\n * [\n * {\n ...,\n ...,\n \"role\": \"user\",\n \"parts\": [\n {\n \"type\": \"text\",\n \"text\": \"Hello!\"\n }\n ],\n ...\n },\n {\n ...,\n ...,\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\": \"text\",\n \"text\": \"...\"\n }\n {\n \"type\": \"tool-invocation\",\n \"tool-invocation\": {\n \"toolCallId\": ...\n \"toolName\": ...\n \"args\": ...\n \"result\": ...\n }\n }\n ]\n }\n * ]\n * @param uiMessages - Array of messages from IoIntelWeb API\n * @returns Array of UIResponseMessage mapped from the input messages\n */\n public convertToUIResponseMessages(uiMessages: any[]): UIResponseMessage[] {\n const result: (UIResponseMessage | null)[] = [];\n\n uiMessages.forEach((message) => {\n const role: UIMessageType = message.role;\n const parts: any[] = message.parts;\n\n if (role === UI_MESSAGE_ROLES.USER) {\n return result.push(this.toUserUIMessage(message, parts));\n }\n\n if (role === UI_MESSAGE_ROLES.ASSISTANT) {\n return parts.forEach((part: any) => {\n return result.push(this.toAssistantUIMessage(part));\n });\n }\n\n // Other types can be handled here if needed\n return;\n });\n\n return result.filter((msg: UIResponseMessage | null) => msg !== null);\n }\n\n private toUserUIMessage(message: any, parts: any[]): UIUserMessage | null {\n const userMessage: UIUserMessage = {\n id: message.id,\n role: UI_MESSAGE_ROLES.USER,\n content:\n parts.find((part: any) => part.type === UI_MESSAGE_PART_TYPES.TEXT)?.text || '',\n };\n\n // Make sure message is not added to the UI message state if it should be skipped\n if (shouldSkipUiDisplay(userMessage)) {\n return null;\n }\n\n return userMessage;\n }\n\n private toAssistantUIMessage(part: any): UIResponseMessage | null {\n if (part.type === UI_MESSAGE_PART_TYPES.TEXT) {\n return {\n id: crypto.randomUUID(), // Generate unique ID for each assistant text part to avoid ID collision with parent message\n role: UI_MESSAGE_ROLES.ASSISTANT,\n content: part.text,\n };\n }\n\n if (part.type === UI_MESSAGE_PART_TYPES.TOOL_INVOCATION) {\n const toolInvocation = part.toolInvocation;\n\n return {\n id: toolInvocation.toolCallId,\n role: UI_MESSAGE_ROLES.TOOL,\n toolName: toolInvocation.toolName,\n args: toolInvocation.args,\n result: toolInvocation.result,\n isExpanded: false,\n };\n }\n\n return null;\n }\n\n private async convertSingleUIThread(\n thread: IoIntelWeb.Threads.Thread,\n ): Promise<UIThread | null> {\n if (!thread.describe) return Promise.resolve(null);\n\n const { title, metadata, updatedAt } = await thread.describe();\n\n const UIThread: UIThread = {\n ...thread,\n title: title ? title : thread.createdAt.toISOString(),\n metadata,\n updatedAt,\n };\n\n return UIThread;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { switchMap, catchError, of, from, map } from 'rxjs';\n\nimport {\n abortResponseGeneration,\n fetchMessagesFromThread,\n fetchMessagesFromThreadFailure,\n fetchMessagesFromThreadSuccess,\n getResponse,\n getResponseFailure,\n reloadResponse,\n} from './message.actions';\nimport { handleResponseStream } from './message.utils';\nimport { UIResponseMessage } from './types';\nimport { AgentService } from '../../services/agent/agent.service';\nimport { ThreadService } from '../../services/thread/thread.service';\n\n@Injectable()\nexport class MessageEffects {\n private readonly _actions$: Actions = inject(Actions);\n private readonly _agentService: AgentService = inject(AgentService);\n private readonly _threadService: ThreadService = inject(ThreadService);\n\n getResponse$ = createEffect(() =>\n this._actions$.pipe(\n ofType(getResponse),\n switchMap(({ params, isStream, agent }) =>\n from(this._agentService.getResponse(params, isStream, agent)).pipe(\n switchMap((responseStream) => handleResponseStream(responseStream)),\n catchError((error: Error) => of(getResponseFailure({ error }))),\n ),\n ),\n ),\n );\n\n reloadResponse$ = createEffect(() =>\n this._actions$.pipe(\n ofType(reloadResponse),\n switchMap(({ params, isStream, agent }) =>\n from(this._agentService.reloadResponse(params, isStream, agent)).pipe(\n switchMap((responseStream) => handleResponseStream(responseStream)),\n catchError((error: Error) => of(getResponseFailure({ error }))),\n ),\n ),\n ),\n );\n\n fetchMessagesFromThread$ = createEffect(() =>\n this._actions$.pipe(\n ofType(fetchMessagesFromThread),\n switchMap(({ thread }) =>\n from(this._threadService.fetchMessagesFromThread(thread)).pipe(\n map((messages: UIResponseMessage[]) => {\n return fetchMessagesFromThreadSuccess({ messages });\n }),\n catchError((error: Error) => of(fetchMessagesFromThreadFailure({ error }))),\n ),\n ),\n ),\n );\n\n abortResponseGeneration$ = createEffect(\n () =>\n this._actions$.pipe(\n ofType(abortResponseGeneration),\n map(() => this._agentService.abortOperation()),\n ),\n { dispatch: false },\n );\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { createReducer, on } from '@ngrx/store';\n\nimport {\n abortResponseGeneration,\n addAssistantMessage,\n addToolCall,\n addToolResult,\n addUserMessage,\n clearMessages,\n fetchMessagesFromThread,\n fetchMessagesFromThreadFailure,\n fetchMessagesFromThreadSuccess,\n getResponse,\n getResponseFailure,\n getResponseSuccess,\n reloadResponse,\n toggleToolMessage,\n toggleToolTrace,\n} from './message.actions';\nimport {\n addToolTraceCallEntry,\n addToolTraceResultEntry,\n handleToolTraceStateOnThreadFetch,\n updateLastToolTraceEntry,\n updateMessageFields,\n} from './message.utils';\nimport { ToolTraceState, UIMessage } from './types';\nimport { MESSAGES_LOADING_STATE } from '../../enums/loading-state.enum';\nimport { MessagesLoadingType } from '../../types/loading.type';\n\nexport type MessageReducerStateType = {\n messages: UIMessage[];\n loadingState: MessagesLoadingType;\n toolTraceState: ToolTraceState[];\n};\n\nexport const initialState: MessageReducerStateType = {\n messages: [],\n loadingState: { type: MESSAGES_LOADING_STATE.NOT_STARTED },\n toolTraceState: [],\n};\n\nexport const messageReducer = createReducer(\n initialState,\n on(getResponse, (state, { params: { messages } }) => {\n const userQuery: string | string[] | UIMessage[] | any[] = messages;\n\n return {\n ...state,\n messages: [...state.messages, ...userQuery],\n loadingState: {\n type: MESSAGES_LOADING_STATE.LOADING_RESPONSE as typeof MESSAGES_LOADING_STATE.LOADING_RESPONSE,\n },\n };\n }),\n on(getResponseSuccess, (state) => {\n const updatedMessages: UIMessage[] = updateMessageFields(state.messages, true, true);\n const updatedToolTraceState: ToolTraceState[] = updateLastToolTraceEntry(\n state.toolTraceState,\n );\n\n return {\n ...state,\n messages: [...updatedMessages],\n loadingState: {\n type: MESSAGES_LOADING_STATE.GET_RESPONSE_SUCCESS as typeof MESSAGES_LOADING_STATE.GET_RESPONSE_SUCCESS,\n },\n toolTraceState: updatedToolTraceState,\n };\n }),\n on(getResponseFailure, (state, { error }) => {\n const errorMessage: string =\n 'Error during response generation: ' + (error.message || 'Unknown error');\n\n const updatedToolTraceState: ToolTraceState[] = updateLastToolTraceEntry(\n state.toolTraceState,\n true,\n );\n\n console.warn(errorMessage);\n\n return {\n ...state,\n loadingState: {\n type: MESSAGES_LOADING_STATE.ERROR,\n message: errorMessage,\n },\n toolTraceState: updatedToolTraceState,\n };\n }),\n on(reloadResponse, (state, { params: { messages } }) => {\n const userQuery: string | string[] | UIMessage[] | any[] = messages;\n\n return {\n ...state,\n messages: [...state.messages, ...userQuery],\n loadingState: {\n type: MESSAGES_LOADING_STATE.LOADING_RESPONSE as typeof MESSAGES_LOADING_STATE.LOADING_RESPONSE,\n },\n };\n }),\n on(clearMessages, (_unusedState) => {\n return {\n ...initialState,\n };\n }),\n on(fetchMessagesFromThread, (state) => {\n return {\n ...state,\n messages: [],\n loadingState: {\n type: MESSAGES_LOADING_STATE.LOADING_FROM_THREAD as typeof MESSAGES_LOADING_STATE.LOADING_FROM_THREAD,\n },\n };\n }),\n on(fetchMessagesFromThreadSuccess, (state, { messages }) => {\n const updatedMessages: UIMessage[] = updateMessageFields(messages, true, true);\n const updatedToolTraceState: ToolTraceState[] =\n handleToolTraceStateOnThreadFetch(updatedMessages);\n\n return {\n ...state,\n messages: [...updatedMessages],\n loadingState: {\n type: MESSAGES_LOADING_STATE.FETCH_MESSAGES_FROM_THREAD_SUCCESS as typeof MESSAGES_LOADING_STATE.FETCH_MESSAGES_FROM_THREAD_SUCCESS,\n },\n toolTraceState: updatedToolTraceState,\n };\n }),\n on(fetchMessagesFromThreadFailure, (state, { error }) => {\n return {\n ...state,\n loadingState: {\n type: MESSAGES_LOADING_STATE.ERROR,\n message: error.message || 'Failed to fetch messages from thread',\n },\n };\n }),\n on(addUserMessage, (state, { message }) => {\n return {\n ...state,\n messages: [...state.messages, message],\n };\n }),\n on(addAssistantMessage, (state, { message }) => {\n const updateExisting: boolean = state.messages.some((msg) => msg.id === message.id);\n\n if (updateExisting) {\n return {\n ...state,\n messages: state.messages.map((msg) =>\n msg.id === message.id ? { ...msg, content: message.content } : msg,\n ),\n };\n }\n\n const updatedToolTraceState: ToolTraceState[] = updateLastToolTraceEntry(\n state.toolTraceState,\n );\n\n return {\n ...state,\n messages: [...state.messages, message],\n toolTraceState: updatedToolTraceState,\n };\n }),\n on(addToolCall, (state, { message }) => {\n const updatedToolTraceState: ToolTraceState[] = addToolTraceCallEntry(state, message);\n\n return {\n ...state,\n messages: [...state.messages, message],\n toolTraceState: updatedToolTraceState,\n };\n }),\n on(addToolResult, (state, { toolCallId, result }) => {\n const updatedToolTraceState: ToolTraceState[] = addToolTraceResultEntry(\n state.toolTraceState,\n toolCallId,\n result,\n );\n\n return {\n ...state,\n messages: state.messages.map((msg) =>\n msg.id === toolCallId ? { ...msg, result } : msg,\n ),\n toolTraceState: updatedToolTraceState,\n };\n }),\n on(abortResponseGeneration, (state) => {\n const updatedToolTraceState: ToolTraceState[] = updateLastToolTraceEntry(\n state.toolTraceState,\n false,\n true,\n );\n\n return {\n ...state,\n loadingState: {\n type: MESSAGES_LOADING_STATE.NOT_STARTED as typeof MESSAGES_LOADING_STATE.NOT_STARTED,\n },\n toolTraceState: updatedToolTraceState,\n };\n }),\n on(toggleToolTrace, (state, { stateForMessageId }) => {\n const updatedToolTraceState: ToolTraceState[] = state.toolTraceState.map(\n (traceState: ToolTraceState) => {\n if (traceState.stateForMessageId === stateForMessageId) {\n return {\n ...traceState,\n isExpanded: !traceState.isExpanded,\n };\n }\n\n return traceState;\n },\n );\n\n return {\n ...state,\n toolTraceState: updatedToolTraceState,\n };\n }),\n on(toggleToolMessage, (state, { toolMessageId, parentToolTraceId }) => {\n // updating the isExpanded field of the tool message for executed tools\n const matchingToolTraceParent: ToolTraceState | undefined = state.toolTraceState.find(\n (traceState: ToolTraceState) => traceState.stateForMessageId === parentToolTraceId,\n );\n\n if (!matchingToolTraceParent) {\n return state;\n }\n\n const updatedExecutedTools = matchingToolTraceParent.executedTools.map((tool) => {\n if (tool.id === toolMessageId) {\n return {\n ...tool,\n isExpanded: !tool.isExpanded,\n };\n }\n\n return tool;\n });\n\n const updatedToolTraceState: ToolTraceState[] = state.toolTraceState.map(\n (traceState: ToolTraceState) => {\n if (traceState.stateForMessageId === parentToolTraceId) {\n return {\n ...traceState,\n executedTools: updatedExecutedTools,\n };\n }\n return traceState;\n },\n );\n\n return {\n ...state,\n toolTraceState: updatedToolTraceState,\n };\n }),\n);\n","/**\n * Use this keys to store and retrieve user interface preferences from preferences storage.\n */\nexport const UI_PREFS_KEYS = {\n PROMPTS: 'prompts',\n FAVORITE_PROMPTS: 'favoritePrompts',\n TOOLS: 'tools',\n WEB_SEARCH_ENABLED: 'webSearchEnabled',\n};\n","import { Injectable } from '@angular/core';\nimport { delay, Observable, of } from 'rxjs';\n\nimport { Prompt, UIPrompt } from '../../../temp/temp-interfaces';\n\n// TODO: Implement actual API calls to backend when available\n@Injectable({\n providedIn: 'root',\n})\nexport class PromptService {\n private _tempPrompts: UIPrompt[] = [\n {\n name: 'risk-assessment-mode',\n description:\n 'Act as a risk analyst. You will assess portfolio risks and flag areas of concern. Avoid offering investment advice.\\n\\nUse internal tools unless instructed otherwise. If you encounter missing data or ambiguous input, pause and request clarification.',\n messages: [\n {\n role: 'user',\n content: {\n type: 'text',\n text: 'Please analyze the portfolio risk and highlight potential issues.',\n },\n },\n ],\n source: {\n mcpName: 'riskModule',\n isUserDefined: false,\n },\n },\n {\n name: 'generate-performance-summary',\n description:\n \"Create a quarterly performance summary using the client's portfolio context. Include benchmark comparisons and visual charts using internal tools.\",\n messages: [\n {\n role: 'user',\n content: {\n type: 'text',\n text: 'Generate a quarterly performance summary report for the current portfolio.',\n },\n },\n ],\n source: {\n mcpName: 'performanceTools',\n },\n },\n {\n name: 'client-feedback-draft',\n description:\n 'Draft a response to client feedback or concerns. Wait for confirmation on sentiment and tone before sending any emails.\\n\\nUtilize internal tools for portfolio references.',\n messages: [\n {\n role: 'user',\n content: {\n type: 'text',\n text: 'Assist me in drafting a response to the following client feedback.',\n },\n },\n ],\n source: {\n mcpName: 'clientRelations',\n isUserDefined: false,\n },\n },\n {\n name: 'compare-instruments',\n description:\n 'Generate a comparison between two or more instruments across performance, volatility, and liquidity metrics.',\n messages: [\n {\n role: 'user',\n content: {\n type: 'text',\n text: 'Compare these instruments: [insert instrument list here].',\n },\n },\n ],\n source: {\n mcpName: 'analyticsSuite',\n },\n },\n {\n name: 'client-profile-summary',\n description:\n 'Generate a concise profile summary for a client, including current allocations, recent activity, and flagged risks.',\n messages: [\n {\n role: 'user',\n content: {\n type: 'text',\n text: \"Provide a summary of the client's investment profile.\",\n },\n },\n ],\n source: {\n mcpName: 'clientProfiles',\n },\n },\n {\n name: 'generate-compliance-report',\n description:\n \"Create a compliance summary based on the client's portfolio holdings and restrictions. Use internal compliance modules for reference.\",\n messages: [\n {\n role: 'user',\n content: {\n type: 'text',\n text: 'Generate a compliance report for the client portfolio.',\n },\n },\n ],\n source: {\n mcpName: 'complianceTools',\n },\n },\n {\n name: 'emerging-sector-analysis',\n description:\n 'Identify and summarize performance trends in emerging market sectors using available market data.',\n messages: [\n {\n role: 'user',\n content: {\n type: 'text',\n text: 'Analyze emerging sector trends for the last year.',\n },\n },\n ],\n source: {\n mcpName: 'marketAnalysis',\n },\n },\n {\n name: 'meeting-summary-drafter',\n description:\n 'Draft a professional summary of a client meeting. Wait for confirmation on details before generating final text or sending follow-ups.',\n messages: [\n {\n role: 'user',\n content: {\n type: 'text',\n text: 'Help me draft a summary of the client meeting notes.',\n },\n },\n ],\n source: {\n mcpName: 'clientRelations',\n },\n },\n {\n name: 'client-alert-monitor',\n description:\n 'Monitor and summarize alerts triggered by portfolio movements, risk thresholds, or compliance breaches.',\n messages: [\n {\n role: 'user',\n content: {\n type: 'text',\n text: \"Summarize recent alerts for this client's portfolio.\",\n },\n },\n ],\n source: {\n mcpName: 'alertSystem',\n },\n },\n {\n name: 'historical-performance-review',\n description: \"Analyze an instrument's long-term performance over a custom time range.\",\n messages: [\n {\n role: 'user',\n content: {\n type: 'text',\n text: 'Provide a historical performance review for the specified instrument.',\n },\n },\n ],\n source: {\n mcpName: 'analyticsSuite',\n },\n },\n ];\n\n public fetchPrompts(): Observable<UIPrompt[]> {\n return of(this._tempPrompts).pipe(delay(2000));\n }\n\n public createPrompt(prompt: Prompt): Observable<null> {\n console.log('Creating prompt:', prompt);\n\n return of(null).pipe(delay(2000));\n }\n\n public updatePrompt(\n name: string,\n prompt: { role: 'user' | 'assistant'; content: { type: 'text'; text: string } }[],\n description: string,\n ): Observable<null> {\n console.log('Updating prompt:', name, prompt, description);\n\n return of(null).pipe(delay(2000));\n }\n\n public deletePrompt(name: string): Observable<null> {\n console.log('Deleting prompt:', name);\n\n return of(null).pipe(delay(2000));\n }\n\n // TODO: subscribe to prompt updates prompts/update\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { mergeMap, map, of, catchError, from, forkJoin, EMPTY } from 'rxjs';\n\nimport {\n createPrompt,\n createPromptFailure,\n createPromptSuccess,\n deletePrompt,\n deletePromptFailure,\n deletePromptSuccess,\n fetchPrompts,\n fetchPromptsFailure,\n fetchPromptsSuccess,\n togglePromptFavorite,\n updatePrompt,\n updatePromptFailure,\n updatePromptSuccess,\n} from './prompt.actions';\nimport { selectAllPrompts, selectFavoritePromptNames } from './prompt.selector';\nimport { UIPrompt } from '../../../temp/temp-interfaces';\nimport { UI_PREFS_KEYS } from '../../constants/ui-prefs-keys';\nimport { IOConnectService } from '../../services/io/io.service';\nimport { PromptService } from '../../services/prompt/prompt.service';\n\n@Injectable()\nexport class PromptEffects {\n private _actions$: Actions = inject(Actions);\n private _promptService: PromptService = inject(PromptService);\n private _ioService: IOConnectService = inject(IOConnectService);\n private _store: Store = inject(Store);\n\n private _promptState = this._store.selectSignal(selectAllPrompts);\n private _favoritePromptNames = this._store.selectSignal(selectFavoritePromptNames);\n\n fetchPrompts$ = createEffect(() => {\n return this._actions$.pipe(\n ofType(fetchPrompts),\n mergeMap(() =>\n forkJoin({\n prompts: this._promptService.fetchPrompts().pipe(catchError(() => of(null))),\n promptsFromPrefs: from(\n this._ioService.fetchPrefs<UIPrompt[]>(UI_PREFS_KEYS.PROMPTS),\n ).pipe(catchError(() => of(null))),\n favoritePromptNames: from(\n this._ioService.fetchPrefs<string[]>(\n UI_PREFS_KEYS.FAVORITE_PROMPTS,\n ) as Promise<string[]>,\n ).pipe(catchError(() => of([] as string[]))),\n }).pipe(\n map(({ prompts, promptsFromPrefs, favoritePromptNames }) => {\n if (!prompts && !promptsFromPrefs) {\n return fetchPromptsFailure({\n error: new Error('Failed to fetch prompts from all sources'),\n });\n }\n\n const combinedPrompts: UIPrompt[] = [\n ...(prompts ?? []),\n ...(promptsFromPrefs ?? []),\n ];\n\n return fetchPromptsSuccess({\n prompts: combinedPrompts,\n favorites: favoritePromptNames ? favoritePromptNames : [],\n });\n }),\n ),\n ),\n );\n });\n\n createPrompt$ = createEffect(() =>\n this._actions$.pipe(\n ofType(createPrompt),\n mergeMap(({ prompt }) =>\n this._promptService.createPrompt(prompt).pipe(\n map(() => createPromptSuccess({ prompt })),\n catchError((error: Error) => of(createPromptFailure({ error }))),\n ),\n ),\n ),\n );\n\n updatePrompt$ = createEffect(() => {\n return this._actions$.pipe(\n ofType(updatePrompt),\n mergeMap(({ name, prompt, description }) =>\n this._promptService.updatePrompt(name, prompt, description).pipe(\n map(() =>\n updatePromptSuccess({\n name,\n prompt,\n description,\n }),\n ),\n catchError((error) => of(updatePromptFailure({ error, name }))),\n ),\n ),\n );\n });\n\n deletePrompt$ = createEffect(() => {\n return this._actions$.pipe(\n ofType(deletePrompt),\n mergeMap(({ name }) =>\n this._promptService.deletePrompt(name).pipe(\n map(() => deletePromptSuccess({ name })),\n catchError((error) => of(deletePromptFailure({ error, name }))),\n ),\n ),\n );\n });\n\n // Trigger this effect on create, update, delete prompt success to sync the prefs\n syncPromptInPrefs$ = createEffect(\n () =>\n this._actions$.pipe(\n ofType(createPromptSuccess, updatePromptSuccess, deletePromptSuccess),\n mergeMap(() => {\n return from(\n this._ioService.updatePrefs(\n UI_PREFS_KEYS.PROMPTS,\n this._promptState().filter((p) => p.source && p.source.isUserDefined),\n ),\n ).pipe(\n catchError((error) => {\n console.error('Failed to sync prefs:', error);\n return EMPTY;\n }),\n );\n }),\n ),\n { dispatch: false },\n );\n\n syncFavoritePromptsInPrefs$ = createEffect(\n () =>\n this._actions$.pipe(\n ofType(togglePromptFavorite),\n mergeMap(() => {\n return from(\n this._ioService.updatePrefs(\n UI_PREFS_KEYS.FAVORITE_PROMPTS,\n this._favoritePromptNames(),\n ),\n ).pipe(\n catchError((error) => {\n console.error('Failed to sync prefs:', error);\n return EMPTY;\n }),\n );\n }),\n ),\n { dispatch: false },\n );\n}\n","import { createReducer, on } from '@ngrx/store';\n\nimport {\n createPrompt,\n createPromptFailure,\n createPromptSuccess,\n deletePrompt,\n deletePromptFailure,\n deletePromptSuccess,\n fetchPrompts,\n fetchPromptsFailure,\n fetchPromptsSuccess,\n selectPrompt,\n togglePromptFavorite,\n updatePrompt,\n updatePromptFailure,\n updatePromptSuccess,\n} from './prompt.actions';\nimport { USER_PROMPT_STATE } from '../../../components/prompt/enums';\nimport { UIPrompt } from '../../../temp/temp-interfaces';\nimport { LOADING_STATE } from '../../enums/loading-state.enum';\nimport { LoadingType } from '../../types/loading.type';\n\nexport type PromptReducerStateType = {\n prompts: UIPrompt[];\n favoritePromptNames: string[];\n selectedPrompt: UIPrompt | null;\n loadingState: {\n fetchingState: LoadingType;\n createLoadingState: LoadingType;\n };\n};\n\nexport const initialState: PromptReducerStateType = {\n prompts: [],\n favoritePromptNames: [],\n selectedPrompt: null,\n loadingState: {\n fetchingState: { type: LOADING_STATE.NOT_STARTED },\n createLoadingState: { type: LOADING_STATE.NOT_STARTED },\n },\n};\n\nexport const promptReducer = createReducer(\n initialState,\n on(fetchPrompts, (state) => {\n return {\n ...state,\n loadingState: {\n ...state.loadingState,\n fetchingState: { type: LOADING_STATE.LOADING } as LoadingType,\n },\n };\n }),\n on(fetchPromptsSuccess, (state, { prompts, favorites }) => {\n return {\n ...state,\n prompts,\n loadingState: {\n ...state.loadingState,\n fetchingState: { type: LOADING_STATE.SUCCESS } as LoadingType,\n },\n favoritePromptNames: favorites,\n };\n }),\n on(fetchPromptsFailure, (state, { error }) => {\n return {\n ...state,\n loadingState: {\n ...state.loadingState,\n fetchingState: {\n type: LOADING_STATE.ERROR,\n message: error.message,\n } as LoadingType,\n },\n };\n }),\n on(createPrompt, (state) => {\n return {\n ...state,\n loadingState: {\n ...state.loadingState,\n createLoadingState: { type: LOADING_STATE.LOADING } as LoadingType,\n },\n };\n }),\n on(createPromptSuccess, (state, { prompt }) => {\n return {\n ...state,\n prompts: [...state.prompts, prompt],\n loadingState: {\n ...state.loadingState,\n createLoadingState: { type: LOADING_STATE.SUCCESS } as LoadingType,\n },\n };\n }),\n on(createPromptFailure, (state, { error }) => {\n return {\n ...state,\n loadingState: {\n ...state.loadingState,\n createLoadingState: {\n type: LOADING_STATE.ERROR,\n message: error.message,\n } as LoadingType,\n },\n };\n }),\n on(updatePrompt, (state, { name }) => {\n return {\n ...state,\n prompts: state.prompts.map((p) => {\n if (p.name === name) {\n return {\n ...p,\n state: USER_PROMPT_STATE.UPDATING,\n };\n }\n\n return p;\n }),\n };\n }),\n on(updatePromptSuccess, (state, { name, prompt, description }) => {\n return {\n ...state,\n prompts: state.prompts.map((p) => {\n if (p.name === name) {\n return {\n ...p,\n description,\n messages: prompt,\n state: USER_PROMPT_STATE.IDLE,\n };\n }\n\n return p;\n }),\n };\n }),\n on(updatePromptFailure, (state, { error, name }) => {\n return {\n ...state,\n loadingState: {\n ...state.loadingState,\n createLoadingState: {\n type: LOADING_STATE.ERROR,\n message: error.message,\n } as LoadingType,\n },\n prompts: state.prompts.map((p) => {\n if (p.name === name) {\n return {\n ...p,\n state: USER_PROMPT_STATE.IDLE,\n };\n }\n\n return p;\n }),\n };\n }),\n on(deletePrompt, (state, { name }) => {\n return {\n ...state,\n prompts: state.prompts.map((p) => {\n if (p.name === name) {\n return {\n ...p,\n state: USER_PROMPT_STATE.DELETING,\n };\n }\n\n return p;\n }),\n };\n }),\n on(deletePromptSuccess, (state, { name }) => {\n return {\n ...state,\n prompts: state.prompts.filter((p) => p.name !== name),\n favoritePromptNames: state.favoritePromptNames.filter((n) => n !== name),\n };\n }),\n on(deletePromptFailure, (state, { name }) => {\n return {\n ...state,\n prompts: state.prompts.map((p) => {\n if (p.name === name) {\n return {\n ...p,\n state: USER_PROMPT_STATE.IDLE,\n };\n }\n\n return p;\n }),\n };\n }),\n on(togglePromptFavorite, (state, { name }) => {\n if (!state.favoritePromptNames.includes(name)) {\n return {\n ...state,\n favoritePromptNames: [...state.favoritePromptNames, name],\n };\n }\n\n return {\n ...state,\n favoritePromptNames: state.favoritePromptNames.filter((n) => n !== name),\n };\n }),\n on(selectPrompt, (state, { prompt }) => {\n return {\n ...state,\n selectedPrompt: prompt,\n };\n }),\n);\n","import { inject, Injectable, Signal } from '@angular/core';\nimport { IoIntelWeb } from '@interopio/intel-web';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { mergeMap, from, of, map, catchError, filter, switchMap } from 'rxjs';\n\nimport {\n renameThread,\n renameThreadSuccess,\n renameThreadFailure,\n fetchThreads,\n fetchThreadsSuccess,\n deleteThread,\n deleteThreadSuccess,\n deleteThreadFailure,\n fetchThreadsFailure,\n} from './thread.actions';\nimport { UIThread } from './types';\nimport { ThreadService } from '../../services/thread/thread.service';\nimport { AuthFacade } from '../auth/auth.facade';\n\n@Injectable()\nexport class ThreadEffects {\n private readonly _actions$: Actions = inject(Actions);\n private readonly _threadService: ThreadService = inject(ThreadService);\n\n private readonly _authFacade: AuthFacade = inject(AuthFacade);\n private readonly _username: Signal<string | null> = this._authFacade.username;\n\n fetchThreads$ = createEffect(() =>\n this._actions$.pipe(\n ofType(fetchThreads),\n filter(() => this._username() !== null),\n switchMap(({ agentId }) =>\n from(\n this._threadService.fetchThreads(agentId, this._username() ?? 'unknown-user'),\n ).pipe(\n switchMap((threads: IoIntelWeb.Threads.Thread[]) =>\n from(this._threadService.toUIThreads(threads)).pipe(\n map((uiThreads: UIThread[]) =>\n fetchThreadsSuccess({\n threads: uiThreads,\n }),\n ),\n catchError((error) => of(fetchThreadsFailure({ error }))),\n ),\n ),\n ),\n ),\n ),\n );\n\n renameThread$ = createEffect(() =>\n this._actions$.pipe(\n ofType(renameThread),\n mergeMap((action) =>\n from(this._threadService.renameThread(action.thread, action.newTitle)).pipe(\n map(() =>\n renameThreadSuccess({ id: action.thread.id, newName: action.newTitle }),\n ),\n catchError((error) => of(renameThreadFailure({ error }))),\n ),\n ),\n ),\n );\n\n deleteThread$ = createEffect(() =>\n this._actions$.pipe(\n ofType(deleteThread),\n mergeMap((action) =>\n from(this._threadService.deleteThread(action.thread)).pipe(\n map(() => deleteThreadSuccess({ id: action.thread.id })),\n catchError((error) => of(deleteThreadFailure({ error }))),\n ),\n ),\n ),\n );\n}\n","import { createReducer, on } from '@ngrx/store';\n\nimport { THREAD_STATE } from './enums';\nimport {\n renameThreadSuccess,\n renameThreadFailure,\n renameThread,\n fetchThreads,\n fetchThreadsFailure,\n fetchThreadsSuccess,\n changeActiveThread,\n deleteThreadSuccess,\n deleteThread,\n deleteThreadFailure,\n} from './thread.actions';\nimport { UIThread } from './types';\nimport { LOADING_STATE } from '../../enums/loading-state.enum';\nimport { LoadingType } from '../../types/loading.type';\n\nexport type ThreadReducerStateType = {\n threads: UIThread[];\n activeThreadId: string | null;\n loadingState: LoadingType;\n error: string | null;\n};\n\nexport const initialState: ThreadReducerStateType = {\n threads: [],\n activeThreadId: null,\n loadingState: { type: LOADING_STATE.NOT_STARTED },\n error: null,\n};\n\nexport const threadReducer = createReducer(\n initialState,\n on(fetchThreads, (state) => {\n return {\n ...state,\n loadingState: { type: LOADING_STATE.LOADING as typeof LOADING_STATE.LOADING },\n };\n }),\n on(fetchThreadsSuccess, (state, { threads }) => {\n return {\n ...state,\n loadingState: {\n type: LOADING_STATE.SUCCESS as typeof LOADING_STATE.SUCCESS,\n },\n threads: threads,\n error: null,\n };\n }),\n on(fetchThreadsFailure, (state, { error }) => {\n return {\n ...state,\n loadingState: {\n type: LOADING_STATE.ERROR as typeof LOADING_STATE.ERROR,\n message: error,\n },\n error: error,\n };\n }),\n on(renameThread, (state, { thread }) => {\n return {\n ...state,\n threads: state.threads.map((t) =>\n t.id === thread.id ? { ...t, state: THREAD_STATE.RENAMING as const } : t,\n ),\n error: null,\n };\n }),\n on(renameThreadSuccess, (state, { id, newName }) => {\n return {\n ...state,\n threads: state.threads.map((t) =>\n t.id === id ? { ...t, title: newName, state: THREAD_STATE.IDLE as const } : t,\n ),\n error: null,\n };\n }),\n on(renameThreadFailure, (state, { error }) => {\n return {\n ...state,\n threads: state.threads.map((t) =>\n t.state === THREAD_STATE.RENAMING ? { ...t, state: THREAD_STATE.IDLE as const } : t,\n ),\n error: error.message,\n };\n }),\n on(deleteThread, (state, { thread }) => {\n return {\n ...state,\n threads: state.threads.map((t) =>\n t.id === thread.id ? { ...t, state: THREAD_STATE.DELETING as const } : t,\n ),\n error: null,\n };\n }),\n on(deleteThreadSuccess, (state, { id }) => {\n return {\n ...state,\n threads: state.threads.filter((t) => t.id !== id),\n activeThreadId: state.activeThreadId === id ? null : state.activeThreadId,\n };\n }),\n on(deleteThreadFailure, (state, { error }) => {\n return {\n ...state,\n threads: state.threads.map((t) =>\n t.state === THREAD_STATE.DELETING ? { ...t, state: THREAD_STATE.IDLE as const } : t,\n ),\n error: error.message,\n };\n }),\n on(changeActiveThread, (state, { threadId }) => {\n return {\n ...state,\n activeThreadId: threadId,\n };\n }),\n);\n","import { inject, Injectable } from '@angular/core';\nimport { IoIntelWeb } from '@interopio/intel-web';\n\nimport { UITool } from '../../store/tool/types';\nimport { IOIntelWebService } from '../io-intel-web/io-intel-web.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ToolsService {\n private _ioIntelWebService: IOIntelWebService = inject(IOIntelWebService);\n\n public fetchTools(): Promise<IoIntelWeb.Tools.Tool[]> {\n return this._ioIntelWebService.listTools();\n }\n\n public toggleTool(tool: UITool): Promise<IoIntelWeb.Tools.Tool> {\n return this._ioIntelWebService.toggleTool(tool.name, !tool.enabled);\n }\n\n // TODO: subscribe to tool updates tools/update\n}\n","import { inject, Injectable } from '@angular/core';\nimport { IoIntelWeb } from '@interopio/intel-web';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { mergeMap, map, of, catchError, from, switchMap } from 'rxjs';\n\nimport { USER_TOOL_STATE } from './enums';\nimport {\n fetchTools,\n fetchToolsFailure,\n fetchToolsSuccess,\n toggleTool,\n toggleToolFailure,\n toggleToolSuccess,\n} from './tool.actions';\nimport { UITool } from './types';\nimport { ToolsService } from '../../services/tools/tools.service';\n\n@Injectable()\nexport class ToolEffects {\n private _actions$: Actions = inject(Actions);\n private _toolsService: ToolsService = inject(ToolsService);\n\n fetchTools$ = createEffect(() => {\n return this._actions$.pipe(\n ofType(fetchTools),\n mergeMap(() =>\n from(this._toolsService.fetchTools()).pipe(\n map((tools: IoIntelWeb.Tools.Tool[]) => {\n const uiTools: UITool[] = tools.map((tool) => ({\n ...tool,\n state: USER_TOOL_STATE.IDLE,\n }));\n\n return fetchToolsSuccess({ tools: uiTools });\n }),\n catchError((error) =>\n of(\n fetchToolsFailure({\n error: error instanceof Error ? error : new Error(String(error)),\n }),\n ),\n ),\n ),\n ),\n );\n });\n\n toggleTool$ = createEffect(() => {\n return this._actions$.pipe(\n ofType(toggleTool),\n switchMap(({ tool }) => {\n return from(this._toolsService.toggleTool(tool)).pipe(\n map((updatedTool: IoIntelWeb.Tools.Tool) => {\n const uiTool: UITool = {\n ...updatedTool,\n state: USER_TOOL_STATE.IDLE,\n };\n\n return toggleToolSuccess({ tool: uiTool });\n }),\n catchError((error) =>\n of(\n toggleToolFailure({\n error: error instanceof Error ? error : new Error(String(error)),\n tool,\n }),\n ),\n ),\n );\n }),\n );\n });\n}\n","import { createReducer, on } from '@ngrx/store';\n\nimport { USER_TOOL_STATE } from './enums';\nimport {\n fetchTools,\n fetchToolsFailure,\n fetchToolsSuccess,\n toggleTool,\n toggleToolFailure,\n toggleToolSuccess,\n} from './tool.actions';\nimport { UITool } from './types';\nimport { LOADING_STATE } from '../../enums/loading-state.enum';\nimport { LoadingType } from '../../types/loading.type';\n\nexport type ToolReducerStateType = {\n tools: UITool[];\n loadingState: {\n fetchingState: LoadingType;\n };\n};\n\nexport const initialState: ToolReducerStateType = {\n tools: [],\n loadingState: {\n fetchingState: { type: LOADING_STATE.NOT_STARTED },\n },\n};\n\nexport const toolReducer = createReducer(\n initialState,\n on(fetchTools, (state) => {\n return {\n ...state,\n loadingState: {\n fetchingState: { type: LOADING_STATE.LOADING } as LoadingType,\n },\n };\n }),\n on(fetchToolsSuccess, (state, { tools }) => {\n return {\n ...state,\n tools,\n loadingState: {\n fetchingState: { type: LOADING_STATE.SUCCESS } as LoadingType,\n },\n };\n }),\n on(fetchToolsFailure, (state, { error }) => {\n return {\n ...state,\n loadingState: {\n fetchingState: {\n type: LOADING_STATE.ERROR,\n message: error.message,\n } as LoadingType,\n },\n };\n }),\n on(toggleTool, (state, { tool }) => {\n return {\n ...state,\n tools: state.tools.map((t) =>\n t.name === tool.name ? { ...t, state: USER_TOOL_STATE.ENABLING_DISABLING } : t,\n ),\n };\n }),\n on(toggleToolSuccess, (state, { tool }) => {\n return {\n ...state,\n tools: state.tools.map((t) =>\n t.name === tool.name\n ? { ...t, enabled: tool.enabled, state: USER_TOOL_STATE.IDLE }\n : t,\n ),\n };\n }),\n on(toggleToolFailure, (state, { tool }) => {\n return {\n ...state,\n tools: state.tools.map((t) =>\n t.name === tool.name ? { ...t, state: USER_TOOL_STATE.IDLE } : t,\n ),\n };\n }),\n);\n","import { inject, Injectable } from '@angular/core';\nimport { IoIntelWorkingContext } from '@interopio/working-context';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { of, catchError, mergeMap, from, map } from 'rxjs';\n\nimport {\n getWorkingContext,\n getWorkingContextFailure,\n getWorkingContextSuccess,\n fetchIsWorkingContextEnabledFailure,\n fetchIsWorkingContextEnabledSuccess,\n fetchIsWorkingContextEnabled,\n} from './working-context.actions';\nimport { WorkingContextService } from '../../services/working-context/working-context.service';\n\n@Injectable()\nexport class WorkingContextEffects {\n private readonly _actions$: Actions = inject(Actions);\n private readonly _workingContextService: WorkingContextService = inject(WorkingContextService);\n\n getWorkingContext$ = createEffect(() =>\n this._actions$.pipe(\n ofType(getWorkingContext),\n mergeMap(() => {\n return from(this._workingContextService.getWorkingContext()).pipe(\n map((workingContext: Record<string, IoIntelWorkingContext.Property>) =>\n getWorkingContextSuccess({ workingContext }),\n ),\n catchError((error) =>\n of(\n getWorkingContextFailure({\n error: error instanceof Error ? error : new Error(String(error)),\n }),\n ),\n ),\n );\n }),\n ),\n );\n\n isWorkingContextEnabled$ = createEffect(() =>\n this._actions$.pipe(\n ofType(fetchIsWorkingContextEnabled),\n mergeMap(() => {\n return from(this._workingContextService.isWorkingContextEnabled()).pipe(\n map((isEnabled: boolean) => fetchIsWorkingContextEnabledSuccess({ isEnabled })),\n catchError((error) =>\n of(\n fetchIsWorkingContextEnabledFailure({\n error: error instanceof Error ? error : new Error(String(error)),\n }),\n ),\n ),\n );\n }),\n ),\n );\n}\n","import { IoIntelWorkingContext } from '@interopio/working-context';\nimport { createReducer, on } from '@ngrx/store';\n\nimport {\n fetchIsWorkingContextEnabled,\n fetchIsWorkingContextEnabledFailure,\n fetchIsWorkingContextEnabledSuccess,\n getWorkingContext,\n getWorkingContextFailure,\n getWorkingContextSuccess,\n updateWorkingContext,\n} from './working-context.actions';\nimport { LOADING_STATE } from '../../enums/loading-state.enum';\nimport { LoadingType } from '../../types/loading.type';\n\nexport type WorkingContextReducerStateType = {\n isEnabled: boolean;\n workingContext: Record<string, IoIntelWorkingContext.Property>;\n loadingState: LoadingType;\n};\n\nexport const initialState: WorkingContextReducerStateType = {\n isEnabled: false,\n workingContext: {},\n loadingState: { type: LOADING_STATE.NOT_STARTED },\n};\n\nexport const workingContextReducer = createReducer(\n initialState,\n on(\n getWorkingContext,\n (state): WorkingContextReducerStateType => ({\n ...state,\n loadingState: { type: LOADING_STATE.LOADING },\n }),\n ),\n on(\n getWorkingContextSuccess,\n (state, { workingContext }): WorkingContextReducerStateType => ({\n ...state,\n workingContext,\n loadingState: { type: LOADING_STATE.SUCCESS },\n }),\n ),\n on(\n getWorkingContextFailure,\n (state, { error }): WorkingContextReducerStateType => ({\n ...state,\n loadingState: { type: LOADING_STATE.ERROR, message: error.message },\n }),\n ),\n on(\n updateWorkingContext,\n (state, { workingContext }): WorkingContextReducerStateType => ({\n ...state,\n workingContext,\n }),\n ),\n on(\n fetchIsWorkingContextEnabled,\n (state): WorkingContextReducerStateType => ({ ...state, isEnabled: false }),\n ),\n on(\n fetchIsWorkingContextEnabledSuccess,\n (state, { isEnabled }): WorkingContextReducerStateType => ({\n ...state,\n isEnabled,\n }),\n ),\n on(\n fetchIsWorkingContextEnabledFailure,\n (state, { error }): WorkingContextReducerStateType => ({\n ...state,\n loadingState: { type: LOADING_STATE.ERROR, message: error.message },\n }),\n ),\n);\n","import { AgentEffects } from './agent/agent.effects';\nimport { AgentReducerStateType, agentReducer } from './agent/agent.reducer';\nimport { AuthEffects } from './auth/auth.effects';\nimport { authReducer, AuthReducerStateType } from './auth/auth.reducer';\nimport { MessageEffects } from './message/message.effects';\nimport { messageReducer, MessageReducerStateType } from './message/message.reducer';\nimport { PromptEffects } from './prompt/prompt.effects';\nimport { PromptReducerStateType } from './prompt/prompt.reducer';\nimport { promptReducer } from './prompt/prompt.reducer';\nimport { ThreadEffects } from './thread/thread.effects';\nimport { threadReducer, ThreadReducerStateType } from './thread/thread.reducer';\nimport { ToolEffects } from './tool/tool.effects';\nimport { toolReducer, ToolReducerStateType } from './tool/tool.reducer';\nimport { WorkingContextEffects } from './working-context/working-context.effects';\nimport {\n workingContextReducer,\n WorkingContextReducerStateType,\n} from './working-context/working-context.reducer';\n\nexport type AppState = {\n threadsStore: ThreadReducerStateType;\n authStore: AuthReducerStateType;\n promptStore: PromptReducerStateType;\n toolStore: ToolReducerStateType;\n messageStore: MessageReducerStateType;\n // * Temporary disable web search store until we decide how to handle it\n // webSearchStore: WebSearchReducerStateType;\n agentStore: AgentReducerStateType;\n workingContextStore: WorkingContextReducerStateType;\n};\n\nexport const appReducers = {\n threadsStore: threadReducer,\n authStore: authReducer,\n promptStore: promptReducer,\n toolStore: toolReducer,\n messageStore: messageReducer,\n // * Temporary disable web search store until we decide how to handle it\n // webSearchStore: webSearchReducer,\n agentStore: agentReducer,\n workingContextStore: workingContextReducer,\n};\n\nexport const appEffects: unknown[] = [\n ThreadEffects,\n AuthEffects,\n PromptEffects,\n ToolEffects,\n MessageEffects,\n // * Temporary disable web search store until we decide how to handle it\n //WebSearchEffects,\n AgentEffects,\n WorkingContextEffects,\n];\n","import {\n EnvironmentProviders,\n provideBrowserGlobalErrorListeners,\n provideZonelessChangeDetection,\n Type,\n} from '@angular/core';\nimport { provideRouter } from '@angular/router';\nimport IOBrowser from '@interopio/browser';\nimport IODesktop from '@interopio/desktop';\nimport IOModals from '@interopio/modals-api';\nimport { provideIoConnect } from '@interopio/ng';\nimport Workspaces from '@interopio/workspaces-api';\nimport { provideEffects } from '@ngrx/effects';\nimport { provideStore } from '@ngrx/store';\nimport { provideStoreDevtools } from '@ngrx/store-devtools';\n\nimport { routes } from './routes/app.routes';\nimport { appEffects, appReducers } from './shared/store/app.state';\n\n// TODO: Extend to support one complex object configuration\nexport function provideIoAssist(): EnvironmentProviders[] {\n return [\n provideBrowserGlobalErrorListeners(),\n provideZonelessChangeDetection(),\n provideEffects(...(appEffects as Type<unknown>[])),\n provideRouter(routes),\n provideStore(appReducers),\n provideStoreDevtools({ maxAge: 25 }),\n provideIoConnect({\n browser: {\n factory: () => {\n return IOBrowser({\n libraries: [Workspaces, IOModals],\n modals: {\n dialogs: {\n enabled: true,\n },\n },\n widget: { enable: true },\n });\n },\n },\n desktop: {\n factory: () => {\n return IODesktop({\n libraries: [Workspaces], // IOModals - needs latest version of io-desktop otherwise io won't init\n channels: true,\n appManager: 'skipIcons',\n });\n },\n },\n }),\n ];\n}\n","/*\n * Public API Surface of io-assist-ng\n */\n\nexport * from './lib/io-assist.component';\nexport * from './lib/io-assist.providers';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["EffectService","MODULES","COMPONENTS","i1","initialState"],"mappings":"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"}