@interopio/io-assist-ng 1.0.1 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13,6 +13,11 @@ import { RemarkModule, PrismComponent, HeadingComponent } from 'ngx-remark';
13
13
  import remarkGfm from 'remark-gfm';
14
14
  import remarkParse from 'remark-parse';
15
15
  import { unified } from 'unified';
16
+ import 'prismjs';
17
+ import 'prismjs/components/prism-markup';
18
+ import 'prismjs/components/prism-json';
19
+ import 'prismjs/components/prism-yaml';
20
+ import 'prismjs/components/prism-markdown';
16
21
  import { IoAiWebFactory } from '@interopio/ai-web';
17
22
  import { IOConnectStore, provideIoConnect } from '@interopio/ng';
18
23
  import { FormsModule } from '@angular/forms';
@@ -201,10 +206,10 @@ class LoggerService {
201
206
  }
202
207
  return this._logger.subLogger(`${LIB_NAME}.${subSystem}`);
203
208
  }
204
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: LoggerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
205
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: LoggerService, providedIn: 'root' });
209
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: LoggerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
210
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: LoggerService, providedIn: 'root' });
206
211
  }
207
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: LoggerService, decorators: [{
212
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: LoggerService, decorators: [{
208
213
  type: Injectable,
209
214
  args: [{ providedIn: 'root' }]
210
215
  }] });
@@ -340,10 +345,10 @@ class ComponentEffectManagerService {
340
345
  getLogger() {
341
346
  return this._logger.get(this.LOGGER_NAME);
342
347
  }
343
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ComponentEffectManagerService, deps: [{ token: COMPONENT_NAME }], target: i0.ɵɵFactoryTarget.Injectable });
344
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ComponentEffectManagerService });
348
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ComponentEffectManagerService, deps: [{ token: COMPONENT_NAME }], target: i0.ɵɵFactoryTarget.Injectable });
349
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ComponentEffectManagerService });
345
350
  }
346
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ComponentEffectManagerService, decorators: [{
351
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ComponentEffectManagerService, decorators: [{
347
352
  type: Injectable
348
353
  }], ctorParameters: () => [{ type: undefined, decorators: [{
349
354
  type: Inject,
@@ -369,13 +374,13 @@ class AppButtonComponent {
369
374
  buttonType = input(APP_BUTTON_TYPES.DEFAULT, ...(ngDevMode ? [{ debugName: "buttonType" }] : []));
370
375
  disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
371
376
  onClick = output();
372
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AppButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
373
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.1", type: AppButtonComponent, isStandalone: true, selector: "app-button", inputs: { buttonType: { classPropertyName: "buttonType", publicName: "buttonType", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onClick: "onClick" }, ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
377
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AppButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
378
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.22", type: AppButtonComponent, isStandalone: true, selector: "app-button", inputs: { buttonType: { classPropertyName: "buttonType", publicName: "buttonType", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onClick: "onClick" }, ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
374
379
  }
375
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AppButtonComponent, decorators: [{
380
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AppButtonComponent, decorators: [{
376
381
  type: Component,
377
382
  args: [{ selector: 'app-button', imports: [CommonModule], template: "<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" }]
378
- }] });
383
+ }], propDecorators: { buttonType: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonType", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], onClick: [{ type: i0.Output, args: ["onClick"] }] } });
379
384
 
380
385
  var APP_ICON_SIZES;
381
386
  (function (APP_ICON_SIZES) {
@@ -1154,15 +1159,15 @@ function removeDangerousAttributes(element) {
1154
1159
  this.removeIconHoverStyles();
1155
1160
  });
1156
1161
  }
1157
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AppIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1158
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: AppIconComponent, isStandalone: true, selector: "app-icon", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, iconFill: { classPropertyName: "iconFill", publicName: "iconFill", isSignal: true, isRequired: false, transformFunction: null }, disabledIconFill: { classPropertyName: "disabledIconFill", publicName: "disabledIconFill", isSignal: true, isRequired: false, transformFunction: null }, hoverIconFill: { classPropertyName: "hoverIconFill", publicName: "hoverIconFill", isSignal: true, isRequired: false, transformFunction: null }, isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: false, transformFunction: null }, isWrapped: { classPropertyName: "isWrapped", publicName: "isWrapped", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, customIcon: { classPropertyName: "customIcon", publicName: "customIcon", isSignal: true, isRequired: false, transformFunction: null }, backgroundColor: { classPropertyName: "backgroundColor", publicName: "backgroundColor", isSignal: true, isRequired: false, transformFunction: null }, hoverBackgroundShape: { classPropertyName: "hoverBackgroundShape", publicName: "hoverBackgroundShape", isSignal: true, isRequired: false, transformFunction: null }, hoverBackgroundColor: { classPropertyName: "hoverBackgroundColor", publicName: "hoverBackgroundColor", isSignal: true, isRequired: false, transformFunction: null }, isHoveredExternal: { classPropertyName: "isHoveredExternal", publicName: "isHoveredExternal", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onClick: "onClick" }, host: { listeners: { "click": "handleClick($event)", "keydown": "handleKeyDown($event)", "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" }, properties: { "class": "hostClasses()", "style": "hostStyles()", "style.width.px": "isWrapped() ? sizeAsNumber() * 2 : sizeAsNumber()", "style.height.px": "isWrapped() ? sizeAsNumber() * 2 : sizeAsNumber()", "attr.title": "getTitle()", "attr.tabindex": "tabIndex()" } }, providers: [
1162
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AppIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1163
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.22", type: AppIconComponent, isStandalone: true, selector: "app-icon", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, iconFill: { classPropertyName: "iconFill", publicName: "iconFill", isSignal: true, isRequired: false, transformFunction: null }, disabledIconFill: { classPropertyName: "disabledIconFill", publicName: "disabledIconFill", isSignal: true, isRequired: false, transformFunction: null }, hoverIconFill: { classPropertyName: "hoverIconFill", publicName: "hoverIconFill", isSignal: true, isRequired: false, transformFunction: null }, isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: false, transformFunction: null }, isWrapped: { classPropertyName: "isWrapped", publicName: "isWrapped", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, customIcon: { classPropertyName: "customIcon", publicName: "customIcon", isSignal: true, isRequired: false, transformFunction: null }, backgroundColor: { classPropertyName: "backgroundColor", publicName: "backgroundColor", isSignal: true, isRequired: false, transformFunction: null }, hoverBackgroundShape: { classPropertyName: "hoverBackgroundShape", publicName: "hoverBackgroundShape", isSignal: true, isRequired: false, transformFunction: null }, hoverBackgroundColor: { classPropertyName: "hoverBackgroundColor", publicName: "hoverBackgroundColor", isSignal: true, isRequired: false, transformFunction: null }, isHoveredExternal: { classPropertyName: "isHoveredExternal", publicName: "isHoveredExternal", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onClick: "onClick" }, host: { listeners: { "click": "handleClick($event)", "keydown": "handleKeyDown($event)", "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" }, properties: { "class": "hostClasses()", "style": "hostStyles()", "style.width.px": "isWrapped() ? sizeAsNumber() * 2 : sizeAsNumber()", "style.height.px": "isWrapped() ? sizeAsNumber() * 2 : sizeAsNumber()", "attr.title": "getTitle()", "attr.tabindex": "tabIndex()" } }, providers: [
1159
1164
  {
1160
1165
  provide: ComponentEffectManagerService,
1161
1166
  useFactory: () => new ComponentEffectManagerService('AppIconComponent'),
1162
1167
  },
1163
1168
  ], viewQueries: [{ propertyName: "iconDivRef", first: true, predicate: ["iconDiv"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<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>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
1164
1169
  }
1165
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AppIconComponent, decorators: [{
1170
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AppIconComponent, decorators: [{
1166
1171
  type: Component,
1167
1172
  args: [{ selector: 'app-icon', imports: [CommonModule], host: {
1168
1173
  '[class]': 'hostClasses()',
@@ -1181,7 +1186,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
1181
1186
  useFactory: () => new ComponentEffectManagerService('AppIconComponent'),
1182
1187
  },
1183
1188
  ], template: "<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>" }]
1184
- }], propDecorators: { iconDivRef: [{
1189
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: true }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], iconFill: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconFill", required: false }] }], disabledIconFill: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledIconFill", required: false }] }], hoverIconFill: [{ type: i0.Input, args: [{ isSignal: true, alias: "hoverIconFill", required: false }] }], isDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "isDisabled", required: false }] }], isWrapped: [{ type: i0.Input, args: [{ isSignal: true, alias: "isWrapped", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], customIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "customIcon", required: false }] }], backgroundColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "backgroundColor", required: false }] }], hoverBackgroundShape: [{ type: i0.Input, args: [{ isSignal: true, alias: "hoverBackgroundShape", required: false }] }], hoverBackgroundColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "hoverBackgroundColor", required: false }] }], onClick: [{ type: i0.Output, args: ["onClick"] }], isHoveredExternal: [{ type: i0.Input, args: [{ isSignal: true, alias: "isHoveredExternal", required: false }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], iconDivRef: [{
1185
1190
  type: ViewChild,
1186
1191
  args: ['iconDiv', { static: false }]
1187
1192
  }] } });
@@ -1230,16 +1235,16 @@ class AppPanelComponent {
1230
1235
  container.clear();
1231
1236
  return container.createComponent(component);
1232
1237
  }
1233
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AppPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1234
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: AppPanelComponent, isStandalone: true, selector: "app-panel", inputs: { isHeaderCloseButtonDisplayed: { classPropertyName: "isHeaderCloseButtonDisplayed", publicName: "isHeaderCloseButtonDisplayed", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, htmlContent: { classPropertyName: "htmlContent", publicName: "htmlContent", isSignal: true, isRequired: false, transformFunction: null }, footerButtons: { classPropertyName: "footerButtons", publicName: "footerButtons", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onClose: "onClose", onSubmit: "onSubmit" }, viewQueries: [{ propertyName: "panelBodyContent", first: true, predicate: ["panelBodyContent"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<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>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["buttonType", "disabled"], outputs: ["onClick"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }] });
1238
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AppPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1239
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.22", type: AppPanelComponent, isStandalone: true, selector: "app-panel", inputs: { isHeaderCloseButtonDisplayed: { classPropertyName: "isHeaderCloseButtonDisplayed", publicName: "isHeaderCloseButtonDisplayed", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, htmlContent: { classPropertyName: "htmlContent", publicName: "htmlContent", isSignal: true, isRequired: false, transformFunction: null }, footerButtons: { classPropertyName: "footerButtons", publicName: "footerButtons", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onClose: "onClose", onSubmit: "onSubmit" }, viewQueries: [{ propertyName: "panelBodyContent", first: true, predicate: ["panelBodyContent"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<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>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["buttonType", "disabled"], outputs: ["onClick"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }] });
1235
1240
  }
1236
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AppPanelComponent, decorators: [{
1241
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AppPanelComponent, decorators: [{
1237
1242
  type: Component,
1238
1243
  args: [{ selector: 'app-panel', imports: [...MODULES$n, ...COMPONENTS$n], template: "<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>" }]
1239
1244
  }], propDecorators: { panelBodyContent: [{
1240
1245
  type: ViewChild,
1241
1246
  args: ['panelBodyContent', { read: ViewContainerRef, static: false }]
1242
- }] } });
1247
+ }], isHeaderCloseButtonDisplayed: [{ type: i0.Input, args: [{ isSignal: true, alias: "isHeaderCloseButtonDisplayed", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], htmlContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "htmlContent", required: false }] }], footerButtons: [{ type: i0.Input, args: [{ isSignal: true, alias: "footerButtons", required: false }] }], onClose: [{ type: i0.Output, args: ["onClose"] }], onSubmit: [{ type: i0.Output, args: ["onSubmit"] }] } });
1243
1248
 
