@interopio/io-assist-ng 0.0.1 → 1.0.0
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.
- package/README.internal.md +865 -0
- package/README.md +511 -140
- package/README.user.md +159 -0
- package/dist/README.md +511 -140
- package/dist/fesm2022/interopio-io-assist-ng.mjs +4388 -1942
- package/dist/fesm2022/interopio-io-assist-ng.mjs.map +1 -1
- package/dist/index.d.ts +123 -8
- package/dist/styles.css +1 -1
- package/package.json +4 -4
|
@@ -1 +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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"}
|
|
1
|
+
{"version":3,"file":"interopio-io-assist-ng.mjs","sources":["../../src/lib/io-assist.config.ts","../../src/lib/shared/constants/ui-strings.ts","../../src/lib/shared/services/logger/logger.service.ts","../../src/lib/shared/services/component-effect-manager/component-effect-manager.service.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/utils/icon.utils.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/services/responsive-ui/responsive-ui.service.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/enums/loading-state.enum.ts","../../src/lib/shared/store/message/message.selector.ts","../../src/lib/shared/store/message/message.facade.ts","../../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/shared/components/app-spinner/enum.ts","../../src/lib/shared/directives/animation-effect/animation-type.enum.ts","../../src/lib/shared/directives/animation-effect/core/base-animation.effect.ts","../../src/lib/shared/directives/utils.ts","../../src/lib/shared/directives/animation-effect/effects/hover-mouse-follow-animation.effect.ts","../../src/lib/shared/directives/animation-effect/effects/mount-360-glow-animation.effect.ts","../../src/lib/shared/directives/animation-effect/core/chained-animation.effect.ts","../../src/lib/shared/directives/animation-effect/core/animation-effect.factory.ts","../../src/lib/shared/directives/animation-effect/animation-effect.directive.ts","../../src/lib/shared/store/response-stream/response-stream.actions.enum.ts","../../src/lib/shared/store/response-stream/response-stream.actions.ts","../../src/lib/shared/store/response-stream/response-stream.types.ts","../../src/lib/shared/store/response-stream/response-stream.selector.ts","../../src/lib/shared/store/response-stream/response-stream.facade.ts","../../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-ai-web/elicitation/enums.ts","../../src/lib/shared/services/io-ai-web/elicitation/utils.ts","../../src/lib/shared/store/app-lifecycle/app-lifecycle.actions.enum.ts","../../src/lib/shared/store/app-lifecycle/app-lifecycle.actions.ts","../../src/lib/shared/store/app-lifecycle/app-lifecycle.selector.ts","../../src/lib/shared/store/app-lifecycle/app-lifecycle.facade.ts","../../src/lib/shared/services/io/io.service.ts","../../src/lib/shared/services/io-ai-web/elicitation/elicitation.service.ts","../../src/lib/shared/services/io-ai-web/sampling/enums.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-ai-web/types.ts","../../src/lib/shared/services/io-ai-web/sampling/sampling.service.ts","../../src/lib/shared/services/mcp-apps/mcp-apps.service.ts","../../src/lib/shared/services/io-ai-web/io-ai-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/components/app-input/app-input.component.ts","../../src/lib/shared/components/app-input/app-input.component.html","../../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/shared/directives/accent-gradient-border/accent-gradient-border.directive.ts","../../src/lib/components/input-area/input-area.component.ts","../../src/lib/components/input-area/input-area.component.html","../../src/lib/shared/components/app-spinner/app-spinner.component.ts","../../src/lib/shared/components/app-spinner/app-spinner.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/shared/store/message/message.utils.ts","../../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/mcp-app-resource/mcp-app-resource.component.ts","../../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/io-assist.schema.ts","../../src/lib/shared/services/consumer-asset-loader/consumer-asset-loader.service.ts","../../src/lib/io-assist.component.ts","../../src/lib/io-assist.component.html","../../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/store/app-lifecycle/app-lifecycle.effects.ts","../../src/lib/shared/store/app-lifecycle/app-lifecycle.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/response-stream/response-stream.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":["import { InjectionToken, WritableSignal } from '@angular/core';\nimport { IoAiWeb } from '@interopio/ai-web';\nimport { IOConnectNgSettings } from '@interopio/ng';\nimport {\n IoIntelWorkingContextFactoryFunction,\n IoIntelWorkingContext,\n} from '@interopio/working-context';\n\nimport { IoAssistPromptCategory } from './io-assist.types';\n\nexport type IoAssistUserConfig = {\n id: string;\n name?: string;\n};\n\n/**\n * Runtime config passed as a component input to `<io-assist [config]=\"...\">`.\n * Decoupled from the static provider config so it can be set after login.\n */\nexport type IoAssistDynamicConfig = {\n user: IoAssistUserConfig;\n agentServer?: {\n /** Request headers sent with every agent call (e.g. per-user auth tokens). */\n headers?: Record<string, string>;\n };\n};\n\nexport type IoAssistStaticConfig = {\n connectConfig: IOConnectNgSettings;\n aiWebConfig: AIWebConfig;\n defaultAgentName?: string;\n workingContext?: {\n factory: IoIntelWorkingContextFactoryFunction;\n config?: IoIntelWorkingContext.Config;\n };\n defaultPrompts?: IoAssistPromptCategory[];\n};\n\nexport type AIWebConfig = {\n agentServer: Omit<IoAiWeb.WebConfig['agentServer'], 'headers'>;\n mcp?: IoAiWeb.WebConfig['mcp'];\n};\n\nexport const IO_ASSIST_CONFIG = new InjectionToken<IoAssistStaticConfig>('IO_ASSIST_CONFIG');\n\n/**\n * Holds a writable signal that the `IoAssist` component populates from its\n * `config` input. Root-level services (agent, thread effects) inject this to\n * read the current user at call time rather than at construction time.\n */\nexport const IO_ASSIST_DYNAMIC_CONFIG = new InjectionToken<WritableSignal<IoAssistDynamicConfig>>(\n 'IO_ASSIST_DYNAMIC_CONFIG',\n);\n","/**\n * Shared UI strings for the whole application\n * Strings are grouped by component, feature or defaults\n */\nexport const UI_STRINGS = {\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 NO_PROMPTS_CONFIGURED:\n 'No prompts are available. Prompts should be provided as a configuration.',\n NO_PROMPTS_SEE_MORE: 'See more',\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_FILTERED_TOOLS: 'No tools matching your search.',\n NO_TOOLS: 'There are currently no tools available.',\n NO_TOOLS_SEE_MORE: 'See more',\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 user\n ? `Welcome, ${user}! How can I assist you today?`\n : 'Welcome! 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 INITIALIZING_SERVICES: 'Initializing services, please wait...',\n REFRESH: 'Refresh',\n IO_INTEL_INIT_ERROR:\n 'Error initializing IO Intel Web API. Please check your configuration and refresh the page to try again.',\n DOCUMENTATION_LINK(url?: string): string {\n return `For more information, please refer to the documentation: ${url && url.length > 0 ? url : 'https://docs-ai.interop.io/'}`;\n },\n },\n SAMPLING_MODAL: {\n TITLE: 'io.Assist',\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: 'io.Assist',\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 MCP_APP_REPLACE_MODAL: {\n TITLE: 'MCP App Already Open',\n HEADING: 'Replace Existing Instance?',\n TEXT: (toolName: string) =>\n `An instance of \"${toolName}\" is already open in the workspace. Replace it with the new instance, or open it alongside as a new instance?`,\n REPLACE_BUTTON: 'Replace',\n NEW_INSTANCE_BUTTON: 'New Instance',\n },\n};\n","import { Injectable } from '@angular/core';\nimport { IOConnectCore } from '@interopio/core';\n\nconst LIB_NAME = 'io-assist';\n\n/**\n * Centralized logging service for the io-assist Angular app.\n *\n * Wraps the IO Connect Logger API (`IOConnectCore.Logger.API`) and provides\n * namespaced sub-loggers per subsystem. Before IO Connect is initialized,\n * calls to `get()` will throw — call `setLogger()` first.\n *\n * Initialized automatically by `IOConnectService` when IO Connect becomes ready.\n *\n * @example\n * ```ts\n * private readonly _logger = inject(LoggerService);\n *\n * someMethod(): void {\n * const logger = this._logger.get('message.effects');\n * logger.info('Processing message stream');\n * logger.warn('Unexpected chunk type');\n * logger.error('Stream failed', error);\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class LoggerService {\n private _logger: IOConnectCore.Logger.API | undefined;\n\n /**\n * Initialize the logger with the IO Connect Logger API.\n * Should be called once after IO Connect is ready.\n */\n public setLogger(ioLogger: IOConnectCore.Logger.API): void {\n this._logger = ioLogger;\n }\n\n /**\n * Returns true if the logger has been initialized with IO Connect.\n */\n public get isInitialized(): boolean {\n return this._logger !== undefined;\n }\n\n /**\n * Get a namespaced sub-logger for a specific subsystem.\n *\n * @param subSystem - Dot-separated subsystem name (e.g. 'message.effects', 'agent.service').\n * @returns An `IOConnectCore.Logger.API` instance with methods: log, trace, debug, info, warn, error.\n */\n public get(subSystem: string): IOConnectCore.Logger.API {\n if (!this._logger) {\n console.warn(\n 'Logger is not configured. Please call setLogger() first. Falling back to console.',\n );\n\n return console as unknown as IOConnectCore.Logger.API;\n }\n\n return this._logger.subLogger(`${LIB_NAME}.${subSystem}`);\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';\nimport { IOConnectCore } from '@interopio/core';\n\nimport { LoggerService } from '../logger/logger.service';\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 private readonly _logger: LoggerService = inject(LoggerService);\n protected readonly LOGGER_NAME: string = 'ComponentEffectManagerService';\n\n constructor(\n // eslint-disable-next-line @angular-eslint/prefer-inject\n @Inject(COMPONENT_NAME) public componentNameInjected: string,\n ) {\n if (!this.componentNameInjected || this.componentNameInjected.trim() === '') {\n throw new Error(\n 'ComponentEffectManagerService requires a valid component name to be provided.',\n );\n }\n\n this.registerEffect(`${this.componentNameInjected}.namedEffectsListChange`, () => {\n const effects = this._namedEffects();\n\n if (!effects || effects.length === 0) return;\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 this.getLogger().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 this.getLogger().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 this.getLogger().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 effects.forEach((namedEffect) => namedEffect.effectRef.destroy());\n\n this._namedEffects.set(null);\n }\n\n private getLogger(): IOConnectCore.Logger.API {\n return this._logger.get(this.LOGGER_NAME);\n }\n}\n","export enum PANEL_BUTTON_ACTION_TYPE {\n CLOSE = 'CLOSE',\n SUBMIT = 'SUBMIT',\n CUSTOM = 'CUSTOM',\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 ERROR_CLOSE = 'error-close',\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 title: 'Error Close',\n name: APP_ICON_VARIANTS.ERROR_CLOSE,\n svgPath: `<svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M7.35938 1.35938L4.89844 3.82031L7.35938 6.30469C7.66406 6.58594 7.66406 7.07812 7.35938 7.35938C7.07812 7.66406 6.58594 7.66406 6.30469 7.35938L3.84375 4.89844L1.35938 7.35938C1.07812 7.66406 0.585938 7.66406 0.304688 7.35938C0 7.07812 0 6.58594 0.304688 6.30469L2.76562 3.82031L0.304688 1.35938C0 1.07812 0 0.585938 0.304688 0.304688C0.585938 0 1.07812 0 1.35938 0.304688L3.84375 2.76562L6.30469 0.304688C6.58594 0 7.07812 0 7.35938 0.304688C7.66406 0.585938 7.66406 1.07812 7.35938 1.35938Z\" fill=\"#C92121\"/>\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 { IOConnectCore } from '@interopio/core';\n\nimport { IconResource, IconType } from '../../io-assist.types';\n\n/**\n * Determines the icon type from the data string.\n * Auto-detects data URLs and distinguishes between SVG strings and regular URLs.\n */\nexport function detectIconType(data: string): IconType {\n if (!data) {\n throw new Error('Icon data cannot be empty');\n }\n\n if (data.startsWith('data:')) {\n return 'data-url';\n }\n\n if (data.trim().startsWith('<svg')) {\n return 'svg';\n }\n\n return 'url';\n}\n\n/**\n * Normalizes icon resource to ensure consistent type detection.\n * If type is not explicitly set or is incorrect, auto-detects from data.\n */\nexport function normalizeIconResource(\n icon: IconResource,\n logger: IOConnectCore.Logger.API,\n): IconResource {\n const detectedType: IconType = detectIconType(icon.data);\n\n if (icon.type !== detectedType) {\n logger.warn(\n `Icon type mismatch: declared as '${icon.type}' but detected as '${detectedType}'. Using detected type.`,\n );\n\n return {\n type: detectedType,\n data: icon.data,\n };\n }\n\n return icon;\n}\n\n/**\n * Checks if icon is an inline SVG string.\n */\nexport function isInlineSvg(icon: IconResource): boolean {\n return icon.type === 'svg';\n}\n\n/**\n * Checks if icon is a data URL (base64 encoded).\n */\nexport function isDataUrl(icon: IconResource): boolean {\n return icon.type === 'data-url' || icon.data.startsWith('data:');\n}\n\n/**\n * Checks if icon is a regular URL (CDN, public assets, etc.).\n */\nexport function isRegularUrl(icon: IconResource): boolean {\n return icon.type === 'url' && !icon.data.startsWith('data:');\n}\n\n/**\n * Checks if icon should be rendered as an image element.\n * Returns true for URLs and data URLs, false for inline SVG.\n */\nexport function shouldRenderAsImage(icon: IconResource): boolean {\n return isDataUrl(icon) || isRegularUrl(icon);\n}\n\n/**\n * Validates icon resource structure and data.\n */\nexport function validateIconResource(icon: IconResource): { valid: boolean; error?: string } {\n if (!icon || typeof icon !== 'object') {\n return { valid: false, error: 'Icon resource must be an object' };\n }\n\n if (!icon.type) {\n return { valid: false, error: 'Icon type is required' };\n }\n\n if (!['svg', 'url', 'data-url'].includes(icon.type)) {\n return { valid: false, error: `Invalid icon type: ${icon.type}` };\n }\n\n if (!icon.data || typeof icon.data !== 'string') {\n return { valid: false, error: 'Icon data must be a non-empty string' };\n }\n\n if (icon.type === 'svg' && !icon.data.trim().startsWith('<svg')) {\n return { valid: false, error: 'SVG icon data must start with <svg tag' };\n }\n\n if (icon.type === 'data-url' && !icon.data.startsWith('data:')) {\n return { valid: false, error: 'Data URL must start with \"data:\"' };\n }\n\n return { valid: true };\n}\n\n/**\n * Strips problematic attributes from SVG strings to ensure proper rendering and security.\n * Uses DOM parsing for reliable and maintainable attribute manipulation.\n * Removes:\n * - fill=\"none\" from <svg> tag (prevents SVG from rendering)\n * - width and height attributes (allows CSS sizing to work)\n * - Replaces hardcoded fill colors with \"currentColor\" for theming\n * - Ensures viewBox is present (adds default \"0 0 24 24\" if missing)\n * - Removes dangerous attributes: event handlers (on*), style, script tags\n *\n * @param svgString - The raw SVG string\n * @returns Cleaned SVG string ready for use\n *\n * @example\n * const rawSvg = `<svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\">\n * <path d=\"...\" fill=\"#B0B2B5\"/>\n * </svg>`;\n * const cleanedSvg = stripSvgAttributes(rawSvg);\n * // Result: `<svg viewBox=\"0 0 13 13\">\n * // <path d=\"...\" fill=\"currentColor\"/>\n * // </svg>`\n */\nexport function stripSvgAttributes(svgString: string, logger?: IOConnectCore.Logger.API): string {\n if (!svgString || !svgString.trim().startsWith('<svg')) {\n return svgString;\n }\n\n try {\n const parser = new DOMParser();\n const doc = parser.parseFromString(svgString, 'image/svg+xml');\n const svg = doc.querySelector('svg');\n\n if (!svg) {\n (logger ?? console).warn('Failed to parse SVG, returning original');\n return svgString;\n }\n\n // Store original dimensions for viewBox fallback\n const width = svg.getAttribute('width') || '24';\n const height = svg.getAttribute('height') || '24';\n\n // Remove problematic attributes from root <svg>\n svg.removeAttribute('width');\n svg.removeAttribute('height');\n\n // Only remove fill=\"none\" from root svg, not children\n if (svg.getAttribute('fill') === 'none') {\n svg.removeAttribute('fill');\n }\n\n // Ensure viewBox exists\n if (!svg.hasAttribute('viewBox')) {\n svg.setAttribute('viewBox', `0 0 ${width} ${height}`);\n }\n\n // Process all child elements\n const allElements = svg.querySelectorAll('*');\n allElements.forEach((element) => {\n // Replace hardcoded fill colors with currentColor (preserve \"none\")\n const fillAttr = element.getAttribute('fill');\n if (fillAttr && fillAttr !== 'none' && fillAttr !== 'currentColor') {\n element.setAttribute('fill', 'currentColor');\n }\n\n // Security: Remove dangerous attributes\n removeDangerousAttributes(element);\n });\n\n // Security: Remove dangerous attributes from root svg\n removeDangerousAttributes(svg);\n\n return new XMLSerializer().serializeToString(svg);\n } catch (error) {\n (logger ?? console).error(\n 'SVG parsing error:',\n error instanceof Error ? error : new Error(String(error)),\n );\n return svgString;\n }\n}\n\n/**\n * Removes security-sensitive attributes from an SVG element.\n */\nfunction removeDangerousAttributes(element: Element): void {\n // Remove event handlers\n Array.from(element.attributes).forEach((attr) => {\n if (attr.name.startsWith('on')) {\n element.removeAttribute(attr.name);\n }\n });\n\n // Remove style (can contain javascript: urls)\n element.removeAttribute('style');\n\n // Remove potentially dangerous href attributes\n const href = element.getAttribute('href') || element.getAttribute('xlink:href');\n if (href?.startsWith('javascript:')) {\n element.removeAttribute('href');\n element.removeAttribute('xlink:href');\n }\n\n // Remove script tags\n if (element.tagName.toLowerCase() === 'script') {\n element.remove();\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 SecurityContext,\n Signal,\n signal,\n ViewChild,\n WritableSignal,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { IOConnectCore } from '@interopio/core';\n\nimport { APP_ICON_BACKGROUND_SHAPES, APP_ICON_SIZES } from './enum';\nimport { defaultIcon, iconList } from './icons';\nimport { AppIcon, AppIconBackgroundShapeType, AppIconSizeType, AppIconVariantsType } from './types';\nimport { IconResource } from '../../../io-assist.types';\nimport { ComponentEffectManagerService as EffectService } from '../../services/component-effect-manager/component-effect-manager.service';\nimport { LoggerService } from '../../services/logger/logger.service';\nimport {\n isInlineSvg,\n shouldRenderAsImage,\n stripSvgAttributes,\n validateIconResource,\n} from '../../utils/icon.utils';\n/**\n * AppIconComponent - A reusable icon component with dynamic styling support\n *\n * Basic Usage (Variant-based):\n * @example\n * ```html\n * <app-icon [variant]=\"APP_ICON_VARIANTS.CLOSE\"></app-icon>\n * ```\n *\n * Custom Icon Usage:\n * @example\n * ```html\n * <!-- Inline SVG -->\n * <app-icon\n * [variant]=\"APP_ICON_VARIANTS.PROMPT_PANEL\"\n * [customIcon]=\"{\n * type: 'svg',\n * data: '<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\">...</svg>'\n * }\"\n * ></app-icon>\n *\n * <!-- Data URL (base64) -->\n * <app-icon\n * [variant]=\"APP_ICON_VARIANTS.PROMPT_PANEL\"\n * [customIcon]=\"{\n * type: 'data-url',\n * data: 'data:image/png;base64,iVBORw0KGgo...'\n * }\"\n * ></app-icon>\n *\n * <!-- External URL -->\n * <app-icon\n * [variant]=\"APP_ICON_VARIANTS.PROMPT_PANEL\"\n * [customIcon]=\"{\n * type: 'url',\n * data: '/icons/custom-icon.svg'\n * }\"\n * ></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 * [isHoveredExternal]=\"isHovered\"\n * [title]=\"'Close window'\"\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 isWrapped - Determines if host element should be 2x size of icon (default: true)\n * @input title - Custom tooltip text (optional, auto-generated from variant if not provided)\n * @input customIcon - Custom icon resource (svg/url/data-url) to render instead of variant icon\n * When provided, takes precedence over the variant icon. Supports:\n * - type: 'svg' - Inline SVG string\n * - type: 'url' - Absolute URL to image file (CDN, public assets)\n * - type: 'data-url' - Base64 encoded data URL (SVG/PNG/JPEG)\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 * - Custom icons automatically validate and sanitize for security\n * - Custom icons maintain consistent styling with variant icons\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 private readonly _logger: IOConnectCore.Logger.API =\n inject(LoggerService).get('AppIconComponent');\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 // Custom icon support (alternative to variant-based icons)\n /**\n * Custom icon resource to render instead of using variant.\n * When provided, this takes precedence over the variant icon.\n * Supports: svg (inline SVG), url (absolute URL), data-url (base64)\n */\n public customIcon: InputSignal<IconResource | undefined> = input<IconResource | undefined>(\n undefined,\n );\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 protected hasCustomIcon: Signal<boolean> = computed(() => {\n const icon = this.customIcon();\n if (!icon) {\n return false;\n }\n\n // For inline SVG, check if it passed sanitization\n if (isInlineSvg(icon)) {\n return this.customIconSanitizedSvg() !== null;\n }\n\n // For images (URL/data-url), check if we have a valid URL\n if (shouldRenderAsImage(icon)) {\n return this.customIconImageUrl() !== null;\n }\n\n return false;\n });\n\n protected isCustomIconInlineSvg: Signal<boolean> = computed(() => {\n const icon = this.customIcon();\n\n return icon ? isInlineSvg(icon) : false;\n });\n\n protected shouldCustomIconRenderAsImage: Signal<boolean> = computed(() => {\n const icon = this.customIcon();\n\n return icon ? shouldRenderAsImage(icon) : false;\n });\n\n protected customIconSanitizedSvg: Signal<SafeHtml | null> = computed(() => {\n const icon = this.customIcon();\n if (!icon || !isInlineSvg(icon)) {\n return null;\n }\n\n const validation = validateIconResource(icon);\n if (!validation.valid) {\n return null;\n }\n\n // Strip problematic attributes from SVG\n const cleanedSvg = stripSvgAttributes(icon.data, this._logger);\n\n // Sanitize using Angular's DomSanitizer instead of bypassing\n const sanitized = this._domSanitizer.sanitize(SecurityContext.HTML, cleanedSvg);\n\n // Reject if sanitizer modified the content (indicates potential XSS)\n if (!sanitized || sanitized !== cleanedSvg) {\n this._logger.warn('Custom SVG icon was rejected due to security concerns');\n return null;\n }\n\n return this._domSanitizer.bypassSecurityTrustHtml(sanitized);\n });\n\n protected customIconImageUrl: Signal<string | null> = computed(() => {\n const icon = this.customIcon();\n if (!icon || !shouldRenderAsImage(icon)) {\n return null;\n }\n\n return icon.data;\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 const fillValue: string = dynamicFill ? `var(--${dynamicFill})` : staticFill;\n\n // Set both 'fill' (for direct SVG attributes) and 'color' (for currentColor)\n styles['fill'] = fillValue;\n styles['color'] = fillValue;\n\n return styles;\n },\n );\n\n /**\n * Generates CSS mask styles for image-based icons (URL/data-URL).\n * Uses CSS mask to apply the icon shape and background-color for theming.\n * This allows SVG files loaded from URLs to be themed with CSS variables.\n * Now supports hover colors to behave consistently with variant icons.\n */\n protected getImageIconMaskStyles: Signal<Record<string, string>> = computed<\n Record<string, string>\n >(() => {\n const styles: Record<string, string> = {};\n const iconUrl = this.customIconImageUrl();\n\n if (!iconUrl) {\n return styles;\n }\n\n let fillValue: string;\n\n if (this.isDisabled()) {\n const dynamicFill = this.trimPrefix(this.disabledIconFill());\n fillValue = dynamicFill ? `var(--${dynamicFill})` : 'var(--app-text-states-disabled)';\n } else if (this.isHovered()) {\n const hoverFill = this.trimPrefix(this.hoverIconFill());\n fillValue = hoverFill ? `var(--${hoverFill})` : 'var(--app-text-states-hover)';\n } else {\n const dynamicFill = this.trimPrefix(this.iconFill());\n fillValue = dynamicFill ? `var(--${dynamicFill})` : 'var(--app-text-default)';\n }\n\n // Apply the icon as a mask and use background-color for the actual color\n styles['mask'] = `url('${iconUrl}') no-repeat center`;\n styles['mask-size'] = 'contain';\n styles['-webkit-mask'] = `url('${iconUrl}') no-repeat center`;\n styles['-webkit-mask-size'] = 'contain';\n styles['background-color'] = fillValue;\n\n return styles;\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 // Set both fill (for SVG attributes) and color (for currentColor)\n this.iconDivRef.nativeElement.style.fill = fillValue;\n this.iconDivRef.nativeElement.style.color = 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 // Set both fill (for SVG attributes) and color (for currentColor)\n this.iconDivRef.nativeElement.style.fill = fillValue;\n this.iconDivRef.nativeElement.style.color = 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 // Add explicit width and height to the SVG element\n const size: number = this.sizeAsNumber();\n const svgWithSize: string = svgNoWidthHeight.replace(\n /<svg/,\n `<svg width=\"${size}\" height=\"${size}\"`,\n );\n\n this._safeSvg = this._domSanitizer.bypassSecurityTrustHtml(svgWithSize);\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]`;\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 '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 @let hasCustomInlineSvgIcon =\n hasCustomIcon() && isCustomIconInlineSvg() && customIconSanitizedSvg();\n @let hasCustomImageIcon =\n hasCustomIcon() && shouldCustomIconRenderAsImage() && customIconImageUrl();\n @let shouldShowVariantIcon = !hasCustomIcon();\n\n <!-- Custom Icon: Inline SVG -->\n @if (hasCustomInlineSvgIcon) {\n <div\n #iconDiv\n class=\"icon-wrapper__svg w-full h-full flex justify-center items-center\"\n [ngStyle]=\"getIconStyles()\"\n [innerHTML]=\"customIconSanitizedSvg()\"\n ></div>\n }\n\n <!-- Custom Icon: Image (URL or Data URL) - Using CSS Mask for theming -->\n @if (hasCustomImageIcon) {\n <div\n #iconDiv\n class=\"icon-wrapper__image w-full h-full\"\n [ngStyle]=\"getImageIconMaskStyles()\"\n ></div>\n }\n\n <!-- Variant-based Icon -->\n @if (shouldShowVariantIcon) {\n <div\n #iconDiv\n class=\"icon-wrapper__svg\"\n [ngClass]=\"getIconClasses()\"\n [ngStyle]=\"getIconStyles()\"\n [innerHTML]=\"getIconSvgPath()\"\n ></div>\n }\n</div>","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ComponentRef,\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 htmlContent: 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(button: AppPanelFooterButton): void {\n switch (button.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 case PANEL_BUTTON_ACTION_TYPE.CUSTOM:\n if (!button.onClick) {\n throw new Error('Custom action button must have an onClick handler defined');\n }\n\n button.onClick();\n\n break;\n default:\n break;\n }\n }\n\n public injectBodyContent<T>(component: Type<T>): ComponentRef<T> {\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 return container.createComponent(component);\n }\n}","<div\n class=\"app-panel\"\n [ngClass]=\"{\n 'flex flex-col bg-panel-background rounded-2xl border border-panel-border 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 px-6 pt-6': 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 @if (description()) {\n <div\n class=\"app-panel__description\"\n [ngClass]=\"{\n 'flex-shrink-0 px-6 pt-3': true,\n }\"\n >\n <p\n [ngClass]=\"{\n 'text-text-secondary text-sm truncate': true,\n }\"\n >\n {{ description() }}\n </p>\n </div>\n }\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 mt-3': true,\n }\"\n >\n <div\n class=\"app-panel__scrollable-content\"\n [ngClass]=\"{\n 'px-3 pb-6': true,\n }\"\n >\n @if (htmlContent()) {\n <div\n class=\"app-panel__html-content\"\n [ngClass]=\"{\n 'text-text-black-white text-sm': true,\n }\"\n [innerHTML]=\"htmlContent()\"\n ></div>\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 </div>\n\n <div\n class=\"app-panel__footer\"\n [ngClass]=\"{\n 'empty:hidden flex justify-end gap-2 flex-shrink-0 w-full px-6 pb-6 pt-3': 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)\"\n >{{ button.label }}</app-button\n >\n }\n }\n </div>\n</div>","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 Type,\n WritableSignal,\n} from '@angular/core';\n\nimport { PanelOverlayResult } from './types';\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 private _overlayStack: OverlayRef[] = [];\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<T = unknown>(config?: AppPanelOverlayConfig): PanelOverlayResult<T> {\n if (!config) throw new Error('Overlay config is required to display the panel overlay');\n\n if (!config.content) {\n throw new Error('Overlay config must include content to display in the panel');\n }\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 // Handle HTML content if provided as string\n if (config.content && typeof config.content === 'string') {\n panelRef.setInput('htmlContent', config.content);\n }\n\n panelRef.instance.onClose.subscribe(() => {\n this._removeOverlayFromStack(overlayRef);\n overlayRef.dispose();\n });\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 const result: PanelOverlayResult<T> = {\n overlayRef,\n panelRef,\n contentRef: undefined,\n };\n\n // Add overlay to stack\n this._overlayStack.push(overlayRef);\n\n // Handle backdrop clicks - only close the top-most overlay\n overlayRef.backdropClick().subscribe(() => {\n if (this._overlayStack[this._overlayStack.length - 1] === overlayRef) {\n this._removeOverlayFromStack(overlayRef);\n overlayRef.dispose();\n }\n });\n\n // Inject component content after the current change detection cycle (if content is a component)\n if (config.content && typeof config.content !== 'string') {\n setTimeout(() => {\n result.contentRef = panelRef.instance.injectBodyContent(\n config.content as Type<unknown>,\n ) as ComponentRef<T>;\n }, 0);\n }\n\n return result;\n }\n\n public closeCurrentOverlay(): void {\n const topOverlay: OverlayRef = this._overlayStack[this._overlayStack.length - 1];\n\n if (!topOverlay) return;\n\n this._removeOverlayFromStack(topOverlay);\n topOverlay.dispose();\n }\n\n private _removeOverlayFromStack(overlayRef: OverlayRef): void {\n const index: number = this._overlayStack.indexOf(overlayRef);\n\n if (index > -1) {\n this._overlayStack.splice(index, 1);\n }\n }\n}\n","import { computed, effect, Injectable, Signal, signal, WritableSignal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { fromEvent, map } from 'rxjs';\n\n/**\n * Tailwind CSS breakpoints\n * @see https://tailwindcss.com/docs/responsive-design\n */\nexport enum BREAKPOINT {\n XS = 'xs', // Extra small devices (< 640px)\n SM = 'sm', // Small devices (≥ 640px)\n MD = 'md', // Medium devices (≥ 768px)\n LG = 'lg', // Large devices (≥ 1024px)\n XL = 'xl', // Extra large devices (≥ 1280px)\n XXL = '2xl', // 2X Extra large devices (≥ 1536px)\n}\n\n/**\n * Tailwind CSS breakpoint values in pixels\n */\nconst BREAKPOINT_VALUES: Record<BREAKPOINT, number> = {\n [BREAKPOINT.XS]: 0,\n [BREAKPOINT.SM]: 640,\n [BREAKPOINT.MD]: 768,\n [BREAKPOINT.LG]: 1024,\n [BREAKPOINT.XL]: 1280,\n [BREAKPOINT.XXL]: 1536,\n};\n\n/**\n * Service to handle media query checks following Tailwind CSS breakpoint conventions\n *\n * Provides reactive signals for:\n * - Current breakpoint detection\n * - Individual breakpoint checks (isXs, isSm, isMd, etc.)\n * - Min-width checks (isSmUp, isMdUp, etc.)\n * - Max-width checks (isXsDown, isSmDown, etc.)\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ResponsiveUIService {\n // Listen to window resize events\n private readonly _resizeSignal: Signal<number> = toSignal(\n fromEvent(window, 'resize').pipe(\n map(() => {\n return window.innerWidth;\n }),\n ),\n { initialValue: window.innerWidth },\n );\n\n // Current breakpoint as writable signal\n private readonly _currentBreakpoint: WritableSignal<BREAKPOINT> = signal(\n this.getCurrentBreakpoint(),\n );\n\n // Individual breakpoint checks (exact match)\n private readonly _isXs: Signal<boolean> = computed(\n () => this._currentBreakpoint() === BREAKPOINT.XS,\n );\n private readonly _isSm: Signal<boolean> = computed(\n () => this._currentBreakpoint() === BREAKPOINT.SM,\n );\n private readonly _isMd: Signal<boolean> = computed(\n () => this._currentBreakpoint() === BREAKPOINT.MD,\n );\n private readonly _isLg: Signal<boolean> = computed(\n () => this._currentBreakpoint() === BREAKPOINT.LG,\n );\n private readonly _isXl: Signal<boolean> = computed(\n () => this._currentBreakpoint() === BREAKPOINT.XL,\n );\n private readonly _is2xl: Signal<boolean> = computed(\n () => this._currentBreakpoint() === BREAKPOINT.XXL,\n );\n\n // Min-width checks (breakpoint and up) as writable signals\n private readonly _isSmUp: WritableSignal<boolean> = signal(this.matchesMinWidth(BREAKPOINT.SM));\n private readonly _isMdUp: WritableSignal<boolean> = signal(this.matchesMinWidth(BREAKPOINT.MD));\n private readonly _isLgUp: WritableSignal<boolean> = signal(this.matchesMinWidth(BREAKPOINT.LG));\n private readonly _isXlUp: WritableSignal<boolean> = signal(this.matchesMinWidth(BREAKPOINT.XL));\n private readonly _is2xlUp: WritableSignal<boolean> = signal(\n this.matchesMinWidth(BREAKPOINT.XXL),\n );\n\n // Max-width checks (breakpoint and down) as writable signals\n private readonly _isXsDown: WritableSignal<boolean> = signal(\n this.matchesMaxWidth(BREAKPOINT.XS),\n );\n private readonly _isSmDown: WritableSignal<boolean> = signal(\n this.matchesMaxWidth(BREAKPOINT.SM),\n );\n private readonly _isMdDown: WritableSignal<boolean> = signal(\n this.matchesMaxWidth(BREAKPOINT.MD),\n );\n private readonly _isLgDown: WritableSignal<boolean> = signal(\n this.matchesMaxWidth(BREAKPOINT.LG),\n );\n private readonly _isXlDown: WritableSignal<boolean> = signal(\n this.matchesMaxWidth(BREAKPOINT.XL),\n );\n\n constructor() {\n // Use effect to update breakpoints on window resize\n effect(() => {\n this._resizeSignal(); // Explicitly track the signal\n\n // Update current breakpoint\n const currentBreakpoint = this.getCurrentBreakpoint();\n this._currentBreakpoint.set(currentBreakpoint);\n\n // Update min-width checks\n this._isSmUp.set(this.matchesMinWidth(BREAKPOINT.SM));\n this._isMdUp.set(this.matchesMinWidth(BREAKPOINT.MD));\n this._isLgUp.set(this.matchesMinWidth(BREAKPOINT.LG));\n this._isXlUp.set(this.matchesMinWidth(BREAKPOINT.XL));\n this._is2xlUp.set(this.matchesMinWidth(BREAKPOINT.XXL));\n\n // Update max-width checks\n this._isXsDown.set(this.matchesMaxWidth(BREAKPOINT.XS));\n this._isSmDown.set(this.matchesMaxWidth(BREAKPOINT.SM));\n this._isMdDown.set(this.matchesMaxWidth(BREAKPOINT.MD));\n this._isLgDown.set(this.matchesMaxWidth(BREAKPOINT.LG));\n this._isXlDown.set(this.matchesMaxWidth(BREAKPOINT.XL));\n });\n }\n\n // Public getters for current breakpoint\n public get currentBreakpoint(): BREAKPOINT {\n return this._currentBreakpoint();\n }\n\n // Public getters for individual breakpoint checks\n public get isXs(): boolean {\n return this._isXs();\n }\n\n public get isSm(): boolean {\n return this._isSm();\n }\n\n public get isMd(): boolean {\n return this._isMd();\n }\n\n public get isLg(): boolean {\n return this._isLg();\n }\n\n public get isXl(): boolean {\n return this._isXl();\n }\n\n public get is2xl(): boolean {\n return this._is2xl();\n }\n\n // Getters for min-width checks\n public get isSmUp(): boolean {\n return this._isSmUp();\n }\n\n public get isMdUp(): boolean {\n return this._isMdUp();\n }\n\n public get isLgUp(): boolean {\n return this._isLgUp();\n }\n\n public get isXlUp(): boolean {\n return this._isXlUp();\n }\n\n public get is2xlUp(): boolean {\n return this._is2xlUp();\n }\n\n // Getters for max-width checks\n public get isXsDown(): boolean {\n return this._isXsDown();\n }\n\n public get isSmDown(): boolean {\n return this._isSmDown();\n }\n\n public get isMdDown(): boolean {\n return this._isMdDown();\n }\n\n public get isLgDown(): boolean {\n return this._isLgDown();\n }\n\n public get isXlDown(): boolean {\n return this._isXlDown();\n }\n\n /**\n * Get the current breakpoint based on window width\n */\n private getCurrentBreakpoint(): BREAKPOINT {\n const width = window.innerWidth;\n\n if (width >= BREAKPOINT_VALUES[BREAKPOINT.XXL]) return BREAKPOINT.XXL;\n if (width >= BREAKPOINT_VALUES[BREAKPOINT.XL]) return BREAKPOINT.XL;\n if (width >= BREAKPOINT_VALUES[BREAKPOINT.LG]) return BREAKPOINT.LG;\n if (width >= BREAKPOINT_VALUES[BREAKPOINT.MD]) return BREAKPOINT.MD;\n if (width >= BREAKPOINT_VALUES[BREAKPOINT.SM]) return BREAKPOINT.SM;\n\n return BREAKPOINT.XS;\n }\n\n /**\n * Check if the current viewport matches the minimum width for a breakpoint\n */\n private matchesMinWidth(breakpoint: BREAKPOINT): boolean {\n return window.innerWidth >= BREAKPOINT_VALUES[breakpoint];\n }\n\n /**\n * Check if the current viewport matches the maximum width for a breakpoint\n * Max width is defined as one pixel less than the next breakpoint\n */\n private matchesMaxWidth(breakpoint: BREAKPOINT): boolean {\n const breakpoints = Object.values(BREAKPOINT);\n const currentIndex = breakpoints.indexOf(breakpoint);\n\n // If it's the last breakpoint, no max width\n if (currentIndex === breakpoints.length - 1) {\n return window.innerWidth >= BREAKPOINT_VALUES[breakpoint];\n }\n\n const nextBreakpoint = breakpoints[currentIndex + 1];\n return window.innerWidth < BREAKPOINT_VALUES[nextBreakpoint];\n }\n\n /**\n * Check if viewport matches a custom media query\n */\n public matches(query: string): boolean {\n return window.matchMedia(query).matches;\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 MERGE_ACCUMULATED_STREAM_CONTENT = '[Message] Merge Accumulated Stream Content',\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 UPDATE_TOOL_CALL_ARGS = '[Message] Update Tool Call Args',\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 { IoAiWeb } from '@interopio/ai-web';\nimport { createAction, props } from '@ngrx/store';\n\nimport { MESSAGE_ACTIONS } from './message.actions.enum';\nimport {\n GetResponseParams,\n ToolResult,\n UIAssistantMessage,\n UIMessage,\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<{\n params: GetResponseParams;\n isStream?: boolean;\n agent?: IoAiWeb.Agents.Agent;\n threadId: string;\n }>(),\n);\nexport const getResponseSuccess = createAction(\n MESSAGE_ACTIONS.GET_RESPONSE_SUCCESS,\n props<{ threadId: string }>(),\n);\nexport const getResponseFailure = createAction(\n MESSAGE_ACTIONS.GET_RESPONSE_FAILURE,\n props<{ error: Error; threadId: string }>(),\n);\n\nexport const reloadResponse = createAction(\n MESSAGE_ACTIONS.RELOAD_RESPONSE,\n props<{\n params: GetResponseParams;\n isStream?: boolean;\n agent?: IoAiWeb.Agents.Agent;\n threadId: string;\n }>(),\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[]; threadId: string }>(),\n);\n\nexport const fetchMessagesFromThreadFailure = createAction(\n MESSAGE_ACTIONS.FETCH_MESSAGES_FROM_THREAD_FAILURE,\n props<{ error: Error }>(),\n);\n\n/**\n * Action to merge accumulated stream content when switching to a streaming thread.\n * This ensures content streamed while the user was on another thread is not lost.\n * Includes user message (not yet in DB) and tool messages.\n */\nexport const mergeAccumulatedStreamContent = createAction(\n MESSAGE_ACTIONS.MERGE_ACCUMULATED_STREAM_CONTENT,\n props<{\n content: string;\n messageId: string | null;\n threadId: string;\n userMessage: UIMessage | null;\n toolMessages: UIToolMessage[];\n }>(),\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; threadId: string }>(),\n);\n\nexport const addToolCall = createAction(\n MESSAGE_ACTIONS.ADD_TOOL_CALL,\n props<{ message: UIToolMessage; threadId: string }>(),\n);\n\nexport const updateToolCallArgs = createAction(\n MESSAGE_ACTIONS.UPDATE_TOOL_CALL_ARGS,\n props<{ toolCallId: string; args: Record<string, unknown>; threadId: string }>(),\n);\n\nexport const addToolResult = createAction(\n MESSAGE_ACTIONS.ADD_TOOL_RESULT,\n props<{ toolCallId: string; result: ToolResult; threadId: string }>(),\n);\n\nexport const abortResponseGeneration = createAction(\n MESSAGE_ACTIONS.ABORT_RESPONSE_GENERATION,\n props<{ threadId: string }>(),\n);\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 instructions?: string;\n system?: string;\n memory?: {\n thread: string;\n resource: string;\n };\n modelSettings?: {\n maxTokens?: number;\n temperature?: number;\n topP?: number;\n topK?: number;\n maxRetries?: number;\n };\n requestContext?: Record<string, unknown>;\n structuredOutput?: {\n schema?: Record<string, unknown> | string;\n };\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 isLastMessage?: boolean;\n isNew?: boolean;\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","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 { 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\nexport const selectIsLastResponseSuccess = createSelector(\n selectMessageStore,\n (state: MessageReducerStateType) =>\n state.loadingState.type === MESSAGES_LOADING_STATE.GET_RESPONSE_SUCCESS,\n);\n","import { inject, Injectable, Signal } from '@angular/core';\nimport { IoAiWeb } from '@interopio/ai-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 selectIsLastResponseSuccess,\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 private readonly _isLastResponseSuccess: Signal<boolean> = this._store.selectSignal<boolean>(\n selectIsLastResponseSuccess,\n );\n public get isLastResponseSuccess(): Signal<boolean> {\n return this._isLastResponseSuccess;\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 threadId: string,\n isStream?: boolean,\n agent?: IoAiWeb.Agents.Agent,\n ): void {\n this._store.dispatch(getResponse({ params, isStream, agent, threadId }));\n }\n\n public dispatchReloadResponse(\n params: GetResponseParams,\n threadId: string | null,\n isStream?: boolean,\n agent?: IoAiWeb.Agents.Agent,\n ): void {\n if (!threadId) {\n throw new Error('Cannot reload response: threadId is null');\n }\n\n this._store.dispatch(reloadResponse({ params, isStream, agent, threadId }));\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(threadId: string): void {\n this._store.dispatch(abortResponseGeneration({ threadId }));\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 PROMPT_ACTIONS {\n PARSE_PROMPTS_CONFIG = '[Prompt] Parse Prompts Config',\n PARSE_PROMPTS_CONFIG_SUCCESS = '[Prompt] Parse Prompts Config Success',\n PARSE_PROMPTS_CONFIG_FAILURE = '[Prompt] Parse Prompts Config Failure',\n SELECT_PROMPT = '[Prompt] Select Prompt',\n TOGGLE_FAVORITE = '[Prompt] Toggle Favorite',\n}\n","import { createAction, props } from '@ngrx/store';\n\nimport { PROMPT_ACTIONS } from './prompt.actions.enum';\nimport { UIPrompt } from '../../services/prompt/types';\n\n// =========================================================================== Parse Config\nexport const parsePromptsConfig = createAction(PROMPT_ACTIONS.PARSE_PROMPTS_CONFIG);\nexport const parsePromptsConfigSuccess = createAction(\n PROMPT_ACTIONS.PARSE_PROMPTS_CONFIG_SUCCESS,\n props<{ prompts: UIPrompt[]; favorites: string[] }>(),\n);\nexport const parsePromptsConfigFailure = createAction(\n PROMPT_ACTIONS.PARSE_PROMPTS_CONFIG_FAILURE,\n props<{ error: Error }>(),\n);\nexport const selectPrompt = createAction(\n PROMPT_ACTIONS.SELECT_PROMPT,\n props<{ prompt: UIPrompt }>(),\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';\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 selectSelectedPrompt = createSelector(\n selectPromptStore,\n (state: PromptReducerStateType) => state.selectedPrompt,\n);\n","import { inject, Injectable, Signal } from '@angular/core';\nimport { Store } from '@ngrx/store';\n\nimport { parsePromptsConfig, selectPrompt, togglePromptFavorite } from './prompt.actions';\nimport {\n selectAllPrompts,\n selectFavoritePromptNames,\n selectSelectedPrompt,\n} from './prompt.selector';\nimport { Prompt, UIPrompt } from '../../services/prompt/types';\n\n@Injectable({\n providedIn: 'root',\n})\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 public dispatchParsePromptsConfig(): void {\n this._store.dispatch(parsePromptsConfig());\n }\n\n public dispatchSelectPrompt(prompt: UIPrompt): void {\n this._store.dispatch(selectPrompt({ prompt }));\n }\n\n public dispatchToggleFavoritePrompt(name: string): void {\n this._store.dispatch(togglePromptFavorite({ name }));\n }\n}\n","export enum APP_SPINNER_COMPONENT_SIZE {\n SMALL = 'small',\n MEDIUM = 'medium',\n LARGE = 'large',\n}\n","export enum AnimationType {\n /**\n * Animated gradient border that follows mouse movement on hover.\n * Creates a colorful rotating border effect using accent colors.\n */\n HOVER_MOUSE_FOLLOW = 'hover-mouse-follow',\n\n /**\n * Animated gradient border that appears on component mount.\n * Gradient glow fades in, rotates 360 degrees, then settles into a static border.\n */\n MOUNT_360_GLOW = 'mount-360-glow',\n}","import { ElementRef, Renderer2 } from '@angular/core';\n\nexport type AnimationStrategy = {\n /**\n * Initialize the animation by setting up required DOM elements and styles\n * @param onComplete Optional callback to invoke when animation completes (for chaining)\n */\n setup(onComplete?: () => void): void;\n\n /**\n * (default no-op)\n */\n onMouseEnter(): void;\n\n /**\n * (default no-op)\n */\n onMouseLeave(): void;\n\n /**\n * (default no-op)\n */\n onMouseMove(event: MouseEvent): void;\n\n /**\n * Cleanup resources when animation is destroyed\n */\n cleanup(): void;\n};\n\nexport abstract class BaseAnimationStrategy implements AnimationStrategy {\n protected onCompleteCallback?: () => void;\n\n constructor(\n protected elementRef: ElementRef,\n protected renderer: Renderer2,\n ) {}\n\n abstract setup(onComplete?: () => void): void;\n\n abstract cleanup(): void;\n\n public onMouseEnter(): void {\n // Default no-op implementation\n }\n\n public onMouseLeave(): void {\n // Default no-op implementation\n }\n\n public onMouseMove(_event: MouseEvent): void {\n // Default no-op implementation\n }\n\n protected notifyComplete(): void {\n if (!this.onCompleteCallback) {\n return;\n }\n\n this.onCompleteCallback();\n }\n}\n","import { Renderer2 } from '@angular/core';\n\nexport type StyleMap = Record<string, string>;\n\n/**\n * Apply multiple styles to an element using the provided renderer\n */\nexport const applyStyles = (renderer: Renderer2, element: HTMLElement, styles: StyleMap): void => {\n Object.entries(styles).forEach(([property, value]) => {\n renderer.setStyle(element, property, value);\n });\n};\n\n/**\n * Create an HTML element with a class and styles using the provided renderer\n */\nexport const createElement = (\n renderer: Renderer2,\n tag: string,\n className: string,\n styles: StyleMap,\n): HTMLElement => {\n const element = renderer.createElement(tag);\n\n renderer.addClass(element, className);\n applyStyles(renderer, element, styles);\n\n return element;\n};\n","import { ElementRef, Renderer2 } from '@angular/core';\n\nimport { applyStyles, createElement, StyleMap } from '../../utils';\nimport { BaseAnimationStrategy } from '../core/base-animation.effect';\n\nconst LAYER_BASE_STYLES: StyleMap = {\n overflow: 'hidden',\n 'border-radius': 'inherit',\n position: 'absolute',\n top: '-1px',\n right: '-1px',\n bottom: '-1px',\n left: '-1px',\n 'pointer-events': 'none',\n opacity: '0',\n transition: 'opacity 400ms linear',\n 'z-index': '-2',\n mask: 'linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)',\n '-webkit-mask': 'linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)',\n 'mask-composite': 'exclude',\n '-webkit-mask-composite': 'xor',\n padding: '1px',\n};\n\nconst BACKGROUND_STYLES: StyleMap = {\n position: 'absolute',\n top: '0',\n right: '0',\n bottom: '0',\n left: '0',\n 'border-radius': 'inherit',\n background: 'inherit',\n 'z-index': '-1',\n 'pointer-events': 'none',\n};\n\n/**\n * HoverMouseFollowAnimationStrategy\n *\n * Creates an animated gradient border that follows the mouse cursor on hover.\n * The gradient rotates based on mouse position relative to the element's center.\n *\n * Visual Effect:\n * - Default state: Standard border using --app-border-default\n * - Hover state: Animated gradient border with colors from accent-color-1, 2, and 3\n * - Two gradient layers: one blurred for glow effect, one sharp for definition\n * - Gradient rotation follows mouse movement for interactive feel\n *\n * DOM Structure Created:\n * - .animation-effect__blur-layer (blurred gradient, outer glow)\n * - .animation-effect__gradient-layer (sharp gradient, main effect)\n * - .animation-effect__background (solid background to mask gradient center)\n * - Existing content (z-indexed above all layers)\n */\nexport class HoverMouseFollowAnimationStrategy extends BaseAnimationStrategy {\n private rotationAngle: number = 180;\n private blurLayer!: HTMLElement;\n private gradientLayer!: HTMLElement;\n private blurGradient!: HTMLElement;\n private mainGradient!: HTMLElement;\n private background!: HTMLElement;\n private originalBorder: string = '';\n\n constructor(elementRef: ElementRef, renderer: Renderer2) {\n super(elementRef, renderer);\n }\n\n public setup(onComplete?: () => void): void {\n this.onCompleteCallback = onComplete;\n\n const host = this.elementRef.nativeElement;\n\n // Store original border to restore on mouse leave\n const computedStyle = window.getComputedStyle(host);\n this.originalBorder = computedStyle.border;\n\n applyStyles(this.renderer, host, {\n position: 'relative',\n transition: 'border-color 0.2s ease',\n });\n\n // Create and setup DOM layers\n this.blurLayer = this.createBlurLayer();\n this.gradientLayer = this.createGradientLayer();\n this.background = createElement(\n this.renderer,\n 'div',\n 'animation-effect__background',\n BACKGROUND_STYLES,\n );\n\n // Insert layers before existing content\n this.renderer.insertBefore(host, this.blurLayer, host.firstChild);\n this.renderer.insertBefore(host, this.gradientLayer, host.firstChild);\n this.renderer.insertBefore(host, this.background, host.firstChild);\n\n // Ensure existing content is above all layers\n this.updateContentZIndex(host);\n }\n\n public override onMouseEnter(): void {\n this.renderer.addClass(this.elementRef.nativeElement, 'animation-effect--hovered');\n this.renderer.setStyle(this.elementRef.nativeElement, 'border-color', 'transparent');\n this.renderer.setStyle(this.blurLayer, 'opacity', '1');\n this.renderer.setStyle(this.gradientLayer, 'opacity', '1');\n }\n\n public override onMouseLeave(): void {\n const host = this.elementRef.nativeElement;\n this.renderer.removeClass(host, 'animation-effect--hovered');\n this.renderer.setStyle(host, 'border', this.originalBorder);\n this.renderer.setStyle(this.blurLayer, 'opacity', '0');\n this.renderer.setStyle(this.gradientLayer, 'opacity', '0');\n }\n\n public override onMouseMove(event: MouseEvent): void {\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n\n const centerX = rect.width / 2;\n const centerY = rect.height / 2;\n const deltaX = x - centerX;\n const deltaY = y - centerY;\n\n let angle = Math.atan2(deltaY, deltaX) * (180 / Math.PI);\n angle = (angle + 360) % 360;\n\n this.rotationAngle = angle;\n this.renderer.setStyle(this.blurGradient, 'transform', `rotate(${this.rotationAngle}deg)`);\n this.renderer.setStyle(this.mainGradient, 'transform', `rotate(${this.rotationAngle}deg)`);\n }\n\n public cleanup(): void {\n const host = this.elementRef.nativeElement;\n\n if (this.blurLayer) {\n this.renderer.removeChild(host, this.blurLayer);\n }\n if (this.gradientLayer) {\n this.renderer.removeChild(host, this.gradientLayer);\n }\n if (this.background) {\n this.renderer.removeChild(host, this.background);\n }\n }\n\n private createBlurLayer(): HTMLElement {\n const layer = createElement(this.renderer, 'div', 'animation-effect__blur-layer', {\n ...LAYER_BASE_STYLES,\n filter: 'blur(3px)',\n });\n\n this.blurGradient = this.createGradientElement();\n this.renderer.appendChild(layer, this.blurGradient);\n\n return layer;\n }\n\n private createGradientLayer(): HTMLElement {\n const layer = createElement(\n this.renderer,\n 'div',\n 'animation-effect__gradient-layer',\n LAYER_BASE_STYLES,\n );\n\n this.mainGradient = this.createGradientElement();\n this.renderer.appendChild(layer, this.mainGradient);\n\n return layer;\n }\n\n private createGradientElement(): HTMLElement {\n const accentColors = ['var(--app-accent-color-1)', 'var(--app-accent-color-2)'];\n const degreeStep = 360 / accentColors.length;\n const gradientStops =\n accentColors.map((color, index) => `${color} ${index * degreeStep}deg`).join(', ') +\n `, ${accentColors[0]} 360deg`;\n\n const element = this.renderer.createElement('div');\n applyStyles(this.renderer, element, {\n background: `conic-gradient(from 0deg, ${gradientStops})`,\n width: '1500%',\n height: '1500%',\n top: '-700%',\n left: '-700%',\n position: 'absolute',\n transform: 'rotate(180deg)',\n });\n\n return element;\n }\n\n private updateContentZIndex(host: HTMLElement): void {\n this.renderer.setStyle(host, 'isolation', 'isolate');\n\n Array.from(host.children).forEach((child: Element) => {\n const isKnownChild =\n child === this.blurLayer ||\n child === this.gradientLayer ||\n child === this.background;\n\n if (isKnownChild) {\n return;\n }\n\n applyStyles(this.renderer, child as HTMLElement, {\n position: 'relative',\n 'z-index': '1',\n });\n });\n }\n}\n","import { ElementRef, Renderer2 } from '@angular/core';\n\nimport { applyStyles, createElement, StyleMap } from '../../utils';\nimport { BaseAnimationStrategy } from '../core/base-animation.effect';\n\nconst MASK_VALUE = 'linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)';\n\nconst BACKGROUND_STYLES: StyleMap = {\n position: 'absolute',\n top: '0',\n right: '0',\n bottom: '0',\n left: '0',\n 'border-radius': 'inherit',\n background: 'inherit',\n 'z-index': '-1',\n 'pointer-events': 'none',\n};\n\nconst STATIC_BORDER_BASE_STYLES: StyleMap = {\n position: 'absolute',\n top: '0',\n right: '0',\n bottom: '0',\n left: '0',\n 'border-radius': 'inherit',\n 'pointer-events': 'none',\n opacity: '0',\n transition: 'opacity 200ms ease-out',\n 'z-index': '-1',\n padding: '1px',\n mask: MASK_VALUE,\n '-webkit-mask': MASK_VALUE,\n 'mask-composite': 'exclude',\n '-webkit-mask-composite': 'xor',\n};\n\nconst GRADIENT_BORDER_STYLES: StyleMap = {\n overflow: 'hidden',\n 'border-radius': 'inherit',\n position: 'absolute',\n top: '-1px',\n right: '-1px',\n bottom: '-1px',\n left: '-1px',\n 'pointer-events': 'none',\n opacity: '0',\n transition: 'opacity 300ms ease-in',\n 'z-index': '-2',\n filter: 'blur(15px)',\n padding: '1px',\n mask: MASK_VALUE,\n '-webkit-mask': MASK_VALUE,\n 'mask-composite': 'exclude',\n '-webkit-mask-composite': 'xor',\n};\n\n/**\n * Mount360GlowAnimationStrategy\n *\n * Creates an animated gradient border that appears on component mount.\n * The gradient starts with a glow effect, rotates 360 degrees, then settles into a static border.\n *\n * Visual Effect:\n * 1. Component mounts → gradient glow + border fades in (opacity 0 → 1)\n * 2. Gradient rotates 360 degrees slowly\n * 3. As rotation completes → glow fades out, leaving only the static border\n *\n * DOM Structure Created:\n * - .animation-effect__blur-layer (blurred gradient, outer glow - fades out)\n * - .animation-effect__gradient-layer (sharp gradient, main effect - fades out)\n * - .animation-effect__static-border (static gradient border - remains visible)\n * - .animation-effect__background (solid background to mask gradient center)\n * - Existing content (z-indexed above all layers)\n */\nexport class Mount360GlowAnimationStrategy extends BaseAnimationStrategy {\n private gradientBorder!: HTMLElement;\n private gradientElement!: HTMLElement;\n private staticBorder!: HTMLElement;\n private background!: HTMLElement;\n private animationDuration = 2000;\n\n constructor(elementRef: ElementRef, renderer: Renderer2) {\n super(elementRef, renderer);\n }\n\n public setup(onComplete?: () => void): void {\n this.onCompleteCallback = onComplete;\n\n const host = this.elementRef.nativeElement;\n\n applyStyles(this.renderer, host, {\n position: 'relative',\n border: '1px solid transparent',\n });\n\n this.gradientBorder = this.createGradientBorder();\n this.staticBorder = this.createStaticBorder();\n this.background = createElement(\n this.renderer,\n 'div',\n 'animation-effect__background',\n BACKGROUND_STYLES,\n );\n\n this.renderer.insertBefore(host, this.gradientBorder, host.firstChild);\n this.renderer.insertBefore(host, this.staticBorder, host.firstChild);\n this.renderer.insertBefore(host, this.background, host.firstChild);\n\n this.updateContentZIndex(host);\n this.startAnimation();\n }\n\n public cleanup(): void {\n const host = this.elementRef.nativeElement;\n\n if (this.gradientBorder) {\n this.renderer.removeChild(host, this.gradientBorder);\n }\n if (this.staticBorder) {\n this.renderer.removeChild(host, this.staticBorder);\n }\n if (this.background) {\n this.renderer.removeChild(host, this.background);\n }\n }\n\n private startAnimation(): void {\n setTimeout(() => {\n this.renderer.setStyle(this.gradientBorder, 'opacity', '1');\n }, 100);\n\n let startTime: number | null = null;\n\n const rotate = (timestamp: number) => {\n if (!startTime) startTime = timestamp;\n const progress = (timestamp - startTime) / this.animationDuration;\n\n if (progress < 1) {\n const angle = progress * 360;\n this.renderer.setStyle(this.gradientElement, 'transform', `rotate(${angle}deg)`);\n requestAnimationFrame(rotate);\n return;\n }\n\n this.renderer.setStyle(this.gradientElement, 'transform', 'rotate(360deg)');\n\n setTimeout(() => {\n applyStyles(this.renderer, this.gradientBorder, {\n transition: 'opacity 300ms ease-out, filter 300ms ease-out',\n filter: 'blur(0px)',\n });\n\n setTimeout(() => {\n this.renderer.setStyle(this.gradientBorder, 'opacity', '0');\n this.renderer.setStyle(this.staticBorder, 'opacity', '1');\n this.notifyComplete();\n }, 100);\n }, 50);\n };\n\n requestAnimationFrame(rotate);\n }\n\n private createGradientBorder(): HTMLElement {\n const border = createElement(\n this.renderer,\n 'div',\n 'animation-effect__gradient-border',\n GRADIENT_BORDER_STYLES,\n );\n\n this.gradientElement = this.createGradientElement();\n this.renderer.appendChild(border, this.gradientElement);\n\n return border;\n }\n\n private createStaticBorder(): HTMLElement {\n const accentColors = ['var(--app-accent-color-1)', 'var(--app-accent-color-2)'];\n const gradient = `linear-gradient(90deg, ${accentColors.join(', ')})`;\n\n return createElement(this.renderer, 'div', 'animation-effect__static-border', {\n ...STATIC_BORDER_BASE_STYLES,\n background: gradient,\n });\n }\n\n private createGradientElement(): HTMLElement {\n const accentColors = ['var(--app-accent-color-1)', 'var(--app-accent-color-2)'];\n const degreeStep = 360 / accentColors.length;\n const gradientStops =\n accentColors.map((color, index) => `${color} ${index * degreeStep}deg`).join(', ') +\n `, ${accentColors[0]} 360deg`;\n\n const element = this.renderer.createElement('div');\n\n applyStyles(this.renderer, element, {\n background: `conic-gradient(from 0deg, ${gradientStops})`,\n width: '1500%',\n height: '1500%',\n top: '-700%',\n left: '-700%',\n position: 'absolute',\n transform: 'rotate(0deg)',\n });\n\n return element;\n }\n\n private updateContentZIndex(host: HTMLElement): void {\n this.renderer.setStyle(host, 'isolation', 'isolate');\n\n Array.from(host.children).forEach((child: Element) => {\n if (\n child === this.gradientBorder ||\n child === this.staticBorder ||\n child === this.background\n ) {\n return;\n }\n\n applyStyles(this.renderer, child as HTMLElement, {\n position: 'relative',\n 'z-index': '1',\n });\n });\n }\n}\n","import { ElementRef, Renderer2 } from '@angular/core';\n\nimport { AnimationType } from '../animation-type.enum';\nimport { AnimationStrategy, BaseAnimationStrategy } from './base-animation.effect';\nimport { HoverMouseFollowAnimationStrategy } from '../effects/hover-mouse-follow-animation.effect';\nimport { Mount360GlowAnimationStrategy } from '../effects/mount-360-glow-animation.effect';\n\n/**\n * ChainedAnimationStrategy\n *\n * Executes multiple animations in sequence, one after another.\n * Each animation completes before the next one starts.\n *\n * Visual Effect:\n * 1. First animation plays to completion\n * 2. Cleanup of first animation\n * 3. Second animation starts and plays to completion\n * 4. Repeat for all animations in the chain\n * 5. Final animation remains active\n *\n * Usage:\n * Pass an array of AnimationType values to the directive.\n * Example: [AnimationType.MOUNT_360_GLOW, AnimationType.HOVER_MOUSE_FOLLOW]\n *\n * Notes:\n * - Animations that don't complete (e.g., HOVER_MOUSE_FOLLOW) will be the final animation\n * - Each animation is properly cleaned up before the next one starts\n * - Mouse events are forwarded to the current active animation strategy\n */\nexport class ChainedAnimationStrategy extends BaseAnimationStrategy {\n private animationTypes: AnimationType[];\n private currentStrategy?: AnimationStrategy;\n private currentIndex = 0;\n\n constructor(animationTypes: AnimationType[], elementRef: ElementRef, renderer: Renderer2) {\n super(elementRef, renderer);\n\n this.animationTypes = animationTypes;\n }\n\n public setup(onComplete?: () => void): void {\n this.onCompleteCallback = onComplete;\n\n if (this.animationTypes.length === 0) {\n this.notifyComplete();\n\n return;\n }\n\n this.playNextAnimation();\n }\n\n public cleanup(): void {\n if (!this.currentStrategy) {\n return;\n }\n\n this.currentStrategy.cleanup();\n this.currentStrategy = undefined;\n }\n\n public override onMouseEnter(): void {\n if (!this.currentStrategy) {\n return;\n }\n\n this.currentStrategy.onMouseEnter();\n }\n\n public override onMouseLeave(): void {\n if (!this.currentStrategy) {\n return;\n }\n\n this.currentStrategy.onMouseLeave();\n }\n\n public override onMouseMove(event: MouseEvent): void {\n if (!this.currentStrategy) {\n return;\n }\n\n this.currentStrategy.onMouseMove(event);\n }\n\n private playNextAnimation(): void {\n if (this.currentIndex >= this.animationTypes.length) {\n this.notifyComplete();\n\n return;\n }\n\n const animationType = this.animationTypes[this.currentIndex];\n this.currentIndex++;\n\n // Clean up previous strategy if exists\n if (this.currentStrategy) {\n this.currentStrategy.cleanup();\n }\n\n // Create new strategy\n this.currentStrategy = this.createStrategy(animationType);\n\n // Setup with completion callback\n const isLastAnimation = this.currentIndex >= this.animationTypes.length;\n\n this.currentStrategy.setup(() => {\n if (!isLastAnimation) {\n // More animations to play - continue chain\n this.playNextAnimation();\n\n return;\n }\n\n this.notifyComplete();\n });\n }\n\n private createStrategy(animationType: AnimationType): AnimationStrategy {\n switch (animationType) {\n case AnimationType.HOVER_MOUSE_FOLLOW:\n return new HoverMouseFollowAnimationStrategy(this.elementRef, this.renderer);\n case AnimationType.MOUNT_360_GLOW:\n return new Mount360GlowAnimationStrategy(this.elementRef, this.renderer);\n default:\n throw new Error(`Unknown animation type: ${animationType}`);\n }\n }\n}\n","import { ElementRef, Renderer2 } from '@angular/core';\n\nimport { AnimationStrategy } from './base-animation.effect';\nimport { ChainedAnimationStrategy } from './chained-animation.effect';\nimport { AnimationType } from '../animation-type.enum';\nimport { HoverMouseFollowAnimationStrategy } from '../effects/hover-mouse-follow-animation.effect';\nimport { Mount360GlowAnimationStrategy } from '../effects/mount-360-glow-animation.effect';\n\nexport class AnimationStrategyFactory {\n public static create(\n animationType: AnimationType | AnimationType[],\n elementRef: ElementRef,\n renderer: Renderer2,\n ): AnimationStrategy {\n if (!animationType) {\n throw new Error(`Animation type is required`);\n }\n\n // Handles animation chaining\n if (Array.isArray(animationType)) {\n const validAnimations = animationType.filter((type) =>\n Object.values(AnimationType).includes(type),\n );\n\n return new ChainedAnimationStrategy(validAnimations, elementRef, renderer);\n }\n\n if (!Object.values(AnimationType).includes(animationType)) {\n throw new Error(`Unknown animation type: ${animationType}`);\n }\n\n if (animationType === AnimationType.HOVER_MOUSE_FOLLOW) {\n return new HoverMouseFollowAnimationStrategy(elementRef, renderer);\n }\n\n if (animationType === AnimationType.MOUNT_360_GLOW) {\n return new Mount360GlowAnimationStrategy(elementRef, renderer);\n }\n\n throw new Error(`Unhandled animation type: ${animationType}`);\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n inject,\n input,\n InputSignal,\n OnDestroy,\n OnInit,\n output,\n OutputEmitterRef,\n Renderer2,\n} from '@angular/core';\n\nimport { AnimationType } from './animation-type.enum';\nimport { AnimationStrategyFactory } from './core/animation-effect.factory';\nimport { AnimationStrategy } from './core/base-animation.effect';\n\n/**\n * AnimationEffectDirective\n *\n * A directive that applies animated visual effects to any HTML element.\n * Supports multiple animation types through a strategy pattern.\n * Supports animation chaining by accepting an array of animation types.\n * Emits events when animations start and complete.\n *\n * Usage:\n * ```html\n * <!-- Single animation -->\n * <div [animationEffect]=\"AnimationType.HOVER_MOUSE_FOLLOW\">Content</div>\n *\n * <!-- Chained animations -->\n * <div [animationEffect]=\"[AnimationType.MOUNT_360_GLOW, AnimationType.HOVER_MOUSE_FOLLOW]\">Content</div>\n *\n * <!-- With event handlers -->\n * <div\n * [animationEffect]=\"AnimationType.MOUNT_360_GLOW\"\n * (animationStarted)=\"onAnimationStart()\"\n * (animationCompleted)=\"onAnimationComplete()\"\n * >Content</div>\n * ```\n *\n * @example\n * // With default animation\n * <button animationEffect>Click me</button>\n *\n * @example\n * // With specific animation type\n * <div [animationEffect]=\"AnimationType.HOVER_MOUSE_FOLLOW\">Hover me</div>\n *\n * @example\n * // With chained animations and events\n * <div\n * [animationEffect]=\"[AnimationType.MOUNT_360_GLOW, AnimationType.HOVER_MOUSE_FOLLOW]\"\n * (animationStarted)=\"handleStart()\"\n * (animationCompleted)=\"handleComplete()\"\n * >Chained effect</div>\n */\n@Directive({\n selector: '[animationEffect]',\n standalone: true,\n})\nexport class AnimationEffectDirective implements OnInit, OnDestroy {\n /**\n * The type of animation to apply. Can be a single AnimationType or an array for chaining.\n * Defaults to HOVER_MOUSE_FOLLOW.\n */\n public animationEffect: InputSignal<AnimationType | AnimationType[]> = input<\n AnimationType | AnimationType[]\n >(AnimationType.HOVER_MOUSE_FOLLOW);\n\n /**\n * Emits when the animation starts (during ngOnInit).\n */\n public animationStarted: OutputEmitterRef<void> = output<void>();\n\n /**\n * Emits when the animation completes.\n * For auto-completing animations (like MOUNT_360_GLOW), emits when the animation finishes.\n * For interactive animations (like HOVER_MOUSE_FOLLOW), emits immediately as they don't auto-complete.\n * For chained animations, emits when all animations in the chain complete.\n */\n public animationCompleted: OutputEmitterRef<void> = output<void>();\n\n private animationStrategy!: AnimationStrategy;\n private _elementRef: ElementRef = inject(ElementRef);\n private _renderer: Renderer2 = inject(Renderer2);\n\n public ngOnInit(): void {\n this.animationStrategy = AnimationStrategyFactory.create(\n this.animationEffect(),\n this._elementRef,\n this._renderer,\n );\n\n // Emit animation started event\n this.animationStarted.emit();\n\n // Setup animation with completion callback\n this.animationStrategy.setup(() => {\n // Emit animation completed event\n this.animationCompleted.emit();\n });\n }\n\n public ngOnDestroy(): void {\n if (!this.animationStrategy) {\n return;\n }\n\n this.animationStrategy.cleanup();\n }\n\n @HostListener('mouseenter')\n protected onMouseEnter(): void {\n this.animationStrategy.onMouseEnter();\n }\n\n @HostListener('mouseleave')\n protected onMouseLeave(): void {\n this.animationStrategy.onMouseLeave();\n }\n\n @HostListener('mousemove', ['$event'])\n protected onMouseMove(event: MouseEvent): void {\n this.animationStrategy.onMouseMove(event);\n }\n}\n","export enum RESPONSE_STREAM_ACTIONS {\n START_THREAD_STREAM = '[Response Stream] Start Thread Stream',\n UPDATE_STREAM_CONTENT = '[Response Stream] Update Stream Content',\n ADD_STREAM_TOOL_MESSAGE = '[Response Stream] Add Stream Tool Message',\n COMPLETE_THREAD_STREAM = '[Response Stream] Complete Thread Stream',\n FAIL_THREAD_STREAM = '[Response Stream] Fail Thread Stream',\n ABORT_THREAD_STREAM = '[Response Stream] Abort Thread Stream',\n CLEAR_COMPLETION_NOTIFICATION = '[Response Stream] Clear Completion Notification',\n CLEAR_ALL_COMPLETION_NOTIFICATIONS = '[Response Stream] Clear All Completion Notifications',\n UNTRACK_THREAD_STREAM_STATE = '[Response Stream] Untrack Thread Stream State',\n}\n","import { createAction, props } from '@ngrx/store';\n\nimport { RESPONSE_STREAM_ACTIONS } from './response-stream.actions.enum';\nimport { UIMessage, UIToolMessage } from '../message/types';\n\nexport const startThreadStream = createAction(\n RESPONSE_STREAM_ACTIONS.START_THREAD_STREAM,\n props<{ threadId: string; userMessage: UIMessage }>(),\n);\n\nexport const updateStreamContent = createAction(\n RESPONSE_STREAM_ACTIONS.UPDATE_STREAM_CONTENT,\n props<{ threadId: string; content: string; messageId: string }>(),\n);\n\nexport const addStreamToolMessage = createAction(\n RESPONSE_STREAM_ACTIONS.ADD_STREAM_TOOL_MESSAGE,\n props<{ threadId: string; toolMessage: UIToolMessage }>(),\n);\n\nexport const completeThreadStream = createAction(\n RESPONSE_STREAM_ACTIONS.COMPLETE_THREAD_STREAM,\n props<{ threadId: string; shouldNotify: boolean }>(),\n);\n\nexport const failThreadStream = createAction(\n RESPONSE_STREAM_ACTIONS.FAIL_THREAD_STREAM,\n props<{ threadId: string; errorMessage: string }>(),\n);\n\nexport const abortThreadStream = createAction(\n RESPONSE_STREAM_ACTIONS.ABORT_THREAD_STREAM,\n props<{ threadId: string }>(),\n);\n\nexport const clearCompletionNotification = createAction(\n RESPONSE_STREAM_ACTIONS.CLEAR_COMPLETION_NOTIFICATION,\n props<{ threadId: string }>(),\n);\n\nexport const untrackThreadStreamState = createAction(\n RESPONSE_STREAM_ACTIONS.UNTRACK_THREAD_STREAM_STATE,\n props<{ threadId: string }>(),\n);\n","import { UIMessage, UIToolMessage } from '../message/types';\n\nexport enum RESPONSE_STREAM_STATUS {\n IDLE = 'idle',\n STREAMING = 'streaming',\n COMPLETED = 'completed',\n ERROR = 'error',\n ABORTED = 'aborted',\n}\n\nexport type ThreadStreamState = {\n threadId: string;\n status: RESPONSE_STREAM_STATUS;\n accumulatedContent: string;\n /** Current assistant message ID being streamed */\n currentMessageId: string | null;\n // only if user is not on the thread when stream completes\n hasCompletionNotification: boolean;\n errorMessage?: string;\n userMessage: UIMessage | null;\n toolMessages: UIToolMessage[];\n};\n\nexport function createThreadStreamState(\n threadId: string,\n status: RESPONSE_STREAM_STATUS = RESPONSE_STREAM_STATUS.IDLE,\n userMessage: UIMessage | null = null,\n): ThreadStreamState {\n return {\n threadId,\n status,\n accumulatedContent: '',\n currentMessageId: null,\n hasCompletionNotification: false,\n userMessage,\n toolMessages: [],\n };\n}\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { ResponseStreamReducerStateType } from './response-stream.reducer';\nimport { RESPONSE_STREAM_STATUS, ThreadStreamState } from './response-stream.types';\n\nexport const selectResponseStreamStore =\n createFeatureSelector<ResponseStreamReducerStateType>('responseStreamStore');\n\nexport const selectAllStreams = createSelector(\n selectResponseStreamStore,\n (state: ResponseStreamReducerStateType) => state.streams,\n);\n\nexport const selectStreamByThreadId = (threadId: string) =>\n createSelector(\n selectResponseStreamStore,\n (state: ResponseStreamReducerStateType) => state.streams[threadId] ?? null,\n );\n\nexport const selectIsThreadStreaming = (threadId: string) =>\n createSelector(selectResponseStreamStore, (state: ResponseStreamReducerStateType) => {\n const stream = state.streams[threadId];\n return stream?.status === RESPONSE_STREAM_STATUS.STREAMING;\n });\n\nexport const selectThreadsCurrentlyStreaming = createSelector(\n selectResponseStreamStore,\n (state: ResponseStreamReducerStateType) => {\n return Object.values(state.streams)\n .filter((stream) => stream.status === RESPONSE_STREAM_STATUS.STREAMING)\n .map((stream) => stream.threadId);\n },\n);\n\nexport const selectThreadsWithCompletionNotification = createSelector(\n selectResponseStreamStore,\n (state: ResponseStreamReducerStateType) => {\n return Object.values(state.streams)\n .filter((stream) => stream.hasCompletionNotification)\n .map((stream) => stream.threadId);\n },\n);\n\nexport const selectHasAnyCompletionNotification = createSelector(\n selectResponseStreamStore,\n (state: ResponseStreamReducerStateType) => {\n return Object.values(state.streams).some((stream) => stream.hasCompletionNotification);\n },\n);\n\nexport const selectStreamContentForThread = (threadId: string) =>\n createSelector(selectResponseStreamStore, (state: ResponseStreamReducerStateType) => {\n const stream = state.streams[threadId];\n return stream\n ? {\n content: stream.accumulatedContent,\n messageId: stream.currentMessageId,\n userMessage: stream.userMessage,\n toolMessages: stream.toolMessages,\n }\n : null;\n });\n\nexport const selectStreamingThreadIds = createSelector(\n selectResponseStreamStore,\n (state: ResponseStreamReducerStateType): Set<string> => {\n const streamingIds = Object.values(state.streams)\n .filter(\n (stream: ThreadStreamState) => stream.status === RESPONSE_STREAM_STATUS.STREAMING,\n )\n .map((stream: ThreadStreamState) => stream.threadId);\n return new Set(streamingIds);\n },\n);\n","import { computed, inject, Injectable, Signal } from '@angular/core';\nimport { Store } from '@ngrx/store';\n\nimport {\n abortThreadStream,\n clearCompletionNotification,\n completeThreadStream,\n failThreadStream,\n startThreadStream,\n untrackThreadStreamState,\n updateStreamContent,\n} from './response-stream.actions';\nimport {\n selectAllStreams,\n selectHasAnyCompletionNotification,\n selectStreamingThreadIds,\n selectThreadsCurrentlyStreaming,\n selectThreadsWithCompletionNotification,\n} from './response-stream.selector';\nimport { RESPONSE_STREAM_STATUS, ThreadStreamState } from './response-stream.types';\nimport { UIMessage } from '../message/types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ResponseStreamFacade {\n private readonly _store: Store = inject(Store);\n\n private readonly _allStreams: Signal<Record<string, ThreadStreamState>> =\n this._store.selectSignal(selectAllStreams);\n public get allStreams(): Signal<Record<string, ThreadStreamState>> {\n return this._allStreams;\n }\n\n private readonly _threadsCurrentlyStreaming: Signal<string[]> = this._store.selectSignal(\n selectThreadsCurrentlyStreaming,\n );\n public get threadsCurrentlyStreaming(): Signal<string[]> {\n return this._threadsCurrentlyStreaming;\n }\n\n private readonly _threadsWithCompletionNotification: Signal<string[]> =\n this._store.selectSignal(selectThreadsWithCompletionNotification);\n public get threadsWithCompletionNotification(): Signal<string[]> {\n return this._threadsWithCompletionNotification;\n }\n\n private readonly _hasAnyCompletionNotification: Signal<boolean> = this._store.selectSignal(\n selectHasAnyCompletionNotification,\n );\n public get hasAnyCompletionNotification(): Signal<boolean> {\n return this._hasAnyCompletionNotification;\n }\n\n private readonly _streamingThreadIds: Signal<Set<string>> =\n this._store.selectSignal(selectStreamingThreadIds);\n public get streamingThreadIds(): Signal<Set<string>> {\n return this._streamingThreadIds;\n }\n\n public isThreadStreaming(threadId: string): boolean {\n const stream = this._allStreams()[threadId];\n return stream?.status === RESPONSE_STREAM_STATUS.STREAMING;\n }\n\n public hasThreadCompletionNotification(threadId: string): boolean {\n const stream = this._allStreams()[threadId];\n return stream?.hasCompletionNotification ?? false;\n }\n\n public getStreamForThread(threadId: string): ThreadStreamState | null {\n return this._allStreams()[threadId] ?? null;\n }\n\n public createIsStreamingSignal(threadIdSignal: Signal<string>): Signal<boolean> {\n return computed(() => {\n const threadId = threadIdSignal();\n return this._streamingThreadIds().has(threadId);\n });\n }\n\n public createHasNotificationSignal(threadIdSignal: Signal<string>): Signal<boolean> {\n return computed(() => {\n const threadId = threadIdSignal();\n return this._threadsWithCompletionNotification().includes(threadId);\n });\n }\n\n public dispatchStartThreadStream(threadId: string, userMessage: UIMessage): void {\n this._store.dispatch(\n startThreadStream({\n threadId,\n userMessage,\n }),\n );\n }\n\n public dispatchUpdateStreamContent(threadId: string, content: string, messageId: string): void {\n this._store.dispatch(updateStreamContent({ threadId, content, messageId }));\n }\n\n public dispatchCompleteThreadStream(threadId: string, shouldNotify: boolean): void {\n this._store.dispatch(completeThreadStream({ threadId, shouldNotify }));\n }\n\n public dispatchFailThreadStream(threadId: string, errorMessage: string): void {\n this._store.dispatch(failThreadStream({ threadId, errorMessage }));\n }\n\n public dispatchAbortThreadStream(threadId: string): void {\n this._store.dispatch(abortThreadStream({ threadId }));\n }\n\n public dispatchClearCompletionNotification(threadId: string): void {\n this._store.dispatch(clearCompletionNotification({ threadId }));\n }\n\n public dispatchUntrackThreadStreamState(threadId: string): void {\n this._store.dispatch(untrackThreadStreamState({ threadId }));\n }\n}\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 { IOConnectCore } from '@interopio/core';\nimport { UnsubscribeFunction } from 'callback-registry';\n\nimport { LoggerService } from '../logger/logger.service';\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 private readonly _logger: LoggerService = inject(LoggerService);\n protected readonly LOGGER_NAME: string = 'SubscriptionCleanupService';\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 this.getLogger().warn('Subscription name is required.');\n\n return;\n }\n\n if (this._subscriptions.has(name)) {\n this.getLogger().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 this.getLogger().error(\n `Error during subscription ${name} cleanup: ${error instanceof Error ? error.message : String(error)}`,\n );\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 this.getLogger().error(\n `Error during subscription ${name} cleanup: ${error instanceof Error ? error.message : String(error)}`,\n );\n\n failedUnsubscribes.push(name);\n }\n }\n\n this._subscriptions.clear();\n\n this.getLogger().info(\n `Successfully unsubscribed from [${successfulUnsubscribes.join(', ')}]`,\n );\n\n if (failedUnsubscribes.length > 0) {\n this.getLogger().warn(\n `Failed to unsubscribe from subscriptions: [${failedUnsubscribes.join(', ')}]`,\n );\n }\n }\n\n private getLogger(): IOConnectCore.Logger.API {\n return this._logger.get(this.LOGGER_NAME);\n }\n}\n","export enum ELICITATION_ACTION {\n ACCEPT = 'accept',\n DECLINE = 'decline',\n CANCEL = 'cancel',\n}\n","import { IOConnectCore } from '@interopio/core';\nimport { IoAiWeb } from '@interopio/ai-web';\n\nexport const validateElicitationRequest = (\n request: IoAiWeb.ElicitationRequestParams,\n logger: IOConnectCore.Logger.API,\n): boolean => {\n // Basic meta tags validation of the elicitation request\n if (!isElicitRequestForIOToolResult(request._meta, logger)) {\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\nconst isElicitRequestForIOToolResult = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _meta: Record<string, any> | undefined,\n logger: IOConnectCore.Logger.API,\n): boolean => {\n if (!_meta || !_meta['toolName']) {\n logger.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 logger.warn('Elicitation request has invalid _meta.toolName field.');\n\n return false;\n }\n\n if (!toolName.startsWith('io_connect')) {\n logger.warn('Elicitation request is not intended for io_connect.');\n\n return false;\n }\n\n return true;\n};\n","export enum APP_LIFECYCLE_ACTIONS {\n INITIAL_APP_CORE_SERVICES_INIT = '[App Lifecycle] Initial App Core Services Init',\n INITIAL_APP_CORE_SERVICES_INIT_SUCCESS = '[App Lifecycle] Initial App Core Services Init Success',\n INITIAL_APP_CORE_SERVICES_INIT_FAILURE = '[App Lifecycle] Initial App Core Services Init Failure',\n}\n","import { createAction, props } from '@ngrx/store';\n\nimport { APP_LIFECYCLE_ACTIONS } from './app-lifecycle.actions.enum';\n\nexport const initialAppCoreServicesInit = createAction(\n APP_LIFECYCLE_ACTIONS.INITIAL_APP_CORE_SERVICES_INIT,\n);\nexport const initialAppCoreServicesInitSuccess = createAction(\n APP_LIFECYCLE_ACTIONS.INITIAL_APP_CORE_SERVICES_INIT_SUCCESS,\n);\nexport const initialAppCoreServicesInitFailure = createAction(\n APP_LIFECYCLE_ACTIONS.INITIAL_APP_CORE_SERVICES_INIT_FAILURE,\n props<{ error: Error }>(),\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { AppLifecycleStateType } from './app-lifecycle.reducer';\nimport { LOADING_STATE } from '../../enums/loading-state.enum';\n\nexport const selectAppLifecycleStore = createFeatureSelector<AppLifecycleStateType>('appLifecycleStore');\n\nexport const selectIsAppCoreServicesStarted = createSelector(\n selectAppLifecycleStore,\n (state: AppLifecycleStateType) => state.isAppCoreServicesStarted,\n);\n\nexport const selectAppCoreServicesLoadingState = createSelector(\n selectAppLifecycleStore,\n (state: AppLifecycleStateType) => state.loadingState,\n);\n\nexport const selectIsPendingState = createSelector(\n selectAppLifecycleStore,\n (state: AppLifecycleStateType) => state.loadingState.type === LOADING_STATE.LOADING,\n);\n","import { computed, inject, Injectable, Signal } from '@angular/core';\nimport { Store } from '@ngrx/store';\n\nimport { initialAppCoreServicesInit } from './app-lifecycle.actions';\nimport {\n selectAppCoreServicesLoadingState,\n selectIsAppCoreServicesStarted,\n selectIsPendingState,\n} from './app-lifecycle.selector';\nimport { LOADING_STATE } from '../../enums/loading-state.enum';\nimport { LoadingType } from '../../types/loading.type';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AppLifecycleFacade {\n private readonly store: Store = inject(Store);\n\n private readonly _isAppCoreServicesStarted: Signal<boolean> = this.store.selectSignal<boolean>(\n selectIsAppCoreServicesStarted,\n );\n public get isAppCoreServicesStarted(): Signal<boolean> {\n return this._isAppCoreServicesStarted;\n }\n\n private readonly _appCoreServicesLoadingState: Signal<LoadingType> =\n this.store.selectSignal<LoadingType>(selectAppCoreServicesLoadingState);\n public get appCoreServicesLoadingState(): Signal<LoadingType> {\n return this._appCoreServicesLoadingState;\n }\n\n private readonly _isPendingAppCoreServicesOperation: Signal<boolean> =\n this.store.selectSignal<boolean>(selectIsPendingState);\n public get isPendingAppCoreServicesOperation(): Signal<boolean> {\n return this._isPendingAppCoreServicesOperation;\n }\n\n private readonly _appCoreServicesErrorMessage: Signal<string | null> = computed(() => {\n const loadingState: LoadingType = this._appCoreServicesLoadingState();\n\n return loadingState.type === LOADING_STATE.ERROR ? loadingState.message : null;\n });\n\n public get appCoreServicesErrorMessage(): Signal<string | null> {\n return this._appCoreServicesErrorMessage;\n }\n\n public dispatchInitAppCoreServices(): void {\n return this.store.dispatch(initialAppCoreServicesInit());\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 { IOConnectCore } from '@interopio/core';\nimport { IOConnectDesktop } from '@interopio/desktop';\nimport { IoAiWeb, IoAiWebFactory } from '@interopio/ai-web';\nimport { IOConnectModals } from '@interopio/modals-api';\nimport { IOConnectStore } from '@interopio/ng';\nimport { map } from 'rxjs';\n\nimport { LoggerService } from '../../services/logger/logger.service';\nimport { AppLifecycleFacade } from '../../store/app-lifecycle/app-lifecycle.facade';\n\n@Injectable({ providedIn: 'root' })\nexport class IOConnectService {\n private readonly _ioConnectStore: IOConnectStore = inject(IOConnectStore);\n private readonly _destroyRef: DestroyRef = inject(DestroyRef);\n private readonly _logger: LoggerService = inject(LoggerService);\n private readonly _appLifecycleFacade = inject(AppLifecycleFacade);\n protected readonly LOGGER_NAME: string = 'IOConnectService';\n\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 private get _ioConnectReadyInitError(): Error | undefined {\n return this._ioConnectStore.getInitError();\n }\n\n public readonly isIoConnectReady: Signal<boolean>;\n\n constructor() {\n this.isIoConnectReady = toSignal(\n this._ioConnectStore.ready().pipe(\n map((r) => {\n if (r.error === undefined && !this._logger.isInitialized) {\n this._logger.setLogger(this._ioConnect.logger);\n }\n\n return r.error === undefined;\n }),\n ),\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:\n | IOConnectDesktop.Preferences.AppPreferences\n | IOConnectBrowser.Prefs.AppPreferences\n | undefined = 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:\n | IOConnectDesktop.Preferences.AppPreferences\n | IOConnectBrowser.Prefs.AppPreferences\n | undefined = 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: IoAiWeb.WebConfig): Promise<IoAiWeb.API> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (window as any).io = this._ioConnect;\n return IoAiWebFactory(this._ioConnect as IOConnectBrowser.API, config);\n }\n\n public async isModalsAvailable(): Promise<boolean> {\n const ioBrowserAPI: IOConnectBrowser.API = this._ioConnect as IOConnectBrowser.API;\n\n const modalsAPI = ioBrowserAPI.modals;\n const modalsDialogsAPI = ioBrowserAPI.modals?.dialogs;\n\n if (!modalsAPI || !modalsDialogsAPI) {\n return false;\n }\n\n const status: IOConnectModals.ModalsStatus | undefined = await modalsAPI.getStatus();\n\n if (!status) {\n return false;\n }\n\n return status.platformConfigured === true;\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 _hasStartedIODependentTasks: boolean = false;\n\n public startIODependentTasks(): void {\n if (this._hasStartedIODependentTasks) return;\n this._hasStartedIODependentTasks = true;\n\n // Start any tasks that depend on IO being ready, e.g. subscribe to theme changes\n this.subscribeToThemeChanges();\n\n this._appLifecycleFacade.dispatchInitAppCoreServices();\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 this.getLogger().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 private getLogger(): IOConnectCore.Logger.API {\n return this._logger.get(this.LOGGER_NAME);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { IOConnectCore } from '@interopio/core';\nimport { IoAiWeb } from '@interopio/ai-web';\nimport { IOConnectModals } from '@interopio/modals-api';\n\nimport { ELICITATION_ACTION } from './enums';\nimport { validateElicitationRequest } from './utils';\nimport { APP_BUTTON_TYPES } from '../../../components/app-button/enum';\nimport { PANEL_BUTTON_ACTION_TYPE } from '../../../components/app-panel/enums';\nimport { UI_STRINGS } from '../../../constants/ui-strings';\nimport { ThreadFacade } from '../../../store/thread/thread.facade';\nimport { IOConnectService } from '../../io/io.service';\nimport { LoggerService } from '../../logger/logger.service';\nimport { OverlayService } from '../../overlay/overlay.service';\n\n/**\n * Service responsible for handling elicitation requests from the IoAiWeb 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 private readonly _overlayService: OverlayService = inject(OverlayService);\n private readonly _threadFacade: ThreadFacade = inject(ThreadFacade);\n private readonly _logger: LoggerService = inject(LoggerService);\n protected readonly LOGGER_NAME: string = 'ElicitationService';\n\n public selectElicitationHandler(\n mcp: IoAiWeb.WebConfig['mcp'],\n ): (\n serverName: string,\n params: IoAiWeb.ElicitationRequestParams,\n ) => Promise<IoAiWeb.ElicitationResponse> {\n if (this.isCustomElicitationHandlerProvided(mcp)) {\n this._logger\n .get(this.LOGGER_NAME)\n .warn('Using a custom elicitation handler provided by user configuration.');\n\n return mcp!.clientsConfig!.capabilities!.elicitation!.handler!;\n }\n\n return this.handleElicitationRequest.bind(this);\n }\n\n public async handleElicitationRequest(\n serverName: string,\n request: IoAiWeb.ElicitationRequestParams,\n ): Promise<IoAiWeb.ElicitationResponse> {\n const requestThreadId: string | undefined = request._meta?.['threadId'];\n const activeThreadId: string | null = this._threadFacade.activeThreadId();\n const isFromBackgroundThread: boolean = Boolean(\n requestThreadId && activeThreadId && activeThreadId !== requestThreadId,\n );\n\n if (isFromBackgroundThread) {\n this.getLogger().warn(\n `Elicitation request rejected: active thread (${activeThreadId}) does not match request thread (${requestThreadId})`,\n );\n\n return this.handleResponseType(\n ELICITATION_ACTION.CANCEL,\n undefined,\n `Elicitation request rejected: User was not on the thread that the elicitation request was intended for.`,\n );\n }\n\n const isRequestValid: boolean = validateElicitationRequest(request, this.getLogger());\n\n if (!isRequestValid) {\n return this.handleResponseType(\n ELICITATION_ACTION.CANCEL,\n undefined,\n 'Elicitation request validation failed.',\n );\n }\n\n try {\n return await this.getElicitationModalResponse(serverName, request);\n } catch (error) {\n const errorMessage: string =\n 'Error occurred while getting elicitation modal response. Request canceled. ' +\n (error instanceof Error ? error.message : String(error));\n\n return this.handleResponseType(ELICITATION_ACTION.CANCEL, undefined, errorMessage);\n }\n }\n\n private async getElicitationModalResponse(\n serverName: string,\n request: IoAiWeb.ElicitationRequestParams,\n ): Promise<IoAiWeb.ElicitationResponse> {\n this.getLogger().info(\n `Showing elicitation request from server: ${serverName}, requesting: ${JSON.stringify(request)}`,\n );\n\n const isModalsApiAvailable: boolean = await this._ioConnectService.isModalsAvailable();\n\n if (!isModalsApiAvailable) {\n this.getLogger().info('IO Modals not available, using built-in panel for elicitation');\n\n return await this.getBuiltInPanelResponse(request);\n }\n\n return await this.getModalsApiPanelResponse(request);\n }\n\n private async getBuiltInPanelResponse(\n request: IoAiWeb.ElicitationRequestParams,\n ): Promise<IoAiWeb.ElicitationResponse> {\n return new Promise((resolve) => {\n const message = request.message ?? this.UI_STRINGS.FALLBACK_TEXT;\n\n this._overlayService.showPanelOverlay({\n title: this.UI_STRINGS.TITLE,\n content: `<div class=\"flex flex-col g-2\">\n <span class=\"text-text-black-white text-lg\">Permission to proceed</span>\n <span class=\"text-text-default text-sm\">${message}</span>\n </div>`,\n isHeaderCloseButtonDisplayed: false,\n footerButtons: [\n {\n label: 'Accept',\n action: PANEL_BUTTON_ACTION_TYPE.CUSTOM,\n type: APP_BUTTON_TYPES.SUBMIT,\n onClick: () => this.handleResponseType(ELICITATION_ACTION.ACCEPT, resolve),\n },\n {\n label: 'Decline',\n action: PANEL_BUTTON_ACTION_TYPE.CUSTOM,\n type: APP_BUTTON_TYPES.DEFAULT,\n onClick: () => this.handleResponseType(ELICITATION_ACTION.DECLINE, resolve),\n },\n {\n label: 'Cancel',\n action: PANEL_BUTTON_ACTION_TYPE.CUSTOM,\n type: APP_BUTTON_TYPES.DEFAULT,\n onClick: () => this.handleResponseType(ELICITATION_ACTION.CANCEL, resolve),\n },\n ],\n });\n });\n }\n\n private async getModalsApiPanelResponse(\n request: IoAiWeb.ElicitationRequestParams,\n ): Promise<IoAiWeb.ElicitationResponse> {\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.handleResponseType(ELICITATION_ACTION.ACCEPT);\n case ELICITATION_ACTION.DECLINE:\n return this.handleResponseType(ELICITATION_ACTION.DECLINE);\n case ELICITATION_ACTION.CANCEL:\n return this.handleResponseType(ELICITATION_ACTION.CANCEL);\n default:\n // At this point probably a timeout has occurred\n return this.handleResponseType(\n ELICITATION_ACTION.CANCEL,\n undefined,\n 'Elicitation dialog was closed without a response.',\n );\n }\n }\n\n // TODO: Future Task - Replace dummy data with actual user input handling\n private handleResponseType(\n type: ELICITATION_ACTION,\n onBuiltInPanelResponse?: (value: IoAiWeb.ElicitationResponse) => void,\n logMessage?: string,\n ): IoAiWeb.ElicitationResponse {\n if (onBuiltInPanelResponse) {\n this._overlayService.closeCurrentOverlay();\n }\n\n let response: IoAiWeb.ElicitationResponse | undefined;\n\n if (type === ELICITATION_ACTION.ACCEPT) {\n this.getLogger().info(logMessage ?? 'User accepted the elicitation request.');\n\n response = {\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 if (type === ELICITATION_ACTION.DECLINE) {\n this._logger\n .get(this.LOGGER_NAME)\n .info(logMessage ?? 'User declined the elicitation request.');\n response = {\n action: ELICITATION_ACTION.DECLINE,\n };\n }\n\n if (type === ELICITATION_ACTION.CANCEL) {\n this._logger\n .get(this.LOGGER_NAME)\n .info(logMessage ?? 'User canceled the elicitation request.');\n response = {\n action: ELICITATION_ACTION.CANCEL,\n };\n }\n\n if (!response) {\n throw new Error('No response generated for the given elicitation action type.');\n }\n\n if (onBuiltInPanelResponse) {\n onBuiltInPanelResponse(response);\n }\n\n return response;\n }\n\n private isCustomElicitationHandlerProvided(mcp: IoAiWeb.WebConfig['mcp']): boolean {\n const condition: boolean = !!mcp?.clientsConfig?.capabilities?.elicitation?.handler;\n\n if (!condition) {\n this.getLogger().warn(\n 'No custom elicitation handler provided. Using built-in handler.',\n );\n }\n\n return condition;\n }\n\n private getLogger(): IOConnectCore.Logger.API {\n return this._logger.get(this.LOGGER_NAME);\n }\n}\n","export enum SAMPLING_ACTION {\n ACCEPT = 'accept',\n DECLINE = 'decline',\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 { IoAiWeb } from '@interopio/ai-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: IoAiWeb.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 { IoAiWeb } from '@interopio/ai-web';\nimport { Store } from '@ngrx/store';\n\nimport { listAvailableAgents, selectAgent } 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<IoAiWeb.Agents.Agent[]> =\n this._store.selectSignal<IoAiWeb.Agents.Agent[]>(selectAvailableAgents);\n public get availableAgents(): Signal<IoAiWeb.Agents.Agent[]> {\n return this._availableAgents;\n }\n\n private readonly _selectedAgent: Signal<IoAiWeb.Agents.Agent | null> =\n this._store.selectSignal<IoAiWeb.Agents.Agent | null>(selectSelectedAgent);\n public get selectedAgent(): Signal<IoAiWeb.Agents.Agent | null> {\n return this._selectedAgent;\n }\n\n public dispatchListAvailableAgents(): void {\n this._store.dispatch(listAvailableAgents());\n }\n\n public dispatchSelectAgent(agentId: string): void {\n this._store.dispatch(selectAgent({ agentId }));\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { inject, Injectable, Signal } from '@angular/core';\nimport { IoAiWeb } from '@interopio/ai-web';\n\nimport { IO_ASSIST_DYNAMIC_CONFIG } from '../../../io-assist.config';\nimport { AgentFacade } from '../../store/agent/agent.facade';\nimport { GetResponseParams } from '../../store/message/types';\nimport { ThreadFacade } from '../../store/thread/thread.facade';\nimport { LoggerService } from '../logger/logger.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AgentService {\n private readonly _agentFacade: AgentFacade = inject(AgentFacade);\n private readonly _theadFacade: ThreadFacade = inject(ThreadFacade);\n private readonly _logger: LoggerService = inject(LoggerService);\n private readonly _dynamicConfig = inject(IO_ASSIST_DYNAMIC_CONFIG);\n protected readonly LOGGER_NAME: string = 'AgentService';\n\n private readonly _selectedAgent: Signal<IoAiWeb.Agents.Agent | null> =\n this._agentFacade.selectedAgent;\n private readonly _activeThreadId: Signal<string | null> = this._theadFacade.activeThreadId;\n\n public getResponse(\n params: GetResponseParams,\n isStream: boolean = true,\n agent?: IoAiWeb.Agents.Agent,\n skipThreadManagement: boolean = false,\n autoIncludeTools: boolean = true,\n ): Promise<any> {\n if (!agent) {\n agent = this._selectedAgent() ?? undefined;\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(\n params,\n skipThreadManagement,\n );\n\n const streamParams = this.toStreamParams(responseParams, autoIncludeTools);\n\n return isStream ? agent.stream(streamParams) : agent.generate(streamParams);\n }\n\n public getSamplingResponse(\n params: GetResponseParams,\n skipThreadManagement: boolean = false,\n ): Promise<any> {\n return this.getResponse(params, false, undefined, skipThreadManagement, false);\n }\n\n public reloadResponse(\n params: GetResponseParams,\n isStream: boolean = true,\n agent?: IoAiWeb.Agents.Agent,\n skipThreadManagement: boolean = false,\n ): Promise<any> {\n return this.getResponse(params, isStream, agent, skipThreadManagement);\n }\n\n public getSelectedAgentModelId(): string {\n return this._selectedAgent()?.modelId ?? 'unknown';\n }\n\n public abortOperation(threadId: string): void {\n const selectedAgent: IoAiWeb.Agents.Agent | null = this._selectedAgent();\n\n if (!selectedAgent) {\n throw new Error('No agent available to abort operation');\n }\n\n selectedAgent.abortOperation(threadId);\n }\n\n private toStreamParams(\n params: GetResponseParams,\n autoIncludeTools = true,\n ): IoAiWeb.Agents.StreamParams {\n const messages: IoAiWeb.Agents.AgentMessage[] = Array.isArray(params.messages)\n ? params.messages.map((msg) => ({\n id: msg.id,\n role: msg.role as IoAiWeb.Agents.AgentMessage['role'],\n content: msg.content ?? '',\n }))\n : [];\n\n return {\n messages,\n memory: params.memory,\n resourceId: params.memory?.resource,\n ...(params.structuredOutput ? { structuredOutput: params.structuredOutput } : {}),\n tools: { autoIncludeEnabled: autoIncludeTools },\n };\n }\n\n private constructParams(\n params: GetResponseParams,\n skipThreadManagement: boolean,\n ): GetResponseParams {\n // Filter out assistant messages with empty/whitespace-only content\n // This prevents \"text content blocks must be non-empty\" errors from Anthropic\n const filteredMessages = Array.isArray(params.messages)\n ? params.messages.filter((msg) => {\n // Keep all non-assistant messages\n if (msg.role !== 'assistant') {\n return true;\n }\n\n // For assistant messages, only keep if content is non-empty\n const content = msg.content;\n return content && typeof content === 'string' && content.trim() !== '';\n })\n : params.messages;\n\n const filteredParams = { ...params, messages: filteredMessages };\n\n const currentUser: string = this._dynamicConfig().user.id;\n const activeThreadId: string | null = this._activeThreadId();\n\n if (skipThreadManagement) {\n // Sampling and other skip-thread-management requests must NOT inherit\n // the active thread — doing so would pollute the main conversation\n // history with unrelated messages (see db-problem.md, Problem 3).\n // Only use memory if the caller explicitly provides both thread and resource.\n const thread = filteredParams.memory?.thread ?? undefined;\n const resource = filteredParams.memory?.resource ?? undefined;\n\n return {\n ...filteredParams,\n ...(thread && resource ? { memory: { thread, resource } } : {}),\n };\n }\n\n if (!activeThreadId) {\n this._logger\n .get(this.LOGGER_NAME)\n .info('No active thread ID found, generating a new one.');\n\n const newThreadId = crypto.randomUUID();\n\n this._theadFacade.dispatchChangeActiveThread(newThreadId);\n\n return {\n ...filteredParams,\n memory: {\n thread: newThreadId,\n resource: currentUser,\n },\n };\n }\n\n return {\n ...filteredParams,\n memory: {\n thread: activeThreadId,\n resource: currentUser,\n },\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 { inject, Injectable } from '@angular/core';\nimport { IOConnectCore } from '@interopio/core';\nimport { IoAiWeb } from '@interopio/ai-web';\nimport { IOConnectModals } from '@interopio/modals-api';\n\nimport { SAMPLING_ACTION } from './enums';\nimport { APP_BUTTON_TYPES } from '../../../components/app-button/enum';\nimport { PANEL_BUTTON_ACTION_TYPE } from '../../../components/app-panel/enums';\nimport { UI_STRINGS } from '../../../constants/ui-strings';\nimport { GetResponseParams } from '../../../store/message/types';\nimport { ThreadFacade } from '../../../store/thread/thread.facade';\nimport { AgentService } from '../../agent/agent.service';\nimport { IOConnectService } from '../../io/io.service';\nimport { LoggerService } from '../../logger/logger.service';\nimport { OverlayService } from '../../overlay/overlay.service';\nimport { SAMPLING_STOP_REASONS } 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 private readonly _overlayService: OverlayService = inject(OverlayService);\n private readonly _threadFacade: ThreadFacade = inject(ThreadFacade);\n private readonly _logger: LoggerService = inject(LoggerService);\n protected readonly LOGGER_NAME: string = 'SamplingService';\n\n public async handleSamplingRequest(\n serverName: string,\n request: IoAiWeb.SamplingRequestParams,\n ): Promise<IoAiWeb.SamplingSuccessResponse | IoAiWeb.SamplingErrorResponse> {\n const requestThreadId: string | undefined = request._meta?.['threadId'];\n const activeThreadId: string | null = this._threadFacade.activeThreadId();\n const isFromBackgroundThread: boolean = Boolean(\n requestThreadId && activeThreadId && activeThreadId !== requestThreadId,\n );\n\n if (isFromBackgroundThread) {\n this._logger\n .get(this.LOGGER_NAME)\n .warn(\n `Sampling request rejected: active thread (${activeThreadId}) does not match request thread (${requestThreadId})`,\n );\n\n return {\n code: -1,\n message: `Sampling request rejected: User was not on the thread that the request was intended for.`,\n };\n }\n\n try {\n return await this.getSamplingModalResponse(serverName, request);\n } catch (error) {\n this._logger\n .get(this.LOGGER_NAME)\n .error(\n `Error occurred while getting sampling modal response: ${error instanceof Error ? error.message : String(error)}`,\n );\n\n return {\n code: -1,\n message: 'An error occurred while processing the sampling request.',\n };\n }\n }\n\n public selectSamplingHandler(\n mcp: IoAiWeb.WebConfig['mcp'],\n ): (\n serverName: string,\n params: IoAiWeb.SamplingRequestParams,\n ) => Promise<IoAiWeb.SamplingSuccessResponse | IoAiWeb.SamplingErrorResponse> {\n if (this.isCustomSamplingHandlerProvided(mcp)) {\n this._logger\n .get(this.LOGGER_NAME)\n .warn('Using a custom sampling handler provided by user configuration.');\n\n return mcp!.clientsConfig!.capabilities!.sampling!.handler!;\n }\n\n return this.handleSamplingRequest.bind(this);\n }\n\n private async getSamplingModalResponse(\n serverName: string,\n request: IoAiWeb.SamplingRequestParams,\n ): Promise<IoAiWeb.SamplingSuccessResponse | IoAiWeb.SamplingErrorResponse> {\n this.getLogger().info(\n `Showing sampling request from server: ${serverName}, requesting: ${JSON.stringify(request)}`,\n );\n\n const isModalsApiAvailable: boolean = await this._ioConnectService.isModalsAvailable();\n\n if (!isModalsApiAvailable) {\n this.getLogger().info('IO Modals not available, using built-in panel for sampling');\n\n return await this.getBuiltInPanelResponse(request);\n }\n\n return await this.getModalsApiPanelResponse(request);\n }\n\n private async getBuiltInPanelResponse(\n request: IoAiWeb.SamplingRequestParams,\n ): Promise<IoAiWeb.SamplingSuccessResponse | IoAiWeb.SamplingErrorResponse> {\n return new Promise((resolve) => {\n this._overlayService.showPanelOverlay({\n title: this.UI_STRINGS.TITLE,\n content: `<div class=\"flex flex-col g-2\">\n <span class=\"text-text-black-white text-lg\">Permission to proceed</span>\n <span class=\"text-text-default text-sm\">${this.UI_STRINGS.TEXT}</span>\n </div>`,\n isHeaderCloseButtonDisplayed: false,\n footerButtons: [\n {\n label: 'Continue',\n action: PANEL_BUTTON_ACTION_TYPE.CUSTOM,\n type: APP_BUTTON_TYPES.SUBMIT,\n onClick: () =>\n this.handleResponseType(SAMPLING_ACTION.ACCEPT, request, resolve),\n },\n {\n label: 'Cancel',\n action: PANEL_BUTTON_ACTION_TYPE.CUSTOM,\n type: APP_BUTTON_TYPES.DEFAULT,\n onClick: () =>\n this.handleResponseType(SAMPLING_ACTION.DECLINE, request, resolve),\n },\n ],\n });\n });\n }\n\n private async getModalsApiPanelResponse(\n request: IoAiWeb.SamplingRequestParams,\n ): Promise<IoAiWeb.SamplingSuccessResponse | IoAiWeb.SamplingErrorResponse> {\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: 'Continue', id: 'yes' },\n { variant: 'outline', text: 'Cancel', 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 this._logger.get(this.LOGGER_NAME).info('User denied the sampling request.');\n\n return {\n code: -1,\n message: 'User denied the sampling request.',\n };\n }\n\n private async handleResponseType(\n type: SAMPLING_ACTION,\n request: IoAiWeb.SamplingRequestParams,\n onBuiltInPanelResponse?: (\n value: IoAiWeb.SamplingSuccessResponse | IoAiWeb.SamplingErrorResponse,\n ) => void,\n ): Promise<IoAiWeb.SamplingSuccessResponse | IoAiWeb.SamplingErrorResponse> {\n if (onBuiltInPanelResponse) {\n this._overlayService.closeCurrentOverlay();\n }\n\n let response: IoAiWeb.SamplingSuccessResponse | IoAiWeb.SamplingErrorResponse = {\n code: -1,\n message: 'Unknown sampling action type.',\n };\n\n if (type === SAMPLING_ACTION.ACCEPT) {\n this._logger.get(this.LOGGER_NAME).info('User approved the sampling request.');\n\n response = await this.getSamplingResponse(request);\n }\n\n if (type === SAMPLING_ACTION.DECLINE) {\n this._logger.get(this.LOGGER_NAME).info('User denied the sampling request.');\n\n response = {\n code: -1,\n message: 'User denied the sampling request.',\n };\n }\n\n if (onBuiltInPanelResponse) {\n onBuiltInPanelResponse(response);\n }\n\n return response;\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: IoAiWeb.SamplingRequestParams,\n ): Promise<IoAiWeb.SamplingSuccessResponse | IoAiWeb.SamplingErrorResponse> {\n const formattedMessages = request.messages.map(\n (element: { role: IoAiWeb.SamplingRole; content: IoAiWeb.SamplingContent }) => {\n return {\n id: crypto.randomUUID(),\n role: element.role,\n content: (element.content as IoAiWeb.SamplingTextContent).text,\n };\n },\n );\n\n // TODO: Add system message as first message in the array\n if (request.systemPrompt) {\n formattedMessages.unshift({\n id: crypto.randomUUID(),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n role: 'system' as any,\n content: request.systemPrompt,\n });\n }\n\n this.getLogger().debug(`Formatted messages: ${JSON.stringify(formattedMessages)}`);\n\n // Fix structured output schema by replacing additionalProperties: {} with additionalProperties: false\n // Some sampling requests were failing prior to this fix.\n // LLM providers require additionalProperties: false instead of empty object\n // let fixedSchema = request._meta?.['structuredOutput'];\n\n // if (fixedSchema) {\n // const schemaStr = JSON.stringify(fixedSchema);\n // // Replace all instances of \"additionalProperties\":{} with \"additionalProperties\":false\n\n // const fixedSchemaStr = schemaStr.replace(\n // /\"additionalProperties\":\\s*\\{\\s*\\}/g,\n // '\"additionalProperties\":false',\n // );\n\n // fixedSchema = JSON.parse(fixedSchemaStr);\n // }\n\n const params: GetResponseParams = {\n messages: formattedMessages,\n instructions: request.systemPrompt,\n system: request.systemPrompt,\n modelSettings: {\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, // tried removing max tokens and the result was\n temperature: request.temperature || undefined,\n },\n requestContext: {\n modelPreferences: request.modelPreferences || undefined,\n },\n structuredOutput: {\n schema: request._meta?.['structuredOutput'], // fixedSchema,\n },\n };\n\n this.getLogger().debug(`Sampling request params: ${JSON.stringify(params)}`);\n\n const response = await this._agentService.getSamplingResponse(params, true);\n\n if (!response) {\n throw new Error('Failed to generate response for sampling success response.');\n }\n\n this.getLogger().info(\n `Generated response for sampling success response: ${JSON.stringify(response)}`,\n );\n\n const finalMessage: IoAiWeb.SamplingSuccessResponse = {\n role: 'assistant',\n content: {\n type: 'text',\n text: response.text,\n },\n model: this._agentService.getSelectedAgentModelId(),\n stopReason: SAMPLING_STOP_REASONS.END_TURN,\n };\n\n this.getLogger().debug(\n `Sampling request final response message: ${JSON.stringify(finalMessage)}`,\n );\n\n return finalMessage;\n }\n\n private isCustomSamplingHandlerProvided(mcp: IoAiWeb.WebConfig['mcp']): boolean {\n const condition: boolean = !!mcp?.clientsConfig?.capabilities?.sampling?.handler;\n\n if (!condition) {\n this.getLogger().warn('No custom sampling handler provided. Using built-in handler.');\n }\n\n return condition;\n }\n\n private getLogger(): IOConnectCore.Logger.API {\n return this._logger.get(this.LOGGER_NAME);\n }\n}\n","import { inject, Injectable, Signal, signal, WritableSignal } from '@angular/core';\nimport { IOConnectCore } from '@interopio/core';\nimport { IoAiWeb } from '@interopio/ai-web';\nimport { Store } from '@ngrx/store';\n\nimport { APP_BUTTON_TYPES } from '../../components/app-button/enum';\nimport { PANEL_BUTTON_ACTION_TYPE } from '../../components/app-panel/enums';\nimport { UI_STRINGS } from '../../constants/ui-strings';\nimport { getResponse } from '../../store/message/message.actions';\nimport { UI_MESSAGE_ROLES } from '../../store/message/types';\nimport { selectActiveThreadId } from '../../store/thread/thread.selector';\nimport { IOConnectService } from '../io/io.service';\nimport { LoggerService } from '../logger/logger.service';\nimport { OverlayService } from '../overlay/overlay.service';\n\n/**\n * Centralized service for all MCP Apps interactions in io-assist.\n *\n * Manages:\n * - availability check (mcpApps is only present when configured)\n * - instance tracking (signal-based for Angular reactivity)\n * - per-instance chat-message subscriptions\n * - replace-instance modal delegation\n * - event wiring (onAppCreated / onRecreateRequested / onAppRecreated)\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class McpAppsService {\n private readonly _ioConnectService: IOConnectService = inject(IOConnectService);\n private readonly _overlayService: OverlayService = inject(OverlayService);\n private readonly _store: Store = inject(Store);\n private readonly _loggerService: LoggerService = inject(LoggerService);\n\n private readonly _activeThreadId: Signal<string | null> =\n this._store.selectSignal(selectActiveThreadId);\n\n private _api: IoAiWeb.McpApps.API | undefined;\n\n private readonly _instances: WritableSignal<IoAiWeb.McpApps.AppInstance[]> = signal([]);\n private readonly _unsubs: (() => void)[] = [];\n private readonly _chatMessageUnsubs = new Map<string, () => void>();\n\n /**\n * When true, a replace-instance modal is already visible.\n * Subsequent recreate requests during the same stream auto-resolve\n * as \"replace\" to avoid stacking multiple dialogs.\n */\n private _isRecreateModalOpen = false;\n\n /** Whether MCP Apps are available in the current session. */\n public get isAvailable(): boolean {\n return this._api !== undefined;\n }\n\n /** Reactive list of tracked MCP App instances. */\n public get instances(): Signal<IoAiWeb.McpApps.AppInstance[]> {\n return this._instances;\n }\n\n /**\n * Called once during IOIntelWebService.initialize() — wires event\n * subscriptions if the mcpApps namespace exists on the API.\n */\n public attach(intelWebApi: IoAiWeb.API): void {\n if (!intelWebApi.mcpApps) return;\n\n this._api = intelWebApi.mcpApps;\n\n const unsubCreated = this._api.onAppCreated((app) => {\n const activeThread = this._activeThreadId();\n if (activeThread && app.threadId !== activeThread) return;\n\n this._instances.update((prev) => [...prev, app]);\n this._subscribeToChatMessages(app);\n });\n\n const unsubRecreate = this._api.onRecreateRequested((event) => {\n // When a modal is already open (e.g. LLM called the same tool 5 times),\n // auto-select \"replace\" for subsequent events to avoid stacking dialogs.\n if (this._isRecreateModalOpen) {\n event\n .select('recreate')\n .catch(() =>\n this._logger().warn(\n \"Failed to auto-select 'recreate' on mcpApps recreate request\",\n ),\n );\n return;\n }\n\n this._isRecreateModalOpen = true;\n this._showReplaceInstanceModal(event.toolName)\n .then((replace) => event.select(replace ? 'recreate' : 'newInstance'))\n .catch(() => {\n this._logger().warn(\n 'Failed to select option on mcpApps recreate request — defaulting to recreate',\n );\n event.select('recreate').catch(() => undefined);\n })\n .finally(() => {\n this._isRecreateModalOpen = false;\n });\n });\n\n const unsubRecreated = this._api.onAppRecreated((event) => {\n this._instances.update((prev) => {\n const filtered = prev.filter((a) => a.id !== event.oldId);\n // The new app is already added by onAppCreated — no need to push here.\n return filtered;\n });\n // Clean up the old instance's chat-message subscription.\n const oldUnsub = this._chatMessageUnsubs.get(event.oldId);\n if (oldUnsub) {\n oldUnsub();\n this._chatMessageUnsubs.delete(event.oldId);\n }\n });\n\n this._unsubs.push(unsubCreated, unsubRecreate, unsubRecreated);\n }\n\n /** Clears tracked instances and tears down per-instance chat-message subscriptions. */\n public resetInstances(): void {\n this._chatMessageUnsubs.forEach((unsub) => unsub());\n this._chatMessageUnsubs.clear();\n this._instances.set([]);\n }\n\n /** Closes all active proxy windows and resets to accept new instances. No-ops when mcpApps is not configured. */\n public async closeAll(): Promise<void> {\n if (!this._api) return;\n\n await this._api.closeAll();\n }\n\n /**\n * Creates MCP App instances for a thread (used on thread switch to restore apps).\n * No-ops when mcpApps is not configured.\n */\n public async createApps(params: IoAiWeb.McpApps.CreateParams): Promise<void> {\n if (!this._api) return;\n\n await this._api.create(params);\n }\n\n /**\n * Atomically closes all existing MCP App instances and creates new ones.\n * Prevents race conditions when rapidly switching threads.\n * No-ops when mcpApps is not configured.\n */\n public async recreate(params: IoAiWeb.McpApps.CreateParams): Promise<void> {\n if (!this._api) return;\n\n await this._api.recreate(params);\n }\n\n /** Forwards response-pending status to all active MCP App instances. */\n public notifyPendingResponse(isPending: boolean): void {\n this._api?.notifyPendingResponse(isPending);\n }\n\n // ─── Private helpers ──────────────────────────────────────────────────────\n\n private _subscribeToChatMessages(app: IoAiWeb.McpApps.AppInstance): void {\n const unsub = app.onMessage((text) => {\n const activeThreadId = this._activeThreadId();\n if (!activeThreadId) return;\n\n this._store.dispatch(\n getResponse({\n params: {\n messages: [\n {\n id: crypto.randomUUID(),\n role: UI_MESSAGE_ROLES.USER,\n content: text,\n },\n ],\n },\n threadId: activeThreadId,\n }),\n );\n });\n\n this._chatMessageUnsubs.set(app.id, unsub);\n }\n\n private async _showReplaceInstanceModal(toolName: string): Promise<boolean> {\n const strings = UI_STRINGS.MCP_APP_REPLACE_MODAL;\n\n const ioModalResult = await this._tryIoConnectModal(strings, toolName);\n if (ioModalResult !== null) return ioModalResult;\n\n return this._showFallbackOverlay(strings, toolName);\n }\n\n private async _tryIoConnectModal(\n strings: typeof UI_STRINGS.MCP_APP_REPLACE_MODAL,\n toolName: string,\n ): Promise<boolean | null> {\n const isAvailable = await this._ioConnectService.isModalsAvailable().catch(() => false);\n if (!isAvailable) return null;\n\n try {\n const response = await this._ioConnectService.requestModalDialog({\n templateName: 'noInputsConfirmationDialog',\n variables: {\n title: strings.TITLE,\n heading: strings.HEADING,\n text: strings.TEXT(toolName),\n actionButtons: [\n { variant: 'primary', text: strings.REPLACE_BUTTON, id: 'replace' },\n { variant: 'outline', text: strings.NEW_INSTANCE_BUTTON, id: 'new' },\n ],\n },\n });\n\n return response?.responseButtonClicked?.id === 'replace';\n } catch {\n return null;\n }\n }\n\n private _escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"');\n }\n\n private _showFallbackOverlay(\n strings: typeof UI_STRINGS.MCP_APP_REPLACE_MODAL,\n toolName: string,\n ): Promise<boolean> {\n const escapedToolName = this._escapeHtml(toolName);\n\n return new Promise<boolean>((resolve) => {\n this._overlayService.showPanelOverlay({\n title: strings.TITLE,\n content: `<div class=\"flex flex-col g-2\">\n <span class=\"text-text-black-white text-lg\">${strings.HEADING}</span>\n <span class=\"text-text-default text-sm\">${strings.TEXT(escapedToolName)}</span>\n </div>`,\n isHeaderCloseButtonDisplayed: false,\n footerButtons: [\n {\n label: strings.REPLACE_BUTTON,\n action: PANEL_BUTTON_ACTION_TYPE.CUSTOM,\n type: APP_BUTTON_TYPES.SUBMIT,\n onClick: () => {\n this._overlayService.closeCurrentOverlay();\n resolve(true);\n },\n },\n {\n label: strings.NEW_INSTANCE_BUTTON,\n action: PANEL_BUTTON_ACTION_TYPE.CUSTOM,\n type: APP_BUTTON_TYPES.DEFAULT,\n onClick: () => {\n this._overlayService.closeCurrentOverlay();\n resolve(false);\n },\n },\n ],\n });\n });\n }\n\n private _logger(): IOConnectCore.Logger.API {\n return this._loggerService.get('McpAppsService');\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { computed, inject, Injectable, Signal, signal, WritableSignal } from '@angular/core';\nimport { IoAiWeb } from '@interopio/ai-web';\nimport { IoIntelWorkingContext } from '@interopio/working-context';\n\nimport { ElicitationService } from './elicitation/elicitation.service';\nimport { SamplingService } from './sampling/sampling.service';\nimport {\n IO_ASSIST_CONFIG,\n IO_ASSIST_DYNAMIC_CONFIG,\n IoAssistStaticConfig,\n IoAssistDynamicConfig,\n} from '../../../io-assist.config';\nimport { LOADING_STATE } from '../../enums/loading-state.enum';\nimport { LoadingType } from '../../types/loading.type';\nimport { IOConnectService } from '../io/io.service';\nimport { LoggerService } from '../logger/logger.service';\nimport { McpAppsService } from '../mcp-apps/mcp-apps.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class IOAiWebService {\n private readonly _ioConnectService: IOConnectService = inject(IOConnectService);\n private readonly _samplingService: SamplingService = inject(SamplingService);\n private readonly _elicitationService: ElicitationService = inject(ElicitationService);\n private readonly _ioAssistConfig: IoAssistStaticConfig = inject(IO_ASSIST_CONFIG);\n private readonly _dynamicConfig: Signal<IoAssistDynamicConfig> =\n inject(IO_ASSIST_DYNAMIC_CONFIG);\n private readonly _logger: LoggerService = inject(LoggerService);\n private readonly LOGGER_NAME: string = 'IOAiWebService';\n private readonly _mcpAppsService: McpAppsService = inject(McpAppsService);\n\n private _ioIntelWeb: WritableSignal<IoAiWeb.API | null> = signal(null);\n private get _ioIntelWebAPI(): IoAiWeb.API {\n const api: IoAiWeb.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: IoAiWeb.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 readonly isError: Signal<string> = computed(() => {\n const loadingState = this._loadingState();\n\n return (loadingState.type === LOADING_STATE.ERROR && loadingState.message) || '';\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 when the app is mounted.\n */\n public async initialize(): Promise<void> {\n const ioIntelWebAPI: IoAiWeb.API | null = await this._safeInitialize();\n\n this._logger\n .get(this.LOGGER_NAME)\n .debug(`IO Intel Web API initialized: ${JSON.stringify(ioIntelWebAPI)}`);\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 this._mcpAppsService.attach(ioIntelWebAPI);\n\n return;\n }\n\n const error: Error = new Error('Failed to initialize IoAiWeb 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<IoAiWeb.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 if (this.isError()) {\n throw new Error(this.isError());\n }\n\n this._loadingState.set({ type: LOADING_STATE.LOADING });\n\n const config: IoAiWeb.WebConfig = this.constructConfig();\n\n this._logger\n .get(this.LOGGER_NAME)\n .debug(`Initializing IoAiWeb with config: ${JSON.stringify(config)}`);\n\n try {\n return await this._ioConnectService.initializeIOIntelWeb(config);\n } catch (error) {\n const err = new Error(\n 'Error initializing IO Intel Web API: ' +\n (error instanceof Error ? error.message : String(error)),\n );\n\n this._loadingState.set({\n type: LOADING_STATE.ERROR,\n message: err.message,\n });\n\n throw err;\n }\n }\n\n public listAgents(): Promise<IoAiWeb.Agents.Agent[]> {\n return this._ioIntelWebAPI.agents.list();\n }\n\n public listThreads(\n config: IoAiWeb.Threads.ListThreadsParams,\n ): Promise<IoAiWeb.Threads.Thread[]> {\n return this._ioIntelWebAPI.threads.list(config);\n }\n\n public deleteThreadState(params: IoAiWeb.Threads.DeleteThreadStateParams): Promise<void> {\n return this._ioIntelWebAPI.threads.deleteThreadState(params);\n }\n\n public listTools(): Promise<IoAiWeb.Tools.Tool[]> {\n return this._ioIntelWebAPI.tools.list();\n }\n\n public toggleTool(toolName: string, enable: boolean): Promise<IoAiWeb.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 private constructConfig(): IoAiWeb.WebConfig {\n const aiWebConfig = this._ioAssistConfig.aiWebConfig;\n const contextConfig = this._ioAssistConfig.workingContext;\n\n const config: IoAiWeb.WebConfig = {\n agentServer: this.buildAgentServerConfig(aiWebConfig.agentServer),\n };\n\n config.mcp = this.buildMcpConfig(aiWebConfig.mcp);\n\n if (contextConfig) {\n this._hasContextConfig.set(true);\n\n config.context = contextConfig;\n }\n\n return config;\n }\n\n private buildAgentServerConfig(\n agentServer: IoAiWeb.WebConfig['agentServer'],\n ): IoAiWeb.WebConfig['agentServer'] {\n const dynamicHeaders = this._dynamicConfig().agentServer?.headers;\n const result = { ...agentServer };\n\n if (dynamicHeaders !== undefined) {\n result.headers = dynamicHeaders;\n }\n\n return result;\n }\n\n private buildMcpConfig(mcp: IoAiWeb.WebConfig['mcp']): IoAiWeb.WebConfig['mcp'] {\n return {\n ...mcp,\n clientsConfig: {\n ...mcp?.clientsConfig,\n capabilities: {\n ...mcp?.clientsConfig?.capabilities,\n sampling: {\n handler: this._samplingService.selectSamplingHandler(mcp),\n },\n elicitation: {\n handler: this._elicitationService.selectElicitationHandler(mcp),\n },\n },\n },\n };\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { IoIntelWorkingContext } from '@interopio/working-context';\n\nimport { IOAiWebService } from '../io-ai-web/io-ai-web.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WorkingContextService {\n private readonly _ioIntelWebService: IOAiWebService = inject(IOAiWebService);\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 styleUrls: ['./working-context-panel.component.css'],\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 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 >\n </app-icon>\n\n <p class=\"text-sm text-proto-text-default\">\n {{ UI_STRINGS.CALLOUT_TEXT }}\n </p>\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 { APP_SPINNER_COMPONENT_SIZE } from '../../shared/components/app-spinner/enum';\nimport { UI_STRINGS } from '../../shared/constants/ui-strings';\nimport { AnimationEffectDirective } from '../../shared/directives/animation-effect/animation-effect.directive';\nimport { AnimationType } from '../../shared/directives/animation-effect/animation-type.enum';\nimport { OverlayService } from '../../shared/services/overlay/overlay.service';\nimport { MessageFacade } from '../../shared/store/message/message.facade';\nimport { ResponseStreamFacade } from '../../shared/store/response-stream/response-stream.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 = [AppIconComponent];\nconst DIRECTIVES = [AnimationEffectDirective];\n\n@Component({\n selector: 'header',\n templateUrl: './header.component.html',\n imports: [...MODULES, ...COMPONENTS, ...DIRECTIVES],\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 protected readonly AnimationType = AnimationType;\n\n // Provided in root\n private readonly _overlayService: OverlayService = inject(OverlayService);\n private readonly _threadFacade: ThreadFacade = inject(ThreadFacade);\n private readonly _responseStreamFacade: ResponseStreamFacade = inject(ResponseStreamFacade);\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 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 protected readonly hasAnyCompletionNotification: Signal<boolean> =\n this._responseStreamFacade.hasAnyCompletionNotification;\n\n public ngOnInit(): void {\n this._workingContextFacade.dispatchFetchIsWorkingContextEnabled();\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@let hasNotification = hasAnyCompletionNotification();\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 <div class=\"relative\">\n <app-icon\n [variant]=\"APP_ICON_VARIANTS.THREAD_HISTORY\"\n (click)=\"displayThreadHistory()\"\n ></app-icon>\n\n @if (hasNotification) {\n <span\n class=\"absolute -top-1 -right-1 w-2.5 h-2.5 rounded-full bg-orange-500\"\n title=\"New responses available\"\n ></span>\n }\n </div>\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-1 border-[1px] rounded-[4px] text-text-default cursor-pointer': true,\n 'hover:text-text-states-hover hover:text-states-hover': true,\n 'font-weight-400 text-xs leading-[100%]': true,\n }\"\n [animationEffect]=\"AnimationType.HOVER_MOUSE_FOLLOW\"\n (click)=\"handleWorkingContextPanelOpen()\"\n >\n {{ UI_STRINGS.WORKING_CONTEXT_PANEL_COMPONENT.VIEW_WORKING_CONTEXT_BUTTON }}\n </button>\n }\n</div>","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 protected readonly APP_ICON_VARIANTS = APP_ICON_VARIANTS;\n protected readonly APP_ICON_SIZES = APP_ICON_SIZES;\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-1 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 items-center justify-end w-full': true,\n }\"\n >\n <div\n [ngClass]=\"{\n 'flex items-center justify-center shrink-0 pe-1': true,\n }\"\n >\n <app-icon\n [variant]=\"APP_ICON_VARIANTS.ERROR_CLOSE\"\n [size]=\"APP_ICON_SIZES.XS\"\n [isWrapped]=\"false\"\n [iconFill]=\"'--app-red-700'\"\n [hoverIconFill]=\"'--app-red-700'\"\n ></app-icon>\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","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 { IconResource } from '../../../io-assist.types';\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 { UIPrompt } from '../../../shared/services/prompt/types';\nimport { PromptFacade } from '../../../shared/store/prompt/prompt.facade';\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 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 protected readonly isHostHoveredSignal: WritableSignal<boolean> = signal<boolean>(false);\n\n protected readonly customIcon: Signal<IconResource | undefined> = computed(\n () => this.prompt().icon,\n );\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 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 p-2 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 [customIcon]=\"customIcon()\"\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 <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>","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 { 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 { UIPrompt } from '../../../shared/services/prompt/types';\nimport { PromptFacade } from '../../../shared/store/prompt/prompt.facade';\nimport { PromptListItemComponent } from '../prompt-list-item/prompt-list-item.component';\n\nconst MODULES = [CommonModule];\nconst COMPONENTS = [PromptListItemComponent, AppInputComponent];\n\ntype PromptGroup = {\n category: string;\n prompts: UIPrompt[];\n};\n\nconst UNCATEGORIZED_CATEGORY_NAME = 'Default Prompts';\n\n@Component({\n selector: 'prompt-list',\n templateUrl: './prompt-list.component.html',\n imports: [...COMPONENTS, ...MODULES],\n providers: [PromptFacade],\n})\nexport class PromptListComponent {\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 protected readonly UNCATEGORIZED_CATEGORY_NAME = UNCATEGORIZED_CATEGORY_NAME;\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 hasAnyPrompts: Signal<boolean> = computed(() => {\n return this._prompts().length > 0;\n });\n\n protected readonly promptsToDisplay: Signal<UIPrompt[]> = computed(() => {\n const showFavoriteOnly: boolean = this.showFavoriteOnly();\n const favoriteNames: string[] = this._favoritePromptNames();\n const allPrompts: UIPrompt[] = this._prompts();\n const search: string = this.searchTerm().toLowerCase();\n\n if (showFavoriteOnly) {\n return allPrompts.filter((p) => favoriteNames.includes(p.name));\n }\n\n if (search) {\n return allPrompts.filter((p) => p.name.toLowerCase().includes(search));\n }\n\n return allPrompts;\n });\n\n protected readonly promptGroups: Signal<PromptGroup[]> = computed(() => {\n if (this.showFavoriteOnly()) {\n // When showing favorites, don't group by category\n return [];\n }\n\n const prompts: UIPrompt[] = this.promptsToDisplay();\n const categoryMap = new Map<string, UIPrompt[]>();\n\n for (const prompt of prompts) {\n const category: string = prompt.category || UNCATEGORIZED_CATEGORY_NAME;\n const existingPrompts: UIPrompt[] = categoryMap.get(category) || [];\n\n categoryMap.set(category, [...existingPrompts, prompt]);\n }\n\n const groups: PromptGroup[] = Array.from(categoryMap.entries()).map(\n ([category, prompts]) => ({\n category,\n prompts: this._sortPromptsAlphabetically(prompts),\n }),\n );\n\n // Sort alphabetically, but 'Default Prompts' last\n return groups.sort((a, b) => {\n if (a.category === UNCATEGORIZED_CATEGORY_NAME) return 1;\n if (b.category === UNCATEGORIZED_CATEGORY_NAME) return -1;\n\n return a.category.localeCompare(b.category);\n });\n });\n\n private _sortPromptsAlphabetically(prompts: UIPrompt[]): UIPrompt[] {\n return [...prompts].sort((a, b) => a.name.localeCompare(b.name));\n }\n\n protected onDocsLinkClick(): void {\n // TODO: Provide the exact link to io-assist\n window.open('https://docs-ai.interop.io/', '_blank', 'noopener,noreferrer');\n }\n}\n","@let noAvailablePrompts = promptsToDisplay().length === 0;\n@let hasPrompts = promptsToDisplay().length > 0;\n@let isFavoriteOnlyList = showFavoriteOnly();\n@let shouldRenderInfoSection = noAvailablePrompts;\n@let hasCategories = promptGroups().length > 0;\n@let hasAnyPromptsInSystem = hasAnyPrompts();\n\n@if (!isFavoriteOnlyList && hasAnyPromptsInSystem) {\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-2 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 @if (shouldRenderInfoSection) {\n <div\n class=\"prompt-list__info\"\n [ngClass]=\"{\n 'flex justify-center items-center h-16': true,\n }\"\n >\n @if (noAvailablePrompts && !isFavoriteOnlyList && !hasAnyPromptsInSystem) {\n <div\n [ngClass]=\"{\n 'flex flex-col items-center gap-2 text-center px-4': true,\n }\"\n >\n <span\n [ngClass]=\"{\n 'text-proto-text-default': true,\n }\"\n >{{ UI_STRINGS.NO_PROMPTS_CONFIGURED }}</span\n >\n <!-- TODO: Add link to documentation -->\n <button\n type=\"button\"\n [ngClass]=\"{\n 'text-xs text-blue-500 hover:text-blue-600 underline cursor-pointer': true,\n }\"\n (click)=\"onDocsLinkClick()\"\n >\n {{ UI_STRINGS.NO_PROMPTS_SEE_MORE }}\n </button>\n </div>\n }\n\n @if (noAvailablePrompts && !isFavoriteOnlyList && hasAnyPromptsInSystem) {\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 ': true,\n 'md:flex-row md:flex-wrap md:justify-center gap-3': isFavoriteOnlyList,\n 'overflow-y-auto overflow-x-hidden custom-scrollbar custom-scrollbar-no-gutter':\n !isFavoriteOnlyList,\n }\"\n >\n @if (hasPrompts) {\n <!-- Render with categories when not in favorite mode and has category groups -->\n @if (!isFavoriteOnlyList && hasCategories) {\n @for (group of promptGroups(); track group.category) {\n <!-- Category header -->\n <div\n class=\"prompt-category-header\"\n [ngClass]=\"{\n 'flex items-center px-2 py-1 mb-1': true,\n }\"\n >\n <span\n [ngClass]=\"{\n 'text-[10px] font-normal text-text-default leading-[13px] tracking-[0.1px]': true,\n }\"\n >{{ group.category }}</span\n >\n </div>\n\n <!-- Prompts in this category -->\n @for (prompt of group.prompts; track prompt.name) {\n <prompt-list-item\n [prompt]=\"prompt\"\n [isDisplayedInFavoriteList]=\"false\"\n ></prompt-list-item>\n }\n }\n }\n\n <!-- Render without categories for favorite mode -->\n @if (isFavoriteOnlyList) {\n @for (prompt of promptsToDisplay(); track prompt.name) {\n <prompt-list-item\n [prompt]=\"prompt\"\n [isDisplayedInFavoriteList]=\"true\"\n ></prompt-list-item>\n }\n }\n }\n </div>\n</div>\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 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 inject,\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';\nimport { LoggerService } from '../../services/logger/logger.service';\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 private readonly _logger = inject(LoggerService).get('AppTooltipComponent');\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 this._logger.warn(\n `Tooltip positioning skipped: triggerEl=${!!triggerEl}, tooltipWidth=${tooltipWidth}, tooltipHeight=${tooltipHeight}`,\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 this._logger.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 <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 public onDocsLinkClick(): void {\n // TODO: Provide the exact link to io-assist\n window.open('https://docs-ai.interop.io/', '_blank', 'noopener,noreferrer');\n }\n}\n","@let isLoadingTools = isLoading();\n@let hasTools = tools().length > 0;\n@let hasFilteredTools = !isLoadingTools && filteredTools().length > 0;\n\n@if (!isLoadingTools && hasTools) {\n <!-- Needs to be displayed above the tool list toggle icon -->\n <app-input\n [ngClass]=\"{\n 'sticky top-0 z-1': 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 pt-2': 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 (hasFilteredTools) {\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 (hasTools && !hasFilteredTools) {\n <span\n [ngClass]=\"{\n 'text-proto-text-default': true,\n }\"\n >{{ UI_STRINGS.NO_FILTERED_TOOLS }}</span\n >\n }\n\n @if (!hasTools && !isLoadingTools) {\n <div\n [ngClass]=\"{\n 'flex flex-col items-center gap-2 text-center px-4': true,\n }\"\n >\n <span\n [ngClass]=\"{\n 'text-proto-text-default': true,\n }\"\n >{{ UI_STRINGS.NO_TOOLS }}</span\n >\n <!-- TODO: Add link to documentation -->\n <button\n type=\"button\"\n [ngClass]=\"{\n 'text-xs text-blue-500 hover:text-blue-600 underline cursor-pointer': true,\n }\"\n (click)=\"onDocsLinkClick()\"\n >\n {{ UI_STRINGS.NO_TOOLS_SEE_MORE }}\n </button>\n </div>\n }\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, inject } 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 { UI_STRINGS } from '../../../shared/constants/ui-strings';\nimport { OverlayService } from '../../../shared/services/overlay/overlay.service';\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})\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\n protected handlePromptPanelOverlayOpen(): void {\n this._overlayService.showPanelOverlay({\n title: UI_STRINGS.PROMPT_LIST_COMPONENT.AVAILABLE_PROMPTS,\n content: PromptListComponent,\n isHeaderCloseButtonDisplayed: true,\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 });\n }\n}\n","<div\n class=\"input-area-action-bar\"\n [ngClass]=\"{\n 'flex flex-1 gap-0.5': true,\n }\"\n>\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</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 {\n messages: [userMessage],\n },\n activeThreadId,\n );\n\n this.onSend.emit();\n }\n\n protected handleStopMessage(): void {\n const activeThreadId: string | null = this._activeThreadId();\n\n if (!activeThreadId) {\n return;\n }\n\n this._messageFacade.dispatchAbortResponseGeneration(activeThreadId);\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 {\n Directive,\n ElementRef,\n input,\n InputSignal,\n Renderer2,\n inject,\n OnInit,\n} from '@angular/core';\n\nimport { ComponentEffectManagerService as EffectService } from '../../services/component-effect-manager/component-effect-manager.service';\nimport { applyStyles, createElement } from '../utils';\n\n/**\n * AccentGradientBorderDirective\n *\n * A directive that applies a 1px gradient border using accent colors to any HTML element.\n * The gradient uses --color-app-accent-color-1 and --color-app-accent-color-2.\n *\n * Usage:\n * ```html\n * <!-- Always enabled (default) -->\n * <div accentGradientBorder>Content</div>\n *\n * <!-- Conditionally enabled -->\n * <div [accentGradientBorder]=\"isExpanded\">Content</div>\n * ```\n *\n * DOM Structure Created:\n * - .accent-gradient-border__layer (gradient border layer, positioned behind content)\n * - .accent-gradient-border__background (solid background to mask gradient center)\n * - Existing content (z-indexed above all layers)\n */\n@Directive({\n selector: '[accentGradientBorder]',\n standalone: true,\n providers: [\n {\n provide: EffectService,\n useFactory: () => new EffectService('AccentGradientBorderDirective'),\n },\n ],\n})\nexport class AccentGradientBorderDirective implements OnInit {\n public accentGradientBorder: InputSignal<boolean> = input<boolean>(true);\n\n private _renderer: Renderer2 = inject(Renderer2);\n private _elementRef: ElementRef = inject(ElementRef);\n // Provided in current directive\n private _effectService: EffectService = inject(EffectService);\n\n private _borderLayer: HTMLElement | null = null;\n private _background: HTMLElement | null = null;\n\n public ngOnInit(): void {\n this.registerEffects();\n }\n\n private registerEffects(): void {\n this._effectService.registerEffect(\n 'AccentGradientBorderDirective.toggleBorder.on.accentGradientBorderChange',\n () => {\n const isEnabled = this.accentGradientBorder();\n\n if (!isEnabled) {\n this.cleanup();\n return;\n }\n\n this.setup();\n },\n );\n }\n\n private setup(): void {\n if (this._borderLayer) {\n return;\n }\n\n const host = this._elementRef.nativeElement;\n\n this._renderer.setStyle(host, 'position', 'relative');\n\n this._borderLayer = this.createBorderLayer();\n this._background = this.createBackground();\n\n this._renderer.insertBefore(host, this._borderLayer, host.firstChild);\n this._renderer.insertBefore(host, this._background, host.firstChild);\n\n this.updateContentZIndex(host);\n }\n\n private cleanup(): void {\n if (!this._borderLayer) {\n return;\n }\n\n const host = this._elementRef.nativeElement;\n\n this._renderer.removeChild(host, this._borderLayer);\n this._borderLayer = null;\n\n if (this._background) {\n this._renderer.removeChild(host, this._background);\n this._background = null;\n }\n }\n\n private createBorderLayer(): HTMLElement {\n const maskValue = 'linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)';\n\n return createElement(this._renderer, 'div', 'accent-gradient-border__layer', {\n position: 'absolute',\n top: '0',\n right: '0',\n bottom: '0',\n left: '0',\n 'border-radius': 'inherit',\n 'pointer-events': 'none',\n 'z-index': '-1',\n background:\n 'linear-gradient(90deg, var(--color-app-accent-color-1), var(--color-app-accent-color-2))',\n padding: '1px',\n mask: maskValue,\n '-webkit-mask': maskValue,\n 'mask-composite': 'exclude',\n '-webkit-mask-composite': 'xor',\n });\n }\n\n private createBackground(): HTMLElement {\n return createElement(this._renderer, 'div', 'accent-gradient-border__background', {\n position: 'absolute',\n top: '0',\n right: '0',\n bottom: '0',\n left: '0',\n 'border-radius': 'inherit',\n background: 'var(--color-bg-default)',\n 'z-index': '-1',\n 'pointer-events': 'none',\n });\n }\n\n private updateContentZIndex(host: HTMLElement): void {\n this._renderer.setStyle(host, 'isolation', 'isolate');\n\n Array.from(host.children).forEach((child: Element) => {\n if (child === this._borderLayer || child === this._background) {\n return;\n }\n applyStyles(this._renderer, child as HTMLElement, {\n position: 'relative',\n 'z-index': '1',\n });\n });\n }\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 { AccentGradientBorderDirective } from '../../shared/directives/accent-gradient-border/accent-gradient-border.directive';\nimport { AnimationEffectDirective } from '../../shared/directives/animation-effect/animation-effect.directive';\nimport { AnimationType } from '../../shared/directives/animation-effect/animation-type.enum';\nimport { ComponentEffectManagerService as EffectService } from '../../shared/services/component-effect-manager/component-effect-manager.service';\nimport { Prompt } from '../../shared/services/prompt/types';\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';\n\nconst COMPONENTS = [InputAreaActionBarComponent, InputAreaSendButtonComponent];\nconst DIRECTIVES = [AccentGradientBorderDirective, AnimationEffectDirective];\nconst MODULES = [CommonModule];\n\n@Component({\n selector: 'input-area',\n templateUrl: './input-area.component.html',\n imports: [...COMPONENTS, ...MODULES, ...DIRECTIVES],\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 protected isAnimationComplete: WritableSignal<boolean> = signal<boolean>(false);\n\n protected readonly UI_STRINGS = UI_STRINGS.INPUT_COMPONENT;\n protected readonly AnimationType = AnimationType;\n protected readonly sendButton: Signal<InputAreaSendButtonComponent | undefined> = viewChild(\n InputAreaSendButtonComponent,\n );\n protected readonly inputAreaRef: Signal<ElementRef | undefined> =\n viewChild<ElementRef>('inputTextArea');\n protected readonly animationDirective: Signal<AnimationEffectDirective | undefined> =\n viewChild(AnimationEffectDirective);\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 protected handleAnimationStart(): void {\n this.isAnimationComplete.set(false);\n }\n\n protected handleAnimationEnd(): void {\n this.isAnimationComplete.set(true);\n }\n\n protected setInputValue(value: string): void {\n this.inputValue.set(value);\n\n const shouldResetDefaultSize: boolean = value.trim() === '';\n\n // Use queueMicrotask to ensure textarea DOM updates are applied before calculating scrollHeight for resize\n queueMicrotask(() => this.resizeTextArea(shouldResetDefaultSize));\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(shouldResetDefault: boolean): void {\n const textarea: HTMLTextAreaElement | undefined = this.inputAreaRef()?.nativeElement;\n\n if (!textarea) {\n return;\n }\n\n textarea.style.height = '17px'; // Always reset to initial height\n\n if (!shouldResetDefault) {\n textarea.style.height = Math.min(textarea.scrollHeight, 260) + 'px';\n\n return;\n }\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 this._effectService.registerEffect('InputArea.updatesInputValue.on.selectedPrompt', () => {\n const prompt = this._selectedPrompt();\n\n if (!prompt) return;\n\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}","<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 <!-- Main input container -->\n <div\n class=\"input-area__content\"\n [accentGradientBorder]=\"!isAnimationComplete()\"\n [ngClass]=\"{\n 'relative rounded-2xl': true,\n }\"\n >\n <div\n [animationEffect]=\"[AnimationType.MOUNT_360_GLOW, AnimationType.HOVER_MOUSE_FOLLOW]\"\n [ngClass]=\"{\n 'flex flex-col gap-4 p-4 rounded-2xl': true,\n }\"\n (animationStarted)=\"handleAnimationStart()\"\n (animationEnded)=\"handleAnimationEnd()\"\n >\n <!-- Text input area -->\n <div\n class=\"input-area__textarea-wrapper\"\n [ngClass]=\"{\n 'flex gap-3 items-start px-2': 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 custom-scrollbar-no-gutter text-text-default text-sm leading-4 h-auto min-h-[17px] max-h-[260px] resize-none border-none outline-none overflow-y-auto whitespace-pre-wrap': true,\n 'placeholder:text-text-states-default': true,\n '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)=\"setInputValue('')\"\n ></input-area-send-button>\n </div>\n </div>\n </div>\n </div>\n</div>","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","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 [isForceScrollToBottomEnabled]=\"true|false\"\n * [isSpacerExpanded]=\"true|false\">\n * ... content ...\n * </scroll-area>\n *\n * @param isForceScrollToBottomEnabled - 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 if (this.isForceScrollToBottomEnabled()) {\n this.scrollToBottom();\n }\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\n protected scrollToBottom(): void {\n if (!this.scrollArea()) return;\n\n this.scrollArea()?.nativeElement.scrollTo({\n top: this.scrollArea()?.nativeElement.scrollHeight,\n behavior: 'instant',\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 custom-scrollbar-no-gutter': 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}","import { inject, Injectable } from '@angular/core';\n\nimport { LoggerService } from '../logger/logger.service';\n\n@Injectable()\nexport class CopyToClipboardService {\n private readonly _logger: LoggerService = inject(LoggerService);\n protected readonly LOGGER_NAME: string = '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 this._logger.get(this.LOGGER_NAME).info('Text copied to clipboard successfully');\n } catch (err) {\n this._logger\n .get(this.LOGGER_NAME)\n .warn(\n `Failed to copy text using Clipboard API, falling back to textarea method: ${err instanceof Error ? err.message : String(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","/* eslint-disable @typescript-eslint/no-explicit-any */ // TODO: Remove this line after fixing any 'any' types\nimport { IOConnectCore } from '@interopio/core';\nimport { IoAiWeb } from '@interopio/ai-web';\nimport { of, Observable } from 'rxjs';\n\nimport {\n addAssistantMessage,\n addToolCall,\n addToolResult,\n getResponseFailure,\n getResponseSuccess,\n updateToolCallArgs,\n} from './message.actions';\nimport { MessageReducerStateType } from './message.reducer';\nimport {\n TOOL_RESULT_TYPES,\n ToolResult,\n ToolTraceState,\n UI_MESSAGE_ROLES,\n UIMessage,\n UIToolMessage,\n} from './types';\nimport {\n abortThreadStream,\n addStreamToolMessage,\n completeThreadStream,\n updateStreamContent,\n} from '../response-stream/response-stream.actions';\n\ntype ToolCallStreamState = {\n args: string;\n toolName?: string;\n};\n\n/**\n * Processes AG-UI events from a StreamResponse (RunHandle) and converts them into Redux actions.\n * Thread-aware - each action includes the threadId for proper filtering in reducer.\n * Also emits stream management actions for response-stream state.\n *\n * Key behaviors:\n * - TEXT_MESSAGE_START: Creates assistant message placeholder (active thread) or skips (background)\n * - TEXT_MESSAGE_CONTENT: Accumulates and dispatches full content (reducer expects full replacement)\n * - TOOL_CALL_START: Creates tool message with empty args\n * - TOOL_CALL_ARGS: Accumulates streaming JSON deltas for tool arguments\n * - TOOL_CALL_END: Parses accumulated args and updates tool message\n * - TOOL_CALL_RESULT: Dispatches tool result\n * - abort(): Signals stream cancellation without treating it as success\n * - complete(): Signals stream completion with getResponseSuccess\n * - error(): Signals stream failure\n *\n * Completion is signaled only via the subscribe complete() callback, NOT on RUN_FINISHED events,\n * because RUN_FINISHED is intermediate during multi-turn tool loops.\n *\n * @param runHandle - AG-UI StreamResponse with subscribe/abort methods\n * @param threadId - The thread ID this stream belongs to\n * @param isStreamingOnBackgroundThread - Function that returns true if streaming on a background thread\n * @returns Observable emitting Redux actions for message state and stream state updates\n */\nexport const handleResponseStream = (\n runHandle: IoAiWeb.Agents.StreamResponse,\n threadId: string,\n isStreamingOnBackgroundThread: () => boolean,\n logger: IOConnectCore.Logger.API,\n): Observable<any> => {\n if (!runHandle || typeof runHandle.subscribe !== 'function') {\n logger.error(`Invalid response object: ${JSON.stringify(runHandle)}`);\n return of(getResponseFailure({ error: new Error('Invalid response object'), threadId }));\n }\n\n return new Observable<any>((observer) => {\n let streamedContent = '';\n let currentMessageId = '';\n // Keep stream accumulation state scoped to this subscription.\n const toolCallArgsMap = new Map<string, ToolCallStreamState>();\n\n const subscription = runHandle.subscribe({\n next: (event: IoAiWeb.Agents.StreamEvent) => {\n switch (event.type) {\n case 'TEXT_MESSAGE_START': {\n currentMessageId = (event as any).messageId || crypto.randomUUID();\n streamedContent = '';\n\n if (!isStreamingOnBackgroundThread()) {\n observer.next(\n addAssistantMessage({\n message: {\n id: currentMessageId,\n role: UI_MESSAGE_ROLES.ASSISTANT,\n content: '',\n },\n threadId,\n }),\n );\n }\n break;\n }\n\n case 'TEXT_MESSAGE_CONTENT': {\n streamedContent += (event as any).delta || '';\n\n if (isStreamingOnBackgroundThread()) {\n observer.next(\n updateStreamContent({\n threadId,\n content: streamedContent,\n messageId: currentMessageId,\n }),\n );\n return;\n }\n\n observer.next(\n addAssistantMessage({\n message: {\n id: currentMessageId,\n role: UI_MESSAGE_ROLES.ASSISTANT,\n content: streamedContent,\n },\n threadId,\n }),\n );\n break;\n }\n\n case 'TEXT_MESSAGE_END':\n break;\n\n case 'TOOL_CALL_START': {\n // Text segment ended, reset content tracking\n streamedContent = '';\n\n const toolMessage: UIToolMessage = {\n id: (event as any).toolCallId || crypto.randomUUID(),\n toolName: (event as any).toolCallName || 'unknown',\n args: {},\n role: UI_MESSAGE_ROLES.TOOL,\n };\n toolCallArgsMap.set(toolMessage.id, {\n args: '',\n toolName: toolMessage.toolName,\n });\n\n if (isStreamingOnBackgroundThread()) {\n observer.next(\n addStreamToolMessage({\n threadId,\n toolMessage,\n }),\n );\n return;\n }\n\n observer.next(\n addToolCall({\n message: toolMessage,\n threadId,\n }),\n );\n break;\n }\n\n case 'TOOL_CALL_ARGS': {\n const toolCallId = (event as any).toolCallId || '';\n const delta = (event as any).delta;\n\n if (!toolCallId) {\n logger.error('Something went wrong. Missing or empty tool call id.');\n return;\n }\n\n // Accumulate the args delta for this tool call\n const currentToolCallState = toolCallArgsMap.get(toolCallId) || { args: '' };\n toolCallArgsMap.set(toolCallId, {\n ...currentToolCallState,\n args: currentToolCallState.args + delta,\n });\n\n break;\n }\n case 'TOOL_CALL_END': {\n const toolCallId = (event as any).toolCallId || '';\n\n if (!toolCallId) {\n logger.error('Something went wrong. Missing or empty tool call id.');\n return;\n }\n\n // Parse accumulated args and dispatch update\n const toolCallState = toolCallArgsMap.get(toolCallId);\n const accumulatedArgsStr = toolCallState?.args || '{}';\n const toolName = toolCallState?.toolName || 'unknown';\n let parsedArgs: Record<string, unknown> = {};\n\n try {\n parsedArgs = JSON.parse(accumulatedArgsStr);\n } catch (err) {\n logger.error(\n `Failed to parse tool call args: ${accumulatedArgsStr}`,\n err instanceof Error ? err : new Error('Unknown error'),\n );\n }\n\n // Clean up the map\n toolCallArgsMap.delete(toolCallId);\n\n if (isStreamingOnBackgroundThread()) {\n // For background threads, update the tool message in stream state\n observer.next(\n addStreamToolMessage({\n threadId,\n toolMessage: {\n id: toolCallId,\n toolName,\n args: parsedArgs,\n role: UI_MESSAGE_ROLES.TOOL,\n },\n }),\n );\n return;\n }\n\n // Dispatch action to update the tool message with parsed args\n observer.next(\n updateToolCallArgs({\n toolCallId,\n args: parsedArgs,\n threadId,\n }),\n );\n break;\n }\n\n case 'TOOL_CALL_RESULT': {\n const toolCallId = (event as any).toolCallId || '';\n let result: any = (event as any).content;\n\n if (!toolCallId) {\n logger.error('Something went wrong. Missing or empty tool call id.');\n\n return;\n }\n\n if (typeof result === 'string') {\n try {\n result = JSON.parse(result);\n } catch (err) {\n logger.error(\n `Failed to parse tool call result: ${result}`,\n err instanceof Error ? err : new Error('Unknown error'),\n );\n\n result = {\n type: TOOL_RESULT_TYPES.TEXT,\n text: result,\n };\n }\n }\n\n if (isStreamingOnBackgroundThread()) {\n const toolName = toolCallArgsMap.get(toolCallId)?.toolName || 'unknown';\n observer.next(\n addStreamToolMessage({\n threadId,\n toolMessage: {\n id: toolCallId,\n toolName,\n args: {},\n result,\n role: UI_MESSAGE_ROLES.TOOL,\n },\n }),\n );\n return;\n }\n\n observer.next(\n addToolResult({\n toolCallId,\n result,\n threadId,\n }),\n );\n break;\n }\n\n case 'RUN_STARTED':\n case 'RUN_FINISHED':\n case 'STEP_STARTED':\n case 'STEP_FINISHED':\n break;\n\n case 'RUN_ERROR':\n logger.error('Run error:', (event as any).message);\n break;\n\n default:\n logger.warn(`Unknown AG-UI event type: ${event.type}`);\n break;\n }\n },\n\n error: (err: Error) => {\n logger.error('Stream error:', err);\n\n if (isStreamingOnBackgroundThread()) {\n observer.next(\n completeThreadStream({\n threadId,\n shouldNotify: true,\n }),\n );\n } else {\n observer.next(\n getResponseFailure({\n error: err,\n threadId,\n }),\n );\n }\n\n observer.complete();\n },\n\n abort: () => {\n observer.next(abortThreadStream({ threadId }));\n observer.complete();\n },\n\n complete: () => {\n observer.next(\n completeThreadStream({\n threadId,\n shouldNotify: isStreamingOnBackgroundThread(),\n }),\n );\n\n observer.next(getResponseSuccess({ threadId }));\n\n observer.complete();\n },\n });\n\n // Teardown: unsubscribe from AG-UI stream when Observable is unsubscribed\n return () => {\n toolCallArgsMap.clear();\n subscription.unsubscribe();\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 update tool call arguments in the tool trace state array.\n * This is called on each args delta during streaming to update the tool's args.\n *\n * @param state - Current array of ToolTraceState\n * @param toolCallId - ID of the tool call message\n * @param args - Arguments delta to merge into the tool call\n *\n * @returns Updated array of ToolTraceState\n */\nexport const updateToolTraceCallEntryArgs = (\n state: ToolTraceState[],\n toolCallId: string,\n args: Record<string, unknown>,\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 args: { ...matchingToolCall.args, ...args },\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 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 // Push any remaining trace state (when messages end with tool messages, e.g., during streaming)\n if (traceState) {\n traceState.uiMessage = `Used ${traceState.executedTools.length} ${\n traceState.executedTools.length === 1 ? 'tool' : 'tools'\n }`;\n toolTraceStates.push(traceState);\n }\n\n return toolTraceStates;\n};\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 parent component\n private readonly _messageFacade: MessageFacade = inject(MessageFacade);\n private readonly _threadFacade: ThreadFacade = inject(ThreadFacade);\n\n private readonly _allMessages: Signal<UIMessage[]> = this._messageFacade.allMessages;\n private readonly _activeThreadId: Signal<string | null> = this._threadFacade.activeThreadId;\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 this._messageFacade.dispatchReloadResponse(\n {\n messages: [userMessage],\n },\n this._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 font-weight-400 leading-[19px] safe-word-break': 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>","import {\n AfterViewInit,\n Component,\n ElementRef,\n input,\n InputSignal,\n OnChanges,\n OnDestroy,\n viewChild,\n Signal,\n} from '@angular/core';\nimport { IoAiWeb } from '@interopio/ai-web';\n\n@Component({\n selector: 'mcp-app-resource',\n template: `<div #container class=\"mcp-app-container\"></div>`,\n styles: [\n `\n .mcp-app-container {\n width: 100%;\n }\n `,\n ],\n})\nexport class McpAppResourceComponent implements OnChanges, AfterViewInit, OnDestroy {\n /** The live AppInstance returned by ai-web. Pass null/undefined when not yet available. */\n public readonly appInstance: InputSignal<IoAiWeb.McpApps.AppInstance | undefined> = input<\n IoAiWeb.McpApps.AppInstance | undefined\n >(undefined);\n\n private readonly _containerRef: Signal<ElementRef | undefined> =\n viewChild<ElementRef>('container');\n\n private _mountedInstanceId: string | null = null;\n private _elementAppended = false;\n\n public ngOnChanges(): void {\n this._trackInstance(this.appInstance());\n this._appendElement(this.appInstance());\n }\n\n public ngAfterViewInit(): void {\n // viewChild signals are resolved after view init — retry appending the element\n // in case ngOnChanges fired first (before the container ref was available).\n this._appendElement(this.appInstance());\n }\n\n public ngOnDestroy(): void {\n this._cleanup();\n }\n\n /**\n * Tracks the current instance ID so we can detect when the input changes.\n * The chat-message subscription is managed at the service level (IOIntelWebService),\n * not here, so this only guards against redundant element appends.\n */\n private _trackInstance(instance: IoAiWeb.McpApps.AppInstance | undefined): void {\n if (!instance) return;\n if (this._mountedInstanceId === instance.id) return;\n this._cleanup();\n this._mountedInstanceId = instance.id;\n }\n\n /**\n * Appends the instance's proxy element into the container div.\n * Safe to call multiple times — only appends once per instance.\n */\n private _appendElement(instance: IoAiWeb.McpApps.AppInstance | undefined): void {\n if (!instance?.element) return;\n if (this._elementAppended) return;\n\n const container = this._containerRef()?.nativeElement as HTMLElement | undefined;\n if (!container) return;\n\n container.appendChild(instance.element);\n this._elementAppended = true;\n }\n\n private _cleanup(): void {\n const container = this._containerRef()?.nativeElement as HTMLElement | undefined;\n if (container) {\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n }\n this._mountedInstanceId = null;\n this._elementAppended = false;\n }\n}\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 px-[3px] 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 { AccentGradientBorderDirective } from '../../../shared/directives/accent-gradient-border/accent-gradient-border.directive';\nimport { MessageFacade } from '../../../shared/store/message/message.facade';\nimport { ToolTraceState, UI_MESSAGE_ROLES } from '../../../shared/store/message/types';\nimport { MessageFooterComponent } from '../message-footer/message-footer.component';\nimport { ToolMessageComponent } from '../tool-message/tool-message.component';\n\nconst MODULES = [CommonModule];\nconst COMPONENTS = [\n AppIconComponent,\n ToolMessageComponent,\n AppButtonComponent,\n MessageFooterComponent,\n];\nconst DIRECTIVES = [AccentGradientBorderDirective];\n\n@Component({\n selector: 'tool-trace-message',\n templateUrl: './tool-trace-message.component.html',\n imports: [...MODULES, ...COMPONENTS, ...DIRECTIVES],\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 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 readonly shouldDisplayFooter: Signal<boolean> = computed<boolean>(() => {\n const executedTools = this.currentToolTraceState()?.executedTools ?? [];\n\n if (executedTools.length === 0) {\n return false;\n }\n\n const lastTool = executedTools[executedTools.length - 1];\n\n return lastTool.displayFooter ?? false;\n });\n\n protected readonly responseForUserQueryId: Signal<string | undefined> = computed<\n string | undefined\n >(() => {\n const executedTools = this.currentToolTraceState()?.executedTools ?? [];\n\n if (executedTools.length === 0) {\n return undefined;\n }\n\n const lastTool = executedTools[executedTools.length - 1];\n\n return lastTool.responseForUserQueryId;\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@let showFooter = shouldDisplayFooter() && responseForUserQueryId() !== undefined;\n\n@if (isExpanded) {\n <div\n class=\"tool-trace-message\"\n [accentGradientBorder]=\"isExpanded\"\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 <!-- 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\n ? UI_STRINGS.COLLAPSE_BUTTON_TEXT\n : 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 $index) {\n <tool-message\n [message]=\"tool\"\n [parentToolTraceId]=\"toolTraceId\"\n ></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}\n\n@if (!isExpanded) {\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 <!-- 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\n ? UI_STRINGS.COLLAPSE_BUTTON_TEXT\n : 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 $index) {\n <tool-message\n [message]=\"tool\"\n [parentToolTraceId]=\"toolTraceId\"\n ></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}\n\n@if (showFooter) {\n <message-footer [messageFooterId]=\"responseForUserQueryId()!\"></message-footer>\n}\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 parent component\n private readonly _messageFacade: MessageFacade = inject(MessageFacade);\n private readonly _threadFacade: ThreadFacade = inject(ThreadFacade);\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 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 this._messageFacade.dispatchReloadResponse(\n {\n messages: [userMessage],\n },\n this._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 flex min-w-0\">\n <div\n class=\"user-message__bubble\"\n [ngClass]=\"{\n 'p-4 list-none text-[14px] leading-[18px] font-weight-400 text-user-message-text bg-user-message-background rounded-2xl max-w-[620px]': true,\n 'min-w-0 whitespace-pre-wrap break-words': 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-default text-[13px] font-weight-400 leading-[100%]': true,\n }\"\n >\n {{ error() }}\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, ElementRef, inject, Signal, viewChild } from '@angular/core';\nimport { IoAiWeb } from '@interopio/ai-web';\n\nimport { AppSpinnerComponent } from '../../../shared/components/app-spinner/app-spinner.component';\nimport { APP_SPINNER_COMPONENT_SIZE } from '../../../shared/components/app-spinner/enum';\nimport { McpAppsService } from '../../../shared/services/mcp-apps/mcp-apps.service';\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 { McpAppResourceComponent } from '../mcp-app-resource/mcp-app-resource.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 McpAppResourceComponent,\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 private readonly _mcpAppsService: McpAppsService = inject(McpAppsService);\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 /**\n * Maps each responseForUserQueryId to the list of MCP App instances\n * associated with tool calls from that response cycle.\n * Re-evaluates whenever instances or messages change.\n */\n protected readonly mcpAppsByResponse: Signal<Map<string, IoAiWeb.McpApps.AppInstance[]>> =\n computed(() => {\n const instances = this._mcpAppsService.instances();\n const messages = this.allMessages();\n const map = new Map<string, IoAiWeb.McpApps.AppInstance[]>();\n\n for (const msg of messages) {\n if (msg.role !== UI_MESSAGE_ROLES.TOOL) continue;\n const instance = instances.find((i) => i.id === msg.id);\n if (!instance || !msg.responseForUserQueryId) continue;\n\n const key = msg.responseForUserQueryId;\n const list = map.get(key) ?? [];\n list.push(instance);\n map.set(key, list);\n }\n\n return map;\n });\n\n protected getMcpAppsForResponse(\n responseForUserQueryId: string | undefined,\n ): IoAiWeb.McpApps.AppInstance[] {\n if (!responseForUserQueryId) return [];\n return this.mcpAppsByResponse().get(responseForUserQueryId) ?? [];\n }\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-3': true,\n 'md:max-w-[720px]': true,\n }\"\n >\n @for (message of allMessages(); track message.id) {\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 @for (instance of getMcpAppsForResponse(message.responseForUserQueryId); track instance.id) {\n <mcp-app-resource [appInstance]=\"instance\"></mcp-app-resource>\n }\n }\n\n @if (showToolTraceForMessage(message.id)) {\n <tool-trace-message [parentMessage]=\"message.id\"></tool-trace-message>\n }\n }\n </div>\n</scroll-area>","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 computed,\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 { ResponsiveUIService } from '../../../shared/services/responsive-ui/responsive-ui.service';\nimport { MessageFacade } from '../../../shared/store/message/message.facade';\nimport { ResponseStreamFacade } from '../../../shared/store/response-stream/response-stream.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 _responseStreamFacade: ResponseStreamFacade = inject(ResponseStreamFacade);\n private readonly _overlayService: OverlayService = inject(OverlayService);\n private readonly _responsiveUIService: ResponsiveUIService = inject(ResponsiveUIService);\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 private readonly _streamingThreadIds: Signal<Set<string>> =\n this._responseStreamFacade.streamingThreadIds;\n private readonly _threadsWithNotification: Signal<string[]> =\n this._responseStreamFacade.threadsWithCompletionNotification;\n\n protected readonly isThreadStreaming: Signal<boolean> = computed(() => {\n return this._streamingThreadIds().has(this.thread().id);\n });\n\n protected readonly hasCompletionNotification: Signal<boolean> = computed(() => {\n return this._threadsWithNotification().includes(this.thread().id);\n });\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 const threadId: string = this.thread().id;\n\n this._responseStreamFacade.dispatchClearCompletionNotification(threadId);\n\n if (threadId === this.activeThreadId()) {\n return this.handleThreadHistoryHide();\n }\n\n this._threadFacade.dispatchChangeActiveThread(threadId);\n this._messageFacade.dispatchFetchMessagesFromThread(this.thread());\n\n this.handleThreadHistoryHide();\n }\n\n private handleThreadHistoryHide(): void {\n if (!this._responsiveUIService.isSmDown) {\n return;\n }\n\n this._overlayService.hideThreadHistory();\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@let isThreadActionPending =\n isThreadStreaming() || isTryingToDeleteThread || isTryingToRenameThread;\n@let hasNotification = hasCompletionNotification();\n@let showNotificationBadge = hasNotification && !isCurrentlyActive;\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 @if (showNotificationBadge) {\n <span\n class=\"w-2 h-2 rounded-full bg-orange-500 mr-2 flex-shrink-0\"\n title=\"New response available\"\n ></span>\n }\n\n <span class=\"truncate block\" [attr.title]=\"thread().title\">\n {{ thread().title }}\n </span>\n\n @if (isThreadActionPending) {\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)=\"handleEditModeDisable(); 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]=\"isThreadActionPending\"\n (onClick)=\"handleEditModeEnable()\"\n />\n <app-icon\n [variant]=\"APP_ICON_VARIANTS.DELETE\"\n [tabIndex]=\"isCurrentlyActive ? 0 : -1\"\n [size]=\"APP_ICON_SIZES.S\"\n [isDisabled]=\"isCurrentlyActive || isThreadActionPending\"\n (onClick)=\"onDeleteThread(thread()); $event.stopPropagation()\"\n />\n </div>\n </div>\n</div>","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 { 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 { 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 providers: [\n {\n provide: EffectService,\n useFactory: () => new EffectService('ThreadHistoryListComponent'),\n },\n ],\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 // Provided in root\n private readonly _threadFacade: ThreadFacade = inject(ThreadFacade);\n private readonly _overlayService: OverlayService = inject(OverlayService);\n\n // Provided by parent\n private readonly _messageFacade: MessageFacade = inject(MessageFacade);\n\n private readonly _effectService: EffectService = inject(EffectService);\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 private readonly _isThreadHistoryDisplayed: Signal<boolean> =\n this._overlayService.isThreadHistoryDisplayed;\n private readonly _isSuccessLastResponse: Signal<boolean> =\n this._messageFacade.isLastResponseSuccess;\n\n public ngOnInit(): void {\n this.registerEffects();\n\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 private registerEffects(): void {\n this._effectService.registerEffect(\n 'ThreadHistoryListComponent.shouldRefreshThreadList.when.successfulResponse',\n () => {\n const shouldRefresh: boolean =\n this._isThreadHistoryDisplayed() && this._isSuccessLastResponse();\n\n if (!shouldRefresh) {\n return;\n }\n\n this._threadFacade.dispatchFetchThreads(SELECTED_AGENT);\n },\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\n [ngClass]=\"{\n 'flex flex-1 justify-center items-center': true,\n }\"\n [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 { CommonModule } from '@angular/common';\nimport { Component, computed, inject, Signal } from '@angular/core';\n\nimport { IO_ASSIST_DYNAMIC_CONFIG, IoAssistDynamicConfig } from '../../../io-assist.config';\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 { 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: [CommonModule, ThreadHistoryListComponent, AppIconComponent],\n})\nexport class ThreadHistoryComponent {\n protected readonly UI_STRINGS = UI_STRINGS.GENERAL;\n protected readonly APP_ICON_VARIANTS = APP_ICON_VARIANTS;\n protected readonly APP_ICON_SIZES = APP_ICON_SIZES;\n protected readonly APP_SPINNER_COMPONENT_SIZE = APP_SPINNER_COMPONENT_SIZE;\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 private readonly _dynamicConfig: Signal<IoAssistDynamicConfig> =\n inject(IO_ASSIST_DYNAMIC_CONFIG);\n\n protected readonly threadsLength: Signal<number> = this._threadFacade.threadLength;\n protected readonly isDarkMode: Signal<boolean> = this._ioConnectService.isDarkMode;\n protected readonly username = computed(() => this._dynamicConfig().user.name);\n\n protected readonly hasUsername = computed(() => !!this._dynamicConfig().user.name);\n\n protected readonly userInitial = computed(() => {\n const name = this._dynamicConfig().user.name;\n return name ? name.charAt(0).toUpperCase() : 'U';\n });\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 Container -->\n <thread-history-list class=\"flex flex-1 flex-col p-2 overflow-y-scroll custom-scrollbar custom-scrollbar-no-gutter\"></thread-history-list>\n\n <!-- User Profile Section -->\n @if (hasUsername()) {\n <div\n class=\"thread-history__user-profile\"\n [ngClass]=\"{\n 'flex items-center gap-3 px-4 py-3 mt-auto border-t border-border-default': true,\n }\"\n >\n <!-- User Avatar -->\n <div\n class=\"thread-history__user-avatar\"\n [ngClass]=\"{\n 'flex items-center justify-center w-6 h-6 rounded-full bg-app-accent-color-1 text-white text-neutrals-0 font-weight-600 text-[12px] flex-shrink-0': true,\n }\"\n >\n {{ userInitial() }}\n </div>\n\n <!-- User Info -->\n <div\n class=\"thread-history__user-info\"\n [ngClass]=\"{\n 'flex flex-col flex-1 min-w-0': true,\n }\"\n >\n <span\n [ngClass]=\"{\n 'text-text-default text-[12px] leading-[12px] font-weight-400 truncate': true,\n }\"\n [attr.title]=\"username()\"\n >\n {{ username() }}\n </span>\n </div>\n </div>\n }\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>","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, OnInit, Signal } from '@angular/core';\n\nimport { IO_ASSIST_DYNAMIC_CONFIG, IoAssistDynamicConfig } from '../../io-assist.config';\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 { ResponsiveUIService } from '../../shared/services/responsive-ui/responsive-ui.service';\nimport { MessageFacade } from '../../shared/store/message/message.facade';\nimport { PromptFacade } from '../../shared/store/prompt/prompt.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: [\n MessageFacade,\n PromptFacade,\n {\n provide: EffectService,\n useFactory: () => new EffectService('ChatComponent'),\n },\n ],\n host: {\n class: 'flex flex-1 flex-col bg-app-background min-h-0 text-app-text-default',\n },\n})\nexport class ChatComponent implements OnInit {\n protected readonly UI_STRINGS = UI_STRINGS;\n\n // Provided in root\n private readonly _overlayService: OverlayService = inject(OverlayService);\n private readonly _dynamicConfig: Signal<IoAssistDynamicConfig> =\n inject(IO_ASSIST_DYNAMIC_CONFIG);\n private readonly _responsiveUIService: ResponsiveUIService = inject(ResponsiveUIService);\n\n // Provided in this component\n private readonly _messageFacade: MessageFacade = inject(MessageFacade);\n private readonly _promptFacade: PromptFacade = inject(PromptFacade);\n private readonly _effectService: EffectService = inject(EffectService);\n\n protected readonly isLoadingMessages: Signal<boolean> = this._messageFacade.isLoadingMessages;\n protected readonly messageLength: Signal<number> = this._messageFacade.messageLength;\n protected readonly loggedInUser = computed(() => this._dynamicConfig().user.name);\n\n protected readonly isThreadHistoryDisplayed: Signal<boolean> =\n this._overlayService.isThreadHistoryDisplayed;\n protected readonly hasFavoritePrompts: Signal<boolean> = computed(\n () => this._promptFacade.favoritePromptNames().length > 0,\n );\n\n public ngOnInit(): void {\n this.registerEffects();\n }\n\n private registerEffects(): void {\n this._effectService.registerEffect(\n 'ChatComponent.autoCloseThreadHistoryOnViewportShrink',\n () => {\n if (this._responsiveUIService.isMdDown) {\n this._overlayService.hideThreadHistory();\n }\n },\n );\n }\n}\n","@let showMessageArea = isLoadingMessages() || messageLength() > 0;\n@let showWelcomeMessage = !showMessageArea;\n@let showFavoritePrompts = !showMessageArea && hasFavoritePrompts();\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 overflow-x-hidden overflow-auto custom-scrollbar custom-scrollbar-no-gutter': 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 px-4 pt-[160px]': true,\n }\"\n >\n <h2\n [ngClass]=\"{\n 'text-[28px] font-bold text-text-states-active text-center': true,\n 'md:text-[44px]': 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 px-4': true,\n 'md:max-w-[720px]': true,\n }\"\n ></input-area>\n\n @if (showFavoritePrompts) {\n <favorite-prompt-list\n [ngClass]=\"{\n 'max-w-[920px] w-full px-4': true,\n }\"\n ></favorite-prompt-list>\n }\n\n <div\n [ngClass]=\"{\n 'flex justify-center items-end text-center p-4': true,\n 'pt-4': showMessageArea,\n 'flex-1 pt-0': !showMessageArea,\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 </div>\n</div>","import { IoAiWeb } from '@interopio/ai-web';\nimport { z, ZodType } from 'zod';\n\nimport { AIWebConfig, IoAssistStaticConfig, IoAssistDynamicConfig } from './io-assist.config';\nimport { IoAssistPrompt, IoAssistPromptCategory } from './io-assist.types';\n\nconst MCPRemoteServerConfigSchema = z.object({\n streamableHttp: z.object({\n url: z.string().url(),\n name: z.string(),\n options: z.any().optional(), // pass-through options for StreamableHTTPClientTransport, maybe do full validation later\n }),\n}) satisfies ZodType<IoAiWeb.MCPRemoteServerConfig>;\n\nconst MCPClientConfigSchema = z.object({\n enforceStrictCapabilities: z.boolean().optional(),\n debouncedNotificationMethods: z.array(z.string()).optional(),\n capabilities: z.object({\n sampling: z\n .object({\n handler: z\n .function()\n .args(z.string(), z.any())\n .returns(z.any())\n .describe('A function that handles sampling requests from the MCP server.'),\n })\n .optional()\n .describe('Configuration for sampling capabilities.'),\n elicitation: z\n .object({\n handler: z\n .function()\n .args(z.string(), z.any())\n .returns(z.any())\n .describe('A function that handles elicitation requests from the MCP server.'),\n })\n .optional()\n .describe('Configuration for elicitation capabilities.'),\n extensions: z.record(z.any()).optional(),\n experimental: z.record(z.any()).optional(),\n }),\n}) satisfies ZodType<IoAiWeb.MCPClientConfig>;\n\nconst MCPConfigSchema = z.object({\n clientsConfig: MCPClientConfigSchema.optional(),\n ioIntel: z\n .object({\n remote: MCPRemoteServerConfigSchema.optional(),\n web: z\n .object({\n enabled: z.boolean().optional(),\n hasPriority: z.boolean().optional(),\n })\n .optional(),\n })\n .optional(),\n remoteServers: z.array(MCPRemoteServerConfigSchema).optional(),\n mcpApps: z\n .object({\n sandboxProxyUrl: z.string(),\n displayMode: z.enum(['inline', 'workspace']).optional(),\n })\n .optional(),\n});\n\nconst AgentServerConfigSchema = z.object({\n baseUrl: z.string().url(),\n retries: z.number().int().min(0).optional(),\n backoffMs: z.number().int().min(0).optional(),\n maxBackoffMs: z.number().int().min(0).optional(),\n abortSignal: z.any().optional(),\n credentials: z.enum(['omit', 'same-origin', 'include']).optional(),\n});\n\n/**\n * Schema for validating IOConnectNg settings objects.\n */\nconst IOConnectNgSettingsSchema = z.record(z.string(), z.any());\n\nconst AIWebConfigSchema = z.object({\n agentServer: AgentServerConfigSchema,\n mcp: MCPConfigSchema.optional(),\n}) as ZodType<AIWebConfig>;\n\n/**\n * Schema for validating working context configuration objects.\n */\nconst WorkingContextConfigSchema = z.object({\n factory: z\n .function()\n .args(z.any(), z.any())\n .returns(z.promise(z.any()))\n .describe('A factory function to create the working context API instance.'),\n config: z.any().describe('Configuration object for the working context factory.'),\n}) satisfies ZodType<IoAiWeb.WorkingContextConfig>;\n\n/**\n * Schema for validating individual IoAssist prompt objects.\n */\nconst IconResourceSchema = z.object({\n type: z.enum(['svg', 'url', 'data-url']),\n data: z.string().min(1),\n});\n\nconst IoAssistPromptSchema = z.object({\n name: z.string().min(1),\n prompt: z.string().min(1),\n iconResource: IconResourceSchema.optional(),\n}) satisfies ZodType<IoAssistPrompt>;\n\nconst IoAssistPromptCategorySchema = z.object({\n category: z.string().optional(),\n prompts: z.array(IoAssistPromptSchema),\n}) satisfies ZodType<IoAssistPromptCategory>;\n\n/**\n * Schema for validating user configuration.\n */\nconst IoAssistUserConfigSchema = z.object({\n id: z.string().min(1, 'User id is required and must be a non-empty string.'),\n name: z.string().optional(),\n});\n\n/**\n * Main schema for validating IoAssist configuration objects.\n */\nexport const IoAssistStaticConfigSchema = z.object({\n connectConfig: IOConnectNgSettingsSchema,\n aiWebConfig: AIWebConfigSchema,\n defaultAgentName: z.string().optional(),\n workingContext: WorkingContextConfigSchema.optional(),\n defaultPrompts: z.array(IoAssistPromptCategorySchema).optional(),\n}) satisfies ZodType<IoAssistStaticConfig>;\n\n/**\n * Schema for validating the dynamic config passed as a component input.\n */\nexport const IoAssistDynamicConfigSchema = z.object({\n user: IoAssistUserConfigSchema,\n agentServer: z\n .object({\n headers: z.record(z.string()).optional(),\n })\n .optional(),\n}) satisfies ZodType<IoAssistDynamicConfig>;\n","import { inject, Injectable, signal, WritableSignal } from '@angular/core';\n\nimport { LoggerService } from '../logger/logger.service';\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 _logger: LoggerService = inject(LoggerService);\n protected readonly LOGGER_NAME: string = 'ConsumerAssetLoaderService';\n\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 this._logger.get(this.LOGGER_NAME).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 { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, computed, inject, input, OnInit, Signal } from '@angular/core';\n\nimport { ChatComponent } from './components/chat/chat.component';\nimport { IO_ASSIST_DYNAMIC_CONFIG, IoAssistDynamicConfig } from './io-assist.config';\nimport { IoAssistDynamicConfigSchema } from './io-assist.schema';\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 { ConsumerAssetLoaderService } from './shared/services/consumer-asset-loader/consumer-asset-loader.service';\nimport { IOConnectService } from './shared/services/io/io.service';\nimport { AppLifecycleFacade } from './shared/store/app-lifecycle/app-lifecycle.facade';\n\nconst COMPONENTS = [AppSpinnerComponent, ChatComponent];\nconst MODULES = [CommonModule];\n\n@Component({\n selector: 'io-assist',\n imports: [...COMPONENTS, ...MODULES],\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 protected readonly APP_SPINNER_COMPONENT_SIZE = APP_SPINNER_COMPONENT_SIZE;\n\n // Dynamic config input — passed by the consumer after login.\n // Synced into IO_ASSIST_DYNAMIC_CONFIG so root-level services can read it.\n private readonly _dynamicConfigToken = inject(IO_ASSIST_DYNAMIC_CONFIG);\n readonly config = input.required<IoAssistDynamicConfig>();\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 private readonly _appLifecycleFacade: AppLifecycleFacade = inject(AppLifecycleFacade);\n\n protected readonly isIoReady: Signal<boolean> = this._ioService.isIoConnectReady;\n protected readonly isAppCoreServicesStarted: Signal<boolean> =\n this._appLifecycleFacade.isAppCoreServicesStarted;\n protected readonly appCoreServicesError: Signal<string | null> =\n this._appLifecycleFacade.appCoreServicesErrorMessage;\n protected readonly isAppCoreServicesError: Signal<boolean> = computed(\n () => this._appLifecycleFacade.appCoreServicesErrorMessage() !== null,\n );\n protected readonly isAppCoreServicesPending: Signal<boolean> =\n this._appLifecycleFacade.isPendingAppCoreServicesOperation;\n\n private readonly _consumerAssetLoaderService: ConsumerAssetLoaderService = inject(\n ConsumerAssetLoaderService,\n );\n\n public ngOnInit(): void {\n const parsedConfig = IoAssistDynamicConfigSchema.parse(this.config());\n\n this._dynamicConfigToken.set(parsedConfig);\n\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 protected refreshPage(): void {\n window.location.reload();\n }\n\n private registerEffects(): void {\n this._effectService.registerEffect(\n 'IoAssist.subscribeToThemeChanges',\n () => this.isIoReady() && this._ioService.startIODependentTasks(),\n );\n }\n}\n","@let chatUIReadyToDisplay = (isIoReady() && isAppCoreServicesStarted());\n@let showAppCoreServicesError = isAppCoreServicesError() && !isAppCoreServicesPending();\n@let showError = !isIoReady() || showAppCoreServicesError;\n@let isOperationPending = isAppCoreServicesPending() && !isAppCoreServicesStarted();\n\n\n<div class=\"flex flex-1 w-full h-lvh bg-app-background font-default\">\n @if (!chatUIReadyToDisplay) {\n <div class=\"m-auto text-center\">\n @if (showError) {\n @if (!isIoReady()) {\n <p class=\"text-sm text-gray-500\">{{ UI_STRINGS.CANNOT_CONNECT_TO_IO }}</p>\n }\n\n @if (showAppCoreServicesError) {\n <p class=\"text-sm text-red-500\">{{ appCoreServicesError() }}</p>\n <p class=\"text-sm text-gray-500 mt-2\">{{ UI_STRINGS.IO_INTEL_INIT_ERROR }}</p>\n <!-- TODO: ADD PROPER DOCUMENTATION LINK -->\n <p class=\"text-sm text-gray-500 mt-2\">{{ UI_STRINGS.DOCUMENTATION_LINK() }}</p>\n\n <button\n class=\"mt-4 px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700 transition-colors\"\n (click)=\"refreshPage()\"\n >\n {{ UI_STRINGS.REFRESH }}\n </button>\n }\n }\n\n @if (isOperationPending) {\n <app-spinner [size]=\"APP_SPINNER_COMPONENT_SIZE.MEDIUM\"></app-spinner>\n <p class=\"text-sm text-gray-500 mt-2\">{{ UI_STRINGS.INITIALIZING_SERVICES }}</p>\n }\n </div>\n }\n\n @if (chatUIReadyToDisplay) {\n <chat />\n }\n</div>\n\n\n","import { inject, Injectable } from '@angular/core';\nimport { IoAiWeb } from '@interopio/ai-web';\n\nimport { IOAiWebService } from '../../io-ai-web/io-ai-web.service';\nimport { LoggerService } from '../../logger/logger.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AgentManagerService {\n private readonly _ioIntelWebService: IOAiWebService = inject(IOAiWebService);\n private readonly _logger: LoggerService = inject(LoggerService);\n protected readonly LOGGER_NAME: string = 'AgentManagerService';\n\n public async listAgents(): Promise<IoAiWeb.Agents.Agent[]> {\n try {\n return await this._ioIntelWebService.listAgents();\n } catch (error) {\n this._logger\n .get(this.LOGGER_NAME)\n .error(\n `Error fetching agents: ${error instanceof Error ? error.message : String(error)}`,\n );\n\n throw new Error('Failed to fetch agents.');\n }\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { IOConnectCore } from '@interopio/core';\nimport { IoAiWeb } from '@interopio/ai-web';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { mergeMap, from, of, map, catchError, tap } from 'rxjs';\n\nimport {\n listAvailableAgents,\n listAvailableAgentsFailure,\n listAvailableAgentsSuccess,\n} from './agent.actions';\nimport { AgentFacade } from './agent.facade';\nimport { IO_ASSIST_CONFIG, IoAssistStaticConfig } from '../../../io-assist.config';\nimport { AgentManagerService } from '../../services/agent/agent-manager/agent-manager.service';\nimport { LoggerService } from '../../services/logger/logger.service';\n\n@Injectable()\nexport class AgentEffects {\n private readonly _actions$: Actions = inject(Actions);\n private readonly _agentManagerService: AgentManagerService = inject(AgentManagerService);\n private readonly _agentFacade: AgentFacade = inject(AgentFacade);\n private readonly _config: IoAssistStaticConfig = inject(IO_ASSIST_CONFIG);\n private readonly _logger: LoggerService = inject(LoggerService);\n protected readonly LOGGER_NAME: string = 'AgentEffects';\n\n listAvailableAgents$ = createEffect(() =>\n this._actions$.pipe(\n ofType(listAvailableAgents),\n mergeMap(() =>\n from(this._agentManagerService.listAgents()).pipe(\n map((agents: IoAiWeb.Agents.Agent[]) =>\n listAvailableAgentsSuccess({ agents }),\n ),\n catchError((error: Error) => of(listAvailableAgentsFailure({ error }))),\n ),\n ),\n ),\n );\n\n onListAvailableAgentsSuccess$ = createEffect(\n () =>\n this._actions$.pipe(\n ofType(listAvailableAgentsSuccess),\n tap(({ agents }) => {\n if (!agents || agents.length === 0) {\n this.getLogger().error('No agents available.');\n\n return;\n }\n\n if (this._config.defaultAgentName) {\n this.getLogger().info(\n `Default agent specified in config: ${this._config.defaultAgentName}`,\n );\n }\n\n let configuredAgentId = this._config.defaultAgentName;\n\n if (!configuredAgentId) {\n this.getLogger().warn(\n `No default agent specified in config. Selecting first available agent: \"${agents[0].id}\".`,\n );\n\n configuredAgentId = agents[0].id;\n }\n\n let agentMatch: IoAiWeb.Agents.Agent | undefined = agents.find(\n (agent) => agent.id === configuredAgentId,\n );\n\n if (!agentMatch) {\n this.getLogger().error(\n `Agent with id: \"${configuredAgentId}\" not found among available agents. Using first available agent: \"${agents[0].id}\".`,\n );\n\n agentMatch = agents[0];\n }\n\n this.getLogger().info(`Working with agent: \"${agentMatch.id}\"`);\n\n this._agentFacade.dispatchSelectAgent(agentMatch.id);\n }),\n ),\n { dispatch: false },\n );\n\n private getLogger(): IOConnectCore.Logger.API {\n return this._logger.get(this.LOGGER_NAME);\n }\n}\n","import { IoAiWeb } from '@interopio/ai-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: IoAiWeb.Agents.Agent[];\n selectedAgent: IoAiWeb.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, Signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { from, merge, of, catchError, filter, map, switchMap, take } from 'rxjs';\n\nimport {\n initialAppCoreServicesInit,\n initialAppCoreServicesInitFailure,\n initialAppCoreServicesInitSuccess,\n} from './app-lifecycle.actions';\nimport { IOAiWebService } from '../../services/io-ai-web/io-ai-web.service';\nimport { AgentFacade } from '../agent/agent.facade';\nimport { PromptFacade } from '../prompt/prompt.facade';\n\n@Injectable()\nexport class AppLifecycleEffects {\n private readonly _actions$: Actions = inject(Actions);\n private readonly _store: Store = inject(Store);\n\n private readonly _ioIntelWebService: IOAiWebService = inject(IOAiWebService);\n\n private readonly _agentFacade: AgentFacade = inject(AgentFacade);\n private readonly _promptFacade: PromptFacade = inject(PromptFacade);\n\n private readonly _isIoIntelWebAvailable: Signal<boolean> =\n this._ioIntelWebService.isInitialized;\n private readonly _isIoIntelWebInitializing: Signal<boolean> =\n this._ioIntelWebService.isInitializing;\n private readonly _ioIntelWebInitializeError: Signal<string> = this._ioIntelWebService.isError;\n\n private readonly _initialized$ = toObservable(this._isIoIntelWebAvailable);\n private readonly _error$ = toObservable(this._ioIntelWebInitializeError);\n\n watchIoIntelWebInit$ = createEffect(() =>\n merge(\n this._error$.pipe(\n filter(Boolean),\n map((msg) => initialAppCoreServicesInitFailure({ error: new Error(msg) })),\n ),\n this._initialized$.pipe(\n filter(Boolean),\n map(() => initialAppCoreServicesInitSuccess()),\n ),\n ).pipe(take(1)),\n );\n\n initialAppCoreServicesInit$ = createEffect(() =>\n this._actions$.pipe(\n ofType(initialAppCoreServicesInit),\n switchMap(() => {\n if (this._isIoIntelWebAvailable()) {\n return of(initialAppCoreServicesInitSuccess());\n }\n\n if (this._isIoIntelWebInitializing()) {\n // Already initializing — watchIoIntelWebInit$ will dispatch\n // success/failure when the state changes.\n return [];\n }\n\n return from(this._ioIntelWebService.initialize()).pipe(\n // No action dispatched here, wait for initialization effect\n switchMap(() => []),\n // Swallow the error — watchIoIntelWebInit$ dispatches\n // the failure and we do not want double dispatch\n catchError(() => []),\n );\n }),\n ),\n );\n\n initialAppCoreServicesInitSuccess$ = createEffect(\n () =>\n this._actions$.pipe(\n ofType(initialAppCoreServicesInitSuccess),\n map(() => {\n // Dispatch actions needed after initialized IoAiWeb API\n this._agentFacade.dispatchListAvailableAgents();\n this._promptFacade.dispatchParsePromptsConfig();\n // this._xxxFacade.dispatchListXXX();\n }),\n ),\n { dispatch: false },\n );\n}\n","import { createReducer, on } from '@ngrx/store';\n\nimport {\n initialAppCoreServicesInit,\n initialAppCoreServicesInitFailure,\n initialAppCoreServicesInitSuccess,\n} from './app-lifecycle.actions';\nimport { LOADING_STATE } from '../../enums/loading-state.enum';\nimport { LoadingType } from '../../types/loading.type';\n\nexport type AppLifecycleStateType = {\n isAppCoreServicesStarted: boolean;\n loadingState: LoadingType;\n};\n\nexport const initialState: AppLifecycleStateType = {\n isAppCoreServicesStarted: false,\n loadingState: { type: LOADING_STATE.NOT_STARTED },\n};\n\nexport const appLifecycleReducer = createReducer(\n initialState,\n on(initialAppCoreServicesInit, (state) => {\n return {\n ...state,\n loadingState: { type: LOADING_STATE.LOADING as typeof LOADING_STATE.LOADING },\n };\n }),\n on(initialAppCoreServicesInitSuccess, (state) => {\n return {\n ...state,\n isAppCoreServicesStarted: true,\n loadingState: { type: LOADING_STATE.SUCCESS as typeof LOADING_STATE.SUCCESS },\n };\n }),\n on(initialAppCoreServicesInitFailure, (state, { error }) => {\n return {\n ...state,\n isAppCoreServicesStarted: false,\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 { IoAiWeb } from '@interopio/ai-web';\n\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 { IOAiWebService } from '../io-ai-web/io-ai-web.service';\nimport { LoggerService } from '../logger/logger.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ThreadService {\n private readonly _ioIntelWebService: IOAiWebService = inject(IOAiWebService);\n private readonly _logger: LoggerService = inject(LoggerService);\n protected readonly LOGGER_NAME: string = 'ThreadService';\n\n public fetchThreads(agentId: string, resourceId: string): Promise<IoAiWeb.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 deleteThreadState(threadId: string): Promise<void> {\n return this._ioIntelWebService.deleteThreadState({ threadId });\n }\n\n public async toUIThreads(threads: IoAiWeb.Threads.Thread[]): Promise<UIThread[]> {\n if (threads.length === 0) return Promise.resolve([]);\n\n const convertedUIThreads: UIThread[] = [];\n\n threads.map((thread: IoAiWeb.Threads.Thread) => {\n const tempThread: UIThread = this.convertSingleUIThread(thread);\n\n convertedUIThreads.push(tempThread);\n });\n\n return Promise.resolve(convertedUIThreads);\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: any = await thread.getMessages({ limit: 100 });\n\n if (!messages.messages) {\n throw new Error('No messages found in thread');\n }\n\n return this.convertToUIResponseMessages(messages.messages);\n } catch (error: any) {\n this._logger\n .get(this.LOGGER_NAME)\n .error(\n `Failed to fetch thread messages: ${error instanceof Error ? error.message : String(error)}`,\n );\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 IoAiWeb API\n * @returns Array of UIResponseMessage mapped from the input messages\n */\n public convertToUIResponseMessages(uiMessages: any[]): UIResponseMessage[] {\n const result: (UIResponseMessage | null)[] = [];\n const toolCallMap = new Map<string, UIResponseMessage>();\n\n uiMessages.forEach((message) => {\n const role: UIMessageType = message.role;\n const parts: any[] = message.content.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 const msg = this.toAssistantUIMessage(part, toolCallMap);\n\n if (msg === null) {\n return;\n }\n\n result.push(msg);\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 return userMessage;\n }\n\n private toAssistantUIMessage(\n part: any,\n toolCallMap: Map<string, UIResponseMessage>,\n ): 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 const toolCallId = toolInvocation.toolCallId;\n const state = toolInvocation.state;\n\n // If this is a result, update the existing call instead of creating new message\n if (state === 'result') {\n const existingCall = toolCallMap.get(toolCallId);\n\n if (existingCall) {\n (existingCall as any).result = toolInvocation.result;\n }\n\n // Skip adding new message\n return null;\n }\n\n const newMessage: UIResponseMessage = {\n id: 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 if (state === 'call') {\n toolCallMap.set(toolCallId, newMessage);\n }\n\n return newMessage;\n }\n\n return null;\n }\n\n private convertSingleUIThread(thread: IoAiWeb.Threads.Thread): UIThread {\n const UIThread: UIThread = {\n ...thread,\n title: thread.title ? thread.title : thread.createdAt.toISOString(),\n };\n\n return UIThread;\n }\n}\n","import { inject, Injectable, Signal } from '@angular/core';\nimport { IoAiWeb } from '@interopio/ai-web';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { mergeMap, catchError, of, from, map, tap, Observable, switchMap, EMPTY } from 'rxjs';\n\nimport {\n abortResponseGeneration,\n fetchMessagesFromThread,\n fetchMessagesFromThreadFailure,\n fetchMessagesFromThreadSuccess,\n getResponse,\n getResponseFailure,\n mergeAccumulatedStreamContent,\n reloadResponse,\n} from './message.actions';\nimport { handleResponseStream } from './message.utils';\nimport { UIMessage, UIResponseMessage, UIToolMessage, UI_MESSAGE_ROLES } from './types';\nimport { AgentService } from '../../services/agent/agent.service';\nimport { LoggerService } from '../../services/logger/logger.service';\nimport { McpAppsService } from '../../services/mcp-apps/mcp-apps.service';\nimport { ThreadService } from '../../services/thread/thread.service';\nimport {\n abortThreadStream,\n completeThreadStream,\n failThreadStream,\n startThreadStream,\n} from '../response-stream/response-stream.actions';\nimport {\n selectIsThreadStreaming,\n selectStreamContentForThread,\n} from '../response-stream/response-stream.selector';\nimport { changeActiveThread } from '../thread/thread.actions';\nimport { selectActiveThreadId } from '../thread/thread.selector';\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 private readonly _store: Store = inject(Store);\n private readonly _logger: LoggerService = inject(LoggerService);\n protected readonly LOGGER_NAME: string = 'MessageEffects';\n private readonly _mcpAppsService: McpAppsService = inject(McpAppsService);\n\n private readonly _activeThreadId: Signal<string | null> =\n this._store.selectSignal(selectActiveThreadId);\n\n /**\n * When the user switches to any thread (including a new/empty one), clear the\n * tracked app instances and close all active proxy windows immediately.\n * This prevents stale workspace windows from persisting during the async\n * fetch that follows, and ensures windows stuck in the loading state (proxy-\n * ready not yet fired) are also closed via the safety-net closeAll().\n */\n clearMcpAppsOnThreadChange$ = createEffect(\n () =>\n this._actions$.pipe(\n ofType(changeActiveThread),\n switchMap(() => {\n this._mcpAppsService.resetInstances();\n\n return from(this._mcpAppsService.closeAll()).pipe(catchError(() => EMPTY));\n }),\n ),\n { dispatch: false },\n );\n\n /**\n * When messages are fetched for an existing thread, atomically close all\n * existing MCP App instances and create new ones for the fetched thread.\n * Uses replaceAll() to prevent race conditions from rapid thread switching —\n * switchMap cancels in-flight operations, and replaceAll starts with a clean slate.\n */\n createMcpAppsOnThreadFetch$ = createEffect(\n () =>\n this._actions$.pipe(\n ofType(fetchMessagesFromThreadSuccess),\n switchMap(({ messages, threadId }) => {\n const apps = messages\n .filter((m): m is UIToolMessage => m.role === UI_MESSAGE_ROLES.TOOL)\n .map((m) => ({\n toolCallId: m.id,\n toolName: m.toolName,\n toolInput: m.args,\n toolResult: m.result,\n }));\n\n return from(\n apps.length > 0\n ? this._mcpAppsService.recreate({ threadId, apps })\n : this._mcpAppsService.closeAll(),\n ).pipe(catchError(() => EMPTY));\n }),\n ),\n { dispatch: false },\n );\n\n getResponse$ = createEffect(() =>\n this._actions$.pipe(\n ofType(getResponse),\n tap(({ params, threadId }) =>\n this._dispatchStreamForThread(params, threadId, 'getResponse'),\n ),\n mergeMap(({ params, isStream, agent, threadId }) =>\n from(this._agentService.getResponse(params, isStream, agent)).pipe(\n mergeMap((responseStream) =>\n this._getResponseStreamHandler(responseStream, threadId),\n ),\n catchError((error: Error) => this._handleStreamError(error, threadId)),\n ),\n ),\n ),\n );\n\n reloadResponse$ = createEffect(() =>\n this._actions$.pipe(\n ofType(reloadResponse),\n tap(({ params, threadId }) =>\n this._dispatchStreamForThread(params, threadId, 'reloadResponse'),\n ),\n mergeMap(({ params, isStream, agent, threadId }) =>\n from(this._agentService.reloadResponse(params, isStream, agent)).pipe(\n mergeMap((responseStream) =>\n this._getResponseStreamHandler(responseStream, threadId),\n ),\n catchError((error: Error) => this._handleStreamError(error, threadId)),\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, threadId: thread.id });\n }),\n catchError((error: Error) => of(fetchMessagesFromThreadFailure({ error }))),\n ),\n ),\n ),\n );\n\n /**\n * Effect to merge accumulated stream content after fetching messages.\n * This ensures content streamed while viewing another thread is preserved.\n * Includes user message, tool messages, and assistant content.\n */\n mergeAccumulatedContent$ = createEffect(() =>\n this._actions$.pipe(\n ofType(fetchMessagesFromThreadSuccess),\n mergeMap(({ threadId }) => {\n // Check if this thread is currently streaming\n const isStreaming: boolean = this._store.selectSignal(\n selectIsThreadStreaming(threadId),\n )();\n\n if (!isStreaming) {\n return [];\n }\n\n // Get accumulated content for this thread\n const streamContent = this._store.selectSignal(\n selectStreamContentForThread(threadId),\n )();\n\n return of(\n mergeAccumulatedStreamContent({\n content: streamContent?.content ?? '',\n messageId: streamContent?.messageId ?? null,\n threadId,\n userMessage: streamContent?.userMessage ?? null,\n toolMessages: streamContent?.toolMessages ?? [],\n }),\n );\n }),\n ),\n );\n\n abortResponseGeneration$ = createEffect(\n () =>\n this._actions$.pipe(\n ofType(abortResponseGeneration),\n tap(({ threadId }) => {\n this._store.dispatch(abortThreadStream({ threadId }));\n this._agentService.abortOperation(threadId);\n }),\n ),\n { dispatch: false },\n );\n\n /** Notify MCP apps that a response stream has started. */\n notifyMcpAppsStreamStart$ = createEffect(\n () =>\n this._actions$.pipe(\n ofType(startThreadStream),\n tap(() => this._mcpAppsService.notifyPendingResponse(true)),\n ),\n { dispatch: false },\n );\n\n /** Notify MCP apps that a response stream has ended (completed, aborted, or failed). */\n notifyMcpAppsStreamEnd$ = createEffect(\n () =>\n this._actions$.pipe(\n ofType(completeThreadStream, abortThreadStream, failThreadStream),\n tap(() => this._mcpAppsService.notifyPendingResponse(false)),\n ),\n { dispatch: false },\n );\n\n private _dispatchStreamForThread(\n params: { messages: unknown[] },\n threadId: string,\n actionName: string,\n ): void {\n const userMessages: UIMessage[] = params.messages as UIMessage[];\n const userMessage: UIMessage | null = userMessages.length > 0 ? userMessages[0] : null;\n\n if (!userMessage) {\n this._logger\n .get(this.LOGGER_NAME)\n .warn(\n `Something went wrong. No user message found in parameters for ${actionName} action.`,\n );\n return;\n }\n\n this._store.dispatch(startThreadStream({ threadId, userMessage }));\n }\n\n private _createShouldAbortCallback(threadId: string): () => boolean {\n return () => {\n const activeThreadId: string | null = this._activeThreadId();\n // Means streaming ongoing in background without user being on any thread (when he moves out from new thread while it streams)\n const isNewThread: boolean = activeThreadId === null;\n\n return isNewThread || activeThreadId !== threadId;\n };\n }\n\n private _getResponseStreamHandler(\n runHandle: IoAiWeb.Agents.StreamResponse,\n threadId: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Observable<any> {\n return handleResponseStream(runHandle, threadId, this._createShouldAbortCallback(threadId), this._logger.get(this.LOGGER_NAME));\n }\n\n private _handleStreamError(error: Error, threadId: string) {\n this._store.dispatch(\n failThreadStream({\n threadId,\n errorMessage: error.message,\n }),\n );\n return of(getResponseFailure({ error, threadId }));\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 mergeAccumulatedStreamContent,\n reloadResponse,\n toggleToolMessage,\n toggleToolTrace,\n updateToolCallArgs,\n} from './message.actions';\nimport {\n addToolTraceCallEntry,\n addToolTraceResultEntry,\n handleToolTraceStateOnThreadFetch,\n updateLastToolTraceEntry,\n updateMessageFields,\n updateToolTraceCallEntryArgs,\n} from './message.utils';\nimport {\n ToolTraceState,\n UIAssistantMessage,\n UIMessage,\n UIToolMessage,\n UI_MESSAGE_ROLES,\n} from './types';\nimport { MESSAGES_LOADING_STATE } from '../../enums/loading-state.enum';\nimport { MessagesLoadingType } from '../../types/loading.type';\nimport { changeActiveThread } from '../thread/thread.actions';\n\nexport type MessageReducerStateType = {\n messages: UIMessage[];\n loadingState: MessagesLoadingType;\n toolTraceState: ToolTraceState[];\n /** The thread ID that the current messages belong to */\n currentThreadId: string | null;\n};\n\nexport const initialState: MessageReducerStateType = {\n messages: [],\n loadingState: { type: MESSAGES_LOADING_STATE.NOT_STARTED },\n toolTraceState: [],\n currentThreadId: null,\n};\n\nexport const messageReducer = createReducer(\n initialState,\n\n on(changeActiveThread, (state, { threadId }) => {\n return {\n ...state,\n currentThreadId: threadId,\n };\n }),\n\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\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\n on(getResponseFailure, (state) => {\n const errorMessage: string = 'Error during response generation';\n\n const updatedToolTraceState: ToolTraceState[] = updateLastToolTraceEntry(\n state.toolTraceState,\n true,\n );\n\n return {\n ...state,\n loadingState: {\n type: MESSAGES_LOADING_STATE.ERROR,\n message: errorMessage,\n },\n toolTraceState: updatedToolTraceState,\n };\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\n on(clearMessages, (state) => {\n return {\n ...initialState,\n currentThreadId: state.currentThreadId,\n };\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\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\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\n /**\n * Merge accumulated stream content when switching to a streaming thread.\n * This adds:\n * - The user message that triggered the stream (not yet in DB)\n * - Tool messages accumulated during streaming\n * - Assistant message with accumulated content (or updates existing)\n *\n * Deduplication is critical here because:\n * - DB messages may already contain some of these messages\n * - Streaming will continue after merge, adding more content\n */\n on(\n mergeAccumulatedStreamContent,\n (state, { content, messageId, userMessage, toolMessages }) => {\n let updatedMessages = [...state.messages];\n let updatedToolTraceState = [...state.toolTraceState];\n\n // Add user message if present and not already in messages\n if (userMessage && !updatedMessages.some((m) => m.id === userMessage.id)) {\n updatedMessages.push(userMessage);\n }\n\n // Add tool messages that aren't already present\n for (const toolMsg of toolMessages) {\n if (!updatedMessages.some((m) => m.id === toolMsg.id)) {\n updatedMessages.push(toolMsg);\n updatedToolTraceState = addToolTraceCallEntry(\n {\n ...state,\n messages: updatedMessages,\n toolTraceState: updatedToolTraceState,\n },\n toolMsg,\n );\n }\n }\n\n // Handle assistant message with accumulated content\n if (content && content.trim() !== '') {\n // AG-UI provides stable server-assigned messageId via TEXT_MESSAGE_START,\n // so we can match directly — no fallback search needed.\n const existingAssistantIndex = updatedMessages.findIndex(\n (m) => m.id === messageId && m.role === UI_MESSAGE_ROLES.ASSISTANT,\n );\n\n if (existingAssistantIndex >= 0) {\n updatedMessages = updatedMessages.map((msg, idx) =>\n idx === existingAssistantIndex\n ? { ...msg, content, isLastMessage: true, isNew: true }\n : msg,\n );\n } else {\n const accumulatedMessage: UIAssistantMessage = {\n id: messageId ?? `accumulated-${Date.now()}`,\n role: UI_MESSAGE_ROLES.ASSISTANT,\n content: content,\n isLastMessage: true,\n isNew: true,\n };\n updatedMessages.push(accumulatedMessage);\n }\n }\n\n if (\n updatedMessages.length === state.messages.length &&\n updatedMessages === state.messages\n ) {\n return state;\n }\n\n updatedMessages = updatedMessages.map((msg, idx) => ({\n ...msg,\n isLastMessage: idx === updatedMessages.length - 1,\n }));\n\n return {\n ...state,\n messages: updatedMessages,\n toolTraceState: updatedToolTraceState,\n loadingState: {\n type: MESSAGES_LOADING_STATE.LOADING_RESPONSE as typeof MESSAGES_LOADING_STATE.LOADING_RESPONSE,\n },\n };\n },\n ),\n\n on(addUserMessage, (state, { message }) => {\n return {\n ...state,\n messages: [...state.messages, message],\n };\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\n on(addToolCall, (state, { message }) => {\n const existingToolCall = state.messages.some((msg) => msg.id === message.id);\n if (existingToolCall) {\n return state;\n }\n\n const updatedToolTraceState: ToolTraceState[] = addToolTraceCallEntry(state, message);\n\n return {\n ...state,\n messages: [...state.messages, message],\n toolTraceState: updatedToolTraceState,\n };\n }),\n\n on(updateToolCallArgs, (state, { toolCallId, args }) => {\n const updatedToolTraceState: ToolTraceState[] = updateToolTraceCallEntryArgs(\n state.toolTraceState,\n toolCallId,\n args,\n );\n\n return {\n ...state,\n messages: state.messages.map((msg) =>\n msg.id === toolCallId\n ? { ...msg, args: { ...(msg as UIToolMessage).args, ...args } }\n : msg,\n ),\n toolTraceState: updatedToolTraceState,\n };\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\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\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\n on(toggleToolMessage, (state, { toolMessageId, parentToolTraceId }) => {\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};\n","import { inject, Injectable } from '@angular/core';\nimport { IOConnectCore } from '@interopio/core';\n\nimport { UIPrompt } from './types';\nimport { IO_ASSIST_CONFIG, IoAssistStaticConfig } from '../../../io-assist.config';\nimport { IoAssistPrompt, IoAssistPromptCategory } from '../../../io-assist.types';\nimport { normalizeIconResource, validateIconResource } from '../../utils/icon.utils';\nimport { LoggerService } from '../logger/logger.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PromptService {\n private readonly _ioAssistConfig: IoAssistStaticConfig = inject(IO_ASSIST_CONFIG);\n private readonly _logger: LoggerService = inject(LoggerService);\n protected readonly LOGGER_NAME: string = 'PromptService';\n\n public mapConfigPromptsToUIPrompts(): UIPrompt[] {\n const defaultPrompts: IoAssistPromptCategory[] | undefined =\n this._ioAssistConfig.defaultPrompts;\n\n if (!defaultPrompts || defaultPrompts.length === 0) {\n return [];\n }\n\n return defaultPrompts.flatMap((promptCategory: IoAssistPromptCategory) => {\n const category: string | undefined = promptCategory.category;\n\n return promptCategory.prompts.map((prompt: IoAssistPrompt) =>\n this._mapIoAssistPromptToUIPrompt(prompt, category),\n );\n });\n }\n\n private _mapIoAssistPromptToUIPrompt(prompt: IoAssistPrompt, category?: string): UIPrompt {\n const uiPrompt: UIPrompt = {\n name: prompt.name,\n description: prompt.prompt,\n messages: [\n {\n role: 'user',\n content: {\n type: 'text',\n text: prompt.prompt,\n },\n },\n ],\n source: {\n mcpName: 'defaultPrompts',\n isUserDefined: false,\n },\n category,\n };\n\n if (!prompt.iconResource) {\n this.getLogger().warn(\n `No icon provided for prompt \"${prompt.name}\". Using default icon.`,\n );\n\n return uiPrompt;\n }\n\n const validation = validateIconResource(prompt.iconResource);\n\n if (!validation.valid) {\n this.getLogger().warn(\n `Invalid icon for prompt \"${prompt.name}\": ${validation.error}. Using default icon.`,\n );\n\n return uiPrompt;\n }\n\n // Normalize icon (auto-detect type if needed)\n const normalizedIcon = normalizeIconResource(prompt.iconResource, this.getLogger());\n\n uiPrompt.icon = normalizedIcon;\n\n return uiPrompt;\n }\n\n private getLogger(): IOConnectCore.Logger.API {\n return this._logger.get(this.LOGGER_NAME);\n }\n\n // TODO: subscribe to prompt updates prompts/update once we read prompts from backend. Currently,\n // prompts are only from config so no updates happen.\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 parsePromptsConfig,\n parsePromptsConfigSuccess,\n selectPrompt,\n togglePromptFavorite,\n} from './prompt.actions';\nimport { selectAllPrompts, selectFavoritePromptNames } from './prompt.selector';\nimport { UI_PREFS_KEYS } from '../../constants/ui-prefs-keys';\nimport { IOConnectService } from '../../services/io/io.service';\nimport { LoggerService } from '../../services/logger/logger.service';\nimport { OverlayService } from '../../services/overlay/overlay.service';\nimport { PromptService } from '../../services/prompt/prompt.service';\nimport { UIPrompt } from '../../services/prompt/types';\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 _overlayService: OverlayService = inject(OverlayService);\n private _store: Store = inject(Store);\n private readonly _logger: LoggerService = inject(LoggerService);\n protected readonly LOGGER_NAME: string = 'PromptEffects';\n\n private _promptState = this._store.selectSignal(selectAllPrompts);\n private _favoritePromptNames = this._store.selectSignal(selectFavoritePromptNames);\n\n parsePromptsConfig$ = createEffect(() => {\n return this._actions$.pipe(\n ofType(parsePromptsConfig),\n mergeMap(() => {\n // Fetch config prompts synchronously\n const configPrompts: UIPrompt[] = this._promptService.mapConfigPromptsToUIPrompts();\n\n // Fetch user-defined prompts and favorites from prefs\n return forkJoin({\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(({ promptsFromPrefs, favoritePromptNames }) => {\n const combinedPrompts: UIPrompt[] = [\n ...configPrompts,\n ...(promptsFromPrefs ?? []),\n ];\n\n return parsePromptsConfigSuccess({\n prompts: combinedPrompts,\n favorites: favoritePromptNames ? favoritePromptNames : [],\n });\n }),\n );\n }),\n );\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 this._logger\n .get(this.LOGGER_NAME)\n .error(\n `Failed to sync prefs: ${error instanceof Error ? error.message : String(error)}`,\n );\n return EMPTY;\n }),\n );\n }),\n ),\n { dispatch: false },\n );\n\n closeOverlayOnPromptSelect$ = createEffect(\n () =>\n this._actions$.pipe(\n ofType(selectPrompt),\n map(() => {\n this._overlayService.closeCurrentOverlay();\n }),\n ),\n { dispatch: false },\n );\n}\n","import { createReducer, on } from '@ngrx/store';\n\nimport {\n parsePromptsConfig,\n parsePromptsConfigFailure,\n parsePromptsConfigSuccess,\n selectPrompt,\n togglePromptFavorite,\n} from './prompt.actions';\nimport { LOADING_STATE } from '../../enums/loading-state.enum';\nimport { UIPrompt } from '../../services/prompt/types';\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 };\n};\n\nexport const initialState: PromptReducerStateType = {\n prompts: [],\n favoritePromptNames: [],\n selectedPrompt: null,\n loadingState: {\n fetchingState: { type: LOADING_STATE.NOT_STARTED },\n },\n};\n\nexport const promptReducer = createReducer(\n initialState,\n on(parsePromptsConfig, (state) => {\n return {\n ...state,\n loadingState: {\n ...state.loadingState,\n fetchingState: { type: LOADING_STATE.LOADING } as LoadingType,\n },\n };\n }),\n on(parsePromptsConfigSuccess, (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(parsePromptsConfigFailure, (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(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 { createReducer, on } from '@ngrx/store';\n\nimport {\n abortThreadStream,\n addStreamToolMessage,\n clearCompletionNotification,\n completeThreadStream,\n failThreadStream,\n startThreadStream,\n untrackThreadStreamState,\n updateStreamContent,\n} from './response-stream.actions';\nimport {\n createThreadStreamState,\n RESPONSE_STREAM_STATUS,\n ThreadStreamState,\n} from './response-stream.types';\nimport { UIToolMessage } from '../message/types';\n\nexport type ResponseStreamReducerStateType = {\n streams: Record<string, ThreadStreamState>;\n};\n\nexport const initialState: ResponseStreamReducerStateType = {\n streams: {},\n};\n\nexport const responseStreamReducer = createReducer(\n initialState,\n\n on(startThreadStream, (state, { threadId, userMessage }) => {\n return {\n ...state,\n streams: {\n ...state.streams,\n [threadId]: createThreadStreamState(\n threadId,\n RESPONSE_STREAM_STATUS.STREAMING,\n userMessage,\n ),\n },\n };\n }),\n\n on(updateStreamContent, (state, { threadId, content, messageId }) => {\n const existingStream = state.streams[threadId];\n\n if (!existingStream || existingStream.status !== RESPONSE_STREAM_STATUS.STREAMING) {\n return state;\n }\n\n return {\n ...state,\n streams: {\n ...state.streams,\n [threadId]: {\n ...existingStream,\n accumulatedContent: content,\n currentMessageId: messageId,\n },\n },\n };\n }),\n\n on(addStreamToolMessage, (state, { threadId, toolMessage }) => {\n const existingStream = state.streams[threadId];\n\n if (!existingStream || existingStream.status !== RESPONSE_STREAM_STATUS.STREAMING) {\n return state;\n }\n\n const existingToolIndex = existingStream.toolMessages.findIndex(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (t: any) => t.id === toolMessage.id,\n );\n\n let updatedToolMessages: UIToolMessage[] | undefined = [];\n\n if (existingToolIndex >= 0) {\n // Update existing tool message (e.g., adding result)\n updatedToolMessages = [...existingStream.toolMessages];\n updatedToolMessages[existingToolIndex] = {\n ...updatedToolMessages[existingToolIndex],\n ...toolMessage,\n };\n }\n\n if (existingToolIndex < 0) {\n updatedToolMessages = [...existingStream.toolMessages, toolMessage];\n }\n\n return {\n ...state,\n streams: {\n ...state.streams,\n [threadId]: {\n ...existingStream,\n toolMessages: updatedToolMessages,\n },\n },\n };\n }),\n\n on(completeThreadStream, (state, { threadId, shouldNotify }) => {\n const existingStream = state.streams[threadId];\n\n if (!existingStream) {\n return state;\n }\n\n return {\n ...state,\n streams: {\n ...state.streams,\n [threadId]: {\n ...existingStream,\n status: RESPONSE_STREAM_STATUS.COMPLETED,\n hasCompletionNotification: shouldNotify,\n },\n },\n };\n }),\n\n on(failThreadStream, (state, { threadId, errorMessage }) => {\n const existingStream = state.streams[threadId];\n\n if (!existingStream) {\n return state;\n }\n\n return {\n ...state,\n streams: {\n ...state.streams,\n [threadId]: {\n ...existingStream,\n status: RESPONSE_STREAM_STATUS.ERROR,\n errorMessage,\n },\n },\n };\n }),\n\n on(abortThreadStream, (state, { threadId }) => {\n const existingStream = state.streams[threadId];\n\n if (!existingStream) {\n return state;\n }\n\n return {\n ...state,\n streams: {\n ...state.streams,\n [threadId]: {\n ...existingStream,\n status: RESPONSE_STREAM_STATUS.ABORTED,\n },\n },\n };\n }),\n\n on(clearCompletionNotification, (state, { threadId }) => {\n const existingStream = state.streams[threadId];\n\n if (!existingStream) {\n return state;\n }\n\n return {\n ...state,\n streams: {\n ...state.streams,\n [threadId]: {\n ...existingStream,\n hasCompletionNotification: false,\n },\n },\n };\n }),\n\n on(untrackThreadStreamState, (state, { threadId }) => {\n if (!threadId) {\n return state;\n }\n\n const existingStream = state.streams[threadId];\n\n // Only clear if stream exists and is in a terminal state\n if (!existingStream) {\n return state;\n }\n\n const shouldClear =\n existingStream.status === RESPONSE_STREAM_STATUS.COMPLETED ||\n existingStream.status === RESPONSE_STREAM_STATUS.ERROR ||\n existingStream.status === RESPONSE_STREAM_STATUS.ABORTED;\n\n if (!shouldClear) {\n return state;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [threadId]: _removed, ...remainingStreams } = state.streams;\n\n return {\n ...state,\n streams: remainingStreams,\n };\n }),\n);\n","import { inject, Injectable } from '@angular/core';\nimport { IoAiWeb } from '@interopio/ai-web';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { mergeMap, from, of, map, catchError, switchMap, EMPTY } from 'rxjs';\n\nimport {\n renameThread,\n renameThreadSuccess,\n renameThreadFailure,\n fetchThreads,\n fetchThreadsSuccess,\n deleteThread,\n deleteThreadSuccess,\n deleteThreadFailure,\n fetchThreadsFailure,\n changeActiveThread,\n} from './thread.actions';\nimport { UIThread } from './types';\nimport { IO_ASSIST_DYNAMIC_CONFIG } from '../../../io-assist.config';\nimport { ThreadService } from '../../services/thread/thread.service';\nimport { untrackThreadStreamState } from '../response-stream/response-stream.actions';\n\n@Injectable()\nexport class ThreadEffects {\n private readonly _actions$: Actions = inject(Actions);\n private readonly _threadService: ThreadService = inject(ThreadService);\n private readonly _dynamicConfig = inject(IO_ASSIST_DYNAMIC_CONFIG);\n\n fetchThreads$ = createEffect(() =>\n this._actions$.pipe(\n ofType(fetchThreads),\n switchMap(({ agentId }) =>\n from(this._threadService.fetchThreads(agentId, this._dynamicConfig().user.id)).pipe(\n switchMap((threads: IoAiWeb.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 /**\n * When a thread is successfully deleted, remove its persisted MCP App\n * preferences so they don't accumulate indefinitely in io.prefs.\n */\n cleanupMcpAppsPrefsOnThreadDelete$ = createEffect(\n () =>\n this._actions$.pipe(\n ofType(deleteThreadSuccess),\n mergeMap(({ id }) =>\n from(this._threadService.deleteThreadState(id)).pipe(catchError(() => EMPTY)),\n ),\n ),\n { dispatch: false },\n );\n\n changeActiveThread$ = createEffect(() =>\n this._actions$.pipe(\n ofType(changeActiveThread),\n map((action) => {\n return untrackThreadStreamState({ threadId: action.threadId ?? '' });\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 { IoAiWeb } from '@interopio/ai-web';\n\nimport { UITool } from '../../store/tool/types';\nimport { IOAiWebService } from '../io-ai-web/io-ai-web.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ToolsService {\n private _ioIntelWebService: IOAiWebService = inject(IOAiWebService);\n\n public fetchTools(): Promise<IoAiWeb.Tools.Tool[]> {\n return this._ioIntelWebService.listTools();\n }\n\n public toggleTool(tool: UITool): Promise<IoAiWeb.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 { IoAiWeb } from '@interopio/ai-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: IoAiWeb.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: IoAiWeb.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 { AppLifecycleEffects } from './app-lifecycle/app-lifecycle.effects';\nimport { appLifecycleReducer, AppLifecycleStateType } from './app-lifecycle/app-lifecycle.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 {\n responseStreamReducer,\n ResponseStreamReducerStateType,\n} from './response-stream/response-stream.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 appLifecycleStore: AppLifecycleStateType;\n promptStore: PromptReducerStateType;\n toolStore: ToolReducerStateType;\n messageStore: MessageReducerStateType;\n responseStreamStore: ResponseStreamReducerStateType;\n agentStore: AgentReducerStateType;\n workingContextStore: WorkingContextReducerStateType;\n};\n\nexport const appReducers = {\n threadsStore: threadReducer,\n appLifecycleStore: appLifecycleReducer,\n promptStore: promptReducer,\n toolStore: toolReducer,\n messageStore: messageReducer,\n responseStreamStore: responseStreamReducer,\n agentStore: agentReducer,\n workingContextStore: workingContextReducer,\n};\n\nexport const appEffects: unknown[] = [\n ThreadEffects,\n AppLifecycleEffects,\n PromptEffects,\n ToolEffects,\n MessageEffects,\n AgentEffects,\n WorkingContextEffects,\n];\n","import {\n EnvironmentProviders,\n makeEnvironmentProviders,\n provideBrowserGlobalErrorListeners,\n provideZonelessChangeDetection,\n signal,\n Type,\n} from '@angular/core';\nimport { provideIoConnect } from '@interopio/ng';\nimport { provideEffects } from '@ngrx/effects';\nimport { provideStore } from '@ngrx/store';\nimport { provideStoreDevtools } from '@ngrx/store-devtools';\n\nimport {\n IO_ASSIST_CONFIG,\n IO_ASSIST_DYNAMIC_CONFIG,\n IoAssistStaticConfig,\n IoAssistDynamicConfig,\n} from './io-assist.config';\nimport { IoAssistStaticConfigSchema } from './io-assist.schema';\nimport { appEffects, appReducers } from './shared/store/app.state';\n\nexport function provideIoAssist(config: IoAssistStaticConfig): EnvironmentProviders {\n console.info('Trying to start IoAssist with configuration:', {\n agentServerBaseUrl: config.aiWebConfig?.agentServer?.baseUrl,\n defaultAgentName: config.defaultAgentName,\n });\n\n const parsedConfig = IoAssistStaticConfigSchema.parse(config);\n\n if (!parsedConfig) {\n throw new Error('Invalid IoAssist configuration provided.');\n }\n\n console.info('IoAssist configuration parsed successfully:', {\n agentServerBaseUrl: parsedConfig.aiWebConfig?.agentServer?.baseUrl,\n defaultAgentName: parsedConfig.defaultAgentName,\n });\n\n return makeEnvironmentProviders([\n { provide: IO_ASSIST_CONFIG, useValue: parsedConfig },\n {\n provide: IO_ASSIST_DYNAMIC_CONFIG,\n useFactory: () => signal<IoAssistDynamicConfig>({ user: { id: '' } }),\n },\n provideBrowserGlobalErrorListeners(),\n provideZonelessChangeDetection(),\n provideEffects(...(appEffects as Type<unknown>[])),\n provideStore(appReducers),\n provideStoreDevtools({ maxAge: 25 }),\n provideIoConnect(config.connectConfig),\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';\nexport * from './lib/io-assist.types';\nexport * from './lib/io-assist.config';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["EffectService","MODULES","COMPONENTS","BACKGROUND_STYLES","i1","DIRECTIVES","initialState"],"mappings":"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"}
|