1244
1249
  /**
1245
1250
  * Service to manage overlay states such as:
@@ -1327,10 +1332,10 @@ class OverlayService {
1327
1332
  this._overlayStack.splice(index, 1);
1328
1333
  }
1329
1334
  }
1330
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: OverlayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1331
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: OverlayService, providedIn: 'root' });
1335
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: OverlayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1336
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: OverlayService, providedIn: 'root' });
1332
1337
  }
1333
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: OverlayService, decorators: [{
1338
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: OverlayService, decorators: [{
1334
1339
  type: Injectable,
1335
1340
  args: [{
1336
1341
  providedIn: 'root',
@@ -1515,10 +1520,10 @@ class ResponsiveUIService {
1515
1520
  matches(query) {
1516
1521
  return window.matchMedia(query).matches;
1517
1522
  }
1518
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ResponsiveUIService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1519
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ResponsiveUIService, providedIn: 'root' });
1523
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ResponsiveUIService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1524
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ResponsiveUIService, providedIn: 'root' });
1520
1525
  }
1521
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ResponsiveUIService, decorators: [{
1526
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ResponsiveUIService, decorators: [{
1522
1527
  type: Injectable,
1523
1528
  args: [{
1524
1529
  providedIn: 'root',
@@ -1699,10 +1704,10 @@ class MessageFacade {
1699
1704
  dispatchToggleToolMessage(toolMessageId, parentToolTraceId) {
1700
1705
  this._store.dispatch(toggleToolMessage({ toolMessageId, parentToolTraceId }));
1701
1706
  }
1702
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: MessageFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1703
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: MessageFacade });
1707
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: MessageFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1708
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: MessageFacade });
1704
1709
  }
1705
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: MessageFacade, decorators: [{
1710
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: MessageFacade, decorators: [{
1706
1711
  type: Injectable
1707
1712
  }] });
1708
1713
 
@@ -1751,10 +1756,10 @@ class PromptFacade {
1751
1756
  dispatchToggleFavoritePrompt(name) {
1752
1757
  this._store.dispatch(togglePromptFavorite({ name }));
1753
1758
  }
1754
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PromptFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1755
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PromptFacade, providedIn: 'root' });
1759
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: PromptFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1760
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: PromptFacade, providedIn: 'root' });
1756
1761
  }
1757
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PromptFacade, decorators: [{
1762
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: PromptFacade, decorators: [{
1758
1763
  type: Injectable,
1759
1764
  args: [{
1760
1765
  providedIn: 'root',
@@ -2379,16 +2384,16 @@ class AnimationEffectDirective {
2379
2384
  onMouseMove(event) {
2380
2385
  this.animationStrategy.onMouseMove(event);
2381
2386
  }
2382
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AnimationEffectDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2383
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.1", type: AnimationEffectDirective, isStandalone: true, selector: "[animationEffect]", inputs: { animationEffect: { classPropertyName: "animationEffect", publicName: "animationEffect", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { animationStarted: "animationStarted", animationCompleted: "animationCompleted" }, host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()", "mousemove": "onMouseMove($event)" } }, ngImport: i0 });
2387
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AnimationEffectDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2388
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.22", type: AnimationEffectDirective, isStandalone: true, selector: "[animationEffect]", inputs: { animationEffect: { classPropertyName: "animationEffect", publicName: "animationEffect", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { animationStarted: "animationStarted", animationCompleted: "animationCompleted" }, host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()", "mousemove": "onMouseMove($event)" } }, ngImport: i0 });
2384
2389
  }
2385
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AnimationEffectDirective, decorators: [{
2390
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AnimationEffectDirective, decorators: [{
2386
2391
  type: Directive,
2387
2392
  args: [{
2388
2393
  selector: '[animationEffect]',
2389
2394
  standalone: true,
2390
2395
  }]
2391
- }], propDecorators: { onMouseEnter: [{
2396
+ }], propDecorators: { animationEffect: [{ type: i0.Input, args: [{ isSignal: true, alias: "animationEffect", required: false }] }], animationStarted: [{ type: i0.Output, args: ["animationStarted"] }], animationCompleted: [{ type: i0.Output, args: ["animationCompleted"] }], onMouseEnter: [{
2392
2397
  type: HostListener,
2393
2398
  args: ['mouseenter']
2394
2399
  }], onMouseLeave: [{
@@ -2548,10 +2553,10 @@ class ResponseStreamFacade {
2548
2553
  dispatchUntrackThreadStreamState(threadId) {
2549
2554
  this._store.dispatch(untrackThreadStreamState({ threadId }));
2550
2555
  }
2551
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ResponseStreamFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2552
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ResponseStreamFacade, providedIn: 'root' });
2556
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ResponseStreamFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2557
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ResponseStreamFacade, providedIn: 'root' });
2553
2558
  }
2554
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ResponseStreamFacade, decorators: [{
2559
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ResponseStreamFacade, decorators: [{
2555
2560
  type: Injectable,
2556
2561
  args: [{
2557
2562
  providedIn: 'root',
@@ -2629,10 +2634,10 @@ class ThreadFacade {
2629
2634
  dispatchChangeActiveThread(threadId) {
2630
2635
  this._store.dispatch(changeActiveThread({ threadId }));
2631
2636
  }
2632
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ThreadFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2633
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ThreadFacade, providedIn: 'root' });
2637
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ThreadFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2638
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ThreadFacade, providedIn: 'root' });
2634
2639
  }
2635
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ThreadFacade, decorators: [{
2640
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ThreadFacade, decorators: [{
2636
2641
  type: Injectable,
2637
2642
  args: [{
2638
2643
  providedIn: 'root',
@@ -2681,10 +2686,10 @@ class WorkingContextFacade {
2681
2686
  dispatchFetchIsWorkingContextEnabled() {
2682
2687
  this._store.dispatch(fetchIsWorkingContextEnabled());
2683
2688
  }
2684
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: WorkingContextFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2685
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: WorkingContextFacade });
2689
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: WorkingContextFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2690
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: WorkingContextFacade });
2686
2691
  }
2687
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: WorkingContextFacade, decorators: [{
2692
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: WorkingContextFacade, decorators: [{
2688
2693
  type: Injectable
2689
2694
  }] });
2690
2695
 
@@ -2693,13 +2698,13 @@ const COMPONENTS$m = [PrismComponent, HeadingComponent];
2693
2698
  class AppMdFormatterComponent {
2694
2699
  processor = unified().use(remarkGfm).use(remarkParse);
2695
2700
  content = input.required(...(ngDevMode ? [{ debugName: "content" }] : []));
2696
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AppMdFormatterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2697
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.1", type: AppMdFormatterComponent, isStandalone: true, selector: "app-md-formatter", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<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", styles: [":host{width:100%;max-width:100%;box-sizing:border-box;display:flex;flex-direction:column;padding:0 2px}:host ::ng-deep remark-node *{padding:8px 0}:host ::ng-deep h1,:host ::ng-deep h2,:host ::ng-deep h3,:host ::ng-deep h4,:host ::ng-deep h5,:host ::ng-deep h6{font-size:revert;font-weight:revert;margin:revert;font-family:Inter}:host ::ng-deep remark-node span:not(h1 span,h2 span,h3 span,h4 span,h5 span,h6 span){font-size:16px;font-style:normal;font-weight:400;line-height:19px}.io-assist-code-theme{position:relative;border-radius:16px;background:var(--color-app-background);z-index:1;display:block}.io-assist-code-theme:before{content:\"\";position:absolute;border-radius:16px;background:linear-gradient(90deg,var(--color-app-accent-color-1),var(--color-app-accent-color-2));z-index:0;top:14px;left:-2px;width:calc(100% + 4px);height:calc(100% - 28px)}.io-assist-code-theme ::ng-deep pre{position:relative;padding:12px;border-radius:16px;border:none}.io-assist-code-theme ::ng-deep code{display:block;white-space:pre-wrap;word-break:break-word;max-width:100%;box-sizing:border-box}:host ::ng-deep remark-node table{margin:8px 0;position:relative;z-index:1}:host ::ng-deep remark-node table:before{content:\"\";background-image:linear-gradient(90deg,var(--color-app-accent-color-1),var(--color-app-accent-color-2));position:absolute;z-index:-1;top:-2px;left:-2px;width:calc(100% + 4px);height:calc(100% + 4px)}:host ::ng-deep remark-node table thead{text-align:left;font-weight:600;color:var(--color-text-states-active);background-color:var(--color-proto-background);z-index:1;width:100%;position:relative}:host ::ng-deep remark-node table thead th{padding:12px 16px}:host ::ng-deep remark-node tbody tr:nth-child(2n){background:var(--color-app-background-secondary)}:host ::ng-deep remark-node tbody tr:nth-child(odd){background:var(--color-app-background)}:host ::ng-deep remark-node td{padding:12px 16px;color:var(--color-text-default)}:host ::ng-deep remark-node ul,:host ::ng-deep remark-node ol{padding-left:20px;margin:8px 0;font-size:14px;font-style:normal;font-weight:400;line-height:19px;color:var(--color-text-default)}:host ::ng-deep remark-node ol{list-style-type:decimal}:host ::ng-deep remark-node ul{list-style-type:disc}:host ::ng-deep remark-node li{padding:4px 0}:host ::ng-deep remark-node blockquote{padding:16px;margin:16px 0;border-radius:16px;color:var(--color-text-default);display:flex;flex-direction:column;gap:4px;position:relative;border:1px solid var(--color-app-accent-color-1)}:host ::ng-deep remark-node hr{border:none;z-index:1;position:relative;margin:8px 0;padding:8px 0}:host ::ng-deep remark-node hr:before{content:\"\";background-image:linear-gradient(90deg,var(--color-app-accent-color-1),var(--color-app-accent-color-2));position:absolute;z-index:-1;top:0;left:0;width:100%;height:1px}:host ::ng-deep remark-node p{font-size:16px;font-style:normal;font-weight:400;line-height:19px!important}:host ::ng-deep remark-node p strong span{font-weight:600}\n"], dependencies: [{ kind: "ngmodule", type: RemarkModule }, { kind: "component", type: i1$1.RemarkComponent, selector: "remark", inputs: ["markdown", "processor", "debug"] }, { kind: "directive", type: i1$1.RemarkTemplateDirective, selector: "[remarkTemplate]", inputs: ["remarkTemplate"] }, { kind: "component", type: i1$1.RemarkNodeComponent, selector: "remark-node, [remarkNode]", inputs: ["remarkNode"] }, { kind: "component", type: PrismComponent, selector: "remark-prism", inputs: ["code", "language"] }, { kind: "component", type: HeadingComponent, selector: "remark-heading", inputs: ["node", "prefix", "maintainCase", "linkClass", "linkText"] }] });
2701
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AppMdFormatterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2702
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.22", type: AppMdFormatterComponent, isStandalone: true, selector: "app-md-formatter", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<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", styles: [":host{width:100%;max-width:100%;box-sizing:border-box;display:flex;flex-direction:column;padding:0 2px}:host ::ng-deep remark-node *{padding:8px 0}:host ::ng-deep h1,:host ::ng-deep h2,:host ::ng-deep h3,:host ::ng-deep h4,:host ::ng-deep h5,:host ::ng-deep h6{font-size:revert;font-weight:revert;margin:revert;font-family:Inter}:host ::ng-deep remark-node span:not(h1 span,h2 span,h3 span,h4 span,h5 span,h6 span){font-size:16px;font-style:normal;font-weight:400;line-height:19px}.io-assist-code-theme{position:relative;border-radius:16px;background:var(--color-app-background);z-index:1;display:block}.io-assist-code-theme:before{content:\"\";position:absolute;border-radius:16px;background:linear-gradient(90deg,var(--color-app-accent-color-1),var(--color-app-accent-color-2));z-index:0;top:14px;left:-2px;width:calc(100% + 4px);height:calc(100% - 28px)}.io-assist-code-theme ::ng-deep pre{position:relative;padding:12px;border-radius:16px;border:none}.io-assist-code-theme ::ng-deep code{display:block;white-space:pre-wrap;word-break:break-word;max-width:100%;box-sizing:border-box}:host ::ng-deep remark-node table{margin:8px 0;position:relative;z-index:1}:host ::ng-deep remark-node table:before{content:\"\";background-image:linear-gradient(90deg,var(--color-app-accent-color-1),var(--color-app-accent-color-2));position:absolute;z-index:-1;top:-2px;left:-2px;width:calc(100% + 4px);height:calc(100% + 4px)}:host ::ng-deep remark-node table thead{text-align:left;font-weight:600;color:var(--color-text-states-active);background-color:var(--color-proto-background);z-index:1;width:100%;position:relative}:host ::ng-deep remark-node table thead th{padding:12px 16px}:host ::ng-deep remark-node tbody tr:nth-child(2n){background:var(--color-app-background-secondary)}:host ::ng-deep remark-node tbody tr:nth-child(odd){background:var(--color-app-background)}:host ::ng-deep remark-node td{padding:12px 16px;color:var(--color-text-default)}:host ::ng-deep remark-node ul,:host ::ng-deep remark-node ol{padding-left:20px;margin:8px 0;font-size:14px;font-style:normal;font-weight:400;line-height:19px;color:var(--color-text-default)}:host ::ng-deep remark-node ol{list-style-type:decimal}:host ::ng-deep remark-node ul{list-style-type:disc}:host ::ng-deep remark-node li{padding:4px 0}:host ::ng-deep remark-node blockquote{padding:16px;margin:16px 0;border-radius:16px;color:var(--color-text-default);display:flex;flex-direction:column;gap:4px;position:relative;border:1px solid var(--color-app-accent-color-1)}:host ::ng-deep remark-node hr{border:none;z-index:1;position:relative;margin:8px 0;padding:8px 0}:host ::ng-deep remark-node hr:before{content:\"\";background-image:linear-gradient(90deg,var(--color-app-accent-color-1),var(--color-app-accent-color-2));position:absolute;z-index:-1;top:0;left:0;width:100%;height:1px}:host ::ng-deep remark-node p{font-size:16px;font-style:normal;font-weight:400;line-height:19px!important}:host ::ng-deep remark-node p strong span{font-weight:600}\n"], dependencies: [{ kind: "ngmodule", type: RemarkModule }, { kind: "component", type: i1$1.RemarkComponent, selector: "remark", inputs: ["markdown", "processor", "debug"] }, { kind: "directive", type: i1$1.RemarkTemplateDirective, selector: "[remarkTemplate]", inputs: ["remarkTemplate"] }, { kind: "component", type: i1$1.RemarkNodeComponent, selector: "remark-node, [remarkNode]", inputs: ["remarkNode"] }, { kind: "component", type: PrismComponent, selector: "remark-prism", inputs: ["code", "language"] }, { kind: "component", type: HeadingComponent, selector: "remark-heading", inputs: ["node", "prefix", "maintainCase", "linkClass", "linkText"] }] });
2698
2703
  }
2699
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AppMdFormatterComponent, decorators: [{
2704
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AppMdFormatterComponent, decorators: [{
2700
2705
  type: Component,
2701
2706
  args: [{ selector: 'app-md-formatter', imports: [...MODULES$m, ...COMPONENTS$m], template: "<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", styles: [":host{width:100%;max-width:100%;box-sizing:border-box;display:flex;flex-direction:column;padding:0 2px}:host ::ng-deep remark-node *{padding:8px 0}:host ::ng-deep h1,:host ::ng-deep h2,:host ::ng-deep h3,:host ::ng-deep h4,:host ::ng-deep h5,:host ::ng-deep h6{font-size:revert;font-weight:revert;margin:revert;font-family:Inter}:host ::ng-deep remark-node span:not(h1 span,h2 span,h3 span,h4 span,h5 span,h6 span){font-size:16px;font-style:normal;font-weight:400;line-height:19px}.io-assist-code-theme{position:relative;border-radius:16px;background:var(--color-app-background);z-index:1;display:block}.io-assist-code-theme:before{content:\"\";position:absolute;border-radius:16px;background:linear-gradient(90deg,var(--color-app-accent-color-1),var(--color-app-accent-color-2));z-index:0;top:14px;left:-2px;width:calc(100% + 4px);height:calc(100% - 28px)}.io-assist-code-theme ::ng-deep pre{position:relative;padding:12px;border-radius:16px;border:none}.io-assist-code-theme ::ng-deep code{display:block;white-space:pre-wrap;word-break:break-word;max-width:100%;box-sizing:border-box}:host ::ng-deep remark-node table{margin:8px 0;position:relative;z-index:1}:host ::ng-deep remark-node table:before{content:\"\";background-image:linear-gradient(90deg,var(--color-app-accent-color-1),var(--color-app-accent-color-2));position:absolute;z-index:-1;top:-2px;left:-2px;width:calc(100% + 4px);height:calc(100% + 4px)}:host ::ng-deep remark-node table thead{text-align:left;font-weight:600;color:var(--color-text-states-active);background-color:var(--color-proto-background);z-index:1;width:100%;position:relative}:host ::ng-deep remark-node table thead th{padding:12px 16px}:host ::ng-deep remark-node tbody tr:nth-child(2n){background:var(--color-app-background-secondary)}:host ::ng-deep remark-node tbody tr:nth-child(odd){background:var(--color-app-background)}:host ::ng-deep remark-node td{padding:12px 16px;color:var(--color-text-default)}:host ::ng-deep remark-node ul,:host ::ng-deep remark-node ol{padding-left:20px;margin:8px 0;font-size:14px;font-style:normal;font-weight:400;line-height:19px;color:var(--color-text-default)}:host ::ng-deep remark-node ol{list-style-type:decimal}:host ::ng-deep remark-node ul{list-style-type:disc}:host ::ng-deep remark-node li{padding:4px 0}:host ::ng-deep remark-node blockquote{padding:16px;margin:16px 0;border-radius:16px;color:var(--color-text-default);display:flex;flex-direction:column;gap:4px;position:relative;border:1px solid var(--color-app-accent-color-1)}:host ::ng-deep remark-node hr{border:none;z-index:1;position:relative;margin:8px 0;padding:8px 0}:host ::ng-deep remark-node hr:before{content:\"\";background-image:linear-gradient(90deg,var(--color-app-accent-color-1),var(--color-app-accent-color-2));position:absolute;z-index:-1;top:0;left:0;width:100%;height:1px}:host ::ng-deep remark-node p{font-size:16px;font-style:normal;font-weight:400;line-height:19px!important}:host ::ng-deep remark-node p strong span{font-weight:600}\n"] }]
2702
- }] });
2707
+ }], propDecorators: { content: [{ type: i0.Input, args: [{ isSignal: true, alias: "content", required: true }] }] } });
2703
2708
 
2704
2709
  const textToJSONMarkdown = (content) => {
2705
2710
  return '```json\n' + JSON.stringify(content, null, 2) + '\n```';
@@ -2777,10 +2782,10 @@ class SubscriptionCleanupService {
2777
2782
  getLogger() {
2778
2783
  return this._logger.get(this.LOGGER_NAME);
2779
2784
  }
2780
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: SubscriptionCleanupService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2781
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: SubscriptionCleanupService });
2785
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: SubscriptionCleanupService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2786
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: SubscriptionCleanupService });
2782
2787
  }
2783
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: SubscriptionCleanupService, decorators: [{
2788
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: SubscriptionCleanupService, decorators: [{
2784
2789
  type: Injectable
2785
2790
  }], ctorParameters: () => [] });
2786
2791
 
@@ -2861,10 +2866,10 @@ class AppLifecycleFacade {
2861
2866
  dispatchInitAppCoreServices() {
2862
2867
  return this.store.dispatch(initialAppCoreServicesInit());
2863
2868
  }
2864
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AppLifecycleFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2865
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AppLifecycleFacade, providedIn: 'root' });
2869
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AppLifecycleFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2870
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AppLifecycleFacade, providedIn: 'root' });
2866
2871
  }
2867
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AppLifecycleFacade, decorators: [{
2872
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AppLifecycleFacade, decorators: [{
2868
2873
  type: Injectable,
2869
2874
  args: [{
2870
2875
  providedIn: 'root',
@@ -2928,8 +2933,10 @@ class IOConnectService {
2928
2933
  this._isUnsubscribed.set(true);
2929
2934
  }
2930
2935
  async initializeIOIntelWeb(config) {
2931
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
2932
- window.io = this._ioConnect;
2936
+ // Debug-only global. NOT required by IoAiWebFactory — the factory takes the
2937
+ // io.Connect instance as a direct argument and never reads `window.io`. Host
2938
+ // apps that need a global set their own. Commented out to verify nothing depends on it.
2939
+ // (window as any).io = this._ioConnect;
2933
2940
  return IoAiWebFactory(this._ioConnect, config);
2934
2941
  }
2935
2942
  async isModalsAvailable() {
@@ -2976,10 +2983,10 @@ class IOConnectService {
2976
2983
  getLogger() {
2977
2984
  return this._logger.get(this.LOGGER_NAME);
2978
2985
  }
2979
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: IOConnectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2980
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: IOConnectService, providedIn: 'root' });
2986
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: IOConnectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2987
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: IOConnectService, providedIn: 'root' });
2981
2988
  }
2982
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: IOConnectService, decorators: [{
2989
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: IOConnectService, decorators: [{
2983
2990
  type: Injectable,
2984
2991
  args: [{ providedIn: 'root' }]
2985
2992
  }], ctorParameters: () => [] });
@@ -3158,10 +3165,10 @@ class ElicitationService {
3158
3165
  getLogger() {
3159
3166
  return this._logger.get(this.LOGGER_NAME);
3160
3167
  }
3161
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ElicitationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3162
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ElicitationService, providedIn: 'root' });
3168
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ElicitationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3169
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ElicitationService, providedIn: 'root' });
3163
3170
  }
3164
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ElicitationService, decorators: [{
3171
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ElicitationService, decorators: [{
3165
3172
  type: Injectable,
3166
3173
  args: [{
3167
3174
  providedIn: 'root',
@@ -3208,10 +3215,10 @@ class AgentFacade {
3208
3215
  dispatchSelectAgent(agentId) {
3209
3216
  this._store.dispatch(selectAgent({ agentId }));
3210
3217
  }
3211
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AgentFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3212
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AgentFacade, providedIn: 'root' });
3218
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AgentFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3219
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AgentFacade, providedIn: 'root' });
3213
3220
  }
3214
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AgentFacade, decorators: [{
3221
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AgentFacade, decorators: [{
3215
3222
  type: Injectable,
3216
3223
  args: [{
3217
3224
  providedIn: 'root',
@@ -3321,10 +3328,10 @@ class AgentService {
3321
3328
  },
3322
3329
  };
3323
3330
  }
3324
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AgentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3325
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AgentService, providedIn: 'root' });
3331
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AgentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3332
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AgentService, providedIn: 'root' });
3326
3333
  }
3327
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AgentService, decorators: [{
3334
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AgentService, decorators: [{
3328
3335
  type: Injectable,
3329
3336
  args: [{
3330
3337
  providedIn: 'root',
@@ -3544,10 +3551,10 @@ class SamplingService {
3544
3551
  getLogger() {
3545
3552
  return this._logger.get(this.LOGGER_NAME);
3546
3553
  }
3547
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: SamplingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3548
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: SamplingService, providedIn: 'root' });
3554
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: SamplingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3555
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: SamplingService, providedIn: 'root' });
3549
3556
  }
3550
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: SamplingService, decorators: [{
3557
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: SamplingService, decorators: [{
3551
3558
  type: Injectable,
3552
3559
  args: [{
3553
3560
  providedIn: 'root',
@@ -3767,17 +3774,18 @@ class McpAppsService {
3767
3774
  _logger() {
3768
3775
  return this._loggerService.get('McpAppsService');
3769
3776
  }
3770
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: McpAppsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3771
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: McpAppsService, providedIn: 'root' });
3777
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: McpAppsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3778
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: McpAppsService, providedIn: 'root' });
3772
3779
  }
3773
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: McpAppsService, decorators: [{
3780
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: McpAppsService, decorators: [{
3774
3781
  type: Injectable,
3775
3782
  args: [{
3776
3783
  providedIn: 'root',
3777
3784
  }]
3778
3785
  }] });
3779
3786
 
3780
- /* eslint-disable @typescript-eslint/no-explicit-any */
3787
+ // Re-enable the directive below if the `(window as any).intel` debug line is restored.
3788
+ // /* eslint-disable @typescript-eslint/no-explicit-any */
3781
3789
  class IOAiWebService {
3782
3790
  _ioConnectService = inject(IOConnectService);
3783
3791
  _samplingService = inject(SamplingService);
@@ -3828,7 +3836,9 @@ class IOAiWebService {
3828
3836
  .get(this.LOGGER_NAME)
3829
3837
  .debug(`IO Intel Web API initialized: ${JSON.stringify(ioIntelWebAPI)}`);
3830
3838
  if (ioIntelWebAPI) {
3831
- window.intel = ioIntelWebAPI; // For debugging purposes
3839
+ // Debug-only global, never read by app/lib code. Commented out to verify
3840
+ // nothing depends on it.
3841
+ // (window as any).intel = ioIntelWebAPI; // For debugging purposes
3832
3842
  this._ioIntelWeb.set(ioIntelWebAPI);
3833
3843
  this._loadingState.set({ type: LOADING_STATE.SUCCESS });
3834
3844
  this._mcpAppsService.attach(ioIntelWebAPI);
@@ -3929,10 +3939,10 @@ class IOAiWebService {
3929
3939
  },
3930
3940
  };
3931
3941
  }
3932
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: IOAiWebService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3933
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: IOAiWebService, providedIn: 'root' });
3942
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: IOAiWebService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3943
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: IOAiWebService, providedIn: 'root' });
3934
3944
  }
3935
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: IOAiWebService, decorators: [{
3945
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: IOAiWebService, decorators: [{
3936
3946
  type: Injectable,
3937
3947
  args: [{
3938
3948
  providedIn: 'root',
@@ -3950,10 +3960,10 @@ class WorkingContextService {
3950
3960
  isWorkingContextEnabled() {
3951
3961
  return Promise.resolve(this._ioIntelWebService.isWorkingContextEnabled());
3952
3962
  }
3953
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: WorkingContextService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3954
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: WorkingContextService, providedIn: 'root' });
3963
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: WorkingContextService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3964
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: WorkingContextService, providedIn: 'root' });
3955
3965
  }
3956
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: WorkingContextService, decorators: [{
3966
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: WorkingContextService, decorators: [{
3957
3967
  type: Injectable,
3958
3968
  args: [{
3959
3969
  providedIn: 'root',
@@ -3986,10 +3996,10 @@ class WorkingContextPanelComponent {
3986
3996
  textToJSONMarkdown() {
3987
3997
  return textToJSONMarkdown(this.workingContext());
3988
3998
  }
3989
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: WorkingContextPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3990
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.1", type: WorkingContextPanelComponent, isStandalone: true, selector: "working-context-panel", providers: [WorkingContextFacade, SubscriptionCleanupService], ngImport: i0, template: "<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", styles: [":host ::ng-deep remark-prism.io-assist-code-theme>pre{height:30vh;max-height:620px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }, { kind: "component", type: AppMdFormatterComponent, selector: "app-md-formatter", inputs: ["content"] }] });
3999
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: WorkingContextPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4000
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.22", type: WorkingContextPanelComponent, isStandalone: true, selector: "working-context-panel", providers: [WorkingContextFacade, SubscriptionCleanupService], ngImport: i0, template: "<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", styles: [":host ::ng-deep remark-prism.io-assist-code-theme>pre{height:30vh;max-height:620px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }, { kind: "component", type: AppMdFormatterComponent, selector: "app-md-formatter", inputs: ["content"] }] });
3991
4001
  }
3992
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: WorkingContextPanelComponent, decorators: [{
4002
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: WorkingContextPanelComponent, decorators: [{
3993
4003
  type: Component,
3994
4004
  args: [{ selector: 'working-context-panel', imports: [...MODULES$l, ...COMPONENTS$l], providers: [WorkingContextFacade, SubscriptionCleanupService], template: "<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", styles: [":host ::ng-deep remark-prism.io-assist-code-theme>pre{height:30vh;max-height:620px}\n"] }]
3995
4005
  }] });
@@ -4040,10 +4050,10 @@ class HeaderComponent {
4040
4050
  ],
4041
4051
  });
4042
4052
  }
4043
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: HeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4044
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: HeaderComponent, isStandalone: true, selector: "header", host: { styleAttribute: "display: flex; width: 100%;" }, providers: [WorkingContextFacade], ngImport: i0, template: "@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>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }, { kind: "directive", type: AnimationEffectDirective, selector: "[animationEffect]", inputs: ["animationEffect"], outputs: ["animationStarted", "animationCompleted"] }] });
4053
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: HeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4054
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.22", type: HeaderComponent, isStandalone: true, selector: "header", host: { styleAttribute: "display: flex; width: 100%;" }, providers: [WorkingContextFacade], ngImport: i0, template: "@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>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }, { kind: "directive", type: AnimationEffectDirective, selector: "[animationEffect]", inputs: ["animationEffect"], outputs: ["animationStarted", "animationCompleted"] }] });
4045
4055
  }
4046
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: HeaderComponent, decorators: [{
4056
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: HeaderComponent, decorators: [{
4047
4057
  type: Component,
4048
4058
  args: [{ selector: 'header', imports: [...MODULES$k, ...COMPONENTS$k, ...DIRECTIVES$2], providers: [WorkingContextFacade], host: {
4049
4059
  style: 'display: flex; width: 100%;',
@@ -4109,13 +4119,13 @@ class AppInputComponent {
4109
4119
  this.value.set('');
4110
4120
  this.onValueChange.emit('');
4111
4121
  }
4112
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AppInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4113
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: AppInputComponent, isStandalone: true, selector: "app-input", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, isLabelSrOnly: { classPropertyName: "isLabelSrOnly", publicName: "isLabelSrOnly", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, showLeadingIcon: { classPropertyName: "showLeadingIcon", publicName: "showLeadingIcon", isSignal: true, isRequired: false, transformFunction: null }, leadingIconVariant: { classPropertyName: "leadingIconVariant", publicName: "leadingIconVariant", isSignal: true, isRequired: false, transformFunction: null }, showTrailingIcon: { classPropertyName: "showTrailingIcon", publicName: "showTrailingIcon", isSignal: true, isRequired: false, transformFunction: null }, trailingIconVariant: { classPropertyName: "trailingIconVariant", publicName: "trailingIconVariant", isSignal: true, isRequired: false, transformFunction: null }, iconsSize: { classPropertyName: "iconsSize", publicName: "iconsSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onValueChange: "onValueChange" }, ngImport: i0, template: "@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", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }] });
4122
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AppInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4123
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.22", type: AppInputComponent, isStandalone: true, selector: "app-input", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, isLabelSrOnly: { classPropertyName: "isLabelSrOnly", publicName: "isLabelSrOnly", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, showLeadingIcon: { classPropertyName: "showLeadingIcon", publicName: "showLeadingIcon", isSignal: true, isRequired: false, transformFunction: null }, leadingIconVariant: { classPropertyName: "leadingIconVariant", publicName: "leadingIconVariant", isSignal: true, isRequired: false, transformFunction: null }, showTrailingIcon: { classPropertyName: "showTrailingIcon", publicName: "showTrailingIcon", isSignal: true, isRequired: false, transformFunction: null }, trailingIconVariant: { classPropertyName: "trailingIconVariant", publicName: "trailingIconVariant", isSignal: true, isRequired: false, transformFunction: null }, iconsSize: { classPropertyName: "iconsSize", publicName: "iconsSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onValueChange: "onValueChange" }, ngImport: i0, template: "@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", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }] });
4114
4124
  }
4115
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AppInputComponent, decorators: [{
4125
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AppInputComponent, decorators: [{
4116
4126
  type: Component,
4117
4127
  args: [{ selector: 'app-input', imports: [...MODULES$j, ...COMPONENTS$j], template: "@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" }]
4118
- }] });
4128
+ }], propDecorators: { placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], isLabelSrOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLabelSrOnly", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], showLeadingIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLeadingIcon", required: false }] }], leadingIconVariant: [{ type: i0.Input, args: [{ isSignal: true, alias: "leadingIconVariant", required: false }] }], showTrailingIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTrailingIcon", required: false }] }], trailingIconVariant: [{ type: i0.Input, args: [{ isSignal: true, alias: "trailingIconVariant", required: false }] }], iconsSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconsSize", required: false }] }], onValueChange: [{ type: i0.Output, args: ["onValueChange"] }] } });
4119
4129
 
4120
4130
  const MODULES$i = [CommonModule];
4121
4131
  const COMPONENTS$i = [AppIconComponent];
@@ -4153,17 +4163,17 @@ class PromptListItemComponent {
4153
4163
  event.preventDefault();
4154
4164
  this._promptFacade.dispatchToggleFavoritePrompt(this.prompt().name);
4155
4165
  }
4156
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PromptListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4157
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.1", type: PromptListItemComponent, isStandalone: true, selector: "prompt-list-item", inputs: { prompt: { classPropertyName: "prompt", publicName: "prompt", isSignal: true, isRequired: true, transformFunction: null }, isDisplayedInFavoriteList: { classPropertyName: "isDisplayedInFavoriteList", publicName: "isDisplayedInFavoriteList", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "mouseenter": "handleMouseEnter()", "mouseleave": "handleMouseLeave()" }, properties: { "class": "hostClasses()" } }, ngImport: i0, template: "@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>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }] });
4166
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: PromptListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4167
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.22", type: PromptListItemComponent, isStandalone: true, selector: "prompt-list-item", inputs: { prompt: { classPropertyName: "prompt", publicName: "prompt", isSignal: true, isRequired: true, transformFunction: null }, isDisplayedInFavoriteList: { classPropertyName: "isDisplayedInFavoriteList", publicName: "isDisplayedInFavoriteList", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "mouseenter": "handleMouseEnter()", "mouseleave": "handleMouseLeave()" }, properties: { "class": "hostClasses()" } }, ngImport: i0, template: "@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>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }] });
4158
4168
  }
4159
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PromptListItemComponent, decorators: [{
4169
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: PromptListItemComponent, decorators: [{
4160
4170
  type: Component,
4161
4171
  args: [{ selector: 'prompt-list-item', imports: [MODULES$i, COMPONENTS$i], host: {
4162
4172
  '[class]': 'hostClasses()',
4163
4173
  '(mouseenter)': 'handleMouseEnter()',
4164
4174
  '(mouseleave)': 'handleMouseLeave()',
4165
4175
  }, template: "@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>" }]
4166
- }] });
4176
+ }], propDecorators: { prompt: [{ type: i0.Input, args: [{ isSignal: true, alias: "prompt", required: true }] }], isDisplayedInFavoriteList: [{ type: i0.Input, args: [{ isSignal: true, alias: "isDisplayedInFavoriteList", required: false }] }] } });
4167
4177
 
4168
4178
  const MODULES$h = [CommonModule];
4169
4179
  const COMPONENTS$h = [PromptListItemComponent, AppInputComponent];
@@ -4225,13 +4235,13 @@ class PromptListComponent {
4225
4235
  // TODO: Provide the exact link to io-assist
4226
4236
  window.open('https://docs-ai.interop.io/', '_blank', 'noopener,noreferrer');
4227
4237
  }
4228
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PromptListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4229
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: PromptListComponent, isStandalone: true, selector: "prompt-list", inputs: { showFavoriteOnly: { classPropertyName: "showFavoriteOnly", publicName: "showFavoriteOnly", isSignal: true, isRequired: false, transformFunction: null } }, providers: [PromptFacade], ngImport: i0, template: "@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", dependencies: [{ kind: "component", type: PromptListItemComponent, selector: "prompt-list-item", inputs: ["prompt", "isDisplayedInFavoriteList"] }, { kind: "component", type: AppInputComponent, selector: "app-input", inputs: ["placeholder", "type", "label", "isLabelSrOnly", "disabled", "error", "showLeadingIcon", "leadingIconVariant", "showTrailingIcon", "trailingIconVariant", "iconsSize"], outputs: ["onValueChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
4238
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: PromptListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4239
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.22", type: PromptListComponent, isStandalone: true, selector: "prompt-list", inputs: { showFavoriteOnly: { classPropertyName: "showFavoriteOnly", publicName: "showFavoriteOnly", isSignal: true, isRequired: false, transformFunction: null } }, providers: [PromptFacade], ngImport: i0, template: "@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", dependencies: [{ kind: "component", type: PromptListItemComponent, selector: "prompt-list-item", inputs: ["prompt", "isDisplayedInFavoriteList"] }, { kind: "component", type: AppInputComponent, selector: "app-input", inputs: ["placeholder", "type", "label", "isLabelSrOnly", "disabled", "error", "showLeadingIcon", "leadingIconVariant", "showTrailingIcon", "trailingIconVariant", "iconsSize"], outputs: ["onValueChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
4230
4240
  }
4231
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PromptListComponent, decorators: [{
4241
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: PromptListComponent, decorators: [{
4232
4242
  type: Component,
4233
4243
  args: [{ selector: 'prompt-list', imports: [...COMPONENTS$h, ...MODULES$h], providers: [PromptFacade], template: "@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" }]
4234
- }] });
4244
+ }], propDecorators: { showFavoriteOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "showFavoriteOnly", required: false }] }] } });
4235
4245
 
4236
4246
  var TOOL_ACTIONS;
4237
4247
  (function (TOOL_ACTIONS) {
@@ -4278,23 +4288,23 @@ class ToolFacade {
4278
4288
  dispatchToggleTool(tool) {
4279
4289
  this._store.dispatch(toggleTool({ tool }));
4280
4290
  }
4281
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ToolFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4282
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ToolFacade });
4291
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ToolFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4292
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ToolFacade });
4283
4293
  }
4284
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ToolFacade, decorators: [{
4294
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ToolFacade, decorators: [{
4285
4295
  type: Injectable
4286
4296
  }] });
4287
4297
 
4288
4298
  class ToolInfoComponent {
4289
4299
  UI_STRINGS = UI_STRINGS.TOOL_INFO;
4290
4300
  tool = input.required(...(ngDevMode ? [{ debugName: "tool" }] : []));
4291
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ToolInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4292
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.1", type: ToolInfoComponent, isStandalone: true, selector: "tool-info", inputs: { tool: { classPropertyName: "tool", publicName: "tool", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: CommonModule }] });
4301
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ToolInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4302
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.22", type: ToolInfoComponent, isStandalone: true, selector: "tool-info", inputs: { tool: { classPropertyName: "tool", publicName: "tool", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: CommonModule }] });
4293
4303
  }
4294
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ToolInfoComponent, decorators: [{
4304
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ToolInfoComponent, decorators: [{
4295
4305
  type: Component,
4296
4306
  args: [{ selector: 'tool-info', imports: [CommonModule], template: "<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" }]
4297
- }] });
4307
+ }], propDecorators: { tool: [{ type: i0.Input, args: [{ isSignal: true, alias: "tool", required: true }] }] } });
4298
4308
 
4299
4309
  const MODULES$g = [CommonModule];
4300
4310
  const COMPONENTS$g = [AppIconComponent];
@@ -4335,13 +4345,13 @@ class AppToggleComponent {
4335
4345
  this.handleToggle();
4336
4346
  }
4337
4347
  }
4338
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AppToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4339
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.1", type: AppToggleComponent, isStandalone: true, selector: "app-toggle", inputs: { isChecked: { classPropertyName: "isChecked", publicName: "isChecked", isSignal: true, isRequired: false, transformFunction: null }, isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onToggle: "onToggle" }, ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }] });
4348
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AppToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4349
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.22", type: AppToggleComponent, isStandalone: true, selector: "app-toggle", inputs: { isChecked: { classPropertyName: "isChecked", publicName: "isChecked", isSignal: true, isRequired: false, transformFunction: null }, isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onToggle: "onToggle" }, ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }] });
4340
4350
  }
4341
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AppToggleComponent, decorators: [{
4351
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AppToggleComponent, decorators: [{
4342
4352
  type: Component,
4343
4353
  args: [{ selector: 'app-toggle', imports: [...MODULES$g, ...COMPONENTS$g], template: "<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" }]
4344
- }] });
4354
+ }], propDecorators: { isChecked: [{ type: i0.Input, args: [{ isSignal: true, alias: "isChecked", required: false }] }], isDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "isDisabled", required: false }] }], onToggle: [{ type: i0.Output, args: ["onToggle"] }] } });
4345
4355
 
4346
4356
  var TOOLTIP_POSITIONS;
4347
4357
  (function (TOOLTIP_POSITIONS) {
@@ -4506,13 +4516,13 @@ class AppTooltipComponent {
4506
4516
  this.tooltipWidth.set(rect.width);
4507
4517
  this.tooltipHeight.set(rect.height);
4508
4518
  }
4509
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AppTooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4510
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: AppTooltipComponent, isStandalone: true, selector: "app-tooltip", inputs: { tooltipPosition: { classPropertyName: "tooltipPosition", publicName: "tooltipPosition", isSignal: true, isRequired: false, transformFunction: null }, triggerOffset: { classPropertyName: "triggerOffset", publicName: "triggerOffset", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "window:scroll": "onViewportChange()", "window:resize": "onViewportChange()" } }, viewQueries: [{ propertyName: "tooltipTriggerElement", first: true, predicate: ["triggerElement"], descendants: true, isSignal: true }, { propertyName: "tooltipContainer", first: true, predicate: ["tooltipContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
4519
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AppTooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4520
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.22", type: AppTooltipComponent, isStandalone: true, selector: "app-tooltip", inputs: { tooltipPosition: { classPropertyName: "tooltipPosition", publicName: "tooltipPosition", isSignal: true, isRequired: false, transformFunction: null }, triggerOffset: { classPropertyName: "triggerOffset", publicName: "triggerOffset", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "window:scroll": "onViewportChange()", "window:resize": "onViewportChange()" } }, viewQueries: [{ propertyName: "tooltipTriggerElement", first: true, predicate: ["triggerElement"], descendants: true, isSignal: true }, { propertyName: "tooltipContainer", first: true, predicate: ["tooltipContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
4511
4521
  }
4512
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AppTooltipComponent, decorators: [{
4522
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AppTooltipComponent, decorators: [{
4513
4523
  type: Component,
4514
4524
  args: [{ selector: 'app-tooltip', imports: [CommonModule], template: "<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" }]
4515
- }], propDecorators: { onViewportChange: [{
4525
+ }], propDecorators: { tooltipPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipPosition", required: false }] }], triggerOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "triggerOffset", required: false }] }], tooltipTriggerElement: [{ type: i0.ViewChild, args: ['triggerElement', { isSignal: true }] }], tooltipContainer: [{ type: i0.ViewChild, args: ['tooltipContainer', { isSignal: true }] }], onViewportChange: [{
4516
4526
  type: HostListener,
4517
4527
  args: ['window:scroll']
4518
4528
  }, {
@@ -4549,16 +4559,16 @@ class ToolListItemComponent {
4549
4559
  handleMouseLeave() {
4550
4560
  this.isHovered.set(false);
4551
4561
  }
4552
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ToolListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4553
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.1", type: ToolListItemComponent, isStandalone: true, selector: "tool-list-item", inputs: { tool: { classPropertyName: "tool", publicName: "tool", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "mouseenter": "handleMouseEnter()", "mouseleave": "handleMouseLeave()" } }, ngImport: i0, template: "@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", dependencies: [{ kind: "component", type: AppToggleComponent, selector: "app-toggle", inputs: ["isChecked", "isDisabled"], outputs: ["onToggle"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }, { kind: "component", type: AppTooltipComponent, selector: "app-tooltip", inputs: ["tooltipPosition", "triggerOffset"] }, { kind: "component", type: ToolInfoComponent, selector: "tool-info", inputs: ["tool"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
4562
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ToolListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4563
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.22", type: ToolListItemComponent, isStandalone: true, selector: "tool-list-item", inputs: { tool: { classPropertyName: "tool", publicName: "tool", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "mouseenter": "handleMouseEnter()", "mouseleave": "handleMouseLeave()" } }, ngImport: i0, template: "@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", dependencies: [{ kind: "component", type: AppToggleComponent, selector: "app-toggle", inputs: ["isChecked", "isDisabled"], outputs: ["onToggle"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }, { kind: "component", type: AppTooltipComponent, selector: "app-tooltip", inputs: ["tooltipPosition", "triggerOffset"] }, { kind: "component", type: ToolInfoComponent, selector: "tool-info", inputs: ["tool"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
4554
4564
  }
4555
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ToolListItemComponent, decorators: [{
4565
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ToolListItemComponent, decorators: [{
4556
4566
  type: Component,
4557
4567
  args: [{ selector: 'tool-list-item', imports: [...COMPONENTS$f, ...MODULES$f], host: {
4558
4568
  '(mouseenter)': 'handleMouseEnter()',
4559
4569
  '(mouseleave)': 'handleMouseLeave()',
4560
4570
  }, template: "@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" }]
4561
- }] });
4571
+ }], propDecorators: { tool: [{ type: i0.Input, args: [{ isSignal: true, alias: "tool", required: true }] }] } });
4562
4572
 
4563
4573
  const MODULES$e = [CommonModule];
4564
4574
  const COMPONENTS$e = [ToolListItemComponent, AppInputComponent];
@@ -4581,10 +4591,10 @@ class ToolListComponent {
4581
4591
  // TODO: Provide the exact link to io-assist
4582
4592
  window.open('https://docs-ai.interop.io/', '_blank', 'noopener,noreferrer');
4583
4593
  }
4584
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ToolListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4585
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: ToolListComponent, isStandalone: true, selector: "tool-list", providers: [ToolFacade], ngImport: i0, template: "@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>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ToolListItemComponent, selector: "tool-list-item", inputs: ["tool"] }, { kind: "component", type: AppInputComponent, selector: "app-input", inputs: ["placeholder", "type", "label", "isLabelSrOnly", "disabled", "error", "showLeadingIcon", "leadingIconVariant", "showTrailingIcon", "trailingIconVariant", "iconsSize"], outputs: ["onValueChange"] }] });
4594
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ToolListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4595
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.22", type: ToolListComponent, isStandalone: true, selector: "tool-list", providers: [ToolFacade], ngImport: i0, template: "@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>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ToolListItemComponent, selector: "tool-list-item", inputs: ["tool"] }, { kind: "component", type: AppInputComponent, selector: "app-input", inputs: ["placeholder", "type", "label", "isLabelSrOnly", "disabled", "error", "showLeadingIcon", "leadingIconVariant", "showTrailingIcon", "trailingIconVariant", "iconsSize"], outputs: ["onValueChange"] }] });
4586
4596
  }
4587
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ToolListComponent, decorators: [{
4597
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ToolListComponent, decorators: [{
4588
4598
  type: Component,
4589
4599
  args: [{ selector: 'tool-list', imports: [...MODULES$e, ...COMPONENTS$e], providers: [ToolFacade], template: "@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>" }]
4590
4600
  }] });
@@ -4611,10 +4621,10 @@ class InputAreaActionBarComponent {
4611
4621
  isHeaderCloseButtonDisplayed: true,
4612
4622
  });
4613
4623
  }
4614
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: InputAreaActionBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4615
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.1", type: InputAreaActionBarComponent, isStandalone: true, selector: "input-area-action-bar", ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }] });
4624
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: InputAreaActionBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4625
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.22", type: InputAreaActionBarComponent, isStandalone: true, selector: "input-area-action-bar", ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }] });
4616
4626
  }
4617
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: InputAreaActionBarComponent, decorators: [{
4627
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: InputAreaActionBarComponent, decorators: [{
4618
4628
  type: Component,
4619
4629
  args: [{ selector: 'input-area-action-bar', imports: [...MODULES$d, ...COMPONENTS$d], template: "<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" }]
4620
4630
  }] });
@@ -4664,13 +4674,13 @@ class InputAreaSendButtonComponent {
4664
4674
  }
4665
4675
  this._messageFacade.dispatchAbortResponseGeneration(activeThreadId);
4666
4676
  }
4667
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: InputAreaSendButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4668
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: InputAreaSendButtonComponent, isStandalone: true, selector: "input-area-send-button", inputs: { userQuery: { classPropertyName: "userQuery", publicName: "userQuery", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onSend: "onSend" }, ngImport: i0, template: "@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", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }] });
4677
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: InputAreaSendButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4678
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.22", type: InputAreaSendButtonComponent, isStandalone: true, selector: "input-area-send-button", inputs: { userQuery: { classPropertyName: "userQuery", publicName: "userQuery", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onSend: "onSend" }, ngImport: i0, template: "@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 data-testid=\"chat-send-button\"\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 data-testid=\"chat-send-button\"\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 data-testid=\"chat-stop-button\"\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", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }] });
4669
4679
  }
4670
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: InputAreaSendButtonComponent, decorators: [{
4680
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: InputAreaSendButtonComponent, decorators: [{
4671
4681
  type: Component,
4672
- args: [{ selector: 'input-area-send-button', imports: [...MODULES$c, ...COMPONENTS$c], template: "@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" }]
4673
- }] });
4682
+ args: [{ selector: 'input-area-send-button', imports: [...MODULES$c, ...COMPONENTS$c], template: "@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 data-testid=\"chat-send-button\"\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 data-testid=\"chat-send-button\"\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 data-testid=\"chat-stop-button\"\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" }]
4683
+ }], propDecorators: { userQuery: [{ type: i0.Input, args: [{ isSignal: true, alias: "userQuery", required: true }] }], onSend: [{ type: i0.Output, args: ["onSend"] }] } });
4674
4684
 
4675
4685
  /**
4676
4686
  * AccentGradientBorderDirective
@@ -4781,15 +4791,15 @@ class AccentGradientBorderDirective {
4781
4791
  });
4782
4792
  });
4783
4793
  }
4784
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AccentGradientBorderDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
4785
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.1", type: AccentGradientBorderDirective, isStandalone: true, selector: "[accentGradientBorder]", inputs: { accentGradientBorder: { classPropertyName: "accentGradientBorder", publicName: "accentGradientBorder", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
4794
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AccentGradientBorderDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
4795
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.22", type: AccentGradientBorderDirective, isStandalone: true, selector: "[accentGradientBorder]", inputs: { accentGradientBorder: { classPropertyName: "accentGradientBorder", publicName: "accentGradientBorder", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
4786
4796
  {
4787
4797
  provide: ComponentEffectManagerService,
4788
4798
  useFactory: () => new ComponentEffectManagerService('AccentGradientBorderDirective'),
4789
4799
  },
4790
4800
  ], ngImport: i0 });
4791
4801
  }
4792
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AccentGradientBorderDirective, decorators: [{
4802
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AccentGradientBorderDirective, decorators: [{
4793
4803
  type: Directive,
4794
4804
  args: [{
4795
4805
  selector: '[accentGradientBorder]',
@@ -4801,7 +4811,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
4801
4811
  },
4802
4812
  ],
4803
4813
  }]
4804
- }] });
4814
+ }], propDecorators: { accentGradientBorder: [{ type: i0.Input, args: [{ isSignal: true, alias: "accentGradientBorder", required: false }] }] } });
4805
4815
 
4806
4816
  const COMPONENTS$b = [InputAreaActionBarComponent, InputAreaSendButtonComponent];
4807
4817
  const DIRECTIVES$1 = [AccentGradientBorderDirective, AnimationEffectDirective];
@@ -4925,16 +4935,16 @@ class InputAreaComponent {
4925
4935
  this.setInputValue(description);
4926
4936
  });
4927
4937
  }
4928
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: InputAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4929
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.1", type: InputAreaComponent, isStandalone: true, selector: "input-area", providers: [
4938
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: InputAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4939
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.22", type: InputAreaComponent, isStandalone: true, selector: "input-area", providers: [
4930
4940
  PromptFacade,
4931
4941
  {
4932
4942
  provide: ComponentEffectManagerService,
4933
4943
  useFactory: () => new ComponentEffectManagerService('InputAreaComponent'),
4934
4944
  },
4935
- ], viewQueries: [{ propertyName: "sendButton", first: true, predicate: InputAreaSendButtonComponent, descendants: true, isSignal: true }, { propertyName: "inputAreaRef", first: true, predicate: ["inputTextArea"], descendants: true, isSignal: true }, { propertyName: "animationDirective", first: true, predicate: AnimationEffectDirective, descendants: true, isSignal: true }], ngImport: i0, template: "<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>", dependencies: [{ kind: "component", type: InputAreaActionBarComponent, selector: "input-area-action-bar" }, { kind: "component", type: InputAreaSendButtonComponent, selector: "input-area-send-button", inputs: ["userQuery"], outputs: ["onSend"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: AccentGradientBorderDirective, selector: "[accentGradientBorder]", inputs: ["accentGradientBorder"] }, { kind: "directive", type: AnimationEffectDirective, selector: "[animationEffect]", inputs: ["animationEffect"], outputs: ["animationStarted", "animationCompleted"] }] });
4945
+ ], viewQueries: [{ propertyName: "sendButton", first: true, predicate: InputAreaSendButtonComponent, descendants: true, isSignal: true }, { propertyName: "inputAreaRef", first: true, predicate: ["inputTextArea"], descendants: true, isSignal: true }, { propertyName: "animationDirective", first: true, predicate: AnimationEffectDirective, descendants: true, isSignal: true }], ngImport: i0, template: "<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 data-testid=\"chat-input-field\"\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>", dependencies: [{ kind: "component", type: InputAreaActionBarComponent, selector: "input-area-action-bar" }, { kind: "component", type: InputAreaSendButtonComponent, selector: "input-area-send-button", inputs: ["userQuery"], outputs: ["onSend"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: AccentGradientBorderDirective, selector: "[accentGradientBorder]", inputs: ["accentGradientBorder"] }, { kind: "directive", type: AnimationEffectDirective, selector: "[animationEffect]", inputs: ["animationEffect"], outputs: ["animationStarted", "animationCompleted"] }] });
4936
4946
  }
4937
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: InputAreaComponent, decorators: [{
4947
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: InputAreaComponent, decorators: [{
4938
4948
  type: Component,
4939
4949
  args: [{ selector: 'input-area', imports: [...COMPONENTS$b, ...MODULES$b, ...DIRECTIVES$1], providers: [
4940
4950
  PromptFacade,
@@ -4942,19 +4952,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
4942
4952
  provide: ComponentEffectManagerService,
4943
4953
  useFactory: () => new ComponentEffectManagerService('InputAreaComponent'),
4944
4954
  },
4945
- ], template: "<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>" }]
4946
- }] });
4955
+ ], template: "<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 data-testid=\"chat-input-field\"\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>" }]
4956
+ }], propDecorators: { sendButton: [{ type: i0.ViewChild, args: [i0.forwardRef(() => InputAreaSendButtonComponent), { isSignal: true }] }], inputAreaRef: [{ type: i0.ViewChild, args: ['inputTextArea', { isSignal: true }] }], animationDirective: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AnimationEffectDirective), { isSignal: true }] }] } });
4947
4957
 
4948
4958
  class AppSpinnerComponent {
4949
4959
  APP_SPINNER_COMPONENT_SIZE = APP_SPINNER_COMPONENT_SIZE;
4950
4960
  size = input(APP_SPINNER_COMPONENT_SIZE.MEDIUM, ...(ngDevMode ? [{ debugName: "size" }] : []));
4951
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AppSpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4952
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.1", type: AppSpinnerComponent, isStandalone: true, selector: "app-spinner", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
4961
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AppSpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4962
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.22", type: AppSpinnerComponent, isStandalone: true, selector: "app-spinner", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
4953
4963
  }
4954
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AppSpinnerComponent, decorators: [{
4964
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AppSpinnerComponent, decorators: [{
4955
4965
  type: Component,
4956
4966
  args: [{ selector: 'app-spinner', imports: [CommonModule], template: "<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" }]
4957
- }] });
4967
+ }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }] } });
4958
4968
 
4959
4969
  const MODULES$a = [CommonModule];
4960
4970
  const COMPONENTS$a = [AppIconComponent];
@@ -5058,15 +5068,15 @@ class ScrollAreaComponent {
5058
5068
  this._mutationObserver.disconnect();
5059
5069
  this._mutationObserver = undefined;
5060
5070
  }
5061
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ScrollAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5062
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: ScrollAreaComponent, isStandalone: true, selector: "scroll-area", inputs: { shouldExpandSpacer: { classPropertyName: "shouldExpandSpacer", publicName: "shouldExpandSpacer", isSignal: true, isRequired: false, transformFunction: null }, isForceScrollToBottomEnabled: { classPropertyName: "isForceScrollToBottomEnabled", publicName: "isForceScrollToBottomEnabled", isSignal: true, isRequired: false, transformFunction: null }, elementToObserve: { classPropertyName: "elementToObserve", publicName: "elementToObserve", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "scroll-area flex flex-col flex-1 min-h-0 relative" }, viewQueries: [{ propertyName: "scrollArea", first: true, predicate: ["scrollArea"], descendants: true, isSignal: true }, { propertyName: "spacerElement", first: true, predicate: ["spacerElement"], descendants: true, isSignal: true }], ngImport: i0, template: "<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}", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }] });
5071
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ScrollAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5072
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.22", type: ScrollAreaComponent, isStandalone: true, selector: "scroll-area", inputs: { shouldExpandSpacer: { classPropertyName: "shouldExpandSpacer", publicName: "shouldExpandSpacer", isSignal: true, isRequired: false, transformFunction: null }, isForceScrollToBottomEnabled: { classPropertyName: "isForceScrollToBottomEnabled", publicName: "isForceScrollToBottomEnabled", isSignal: true, isRequired: false, transformFunction: null }, elementToObserve: { classPropertyName: "elementToObserve", publicName: "elementToObserve", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "scroll-area flex flex-col flex-1 min-h-0 relative" }, viewQueries: [{ propertyName: "scrollArea", first: true, predicate: ["scrollArea"], descendants: true, isSignal: true }, { propertyName: "spacerElement", first: true, predicate: ["spacerElement"], descendants: true, isSignal: true }], ngImport: i0, template: "<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 data-testid=\"scroll-to-bottom\"\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}", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }] });
5063
5073
  }
5064
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ScrollAreaComponent, decorators: [{
5074
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ScrollAreaComponent, decorators: [{
5065
5075
  type: Component,
5066
5076
  args: [{ selector: 'scroll-area', imports: [...MODULES$a, ...COMPONENTS$a], host: {
5067
5077
  class: 'scroll-area flex flex-col flex-1 min-h-0 relative',
5068
- }, template: "<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}" }]
5069
- }] });
5078
+ }, template: "<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 data-testid=\"scroll-to-bottom\"\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}" }]
5079
+ }], propDecorators: { shouldExpandSpacer: [{ type: i0.Input, args: [{ isSignal: true, alias: "shouldExpandSpacer", required: false }] }], isForceScrollToBottomEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "isForceScrollToBottomEnabled", required: false }] }], elementToObserve: [{ type: i0.Input, args: [{ isSignal: true, alias: "elementToObserve", required: false }] }], scrollArea: [{ type: i0.ViewChild, args: ['scrollArea', { isSignal: true }] }], spacerElement: [{ type: i0.ViewChild, args: ['spacerElement', { isSignal: true }] }] } });
5070
5080
 
5071
5081
  class CopyToClipboardService {
5072
5082
  _logger = inject(LoggerService);
@@ -5107,10 +5117,10 @@ class CopyToClipboardService {
5107
5117
  document.body.removeChild(textarea);
5108
5118
  }
5109
5119
  };
5110
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: CopyToClipboardService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5111
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: CopyToClipboardService });
5120
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: CopyToClipboardService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5121
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: CopyToClipboardService });
5112
5122
  }
5113
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: CopyToClipboardService, decorators: [{
5123
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: CopyToClipboardService, decorators: [{
5114
5124
  type: Injectable
5115
5125
  }] });
5116
5126
 
@@ -5121,13 +5131,13 @@ class AppCopyToClipboardButtonComponent {
5121
5131
  handleCopyResponse() {
5122
5132
  this._copyToClipboardService.copyToClipboard(this.textToCopy());
5123
5133
  }
5124
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AppCopyToClipboardButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5125
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.1", type: AppCopyToClipboardButtonComponent, isStandalone: true, selector: "app-copy-to-clipboard-button", inputs: { textToCopy: { classPropertyName: "textToCopy", publicName: "textToCopy", isSignal: true, isRequired: true, transformFunction: null } }, providers: [CopyToClipboardService], ngImport: i0, template: "<button class=\"app-opy-to-clipboard-button\" (click)=\"handleCopyResponse()\">\n <ng-content>{{ UI_STRINGS.COPY }}</ng-content>\n</button>\n" });
5134
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AppCopyToClipboardButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5135
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.22", type: AppCopyToClipboardButtonComponent, isStandalone: true, selector: "app-copy-to-clipboard-button", inputs: { textToCopy: { classPropertyName: "textToCopy", publicName: "textToCopy", isSignal: true, isRequired: true, transformFunction: null } }, providers: [CopyToClipboardService], ngImport: i0, template: "<button class=\"app-opy-to-clipboard-button\" (click)=\"handleCopyResponse()\">\n <ng-content>{{ UI_STRINGS.COPY }}</ng-content>\n</button>\n" });
5126
5136
  }
5127
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AppCopyToClipboardButtonComponent, decorators: [{
5137
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AppCopyToClipboardButtonComponent, decorators: [{
5128
5138
  type: Component,
5129
5139
  args: [{ selector: 'app-copy-to-clipboard-button', providers: [CopyToClipboardService], template: "<button class=\"app-opy-to-clipboard-button\" (click)=\"handleCopyResponse()\">\n <ng-content>{{ UI_STRINGS.COPY }}</ng-content>\n</button>\n" }]
5130
- }] });
5140
+ }], propDecorators: { textToCopy: [{ type: i0.Input, args: [{ isSignal: true, alias: "textToCopy", required: true }] }] } });
5131
5141
 
5132
5142
  /**
5133
5143
  * Processes AG-UI events from a StreamResponse (RunHandle) and converts them into Redux actions.
@@ -5654,25 +5664,25 @@ class MessageFooterComponent {
5654
5664
  messages: [userMessage],
5655
5665
  }, this._activeThreadId());
5656
5666
  }
5657
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: MessageFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5658
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.1", type: MessageFooterComponent, isStandalone: true, selector: "message-footer", inputs: { messageFooterId: { classPropertyName: "messageFooterId", publicName: "messageFooterId", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppCopyToClipboardButtonComponent, selector: "app-copy-to-clipboard-button", inputs: ["textToCopy"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }] });
5667
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: MessageFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5668
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.22", type: MessageFooterComponent, isStandalone: true, selector: "message-footer", inputs: { messageFooterId: { classPropertyName: "messageFooterId", publicName: "messageFooterId", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div\n class=\"message-footer\"\n data-testid=\"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", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppCopyToClipboardButtonComponent, selector: "app-copy-to-clipboard-button", inputs: ["textToCopy"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }] });
5659
5669
  }
5660
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: MessageFooterComponent, decorators: [{
5670
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: MessageFooterComponent, decorators: [{
5661
5671
  type: Component,
5662
- args: [{ selector: 'message-footer', imports: [...MODULES$9, ...COMPONENTS$9], template: "<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" }]
5663
- }] });
5672
+ args: [{ selector: 'message-footer', imports: [...MODULES$9, ...COMPONENTS$9], template: "<div\n class=\"message-footer\"\n data-testid=\"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" }]
5673
+ }], propDecorators: { messageFooterId: [{ type: i0.Input, args: [{ isSignal: true, alias: "messageFooterId", required: true }] }] } });
5664
5674
 
5665
5675
  const MODULES$8 = [CommonModule];
5666
5676
  const COMPONENTS$8 = [AppMdFormatterComponent, MessageFooterComponent];
5667
5677
  class AssistantMessageComponent {
5668
5678
  message = input.required(...(ngDevMode ? [{ debugName: "message" }] : []));
5669
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AssistantMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5670
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: AssistantMessageComponent, isStandalone: true, selector: "assistant-message", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@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>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppMdFormatterComponent, selector: "app-md-formatter", inputs: ["content"] }, { kind: "component", type: MessageFooterComponent, selector: "message-footer", inputs: ["messageFooterId"] }] });
5679
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AssistantMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5680
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.22", type: AssistantMessageComponent, isStandalone: true, selector: "assistant-message", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@let shouldDisplayFooter =\n message().displayFooter && message().responseForUserQueryId && message().content !== '';\n\n<div\n class=\"assistant-message\"\n data-testid=\"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>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppMdFormatterComponent, selector: "app-md-formatter", inputs: ["content"] }, { kind: "component", type: MessageFooterComponent, selector: "message-footer", inputs: ["messageFooterId"] }] });
5671
5681
  }
5672
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AssistantMessageComponent, decorators: [{
5682
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AssistantMessageComponent, decorators: [{
5673
5683
  type: Component,
5674
- args: [{ selector: 'assistant-message', imports: [...MODULES$8, ...COMPONENTS$8], template: "@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>" }]
5675
- }] });
5684
+ args: [{ selector: 'assistant-message', imports: [...MODULES$8, ...COMPONENTS$8], template: "@let shouldDisplayFooter =\n message().displayFooter && message().responseForUserQueryId && message().content !== '';\n\n<div\n class=\"assistant-message\"\n data-testid=\"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>" }]
5685
+ }], propDecorators: { message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: true }] }] } });
5676
5686
 
5677
5687
  class McpAppResourceComponent {
5678
5688
  /** The live AppInstance returned by ai-web. Pass null/undefined when not yet available. */
@@ -5730,13 +5740,13 @@ class McpAppResourceComponent {
5730
5740
  this._mountedInstanceId = null;
5731
5741
  this._elementAppended = false;
5732
5742
  }
5733
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: McpAppResourceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5734
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.1", type: McpAppResourceComponent, isStandalone: true, selector: "mcp-app-resource", inputs: { appInstance: { classPropertyName: "appInstance", publicName: "appInstance", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "_containerRef", first: true, predicate: ["container"], descendants: true, isSignal: true }], usesOnChanges: true, ngImport: i0, template: `<div #container class="mcp-app-container"></div>`, isInline: true, styles: [".mcp-app-container{width:100%}\n"] });
5743
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: McpAppResourceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5744
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.22", type: McpAppResourceComponent, isStandalone: true, selector: "mcp-app-resource", inputs: { appInstance: { classPropertyName: "appInstance", publicName: "appInstance", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "_containerRef", first: true, predicate: ["container"], descendants: true, isSignal: true }], usesOnChanges: true, ngImport: i0, template: `<div #container class="mcp-app-container"></div>`, isInline: true, styles: [".mcp-app-container{width:100%}\n"] });
5735
5745
  }
5736
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: McpAppResourceComponent, decorators: [{
5746
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: McpAppResourceComponent, decorators: [{
5737
5747
  type: Component,
5738
5748
  args: [{ selector: 'mcp-app-resource', template: `<div #container class="mcp-app-container"></div>`, styles: [".mcp-app-container{width:100%}\n"] }]
5739
- }] });
5749
+ }], propDecorators: { appInstance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appInstance", required: false }] }], _containerRef: [{ type: i0.ViewChild, args: ['container', { isSignal: true }] }] } });
5740
5750
 
5741
5751
  const MODULES$7 = [CommonModule];
5742
5752
  const COMPONENTS$7 = [AppIconComponent, AppMdFormatterComponent];
@@ -5808,13 +5818,13 @@ class ToolMessageComponent {
5808
5818
  text: parsedText,
5809
5819
  };
5810
5820
  }
5811
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ToolMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5812
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: ToolMessageComponent, isStandalone: true, selector: "tool-message", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null }, parentToolTraceId: { classPropertyName: "parentToolTraceId", publicName: "parentToolTraceId", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@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", styles: [":host ::ng-deep .io-assist-code-theme:before{background:none!important;background-color:transparent!important}:host ::ng-deep pre .language-json{max-height:320px}@media (min-width: 1024px){:host ::ng-deep pre .language-json{max-height:400px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }, { kind: "component", type: AppMdFormatterComponent, selector: "app-md-formatter", inputs: ["content"] }] });
5821
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ToolMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5822
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.22", type: ToolMessageComponent, isStandalone: true, selector: "tool-message", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null }, parentToolTraceId: { classPropertyName: "parentToolTraceId", publicName: "parentToolTraceId", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@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", styles: [":host ::ng-deep .io-assist-code-theme:before{background:none!important;background-color:transparent!important}:host ::ng-deep pre .language-json{max-height:320px}@media (min-width: 1024px){:host ::ng-deep pre .language-json{max-height:400px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }, { kind: "component", type: AppMdFormatterComponent, selector: "app-md-formatter", inputs: ["content"] }] });
5813
5823
  }
5814
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ToolMessageComponent, decorators: [{
5824
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ToolMessageComponent, decorators: [{
5815
5825
  type: Component,
5816
5826
  args: [{ selector: 'tool-message', imports: [...MODULES$7, ...COMPONENTS$7], template: "@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", styles: [":host ::ng-deep .io-assist-code-theme:before{background:none!important;background-color:transparent!important}:host ::ng-deep pre .language-json{max-height:320px}@media (min-width: 1024px){:host ::ng-deep pre .language-json{max-height:400px}}\n"] }]
5817
- }] });
5827
+ }], propDecorators: { message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: true }] }], parentToolTraceId: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentToolTraceId", required: true }] }] } });
5818
5828
 
5819
5829
  const MODULES$6 = [CommonModule];
5820
5830
  const COMPONENTS$6 = [
@@ -5853,13 +5863,13 @@ class ToolTraceMessageComponent {
5853
5863
  toggleExpanded() {
5854
5864
  this._messageFacade.dispatchToggleToolTrace(this.parentMessage());
5855
5865
  }
5856
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ToolTraceMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5857
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: ToolTraceMessageComponent, isStandalone: true, selector: "tool-trace-message", inputs: { parentMessage: { classPropertyName: "parentMessage", publicName: "parentMessage", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@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", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }, { kind: "component", type: ToolMessageComponent, selector: "tool-message", inputs: ["message", "parentToolTraceId"] }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["buttonType", "disabled"], outputs: ["onClick"] }, { kind: "component", type: MessageFooterComponent, selector: "message-footer", inputs: ["messageFooterId"] }, { kind: "directive", type: AccentGradientBorderDirective, selector: "[accentGradientBorder]", inputs: ["accentGradientBorder"] }] });
5866
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ToolTraceMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5867
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.22", type: ToolTraceMessageComponent, isStandalone: true, selector: "tool-trace-message", inputs: { parentMessage: { classPropertyName: "parentMessage", publicName: "parentMessage", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@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", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }, { kind: "component", type: ToolMessageComponent, selector: "tool-message", inputs: ["message", "parentToolTraceId"] }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["buttonType", "disabled"], outputs: ["onClick"] }, { kind: "component", type: MessageFooterComponent, selector: "message-footer", inputs: ["messageFooterId"] }, { kind: "directive", type: AccentGradientBorderDirective, selector: "[accentGradientBorder]", inputs: ["accentGradientBorder"] }] });
5858
5868
  }
5859
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ToolTraceMessageComponent, decorators: [{
5869
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ToolTraceMessageComponent, decorators: [{
5860
5870
  type: Component,
5861
5871
  args: [{ selector: 'tool-trace-message', imports: [...MODULES$6, ...COMPONENTS$6, ...DIRECTIVES], template: "@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" }]
5862
- }] });
5872
+ }], propDecorators: { parentMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentMessage", required: true }] }] } });
5863
5873
 
5864
5874
  const MODULES$5 = [CommonModule];
5865
5875
  const COMPONENTS$5 = [AppSpinnerComponent, AppIconComponent];
@@ -5886,13 +5896,13 @@ class UserMessageComponent {
5886
5896
  messages: [userMessage],
5887
5897
  }, this._activeThreadId());
5888
5898
  }
5889
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: UserMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5890
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: UserMessageComponent, isStandalone: true, selector: "user-message", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@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", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppSpinnerComponent, selector: "app-spinner", inputs: ["size"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }] });
5899
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: UserMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5900
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.22", type: UserMessageComponent, isStandalone: true, selector: "user-message", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@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 data-testid=\"loading-indicator\" [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", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppSpinnerComponent, selector: "app-spinner", inputs: ["size"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }] });
5891
5901
  }
5892
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: UserMessageComponent, decorators: [{
5902
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: UserMessageComponent, decorators: [{
5893
5903
  type: Component,
5894
- args: [{ selector: 'user-message', imports: [...MODULES$5, ...COMPONENTS$5], template: "@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" }]
5895
- }] });
5904
+ args: [{ selector: 'user-message', imports: [...MODULES$5, ...COMPONENTS$5], template: "@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 data-testid=\"loading-indicator\" [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" }]
5905
+ }], propDecorators: { message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: true }] }] } });
5896
5906
 
5897
5907
  const COMPONENTS$4 = [
5898
5908
  ScrollAreaComponent,
@@ -5944,19 +5954,19 @@ class MessageAreaComponent {
5944
5954
  showToolTraceForMessage(messageId) {
5945
5955
  return this.toolTraceState().some((state) => state.stateForMessageId === messageId && state.executedTools.length > 0);
5946
5956
  }
5947
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: MessageAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5948
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: MessageAreaComponent, isStandalone: true, selector: "message-area", viewQueries: [{ propertyName: "messageAreaRef", first: true, predicate: ["messageArea"], descendants: true, isSignal: true }], ngImport: i0, template: "<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>", dependencies: [{ kind: "component", type: ScrollAreaComponent, selector: "scroll-area", inputs: ["shouldExpandSpacer", "isForceScrollToBottomEnabled", "elementToObserve"] }, { kind: "component", type: AssistantMessageComponent, selector: "assistant-message", inputs: ["message"] }, { kind: "component", type: UserMessageComponent, selector: "user-message", inputs: ["message"] }, { kind: "component", type: AppSpinnerComponent, selector: "app-spinner", inputs: ["size"] }, { kind: "component", type: ToolTraceMessageComponent, selector: "tool-trace-message", inputs: ["parentMessage"] }, { kind: "component", type: McpAppResourceComponent, selector: "mcp-app-resource", inputs: ["appInstance"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
5957
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: MessageAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5958
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.22", type: MessageAreaComponent, isStandalone: true, selector: "message-area", viewQueries: [{ propertyName: "messageAreaRef", first: true, predicate: ["messageArea"], descendants: true, isSignal: true }], ngImport: i0, template: "<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>", dependencies: [{ kind: "component", type: ScrollAreaComponent, selector: "scroll-area", inputs: ["shouldExpandSpacer", "isForceScrollToBottomEnabled", "elementToObserve"] }, { kind: "component", type: AssistantMessageComponent, selector: "assistant-message", inputs: ["message"] }, { kind: "component", type: UserMessageComponent, selector: "user-message", inputs: ["message"] }, { kind: "component", type: AppSpinnerComponent, selector: "app-spinner", inputs: ["size"] }, { kind: "component", type: ToolTraceMessageComponent, selector: "tool-trace-message", inputs: ["parentMessage"] }, { kind: "component", type: McpAppResourceComponent, selector: "mcp-app-resource", inputs: ["appInstance"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
5949
5959
  }
5950
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: MessageAreaComponent, decorators: [{
5960
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: MessageAreaComponent, decorators: [{
5951
5961
  type: Component,
5952
5962
  args: [{ selector: 'message-area', imports: [...COMPONENTS$4, ...MODULES$4], template: "<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>" }]
5953
- }] });
5963
+ }], propDecorators: { messageAreaRef: [{ type: i0.ViewChild, args: ['messageArea', { isSignal: true }] }] } });
5954
5964
 
5955
5965
  class FavoritePromptListComponent {
5956
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: FavoritePromptListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5957
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.1", type: FavoritePromptListComponent, isStandalone: true, selector: "favorite-prompt-list", ngImport: i0, template: "<prompt-list [showFavoriteOnly]=\"true\"></prompt-list>\n", dependencies: [{ kind: "component", type: PromptListComponent, selector: "prompt-list", inputs: ["showFavoriteOnly"] }] });
5966
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: FavoritePromptListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5967
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.22", type: FavoritePromptListComponent, isStandalone: true, selector: "favorite-prompt-list", ngImport: i0, template: "<prompt-list [showFavoriteOnly]=\"true\"></prompt-list>\n", dependencies: [{ kind: "component", type: PromptListComponent, selector: "prompt-list", inputs: ["showFavoriteOnly"] }] });
5958
5968
  }
5959
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: FavoritePromptListComponent, decorators: [{
5969
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: FavoritePromptListComponent, decorators: [{
5960
5970
  type: Component,
5961
5971
  args: [{ selector: 'favorite-prompt-list', imports: [PromptListComponent], template: "<prompt-list [showFavoriteOnly]=\"true\"></prompt-list>\n" }]
5962
5972
  }] });
@@ -6039,15 +6049,15 @@ class ThreadHistoryListItemComponent {
6039
6049
  registerEffects() {
6040
6050
  this._effectService.registerEffect('ThreadHistoryListItem.focusThreadNameInput.on.isEditModeEnabled', () => this.isEditModeEnabled() && this.threadNameInput()?.nativeElement.focus());
6041
6051
  }
6042
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ThreadHistoryListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6043
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: ThreadHistoryListItemComponent, isStandalone: true, selector: "thread-history-list-item", inputs: { thread: { classPropertyName: "thread", publicName: "thread", isSignal: true, isRequired: true, transformFunction: null } }, providers: [
6052
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ThreadHistoryListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6053
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.22", type: ThreadHistoryListItemComponent, isStandalone: true, selector: "thread-history-list-item", inputs: { thread: { classPropertyName: "thread", publicName: "thread", isSignal: true, isRequired: true, transformFunction: null } }, providers: [
6044
6054
  {
6045
6055
  provide: ComponentEffectManagerService,
6046
6056
  useFactory: () => new ComponentEffectManagerService('ThreadHistoryListItemComponent'),
6047
6057
  },
6048
6058
  ], viewQueries: [{ propertyName: "threadNameInput", first: true, predicate: ["threadNameInput"], descendants: true, isSignal: true }], ngImport: i0, template: "@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>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppSpinnerComponent, selector: "app-spinner", inputs: ["size"] }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }] });
6049
6059
  }
6050
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ThreadHistoryListItemComponent, decorators: [{
6060
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ThreadHistoryListItemComponent, decorators: [{
6051
6061
  type: Component,
6052
6062
  args: [{ selector: 'thread-history-list-item', imports: [...MODULES$3, ...COMPONENTS$3], providers: [
6053
6063
  {
@@ -6055,17 +6065,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
6055
6065
  useFactory: () => new ComponentEffectManagerService('ThreadHistoryListItemComponent'),
6056
6066
  },
6057
6067
  ], template: "@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>" }]
6058
- }], ctorParameters: () => [] });
6068
+ }], ctorParameters: () => [], propDecorators: { thread: [{ type: i0.Input, args: [{ isSignal: true, alias: "thread", required: true }] }], threadNameInput: [{ type: i0.ViewChild, args: ['threadNameInput', { isSignal: true }] }] } });
6059
6069
 
6060
6070
  class ThreadHistoryListItemDividerComponent {
6061
6071
  dividerLabel = input('', ...(ngDevMode ? [{ debugName: "dividerLabel" }] : []));
6062
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ThreadHistoryListItemDividerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6063
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.1", type: ThreadHistoryListItemDividerComponent, isStandalone: true, selector: "thread-history-list-item-divider", inputs: { dividerLabel: { classPropertyName: "dividerLabel", publicName: "dividerLabel", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
6072
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ThreadHistoryListItemDividerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6073
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.22", type: ThreadHistoryListItemDividerComponent, isStandalone: true, selector: "thread-history-list-item-divider", inputs: { dividerLabel: { classPropertyName: "dividerLabel", publicName: "dividerLabel", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
6064
6074
  }
6065
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ThreadHistoryListItemDividerComponent, decorators: [{
6075
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ThreadHistoryListItemDividerComponent, decorators: [{
6066
6076
  type: Component,
6067
6077
  args: [{ selector: 'thread-history-list-item-divider', imports: [CommonModule], template: "<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" }]
6068
- }] });
6078
+ }], propDecorators: { dividerLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "dividerLabel", required: false }] }] } });
6069
6079
 
6070
6080
  const MODULES$2 = [CommonModule];
6071
6081
  const COMPONENTS$2 = [
@@ -6152,15 +6162,15 @@ class ThreadHistoryListComponent {
6152
6162
  this._threadFacade.dispatchFetchThreads(SELECTED_AGENT);
6153
6163
  });
6154
6164
  }
6155
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ThreadHistoryListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6156
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: ThreadHistoryListComponent, isStandalone: true, selector: "thread-history-list", providers: [
6165
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ThreadHistoryListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6166
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.22", type: ThreadHistoryListComponent, isStandalone: true, selector: "thread-history-list", providers: [
6157
6167
  {
6158
6168
  provide: ComponentEffectManagerService,
6159
6169
  useFactory: () => new ComponentEffectManagerService('ThreadHistoryListComponent'),
6160
6170
  },
6161
6171
  ], ngImport: i0, template: "@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", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ThreadHistoryListItemComponent, selector: "thread-history-list-item", inputs: ["thread"] }, { kind: "component", type: ThreadHistoryListItemDividerComponent, selector: "thread-history-list-item-divider", inputs: ["dividerLabel"] }, { kind: "component", type: AppSpinnerComponent, selector: "app-spinner", inputs: ["size"] }] });
6162
6172
  }
6163
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ThreadHistoryListComponent, decorators: [{
6173
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ThreadHistoryListComponent, decorators: [{
6164
6174
  type: Component,
6165
6175
  args: [{ selector: 'thread-history-list', imports: [...MODULES$2, ...COMPONENTS$2], providers: [
6166
6176
  {
@@ -6191,10 +6201,10 @@ class ThreadHistoryComponent {
6191
6201
  hideThreadHistory() {
6192
6202
  this._overlayService.hideThreadHistory();
6193
6203
  }
6194
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ThreadHistoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6195
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: ThreadHistoryComponent, isStandalone: true, selector: "thread-history", ngImport: i0, template: "<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>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ThreadHistoryListComponent, selector: "thread-history-list" }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }] });
6204
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ThreadHistoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6205
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.22", type: ThreadHistoryComponent, isStandalone: true, selector: "thread-history", ngImport: i0, template: "<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>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ThreadHistoryListComponent, selector: "thread-history-list" }, { kind: "component", type: AppIconComponent, selector: "app-icon", inputs: ["variant", "size", "iconFill", "disabledIconFill", "hoverIconFill", "isDisabled", "isWrapped", "title", "customIcon", "backgroundColor", "hoverBackgroundShape", "hoverBackgroundColor", "isHoveredExternal", "tabIndex"], outputs: ["onClick"] }] });
6196
6206
  }
6197
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ThreadHistoryComponent, decorators: [{
6207
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ThreadHistoryComponent, decorators: [{
6198
6208
  type: Component,
6199
6209
  args: [{ selector: 'thread-history', imports: [CommonModule, ThreadHistoryListComponent, AppIconComponent], template: "<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>" }]
6200
6210
  }] });
@@ -6232,8 +6242,8 @@ class ChatComponent {
6232
6242
  }
6233
6243
  });
6234
6244
  }
6235
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ChatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6236
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: ChatComponent, isStandalone: true, selector: "chat", host: { classAttribute: "flex flex-1 flex-col bg-app-background min-h-0 text-app-text-default" }, providers: [
6245
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ChatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6246
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.22", type: ChatComponent, isStandalone: true, selector: "chat", host: { classAttribute: "flex flex-1 flex-col bg-app-background min-h-0 text-app-text-default" }, providers: [
6237
6247
  MessageFacade,
6238
6248
  PromptFacade,
6239
6249
  {
@@ -6242,7 +6252,7 @@ class ChatComponent {
6242
6252
  },
6243
6253
  ], ngImport: i0, template: "@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>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ThreadHistoryComponent, selector: "thread-history" }, { kind: "component", type: FavoritePromptListComponent, selector: "favorite-prompt-list" }, { kind: "component", type: InputAreaComponent, selector: "input-area" }, { kind: "component", type: HeaderComponent, selector: "header" }, { kind: "component", type: MessageAreaComponent, selector: "message-area" }] });
6244
6254
  }
6245
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ChatComponent, decorators: [{
6255
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ChatComponent, decorators: [{
6246
6256
  type: Component,
6247
6257
  args: [{ selector: 'chat', imports: [MODULES$1, COMPONENTS$1], providers: [
6248
6258
  MessageFacade,
@@ -6384,59 +6394,6 @@ const IoAssistDynamicConfigSchema = z.object({
6384
6394
  .optional(),
6385
6395
  });
6386
6396
 
6387
- /**
6388
- * Service to load consumer assets like stylesheets and scripts.
6389
- *
6390
- * Assets are directly appended to the document head and body.
6391
- */
6392
- class ConsumerAssetLoaderService {
6393
- _logger = inject(LoggerService);
6394
- LOGGER_NAME = 'ConsumerAssetLoaderService';
6395
- _links = [
6396
- 'https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap',
6397
- 'https://cdnjs.cloudflare.com/ajax/libs/prism/1.30.0/themes/prism-twilight.min.css',
6398
- // add more stylesheets if needed
6399
- ];
6400
- _scripts = [
6401
- 'https://cdnjs.cloudflare.com/ajax/libs/prism/1.30.0/prism.min.js',
6402
- 'https://cdnjs.cloudflare.com/ajax/libs/prism/1.30.0/plugins/autoloader/prism-autoloader.min.js',
6403
- // add more scripts if needed
6404
- ];
6405
- _isLoaded = signal(false, ...(ngDevMode ? [{ debugName: "_isLoaded" }] : []));
6406
- loadConsumerAssets() {
6407
- if (this._isLoaded()) {
6408
- this._logger.get(this.LOGGER_NAME).warn('Consumer assets have already been loaded.');
6409
- return;
6410
- }
6411
- this.loadLinks();
6412
- this.loadScripts();
6413
- this._isLoaded.set(true);
6414
- }
6415
- loadLinks() {
6416
- this._links.forEach((href) => {
6417
- const linkElement = document.createElement('link');
6418
- linkElement.rel = 'stylesheet';
6419
- linkElement.href = href;
6420
- document.head.appendChild(linkElement);
6421
- });
6422
- }
6423
- loadScripts() {
6424
- this._scripts.forEach((src) => {
6425
- const scriptElement = document.createElement('script');
6426
- scriptElement.src = src;
6427
- document.body.appendChild(scriptElement);
6428
- });
6429
- }
6430
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ConsumerAssetLoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6431
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ConsumerAssetLoaderService, providedIn: 'root' });
6432
- }
6433
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ConsumerAssetLoaderService, decorators: [{
6434
- type: Injectable,
6435
- args: [{
6436
- providedIn: 'root',
6437
- }]
6438
- }] });
6439
-
6440
6397
  const COMPONENTS = [AppSpinnerComponent, ChatComponent];
6441
6398
  const MODULES = [CommonModule];
6442
6399
  class IoAssist {
@@ -6456,31 +6413,26 @@ class IoAssist {
6456
6413
  appCoreServicesError = this._appLifecycleFacade.appCoreServicesErrorMessage;
6457
6414
  isAppCoreServicesError = computed(() => this._appLifecycleFacade.appCoreServicesErrorMessage() !== null, ...(ngDevMode ? [{ debugName: "isAppCoreServicesError" }] : []));
6458
6415
  isAppCoreServicesPending = this._appLifecycleFacade.isPendingAppCoreServicesOperation;
6459
- _consumerAssetLoaderService = inject(ConsumerAssetLoaderService);
6460
6416
  ngOnInit() {
6461
6417
  const parsedConfig = IoAssistDynamicConfigSchema.parse(this.config());
6462
6418
  this._dynamicConfigToken.set(parsedConfig);
6463
6419
  this.registerEffects();
6464
6420
  }
6465
- // Must be explicitly called after view init to ensure that the DOM is ready for asset injection
6466
- ngAfterViewInit() {
6467
- this._consumerAssetLoaderService.loadConsumerAssets();
6468
- }
6469
6421
  refreshPage() {
6470
6422
  window.location.reload();
6471
6423
  }
6472
6424
  registerEffects() {
6473
6425
  this._effectService.registerEffect('IoAssist.subscribeToThemeChanges', () => this.isIoReady() && this._ioService.startIODependentTasks());
6474
6426
  }
6475
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: IoAssist, deps: [], target: i0.ɵɵFactoryTarget.Component });
6476
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: IoAssist, isStandalone: true, selector: "io-assist", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, providers: [
6427
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: IoAssist, deps: [], target: i0.ɵɵFactoryTarget.Component });
6428
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.22", type: IoAssist, isStandalone: true, selector: "io-assist", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, providers: [
6477
6429
  {
6478
6430
  provide: ComponentEffectManagerService,
6479
6431
  useFactory: () => new ComponentEffectManagerService('IoAssist'),
6480
6432
  },
6481
6433
  ], ngImport: i0, template: "@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", dependencies: [{ kind: "component", type: AppSpinnerComponent, selector: "app-spinner", inputs: ["size"] }, { kind: "component", type: ChatComponent, selector: "chat" }, { kind: "ngmodule", type: CommonModule }] });
6482
6434
  }
6483
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: IoAssist, decorators: [{
6435
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: IoAssist, decorators: [{
6484
6436
  type: Component,
6485
6437
  args: [{ selector: 'io-assist', imports: [...COMPONENTS, ...MODULES], providers: [
6486
6438
  {
@@ -6488,7 +6440,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
6488
6440
  useFactory: () => new ComponentEffectManagerService('IoAssist'),
6489
6441
  },
6490
6442
  ], template: "@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" }]
6491
- }] });
6443
+ }], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: true }] }] } });
6492
6444
 
6493
6445
  class AgentManagerService {
6494
6446
  _ioIntelWebService = inject(IOAiWebService);
@@ -6505,10 +6457,10 @@ class AgentManagerService {
6505
6457
  throw new Error('Failed to fetch agents.');
6506
6458
  }
6507
6459
  }
6508
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AgentManagerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6509
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AgentManagerService, providedIn: 'root' });
6460
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AgentManagerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6461
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AgentManagerService, providedIn: 'root' });
6510
6462
  }
6511
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AgentManagerService, decorators: [{
6463
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AgentManagerService, decorators: [{
6512
6464
  type: Injectable,
6513
6465
  args: [{
6514
6466
  providedIn: 'root',
@@ -6547,10 +6499,10 @@ class AgentEffects {
6547
6499
  getLogger() {
6548
6500
  return this._logger.get(this.LOGGER_NAME);
6549
6501
  }
6550
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AgentEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6551
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AgentEffects });
6502
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AgentEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6503
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AgentEffects });
6552
6504
  }
6553
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AgentEffects, decorators: [{
6505
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AgentEffects, decorators: [{
6554
6506
  type: Injectable
6555
6507
  }] });
6556
6508
 
@@ -6608,10 +6560,10 @@ class AppLifecycleEffects {
6608
6560
  this._promptFacade.dispatchParsePromptsConfig();
6609
6561
  // this._xxxFacade.dispatchListXXX();
6610
6562
  })), { dispatch: false });
6611
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AppLifecycleEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6612
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AppLifecycleEffects });
6563
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AppLifecycleEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6564
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AppLifecycleEffects });
6613
6565
  }
6614
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: AppLifecycleEffects, decorators: [{
6566
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: AppLifecycleEffects, decorators: [{
6615
6567
  type: Injectable
6616
6568
  }] });
6617
6569
 
@@ -6778,9 +6730,10 @@ class ThreadService {
6778
6730
  const existingCall = toolCallMap.get(toolCallId);
6779
6731
  if (existingCall) {
6780
6732
  existingCall.result = toolInvocation.result;
6733
+ // Skip adding new message
6734
+ return null;
6781
6735
  }
6782
- // Skip adding new message
6783
- return null;
6736
+ // No preceding call found (new format: Tool part comes directly with a tool result)
6784
6737
  }
6785
6738
  const newMessage = {
6786
6739
  id: toolCallId,
@@ -6804,10 +6757,10 @@ class ThreadService {
6804
6757
  };
6805
6758
  return UIThread;
6806
6759
  }
6807
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ThreadService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6808
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ThreadService, providedIn: 'root' });
6760
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ThreadService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6761
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ThreadService, providedIn: 'root' });
6809
6762
  }
6810
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ThreadService, decorators: [{
6763
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ThreadService, decorators: [{
6811
6764
  type: Injectable,
6812
6765
  args: [{
6813
6766
  providedIn: 'root',
@@ -6916,10 +6869,10 @@ class MessageEffects {
6916
6869
  }));
6917
6870
  return of(getResponseFailure({ error, threadId }));
6918
6871
  }
6919
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: MessageEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6920
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: MessageEffects });
6872
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: MessageEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6873
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: MessageEffects });
6921
6874
  }
6922
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: MessageEffects, decorators: [{
6875
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: MessageEffects, decorators: [{
6923
6876
  type: Injectable
6924
6877
  }] });
6925
6878
 
@@ -7231,10 +7184,10 @@ class PromptService {
7231
7184
  getLogger() {
7232
7185
  return this._logger.get(this.LOGGER_NAME);
7233
7186
  }
7234
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PromptService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7235
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PromptService, providedIn: 'root' });
7187
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: PromptService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7188
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: PromptService, providedIn: 'root' });
7236
7189
  }
7237
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PromptService, decorators: [{
7190
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: PromptService, decorators: [{
7238
7191
  type: Injectable,
7239
7192
  args: [{
7240
7193
  providedIn: 'root',
@@ -7282,10 +7235,10 @@ class PromptEffects {
7282
7235
  closeOverlayOnPromptSelect$ = createEffect(() => this._actions$.pipe(ofType(selectPrompt), map(() => {
7283
7236
  this._overlayService.closeCurrentOverlay();
7284
7237
  })), { dispatch: false });
7285
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PromptEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7286
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PromptEffects });
7238
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: PromptEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7239
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: PromptEffects });
7287
7240
  }
7288
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PromptEffects, decorators: [{
7241
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: PromptEffects, decorators: [{
7289
7242
  type: Injectable
7290
7243
  }] });
7291
7244
 
@@ -7503,10 +7456,10 @@ class ThreadEffects {
7503
7456
  changeActiveThread$ = createEffect(() => this._actions$.pipe(ofType(changeActiveThread), map((action) => {
7504
7457
  return untrackThreadStreamState({ threadId: action.threadId ?? '' });
7505
7458
  })));
7506
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ThreadEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7507
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ThreadEffects });
7459
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ThreadEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7460
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ThreadEffects });
7508
7461
  }
7509
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ThreadEffects, decorators: [{
7462
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ThreadEffects, decorators: [{
7510
7463
  type: Injectable
7511
7464
  }] });
7512
7465
 
@@ -7590,10 +7543,10 @@ class ToolsService {
7590
7543
  toggleTool(tool) {
7591
7544
  return this._ioIntelWebService.toggleTool(tool.name, !tool.enabled);
7592
7545
  }
7593
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ToolsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7594
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ToolsService, providedIn: 'root' });
7546
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ToolsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7547
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ToolsService, providedIn: 'root' });
7595
7548
  }
7596
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ToolsService, decorators: [{
7549
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ToolsService, decorators: [{
7597
7550
  type: Injectable,
7598
7551
  args: [{
7599
7552
  providedIn: 'root',
@@ -7628,10 +7581,10 @@ class ToolEffects {
7628
7581
  }))));
7629
7582
  }));
7630
7583
  });
7631
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ToolEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7632
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ToolEffects });
7584
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ToolEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7585
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ToolEffects });
7633
7586
  }
7634
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: ToolEffects, decorators: [{
7587
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: ToolEffects, decorators: [{
7635
7588
  type: Injectable
7636
7589
  }] });
7637
7590
 
@@ -7698,10 +7651,10 @@ class WorkingContextEffects {
7698
7651
  error: error instanceof Error ? error : new Error(String(error)),
7699
7652
  }))));
7700
7653
  })));
7701
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: WorkingContextEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7702
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: WorkingContextEffects });
7654
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: WorkingContextEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7655
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: WorkingContextEffects });
7703
7656
  }
7704
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: WorkingContextEffects, decorators: [{
7657
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.22", ngImport: i0, type: WorkingContextEffects, decorators: [{
7705
7658
  type: Injectable
7706
7659
  }] });
7707
7660