@threadplane/chat 0.0.52 → 0.0.54

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.
@@ -1,9 +1,10 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, input, inject, TemplateRef, Directive, contentChildren, computed, ChangeDetectionStrategy, Component, signal, Injectable, ContentChild, effect, output, DOCUMENT, ViewEncapsulation, viewChild, model, contentChild, untracked, ElementRef, DestroyRef, makeEnvironmentProviders, Injector, runInInjectionContext, ViewContainerRef, SecurityContext } from '@angular/core';
2
+ import { InjectionToken, input, inject, TemplateRef, Directive, contentChildren, computed, ChangeDetectionStrategy, Component, signal, Injectable, ContentChild, effect, output, DOCUMENT, ViewEncapsulation, viewChild, model, contentChild, untracked, ElementRef, ViewContainerRef, DestroyRef, makeEnvironmentProviders, Injector, runInInjectionContext, SecurityContext } from '@angular/core';
3
3
  import { NgTemplateOutlet, NgComponentOutlet, KeyValuePipe } from '@angular/common';
4
4
  import { createPartialMarkdownParser, materialize } from '@cacheplane/partial-markdown';
5
5
  import { views, RenderSpecComponent, toRenderRegistry, signalStateStore, withViews, RenderElementComponent, injectRenderHost } from '@threadplane/render';
6
6
  export { toRenderRegistry, views, withViews, withoutViews } from '@threadplane/render';
7
+ import { DomSanitizer } from '@angular/platform-browser';
7
8
  import { runLicenseCheck, inferNoncommercial, LICENSE_PUBLIC_KEY } from '@threadplane/licensing';
8
9
  import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
9
10
  import { Router, NavigationEnd } from '@angular/router';
@@ -263,25 +264,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
263
264
  // libs/chat/src/lib/styles/chat-tokens.ts
264
265
  // SPDX-License-Identifier: MIT
265
266
  const LIGHT_TOKENS = `
266
- --ngaf-chat-bg: rgb(255, 255, 255);
267
- --ngaf-chat-surface: rgb(255, 255, 255);
268
- --ngaf-chat-surface-alt: rgb(251, 251, 251);
269
- --ngaf-chat-primary: rgb(28, 28, 28);
270
- --ngaf-chat-on-primary: rgb(255, 255, 255);
271
- --ngaf-chat-text: rgb(28, 28, 28);
272
- --ngaf-chat-text-muted: rgb(115, 115, 115);
273
- --ngaf-chat-separator: rgb(229, 229, 229);
274
- --ngaf-chat-muted: rgb(200, 200, 200);
275
- --ngaf-chat-error-bg: #fef2f2;
276
- --ngaf-chat-error-border: #fecaca;
277
- --ngaf-chat-error-text: #dc2626;
278
- --ngaf-chat-destructive: #dc2626;
279
- --ngaf-chat-warning-bg: #fffbeb;
280
- --ngaf-chat-warning-text: #b45309;
281
- --ngaf-chat-success: #16a34a;
282
- --ngaf-chat-shadow-sm: 0 1px 2px rgba(0,0,0,.05);
283
- --ngaf-chat-shadow-md: 0 4px 6px -1px rgba(0,0,0,.10), 0 2px 4px -1px rgba(0,0,0,.06);
284
- --ngaf-chat-shadow-lg: 0 10px 15px -3px rgba(0,0,0,.10), 0 4px 6px -2px rgba(0,0,0,.05);
267
+ --tplane-chat-bg: rgb(255, 255, 255);
268
+ --tplane-chat-surface: rgb(255, 255, 255);
269
+ --tplane-chat-surface-alt: rgb(251, 251, 251);
270
+ --tplane-chat-primary: rgb(28, 28, 28);
271
+ --tplane-chat-on-primary: rgb(255, 255, 255);
272
+ --tplane-chat-text: rgb(28, 28, 28);
273
+ --tplane-chat-text-muted: rgb(115, 115, 115);
274
+ --tplane-chat-separator: rgb(229, 229, 229);
275
+ --tplane-chat-muted: rgb(200, 200, 200);
276
+ --tplane-chat-error-bg: #fef2f2;
277
+ --tplane-chat-error-border: #fecaca;
278
+ --tplane-chat-error-text: #dc2626;
279
+ --tplane-chat-destructive: #dc2626;
280
+ --tplane-chat-warning-bg: #fffbeb;
281
+ --tplane-chat-warning-text: #b45309;
282
+ --tplane-chat-success: #16a34a;
283
+ --tplane-chat-shadow-sm: 0 1px 2px rgba(0,0,0,.05);
284
+ --tplane-chat-shadow-md: 0 4px 6px -1px rgba(0,0,0,.10), 0 2px 4px -1px rgba(0,0,0,.06);
285
+ --tplane-chat-shadow-lg: 0 10px 15px -3px rgba(0,0,0,.10), 0 4px 6px -2px rgba(0,0,0,.05);
285
286
 
286
287
  /* --a2ui-* light variant */
287
288
  --a2ui-primary: #4f8df5;
@@ -306,22 +307,22 @@ const LIGHT_TOKENS = `
306
307
  --a2ui-elevation-5: 0 16px 32px rgba(0, 0, 0, 0.18);
307
308
  `;
308
309
  const DARK_TOKENS = `
309
- --ngaf-chat-bg: rgb(17, 17, 17);
310
- --ngaf-chat-surface: rgb(28, 28, 28);
311
- --ngaf-chat-surface-alt: rgb(44, 44, 44);
312
- --ngaf-chat-primary: rgb(255, 255, 255);
313
- --ngaf-chat-on-primary: rgb(28, 28, 28);
314
- --ngaf-chat-text: rgb(245, 245, 245);
315
- --ngaf-chat-text-muted: rgb(160, 160, 160);
316
- --ngaf-chat-separator: rgb(45, 45, 45);
317
- --ngaf-chat-muted: rgb(60, 60, 60);
318
- --ngaf-chat-error-bg: rgb(45, 21, 21);
319
- --ngaf-chat-error-border: #dc2626;
320
- --ngaf-chat-error-text: #fca5a5;
321
- --ngaf-chat-destructive: #ef4444;
322
- --ngaf-chat-warning-bg: rgb(45, 35, 21);
323
- --ngaf-chat-warning-text: #fbbf24;
324
- --ngaf-chat-success: #4ade80;
310
+ --tplane-chat-bg: rgb(17, 17, 17);
311
+ --tplane-chat-surface: rgb(28, 28, 28);
312
+ --tplane-chat-surface-alt: rgb(44, 44, 44);
313
+ --tplane-chat-primary: rgb(255, 255, 255);
314
+ --tplane-chat-on-primary: rgb(28, 28, 28);
315
+ --tplane-chat-text: rgb(245, 245, 245);
316
+ --tplane-chat-text-muted: rgb(160, 160, 160);
317
+ --tplane-chat-separator: rgb(45, 45, 45);
318
+ --tplane-chat-muted: rgb(60, 60, 60);
319
+ --tplane-chat-error-bg: rgb(45, 21, 21);
320
+ --tplane-chat-error-border: #dc2626;
321
+ --tplane-chat-error-text: #fca5a5;
322
+ --tplane-chat-destructive: #ef4444;
323
+ --tplane-chat-warning-bg: rgb(45, 35, 21);
324
+ --tplane-chat-warning-text: #fbbf24;
325
+ --tplane-chat-success: #4ade80;
325
326
 
326
327
  /* --a2ui-* dark variant (preserves current chat.css values) */
327
328
  --a2ui-primary: #4f8df5;
@@ -346,46 +347,46 @@ const DARK_TOKENS = `
346
347
  --a2ui-elevation-5: 0 16px 32px rgba(0, 0, 0, 0.5);
347
348
  `;
348
349
  const GEOMETRY_TOKENS = `
349
- --ngaf-chat-radius-bubble: 15px;
350
- --ngaf-chat-radius-input: 20px;
351
- --ngaf-chat-radius-card: 8px;
352
- --ngaf-chat-radius-button: 8px;
353
- --ngaf-chat-radius-launcher: 9999px;
354
- --ngaf-chat-max-width: 48rem;
350
+ --tplane-chat-radius-bubble: 15px;
351
+ --tplane-chat-radius-input: 20px;
352
+ --tplane-chat-radius-card: 8px;
353
+ --tplane-chat-radius-button: 8px;
354
+ --tplane-chat-radius-launcher: 9999px;
355
+ --tplane-chat-max-width: 48rem;
355
356
  `;
356
357
  const TYPOGRAPHY_TOKENS = `
357
- --ngaf-chat-font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
358
- --ngaf-chat-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
359
- --ngaf-chat-font-size: 1rem;
360
- --ngaf-chat-font-size-sm: 0.875rem;
361
- --ngaf-chat-font-size-xs: 0.75rem;
362
- --ngaf-chat-line-height: 1.6;
363
- --ngaf-chat-line-height-tight: 1.5;
358
+ --tplane-chat-font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
359
+ --tplane-chat-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
360
+ --tplane-chat-font-size: 1rem;
361
+ --tplane-chat-font-size-sm: 0.875rem;
362
+ --tplane-chat-font-size-xs: 0.75rem;
363
+ --tplane-chat-line-height: 1.6;
364
+ --tplane-chat-line-height-tight: 1.5;
364
365
  `;
365
366
  const SPACING_TOKENS = `
366
- --ngaf-chat-space-1: 4px;
367
- --ngaf-chat-space-2: 8px;
368
- --ngaf-chat-space-3: 12px;
369
- --ngaf-chat-space-4: 16px;
370
- --ngaf-chat-space-5: 20px;
371
- --ngaf-chat-space-6: 24px;
372
- --ngaf-chat-space-8: 32px;
373
- --ngaf-chat-edge-pad: 16px;
374
- --ngaf-chat-input-gap: 0.75rem;
375
- --ngaf-chat-sidenav-width-expanded: 280px;
376
- --ngaf-chat-sidenav-width-collapsed: 56px;
377
- --ngaf-chat-sidenav-width-drawer: 280px;
367
+ --tplane-chat-space-1: 4px;
368
+ --tplane-chat-space-2: 8px;
369
+ --tplane-chat-space-3: 12px;
370
+ --tplane-chat-space-4: 16px;
371
+ --tplane-chat-space-5: 20px;
372
+ --tplane-chat-space-6: 24px;
373
+ --tplane-chat-space-8: 32px;
374
+ --tplane-chat-edge-pad: 16px;
375
+ --tplane-chat-input-gap: 0.75rem;
376
+ --tplane-chat-sidenav-width-expanded: 280px;
377
+ --tplane-chat-sidenav-width-collapsed: 56px;
378
+ --tplane-chat-sidenav-width-drawer: 280px;
378
379
  `;
379
380
  const LAYER_TOKENS = `
380
381
  /* Z-index layers — documented for consumers + future primitives.
381
382
  * Default values listed; overridable per-app via :root or :host.
382
383
  * Modal layers sit above drawer so palettes/dialogs stay reachable
383
384
  * when the drawer is open. */
384
- --ngaf-chat-z-overlay-content: 30; /* chat-sidebar panel, chat-popup window */
385
- --ngaf-chat-z-drawer-scrim: 1000; /* chat-sidenav-scrim backdrop */
386
- --ngaf-chat-z-drawer: 1001; /* chat-sidenav drawer mode host */
387
- --ngaf-chat-z-modal-scrim: 1100; /* chat-history-search-palette backdrop */
388
- --ngaf-chat-z-modal: 1101; /* chat-history-search-palette dialog */
385
+ --tplane-chat-z-overlay-content: 30; /* chat-sidebar panel, chat-popup window */
386
+ --tplane-chat-z-drawer-scrim: 1000; /* chat-sidenav-scrim backdrop */
387
+ --tplane-chat-z-drawer: 1001; /* chat-sidenav drawer mode host */
388
+ --tplane-chat-z-modal-scrim: 1100; /* chat-history-search-palette backdrop */
389
+ --tplane-chat-z-modal: 1101; /* chat-history-search-palette dialog */
389
390
  `;
390
391
  const EDGE_CLAIM_TOKENS = `
391
392
  /* Edge-claim primitive — peer-aware panel coexistence.
@@ -395,51 +396,51 @@ const EDGE_CLAIM_TOKENS = `
395
396
  not using chat-sidebar/chat-debug see zero overhead.
396
397
 
397
398
  TWO LAYERS:
398
- 1. Per-component claim vars (--ngaf-chat-<component>-claim-<edge>)
399
+ 1. Per-component claim vars (--tplane-chat-<component>-claim-<edge>)
399
400
  are read by PEERS only — never by the component that wrote
400
401
  them. This eliminates self-feedback (where a right-docked
401
402
  panel would offset itself by reading its own claim).
402
403
  2. Aggregate occupy-* vars are convenience reads for external
403
404
  consumers and for cases where any-panel-on-edge matters. */
404
- --ngaf-chat-occupy-top: 0px;
405
- --ngaf-chat-occupy-right: 0px;
406
- --ngaf-chat-occupy-bottom: 0px;
407
- --ngaf-chat-occupy-left: 0px;
405
+ --tplane-chat-occupy-top: 0px;
406
+ --tplane-chat-occupy-right: 0px;
407
+ --tplane-chat-occupy-bottom: 0px;
408
+ --tplane-chat-occupy-left: 0px;
408
409
 
409
410
  /* Per-component claims (peer-only reads). */
410
- --ngaf-chat-sidebar-claim-right: 0px;
411
- --ngaf-chat-debug-claim-top: 0px;
412
- --ngaf-chat-debug-claim-right: 0px;
413
- --ngaf-chat-debug-claim-bottom: 0px;
414
- --ngaf-chat-debug-claim-left: 0px;
411
+ --tplane-chat-sidebar-claim-right: 0px;
412
+ --tplane-chat-debug-claim-top: 0px;
413
+ --tplane-chat-debug-claim-right: 0px;
414
+ --tplane-chat-debug-claim-bottom: 0px;
415
+ --tplane-chat-debug-claim-left: 0px;
415
416
 
416
417
  /* Sizes the chat-debug dock contributes when it claims an edge.
417
418
  Split by orientation so consumers can override independently. */
418
- --ngaf-chat-debug-panel-size-h: 40vh;
419
- --ngaf-chat-debug-panel-size-w: 420px;
419
+ --tplane-chat-debug-panel-size-h: 40vh;
420
+ --tplane-chat-debug-panel-size-w: 420px;
420
421
  `;
421
422
  const KEYFRAMES = `
422
- @keyframes ngaf-chat-spin {
423
+ @keyframes tplane-chat-spin {
423
424
  0% { transform: rotate(0deg); }
424
425
  100% { transform: rotate(360deg); }
425
426
  }
426
- @keyframes ngaf-chat-typing-dot {
427
+ @keyframes tplane-chat-typing-dot {
427
428
  0%, 80%, 100% { transform: scale(0.5); opacity: 0.5; }
428
429
  40% { transform: scale(1); opacity: 1; }
429
430
  }
430
- @keyframes ngaf-chat-pulse {
431
+ @keyframes tplane-chat-pulse {
431
432
  0%, 100% { opacity: 1; }
432
433
  50% { opacity: 0.6; }
433
434
  }
434
- @keyframes ngaf-chat-caret-blink {
435
+ @keyframes tplane-chat-caret-blink {
435
436
  0%, 50% { opacity: 1; }
436
437
  50.01%, 100% { opacity: 0; }
437
438
  }
438
- @keyframes ngaf-chat-caret-fade-in {
439
+ @keyframes tplane-chat-caret-fade-in {
439
440
  from { opacity: 0; }
440
441
  to { opacity: 1; }
441
442
  }
442
- @keyframes ngaf-chat-welcome-mount {
443
+ @keyframes tplane-chat-welcome-mount {
443
444
  from { opacity: 0; transform: translateY(-8px); }
444
445
  to { opacity: 1; transform: translateY(0); }
445
446
  }
@@ -452,21 +453,21 @@ const KEYFRAMES = `
452
453
  *
453
454
  * Token *defaults* are NOT set on `:host` — they're set on `:root` via the
454
455
  * shared style element below (`ensureChatRootStyles()`). That shift is what
455
- * makes the documented `:root { --ngaf-chat-*: ... }` consumer override
456
+ * makes the documented `:root { --tplane-chat-*: ... }` consumer override
456
457
  * actually work, because direct-on-host token settings would shadow
457
458
  * inheritance regardless of CSS specificity.
458
459
  */
459
460
  const CHAT_HOST_TOKENS = `
460
461
  :host {
461
- font-family: var(--ngaf-chat-font-family);
462
- color: var(--ngaf-chat-text);
462
+ font-family: var(--tplane-chat-font-family);
463
+ color: var(--tplane-chat-text);
463
464
  }
464
465
  `;
465
466
  // Note: @keyframes are NOT placed in CHAT_HOST_TOKENS. Angular's emulated
466
467
  // view encapsulation scopes @keyframes names per-component, which can
467
468
  // desynchronise from animation property references when styles are
468
469
  // concatenated across helper strings. They're injected globally via
469
- // ROOT_TOKEN_STYLES below so the names match what `animation: ngaf-chat-*`
470
+ // ROOT_TOKEN_STYLES below so the names match what `animation: tplane-chat-*`
470
471
  // references in component styles (which Angular leaves untouched).
471
472
  /**
472
473
  * WCAG 2.3.3 — honor the OS-level "Reduce Motion" preference. Collapses
@@ -489,9 +490,9 @@ const REDUCED_MOTION_STYLES = `
489
490
  }
490
491
 
491
492
  .tcc__pill[data-status="running"] svg,
492
- .ngaf-chat-typing-dot,
493
- .ngaf-chat-caret,
494
- .ngaf-chat-welcome__pulse,
493
+ .tplane-chat-typing-dot,
494
+ .tplane-chat-caret,
495
+ .tplane-chat-welcome__pulse,
495
496
  .chat-genui-skeleton,
496
497
  .chat-debug__pill--active {
497
498
  animation: none !important;
@@ -505,8 +506,8 @@ const REDUCED_MOTION_STYLES = `
505
506
  `;
506
507
  /**
507
508
  * Token defaults written to `<head>` once on first chat-component
508
- * construction. Wrapped in `@layer ngaf-chat` so the consumer's unlayered
509
- * `:root { --ngaf-chat-*: ... }` rule beats the lib's defaults regardless
509
+ * construction. Wrapped in `@layer tplane-chat` so the consumer's unlayered
510
+ * `:root { --tplane-chat-*: ... }` rule beats the lib's defaults regardless
510
511
  * of source order — the standard CSS pattern for framework defaults.
511
512
  *
512
513
  * Theme switching:
@@ -579,7 +580,7 @@ const A2UI_INVARIANT_TOKENS = `
579
580
  --a2ui-border: var(--a2ui-outline);
580
581
  `;
581
582
  const ROOT_TOKEN_STYLES = `
582
- @layer ngaf-chat {
583
+ @layer tplane-chat {
583
584
  :root {
584
585
  ${LIGHT_TOKENS}
585
586
  ${GEOMETRY_TOKENS}
@@ -605,28 +606,28 @@ const ROOT_TOKEN_STYLES = `
605
606
  chat-sidebar sets data-threadplane-chat-sidebar="open" while its panel is open.
606
607
  chat-debug sets data-threadplane-chat-debug to its current dock while open. */
607
608
  :root[data-threadplane-chat-sidebar="open"] {
608
- --ngaf-chat-sidebar-claim-right: var(--ngaf-chat-sidebar-width-drawer, 28rem);
609
- --ngaf-chat-occupy-right: var(--ngaf-chat-sidebar-width-drawer, 28rem);
609
+ --tplane-chat-sidebar-claim-right: var(--tplane-chat-sidebar-width-drawer, 28rem);
610
+ --tplane-chat-occupy-right: var(--tplane-chat-sidebar-width-drawer, 28rem);
610
611
  }
611
612
  :root[data-threadplane-chat-debug="bottom"] {
612
- --ngaf-chat-debug-claim-bottom: var(--ngaf-chat-debug-panel-size-h, 40vh);
613
- --ngaf-chat-occupy-bottom: var(--ngaf-chat-debug-panel-size-h, 40vh);
613
+ --tplane-chat-debug-claim-bottom: var(--tplane-chat-debug-panel-size-h, 40vh);
614
+ --tplane-chat-occupy-bottom: var(--tplane-chat-debug-panel-size-h, 40vh);
614
615
  }
615
616
  :root[data-threadplane-chat-debug="right"] {
616
- --ngaf-chat-debug-claim-right: var(--ngaf-chat-debug-panel-size-w, 420px);
617
- --ngaf-chat-occupy-right: var(--ngaf-chat-debug-panel-size-w, 420px);
617
+ --tplane-chat-debug-claim-right: var(--tplane-chat-debug-panel-size-w, 420px);
618
+ --tplane-chat-occupy-right: var(--tplane-chat-debug-panel-size-w, 420px);
618
619
  }
619
620
  :root[data-threadplane-chat-debug="left"] {
620
- --ngaf-chat-debug-claim-left: var(--ngaf-chat-debug-panel-size-w, 420px);
621
- --ngaf-chat-occupy-left: var(--ngaf-chat-debug-panel-size-w, 420px);
621
+ --tplane-chat-debug-claim-left: var(--tplane-chat-debug-panel-size-w, 420px);
622
+ --tplane-chat-occupy-left: var(--tplane-chat-debug-panel-size-w, 420px);
622
623
  }
623
624
  }
624
625
  ${KEYFRAMES}
625
626
  ${REDUCED_MOTION_STYLES}
626
627
  `;
627
- const STYLE_ELEMENT_ID = 'ngaf-chat-root-tokens';
628
+ const STYLE_ELEMENT_ID = 'tplane-chat-root-tokens';
628
629
  /**
629
- * Idempotent: appends a `<style id="ngaf-chat-root-tokens">` to `<head>`
630
+ * Idempotent: appends a `<style id="tplane-chat-root-tokens">` to `<head>`
630
631
  * the first time it's called. Subsequent calls are no-ops.
631
632
  *
632
633
  * No-op outside the browser (server-side rendering).
@@ -664,8 +665,8 @@ const CHAT_MESSAGE_LIST_STYLES = `
664
665
  display: flex;
665
666
  flex-direction: column;
666
667
  gap: 0;
667
- padding: var(--ngaf-chat-space-4) var(--ngaf-chat-space-6);
668
- max-width: var(--ngaf-chat-max-width);
668
+ padding: var(--tplane-chat-space-4) var(--tplane-chat-space-6);
669
+ max-width: var(--tplane-chat-max-width);
669
670
  margin: 0 auto;
670
671
  width: 100%;
671
672
  box-sizing: border-box;
@@ -710,7 +711,7 @@ class ChatMessageListComponent {
710
711
  />
711
712
  }
712
713
  }
713
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:flex;flex-direction:column;gap:0;padding:var(--ngaf-chat-space-4) var(--ngaf-chat-space-6);max-width:var(--ngaf-chat-max-width);margin:0 auto;width:100%;box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
714
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:flex;flex-direction:column;gap:0;padding:var(--tplane-chat-space-4) var(--tplane-chat-space-6);max-width:var(--tplane-chat-max-width);margin:0 auto;width:100%;box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
714
715
  }
715
716
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatMessageListComponent, decorators: [{
716
717
  type: Component,
@@ -724,7 +725,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
724
725
  />
725
726
  }
726
727
  }
727
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:flex;flex-direction:column;gap:0;padding:var(--ngaf-chat-space-4) var(--ngaf-chat-space-6);max-width:var(--ngaf-chat-max-width);margin:0 auto;width:100%;box-sizing:border-box}\n"] }]
728
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:flex;flex-direction:column;gap:0;padding:var(--tplane-chat-space-4) var(--tplane-chat-space-6);max-width:var(--tplane-chat-max-width);margin:0 auto;width:100%;box-sizing:border-box}\n"] }]
728
729
  }], propDecorators: { agent: [{ type: i0.Input, args: [{ isSignal: true, alias: "agent", required: true }] }], messageTemplates: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => MessageTemplateDirective), { isSignal: true }] }] } });
729
730
 
730
731
  // libs/chat/src/lib/styles/chat-message.styles.ts
@@ -751,9 +752,9 @@ const CHAT_MESSAGE_STYLES = `
751
752
  display: block;
752
753
  position: relative;
753
754
  margin-top: 1.5rem;
754
- color: var(--ngaf-chat-text);
755
+ color: var(--tplane-chat-text);
755
756
  line-height: 1.55;
756
- font-size: var(--ngaf-chat-font-size);
757
+ font-size: var(--tplane-chat-font-size);
757
758
  max-width: 100%;
758
759
  }
759
760
  :host([data-role="assistant"]):first-child { margin-top: 0; }
@@ -761,12 +762,12 @@ const CHAT_MESSAGE_STYLES = `
761
762
  .chat-message__bubble {
762
763
  width: fit-content;
763
764
  padding: 8px 12px;
764
- border-radius: var(--ngaf-chat-radius-bubble);
765
- background: var(--ngaf-chat-primary);
766
- color: var(--ngaf-chat-on-primary);
765
+ border-radius: var(--tplane-chat-radius-bubble);
766
+ background: var(--tplane-chat-primary);
767
+ color: var(--tplane-chat-on-primary);
767
768
  white-space: pre-wrap;
768
- line-height: var(--ngaf-chat-line-height-tight);
769
- font-size: var(--ngaf-chat-font-size);
769
+ line-height: var(--tplane-chat-line-height-tight);
770
+ font-size: var(--tplane-chat-font-size);
770
771
  overflow-wrap: break-word;
771
772
  }
772
773
 
@@ -784,12 +785,12 @@ const CHAT_MESSAGE_STYLES = `
784
785
  margin-left: 4px;
785
786
  margin-bottom: 2px;
786
787
  background: radial-gradient(circle at 30% 30%,
787
- var(--ngaf-chat-text) 0%,
788
- var(--ngaf-chat-text-muted) 70%,
788
+ var(--tplane-chat-text) 0%,
789
+ var(--tplane-chat-text-muted) 70%,
789
790
  transparent 100%);
790
- box-shadow: 0 0 6px var(--ngaf-chat-text-muted);
791
- animation: ngaf-chat-caret-fade-in 200ms ease-out 300ms forwards,
792
- ngaf-chat-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) 500ms infinite;
791
+ box-shadow: 0 0 6px var(--tplane-chat-text-muted);
792
+ animation: tplane-chat-caret-fade-in 200ms ease-out 300ms forwards,
793
+ tplane-chat-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) 500ms infinite;
793
794
  opacity: 0;
794
795
  }
795
796
  :host([data-role="assistant"][data-current="true"][data-streaming="true"]) .chat-message__caret {
@@ -822,14 +823,14 @@ const CHAT_MESSAGE_STYLES = `
822
823
  height: 20px;
823
824
  border: 0;
824
825
  background: transparent;
825
- color: var(--ngaf-chat-primary);
826
+ color: var(--tplane-chat-primary);
826
827
  cursor: pointer;
827
828
  padding: 0;
828
829
  transition: transform 200ms ease;
829
830
  }
830
831
  .chat-message__control-btn:hover { transform: scale(1.05); }
831
832
  .chat-message__control-btn:focus-visible {
832
- outline: 2px solid var(--ngaf-chat-primary);
833
+ outline: 2px solid var(--tplane-chat-primary);
833
834
  outline-offset: 2px;
834
835
  border-radius: 4px;
835
836
  }
@@ -1070,7 +1071,7 @@ class ChatMessageComponent {
1070
1071
  <div class="chat-message__controls">
1071
1072
  <ng-content select="[chatMessageControls]" />
1072
1073
  </div>
1073
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block}:host([data-role=\"user\"]){display:block;margin-top:.5rem}:host([data-role=\"user\"][data-prev-role=\"assistant\"]){margin-top:1.5rem}:host([data-role=\"user\"]) .chat-message__bubble{margin-left:auto;max-width:80%}:host([data-role=\"assistant\"]) .chat-message__bubble{max-width:80%}:host([data-role=\"assistant\"]){display:block;position:relative;margin-top:1.5rem;color:var(--ngaf-chat-text);line-height:1.55;font-size:var(--ngaf-chat-font-size);max-width:100%}:host([data-role=\"assistant\"]):first-child{margin-top:0}.chat-message__bubble{width:fit-content;padding:8px 12px;border-radius:var(--ngaf-chat-radius-bubble);background:var(--ngaf-chat-primary);color:var(--ngaf-chat-on-primary);white-space:pre-wrap;line-height:var(--ngaf-chat-line-height-tight);font-size:var(--ngaf-chat-font-size);overflow-wrap:break-word}.chat-message__assistant-body{padding:0 12px 0 4px;overflow-wrap:break-word}.chat-message__caret{display:none;width:8px;height:8px;border-radius:50%;vertical-align:middle;margin-left:4px;margin-bottom:2px;background:radial-gradient(circle at 30% 30%,var(--ngaf-chat-text) 0%,var(--ngaf-chat-text-muted) 70%,transparent 100%);box-shadow:0 0 6px var(--ngaf-chat-text-muted);animation:ngaf-chat-caret-fade-in .2s ease-out .3s forwards,ngaf-chat-pulse 2s cubic-bezier(.4,0,.6,1) .5s infinite;opacity:0}:host([data-role=\"assistant\"][data-current=\"true\"][data-streaming=\"true\"]) .chat-message__caret{display:inline-block}.chat-message__controls{display:none;gap:1rem;opacity:0;transition:opacity .2s ease;pointer-events:none}:host([data-role=\"assistant\"]) .chat-message__controls{display:flex}:host([data-role=\"assistant\"]:hover) .chat-message__controls,:host([data-role=\"assistant\"]:focus-within) .chat-message__controls,:host([data-current=\"true\"]) .chat-message__controls{opacity:1;pointer-events:auto}@media(max-width:768px){:host([data-role=\"assistant\"]) .chat-message__controls{opacity:1;pointer-events:auto}}.chat-message__control-btn{width:20px;height:20px;border:0;background:transparent;color:var(--ngaf-chat-primary);cursor:pointer;padding:0;transition:transform .2s ease}.chat-message__control-btn:hover{transform:scale(1.05)}.chat-message__control-btn:focus-visible{outline:2px solid var(--ngaf-chat-primary);outline-offset:2px;border-radius:4px}.chat-message__control-btn svg{width:16px;height:16px;pointer-events:none}\n"], dependencies: [{ kind: "component", type: ChatCitationsComponent, selector: "chat-citations", inputs: ["message", "heading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1074
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block}:host([data-role=\"user\"]){display:block;margin-top:.5rem}:host([data-role=\"user\"][data-prev-role=\"assistant\"]){margin-top:1.5rem}:host([data-role=\"user\"]) .chat-message__bubble{margin-left:auto;max-width:80%}:host([data-role=\"assistant\"]) .chat-message__bubble{max-width:80%}:host([data-role=\"assistant\"]){display:block;position:relative;margin-top:1.5rem;color:var(--tplane-chat-text);line-height:1.55;font-size:var(--tplane-chat-font-size);max-width:100%}:host([data-role=\"assistant\"]):first-child{margin-top:0}.chat-message__bubble{width:fit-content;padding:8px 12px;border-radius:var(--tplane-chat-radius-bubble);background:var(--tplane-chat-primary);color:var(--tplane-chat-on-primary);white-space:pre-wrap;line-height:var(--tplane-chat-line-height-tight);font-size:var(--tplane-chat-font-size);overflow-wrap:break-word}.chat-message__assistant-body{padding:0 12px 0 4px;overflow-wrap:break-word}.chat-message__caret{display:none;width:8px;height:8px;border-radius:50%;vertical-align:middle;margin-left:4px;margin-bottom:2px;background:radial-gradient(circle at 30% 30%,var(--tplane-chat-text) 0%,var(--tplane-chat-text-muted) 70%,transparent 100%);box-shadow:0 0 6px var(--tplane-chat-text-muted);animation:tplane-chat-caret-fade-in .2s ease-out .3s forwards,tplane-chat-pulse 2s cubic-bezier(.4,0,.6,1) .5s infinite;opacity:0}:host([data-role=\"assistant\"][data-current=\"true\"][data-streaming=\"true\"]) .chat-message__caret{display:inline-block}.chat-message__controls{display:none;gap:1rem;opacity:0;transition:opacity .2s ease;pointer-events:none}:host([data-role=\"assistant\"]) .chat-message__controls{display:flex}:host([data-role=\"assistant\"]:hover) .chat-message__controls,:host([data-role=\"assistant\"]:focus-within) .chat-message__controls,:host([data-current=\"true\"]) .chat-message__controls{opacity:1;pointer-events:auto}@media(max-width:768px){:host([data-role=\"assistant\"]) .chat-message__controls{opacity:1;pointer-events:auto}}.chat-message__control-btn{width:20px;height:20px;border:0;background:transparent;color:var(--tplane-chat-primary);cursor:pointer;padding:0;transition:transform .2s ease}.chat-message__control-btn:hover{transform:scale(1.05)}.chat-message__control-btn:focus-visible{outline:2px solid var(--tplane-chat-primary);outline-offset:2px;border-radius:4px}.chat-message__control-btn svg{width:16px;height:16px;pointer-events:none}\n"], dependencies: [{ kind: "component", type: ChatCitationsComponent, selector: "chat-citations", inputs: ["message", "heading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1074
1075
  }
1075
1076
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatMessageComponent, decorators: [{
1076
1077
  type: Component,
@@ -1090,7 +1091,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
1090
1091
  <div class="chat-message__controls">
1091
1092
  <ng-content select="[chatMessageControls]" />
1092
1093
  </div>
1093
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block}:host([data-role=\"user\"]){display:block;margin-top:.5rem}:host([data-role=\"user\"][data-prev-role=\"assistant\"]){margin-top:1.5rem}:host([data-role=\"user\"]) .chat-message__bubble{margin-left:auto;max-width:80%}:host([data-role=\"assistant\"]) .chat-message__bubble{max-width:80%}:host([data-role=\"assistant\"]){display:block;position:relative;margin-top:1.5rem;color:var(--ngaf-chat-text);line-height:1.55;font-size:var(--ngaf-chat-font-size);max-width:100%}:host([data-role=\"assistant\"]):first-child{margin-top:0}.chat-message__bubble{width:fit-content;padding:8px 12px;border-radius:var(--ngaf-chat-radius-bubble);background:var(--ngaf-chat-primary);color:var(--ngaf-chat-on-primary);white-space:pre-wrap;line-height:var(--ngaf-chat-line-height-tight);font-size:var(--ngaf-chat-font-size);overflow-wrap:break-word}.chat-message__assistant-body{padding:0 12px 0 4px;overflow-wrap:break-word}.chat-message__caret{display:none;width:8px;height:8px;border-radius:50%;vertical-align:middle;margin-left:4px;margin-bottom:2px;background:radial-gradient(circle at 30% 30%,var(--ngaf-chat-text) 0%,var(--ngaf-chat-text-muted) 70%,transparent 100%);box-shadow:0 0 6px var(--ngaf-chat-text-muted);animation:ngaf-chat-caret-fade-in .2s ease-out .3s forwards,ngaf-chat-pulse 2s cubic-bezier(.4,0,.6,1) .5s infinite;opacity:0}:host([data-role=\"assistant\"][data-current=\"true\"][data-streaming=\"true\"]) .chat-message__caret{display:inline-block}.chat-message__controls{display:none;gap:1rem;opacity:0;transition:opacity .2s ease;pointer-events:none}:host([data-role=\"assistant\"]) .chat-message__controls{display:flex}:host([data-role=\"assistant\"]:hover) .chat-message__controls,:host([data-role=\"assistant\"]:focus-within) .chat-message__controls,:host([data-current=\"true\"]) .chat-message__controls{opacity:1;pointer-events:auto}@media(max-width:768px){:host([data-role=\"assistant\"]) .chat-message__controls{opacity:1;pointer-events:auto}}.chat-message__control-btn{width:20px;height:20px;border:0;background:transparent;color:var(--ngaf-chat-primary);cursor:pointer;padding:0;transition:transform .2s ease}.chat-message__control-btn:hover{transform:scale(1.05)}.chat-message__control-btn:focus-visible{outline:2px solid var(--ngaf-chat-primary);outline-offset:2px;border-radius:4px}.chat-message__control-btn svg{width:16px;height:16px;pointer-events:none}\n"] }]
1094
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block}:host([data-role=\"user\"]){display:block;margin-top:.5rem}:host([data-role=\"user\"][data-prev-role=\"assistant\"]){margin-top:1.5rem}:host([data-role=\"user\"]) .chat-message__bubble{margin-left:auto;max-width:80%}:host([data-role=\"assistant\"]) .chat-message__bubble{max-width:80%}:host([data-role=\"assistant\"]){display:block;position:relative;margin-top:1.5rem;color:var(--tplane-chat-text);line-height:1.55;font-size:var(--tplane-chat-font-size);max-width:100%}:host([data-role=\"assistant\"]):first-child{margin-top:0}.chat-message__bubble{width:fit-content;padding:8px 12px;border-radius:var(--tplane-chat-radius-bubble);background:var(--tplane-chat-primary);color:var(--tplane-chat-on-primary);white-space:pre-wrap;line-height:var(--tplane-chat-line-height-tight);font-size:var(--tplane-chat-font-size);overflow-wrap:break-word}.chat-message__assistant-body{padding:0 12px 0 4px;overflow-wrap:break-word}.chat-message__caret{display:none;width:8px;height:8px;border-radius:50%;vertical-align:middle;margin-left:4px;margin-bottom:2px;background:radial-gradient(circle at 30% 30%,var(--tplane-chat-text) 0%,var(--tplane-chat-text-muted) 70%,transparent 100%);box-shadow:0 0 6px var(--tplane-chat-text-muted);animation:tplane-chat-caret-fade-in .2s ease-out .3s forwards,tplane-chat-pulse 2s cubic-bezier(.4,0,.6,1) .5s infinite;opacity:0}:host([data-role=\"assistant\"][data-current=\"true\"][data-streaming=\"true\"]) .chat-message__caret{display:inline-block}.chat-message__controls{display:none;gap:1rem;opacity:0;transition:opacity .2s ease;pointer-events:none}:host([data-role=\"assistant\"]) .chat-message__controls{display:flex}:host([data-role=\"assistant\"]:hover) .chat-message__controls,:host([data-role=\"assistant\"]:focus-within) .chat-message__controls,:host([data-current=\"true\"]) .chat-message__controls{opacity:1;pointer-events:auto}@media(max-width:768px){:host([data-role=\"assistant\"]) .chat-message__controls{opacity:1;pointer-events:auto}}.chat-message__control-btn{width:20px;height:20px;border:0;background:transparent;color:var(--tplane-chat-primary);cursor:pointer;padding:0;transition:transform .2s ease}.chat-message__control-btn:hover{transform:scale(1.05)}.chat-message__control-btn:focus-visible{outline:2px solid var(--tplane-chat-primary);outline-offset:2px;border-radius:4px}.chat-message__control-btn svg{width:16px;height:16px;pointer-events:none}\n"] }]
1094
1095
  }], ctorParameters: () => [], propDecorators: { role: [{ type: i0.Input, args: [{ isSignal: true, alias: "role", required: true }] }], current: [{ type: i0.Input, args: [{ isSignal: true, alias: "current", required: false }] }], streaming: [{ type: i0.Input, args: [{ isSignal: true, alias: "streaming", required: false }] }], prevRole: [{ type: i0.Input, args: [{ isSignal: true, alias: "prevRole", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }] } });
1095
1096
 
1096
1097
  // libs/chat/src/lib/styles/chat-message-actions.styles.ts
@@ -1135,22 +1136,22 @@ const CHAT_MESSAGE_ACTIONS_STYLES = `
1135
1136
  margin: 0;
1136
1137
  border-radius: 6px;
1137
1138
  background: transparent;
1138
- color: var(--ngaf-chat-text-muted);
1139
+ color: var(--tplane-chat-text-muted);
1139
1140
  cursor: pointer;
1140
1141
  transition: color 150ms ease, transform 150ms ease, background 150ms ease;
1141
1142
  }
1142
1143
  .chat-message-actions__btn:hover {
1143
- color: var(--ngaf-chat-text);
1144
+ color: var(--tplane-chat-text);
1144
1145
  transform: scale(1.05);
1145
- background: var(--ngaf-chat-surface-alt);
1146
+ background: var(--tplane-chat-surface-alt);
1146
1147
  }
1147
1148
  .chat-message-actions__btn:focus-visible {
1148
- outline: 2px solid var(--ngaf-chat-text-muted);
1149
+ outline: 2px solid var(--tplane-chat-text-muted);
1149
1150
  outline-offset: 2px;
1150
1151
  }
1151
1152
  .chat-message-actions__btn.is-active {
1152
- color: var(--ngaf-chat-text);
1153
- background: var(--ngaf-chat-surface-alt);
1153
+ color: var(--tplane-chat-text);
1154
+ background: var(--tplane-chat-surface-alt);
1154
1155
  }
1155
1156
  .chat-message-actions__btn svg {
1156
1157
  width: 16px;
@@ -1161,7 +1162,7 @@ const CHAT_MESSAGE_ACTIONS_STYLES = `
1161
1162
  font-size: 14px;
1162
1163
  font-weight: 700;
1163
1164
  line-height: 1;
1164
- color: var(--ngaf-chat-success);
1165
+ color: var(--tplane-chat-success);
1165
1166
  }
1166
1167
  `;
1167
1168
 
@@ -1297,7 +1298,7 @@ class ChatMessageActionsComponent {
1297
1298
  <path d="M17 13l-4 7a2 2 0 0 1-2 2h0a2 2 0 0 1-2-2v-4H4a2 2 0 0 1-2-2l2-7A2 2 0 0 1 6 5h11" />
1298
1299
  </svg>
1299
1300
  </button>
1300
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:flex;gap:.5rem;padding:16px 0 12px;opacity:0;transition:opacity .2s ease;pointer-events:none}:host-context(chat-message[data-role=\"assistant\"]:hover),:host-context(chat-message[data-role=\"assistant\"]:focus-within),:host-context(chat-message[data-role=\"assistant\"][data-current=\"true\"]){opacity:1;pointer-events:auto}:host-context(chat-message[data-streaming=\"true\"]){opacity:0!important;pointer-events:none!important}@media(max-width:768px){:host-context(chat-message[data-role=\"assistant\"]){opacity:1;pointer-events:auto}}.chat-message-actions__btn{width:24px;height:24px;display:flex;align-items:center;justify-content:center;border:0;padding:0;margin:0;border-radius:6px;background:transparent;color:var(--ngaf-chat-text-muted);cursor:pointer;transition:color .15s ease,transform .15s ease,background .15s ease}.chat-message-actions__btn:hover{color:var(--ngaf-chat-text);transform:scale(1.05);background:var(--ngaf-chat-surface-alt)}.chat-message-actions__btn:focus-visible{outline:2px solid var(--ngaf-chat-text-muted);outline-offset:2px}.chat-message-actions__btn.is-active{color:var(--ngaf-chat-text);background:var(--ngaf-chat-surface-alt)}.chat-message-actions__btn svg{width:16px;height:16px;pointer-events:none}.chat-message-actions__check{font-size:14px;font-weight:700;line-height:1;color:var(--ngaf-chat-success)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1301
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:flex;gap:.5rem;padding:16px 0 12px;opacity:0;transition:opacity .2s ease;pointer-events:none}:host-context(chat-message[data-role=\"assistant\"]:hover),:host-context(chat-message[data-role=\"assistant\"]:focus-within),:host-context(chat-message[data-role=\"assistant\"][data-current=\"true\"]){opacity:1;pointer-events:auto}:host-context(chat-message[data-streaming=\"true\"]){opacity:0!important;pointer-events:none!important}@media(max-width:768px){:host-context(chat-message[data-role=\"assistant\"]){opacity:1;pointer-events:auto}}.chat-message-actions__btn{width:24px;height:24px;display:flex;align-items:center;justify-content:center;border:0;padding:0;margin:0;border-radius:6px;background:transparent;color:var(--tplane-chat-text-muted);cursor:pointer;transition:color .15s ease,transform .15s ease,background .15s ease}.chat-message-actions__btn:hover{color:var(--tplane-chat-text);transform:scale(1.05);background:var(--tplane-chat-surface-alt)}.chat-message-actions__btn:focus-visible{outline:2px solid var(--tplane-chat-text-muted);outline-offset:2px}.chat-message-actions__btn.is-active{color:var(--tplane-chat-text);background:var(--tplane-chat-surface-alt)}.chat-message-actions__btn svg{width:16px;height:16px;pointer-events:none}.chat-message-actions__check{font-size:14px;font-weight:700;line-height:1;color:var(--tplane-chat-success)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1301
1302
  }
1302
1303
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatMessageActionsComponent, decorators: [{
1303
1304
  type: Component,
@@ -1366,7 +1367,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
1366
1367
  <path d="M17 13l-4 7a2 2 0 0 1-2 2h0a2 2 0 0 1-2-2v-4H4a2 2 0 0 1-2-2l2-7A2 2 0 0 1 6 5h11" />
1367
1368
  </svg>
1368
1369
  </button>
1369
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:flex;gap:.5rem;padding:16px 0 12px;opacity:0;transition:opacity .2s ease;pointer-events:none}:host-context(chat-message[data-role=\"assistant\"]:hover),:host-context(chat-message[data-role=\"assistant\"]:focus-within),:host-context(chat-message[data-role=\"assistant\"][data-current=\"true\"]){opacity:1;pointer-events:auto}:host-context(chat-message[data-streaming=\"true\"]){opacity:0!important;pointer-events:none!important}@media(max-width:768px){:host-context(chat-message[data-role=\"assistant\"]){opacity:1;pointer-events:auto}}.chat-message-actions__btn{width:24px;height:24px;display:flex;align-items:center;justify-content:center;border:0;padding:0;margin:0;border-radius:6px;background:transparent;color:var(--ngaf-chat-text-muted);cursor:pointer;transition:color .15s ease,transform .15s ease,background .15s ease}.chat-message-actions__btn:hover{color:var(--ngaf-chat-text);transform:scale(1.05);background:var(--ngaf-chat-surface-alt)}.chat-message-actions__btn:focus-visible{outline:2px solid var(--ngaf-chat-text-muted);outline-offset:2px}.chat-message-actions__btn.is-active{color:var(--ngaf-chat-text);background:var(--ngaf-chat-surface-alt)}.chat-message-actions__btn svg{width:16px;height:16px;pointer-events:none}.chat-message-actions__check{font-size:14px;font-weight:700;line-height:1;color:var(--ngaf-chat-success)}\n"] }]
1370
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:flex;gap:.5rem;padding:16px 0 12px;opacity:0;transition:opacity .2s ease;pointer-events:none}:host-context(chat-message[data-role=\"assistant\"]:hover),:host-context(chat-message[data-role=\"assistant\"]:focus-within),:host-context(chat-message[data-role=\"assistant\"][data-current=\"true\"]){opacity:1;pointer-events:auto}:host-context(chat-message[data-streaming=\"true\"]){opacity:0!important;pointer-events:none!important}@media(max-width:768px){:host-context(chat-message[data-role=\"assistant\"]){opacity:1;pointer-events:auto}}.chat-message-actions__btn{width:24px;height:24px;display:flex;align-items:center;justify-content:center;border:0;padding:0;margin:0;border-radius:6px;background:transparent;color:var(--tplane-chat-text-muted);cursor:pointer;transition:color .15s ease,transform .15s ease,background .15s ease}.chat-message-actions__btn:hover{color:var(--tplane-chat-text);transform:scale(1.05);background:var(--tplane-chat-surface-alt)}.chat-message-actions__btn:focus-visible{outline:2px solid var(--tplane-chat-text-muted);outline-offset:2px}.chat-message-actions__btn.is-active{color:var(--tplane-chat-text);background:var(--tplane-chat-surface-alt)}.chat-message-actions__btn svg{width:16px;height:16px;pointer-events:none}.chat-message-actions__check{font-size:14px;font-weight:700;line-height:1;color:var(--tplane-chat-success)}\n"] }]
1370
1371
  }], propDecorators: { content: [{ type: i0.Input, args: [{ isSignal: true, alias: "content", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], regenerate: [{ type: i0.Output, args: ["regenerate"] }], rate: [{ type: i0.Output, args: ["rate"] }], contentCopied: [{ type: i0.Output, args: ["contentCopied"] }] } });
1371
1372
 
1372
1373
  // libs/chat/src/lib/styles/chat-window.styles.ts
@@ -1377,8 +1378,8 @@ const CHAT_WINDOW_STYLES = `
1377
1378
  flex-direction: column;
1378
1379
  min-height: 0;
1379
1380
  height: 100%;
1380
- background: var(--ngaf-chat-bg);
1381
- color: var(--ngaf-chat-text);
1381
+ background: var(--tplane-chat-bg);
1382
+ color: var(--tplane-chat-text);
1382
1383
  }
1383
1384
  .chat-window__header {
1384
1385
  height: 56px;
@@ -1386,16 +1387,16 @@ const CHAT_WINDOW_STYLES = `
1386
1387
  display: flex;
1387
1388
  align-items: center;
1388
1389
  justify-content: space-between;
1389
- padding: 0 var(--ngaf-chat-space-6);
1390
- border-bottom: 1px solid var(--ngaf-chat-separator);
1390
+ padding: 0 var(--tplane-chat-space-6);
1391
+ border-bottom: 1px solid var(--tplane-chat-separator);
1391
1392
  font-weight: 500;
1392
- color: var(--ngaf-chat-primary);
1393
+ color: var(--tplane-chat-primary);
1393
1394
  }
1394
1395
  .chat-window__header:empty { display: none; }
1395
1396
  /* When the consumer doesn't project a header, balance the chat content
1396
1397
  * with breathing room at the top equivalent to the input gap at the bottom. */
1397
1398
  .chat-window__header:empty + .chat-window__body {
1398
- padding-top: var(--ngaf-chat-input-gap);
1399
+ padding-top: var(--tplane-chat-input-gap);
1399
1400
  }
1400
1401
  .chat-window__body {
1401
1402
  flex: 1;
@@ -1407,7 +1408,7 @@ const CHAT_WINDOW_STYLES = `
1407
1408
  .chat-window__footer {
1408
1409
  position: relative;
1409
1410
  flex-shrink: 0;
1410
- margin-top: var(--ngaf-chat-input-gap);
1411
+ margin-top: var(--tplane-chat-input-gap);
1411
1412
  }
1412
1413
  .chat-window__footer:empty { display: none; }
1413
1414
  .chat-window__scroll-fade {
@@ -1416,7 +1417,7 @@ const CHAT_WINDOW_STYLES = `
1416
1417
  right: 0;
1417
1418
  bottom: 100%;
1418
1419
  height: 32px;
1419
- background: linear-gradient(180deg, transparent 0%, var(--ngaf-chat-bg) 100%);
1420
+ background: linear-gradient(180deg, transparent 0%, var(--tplane-chat-bg) 100%);
1420
1421
  pointer-events: none;
1421
1422
  }
1422
1423
  `;
@@ -1432,7 +1433,7 @@ class ChatWindowComponent {
1432
1433
  <div class="chat-window__scroll-fade" aria-hidden="true"></div>
1433
1434
  <ng-content select="[chatFooter]" />
1434
1435
  </div>
1435
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:flex;flex-direction:column;min-height:0;height:100%;background:var(--ngaf-chat-bg);color:var(--ngaf-chat-text)}.chat-window__header{height:56px;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:0 var(--ngaf-chat-space-6);border-bottom:1px solid var(--ngaf-chat-separator);font-weight:500;color:var(--ngaf-chat-primary)}.chat-window__header:empty{display:none}.chat-window__header:empty+.chat-window__body{padding-top:var(--ngaf-chat-input-gap)}.chat-window__body{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.chat-window__footer{position:relative;flex-shrink:0;margin-top:var(--ngaf-chat-input-gap)}.chat-window__footer:empty{display:none}.chat-window__scroll-fade{position:absolute;left:0;right:0;bottom:100%;height:32px;background:linear-gradient(180deg,transparent 0%,var(--ngaf-chat-bg) 100%);pointer-events:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1436
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:flex;flex-direction:column;min-height:0;height:100%;background:var(--tplane-chat-bg);color:var(--tplane-chat-text)}.chat-window__header{height:56px;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:0 var(--tplane-chat-space-6);border-bottom:1px solid var(--tplane-chat-separator);font-weight:500;color:var(--tplane-chat-primary)}.chat-window__header:empty{display:none}.chat-window__header:empty+.chat-window__body{padding-top:var(--tplane-chat-input-gap)}.chat-window__body{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.chat-window__footer{position:relative;flex-shrink:0;margin-top:var(--tplane-chat-input-gap)}.chat-window__footer:empty{display:none}.chat-window__scroll-fade{position:absolute;left:0;right:0;bottom:100%;height:32px;background:linear-gradient(180deg,transparent 0%,var(--tplane-chat-bg) 100%);pointer-events:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1436
1437
  }
1437
1438
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatWindowComponent, decorators: [{
1438
1439
  type: Component,
@@ -1443,20 +1444,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
1443
1444
  <div class="chat-window__scroll-fade" aria-hidden="true"></div>
1444
1445
  <ng-content select="[chatFooter]" />
1445
1446
  </div>
1446
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:flex;flex-direction:column;min-height:0;height:100%;background:var(--ngaf-chat-bg);color:var(--ngaf-chat-text)}.chat-window__header{height:56px;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:0 var(--ngaf-chat-space-6);border-bottom:1px solid var(--ngaf-chat-separator);font-weight:500;color:var(--ngaf-chat-primary)}.chat-window__header:empty{display:none}.chat-window__header:empty+.chat-window__body{padding-top:var(--ngaf-chat-input-gap)}.chat-window__body{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.chat-window__footer{position:relative;flex-shrink:0;margin-top:var(--ngaf-chat-input-gap)}.chat-window__footer:empty{display:none}.chat-window__scroll-fade{position:absolute;left:0;right:0;bottom:100%;height:32px;background:linear-gradient(180deg,transparent 0%,var(--ngaf-chat-bg) 100%);pointer-events:none}\n"] }]
1447
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:flex;flex-direction:column;min-height:0;height:100%;background:var(--tplane-chat-bg);color:var(--tplane-chat-text)}.chat-window__header{height:56px;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:0 var(--tplane-chat-space-6);border-bottom:1px solid var(--tplane-chat-separator);font-weight:500;color:var(--tplane-chat-primary)}.chat-window__header:empty{display:none}.chat-window__header:empty+.chat-window__body{padding-top:var(--tplane-chat-input-gap)}.chat-window__body{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.chat-window__footer{position:relative;flex-shrink:0;margin-top:var(--tplane-chat-input-gap)}.chat-window__footer:empty{display:none}.chat-window__scroll-fade{position:absolute;left:0;right:0;bottom:100%;height:32px;background:linear-gradient(180deg,transparent 0%,var(--tplane-chat-bg) 100%);pointer-events:none}\n"] }]
1447
1448
  }] });
1448
1449
 
1449
1450
  // libs/chat/src/lib/styles/chat-trace.styles.ts
1450
1451
  // SPDX-License-Identifier: MIT
1451
1452
  const CHAT_TRACE_STYLES = `
1452
- :host { display: block; font-size: var(--ngaf-chat-font-size-sm); }
1453
+ :host { display: block; font-size: var(--tplane-chat-font-size-sm); }
1453
1454
  .chat-trace__header {
1454
1455
  display: flex;
1455
1456
  align-items: center;
1456
1457
  gap: 0.25rem;
1457
1458
  cursor: pointer;
1458
1459
  user-select: none;
1459
- color: var(--ngaf-chat-text-muted);
1460
+ color: var(--tplane-chat-text-muted);
1460
1461
  background: transparent;
1461
1462
  border: 0;
1462
1463
  padding: 0;
@@ -1472,13 +1473,13 @@ const CHAT_TRACE_STYLES = `
1472
1473
  }
1473
1474
  :host([data-expanded="true"]) .chat-trace__chevron { transform: rotate(90deg); }
1474
1475
  .chat-trace__label { display: flex; align-items: center; gap: 0.5rem; flex: 1; min-width: 0; }
1475
- :host([data-state="running"]) .chat-trace__label { animation: ngaf-chat-pulse 1.5s ease-in-out infinite; }
1476
- :host([data-state="error"]) .chat-trace__label { color: var(--ngaf-chat-error-text); }
1476
+ :host([data-state="running"]) .chat-trace__label { animation: tplane-chat-pulse 1.5s ease-in-out infinite; }
1477
+ :host([data-state="error"]) .chat-trace__label { color: var(--tplane-chat-error-text); }
1477
1478
  .chat-trace__content {
1478
1479
  padding-left: 1rem;
1479
1480
  padding-top: 0.375rem;
1480
1481
  margin-left: 0.375rem;
1481
- border-left: 1px solid var(--ngaf-chat-separator);
1482
+ border-left: 1px solid var(--tplane-chat-separator);
1482
1483
  max-height: 250px;
1483
1484
  overflow: auto;
1484
1485
  }
@@ -1537,7 +1538,7 @@ class ChatTraceComponent {
1537
1538
  @if (expanded()) {
1538
1539
  <div class="chat-trace__content"><ng-content /></div>
1539
1540
  }
1540
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block;font-size:var(--ngaf-chat-font-size-sm)}.chat-trace__header{display:flex;align-items:center;gap:.25rem;cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--ngaf-chat-text-muted);background:transparent;border:0;padding:0;width:100%;text-align:left;font:inherit}.chat-trace__chevron{width:12px;height:12px;transition:transform .2s ease;flex-shrink:0}:host([data-expanded=\"true\"]) .chat-trace__chevron{transform:rotate(90deg)}.chat-trace__label{display:flex;align-items:center;gap:.5rem;flex:1;min-width:0}:host([data-state=\"running\"]) .chat-trace__label{animation:ngaf-chat-pulse 1.5s ease-in-out infinite}:host([data-state=\"error\"]) .chat-trace__label{color:var(--ngaf-chat-error-text)}.chat-trace__content{padding-left:1rem;padding-top:.375rem;margin-left:.375rem;border-left:1px solid var(--ngaf-chat-separator);max-height:250px;overflow:auto}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1541
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block;font-size:var(--tplane-chat-font-size-sm)}.chat-trace__header{display:flex;align-items:center;gap:.25rem;cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--tplane-chat-text-muted);background:transparent;border:0;padding:0;width:100%;text-align:left;font:inherit}.chat-trace__chevron{width:12px;height:12px;transition:transform .2s ease;flex-shrink:0}:host([data-expanded=\"true\"]) .chat-trace__chevron{transform:rotate(90deg)}.chat-trace__label{display:flex;align-items:center;gap:.5rem;flex:1;min-width:0}:host([data-state=\"running\"]) .chat-trace__label{animation:tplane-chat-pulse 1.5s ease-in-out infinite}:host([data-state=\"error\"]) .chat-trace__label{color:var(--tplane-chat-error-text)}.chat-trace__content{padding-left:1rem;padding-top:.375rem;margin-left:.375rem;border-left:1px solid var(--tplane-chat-separator);max-height:250px;overflow:auto}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1541
1542
  }
1542
1543
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatTraceComponent, decorators: [{
1543
1544
  type: Component,
@@ -1563,7 +1564,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
1563
1564
  @if (expanded()) {
1564
1565
  <div class="chat-trace__content"><ng-content /></div>
1565
1566
  }
1566
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block;font-size:var(--ngaf-chat-font-size-sm)}.chat-trace__header{display:flex;align-items:center;gap:.25rem;cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--ngaf-chat-text-muted);background:transparent;border:0;padding:0;width:100%;text-align:left;font:inherit}.chat-trace__chevron{width:12px;height:12px;transition:transform .2s ease;flex-shrink:0}:host([data-expanded=\"true\"]) .chat-trace__chevron{transform:rotate(90deg)}.chat-trace__label{display:flex;align-items:center;gap:.5rem;flex:1;min-width:0}:host([data-state=\"running\"]) .chat-trace__label{animation:ngaf-chat-pulse 1.5s ease-in-out infinite}:host([data-state=\"error\"]) .chat-trace__label{color:var(--ngaf-chat-error-text)}.chat-trace__content{padding-left:1rem;padding-top:.375rem;margin-left:.375rem;border-left:1px solid var(--ngaf-chat-separator);max-height:250px;overflow:auto}\n"] }]
1567
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block;font-size:var(--tplane-chat-font-size-sm)}.chat-trace__header{display:flex;align-items:center;gap:.25rem;cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--tplane-chat-text-muted);background:transparent;border:0;padding:0;width:100%;text-align:left;font:inherit}.chat-trace__chevron{width:12px;height:12px;transition:transform .2s ease;flex-shrink:0}:host([data-expanded=\"true\"]) .chat-trace__chevron{transform:rotate(90deg)}.chat-trace__label{display:flex;align-items:center;gap:.5rem;flex:1;min-width:0}:host([data-state=\"running\"]) .chat-trace__label{animation:tplane-chat-pulse 1.5s ease-in-out infinite}:host([data-state=\"error\"]) .chat-trace__label{color:var(--tplane-chat-error-text)}.chat-trace__content{padding-left:1rem;padding-top:.375rem;margin-left:.375rem;border-left:1px solid var(--tplane-chat-separator);max-height:250px;overflow:auto}\n"] }]
1567
1568
  }], ctorParameters: () => [], propDecorators: { state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: false }] }], defaultExpanded: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultExpanded", required: false }] }] } });
1568
1569
 
1569
1570
  // libs/chat/src/lib/styles/chat-reasoning.styles.ts
@@ -1583,16 +1584,16 @@ const CHAT_REASONING_STYLES = `
1583
1584
  align-items: center;
1584
1585
  gap: 0.5rem;
1585
1586
  padding: 4px 10px;
1586
- background: var(--ngaf-chat-surface-alt);
1587
- border: 1px solid var(--ngaf-chat-separator);
1587
+ background: var(--tplane-chat-surface-alt);
1588
+ border: 1px solid var(--tplane-chat-separator);
1588
1589
  border-radius: 9999px;
1589
- color: var(--ngaf-chat-text-muted);
1590
- font-size: var(--ngaf-chat-font-size-xs);
1590
+ color: var(--tplane-chat-text-muted);
1591
+ font-size: var(--tplane-chat-font-size-xs);
1591
1592
  font-family: inherit;
1592
1593
  cursor: pointer;
1593
1594
  line-height: 1.2;
1594
1595
  }
1595
- .chat-reasoning__header:hover { color: var(--ngaf-chat-text); }
1596
+ .chat-reasoning__header:hover { color: var(--tplane-chat-text); }
1596
1597
 
1597
1598
  .chat-reasoning__chevron {
1598
1599
  width: 10px;
@@ -1606,7 +1607,7 @@ const CHAT_REASONING_STYLES = `
1606
1607
  width: 6px;
1607
1608
  height: 6px;
1608
1609
  border-radius: 50%;
1609
- background: var(--ngaf-chat-text-muted);
1610
+ background: var(--tplane-chat-text-muted);
1610
1611
  animation: chat-reasoning-pulse 1.2s ease-in-out infinite;
1611
1612
  }
1612
1613
  @keyframes chat-reasoning-pulse {
@@ -1617,8 +1618,8 @@ const CHAT_REASONING_STYLES = `
1617
1618
  .chat-reasoning__body {
1618
1619
  margin-top: 0.5rem;
1619
1620
  padding-left: 12px;
1620
- border-left: 2px solid var(--ngaf-chat-separator);
1621
- color: var(--ngaf-chat-text-muted);
1621
+ border-left: 2px solid var(--tplane-chat-separator);
1622
+ color: var(--tplane-chat-text-muted);
1622
1623
  }
1623
1624
  .chat-reasoning__body chat-streaming-md { font-size: 0.95em; }
1624
1625
  `;
@@ -1638,7 +1639,7 @@ const CHAT_REASONING_STYLES = `
1638
1639
  // rules, tables, images, bold (`strong`), italic (`em`), strikethrough
1639
1640
  // (`del`/`s`).
1640
1641
  const CHAT_MARKDOWN_STYLES = `
1641
- chat-streaming-md { display: block; color: var(--ngaf-chat-text); line-height: var(--ngaf-chat-line-height); }
1642
+ chat-streaming-md { display: block; color: var(--tplane-chat-text); line-height: var(--tplane-chat-line-height); }
1642
1643
 
1643
1644
  /* Headings */
1644
1645
  chat-streaming-md h1, chat-streaming-md h2, chat-streaming-md h3, chat-streaming-md h4, chat-streaming-md h5, chat-streaming-md h6 {
@@ -1652,20 +1653,20 @@ const CHAT_MARKDOWN_STYLES = `
1652
1653
  chat-streaming-md h2 { font-size: 1.25em; }
1653
1654
  chat-streaming-md h3 { font-size: 1.1em; }
1654
1655
  chat-streaming-md h4 { font-size: 1em; }
1655
- chat-streaming-md h5, chat-streaming-md h6 { font-size: 0.95em; color: var(--ngaf-chat-text-muted); }
1656
+ chat-streaming-md h5, chat-streaming-md h6 { font-size: 0.95em; color: var(--tplane-chat-text-muted); }
1656
1657
 
1657
1658
  /* Paragraphs and inline emphasis */
1658
- chat-streaming-md p { margin: 0 0 0.75rem; line-height: 1.6; font-size: var(--ngaf-chat-font-size); }
1659
+ chat-streaming-md p { margin: 0 0 0.75rem; line-height: 1.6; font-size: var(--tplane-chat-font-size); }
1659
1660
  chat-streaming-md p:last-child { margin-bottom: 0; }
1660
1661
  chat-streaming-md strong, chat-streaming-md b { font-weight: 700; }
1661
1662
  chat-streaming-md em, chat-streaming-md i { font-style: italic; }
1662
- chat-streaming-md del, chat-streaming-md s { text-decoration: line-through; color: var(--ngaf-chat-text-muted); }
1663
- chat-streaming-md mark { background: var(--ngaf-chat-surface-alt); padding: 0 2px; border-radius: 2px; }
1663
+ chat-streaming-md del, chat-streaming-md s { text-decoration: line-through; color: var(--tplane-chat-text-muted); }
1664
+ chat-streaming-md mark { background: var(--tplane-chat-surface-alt); padding: 0 2px; border-radius: 2px; }
1664
1665
  chat-streaming-md sub { font-size: 0.75em; vertical-align: sub; }
1665
1666
  chat-streaming-md sup { font-size: 0.75em; vertical-align: super; }
1666
1667
 
1667
1668
  /* Links */
1668
- chat-streaming-md a { color: var(--ngaf-chat-primary); text-decoration: underline; text-underline-offset: 2px; }
1669
+ chat-streaming-md a { color: var(--tplane-chat-primary); text-decoration: underline; text-underline-offset: 2px; }
1669
1670
  chat-streaming-md a:hover { text-decoration-thickness: 2px; }
1670
1671
 
1671
1672
  /* Lists (CommonMark + GFM task lists) */
@@ -1675,7 +1676,7 @@ const CHAT_MARKDOWN_STYLES = `
1675
1676
  chat-streaming-md ul ul { list-style: circle outside; }
1676
1677
  chat-streaming-md ul ul ul { list-style: square outside; }
1677
1678
  chat-streaming-md li { margin: 0.2rem 0; }
1678
- chat-streaming-md li::marker { color: var(--ngaf-chat-text-muted); }
1679
+ chat-streaming-md li::marker { color: var(--tplane-chat-text-muted); }
1679
1680
  chat-streaming-md li > p { margin: 0 0 0.25rem; }
1680
1681
  chat-streaming-md li > ul, chat-streaming-md li > ol { margin: 0.25rem 0 0; }
1681
1682
  /* GFM task lists: marked emits <li><input type="checkbox" disabled> ... */
@@ -1684,21 +1685,21 @@ const CHAT_MARKDOWN_STYLES = `
1684
1685
 
1685
1686
  /* Code (inline + fenced) */
1686
1687
  chat-streaming-md code {
1687
- background: var(--ngaf-chat-surface-alt);
1688
- color: var(--ngaf-chat-text);
1688
+ background: var(--tplane-chat-surface-alt);
1689
+ color: var(--tplane-chat-text);
1689
1690
  padding: 1px 5px;
1690
1691
  border-radius: 4px;
1691
- font-family: var(--ngaf-chat-font-mono);
1692
+ font-family: var(--tplane-chat-font-mono);
1692
1693
  font-size: 0.9em;
1693
1694
  }
1694
1695
  chat-streaming-md pre {
1695
- background: var(--ngaf-chat-surface-alt);
1696
- color: var(--ngaf-chat-text);
1696
+ background: var(--tplane-chat-surface-alt);
1697
+ color: var(--tplane-chat-text);
1697
1698
  padding: 12px 14px;
1698
- border-radius: var(--ngaf-chat-radius-card);
1699
+ border-radius: var(--tplane-chat-radius-card);
1699
1700
  overflow-x: auto;
1700
- font-family: var(--ngaf-chat-font-mono);
1701
- font-size: var(--ngaf-chat-font-size-sm);
1701
+ font-family: var(--tplane-chat-font-mono);
1702
+ font-size: var(--tplane-chat-font-size-sm);
1702
1703
  line-height: 1.5;
1703
1704
  margin: 0 0 0.75rem;
1704
1705
  }
@@ -1706,17 +1707,17 @@ const CHAT_MARKDOWN_STYLES = `
1706
1707
 
1707
1708
  /* Blockquote */
1708
1709
  chat-streaming-md blockquote {
1709
- border-left: 3px solid var(--ngaf-chat-separator);
1710
+ border-left: 3px solid var(--tplane-chat-separator);
1710
1711
  padding: 0.25rem 0 0.25rem 12px;
1711
1712
  margin: 0 0 0.75rem;
1712
- color: var(--ngaf-chat-text-muted);
1713
+ color: var(--tplane-chat-text-muted);
1713
1714
  }
1714
1715
  chat-streaming-md blockquote > :last-child { margin-bottom: 0; }
1715
1716
 
1716
1717
  /* Horizontal rule */
1717
1718
  chat-streaming-md hr {
1718
1719
  border: none;
1719
- border-top: 1px solid var(--ngaf-chat-separator);
1720
+ border-top: 1px solid var(--tplane-chat-separator);
1720
1721
  margin: 1rem 0;
1721
1722
  }
1722
1723
 
@@ -1727,9 +1728,9 @@ const CHAT_MARKDOWN_STYLES = `
1727
1728
  width: 100%;
1728
1729
  font-size: 0.95em;
1729
1730
  }
1730
- chat-streaming-md thead { background: var(--ngaf-chat-surface-alt); }
1731
+ chat-streaming-md thead { background: var(--tplane-chat-surface-alt); }
1731
1732
  chat-streaming-md th, chat-streaming-md td {
1732
- border: 1px solid var(--ngaf-chat-separator);
1733
+ border: 1px solid var(--tplane-chat-separator);
1733
1734
  padding: 6px 10px;
1734
1735
  text-align: left;
1735
1736
  vertical-align: top;
@@ -1785,15 +1786,20 @@ const CHAT_MARKDOWN_STYLES = `
1785
1786
  align-items: center;
1786
1787
  gap: 0.4rem;
1787
1788
  padding: 0.25rem 0.5rem;
1788
- background: var(--ngaf-chat-surface-alt);
1789
- border: 1px dashed var(--ngaf-chat-separator);
1789
+ background: var(--tplane-chat-surface-alt);
1790
+ border: 1px dashed var(--tplane-chat-separator);
1790
1791
  border-radius: 6px;
1791
1792
  font-size: 0.9em;
1792
- color: var(--ngaf-chat-text-muted, currentColor);
1793
+ color: var(--tplane-chat-text-muted, currentColor);
1793
1794
  opacity: 0.85;
1794
1795
  }
1795
1796
  chat-streaming-md .chat-md-image__icon { font-size: 1em; line-height: 1; }
1796
1797
  chat-streaming-md .chat-md-image__alt { font-style: italic; }
1798
+ /* Math (KaTeX). Display math is a centered block that scrolls horizontally
1799
+ on overflow; the raw fallback (KaTeX missing or invalid LaTeX) reads as
1800
+ monospace so the source delimiters look intentional. */
1801
+ chat-streaming-md .chat-md-math--display { display: block; margin: 0.5em 0; overflow-x: auto; }
1802
+ chat-streaming-md .chat-md-math--raw { font-family: var(--tplane-chat-font-mono, ui-monospace, monospace); }
1797
1803
  `;
1798
1804
 
1799
1805
  // libs/chat/src/lib/markdown/markdown-view-registry.ts
@@ -2143,6 +2149,125 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
2143
2149
  }]
2144
2150
  }], propDecorators: { node: [{ type: i0.Input, args: [{ isSignal: true, alias: "node", required: true }] }] } });
2145
2151
 
2152
+ // libs/chat/src/lib/markdown/katex-loader.ts
2153
+ // SPDX-License-Identifier: MIT
2154
+ /**
2155
+ * Lazy KaTeX integration for the markdown math view. Mirrors the lazy `marked`
2156
+ * loader in ../streaming/markdown-render.ts: `katex` is an optional peer
2157
+ * dependency, dynamically imported on module load, so chats that never contain
2158
+ * math pay zero base-bundle cost. `renderMath` returns the KaTeX HTML string,
2159
+ * or null when KaTeX is unavailable or the LaTeX is invalid — the view then
2160
+ * renders the raw `$…$` source instead.
2161
+ *
2162
+ * CSS: the KaTeX stylesheet (and its woff2 fonts) is the CONSUMER's
2163
+ * responsibility — this lib injects nothing at runtime (no third-party CDN
2164
+ * fetch). Apps import `katex/dist/katex.min.css` themselves; math still renders
2165
+ * without it, just unstyled.
2166
+ */
2167
+ let katexRender = null;
2168
+ /**
2169
+ * Flips to true once KaTeX has loaded. The math view reads it as a signal
2170
+ * dependency so any math that fell back to raw source while KaTeX was still
2171
+ * loading re-renders once it becomes available.
2172
+ */
2173
+ const katexReady = signal(false, ...(ngDevMode ? [{ debugName: "katexReady" }] : []));
2174
+ /** Resolves once the KaTeX import has settled (success or failure). Tests await this. */
2175
+ const katexLoaded = import('katex')
2176
+ .then((m) => {
2177
+ const katex = (m.default ?? m);
2178
+ katexRender = (latex, displayMode) =>
2179
+ // throwOnError:true so invalid LaTeX throws → we catch → raw-source
2180
+ // fallback, instead of KaTeX emitting its own red error markup.
2181
+ katex.renderToString(latex, { displayMode, throwOnError: true });
2182
+ katexReady.set(true);
2183
+ })
2184
+ .catch(() => {
2185
+ katexRender = null;
2186
+ });
2187
+ /**
2188
+ * Render LaTeX to a KaTeX HTML string, or null if KaTeX is unavailable or the
2189
+ * input throws (invalid LaTeX) — the caller then renders the raw `$…$` source.
2190
+ */
2191
+ function renderMath(latex, displayMode) {
2192
+ if (!katexRender)
2193
+ return null;
2194
+ try {
2195
+ return katexRender(latex, displayMode);
2196
+ }
2197
+ catch {
2198
+ return null;
2199
+ }
2200
+ }
2201
+
2202
+ // libs/chat/src/lib/markdown/views/markdown-math.component.ts
2203
+ // SPDX-License-Identifier: MIT
2204
+ /** Opener/closer source text per delimiter, used for the raw fallback. */
2205
+ const DELIMITERS = {
2206
+ $: ['$', '$'],
2207
+ '$$': ['$$', '$$'],
2208
+ '\\(\\)': ['\\(', '\\)'],
2209
+ '\\[\\]': ['\\[', '\\]'],
2210
+ };
2211
+ /**
2212
+ * Renders a `math-inline` / `math-display` markdown node as KaTeX. KaTeX is
2213
+ * lazy-loaded (see katex-loader); until it resolves, or if the LaTeX is
2214
+ * invalid, the raw `$…$` source is shown — never blank, never a crash.
2215
+ */
2216
+ class MarkdownMathComponent {
2217
+ node = input.required(...(ngDevMode ? [{ debugName: "node" }] : []));
2218
+ sanitizer = inject(DomSanitizer);
2219
+ display = computed(() => this.node().type === 'math-display', ...(ngDevMode ? [{ debugName: "display" }] : []));
2220
+ raw = computed(() => {
2221
+ const n = this.node();
2222
+ const [open, close] = DELIMITERS[n.delimiter];
2223
+ return `${open}${n.text}${close}`;
2224
+ }, ...(ngDevMode ? [{ debugName: "raw" }] : []));
2225
+ html = computed(() => {
2226
+ katexReady(); // re-render once KaTeX finishes loading
2227
+ const n = this.node();
2228
+ const out = renderMath(n.text, n.type === 'math-display');
2229
+ if (out == null)
2230
+ return null;
2231
+ // Trust KaTeX output directly: with KaTeX's default `trust:false` it emits
2232
+ // only safe presentational markup (no scripts/event handlers/links), and
2233
+ // Angular's HTML sanitizer would strip the inline styles KaTeX layout
2234
+ // depends on.
2235
+ return this.sanitizer.bypassSecurityTrustHtml(out);
2236
+ }, ...(ngDevMode ? [{ debugName: "html" }] : []));
2237
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: MarkdownMathComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2238
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: MarkdownMathComponent, isStandalone: true, selector: "chat-md-math", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
2239
+ @if (html(); as h) {
2240
+ <span
2241
+ class="chat-md-math"
2242
+ [class.chat-md-math--display]="display()"
2243
+ [innerHTML]="h"
2244
+ ></span>
2245
+ } @else {
2246
+ <span class="chat-md-math chat-md-math--raw">{{ raw() }}</span>
2247
+ }
2248
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2249
+ }
2250
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: MarkdownMathComponent, decorators: [{
2251
+ type: Component,
2252
+ args: [{
2253
+ selector: 'chat-md-math',
2254
+ standalone: true,
2255
+ changeDetection: ChangeDetectionStrategy.OnPush,
2256
+ encapsulation: ViewEncapsulation.None,
2257
+ template: `
2258
+ @if (html(); as h) {
2259
+ <span
2260
+ class="chat-md-math"
2261
+ [class.chat-md-math--display]="display()"
2262
+ [innerHTML]="h"
2263
+ ></span>
2264
+ } @else {
2265
+ <span class="chat-md-math chat-md-math--raw">{{ raw() }}</span>
2266
+ }
2267
+ `,
2268
+ }]
2269
+ }], propDecorators: { node: [{ type: i0.Input, args: [{ isSignal: true, alias: "node", required: true }] }] } });
2270
+
2146
2271
  // libs/chat/src/lib/markdown/views/markdown-link.component.ts
2147
2272
  // SPDX-License-Identifier: MIT
2148
2273
  class MarkdownLinkComponent {
@@ -2484,6 +2609,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
2484
2609
  }]
2485
2610
  }], propDecorators: { node: [{ type: i0.Input, args: [{ isSignal: true, alias: "node", required: true }] }] } });
2486
2611
 
2612
+ // libs/chat/src/lib/markdown/views/markdown-html.component.ts
2613
+ // SPDX-License-Identifier: MIT
2614
+ /**
2615
+ * Renders a `html-block` / `html-inline` markdown node as **escaped text** —
2616
+ * the raw HTML is shown literally (Angular interpolation auto-escapes it),
2617
+ * never injected as live markup. This preserves the pre-0.4 behavior where
2618
+ * raw HTML was plain text, and keeps the chat XSS-safe: model-emitted
2619
+ * `<script>`, `<iframe>`, etc. are displayed as text and never executed.
2620
+ */
2621
+ class MarkdownHtmlComponent {
2622
+ node = input.required(...(ngDevMode ? [{ debugName: "node" }] : []));
2623
+ raw = computed(() => this.node().raw, ...(ngDevMode ? [{ debugName: "raw" }] : []));
2624
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: MarkdownHtmlComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2625
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.6", type: MarkdownHtmlComponent, isStandalone: true, selector: "chat-md-html", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `{{ raw() }}`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2626
+ }
2627
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: MarkdownHtmlComponent, decorators: [{
2628
+ type: Component,
2629
+ args: [{
2630
+ selector: 'chat-md-html',
2631
+ standalone: true,
2632
+ changeDetection: ChangeDetectionStrategy.OnPush,
2633
+ template: `{{ raw() }}`,
2634
+ }]
2635
+ }], propDecorators: { node: [{ type: i0.Input, args: [{ isSignal: true, alias: "node", required: true }] }] } });
2636
+
2487
2637
  // libs/chat/src/lib/markdown/cacheplane-markdown-views.ts
2488
2638
  // SPDX-License-Identifier: MIT
2489
2639
  /**
@@ -2507,6 +2657,8 @@ const cacheplaneMarkdownViews = views({
2507
2657
  'strong': MarkdownStrongComponent,
2508
2658
  'strikethrough': MarkdownStrikethroughComponent,
2509
2659
  'inline-code': MarkdownInlineCodeComponent,
2660
+ 'math-inline': MarkdownMathComponent,
2661
+ 'math-display': MarkdownMathComponent,
2510
2662
  'link': MarkdownLinkComponent,
2511
2663
  'autolink': MarkdownAutolinkComponent,
2512
2664
  'image': MarkdownImageComponent,
@@ -2516,10 +2668,23 @@ const cacheplaneMarkdownViews = views({
2516
2668
  'table': MarkdownTableComponent,
2517
2669
  'table-row': MarkdownTableRowComponent,
2518
2670
  'table-cell': MarkdownTableCellComponent,
2671
+ // Raw HTML (added by partial-markdown 0.4.x) renders as escaped literal text
2672
+ // — XSS-safe, and matches the pre-0.4 behavior where HTML was plain text.
2673
+ 'html-block': MarkdownHtmlComponent,
2674
+ 'html-inline': MarkdownHtmlComponent,
2519
2675
  });
2520
2676
 
2521
2677
  // libs/chat/src/lib/streaming/streaming-markdown.component.ts
2522
2678
  // SPDX-License-Identifier: MIT
2679
+ // How long streaming must be false AND content stable before we finalize the
2680
+ // parser. finish() is only needed to mark final node status (not used visually)
2681
+ // and to revert a genuinely-truncated trailing construct to CommonMark — the
2682
+ // live `parser.root` projection already renders everything during streaming, so
2683
+ // this delay has NO visual cost. It must comfortably exceed real inter-chunk
2684
+ // gaps (e.g. the pause between a table's header row and its delimiter row) and
2685
+ // any `streaming` flag flap, so finalize never fires mid-stream and reverts an
2686
+ // in-progress table to raw "| a | b |" text.
2687
+ const FINALIZE_DEBOUNCE_MS = 600;
2523
2688
  /**
2524
2689
  * Renders streaming markdown by walking a @cacheplane/partial-markdown AST
2525
2690
  * through @threadplane/render's view registry.
@@ -2550,6 +2715,44 @@ class ChatStreamingMdComponent {
2550
2715
  this.resolver.markdownDefs.set(r.citations ?? new Map());
2551
2716
  }
2552
2717
  });
2718
+ // Debounced finalization. `finish()` is terminal and DESTRUCTIVE: it reverts
2719
+ // an incomplete trailing construct to its CommonMark fallback — e.g. a table
2720
+ // header before its delimiter row becomes raw "| a | b |" paragraph text. We
2721
+ // must therefore never finalize while tokens are still arriving. The
2722
+ // `streaming` input is not a reliable "still arriving" signal — it can flap
2723
+ // false mid-stream, and at cold start it can read false for an entire live
2724
+ // stream — so we finalize only once streaming is false AND no new content
2725
+ // has arrived for a short, imperceptible window. Any new content or a
2726
+ // streaming=true flap re-arms the timer, so finalize fires exactly once,
2727
+ // after the stream truly stops. Until then the live `parser.root` projection
2728
+ // (0.5.x) renders the in-progress content, including streaming tables.
2729
+ let timer = null;
2730
+ effect((onCleanup) => {
2731
+ const isStreaming = this.streaming();
2732
+ this.content(); // re-arm whenever new content arrives
2733
+ if (timer) {
2734
+ clearTimeout(timer);
2735
+ timer = null;
2736
+ }
2737
+ if (isStreaming || this.finished)
2738
+ return;
2739
+ timer = setTimeout(() => {
2740
+ timer = null;
2741
+ if (this.streaming() || this.finished)
2742
+ return;
2743
+ if (!this.prior.endsWith('\n'))
2744
+ this.parser.push('\n');
2745
+ this.parser.finish();
2746
+ this.finished = true;
2747
+ this.finalizeTick.update((v) => v + 1);
2748
+ }, FINALIZE_DEBOUNCE_MS);
2749
+ onCleanup(() => {
2750
+ if (timer) {
2751
+ clearTimeout(timer);
2752
+ timer = null;
2753
+ }
2754
+ });
2755
+ });
2553
2756
  }
2554
2757
  // Parser instance is rebuilt only when content diverges from the prior
2555
2758
  // prefix (rare). For the common streaming case where content extends the
@@ -2557,41 +2760,29 @@ class ChatStreamingMdComponent {
2557
2760
  parser = createPartialMarkdownParser();
2558
2761
  prior = '';
2559
2762
  finished = false;
2763
+ // Bumped by the debounced finalizer so the `root` computed re-materializes
2764
+ // the now-finished parser tree.
2765
+ finalizeTick = signal(0, ...(ngDevMode ? [{ debugName: "finalizeTick" }] : []));
2560
2766
  root = computed(() => {
2561
2767
  const c = this.content();
2562
- const isStreaming = this.streaming();
2768
+ this.finalizeTick(); // re-materialize after a debounced finalize
2563
2769
  if (c !== this.prior) {
2564
- if (c.startsWith(this.prior)) {
2770
+ // Re-parse from scratch when the content diverged from the prior prefix,
2771
+ // OR when the parser was already finalized — finish() is terminal, so
2772
+ // pushing further deltas into a finished parser corrupts its state. A
2773
+ // transient `streaming=false` mid-stream that finalized early thus
2774
+ // recovers here: new content rebuilds an open, projecting parser.
2775
+ if (c.startsWith(this.prior) && !this.finished) {
2565
2776
  this.parser.push(c.slice(this.prior.length));
2566
2777
  }
2567
2778
  else {
2568
- // Content shrank or diverged — reset.
2569
2779
  this.parser = createPartialMarkdownParser();
2570
2780
  this.finished = false;
2571
2781
  if (c.length > 0)
2572
2782
  this.parser.push(c);
2573
2783
  }
2574
- if (!isStreaming && !this.finished) {
2575
- // @cacheplane/partial-markdown@0.3 does not flush trailing text on
2576
- // finish() unless the buffer ends with a newline. Plain LLM
2577
- // responses often omit the trailing newline, which causes the
2578
- // parser to emit a document with zero children — i.e. the message
2579
- // renders empty. Push a sentinel newline first to force the open
2580
- // paragraph closed before we finalize.
2581
- if (!c.endsWith('\n'))
2582
- this.parser.push('\n');
2583
- this.parser.finish();
2584
- this.finished = true;
2585
- }
2586
2784
  this.prior = c;
2587
2785
  }
2588
- else if (!isStreaming && !this.finished) {
2589
- // Streaming flipped to false without new content; ensure parser is finalized.
2590
- if (!this.prior.endsWith('\n'))
2591
- this.parser.push('\n');
2592
- this.parser.finish();
2593
- this.finished = true;
2594
- }
2595
2786
  // Materialize for Angular reactivity: produces a NEW root reference when
2596
2787
  // any descendant subtree changed; same reference when nothing changed
2597
2788
  // (structural sharing). This is what makes signal-based CD propagate
@@ -2609,7 +2800,7 @@ class ChatStreamingMdComponent {
2609
2800
  @if (root(); as r) {
2610
2801
  <chat-md-children [parent]="r" />
2611
2802
  }
2612
- `, isInline: true, styles: ["chat-streaming-md{display:block;color:var(--ngaf-chat-text);line-height:var(--ngaf-chat-line-height)}chat-streaming-md h1,chat-streaming-md h2,chat-streaming-md h3,chat-streaming-md h4,chat-streaming-md h5,chat-streaming-md h6{font-weight:600;line-height:1.25;margin:1.25rem 0 .75rem}chat-streaming-md h1:first-child,chat-streaming-md h2:first-child,chat-streaming-md h3:first-child,chat-streaming-md h4:first-child,chat-streaming-md h5:first-child,chat-streaming-md h6:first-child{margin-top:0}chat-streaming-md h1{font-size:1.5em;font-weight:700}chat-streaming-md h2{font-size:1.25em}chat-streaming-md h3{font-size:1.1em}chat-streaming-md h4{font-size:1em}chat-streaming-md h5,chat-streaming-md h6{font-size:.95em;color:var(--ngaf-chat-text-muted)}chat-streaming-md p{margin:0 0 .75rem;line-height:1.6;font-size:var(--ngaf-chat-font-size)}chat-streaming-md p:last-child{margin-bottom:0}chat-streaming-md strong,chat-streaming-md b{font-weight:700}chat-streaming-md em,chat-streaming-md i{font-style:italic}chat-streaming-md del,chat-streaming-md s{text-decoration:line-through;color:var(--ngaf-chat-text-muted)}chat-streaming-md mark{background:var(--ngaf-chat-surface-alt);padding:0 2px;border-radius:2px}chat-streaming-md sub{font-size:.75em;vertical-align:sub}chat-streaming-md sup{font-size:.75em;vertical-align:super}chat-streaming-md a{color:var(--ngaf-chat-primary);text-decoration:underline;text-underline-offset:2px}chat-streaming-md a:hover{text-decoration-thickness:2px}chat-streaming-md ul,chat-streaming-md ol{margin:0 0 .75rem;padding-left:1.5rem}chat-streaming-md ul{list-style:disc outside}chat-streaming-md ol{list-style:decimal outside}chat-streaming-md ul ul{list-style:circle outside}chat-streaming-md ul ul ul{list-style:square outside}chat-streaming-md li{margin:.2rem 0}chat-streaming-md li::marker{color:var(--ngaf-chat-text-muted)}chat-streaming-md li>p{margin:0 0 .25rem}chat-streaming-md li>ul,chat-streaming-md li>ol{margin:.25rem 0 0}chat-streaming-md li:has(>input[type=checkbox]){list-style:none;margin-left:-1.25rem}chat-streaming-md li>input[type=checkbox]{margin-right:.5rem;vertical-align:middle}chat-streaming-md code{background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text);padding:1px 5px;border-radius:4px;font-family:var(--ngaf-chat-font-mono);font-size:.9em}chat-streaming-md pre{background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text);padding:12px 14px;border-radius:var(--ngaf-chat-radius-card);overflow-x:auto;font-family:var(--ngaf-chat-font-mono);font-size:var(--ngaf-chat-font-size-sm);line-height:1.5;margin:0 0 .75rem}chat-streaming-md pre code{background:transparent;padding:0;border-radius:0;font-size:inherit}chat-streaming-md blockquote{border-left:3px solid var(--ngaf-chat-separator);padding:.25rem 0 .25rem 12px;margin:0 0 .75rem;color:var(--ngaf-chat-text-muted)}chat-streaming-md blockquote>:last-child{margin-bottom:0}chat-streaming-md hr{border:none;border-top:1px solid var(--ngaf-chat-separator);margin:1rem 0}chat-streaming-md table{border-collapse:collapse;margin:0 0 .75rem;width:100%;font-size:.95em}chat-streaming-md thead{background:var(--ngaf-chat-surface-alt)}chat-streaming-md th,chat-streaming-md td{border:1px solid var(--ngaf-chat-separator);padding:6px 10px;text-align:left;vertical-align:top}chat-streaming-md th{font-weight:600}chat-streaming-md chat-md-table{display:block;overflow-x:auto;max-width:100%;margin:0 0 .75rem}chat-streaming-md chat-md-table-row{display:contents}chat-streaming-md chat-md-table-cell{display:contents}chat-streaming-md chat-md-table>table{margin:0}chat-streaming-md li.chat-md-list-item--task{list-style:none;margin-left:-1.25rem;display:flex;flex-wrap:wrap;align-items:baseline;gap:.5rem}chat-streaming-md li.chat-md-list-item--task>input[type=checkbox]{margin:0;flex:0 0 auto;transform:translateY(2px)}chat-streaming-md li.chat-md-list-item--task>chat-md-children{flex:1 1 auto;min-width:0}chat-streaming-md li.chat-md-list-item--task>chat-md-children>chat-md-paragraph:first-child>p{margin:0}chat-streaming-md img{max-width:100%;height:auto;border-radius:6px}chat-streaming-md .chat-md-image--broken{display:inline-flex;align-items:center;gap:.4rem;padding:.25rem .5rem;background:var(--ngaf-chat-surface-alt);border:1px dashed var(--ngaf-chat-separator);border-radius:6px;font-size:.9em;color:var(--ngaf-chat-text-muted, currentColor);opacity:.85}chat-streaming-md .chat-md-image__icon{font-size:1em;line-height:1}chat-streaming-md .chat-md-image__alt{font-style:italic}\n"], dependencies: [{ kind: "component", type: MarkdownChildrenComponent, selector: "chat-md-children", inputs: ["parent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2803
+ `, isInline: true, styles: ["chat-streaming-md{display:block;color:var(--tplane-chat-text);line-height:var(--tplane-chat-line-height)}chat-streaming-md h1,chat-streaming-md h2,chat-streaming-md h3,chat-streaming-md h4,chat-streaming-md h5,chat-streaming-md h6{font-weight:600;line-height:1.25;margin:1.25rem 0 .75rem}chat-streaming-md h1:first-child,chat-streaming-md h2:first-child,chat-streaming-md h3:first-child,chat-streaming-md h4:first-child,chat-streaming-md h5:first-child,chat-streaming-md h6:first-child{margin-top:0}chat-streaming-md h1{font-size:1.5em;font-weight:700}chat-streaming-md h2{font-size:1.25em}chat-streaming-md h3{font-size:1.1em}chat-streaming-md h4{font-size:1em}chat-streaming-md h5,chat-streaming-md h6{font-size:.95em;color:var(--tplane-chat-text-muted)}chat-streaming-md p{margin:0 0 .75rem;line-height:1.6;font-size:var(--tplane-chat-font-size)}chat-streaming-md p:last-child{margin-bottom:0}chat-streaming-md strong,chat-streaming-md b{font-weight:700}chat-streaming-md em,chat-streaming-md i{font-style:italic}chat-streaming-md del,chat-streaming-md s{text-decoration:line-through;color:var(--tplane-chat-text-muted)}chat-streaming-md mark{background:var(--tplane-chat-surface-alt);padding:0 2px;border-radius:2px}chat-streaming-md sub{font-size:.75em;vertical-align:sub}chat-streaming-md sup{font-size:.75em;vertical-align:super}chat-streaming-md a{color:var(--tplane-chat-primary);text-decoration:underline;text-underline-offset:2px}chat-streaming-md a:hover{text-decoration-thickness:2px}chat-streaming-md ul,chat-streaming-md ol{margin:0 0 .75rem;padding-left:1.5rem}chat-streaming-md ul{list-style:disc outside}chat-streaming-md ol{list-style:decimal outside}chat-streaming-md ul ul{list-style:circle outside}chat-streaming-md ul ul ul{list-style:square outside}chat-streaming-md li{margin:.2rem 0}chat-streaming-md li::marker{color:var(--tplane-chat-text-muted)}chat-streaming-md li>p{margin:0 0 .25rem}chat-streaming-md li>ul,chat-streaming-md li>ol{margin:.25rem 0 0}chat-streaming-md li:has(>input[type=checkbox]){list-style:none;margin-left:-1.25rem}chat-streaming-md li>input[type=checkbox]{margin-right:.5rem;vertical-align:middle}chat-streaming-md code{background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text);padding:1px 5px;border-radius:4px;font-family:var(--tplane-chat-font-mono);font-size:.9em}chat-streaming-md pre{background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text);padding:12px 14px;border-radius:var(--tplane-chat-radius-card);overflow-x:auto;font-family:var(--tplane-chat-font-mono);font-size:var(--tplane-chat-font-size-sm);line-height:1.5;margin:0 0 .75rem}chat-streaming-md pre code{background:transparent;padding:0;border-radius:0;font-size:inherit}chat-streaming-md blockquote{border-left:3px solid var(--tplane-chat-separator);padding:.25rem 0 .25rem 12px;margin:0 0 .75rem;color:var(--tplane-chat-text-muted)}chat-streaming-md blockquote>:last-child{margin-bottom:0}chat-streaming-md hr{border:none;border-top:1px solid var(--tplane-chat-separator);margin:1rem 0}chat-streaming-md table{border-collapse:collapse;margin:0 0 .75rem;width:100%;font-size:.95em}chat-streaming-md thead{background:var(--tplane-chat-surface-alt)}chat-streaming-md th,chat-streaming-md td{border:1px solid var(--tplane-chat-separator);padding:6px 10px;text-align:left;vertical-align:top}chat-streaming-md th{font-weight:600}chat-streaming-md chat-md-table{display:block;overflow-x:auto;max-width:100%;margin:0 0 .75rem}chat-streaming-md chat-md-table-row{display:contents}chat-streaming-md chat-md-table-cell{display:contents}chat-streaming-md chat-md-table>table{margin:0}chat-streaming-md li.chat-md-list-item--task{list-style:none;margin-left:-1.25rem;display:flex;flex-wrap:wrap;align-items:baseline;gap:.5rem}chat-streaming-md li.chat-md-list-item--task>input[type=checkbox]{margin:0;flex:0 0 auto;transform:translateY(2px)}chat-streaming-md li.chat-md-list-item--task>chat-md-children{flex:1 1 auto;min-width:0}chat-streaming-md li.chat-md-list-item--task>chat-md-children>chat-md-paragraph:first-child>p{margin:0}chat-streaming-md img{max-width:100%;height:auto;border-radius:6px}chat-streaming-md .chat-md-image--broken{display:inline-flex;align-items:center;gap:.4rem;padding:.25rem .5rem;background:var(--tplane-chat-surface-alt);border:1px dashed var(--tplane-chat-separator);border-radius:6px;font-size:.9em;color:var(--tplane-chat-text-muted, currentColor);opacity:.85}chat-streaming-md .chat-md-image__icon{font-size:1em;line-height:1}chat-streaming-md .chat-md-image__alt{font-style:italic}chat-streaming-md .chat-md-math--display{display:block;margin:.5em 0;overflow-x:auto}chat-streaming-md .chat-md-math--raw{font-family:var(--tplane-chat-font-mono, ui-monospace, monospace)}\n"], dependencies: [{ kind: "component", type: MarkdownChildrenComponent, selector: "chat-md-children", inputs: ["parent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2613
2804
  }
2614
2805
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatStreamingMdComponent, decorators: [{
2615
2806
  type: Component,
@@ -2623,7 +2814,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
2623
2814
  useFactory: (host) => host.resolvedRegistry(),
2624
2815
  deps: [ChatStreamingMdComponent],
2625
2816
  },
2626
- ], styles: ["chat-streaming-md{display:block;color:var(--ngaf-chat-text);line-height:var(--ngaf-chat-line-height)}chat-streaming-md h1,chat-streaming-md h2,chat-streaming-md h3,chat-streaming-md h4,chat-streaming-md h5,chat-streaming-md h6{font-weight:600;line-height:1.25;margin:1.25rem 0 .75rem}chat-streaming-md h1:first-child,chat-streaming-md h2:first-child,chat-streaming-md h3:first-child,chat-streaming-md h4:first-child,chat-streaming-md h5:first-child,chat-streaming-md h6:first-child{margin-top:0}chat-streaming-md h1{font-size:1.5em;font-weight:700}chat-streaming-md h2{font-size:1.25em}chat-streaming-md h3{font-size:1.1em}chat-streaming-md h4{font-size:1em}chat-streaming-md h5,chat-streaming-md h6{font-size:.95em;color:var(--ngaf-chat-text-muted)}chat-streaming-md p{margin:0 0 .75rem;line-height:1.6;font-size:var(--ngaf-chat-font-size)}chat-streaming-md p:last-child{margin-bottom:0}chat-streaming-md strong,chat-streaming-md b{font-weight:700}chat-streaming-md em,chat-streaming-md i{font-style:italic}chat-streaming-md del,chat-streaming-md s{text-decoration:line-through;color:var(--ngaf-chat-text-muted)}chat-streaming-md mark{background:var(--ngaf-chat-surface-alt);padding:0 2px;border-radius:2px}chat-streaming-md sub{font-size:.75em;vertical-align:sub}chat-streaming-md sup{font-size:.75em;vertical-align:super}chat-streaming-md a{color:var(--ngaf-chat-primary);text-decoration:underline;text-underline-offset:2px}chat-streaming-md a:hover{text-decoration-thickness:2px}chat-streaming-md ul,chat-streaming-md ol{margin:0 0 .75rem;padding-left:1.5rem}chat-streaming-md ul{list-style:disc outside}chat-streaming-md ol{list-style:decimal outside}chat-streaming-md ul ul{list-style:circle outside}chat-streaming-md ul ul ul{list-style:square outside}chat-streaming-md li{margin:.2rem 0}chat-streaming-md li::marker{color:var(--ngaf-chat-text-muted)}chat-streaming-md li>p{margin:0 0 .25rem}chat-streaming-md li>ul,chat-streaming-md li>ol{margin:.25rem 0 0}chat-streaming-md li:has(>input[type=checkbox]){list-style:none;margin-left:-1.25rem}chat-streaming-md li>input[type=checkbox]{margin-right:.5rem;vertical-align:middle}chat-streaming-md code{background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text);padding:1px 5px;border-radius:4px;font-family:var(--ngaf-chat-font-mono);font-size:.9em}chat-streaming-md pre{background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text);padding:12px 14px;border-radius:var(--ngaf-chat-radius-card);overflow-x:auto;font-family:var(--ngaf-chat-font-mono);font-size:var(--ngaf-chat-font-size-sm);line-height:1.5;margin:0 0 .75rem}chat-streaming-md pre code{background:transparent;padding:0;border-radius:0;font-size:inherit}chat-streaming-md blockquote{border-left:3px solid var(--ngaf-chat-separator);padding:.25rem 0 .25rem 12px;margin:0 0 .75rem;color:var(--ngaf-chat-text-muted)}chat-streaming-md blockquote>:last-child{margin-bottom:0}chat-streaming-md hr{border:none;border-top:1px solid var(--ngaf-chat-separator);margin:1rem 0}chat-streaming-md table{border-collapse:collapse;margin:0 0 .75rem;width:100%;font-size:.95em}chat-streaming-md thead{background:var(--ngaf-chat-surface-alt)}chat-streaming-md th,chat-streaming-md td{border:1px solid var(--ngaf-chat-separator);padding:6px 10px;text-align:left;vertical-align:top}chat-streaming-md th{font-weight:600}chat-streaming-md chat-md-table{display:block;overflow-x:auto;max-width:100%;margin:0 0 .75rem}chat-streaming-md chat-md-table-row{display:contents}chat-streaming-md chat-md-table-cell{display:contents}chat-streaming-md chat-md-table>table{margin:0}chat-streaming-md li.chat-md-list-item--task{list-style:none;margin-left:-1.25rem;display:flex;flex-wrap:wrap;align-items:baseline;gap:.5rem}chat-streaming-md li.chat-md-list-item--task>input[type=checkbox]{margin:0;flex:0 0 auto;transform:translateY(2px)}chat-streaming-md li.chat-md-list-item--task>chat-md-children{flex:1 1 auto;min-width:0}chat-streaming-md li.chat-md-list-item--task>chat-md-children>chat-md-paragraph:first-child>p{margin:0}chat-streaming-md img{max-width:100%;height:auto;border-radius:6px}chat-streaming-md .chat-md-image--broken{display:inline-flex;align-items:center;gap:.4rem;padding:.25rem .5rem;background:var(--ngaf-chat-surface-alt);border:1px dashed var(--ngaf-chat-separator);border-radius:6px;font-size:.9em;color:var(--ngaf-chat-text-muted, currentColor);opacity:.85}chat-streaming-md .chat-md-image__icon{font-size:1em;line-height:1}chat-streaming-md .chat-md-image__alt{font-style:italic}\n"] }]
2817
+ ], styles: ["chat-streaming-md{display:block;color:var(--tplane-chat-text);line-height:var(--tplane-chat-line-height)}chat-streaming-md h1,chat-streaming-md h2,chat-streaming-md h3,chat-streaming-md h4,chat-streaming-md h5,chat-streaming-md h6{font-weight:600;line-height:1.25;margin:1.25rem 0 .75rem}chat-streaming-md h1:first-child,chat-streaming-md h2:first-child,chat-streaming-md h3:first-child,chat-streaming-md h4:first-child,chat-streaming-md h5:first-child,chat-streaming-md h6:first-child{margin-top:0}chat-streaming-md h1{font-size:1.5em;font-weight:700}chat-streaming-md h2{font-size:1.25em}chat-streaming-md h3{font-size:1.1em}chat-streaming-md h4{font-size:1em}chat-streaming-md h5,chat-streaming-md h6{font-size:.95em;color:var(--tplane-chat-text-muted)}chat-streaming-md p{margin:0 0 .75rem;line-height:1.6;font-size:var(--tplane-chat-font-size)}chat-streaming-md p:last-child{margin-bottom:0}chat-streaming-md strong,chat-streaming-md b{font-weight:700}chat-streaming-md em,chat-streaming-md i{font-style:italic}chat-streaming-md del,chat-streaming-md s{text-decoration:line-through;color:var(--tplane-chat-text-muted)}chat-streaming-md mark{background:var(--tplane-chat-surface-alt);padding:0 2px;border-radius:2px}chat-streaming-md sub{font-size:.75em;vertical-align:sub}chat-streaming-md sup{font-size:.75em;vertical-align:super}chat-streaming-md a{color:var(--tplane-chat-primary);text-decoration:underline;text-underline-offset:2px}chat-streaming-md a:hover{text-decoration-thickness:2px}chat-streaming-md ul,chat-streaming-md ol{margin:0 0 .75rem;padding-left:1.5rem}chat-streaming-md ul{list-style:disc outside}chat-streaming-md ol{list-style:decimal outside}chat-streaming-md ul ul{list-style:circle outside}chat-streaming-md ul ul ul{list-style:square outside}chat-streaming-md li{margin:.2rem 0}chat-streaming-md li::marker{color:var(--tplane-chat-text-muted)}chat-streaming-md li>p{margin:0 0 .25rem}chat-streaming-md li>ul,chat-streaming-md li>ol{margin:.25rem 0 0}chat-streaming-md li:has(>input[type=checkbox]){list-style:none;margin-left:-1.25rem}chat-streaming-md li>input[type=checkbox]{margin-right:.5rem;vertical-align:middle}chat-streaming-md code{background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text);padding:1px 5px;border-radius:4px;font-family:var(--tplane-chat-font-mono);font-size:.9em}chat-streaming-md pre{background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text);padding:12px 14px;border-radius:var(--tplane-chat-radius-card);overflow-x:auto;font-family:var(--tplane-chat-font-mono);font-size:var(--tplane-chat-font-size-sm);line-height:1.5;margin:0 0 .75rem}chat-streaming-md pre code{background:transparent;padding:0;border-radius:0;font-size:inherit}chat-streaming-md blockquote{border-left:3px solid var(--tplane-chat-separator);padding:.25rem 0 .25rem 12px;margin:0 0 .75rem;color:var(--tplane-chat-text-muted)}chat-streaming-md blockquote>:last-child{margin-bottom:0}chat-streaming-md hr{border:none;border-top:1px solid var(--tplane-chat-separator);margin:1rem 0}chat-streaming-md table{border-collapse:collapse;margin:0 0 .75rem;width:100%;font-size:.95em}chat-streaming-md thead{background:var(--tplane-chat-surface-alt)}chat-streaming-md th,chat-streaming-md td{border:1px solid var(--tplane-chat-separator);padding:6px 10px;text-align:left;vertical-align:top}chat-streaming-md th{font-weight:600}chat-streaming-md chat-md-table{display:block;overflow-x:auto;max-width:100%;margin:0 0 .75rem}chat-streaming-md chat-md-table-row{display:contents}chat-streaming-md chat-md-table-cell{display:contents}chat-streaming-md chat-md-table>table{margin:0}chat-streaming-md li.chat-md-list-item--task{list-style:none;margin-left:-1.25rem;display:flex;flex-wrap:wrap;align-items:baseline;gap:.5rem}chat-streaming-md li.chat-md-list-item--task>input[type=checkbox]{margin:0;flex:0 0 auto;transform:translateY(2px)}chat-streaming-md li.chat-md-list-item--task>chat-md-children{flex:1 1 auto;min-width:0}chat-streaming-md li.chat-md-list-item--task>chat-md-children>chat-md-paragraph:first-child>p{margin:0}chat-streaming-md img{max-width:100%;height:auto;border-radius:6px}chat-streaming-md .chat-md-image--broken{display:inline-flex;align-items:center;gap:.4rem;padding:.25rem .5rem;background:var(--tplane-chat-surface-alt);border:1px dashed var(--tplane-chat-separator);border-radius:6px;font-size:.9em;color:var(--tplane-chat-text-muted, currentColor);opacity:.85}chat-streaming-md .chat-md-image__icon{font-size:1em;line-height:1}chat-streaming-md .chat-md-image__alt{font-style:italic}chat-streaming-md .chat-md-math--display{display:block;margin:.5em 0;overflow-x:auto}chat-streaming-md .chat-md-math--raw{font-family:var(--tplane-chat-font-mono, ui-monospace, monospace)}\n"] }]
2627
2818
  }], ctorParameters: () => [], propDecorators: { content: [{ type: i0.Input, args: [{ isSignal: true, alias: "content", required: false }] }], streaming: [{ type: i0.Input, args: [{ isSignal: true, alias: "streaming", required: false }] }], viewRegistry: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewRegistry", required: false }] }] } });
2628
2819
 
2629
2820
  // SPDX-License-Identifier: MIT
@@ -2736,7 +2927,7 @@ class ChatReasoningComponent {
2736
2927
  <chat-streaming-md [content]="content()" [streaming]="isStreaming()" />
2737
2928
  </div>
2738
2929
  }
2739
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block;margin:0 0 .5rem}:host([data-has-content=\"false\"]){display:none}.chat-reasoning__header{display:inline-flex;align-items:center;gap:.5rem;padding:4px 10px;background:var(--ngaf-chat-surface-alt);border:1px solid var(--ngaf-chat-separator);border-radius:9999px;color:var(--ngaf-chat-text-muted);font-size:var(--ngaf-chat-font-size-xs);font-family:inherit;cursor:pointer;line-height:1.2}.chat-reasoning__header:hover{color:var(--ngaf-chat-text)}.chat-reasoning__chevron{width:10px;height:10px;transition:transform .12s ease}:host([data-expanded=\"true\"]) .chat-reasoning__chevron{transform:rotate(90deg)}.chat-reasoning__pulse{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--ngaf-chat-text-muted);animation:chat-reasoning-pulse 1.2s ease-in-out infinite}@keyframes chat-reasoning-pulse{0%,to{opacity:.3}50%{opacity:1}}.chat-reasoning__body{margin-top:.5rem;padding-left:12px;border-left:2px solid var(--ngaf-chat-separator);color:var(--ngaf-chat-text-muted)}.chat-reasoning__body chat-streaming-md{font-size:.95em}\n"], dependencies: [{ kind: "component", type: ChatStreamingMdComponent, selector: "chat-streaming-md", inputs: ["content", "streaming", "viewRegistry"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2930
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block;margin:0 0 .5rem}:host([data-has-content=\"false\"]){display:none}.chat-reasoning__header{display:inline-flex;align-items:center;gap:.5rem;padding:4px 10px;background:var(--tplane-chat-surface-alt);border:1px solid var(--tplane-chat-separator);border-radius:9999px;color:var(--tplane-chat-text-muted);font-size:var(--tplane-chat-font-size-xs);font-family:inherit;cursor:pointer;line-height:1.2}.chat-reasoning__header:hover{color:var(--tplane-chat-text)}.chat-reasoning__chevron{width:10px;height:10px;transition:transform .12s ease}:host([data-expanded=\"true\"]) .chat-reasoning__chevron{transform:rotate(90deg)}.chat-reasoning__pulse{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--tplane-chat-text-muted);animation:chat-reasoning-pulse 1.2s ease-in-out infinite}@keyframes chat-reasoning-pulse{0%,to{opacity:.3}50%{opacity:1}}.chat-reasoning__body{margin-top:.5rem;padding-left:12px;border-left:2px solid var(--tplane-chat-separator);color:var(--tplane-chat-text-muted)}.chat-reasoning__body chat-streaming-md{font-size:.95em}\n"], dependencies: [{ kind: "component", type: ChatStreamingMdComponent, selector: "chat-streaming-md", inputs: ["content", "streaming", "viewRegistry"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2740
2931
  }
2741
2932
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatReasoningComponent, decorators: [{
2742
2933
  type: Component,
@@ -2764,7 +2955,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
2764
2955
  <chat-streaming-md [content]="content()" [streaming]="isStreaming()" />
2765
2956
  </div>
2766
2957
  }
2767
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block;margin:0 0 .5rem}:host([data-has-content=\"false\"]){display:none}.chat-reasoning__header{display:inline-flex;align-items:center;gap:.5rem;padding:4px 10px;background:var(--ngaf-chat-surface-alt);border:1px solid var(--ngaf-chat-separator);border-radius:9999px;color:var(--ngaf-chat-text-muted);font-size:var(--ngaf-chat-font-size-xs);font-family:inherit;cursor:pointer;line-height:1.2}.chat-reasoning__header:hover{color:var(--ngaf-chat-text)}.chat-reasoning__chevron{width:10px;height:10px;transition:transform .12s ease}:host([data-expanded=\"true\"]) .chat-reasoning__chevron{transform:rotate(90deg)}.chat-reasoning__pulse{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--ngaf-chat-text-muted);animation:chat-reasoning-pulse 1.2s ease-in-out infinite}@keyframes chat-reasoning-pulse{0%,to{opacity:.3}50%{opacity:1}}.chat-reasoning__body{margin-top:.5rem;padding-left:12px;border-left:2px solid var(--ngaf-chat-separator);color:var(--ngaf-chat-text-muted)}.chat-reasoning__body chat-streaming-md{font-size:.95em}\n"] }]
2958
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block;margin:0 0 .5rem}:host([data-has-content=\"false\"]){display:none}.chat-reasoning__header{display:inline-flex;align-items:center;gap:.5rem;padding:4px 10px;background:var(--tplane-chat-surface-alt);border:1px solid var(--tplane-chat-separator);border-radius:9999px;color:var(--tplane-chat-text-muted);font-size:var(--tplane-chat-font-size-xs);font-family:inherit;cursor:pointer;line-height:1.2}.chat-reasoning__header:hover{color:var(--tplane-chat-text)}.chat-reasoning__chevron{width:10px;height:10px;transition:transform .12s ease}:host([data-expanded=\"true\"]) .chat-reasoning__chevron{transform:rotate(90deg)}.chat-reasoning__pulse{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--tplane-chat-text-muted);animation:chat-reasoning-pulse 1.2s ease-in-out infinite}@keyframes chat-reasoning-pulse{0%,to{opacity:.3}50%{opacity:1}}.chat-reasoning__body{margin-top:.5rem;padding-left:12px;border-left:2px solid var(--tplane-chat-separator);color:var(--tplane-chat-text-muted)}.chat-reasoning__body chat-streaming-md{font-size:.95em}\n"] }]
2768
2959
  }], ctorParameters: () => [], propDecorators: { content: [{ type: i0.Input, args: [{ isSignal: true, alias: "content", required: false }] }], isStreaming: [{ type: i0.Input, args: [{ isSignal: true, alias: "isStreaming", required: false }] }], durationMs: [{ type: i0.Input, args: [{ isSignal: true, alias: "durationMs", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], defaultExpanded: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultExpanded", required: false }] }] } });
2769
2960
 
2770
2961
  // libs/chat/src/lib/styles/chat-launcher-button.styles.ts
@@ -2774,15 +2965,15 @@ const CHAT_LAUNCHER_BUTTON_STYLES = `
2774
2965
  .chat-launcher-button {
2775
2966
  width: 56px;
2776
2967
  height: 56px;
2777
- border-radius: var(--ngaf-chat-radius-launcher);
2778
- background: var(--ngaf-chat-primary);
2779
- color: var(--ngaf-chat-on-primary);
2968
+ border-radius: var(--tplane-chat-radius-launcher);
2969
+ background: var(--tplane-chat-primary);
2970
+ color: var(--tplane-chat-on-primary);
2780
2971
  border: 0;
2781
2972
  cursor: pointer;
2782
2973
  display: flex;
2783
2974
  align-items: center;
2784
2975
  justify-content: center;
2785
- box-shadow: var(--ngaf-chat-shadow-md);
2976
+ box-shadow: var(--tplane-chat-shadow-md);
2786
2977
  transition: transform 200ms ease;
2787
2978
  }
2788
2979
  .chat-launcher-button:hover { transform: scale(1.05); }
@@ -2805,7 +2996,7 @@ class ChatLauncherButtonComponent {
2805
2996
  <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/>
2806
2997
  </svg>
2807
2998
  </button>
2808
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:inline-block}.chat-launcher-button{width:56px;height:56px;border-radius:var(--ngaf-chat-radius-launcher);background:var(--ngaf-chat-primary);color:var(--ngaf-chat-on-primary);border:0;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:var(--ngaf-chat-shadow-md);transition:transform .2s ease}.chat-launcher-button:hover{transform:scale(1.05)}.chat-launcher-button svg{width:24px;height:24px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2999
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:inline-block}.chat-launcher-button{width:56px;height:56px;border-radius:var(--tplane-chat-radius-launcher);background:var(--tplane-chat-primary);color:var(--tplane-chat-on-primary);border:0;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:var(--tplane-chat-shadow-md);transition:transform .2s ease}.chat-launcher-button:hover{transform:scale(1.05)}.chat-launcher-button svg{width:24px;height:24px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2809
3000
  }
2810
3001
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatLauncherButtonComponent, decorators: [{
2811
3002
  type: Component,
@@ -2815,7 +3006,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
2815
3006
  <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/>
2816
3007
  </svg>
2817
3008
  </button>
2818
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:inline-block}.chat-launcher-button{width:56px;height:56px;border-radius:var(--ngaf-chat-radius-launcher);background:var(--ngaf-chat-primary);color:var(--ngaf-chat-on-primary);border:0;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:var(--ngaf-chat-shadow-md);transition:transform .2s ease}.chat-launcher-button:hover{transform:scale(1.05)}.chat-launcher-button svg{width:24px;height:24px}\n"] }]
3009
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:inline-block}.chat-launcher-button{width:56px;height:56px;border-radius:var(--tplane-chat-radius-launcher);background:var(--tplane-chat-primary);color:var(--tplane-chat-on-primary);border:0;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:var(--tplane-chat-shadow-md);transition:transform .2s ease}.chat-launcher-button:hover{transform:scale(1.05)}.chat-launcher-button svg{width:24px;height:24px}\n"] }]
2819
3010
  }], propDecorators: { clicked: [{ type: i0.Output, args: ["clicked"] }] } });
2820
3011
 
2821
3012
  // SPDX-License-Identifier: MIT
@@ -2824,11 +3015,11 @@ const CHAT_SUGGESTIONS_STYLES = `
2824
3015
  .chat-suggestions { display: flex; flex-wrap: wrap; gap: 6px; justify-content: center; }
2825
3016
  .chat-suggestion {
2826
3017
  padding: 6px 10px;
2827
- font-size: var(--ngaf-chat-font-size-xs);
2828
- border-radius: var(--ngaf-chat-radius-bubble);
2829
- border: 1px solid var(--ngaf-chat-muted);
3018
+ font-size: var(--tplane-chat-font-size-xs);
3019
+ border-radius: var(--tplane-chat-radius-bubble);
3020
+ border: 1px solid var(--tplane-chat-muted);
2830
3021
  background: transparent;
2831
- color: var(--ngaf-chat-text);
3022
+ color: var(--tplane-chat-text);
2832
3023
  cursor: pointer;
2833
3024
  transition: transform 200ms ease;
2834
3025
  }
@@ -2847,7 +3038,7 @@ class ChatSuggestionsComponent {
2847
3038
  <button type="button" class="chat-suggestion" (click)="selected.emit(s)">{{ s }}</button>
2848
3039
  }
2849
3040
  </div>
2850
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block}.chat-suggestions{display:flex;flex-wrap:wrap;gap:6px;justify-content:center}.chat-suggestion{padding:6px 10px;font-size:var(--ngaf-chat-font-size-xs);border-radius:var(--ngaf-chat-radius-bubble);border:1px solid var(--ngaf-chat-muted);background:transparent;color:var(--ngaf-chat-text);cursor:pointer;transition:transform .2s ease}.chat-suggestion:hover{transform:scale(1.03)}.chat-suggestion:disabled{cursor:wait;opacity:.6}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3041
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block}.chat-suggestions{display:flex;flex-wrap:wrap;gap:6px;justify-content:center}.chat-suggestion{padding:6px 10px;font-size:var(--tplane-chat-font-size-xs);border-radius:var(--tplane-chat-radius-bubble);border:1px solid var(--tplane-chat-muted);background:transparent;color:var(--tplane-chat-text);cursor:pointer;transition:transform .2s ease}.chat-suggestion:hover{transform:scale(1.03)}.chat-suggestion:disabled{cursor:wait;opacity:.6}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2851
3042
  }
2852
3043
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatSuggestionsComponent, decorators: [{
2853
3044
  type: Component,
@@ -2857,7 +3048,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
2857
3048
  <button type="button" class="chat-suggestion" (click)="selected.emit(s)">{{ s }}</button>
2858
3049
  }
2859
3050
  </div>
2860
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block}.chat-suggestions{display:flex;flex-wrap:wrap;gap:6px;justify-content:center}.chat-suggestion{padding:6px 10px;font-size:var(--ngaf-chat-font-size-xs);border-radius:var(--ngaf-chat-radius-bubble);border:1px solid var(--ngaf-chat-muted);background:transparent;color:var(--ngaf-chat-text);cursor:pointer;transition:transform .2s ease}.chat-suggestion:hover{transform:scale(1.03)}.chat-suggestion:disabled{cursor:wait;opacity:.6}\n"] }]
3051
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block}.chat-suggestions{display:flex;flex-wrap:wrap;gap:6px;justify-content:center}.chat-suggestion{padding:6px 10px;font-size:var(--tplane-chat-font-size-xs);border-radius:var(--tplane-chat-radius-bubble);border:1px solid var(--tplane-chat-muted);background:transparent;color:var(--tplane-chat-text);cursor:pointer;transition:transform .2s ease}.chat-suggestion:hover{transform:scale(1.03)}.chat-suggestion:disabled{cursor:wait;opacity:.6}\n"] }]
2861
3052
  }], propDecorators: { suggestions: [{ type: i0.Input, args: [{ isSignal: true, alias: "suggestions", required: false }] }], selected: [{ type: i0.Output, args: ["selected"] }] } });
2862
3053
 
2863
3054
  // libs/chat/src/lib/styles/chat-input.styles.ts
@@ -2866,13 +3057,13 @@ const CHAT_INPUT_STYLES = `
2866
3057
  :host {
2867
3058
  display: block;
2868
3059
  width: 100%;
2869
- padding: 0 var(--ngaf-chat-edge-pad);
3060
+ padding: 0 var(--tplane-chat-edge-pad);
2870
3061
  box-sizing: border-box;
2871
3062
  }
2872
3063
 
2873
3064
  .chat-input__container {
2874
3065
  width: 100%;
2875
- max-width: var(--ngaf-chat-max-width);
3066
+ max-width: var(--tplane-chat-max-width);
2876
3067
  margin: 0 auto;
2877
3068
  }
2878
3069
 
@@ -2880,8 +3071,8 @@ const CHAT_INPUT_STYLES = `
2880
3071
  display: flex;
2881
3072
  align-items: center;
2882
3073
  gap: 8px;
2883
- background: var(--ngaf-chat-surface);
2884
- border: 1px solid var(--ngaf-chat-separator);
3074
+ background: var(--tplane-chat-surface);
3075
+ border: 1px solid var(--tplane-chat-separator);
2885
3076
  border-radius: 9999px;
2886
3077
  padding: 8px 8px 8px 16px;
2887
3078
  min-height: 56px;
@@ -2894,7 +3085,7 @@ const CHAT_INPUT_STYLES = `
2894
3085
  outline: none;
2895
3086
  resize: none;
2896
3087
  background: transparent;
2897
- color: var(--ngaf-chat-text);
3088
+ color: var(--tplane-chat-text);
2898
3089
  font: inherit;
2899
3090
  font-size: 1rem;
2900
3091
  line-height: 1.5;
@@ -2902,9 +3093,9 @@ const CHAT_INPUT_STYLES = `
2902
3093
  field-sizing: content;
2903
3094
  overflow-y: auto;
2904
3095
  }
2905
- .chat-input__textarea::placeholder { color: var(--ngaf-chat-text-muted); }
3096
+ .chat-input__textarea::placeholder { color: var(--tplane-chat-text-muted); }
2906
3097
  .chat-input__textarea::-webkit-scrollbar { width: 4px; }
2907
- .chat-input__textarea::-webkit-scrollbar-thumb { background: var(--ngaf-chat-separator); border-radius: 4px; }
3098
+ .chat-input__textarea::-webkit-scrollbar-thumb { background: var(--tplane-chat-separator); border-radius: 4px; }
2908
3099
 
2909
3100
  .chat-input__controls {
2910
3101
  display: flex;
@@ -2927,20 +3118,20 @@ const CHAT_INPUT_STYLES = `
2927
3118
  padding: 0;
2928
3119
  }
2929
3120
  .chat-input__send {
2930
- background: var(--ngaf-chat-text);
2931
- color: var(--ngaf-chat-bg);
3121
+ background: var(--tplane-chat-text);
3122
+ color: var(--tplane-chat-bg);
2932
3123
  }
2933
3124
  .chat-input__send:disabled {
2934
3125
  opacity: 0.35;
2935
3126
  cursor: not-allowed;
2936
- background: var(--ngaf-chat-text-muted);
3127
+ background: var(--tplane-chat-text-muted);
2937
3128
  }
2938
3129
  .chat-input__send:not(:disabled):hover { transform: scale(1.05); }
2939
3130
  .chat-input__send svg { width: 16px; height: 16px; }
2940
3131
 
2941
3132
  .chat-input__send--stop {
2942
- background: var(--ngaf-chat-text-muted);
2943
- color: var(--ngaf-chat-bg);
3133
+ background: var(--tplane-chat-text-muted);
3134
+ color: var(--tplane-chat-bg);
2944
3135
  }
2945
3136
  .chat-input__send--stop:hover { transform: scale(1.05); }
2946
3137
  .chat-input__send--stop svg { width: 14px; height: 14px; }
@@ -3100,7 +3291,7 @@ class ChatInputComponent {
3100
3291
  </div>
3101
3292
  <ng-content select="[chatInputFooter]" />
3102
3293
  </div>
3103
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block;width:100%;padding:0 var(--ngaf-chat-edge-pad);box-sizing:border-box}.chat-input__container{width:100%;max-width:var(--ngaf-chat-max-width);margin:0 auto}.chat-input__pill{display:flex;align-items:center;gap:8px;background:var(--ngaf-chat-surface);border:1px solid var(--ngaf-chat-separator);border-radius:9999px;padding:8px 8px 8px 16px;min-height:56px;box-sizing:border-box}.chat-input__textarea{flex:1 1 auto;border:0;outline:none;resize:none;background:transparent;color:var(--ngaf-chat-text);font:inherit;font-size:1rem;line-height:1.5;padding:0;field-sizing:content;overflow-y:auto}.chat-input__textarea::placeholder{color:var(--ngaf-chat-text-muted)}.chat-input__textarea::-webkit-scrollbar{width:4px}.chat-input__textarea::-webkit-scrollbar-thumb{background:var(--ngaf-chat-separator);border-radius:4px}.chat-input__controls{display:flex;align-items:center;gap:4px;flex:none}.chat-input__send,.chat-input__send--stop{width:36px;height:36px;border-radius:50%;border:0;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:opacity .15s ease,transform .15s ease,background .15s ease;padding:0}.chat-input__send{background:var(--ngaf-chat-text);color:var(--ngaf-chat-bg)}.chat-input__send:disabled{opacity:.35;cursor:not-allowed;background:var(--ngaf-chat-text-muted)}.chat-input__send:not(:disabled):hover{transform:scale(1.05)}.chat-input__send svg{width:16px;height:16px}.chat-input__send--stop{background:var(--ngaf-chat-text-muted);color:var(--ngaf-chat-bg)}.chat-input__send--stop:hover{transform:scale(1.05)}.chat-input__send--stop svg{width:14px;height:14px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3294
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block;width:100%;padding:0 var(--tplane-chat-edge-pad);box-sizing:border-box}.chat-input__container{width:100%;max-width:var(--tplane-chat-max-width);margin:0 auto}.chat-input__pill{display:flex;align-items:center;gap:8px;background:var(--tplane-chat-surface);border:1px solid var(--tplane-chat-separator);border-radius:9999px;padding:8px 8px 8px 16px;min-height:56px;box-sizing:border-box}.chat-input__textarea{flex:1 1 auto;border:0;outline:none;resize:none;background:transparent;color:var(--tplane-chat-text);font:inherit;font-size:1rem;line-height:1.5;padding:0;field-sizing:content;overflow-y:auto}.chat-input__textarea::placeholder{color:var(--tplane-chat-text-muted)}.chat-input__textarea::-webkit-scrollbar{width:4px}.chat-input__textarea::-webkit-scrollbar-thumb{background:var(--tplane-chat-separator);border-radius:4px}.chat-input__controls{display:flex;align-items:center;gap:4px;flex:none}.chat-input__send,.chat-input__send--stop{width:36px;height:36px;border-radius:50%;border:0;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:opacity .15s ease,transform .15s ease,background .15s ease;padding:0}.chat-input__send{background:var(--tplane-chat-text);color:var(--tplane-chat-bg)}.chat-input__send:disabled{opacity:.35;cursor:not-allowed;background:var(--tplane-chat-text-muted)}.chat-input__send:not(:disabled):hover{transform:scale(1.05)}.chat-input__send svg{width:16px;height:16px}.chat-input__send--stop{background:var(--tplane-chat-text-muted);color:var(--tplane-chat-bg)}.chat-input__send--stop:hover{transform:scale(1.05)}.chat-input__send--stop svg{width:14px;height:14px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3104
3295
  }
3105
3296
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatInputComponent, decorators: [{
3106
3297
  type: Component,
@@ -3158,7 +3349,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
3158
3349
  </div>
3159
3350
  <ng-content select="[chatInputFooter]" />
3160
3351
  </div>
3161
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block;width:100%;padding:0 var(--ngaf-chat-edge-pad);box-sizing:border-box}.chat-input__container{width:100%;max-width:var(--ngaf-chat-max-width);margin:0 auto}.chat-input__pill{display:flex;align-items:center;gap:8px;background:var(--ngaf-chat-surface);border:1px solid var(--ngaf-chat-separator);border-radius:9999px;padding:8px 8px 8px 16px;min-height:56px;box-sizing:border-box}.chat-input__textarea{flex:1 1 auto;border:0;outline:none;resize:none;background:transparent;color:var(--ngaf-chat-text);font:inherit;font-size:1rem;line-height:1.5;padding:0;field-sizing:content;overflow-y:auto}.chat-input__textarea::placeholder{color:var(--ngaf-chat-text-muted)}.chat-input__textarea::-webkit-scrollbar{width:4px}.chat-input__textarea::-webkit-scrollbar-thumb{background:var(--ngaf-chat-separator);border-radius:4px}.chat-input__controls{display:flex;align-items:center;gap:4px;flex:none}.chat-input__send,.chat-input__send--stop{width:36px;height:36px;border-radius:50%;border:0;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:opacity .15s ease,transform .15s ease,background .15s ease;padding:0}.chat-input__send{background:var(--ngaf-chat-text);color:var(--ngaf-chat-bg)}.chat-input__send:disabled{opacity:.35;cursor:not-allowed;background:var(--ngaf-chat-text-muted)}.chat-input__send:not(:disabled):hover{transform:scale(1.05)}.chat-input__send svg{width:16px;height:16px}.chat-input__send--stop{background:var(--ngaf-chat-text-muted);color:var(--ngaf-chat-bg)}.chat-input__send--stop:hover{transform:scale(1.05)}.chat-input__send--stop svg{width:14px;height:14px}\n"] }]
3352
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block;width:100%;padding:0 var(--tplane-chat-edge-pad);box-sizing:border-box}.chat-input__container{width:100%;max-width:var(--tplane-chat-max-width);margin:0 auto}.chat-input__pill{display:flex;align-items:center;gap:8px;background:var(--tplane-chat-surface);border:1px solid var(--tplane-chat-separator);border-radius:9999px;padding:8px 8px 8px 16px;min-height:56px;box-sizing:border-box}.chat-input__textarea{flex:1 1 auto;border:0;outline:none;resize:none;background:transparent;color:var(--tplane-chat-text);font:inherit;font-size:1rem;line-height:1.5;padding:0;field-sizing:content;overflow-y:auto}.chat-input__textarea::placeholder{color:var(--tplane-chat-text-muted)}.chat-input__textarea::-webkit-scrollbar{width:4px}.chat-input__textarea::-webkit-scrollbar-thumb{background:var(--tplane-chat-separator);border-radius:4px}.chat-input__controls{display:flex;align-items:center;gap:4px;flex:none}.chat-input__send,.chat-input__send--stop{width:36px;height:36px;border-radius:50%;border:0;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:opacity .15s ease,transform .15s ease,background .15s ease;padding:0}.chat-input__send{background:var(--tplane-chat-text);color:var(--tplane-chat-bg)}.chat-input__send:disabled{opacity:.35;cursor:not-allowed;background:var(--tplane-chat-text-muted)}.chat-input__send:not(:disabled):hover{transform:scale(1.05)}.chat-input__send svg{width:16px;height:16px}.chat-input__send--stop{background:var(--tplane-chat-text-muted);color:var(--tplane-chat-bg)}.chat-input__send--stop:hover{transform:scale(1.05)}.chat-input__send--stop svg{width:14px;height:14px}\n"] }]
3162
3353
  }], ctorParameters: () => [], propDecorators: { agent: [{ type: i0.Input, args: [{ isSignal: true, alias: "agent", required: true }] }], submitOnEnter: [{ type: i0.Input, args: [{ isSignal: true, alias: "submitOnEnter", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], showStopButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showStopButton", required: false }] }], submitted: [{ type: i0.Output, args: ["submitted"] }], stopped: [{ type: i0.Output, args: ["stopped"] }], textareaEl: [{ type: i0.ViewChild, args: ['textareaEl', { isSignal: true }] }] } });
3163
3354
 
3164
3355
  // SPDX-License-Identifier: MIT
@@ -3168,8 +3359,8 @@ const CHAT_TYPING_INDICATOR_STYLES = `
3168
3359
  message renders. */
3169
3360
  :host {
3170
3361
  display: block;
3171
- padding: 0 var(--ngaf-chat-space-6) var(--ngaf-chat-space-3);
3172
- max-width: var(--ngaf-chat-max-width);
3362
+ padding: 0 var(--tplane-chat-space-6) var(--tplane-chat-space-3);
3363
+ max-width: var(--tplane-chat-max-width);
3173
3364
  margin: 0 auto;
3174
3365
  width: 100%;
3175
3366
  box-sizing: border-box;
@@ -3179,8 +3370,8 @@ const CHAT_TYPING_INDICATOR_STYLES = `
3179
3370
  width: 6px;
3180
3371
  height: 6px;
3181
3372
  border-radius: 50%;
3182
- background: var(--ngaf-chat-text-muted);
3183
- animation: ngaf-chat-typing-dot 1.4s ease-in-out infinite both;
3373
+ background: var(--tplane-chat-text-muted);
3374
+ animation: tplane-chat-typing-dot 1.4s ease-in-out infinite both;
3184
3375
  }
3185
3376
  .chat-typing__dot:nth-child(2) { animation-delay: 0.2s; }
3186
3377
  .chat-typing__dot:nth-child(3) { animation-delay: 0.4s; }
@@ -3228,7 +3419,7 @@ class ChatTypingIndicatorComponent {
3228
3419
  <span class="chat-typing__dot"></span>
3229
3420
  </div>
3230
3421
  }
3231
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block;padding:0 var(--ngaf-chat-space-6) var(--ngaf-chat-space-3);max-width:var(--ngaf-chat-max-width);margin:0 auto;width:100%;box-sizing:border-box}.chat-typing__dots{display:inline-flex;gap:4px;align-items:center}.chat-typing__dot{width:6px;height:6px;border-radius:50%;background:var(--ngaf-chat-text-muted);animation:ngaf-chat-typing-dot 1.4s ease-in-out infinite both}.chat-typing__dot:nth-child(2){animation-delay:.2s}.chat-typing__dot:nth-child(3){animation-delay:.4s}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3422
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block;padding:0 var(--tplane-chat-space-6) var(--tplane-chat-space-3);max-width:var(--tplane-chat-max-width);margin:0 auto;width:100%;box-sizing:border-box}.chat-typing__dots{display:inline-flex;gap:4px;align-items:center}.chat-typing__dot{width:6px;height:6px;border-radius:50%;background:var(--tplane-chat-text-muted);animation:tplane-chat-typing-dot 1.4s ease-in-out infinite both}.chat-typing__dot:nth-child(2){animation-delay:.2s}.chat-typing__dot:nth-child(3){animation-delay:.4s}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3232
3423
  }
3233
3424
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatTypingIndicatorComponent, decorators: [{
3234
3425
  type: Component,
@@ -3240,7 +3431,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
3240
3431
  <span class="chat-typing__dot"></span>
3241
3432
  </div>
3242
3433
  }
3243
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block;padding:0 var(--ngaf-chat-space-6) var(--ngaf-chat-space-3);max-width:var(--ngaf-chat-max-width);margin:0 auto;width:100%;box-sizing:border-box}.chat-typing__dots{display:inline-flex;gap:4px;align-items:center}.chat-typing__dot{width:6px;height:6px;border-radius:50%;background:var(--ngaf-chat-text-muted);animation:ngaf-chat-typing-dot 1.4s ease-in-out infinite both}.chat-typing__dot:nth-child(2){animation-delay:.2s}.chat-typing__dot:nth-child(3){animation-delay:.4s}\n"] }]
3434
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block;padding:0 var(--tplane-chat-space-6) var(--tplane-chat-space-3);max-width:var(--tplane-chat-max-width);margin:0 auto;width:100%;box-sizing:border-box}.chat-typing__dots{display:inline-flex;gap:4px;align-items:center}.chat-typing__dot{width:6px;height:6px;border-radius:50%;background:var(--tplane-chat-text-muted);animation:tplane-chat-typing-dot 1.4s ease-in-out infinite both}.chat-typing__dot:nth-child(2){animation-delay:.2s}.chat-typing__dot:nth-child(3){animation-delay:.4s}\n"] }]
3244
3435
  }], propDecorators: { agent: [{ type: i0.Input, args: [{ isSignal: true, alias: "agent", required: true }] }] } });
3245
3436
 
3246
3437
  // libs/chat/src/lib/styles/chat-history-search-palette.styles.ts
@@ -3251,7 +3442,7 @@ const CHAT_HISTORY_SEARCH_PALETTE_STYLES = `
3251
3442
  position: fixed;
3252
3443
  inset: 0;
3253
3444
  background: rgba(0, 0, 0, 0.4);
3254
- z-index: var(--ngaf-chat-z-modal-scrim, 1100);
3445
+ z-index: var(--tplane-chat-z-modal-scrim, 1100);
3255
3446
  border: 0;
3256
3447
  padding: 0;
3257
3448
  cursor: pointer;
@@ -3263,11 +3454,11 @@ const CHAT_HISTORY_SEARCH_PALETTE_STYLES = `
3263
3454
  transform: translateX(-50%);
3264
3455
  width: min(560px, 90vw);
3265
3456
  max-height: 70vh;
3266
- background: var(--ngaf-chat-bg);
3267
- border: 1px solid var(--ngaf-chat-separator);
3457
+ background: var(--tplane-chat-bg);
3458
+ border: 1px solid var(--tplane-chat-separator);
3268
3459
  border-radius: 12px;
3269
3460
  box-shadow: 0 16px 48px rgba(0, 0, 0, 0.25);
3270
- z-index: var(--ngaf-chat-z-modal, 1101);
3461
+ z-index: var(--tplane-chat-z-modal, 1101);
3271
3462
  display: flex;
3272
3463
  flex-direction: column;
3273
3464
  overflow: hidden;
@@ -3277,12 +3468,12 @@ const CHAT_HISTORY_SEARCH_PALETTE_STYLES = `
3277
3468
  align-items: center;
3278
3469
  gap: 8px;
3279
3470
  padding: 12px 16px;
3280
- border-bottom: 1px solid var(--ngaf-chat-separator);
3471
+ border-bottom: 1px solid var(--tplane-chat-separator);
3281
3472
  }
3282
3473
  .chat-history-search-palette__icon {
3283
3474
  width: 18px;
3284
3475
  height: 18px;
3285
- color: var(--ngaf-chat-text-muted);
3476
+ color: var(--tplane-chat-text-muted);
3286
3477
  flex-shrink: 0;
3287
3478
  }
3288
3479
  .chat-history-search-palette__input {
@@ -3290,22 +3481,22 @@ const CHAT_HISTORY_SEARCH_PALETTE_STYLES = `
3290
3481
  border: 0;
3291
3482
  outline: none;
3292
3483
  background: transparent;
3293
- color: var(--ngaf-chat-text);
3484
+ color: var(--tplane-chat-text);
3294
3485
  font: inherit;
3295
3486
  font-size: 1rem;
3296
3487
  }
3297
3488
  .chat-history-search-palette__input::placeholder {
3298
- color: var(--ngaf-chat-text-muted);
3489
+ color: var(--tplane-chat-text-muted);
3299
3490
  }
3300
3491
  .chat-history-search-palette__close {
3301
3492
  background: transparent;
3302
3493
  border: 0;
3303
3494
  padding: 4px;
3304
- color: var(--ngaf-chat-text-muted);
3495
+ color: var(--tplane-chat-text-muted);
3305
3496
  cursor: pointer;
3306
3497
  border-radius: 4px;
3307
3498
  }
3308
- .chat-history-search-palette__close:hover { color: var(--ngaf-chat-text); }
3499
+ .chat-history-search-palette__close:hover { color: var(--tplane-chat-text); }
3309
3500
  .chat-history-search-palette__list {
3310
3501
  flex: 1 1 auto;
3311
3502
  overflow-y: auto;
@@ -3321,23 +3512,23 @@ const CHAT_HISTORY_SEARCH_PALETTE_STYLES = `
3321
3512
  cursor: pointer;
3322
3513
  }
3323
3514
  .chat-history-search-palette__row[aria-selected="true"] {
3324
- background: var(--ngaf-chat-surface-alt);
3515
+ background: var(--tplane-chat-surface-alt);
3325
3516
  }
3326
3517
  .chat-history-search-palette__row-title {
3327
- color: var(--ngaf-chat-text);
3328
- font-size: var(--ngaf-chat-font-size);
3518
+ color: var(--tplane-chat-text);
3519
+ font-size: var(--tplane-chat-font-size);
3329
3520
  }
3330
3521
  .chat-history-search-palette__row-subtitle {
3331
- color: var(--ngaf-chat-text-muted);
3332
- font-size: var(--ngaf-chat-font-size-sm);
3522
+ color: var(--tplane-chat-text-muted);
3523
+ font-size: var(--tplane-chat-font-size-sm);
3333
3524
  margin-top: 2px;
3334
3525
  }
3335
3526
  .chat-history-search-palette__empty,
3336
3527
  .chat-history-search-palette__hint {
3337
3528
  padding: 24px 16px;
3338
- color: var(--ngaf-chat-text-muted);
3529
+ color: var(--tplane-chat-text-muted);
3339
3530
  text-align: center;
3340
- font-size: var(--ngaf-chat-font-size-sm);
3531
+ font-size: var(--tplane-chat-font-size-sm);
3341
3532
  }
3342
3533
  .chat-history-search-palette__skeleton {
3343
3534
  padding: 8px 4px;
@@ -3345,9 +3536,9 @@ const CHAT_HISTORY_SEARCH_PALETTE_STYLES = `
3345
3536
  .chat-history-search-palette__skeleton-row {
3346
3537
  height: 36px;
3347
3538
  margin: 4px 0;
3348
- background: var(--ngaf-chat-surface-alt);
3539
+ background: var(--tplane-chat-surface-alt);
3349
3540
  border-radius: 8px;
3350
- animation: ngaf-chat-pulse 1.4s ease-in-out infinite;
3541
+ animation: tplane-chat-pulse 1.4s ease-in-out infinite;
3351
3542
  }
3352
3543
  `;
3353
3544
 
@@ -3500,7 +3691,7 @@ class ChatHistorySearchPaletteComponent {
3500
3691
  }
3501
3692
  </div>
3502
3693
  }
3503
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:contents}.chat-history-search-palette__scrim{position:fixed;inset:0;background:#0006;z-index:var(--ngaf-chat-z-modal-scrim, 1100);border:0;padding:0;cursor:pointer}.chat-history-search-palette{position:fixed;top:15vh;left:50%;transform:translate(-50%);width:min(560px,90vw);max-height:70vh;background:var(--ngaf-chat-bg);border:1px solid var(--ngaf-chat-separator);border-radius:12px;box-shadow:0 16px 48px #00000040;z-index:var(--ngaf-chat-z-modal, 1101);display:flex;flex-direction:column;overflow:hidden}.chat-history-search-palette__input-row{display:flex;align-items:center;gap:8px;padding:12px 16px;border-bottom:1px solid var(--ngaf-chat-separator)}.chat-history-search-palette__icon{width:18px;height:18px;color:var(--ngaf-chat-text-muted);flex-shrink:0}.chat-history-search-palette__input{flex:1 1 auto;border:0;outline:none;background:transparent;color:var(--ngaf-chat-text);font:inherit;font-size:1rem}.chat-history-search-palette__input::placeholder{color:var(--ngaf-chat-text-muted)}.chat-history-search-palette__close{background:transparent;border:0;padding:4px;color:var(--ngaf-chat-text-muted);cursor:pointer;border-radius:4px}.chat-history-search-palette__close:hover{color:var(--ngaf-chat-text)}.chat-history-search-palette__list{flex:1 1 auto;overflow-y:auto;padding:4px;margin:0;list-style:none}.chat-history-search-palette__row{display:flex;flex-direction:column;padding:10px 12px;border-radius:8px;cursor:pointer}.chat-history-search-palette__row[aria-selected=true]{background:var(--ngaf-chat-surface-alt)}.chat-history-search-palette__row-title{color:var(--ngaf-chat-text);font-size:var(--ngaf-chat-font-size)}.chat-history-search-palette__row-subtitle{color:var(--ngaf-chat-text-muted);font-size:var(--ngaf-chat-font-size-sm);margin-top:2px}.chat-history-search-palette__empty,.chat-history-search-palette__hint{padding:24px 16px;color:var(--ngaf-chat-text-muted);text-align:center;font-size:var(--ngaf-chat-font-size-sm)}.chat-history-search-palette__skeleton{padding:8px 4px}.chat-history-search-palette__skeleton-row{height:36px;margin:4px 0;background:var(--ngaf-chat-surface-alt);border-radius:8px;animation:ngaf-chat-pulse 1.4s ease-in-out infinite}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3694
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:contents}.chat-history-search-palette__scrim{position:fixed;inset:0;background:#0006;z-index:var(--tplane-chat-z-modal-scrim, 1100);border:0;padding:0;cursor:pointer}.chat-history-search-palette{position:fixed;top:15vh;left:50%;transform:translate(-50%);width:min(560px,90vw);max-height:70vh;background:var(--tplane-chat-bg);border:1px solid var(--tplane-chat-separator);border-radius:12px;box-shadow:0 16px 48px #00000040;z-index:var(--tplane-chat-z-modal, 1101);display:flex;flex-direction:column;overflow:hidden}.chat-history-search-palette__input-row{display:flex;align-items:center;gap:8px;padding:12px 16px;border-bottom:1px solid var(--tplane-chat-separator)}.chat-history-search-palette__icon{width:18px;height:18px;color:var(--tplane-chat-text-muted);flex-shrink:0}.chat-history-search-palette__input{flex:1 1 auto;border:0;outline:none;background:transparent;color:var(--tplane-chat-text);font:inherit;font-size:1rem}.chat-history-search-palette__input::placeholder{color:var(--tplane-chat-text-muted)}.chat-history-search-palette__close{background:transparent;border:0;padding:4px;color:var(--tplane-chat-text-muted);cursor:pointer;border-radius:4px}.chat-history-search-palette__close:hover{color:var(--tplane-chat-text)}.chat-history-search-palette__list{flex:1 1 auto;overflow-y:auto;padding:4px;margin:0;list-style:none}.chat-history-search-palette__row{display:flex;flex-direction:column;padding:10px 12px;border-radius:8px;cursor:pointer}.chat-history-search-palette__row[aria-selected=true]{background:var(--tplane-chat-surface-alt)}.chat-history-search-palette__row-title{color:var(--tplane-chat-text);font-size:var(--tplane-chat-font-size)}.chat-history-search-palette__row-subtitle{color:var(--tplane-chat-text-muted);font-size:var(--tplane-chat-font-size-sm);margin-top:2px}.chat-history-search-palette__empty,.chat-history-search-palette__hint{padding:24px 16px;color:var(--tplane-chat-text-muted);text-align:center;font-size:var(--tplane-chat-font-size-sm)}.chat-history-search-palette__skeleton{padding:8px 4px}.chat-history-search-palette__skeleton-row{height:36px;margin:4px 0;background:var(--tplane-chat-surface-alt);border-radius:8px;animation:tplane-chat-pulse 1.4s ease-in-out infinite}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3504
3695
  }
3505
3696
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatHistorySearchPaletteComponent, decorators: [{
3506
3697
  type: Component,
@@ -3582,7 +3773,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
3582
3773
  }
3583
3774
  </div>
3584
3775
  }
3585
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:contents}.chat-history-search-palette__scrim{position:fixed;inset:0;background:#0006;z-index:var(--ngaf-chat-z-modal-scrim, 1100);border:0;padding:0;cursor:pointer}.chat-history-search-palette{position:fixed;top:15vh;left:50%;transform:translate(-50%);width:min(560px,90vw);max-height:70vh;background:var(--ngaf-chat-bg);border:1px solid var(--ngaf-chat-separator);border-radius:12px;box-shadow:0 16px 48px #00000040;z-index:var(--ngaf-chat-z-modal, 1101);display:flex;flex-direction:column;overflow:hidden}.chat-history-search-palette__input-row{display:flex;align-items:center;gap:8px;padding:12px 16px;border-bottom:1px solid var(--ngaf-chat-separator)}.chat-history-search-palette__icon{width:18px;height:18px;color:var(--ngaf-chat-text-muted);flex-shrink:0}.chat-history-search-palette__input{flex:1 1 auto;border:0;outline:none;background:transparent;color:var(--ngaf-chat-text);font:inherit;font-size:1rem}.chat-history-search-palette__input::placeholder{color:var(--ngaf-chat-text-muted)}.chat-history-search-palette__close{background:transparent;border:0;padding:4px;color:var(--ngaf-chat-text-muted);cursor:pointer;border-radius:4px}.chat-history-search-palette__close:hover{color:var(--ngaf-chat-text)}.chat-history-search-palette__list{flex:1 1 auto;overflow-y:auto;padding:4px;margin:0;list-style:none}.chat-history-search-palette__row{display:flex;flex-direction:column;padding:10px 12px;border-radius:8px;cursor:pointer}.chat-history-search-palette__row[aria-selected=true]{background:var(--ngaf-chat-surface-alt)}.chat-history-search-palette__row-title{color:var(--ngaf-chat-text);font-size:var(--ngaf-chat-font-size)}.chat-history-search-palette__row-subtitle{color:var(--ngaf-chat-text-muted);font-size:var(--ngaf-chat-font-size-sm);margin-top:2px}.chat-history-search-palette__empty,.chat-history-search-palette__hint{padding:24px 16px;color:var(--ngaf-chat-text-muted);text-align:center;font-size:var(--ngaf-chat-font-size-sm)}.chat-history-search-palette__skeleton{padding:8px 4px}.chat-history-search-palette__skeleton-row{height:36px;margin:4px 0;background:var(--ngaf-chat-surface-alt);border-radius:8px;animation:ngaf-chat-pulse 1.4s ease-in-out infinite}\n"] }]
3776
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:contents}.chat-history-search-palette__scrim{position:fixed;inset:0;background:#0006;z-index:var(--tplane-chat-z-modal-scrim, 1100);border:0;padding:0;cursor:pointer}.chat-history-search-palette{position:fixed;top:15vh;left:50%;transform:translate(-50%);width:min(560px,90vw);max-height:70vh;background:var(--tplane-chat-bg);border:1px solid var(--tplane-chat-separator);border-radius:12px;box-shadow:0 16px 48px #00000040;z-index:var(--tplane-chat-z-modal, 1101);display:flex;flex-direction:column;overflow:hidden}.chat-history-search-palette__input-row{display:flex;align-items:center;gap:8px;padding:12px 16px;border-bottom:1px solid var(--tplane-chat-separator)}.chat-history-search-palette__icon{width:18px;height:18px;color:var(--tplane-chat-text-muted);flex-shrink:0}.chat-history-search-palette__input{flex:1 1 auto;border:0;outline:none;background:transparent;color:var(--tplane-chat-text);font:inherit;font-size:1rem}.chat-history-search-palette__input::placeholder{color:var(--tplane-chat-text-muted)}.chat-history-search-palette__close{background:transparent;border:0;padding:4px;color:var(--tplane-chat-text-muted);cursor:pointer;border-radius:4px}.chat-history-search-palette__close:hover{color:var(--tplane-chat-text)}.chat-history-search-palette__list{flex:1 1 auto;overflow-y:auto;padding:4px;margin:0;list-style:none}.chat-history-search-palette__row{display:flex;flex-direction:column;padding:10px 12px;border-radius:8px;cursor:pointer}.chat-history-search-palette__row[aria-selected=true]{background:var(--tplane-chat-surface-alt)}.chat-history-search-palette__row-title{color:var(--tplane-chat-text);font-size:var(--tplane-chat-font-size)}.chat-history-search-palette__row-subtitle{color:var(--tplane-chat-text-muted);font-size:var(--tplane-chat-font-size-sm);margin-top:2px}.chat-history-search-palette__empty,.chat-history-search-palette__hint{padding:24px 16px;color:var(--tplane-chat-text-muted);text-align:center;font-size:var(--tplane-chat-font-size-sm)}.chat-history-search-palette__skeleton{padding:8px 4px}.chat-history-search-palette__skeleton-row{height:36px;margin:4px 0;background:var(--tplane-chat-surface-alt);border-radius:8px;animation:tplane-chat-pulse 1.4s ease-in-out infinite}\n"] }]
3586
3777
  }], ctorParameters: () => [], propDecorators: { open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], query: [{ type: i0.Input, args: [{ isSignal: true, alias: "query", required: false }] }, { type: i0.Output, args: ["queryChange"] }], results: [{ type: i0.Input, args: [{ isSignal: true, alias: "results", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], threadSelected: [{ type: i0.Output, args: ["threadSelected"] }], closed: [{ type: i0.Output, args: ["closed"] }], inputEl: [{ type: i0.ViewChild, args: ['inputEl', { isSignal: true }] }] } });
3587
3778
 
3588
3779
  // libs/chat/src/lib/styles/chat-overflow-menu.styles.ts
@@ -3605,8 +3796,8 @@ const CHAT_OVERFLOW_MENU_STYLES = `
3605
3796
  padding: 4px;
3606
3797
  margin: 0;
3607
3798
  list-style: none;
3608
- background: var(--ngaf-chat-bg);
3609
- border: 1px solid var(--ngaf-chat-separator);
3799
+ background: var(--tplane-chat-bg);
3800
+ border: 1px solid var(--tplane-chat-separator);
3610
3801
  border-radius: 8px;
3611
3802
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
3612
3803
  }
@@ -3614,23 +3805,23 @@ const CHAT_OVERFLOW_MENU_STYLES = `
3614
3805
  display: block;
3615
3806
  padding: 8px 12px;
3616
3807
  border-radius: 4px;
3617
- color: var(--ngaf-chat-text);
3618
- font-size: var(--ngaf-chat-font-size-sm);
3808
+ color: var(--tplane-chat-text);
3809
+ font-size: var(--tplane-chat-font-size-sm);
3619
3810
  cursor: pointer;
3620
3811
  user-select: none;
3621
3812
  }
3622
3813
  .chat-overflow-menu__item:hover {
3623
- background: var(--ngaf-chat-surface-alt);
3814
+ background: var(--tplane-chat-surface-alt);
3624
3815
  }
3625
3816
  .chat-overflow-menu__item:focus-visible {
3626
- outline: 2px solid var(--ngaf-chat-primary);
3817
+ outline: 2px solid var(--tplane-chat-primary);
3627
3818
  outline-offset: -2px;
3628
3819
  }
3629
3820
  .chat-overflow-menu__item--destructive {
3630
- color: var(--ngaf-chat-error-text);
3821
+ color: var(--tplane-chat-error-text);
3631
3822
  }
3632
3823
  .chat-overflow-menu__item--disabled {
3633
- color: var(--ngaf-chat-text-muted);
3824
+ color: var(--tplane-chat-text-muted);
3634
3825
  cursor: not-allowed;
3635
3826
  pointer-events: none;
3636
3827
  }
@@ -3736,7 +3927,7 @@ class ChatOverflowMenuComponent {
3736
3927
  }
3737
3928
  </ul>
3738
3929
  }
3739
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:contents}.chat-overflow-menu__scrim{position:fixed;inset:0;background:transparent;z-index:59;border:0;padding:0;cursor:default}.chat-overflow-menu{position:fixed;z-index:60;min-width:160px;padding:4px;margin:0;list-style:none;background:var(--ngaf-chat-bg);border:1px solid var(--ngaf-chat-separator);border-radius:8px;box-shadow:0 8px 24px #00000026}.chat-overflow-menu__item{display:block;padding:8px 12px;border-radius:4px;color:var(--ngaf-chat-text);font-size:var(--ngaf-chat-font-size-sm);cursor:pointer;-webkit-user-select:none;user-select:none}.chat-overflow-menu__item:hover{background:var(--ngaf-chat-surface-alt)}.chat-overflow-menu__item:focus-visible{outline:2px solid var(--ngaf-chat-primary);outline-offset:-2px}.chat-overflow-menu__item--destructive{color:var(--ngaf-chat-error-text)}.chat-overflow-menu__item--disabled{color:var(--ngaf-chat-text-muted);cursor:not-allowed;pointer-events:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3930
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:contents}.chat-overflow-menu__scrim{position:fixed;inset:0;background:transparent;z-index:59;border:0;padding:0;cursor:default}.chat-overflow-menu{position:fixed;z-index:60;min-width:160px;padding:4px;margin:0;list-style:none;background:var(--tplane-chat-bg);border:1px solid var(--tplane-chat-separator);border-radius:8px;box-shadow:0 8px 24px #00000026}.chat-overflow-menu__item{display:block;padding:8px 12px;border-radius:4px;color:var(--tplane-chat-text);font-size:var(--tplane-chat-font-size-sm);cursor:pointer;-webkit-user-select:none;user-select:none}.chat-overflow-menu__item:hover{background:var(--tplane-chat-surface-alt)}.chat-overflow-menu__item:focus-visible{outline:2px solid var(--tplane-chat-primary);outline-offset:-2px}.chat-overflow-menu__item--destructive{color:var(--tplane-chat-error-text)}.chat-overflow-menu__item--disabled{color:var(--tplane-chat-text-muted);cursor:not-allowed;pointer-events:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3740
3931
  }
3741
3932
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatOverflowMenuComponent, decorators: [{
3742
3933
  type: Component,
@@ -3774,7 +3965,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
3774
3965
  }
3775
3966
  </ul>
3776
3967
  }
3777
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:contents}.chat-overflow-menu__scrim{position:fixed;inset:0;background:transparent;z-index:59;border:0;padding:0;cursor:default}.chat-overflow-menu{position:fixed;z-index:60;min-width:160px;padding:4px;margin:0;list-style:none;background:var(--ngaf-chat-bg);border:1px solid var(--ngaf-chat-separator);border-radius:8px;box-shadow:0 8px 24px #00000026}.chat-overflow-menu__item{display:block;padding:8px 12px;border-radius:4px;color:var(--ngaf-chat-text);font-size:var(--ngaf-chat-font-size-sm);cursor:pointer;-webkit-user-select:none;user-select:none}.chat-overflow-menu__item:hover{background:var(--ngaf-chat-surface-alt)}.chat-overflow-menu__item:focus-visible{outline:2px solid var(--ngaf-chat-primary);outline-offset:-2px}.chat-overflow-menu__item--destructive{color:var(--ngaf-chat-error-text)}.chat-overflow-menu__item--disabled{color:var(--ngaf-chat-text-muted);cursor:not-allowed;pointer-events:none}\n"] }]
3968
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:contents}.chat-overflow-menu__scrim{position:fixed;inset:0;background:transparent;z-index:59;border:0;padding:0;cursor:default}.chat-overflow-menu{position:fixed;z-index:60;min-width:160px;padding:4px;margin:0;list-style:none;background:var(--tplane-chat-bg);border:1px solid var(--tplane-chat-separator);border-radius:8px;box-shadow:0 8px 24px #00000026}.chat-overflow-menu__item{display:block;padding:8px 12px;border-radius:4px;color:var(--tplane-chat-text);font-size:var(--tplane-chat-font-size-sm);cursor:pointer;-webkit-user-select:none;user-select:none}.chat-overflow-menu__item:hover{background:var(--tplane-chat-surface-alt)}.chat-overflow-menu__item:focus-visible{outline:2px solid var(--tplane-chat-primary);outline-offset:-2px}.chat-overflow-menu__item--destructive{color:var(--tplane-chat-error-text)}.chat-overflow-menu__item--disabled{color:var(--tplane-chat-text-muted);cursor:not-allowed;pointer-events:none}\n"] }]
3778
3969
  }], ctorParameters: () => [], propDecorators: { open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], anchor: [{ type: i0.Input, args: [{ isSignal: true, alias: "anchor", required: false }] }], anchorPos: [{ type: i0.Input, args: [{ isSignal: true, alias: "anchorPos", required: false }] }], itemSelected: [{ type: i0.Output, args: ["itemSelected"] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
3779
3970
 
3780
3971
  // libs/chat/src/lib/styles/chat-confirm-dialog.styles.ts
@@ -3798,21 +3989,21 @@ const CHAT_CONFIRM_DIALOG_STYLES = `
3798
3989
  width: min(420px, 90vw);
3799
3990
  z-index: 71;
3800
3991
  padding: 20px;
3801
- background: var(--ngaf-chat-bg);
3802
- border: 1px solid var(--ngaf-chat-separator);
3992
+ background: var(--tplane-chat-bg);
3993
+ border: 1px solid var(--tplane-chat-separator);
3803
3994
  border-radius: 12px;
3804
3995
  box-shadow: 0 16px 48px rgba(0, 0, 0, 0.25);
3805
3996
  }
3806
3997
  .chat-confirm-dialog__title {
3807
3998
  margin: 0 0 8px 0;
3808
- color: var(--ngaf-chat-text);
3999
+ color: var(--tplane-chat-text);
3809
4000
  font-size: 1.125rem;
3810
4001
  font-weight: 600;
3811
4002
  }
3812
4003
  .chat-confirm-dialog__body {
3813
4004
  margin: 0 0 16px 0;
3814
- color: var(--ngaf-chat-text-muted);
3815
- font-size: var(--ngaf-chat-font-size-sm);
4005
+ color: var(--tplane-chat-text-muted);
4006
+ font-size: var(--tplane-chat-font-size-sm);
3816
4007
  line-height: 1.5;
3817
4008
  }
3818
4009
  .chat-confirm-dialog__actions {
@@ -3825,20 +4016,20 @@ const CHAT_CONFIRM_DIALOG_STYLES = `
3825
4016
  padding: 8px 16px;
3826
4017
  border-radius: 6px;
3827
4018
  font: inherit;
3828
- font-size: var(--ngaf-chat-font-size-sm);
4019
+ font-size: var(--tplane-chat-font-size-sm);
3829
4020
  cursor: pointer;
3830
- border: 1px solid var(--ngaf-chat-separator);
3831
- background: var(--ngaf-chat-bg);
3832
- color: var(--ngaf-chat-text);
4021
+ border: 1px solid var(--tplane-chat-separator);
4022
+ background: var(--tplane-chat-bg);
4023
+ color: var(--tplane-chat-text);
3833
4024
  }
3834
- .chat-confirm-dialog__cancel:hover { background: var(--ngaf-chat-surface-alt); }
4025
+ .chat-confirm-dialog__cancel:hover { background: var(--tplane-chat-surface-alt); }
3835
4026
  .chat-confirm-dialog__confirm {
3836
- background: var(--ngaf-chat-text);
3837
- color: var(--ngaf-chat-bg);
4027
+ background: var(--tplane-chat-text);
4028
+ color: var(--tplane-chat-bg);
3838
4029
  border-color: transparent;
3839
4030
  }
3840
4031
  .chat-confirm-dialog__confirm--destructive {
3841
- background: var(--ngaf-chat-destructive);
4032
+ background: var(--tplane-chat-destructive);
3842
4033
  color: #fff;
3843
4034
  border-color: transparent;
3844
4035
  }
@@ -3847,7 +4038,7 @@ const CHAT_CONFIRM_DIALOG_STYLES = `
3847
4038
  }
3848
4039
  .chat-confirm-dialog__cancel:focus-visible,
3849
4040
  .chat-confirm-dialog__confirm:focus-visible {
3850
- outline: 2px solid var(--ngaf-chat-primary);
4041
+ outline: 2px solid var(--tplane-chat-primary);
3851
4042
  outline-offset: 2px;
3852
4043
  }
3853
4044
  `;
@@ -3919,7 +4110,7 @@ class ChatConfirmDialogComponent {
3919
4110
  </div>
3920
4111
  </div>
3921
4112
  }
3922
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:contents}.chat-confirm-dialog__scrim{position:fixed;inset:0;background:#0006;z-index:70;border:0;padding:0;cursor:pointer}.chat-confirm-dialog{position:fixed;top:30vh;left:50%;transform:translate(-50%);width:min(420px,90vw);z-index:71;padding:20px;background:var(--ngaf-chat-bg);border:1px solid var(--ngaf-chat-separator);border-radius:12px;box-shadow:0 16px 48px #00000040}.chat-confirm-dialog__title{margin:0 0 8px;color:var(--ngaf-chat-text);font-size:1.125rem;font-weight:600}.chat-confirm-dialog__body{margin:0 0 16px;color:var(--ngaf-chat-text-muted);font-size:var(--ngaf-chat-font-size-sm);line-height:1.5}.chat-confirm-dialog__actions{display:flex;justify-content:flex-end;gap:8px}.chat-confirm-dialog__cancel,.chat-confirm-dialog__confirm{padding:8px 16px;border-radius:6px;font:inherit;font-size:var(--ngaf-chat-font-size-sm);cursor:pointer;border:1px solid var(--ngaf-chat-separator);background:var(--ngaf-chat-bg);color:var(--ngaf-chat-text)}.chat-confirm-dialog__cancel:hover{background:var(--ngaf-chat-surface-alt)}.chat-confirm-dialog__confirm{background:var(--ngaf-chat-text);color:var(--ngaf-chat-bg);border-color:transparent}.chat-confirm-dialog__confirm--destructive{background:var(--ngaf-chat-destructive);color:#fff;border-color:transparent}.chat-confirm-dialog__confirm--destructive:hover{filter:brightness(1.1)}.chat-confirm-dialog__cancel:focus-visible,.chat-confirm-dialog__confirm:focus-visible{outline:2px solid var(--ngaf-chat-primary);outline-offset:2px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4113
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:contents}.chat-confirm-dialog__scrim{position:fixed;inset:0;background:#0006;z-index:70;border:0;padding:0;cursor:pointer}.chat-confirm-dialog{position:fixed;top:30vh;left:50%;transform:translate(-50%);width:min(420px,90vw);z-index:71;padding:20px;background:var(--tplane-chat-bg);border:1px solid var(--tplane-chat-separator);border-radius:12px;box-shadow:0 16px 48px #00000040}.chat-confirm-dialog__title{margin:0 0 8px;color:var(--tplane-chat-text);font-size:1.125rem;font-weight:600}.chat-confirm-dialog__body{margin:0 0 16px;color:var(--tplane-chat-text-muted);font-size:var(--tplane-chat-font-size-sm);line-height:1.5}.chat-confirm-dialog__actions{display:flex;justify-content:flex-end;gap:8px}.chat-confirm-dialog__cancel,.chat-confirm-dialog__confirm{padding:8px 16px;border-radius:6px;font:inherit;font-size:var(--tplane-chat-font-size-sm);cursor:pointer;border:1px solid var(--tplane-chat-separator);background:var(--tplane-chat-bg);color:var(--tplane-chat-text)}.chat-confirm-dialog__cancel:hover{background:var(--tplane-chat-surface-alt)}.chat-confirm-dialog__confirm{background:var(--tplane-chat-text);color:var(--tplane-chat-bg);border-color:transparent}.chat-confirm-dialog__confirm--destructive{background:var(--tplane-chat-destructive);color:#fff;border-color:transparent}.chat-confirm-dialog__confirm--destructive:hover{filter:brightness(1.1)}.chat-confirm-dialog__cancel:focus-visible,.chat-confirm-dialog__confirm:focus-visible{outline:2px solid var(--tplane-chat-primary);outline-offset:2px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3923
4114
  }
3924
4115
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatConfirmDialogComponent, decorators: [{
3925
4116
  type: Component,
@@ -3960,7 +4151,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
3960
4151
  </div>
3961
4152
  </div>
3962
4153
  }
3963
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:contents}.chat-confirm-dialog__scrim{position:fixed;inset:0;background:#0006;z-index:70;border:0;padding:0;cursor:pointer}.chat-confirm-dialog{position:fixed;top:30vh;left:50%;transform:translate(-50%);width:min(420px,90vw);z-index:71;padding:20px;background:var(--ngaf-chat-bg);border:1px solid var(--ngaf-chat-separator);border-radius:12px;box-shadow:0 16px 48px #00000040}.chat-confirm-dialog__title{margin:0 0 8px;color:var(--ngaf-chat-text);font-size:1.125rem;font-weight:600}.chat-confirm-dialog__body{margin:0 0 16px;color:var(--ngaf-chat-text-muted);font-size:var(--ngaf-chat-font-size-sm);line-height:1.5}.chat-confirm-dialog__actions{display:flex;justify-content:flex-end;gap:8px}.chat-confirm-dialog__cancel,.chat-confirm-dialog__confirm{padding:8px 16px;border-radius:6px;font:inherit;font-size:var(--ngaf-chat-font-size-sm);cursor:pointer;border:1px solid var(--ngaf-chat-separator);background:var(--ngaf-chat-bg);color:var(--ngaf-chat-text)}.chat-confirm-dialog__cancel:hover{background:var(--ngaf-chat-surface-alt)}.chat-confirm-dialog__confirm{background:var(--ngaf-chat-text);color:var(--ngaf-chat-bg);border-color:transparent}.chat-confirm-dialog__confirm--destructive{background:var(--ngaf-chat-destructive);color:#fff;border-color:transparent}.chat-confirm-dialog__confirm--destructive:hover{filter:brightness(1.1)}.chat-confirm-dialog__cancel:focus-visible,.chat-confirm-dialog__confirm:focus-visible{outline:2px solid var(--ngaf-chat-primary);outline-offset:2px}\n"] }]
4154
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:contents}.chat-confirm-dialog__scrim{position:fixed;inset:0;background:#0006;z-index:70;border:0;padding:0;cursor:pointer}.chat-confirm-dialog{position:fixed;top:30vh;left:50%;transform:translate(-50%);width:min(420px,90vw);z-index:71;padding:20px;background:var(--tplane-chat-bg);border:1px solid var(--tplane-chat-separator);border-radius:12px;box-shadow:0 16px 48px #00000040}.chat-confirm-dialog__title{margin:0 0 8px;color:var(--tplane-chat-text);font-size:1.125rem;font-weight:600}.chat-confirm-dialog__body{margin:0 0 16px;color:var(--tplane-chat-text-muted);font-size:var(--tplane-chat-font-size-sm);line-height:1.5}.chat-confirm-dialog__actions{display:flex;justify-content:flex-end;gap:8px}.chat-confirm-dialog__cancel,.chat-confirm-dialog__confirm{padding:8px 16px;border-radius:6px;font:inherit;font-size:var(--tplane-chat-font-size-sm);cursor:pointer;border:1px solid var(--tplane-chat-separator);background:var(--tplane-chat-bg);color:var(--tplane-chat-text)}.chat-confirm-dialog__cancel:hover{background:var(--tplane-chat-surface-alt)}.chat-confirm-dialog__confirm{background:var(--tplane-chat-text);color:var(--tplane-chat-bg);border-color:transparent}.chat-confirm-dialog__confirm--destructive{background:var(--tplane-chat-destructive);color:#fff;border-color:transparent}.chat-confirm-dialog__confirm--destructive:hover{filter:brightness(1.1)}.chat-confirm-dialog__cancel:focus-visible,.chat-confirm-dialog__confirm:focus-visible{outline:2px solid var(--tplane-chat-primary);outline-offset:2px}\n"] }]
3964
4155
  }], ctorParameters: () => [], propDecorators: { open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], body: [{ type: i0.Input, args: [{ isSignal: true, alias: "body", required: false }] }], confirmLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "confirmLabel", required: false }] }], cancelLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "cancelLabel", required: false }] }], tone: [{ type: i0.Input, args: [{ isSignal: true, alias: "tone", required: false }] }], confirmed: [{ type: i0.Output, args: ["confirmed"] }], cancelled: [{ type: i0.Output, args: ["cancelled"] }], cancelBtn: [{ type: i0.ViewChild, args: ['cancelBtn', { isSignal: true }] }] } });
3965
4156
 
3966
4157
  // libs/chat/src/lib/styles/chat-scroll-bubble.styles.ts
@@ -3984,9 +4175,9 @@ const CHAT_SCROLL_BUBBLE_STYLES = `
3984
4175
  height: 36px;
3985
4176
  padding: 0 12px;
3986
4177
  border-radius: 9999px;
3987
- background: var(--ngaf-chat-surface);
3988
- border: 1px solid var(--ngaf-chat-separator);
3989
- color: var(--ngaf-chat-text);
4178
+ background: var(--tplane-chat-surface);
4179
+ border: 1px solid var(--tplane-chat-separator);
4180
+ color: var(--tplane-chat-text);
3990
4181
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12);
3991
4182
  cursor: pointer;
3992
4183
  transition: transform 150ms ease, box-shadow 150ms ease;
@@ -3997,8 +4188,8 @@ const CHAT_SCROLL_BUBBLE_STYLES = `
3997
4188
  width: 6px;
3998
4189
  height: 6px;
3999
4190
  border-radius: 50%;
4000
- background: var(--ngaf-chat-text-muted);
4001
- animation: ngaf-chat-typing-dot 1.4s ease-in-out infinite both;
4191
+ background: var(--tplane-chat-text-muted);
4192
+ animation: tplane-chat-typing-dot 1.4s ease-in-out infinite both;
4002
4193
  }
4003
4194
  .chat-scroll-bubble__dot:nth-child(2) { animation-delay: 0.2s; }
4004
4195
  .chat-scroll-bubble__dot:nth-child(3) { animation-delay: 0.4s; }
@@ -4038,7 +4229,7 @@ class ChatScrollBubbleComponent {
4038
4229
  </svg>
4039
4230
  }
4040
4231
  </button>
4041
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{position:absolute;bottom:100%;left:50%;transform:translate(-50%);margin-bottom:8px;z-index:2;pointer-events:none}.chat-scroll-bubble{pointer-events:auto;display:inline-flex;align-items:center;justify-content:center;min-width:36px;height:36px;padding:0 12px;border-radius:9999px;background:var(--ngaf-chat-surface);border:1px solid var(--ngaf-chat-separator);color:var(--ngaf-chat-text);box-shadow:0 2px 8px #0000001f;cursor:pointer;transition:transform .15s ease,box-shadow .15s ease}.chat-scroll-bubble:hover{transform:scale(1.05)}.chat-scroll-bubble__dots{display:inline-flex;gap:4px;align-items:center}.chat-scroll-bubble__dot{width:6px;height:6px;border-radius:50%;background:var(--ngaf-chat-text-muted);animation:ngaf-chat-typing-dot 1.4s ease-in-out infinite both}.chat-scroll-bubble__dot:nth-child(2){animation-delay:.2s}.chat-scroll-bubble__dot:nth-child(3){animation-delay:.4s}.chat-scroll-bubble__arrow{width:16px;height:16px;display:block}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4232
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{position:absolute;bottom:100%;left:50%;transform:translate(-50%);margin-bottom:8px;z-index:2;pointer-events:none}.chat-scroll-bubble{pointer-events:auto;display:inline-flex;align-items:center;justify-content:center;min-width:36px;height:36px;padding:0 12px;border-radius:9999px;background:var(--tplane-chat-surface);border:1px solid var(--tplane-chat-separator);color:var(--tplane-chat-text);box-shadow:0 2px 8px #0000001f;cursor:pointer;transition:transform .15s ease,box-shadow .15s ease}.chat-scroll-bubble:hover{transform:scale(1.05)}.chat-scroll-bubble__dots{display:inline-flex;gap:4px;align-items:center}.chat-scroll-bubble__dot{width:6px;height:6px;border-radius:50%;background:var(--tplane-chat-text-muted);animation:tplane-chat-typing-dot 1.4s ease-in-out infinite both}.chat-scroll-bubble__dot:nth-child(2){animation-delay:.2s}.chat-scroll-bubble__dot:nth-child(3){animation-delay:.4s}.chat-scroll-bubble__arrow{width:16px;height:16px;display:block}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4042
4233
  }
4043
4234
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatScrollBubbleComponent, decorators: [{
4044
4235
  type: Component,
@@ -4064,7 +4255,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
4064
4255
  </svg>
4065
4256
  }
4066
4257
  </button>
4067
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{position:absolute;bottom:100%;left:50%;transform:translate(-50%);margin-bottom:8px;z-index:2;pointer-events:none}.chat-scroll-bubble{pointer-events:auto;display:inline-flex;align-items:center;justify-content:center;min-width:36px;height:36px;padding:0 12px;border-radius:9999px;background:var(--ngaf-chat-surface);border:1px solid var(--ngaf-chat-separator);color:var(--ngaf-chat-text);box-shadow:0 2px 8px #0000001f;cursor:pointer;transition:transform .15s ease,box-shadow .15s ease}.chat-scroll-bubble:hover{transform:scale(1.05)}.chat-scroll-bubble__dots{display:inline-flex;gap:4px;align-items:center}.chat-scroll-bubble__dot{width:6px;height:6px;border-radius:50%;background:var(--ngaf-chat-text-muted);animation:ngaf-chat-typing-dot 1.4s ease-in-out infinite both}.chat-scroll-bubble__dot:nth-child(2){animation-delay:.2s}.chat-scroll-bubble__dot:nth-child(3){animation-delay:.4s}.chat-scroll-bubble__arrow{width:16px;height:16px;display:block}\n"] }]
4258
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{position:absolute;bottom:100%;left:50%;transform:translate(-50%);margin-bottom:8px;z-index:2;pointer-events:none}.chat-scroll-bubble{pointer-events:auto;display:inline-flex;align-items:center;justify-content:center;min-width:36px;height:36px;padding:0 12px;border-radius:9999px;background:var(--tplane-chat-surface);border:1px solid var(--tplane-chat-separator);color:var(--tplane-chat-text);box-shadow:0 2px 8px #0000001f;cursor:pointer;transition:transform .15s ease,box-shadow .15s ease}.chat-scroll-bubble:hover{transform:scale(1.05)}.chat-scroll-bubble__dots{display:inline-flex;gap:4px;align-items:center}.chat-scroll-bubble__dot{width:6px;height:6px;border-radius:50%;background:var(--tplane-chat-text-muted);animation:tplane-chat-typing-dot 1.4s ease-in-out infinite both}.chat-scroll-bubble__dot:nth-child(2){animation-delay:.2s}.chat-scroll-bubble__dot:nth-child(3){animation-delay:.4s}.chat-scroll-bubble__arrow{width:16px;height:16px;display:block}\n"] }]
4068
4259
  }], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: true }] }], clicked: [{ type: i0.Output, args: ["clicked"] }] } });
4069
4260
 
4070
4261
  // SPDX-License-Identifier: MIT
@@ -4074,40 +4265,53 @@ const CHAT_ERROR_STYLES = `
4074
4265
  display: flex;
4075
4266
  align-items: flex-start;
4076
4267
  gap: 0.5rem;
4077
- background: var(--ngaf-chat-error-bg);
4078
- border: 1px solid var(--ngaf-chat-error-border);
4079
- color: var(--ngaf-chat-error-text);
4080
- border-radius: var(--ngaf-chat-radius-card);
4268
+ background: var(--tplane-chat-error-bg);
4269
+ border: 1px solid var(--tplane-chat-error-border);
4270
+ color: var(--tplane-chat-error-text);
4271
+ border-radius: var(--tplane-chat-radius-card);
4081
4272
  padding: 8px 12px;
4082
- font-size: var(--ngaf-chat-font-size-sm);
4083
- margin: 0 var(--ngaf-chat-space-6) var(--ngaf-chat-space-2);
4273
+ font-size: var(--tplane-chat-font-size-sm);
4274
+ margin: 0 var(--tplane-chat-space-6) var(--tplane-chat-space-2);
4084
4275
  }
4085
4276
  .chat-error__icon { flex-shrink: 0; width: 16px; height: 16px; margin-top: 2px; }
4086
4277
  .chat-error__msg { flex: 1; min-width: 0; word-break: break-word; }
4087
4278
  .chat-error__retry {
4088
4279
  flex-shrink: 0;
4089
4280
  background: transparent;
4090
- color: var(--ngaf-chat-error-text);
4091
- border: 1px solid var(--ngaf-chat-error-border);
4092
- border-radius: var(--ngaf-chat-radius-card);
4281
+ color: var(--tplane-chat-error-text);
4282
+ border: 1px solid var(--tplane-chat-error-border);
4283
+ border-radius: var(--tplane-chat-radius-card);
4093
4284
  padding: 2px 10px;
4094
- font-size: var(--ngaf-chat-font-size-sm);
4285
+ font-size: var(--tplane-chat-font-size-sm);
4095
4286
  cursor: pointer;
4096
4287
  transition: background 150ms ease, color 150ms ease;
4097
4288
  white-space: nowrap;
4098
4289
  }
4099
4290
  .chat-error__retry:hover {
4100
- background: var(--ngaf-chat-error-border);
4101
- color: var(--ngaf-chat-error-text);
4291
+ background: var(--tplane-chat-error-border);
4292
+ color: var(--tplane-chat-error-text);
4102
4293
  }
4103
4294
  .chat-error__retry:focus-visible {
4104
- outline: 2px solid var(--ngaf-chat-error-border);
4295
+ outline: 2px solid var(--tplane-chat-error-border);
4105
4296
  outline-offset: 2px;
4106
4297
  }
4107
4298
  `;
4108
4299
 
4109
4300
  // libs/chat/src/lib/primitives/chat-error/chat-error.component.ts
4110
4301
  // SPDX-License-Identifier: MIT
4302
+ /**
4303
+ * Coerce an unknown error value into a human-readable message string — reads
4304
+ * `.message` from `Error`s, returns strings as-is, and `String()`-casts the
4305
+ * rest. Useful when rendering an agent's `error` outside the built-in
4306
+ * `chat-error` component.
4307
+ *
4308
+ * @param error Any caught/agent error value.
4309
+ * @returns The message text, or `null` when `error` is nullish.
4310
+ * @example
4311
+ * ```ts
4312
+ * const msg = extractErrorMessage(agent.error());
4313
+ * ```
4314
+ */
4111
4315
  function extractErrorMessage(error) {
4112
4316
  if (!error)
4113
4317
  return null;
@@ -4132,7 +4336,7 @@ class ChatErrorComponent {
4132
4336
  }
4133
4337
  </div>
4134
4338
  }
4135
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block}.chat-error{display:flex;align-items:flex-start;gap:.5rem;background:var(--ngaf-chat-error-bg);border:1px solid var(--ngaf-chat-error-border);color:var(--ngaf-chat-error-text);border-radius:var(--ngaf-chat-radius-card);padding:8px 12px;font-size:var(--ngaf-chat-font-size-sm);margin:0 var(--ngaf-chat-space-6) var(--ngaf-chat-space-2)}.chat-error__icon{flex-shrink:0;width:16px;height:16px;margin-top:2px}.chat-error__msg{flex:1;min-width:0;word-break:break-word}.chat-error__retry{flex-shrink:0;background:transparent;color:var(--ngaf-chat-error-text);border:1px solid var(--ngaf-chat-error-border);border-radius:var(--ngaf-chat-radius-card);padding:2px 10px;font-size:var(--ngaf-chat-font-size-sm);cursor:pointer;transition:background .15s ease,color .15s ease;white-space:nowrap}.chat-error__retry:hover{background:var(--ngaf-chat-error-border);color:var(--ngaf-chat-error-text)}.chat-error__retry:focus-visible{outline:2px solid var(--ngaf-chat-error-border);outline-offset:2px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4339
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block}.chat-error{display:flex;align-items:flex-start;gap:.5rem;background:var(--tplane-chat-error-bg);border:1px solid var(--tplane-chat-error-border);color:var(--tplane-chat-error-text);border-radius:var(--tplane-chat-radius-card);padding:8px 12px;font-size:var(--tplane-chat-font-size-sm);margin:0 var(--tplane-chat-space-6) var(--tplane-chat-space-2)}.chat-error__icon{flex-shrink:0;width:16px;height:16px;margin-top:2px}.chat-error__msg{flex:1;min-width:0;word-break:break-word}.chat-error__retry{flex-shrink:0;background:transparent;color:var(--tplane-chat-error-text);border:1px solid var(--tplane-chat-error-border);border-radius:var(--tplane-chat-radius-card);padding:2px 10px;font-size:var(--tplane-chat-font-size-sm);cursor:pointer;transition:background .15s ease,color .15s ease;white-space:nowrap}.chat-error__retry:hover{background:var(--tplane-chat-error-border);color:var(--tplane-chat-error-text)}.chat-error__retry:focus-visible{outline:2px solid var(--tplane-chat-error-border);outline-offset:2px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4136
4340
  }
4137
4341
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatErrorComponent, decorators: [{
4138
4342
  type: Component,
@@ -4148,20 +4352,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
4148
4352
  }
4149
4353
  </div>
4150
4354
  }
4151
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block}.chat-error{display:flex;align-items:flex-start;gap:.5rem;background:var(--ngaf-chat-error-bg);border:1px solid var(--ngaf-chat-error-border);color:var(--ngaf-chat-error-text);border-radius:var(--ngaf-chat-radius-card);padding:8px 12px;font-size:var(--ngaf-chat-font-size-sm);margin:0 var(--ngaf-chat-space-6) var(--ngaf-chat-space-2)}.chat-error__icon{flex-shrink:0;width:16px;height:16px;margin-top:2px}.chat-error__msg{flex:1;min-width:0;word-break:break-word}.chat-error__retry{flex-shrink:0;background:transparent;color:var(--ngaf-chat-error-text);border:1px solid var(--ngaf-chat-error-border);border-radius:var(--ngaf-chat-radius-card);padding:2px 10px;font-size:var(--ngaf-chat-font-size-sm);cursor:pointer;transition:background .15s ease,color .15s ease;white-space:nowrap}.chat-error__retry:hover{background:var(--ngaf-chat-error-border);color:var(--ngaf-chat-error-text)}.chat-error__retry:focus-visible{outline:2px solid var(--ngaf-chat-error-border);outline-offset:2px}\n"] }]
4355
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block}.chat-error{display:flex;align-items:flex-start;gap:.5rem;background:var(--tplane-chat-error-bg);border:1px solid var(--tplane-chat-error-border);color:var(--tplane-chat-error-text);border-radius:var(--tplane-chat-radius-card);padding:8px 12px;font-size:var(--tplane-chat-font-size-sm);margin:0 var(--tplane-chat-space-6) var(--tplane-chat-space-2)}.chat-error__icon{flex-shrink:0;width:16px;height:16px;margin-top:2px}.chat-error__msg{flex:1;min-width:0;word-break:break-word}.chat-error__retry{flex-shrink:0;background:transparent;color:var(--tplane-chat-error-text);border:1px solid var(--tplane-chat-error-border);border-radius:var(--tplane-chat-radius-card);padding:2px 10px;font-size:var(--tplane-chat-font-size-sm);cursor:pointer;transition:background .15s ease,color .15s ease;white-space:nowrap}.chat-error__retry:hover{background:var(--tplane-chat-error-border);color:var(--tplane-chat-error-text)}.chat-error__retry:focus-visible{outline:2px solid var(--tplane-chat-error-border);outline-offset:2px}\n"] }]
4152
4356
  }], propDecorators: { agent: [{ type: i0.Input, args: [{ isSignal: true, alias: "agent", required: true }] }] } });
4153
4357
 
4154
4358
  // SPDX-License-Identifier: MIT
4155
4359
  const CHAT_INTERRUPT_STYLES = `
4156
4360
  :host { display: block; }
4157
4361
  .chat-interrupt {
4158
- background: var(--ngaf-chat-warning-bg);
4159
- color: var(--ngaf-chat-warning-text);
4160
- border-left: 3px solid var(--ngaf-chat-warning-text);
4161
- border-radius: var(--ngaf-chat-radius-card);
4362
+ background: var(--tplane-chat-warning-bg);
4363
+ color: var(--tplane-chat-warning-text);
4364
+ border-left: 3px solid var(--tplane-chat-warning-text);
4365
+ border-radius: var(--tplane-chat-radius-card);
4162
4366
  padding: 12px 16px;
4163
- margin: 0 var(--ngaf-chat-space-6) var(--ngaf-chat-space-2);
4164
- font-size: var(--ngaf-chat-font-size-sm);
4367
+ margin: 0 var(--tplane-chat-space-6) var(--tplane-chat-space-2);
4368
+ font-size: var(--tplane-chat-font-size-sm);
4165
4369
  }
4166
4370
  .chat-interrupt__title { font-weight: 600; margin: 0 0 4px; display: flex; align-items: center; gap: 6px; }
4167
4371
  .chat-interrupt__body { margin: 0 0 8px; opacity: 0.95; }
@@ -4213,7 +4417,7 @@ class ChatInterruptComponent {
4213
4417
  }
4214
4418
  </div>
4215
4419
  }
4216
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block}.chat-interrupt{background:var(--ngaf-chat-warning-bg);color:var(--ngaf-chat-warning-text);border-left:3px solid var(--ngaf-chat-warning-text);border-radius:var(--ngaf-chat-radius-card);padding:12px 16px;margin:0 var(--ngaf-chat-space-6) var(--ngaf-chat-space-2);font-size:var(--ngaf-chat-font-size-sm)}.chat-interrupt__title{font-weight:600;margin:0 0 4px;display:flex;align-items:center;gap:6px}.chat-interrupt__body{margin:0 0 8px;opacity:.95}.chat-interrupt__actions{display:flex;gap:8px;flex-wrap:wrap}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4420
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block}.chat-interrupt{background:var(--tplane-chat-warning-bg);color:var(--tplane-chat-warning-text);border-left:3px solid var(--tplane-chat-warning-text);border-radius:var(--tplane-chat-radius-card);padding:12px 16px;margin:0 var(--tplane-chat-space-6) var(--tplane-chat-space-2);font-size:var(--tplane-chat-font-size-sm)}.chat-interrupt__title{font-weight:600;margin:0 0 4px;display:flex;align-items:center;gap:6px}.chat-interrupt__body{margin:0 0 8px;opacity:.95}.chat-interrupt__actions{display:flex;gap:8px;flex-wrap:wrap}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4217
4421
  }
4218
4422
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatInterruptComponent, decorators: [{
4219
4423
  type: Component,
@@ -4236,7 +4440,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
4236
4440
  }
4237
4441
  </div>
4238
4442
  }
4239
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block}.chat-interrupt{background:var(--ngaf-chat-warning-bg);color:var(--ngaf-chat-warning-text);border-left:3px solid var(--ngaf-chat-warning-text);border-radius:var(--ngaf-chat-radius-card);padding:12px 16px;margin:0 var(--ngaf-chat-space-6) var(--ngaf-chat-space-2);font-size:var(--ngaf-chat-font-size-sm)}.chat-interrupt__title{font-weight:600;margin:0 0 4px;display:flex;align-items:center;gap:6px}.chat-interrupt__body{margin:0 0 8px;opacity:.95}.chat-interrupt__actions{display:flex;gap:8px;flex-wrap:wrap}\n"] }]
4443
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block}.chat-interrupt{background:var(--tplane-chat-warning-bg);color:var(--tplane-chat-warning-text);border-left:3px solid var(--tplane-chat-warning-text);border-radius:var(--tplane-chat-radius-card);padding:12px 16px;margin:0 var(--tplane-chat-space-6) var(--tplane-chat-space-2);font-size:var(--tplane-chat-font-size-sm)}.chat-interrupt__title{font-weight:600;margin:0 0 4px;display:flex;align-items:center;gap:6px}.chat-interrupt__body{margin:0 0 8px;opacity:.95}.chat-interrupt__actions{display:flex;gap:8px;flex-wrap:wrap}\n"] }]
4240
4444
  }], propDecorators: { agent: [{ type: i0.Input, args: [{ isSignal: true, alias: "agent", required: true }] }], templateRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => TemplateRef), { isSignal: true }] }] } });
4241
4445
 
4242
4446
  // libs/chat/src/lib/compositions/chat-tool-call-card/chat-tool-call-card.component.ts
@@ -4319,7 +4523,7 @@ class ChatToolCallCardComponent {
4319
4523
  </div>
4320
4524
  }
4321
4525
  </chat-trace>
4322
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block}.tcc__name{font-family:var(--ngaf-chat-font-mono);font-size:var(--ngaf-chat-font-size-sm, 13px);color:var(--ngaf-chat-text-muted);font-weight:400;padding-left:2px}.tcc__pill{display:inline-flex;align-items:center;gap:3px;padding:1px 6px;border-radius:9999px;background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text-muted);font-size:10px;font-weight:500;margin-left:6px;line-height:1.4}.tcc__pill svg{width:10px;height:10px}.tcc__pill[data-status=running] svg{animation:tcc-spin .8s linear infinite}@keyframes tcc-spin{to{transform:rotate(360deg)}}.tcc__section{padding:8px 0}.tcc__section+.tcc__section{border-top:1px solid var(--ngaf-chat-separator)}.tcc__section-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--ngaf-chat-text-muted);margin:0 0 4px}.tcc__section-body{font-family:var(--ngaf-chat-font-mono);font-size:var(--ngaf-chat-font-size-xs);color:var(--ngaf-chat-text);white-space:pre-wrap;overflow-x:auto;margin:0}\n"], dependencies: [{ kind: "component", type: ChatTraceComponent, selector: "chat-trace", inputs: ["state", "defaultExpanded"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4526
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block}.tcc__name{font-family:var(--tplane-chat-font-mono);font-size:var(--tplane-chat-font-size-sm, 13px);color:var(--tplane-chat-text-muted);font-weight:400;padding-left:2px}.tcc__pill{display:inline-flex;align-items:center;gap:3px;padding:1px 6px;border-radius:9999px;background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text-muted);font-size:10px;font-weight:500;margin-left:6px;line-height:1.4}.tcc__pill svg{width:10px;height:10px}.tcc__pill[data-status=running] svg{animation:tcc-spin .8s linear infinite}@keyframes tcc-spin{to{transform:rotate(360deg)}}.tcc__section{padding:8px 0}.tcc__section+.tcc__section{border-top:1px solid var(--tplane-chat-separator)}.tcc__section-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--tplane-chat-text-muted);margin:0 0 4px}.tcc__section-body{font-family:var(--tplane-chat-font-mono);font-size:var(--tplane-chat-font-size-xs);color:var(--tplane-chat-text);white-space:pre-wrap;overflow-x:auto;margin:0}\n"], dependencies: [{ kind: "component", type: ChatTraceComponent, selector: "chat-trace", inputs: ["state", "defaultExpanded"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4323
4527
  }
4324
4528
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatToolCallCardComponent, decorators: [{
4325
4529
  type: Component,
@@ -4359,7 +4563,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
4359
4563
  </div>
4360
4564
  }
4361
4565
  </chat-trace>
4362
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block}.tcc__name{font-family:var(--ngaf-chat-font-mono);font-size:var(--ngaf-chat-font-size-sm, 13px);color:var(--ngaf-chat-text-muted);font-weight:400;padding-left:2px}.tcc__pill{display:inline-flex;align-items:center;gap:3px;padding:1px 6px;border-radius:9999px;background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text-muted);font-size:10px;font-weight:500;margin-left:6px;line-height:1.4}.tcc__pill svg{width:10px;height:10px}.tcc__pill[data-status=running] svg{animation:tcc-spin .8s linear infinite}@keyframes tcc-spin{to{transform:rotate(360deg)}}.tcc__section{padding:8px 0}.tcc__section+.tcc__section{border-top:1px solid var(--ngaf-chat-separator)}.tcc__section-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--ngaf-chat-text-muted);margin:0 0 4px}.tcc__section-body{font-family:var(--ngaf-chat-font-mono);font-size:var(--ngaf-chat-font-size-xs);color:var(--ngaf-chat-text);white-space:pre-wrap;overflow-x:auto;margin:0}\n"] }]
4566
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block}.tcc__name{font-family:var(--tplane-chat-font-mono);font-size:var(--tplane-chat-font-size-sm, 13px);color:var(--tplane-chat-text-muted);font-weight:400;padding-left:2px}.tcc__pill{display:inline-flex;align-items:center;gap:3px;padding:1px 6px;border-radius:9999px;background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text-muted);font-size:10px;font-weight:500;margin-left:6px;line-height:1.4}.tcc__pill svg{width:10px;height:10px}.tcc__pill[data-status=running] svg{animation:tcc-spin .8s linear infinite}@keyframes tcc-spin{to{transform:rotate(360deg)}}.tcc__section{padding:8px 0}.tcc__section+.tcc__section{border-top:1px solid var(--tplane-chat-separator)}.tcc__section-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--tplane-chat-text-muted);margin:0 0 4px}.tcc__section-body{font-family:var(--tplane-chat-font-mono);font-size:var(--tplane-chat-font-size-xs);color:var(--tplane-chat-text);white-space:pre-wrap;overflow-x:auto;margin:0}\n"] }]
4363
4567
  }], propDecorators: { toolCall: [{ type: i0.Input, args: [{ isSignal: true, alias: "toolCall", required: true }] }], defaultCollapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultCollapsed", required: false }] }] } });
4364
4568
 
4365
4569
  // libs/chat/src/lib/compositions/chat-subagent-card/chat-subagent-card.component.ts
@@ -4372,10 +4576,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
4372
4576
  */
4373
4577
  function statusColor(status) {
4374
4578
  switch (status) {
4375
- case 'pending': return 'background: var(--ngaf-chat-surface-alt); color: var(--ngaf-chat-text-muted);';
4376
- case 'running': return 'background: var(--ngaf-chat-warning-bg); color: var(--ngaf-chat-warning-text);';
4377
- case 'complete': return 'color: var(--ngaf-chat-success);';
4378
- case 'error': return 'background: var(--ngaf-chat-error-bg); color: var(--ngaf-chat-error-text);';
4579
+ case 'pending': return 'background: var(--tplane-chat-surface-alt); color: var(--tplane-chat-text-muted);';
4580
+ case 'running': return 'background: var(--tplane-chat-warning-bg); color: var(--tplane-chat-warning-text);';
4581
+ case 'complete': return 'color: var(--tplane-chat-success);';
4582
+ case 'error': return 'background: var(--tplane-chat-error-bg); color: var(--tplane-chat-error-text);';
4379
4583
  }
4380
4584
  }
4381
4585
  function statusToTraceState(s) {
@@ -4426,7 +4630,7 @@ class ChatSubagentCardComponent {
4426
4630
  </div>
4427
4631
  }
4428
4632
  </chat-trace>
4429
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block}.sac__name{color:var(--ngaf-chat-text);font-weight:500;font-size:var(--ngaf-chat-font-size-sm)}.sac__id{font-family:var(--ngaf-chat-font-mono);font-size:var(--ngaf-chat-font-size-xs);color:var(--ngaf-chat-text-muted);margin-left:4px}.sac__pill{padding:1px 8px;border-radius:9999px;font-size:11px;font-weight:500;margin-left:4px}.sac__pill[data-status=pending]{background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text-muted)}.sac__pill[data-status=running]{background:var(--ngaf-chat-warning-bg);color:var(--ngaf-chat-warning-text)}.sac__pill[data-status=complete]{color:var(--ngaf-chat-success)}.sac__pill[data-status=error]{background:var(--ngaf-chat-error-bg);color:var(--ngaf-chat-error-text)}.sac__count{font-size:var(--ngaf-chat-font-size-xs);color:var(--ngaf-chat-text-muted)}.sac__msg{padding:6px 0}.sac__msg+.sac__msg{border-top:1px solid var(--ngaf-chat-separator)}.sac__reasoning{font-size:var(--ngaf-chat-font-size-xs);color:var(--ngaf-chat-text-muted);font-style:italic;margin-bottom:4px}\n"], dependencies: [{ kind: "component", type: ChatTraceComponent, selector: "chat-trace", inputs: ["state", "defaultExpanded"] }, { kind: "component", type: ChatToolCallCardComponent, selector: "chat-tool-call-card", inputs: ["toolCall", "defaultCollapsed"] }, { kind: "component", type: ChatStreamingMdComponent, selector: "chat-streaming-md", inputs: ["content", "streaming", "viewRegistry"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4633
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block}.sac__name{color:var(--tplane-chat-text);font-weight:500;font-size:var(--tplane-chat-font-size-sm)}.sac__id{font-family:var(--tplane-chat-font-mono);font-size:var(--tplane-chat-font-size-xs);color:var(--tplane-chat-text-muted);margin-left:4px}.sac__pill{padding:1px 8px;border-radius:9999px;font-size:11px;font-weight:500;margin-left:4px}.sac__pill[data-status=pending]{background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text-muted)}.sac__pill[data-status=running]{background:var(--tplane-chat-warning-bg);color:var(--tplane-chat-warning-text)}.sac__pill[data-status=complete]{color:var(--tplane-chat-success)}.sac__pill[data-status=error]{background:var(--tplane-chat-error-bg);color:var(--tplane-chat-error-text)}.sac__count{font-size:var(--tplane-chat-font-size-xs);color:var(--tplane-chat-text-muted)}.sac__msg{padding:6px 0}.sac__msg+.sac__msg{border-top:1px solid var(--tplane-chat-separator)}.sac__reasoning{font-size:var(--tplane-chat-font-size-xs);color:var(--tplane-chat-text-muted);font-style:italic;margin-bottom:4px}\n"], dependencies: [{ kind: "component", type: ChatTraceComponent, selector: "chat-trace", inputs: ["state", "defaultExpanded"] }, { kind: "component", type: ChatToolCallCardComponent, selector: "chat-tool-call-card", inputs: ["toolCall", "defaultCollapsed"] }, { kind: "component", type: ChatStreamingMdComponent, selector: "chat-streaming-md", inputs: ["content", "streaming", "viewRegistry"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4430
4634
  }
4431
4635
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatSubagentCardComponent, decorators: [{
4432
4636
  type: Component,
@@ -4452,7 +4656,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
4452
4656
  </div>
4453
4657
  }
4454
4658
  </chat-trace>
4455
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block}.sac__name{color:var(--ngaf-chat-text);font-weight:500;font-size:var(--ngaf-chat-font-size-sm)}.sac__id{font-family:var(--ngaf-chat-font-mono);font-size:var(--ngaf-chat-font-size-xs);color:var(--ngaf-chat-text-muted);margin-left:4px}.sac__pill{padding:1px 8px;border-radius:9999px;font-size:11px;font-weight:500;margin-left:4px}.sac__pill[data-status=pending]{background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text-muted)}.sac__pill[data-status=running]{background:var(--ngaf-chat-warning-bg);color:var(--ngaf-chat-warning-text)}.sac__pill[data-status=complete]{color:var(--ngaf-chat-success)}.sac__pill[data-status=error]{background:var(--ngaf-chat-error-bg);color:var(--ngaf-chat-error-text)}.sac__count{font-size:var(--ngaf-chat-font-size-xs);color:var(--ngaf-chat-text-muted)}.sac__msg{padding:6px 0}.sac__msg+.sac__msg{border-top:1px solid var(--ngaf-chat-separator)}.sac__reasoning{font-size:var(--ngaf-chat-font-size-xs);color:var(--ngaf-chat-text-muted);font-style:italic;margin-bottom:4px}\n"] }]
4659
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block}.sac__name{color:var(--tplane-chat-text);font-weight:500;font-size:var(--tplane-chat-font-size-sm)}.sac__id{font-family:var(--tplane-chat-font-mono);font-size:var(--tplane-chat-font-size-xs);color:var(--tplane-chat-text-muted);margin-left:4px}.sac__pill{padding:1px 8px;border-radius:9999px;font-size:11px;font-weight:500;margin-left:4px}.sac__pill[data-status=pending]{background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text-muted)}.sac__pill[data-status=running]{background:var(--tplane-chat-warning-bg);color:var(--tplane-chat-warning-text)}.sac__pill[data-status=complete]{color:var(--tplane-chat-success)}.sac__pill[data-status=error]{background:var(--tplane-chat-error-bg);color:var(--tplane-chat-error-text)}.sac__count{font-size:var(--tplane-chat-font-size-xs);color:var(--tplane-chat-text-muted)}.sac__msg{padding:6px 0}.sac__msg+.sac__msg{border-top:1px solid var(--tplane-chat-separator)}.sac__reasoning{font-size:var(--tplane-chat-font-size-xs);color:var(--tplane-chat-text-muted);font-style:italic;margin-bottom:4px}\n"] }]
4456
4660
  }], propDecorators: { subagent: [{ type: i0.Input, args: [{ isSignal: true, alias: "subagent", required: true }] }] } });
4457
4661
 
4458
4662
  // libs/chat/src/lib/primitives/chat-tool-calls/chat-tool-call-template.directive.ts
@@ -4666,7 +4870,7 @@ class ChatToolCallsComponent {
4666
4870
  }
4667
4871
  }
4668
4872
  }
4669
- `, isInline: true, styles: [":host{display:block;margin-bottom:20px}.ctc__group{border:1px solid var(--ngaf-chat-separator);border-radius:var(--ngaf-chat-radius-card);margin:0 0 4px}.ctc__group-header{display:flex;align-items:center;gap:.5rem;width:100%;padding:8px 12px;background:transparent;border:0;font:inherit;color:var(--ngaf-chat-text);cursor:pointer;text-align:left}.ctc__group-chevron{width:10px;height:10px;transition:transform .12s ease}.ctc__group[data-expanded=true] .ctc__group-chevron{transform:rotate(90deg)}.ctc__group-body{padding:0 12px 8px;border-top:1px solid var(--ngaf-chat-separator)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ChatToolCallCardComponent, selector: "chat-tool-call-card", inputs: ["toolCall", "defaultCollapsed"] }, { kind: "component", type: ChatSubagentCardComponent, selector: "chat-subagent-card", inputs: ["subagent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4873
+ `, isInline: true, styles: [":host{display:block;margin-bottom:20px}.ctc__group{border:1px solid var(--tplane-chat-separator);border-radius:var(--tplane-chat-radius-card);margin:0 0 4px}.ctc__group-header{display:flex;align-items:center;gap:.5rem;width:100%;padding:8px 12px;background:transparent;border:0;font:inherit;color:var(--tplane-chat-text);cursor:pointer;text-align:left}.ctc__group-chevron{width:10px;height:10px;transition:transform .12s ease}.ctc__group[data-expanded=true] .ctc__group-chevron{transform:rotate(90deg)}.ctc__group-body{padding:0 12px 8px;border-top:1px solid var(--tplane-chat-separator)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ChatToolCallCardComponent, selector: "chat-tool-call-card", inputs: ["toolCall", "defaultCollapsed"] }, { kind: "component", type: ChatSubagentCardComponent, selector: "chat-subagent-card", inputs: ["subagent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4670
4874
  }
4671
4875
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatToolCallsComponent, decorators: [{
4672
4876
  type: Component,
@@ -4705,24 +4909,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
4705
4909
  }
4706
4910
  }
4707
4911
  }
4708
- `, styles: [":host{display:block;margin-bottom:20px}.ctc__group{border:1px solid var(--ngaf-chat-separator);border-radius:var(--ngaf-chat-radius-card);margin:0 0 4px}.ctc__group-header{display:flex;align-items:center;gap:.5rem;width:100%;padding:8px 12px;background:transparent;border:0;font:inherit;color:var(--ngaf-chat-text);cursor:pointer;text-align:left}.ctc__group-chevron{width:10px;height:10px;transition:transform .12s ease}.ctc__group[data-expanded=true] .ctc__group-chevron{transform:rotate(90deg)}.ctc__group-body{padding:0 12px 8px;border-top:1px solid var(--ngaf-chat-separator)}\n"] }]
4912
+ `, styles: [":host{display:block;margin-bottom:20px}.ctc__group{border:1px solid var(--tplane-chat-separator);border-radius:var(--tplane-chat-radius-card);margin:0 0 4px}.ctc__group-header{display:flex;align-items:center;gap:.5rem;width:100%;padding:8px 12px;background:transparent;border:0;font:inherit;color:var(--tplane-chat-text);cursor:pointer;text-align:left}.ctc__group-chevron{width:10px;height:10px;transition:transform .12s ease}.ctc__group[data-expanded=true] .ctc__group-chevron{transform:rotate(90deg)}.ctc__group-body{padding:0 12px 8px;border-top:1px solid var(--tplane-chat-separator)}\n"] }]
4709
4913
  }], propDecorators: { agent: [{ type: i0.Input, args: [{ isSignal: true, alias: "agent", required: true }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], grouping: [{ type: i0.Input, args: [{ isSignal: true, alias: "grouping", required: false }] }], groupSummary: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupSummary", required: false }] }], excludeToolNames: [{ type: i0.Input, args: [{ isSignal: true, alias: "excludeToolNames", required: false }] }], templates: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => ChatToolCallTemplateDirective), { isSignal: true }] }] } });
4710
4914
 
4711
4915
  // SPDX-License-Identifier: MIT
4712
4916
  const CHAT_GENERATIVE_UI_STYLES = `
4713
4917
  :host {
4714
4918
  display: block;
4715
- color: var(--ngaf-chat-text);
4716
- font-size: var(--ngaf-chat-font-size);
4717
- line-height: var(--ngaf-chat-line-height);
4919
+ color: var(--tplane-chat-text);
4920
+ font-size: var(--tplane-chat-font-size);
4921
+ line-height: var(--tplane-chat-line-height);
4718
4922
  }
4719
4923
  .chat-generative-ui__error {
4720
- color: var(--ngaf-chat-error-text);
4721
- background: var(--ngaf-chat-error-bg);
4722
- border: 1px solid var(--ngaf-chat-error-border);
4723
- border-radius: var(--ngaf-chat-radius-card);
4924
+ color: var(--tplane-chat-error-text);
4925
+ background: var(--tplane-chat-error-bg);
4926
+ border: 1px solid var(--tplane-chat-error-border);
4927
+ border-radius: var(--tplane-chat-radius-card);
4724
4928
  padding: 8px 12px;
4725
- font-size: var(--ngaf-chat-font-size-sm);
4929
+ font-size: var(--tplane-chat-font-size-sm);
4726
4930
  }
4727
4931
  `;
4728
4932
 
@@ -4842,7 +5046,7 @@ class ChatGenerativeUiComponent {
4842
5046
  (events)="events.emit($event)"
4843
5047
  />
4844
5048
  }
4845
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block;color:var(--ngaf-chat-text);font-size:var(--ngaf-chat-font-size);line-height:var(--ngaf-chat-line-height)}.chat-generative-ui__error{color:var(--ngaf-chat-error-text);background:var(--ngaf-chat-error-bg);border:1px solid var(--ngaf-chat-error-border);border-radius:var(--ngaf-chat-radius-card);padding:8px 12px;font-size:var(--ngaf-chat-font-size-sm)}\n"], dependencies: [{ kind: "component", type: RenderSpecComponent, selector: "render-spec", inputs: ["spec", "registry", "store", "functions", "handlers", "loading"], outputs: ["events"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5049
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block;color:var(--tplane-chat-text);font-size:var(--tplane-chat-font-size);line-height:var(--tplane-chat-line-height)}.chat-generative-ui__error{color:var(--tplane-chat-error-text);background:var(--tplane-chat-error-bg);border:1px solid var(--tplane-chat-error-border);border-radius:var(--tplane-chat-radius-card);padding:8px 12px;font-size:var(--tplane-chat-font-size-sm)}\n"], dependencies: [{ kind: "component", type: RenderSpecComponent, selector: "render-spec", inputs: ["spec", "registry", "store", "functions", "handlers", "loading"], outputs: ["events"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4846
5050
  }
4847
5051
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatGenerativeUiComponent, decorators: [{
4848
5052
  type: Component,
@@ -4857,7 +5061,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
4857
5061
  (events)="events.emit($event)"
4858
5062
  />
4859
5063
  }
4860
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block;color:var(--ngaf-chat-text);font-size:var(--ngaf-chat-font-size);line-height:var(--ngaf-chat-line-height)}.chat-generative-ui__error{color:var(--ngaf-chat-error-text);background:var(--ngaf-chat-error-bg);border:1px solid var(--ngaf-chat-error-border);border-radius:var(--ngaf-chat-radius-card);padding:8px 12px;font-size:var(--ngaf-chat-font-size-sm)}\n"] }]
5064
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block;color:var(--tplane-chat-text);font-size:var(--tplane-chat-font-size);line-height:var(--tplane-chat-line-height)}.chat-generative-ui__error{color:var(--tplane-chat-error-text);background:var(--tplane-chat-error-bg);border:1px solid var(--tplane-chat-error-border);border-radius:var(--tplane-chat-radius-card);padding:8px 12px;font-size:var(--tplane-chat-font-size-sm)}\n"] }]
4861
5065
  }], ctorParameters: () => [], propDecorators: { spec: [{ type: i0.Input, args: [{ isSignal: true, alias: "spec", required: false }] }], registry: [{ type: i0.Input, args: [{ isSignal: true, alias: "registry", required: false }] }], store: [{ type: i0.Input, args: [{ isSignal: true, alias: "store", required: false }] }], handlers: [{ type: i0.Input, args: [{ isSignal: true, alias: "handlers", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], events: [{ type: i0.Output, args: ["events"] }] } });
4862
5066
 
4863
5067
  // libs/chat/src/lib/primitives/chat-tool-views/chat-tool-views.component.ts
@@ -4998,7 +5202,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
4998
5202
 
4999
5203
  // SPDX-License-Identifier: MIT
5000
5204
  const CHAT_THREAD_LIST_STYLES = `
5001
- :host { display: block; padding: var(--ngaf-chat-space-2); }
5205
+ :host { display: block; padding: var(--tplane-chat-space-2); }
5002
5206
  .chat-thread-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 2px; }
5003
5207
  .chat-thread-list__item {
5004
5208
  display: flex;
@@ -5006,10 +5210,10 @@ const CHAT_THREAD_LIST_STYLES = `
5006
5210
  gap: 2px;
5007
5211
  min-height: 36px;
5008
5212
  padding: 8px 12px;
5009
- border-radius: var(--ngaf-chat-radius-button);
5213
+ border-radius: var(--tplane-chat-radius-button);
5010
5214
  cursor: pointer;
5011
- color: var(--ngaf-chat-text);
5012
- font-size: var(--ngaf-chat-font-size-sm);
5215
+ color: var(--tplane-chat-text);
5216
+ font-size: var(--tplane-chat-font-size-sm);
5013
5217
  background: transparent;
5014
5218
  border: 0;
5015
5219
  text-align: left;
@@ -5017,9 +5221,9 @@ const CHAT_THREAD_LIST_STYLES = `
5017
5221
  box-sizing: border-box;
5018
5222
  transition: background-color 150ms ease;
5019
5223
  }
5020
- .chat-thread-list__item:hover { background: color-mix(in srgb, var(--ngaf-chat-text) 5%, transparent); }
5224
+ .chat-thread-list__item:hover { background: color-mix(in srgb, var(--tplane-chat-text) 5%, transparent); }
5021
5225
  .chat-thread-list__item[data-active="true"] {
5022
- background: var(--ngaf-chat-surface-alt);
5226
+ background: var(--tplane-chat-surface-alt);
5023
5227
  font-weight: 500;
5024
5228
  }
5025
5229
  .chat-thread-list__item-title {
@@ -5030,24 +5234,24 @@ const CHAT_THREAD_LIST_STYLES = `
5030
5234
  }
5031
5235
  .chat-thread-list__item-time {
5032
5236
  font-size: 11px;
5033
- color: var(--ngaf-chat-text-muted);
5237
+ color: var(--tplane-chat-text-muted);
5034
5238
  display: block;
5035
5239
  }
5036
5240
  .chat-thread-list__new {
5037
5241
  display: block;
5038
5242
  width: 100%;
5039
5243
  height: 36px;
5040
- margin-bottom: var(--ngaf-chat-space-2);
5041
- border: 1px dashed var(--ngaf-chat-separator);
5042
- border-radius: var(--ngaf-chat-radius-button);
5244
+ margin-bottom: var(--tplane-chat-space-2);
5245
+ border: 1px dashed var(--tplane-chat-separator);
5246
+ border-radius: var(--tplane-chat-radius-button);
5043
5247
  background: transparent;
5044
- color: var(--ngaf-chat-primary);
5248
+ color: var(--tplane-chat-primary);
5045
5249
  cursor: pointer;
5046
- font-size: var(--ngaf-chat-font-size-sm);
5250
+ font-size: var(--tplane-chat-font-size-sm);
5047
5251
  box-sizing: border-box;
5048
5252
  transition: background 150ms ease;
5049
5253
  }
5050
- .chat-thread-list__new:hover { background: var(--ngaf-chat-surface-alt); }
5254
+ .chat-thread-list__new:hover { background: var(--tplane-chat-surface-alt); }
5051
5255
  .chat-thread-list__item-wrap {
5052
5256
  position: relative;
5053
5257
  display: flex;
@@ -5064,7 +5268,7 @@ const CHAT_THREAD_LIST_STYLES = `
5064
5268
  height: 28px;
5065
5269
  border: 0;
5066
5270
  background: transparent;
5067
- color: var(--ngaf-chat-text-muted);
5271
+ color: var(--tplane-chat-text-muted);
5068
5272
  border-radius: 4px;
5069
5273
  cursor: pointer;
5070
5274
  opacity: 0;
@@ -5078,12 +5282,12 @@ const CHAT_THREAD_LIST_STYLES = `
5078
5282
  opacity: 1;
5079
5283
  }
5080
5284
  .chat-thread-list__kebab:hover {
5081
- background: var(--ngaf-chat-surface-alt);
5082
- color: var(--ngaf-chat-text);
5285
+ background: var(--tplane-chat-surface-alt);
5286
+ color: var(--tplane-chat-text);
5083
5287
  }
5084
5288
  .chat-thread-list__kebab:focus-visible {
5085
5289
  opacity: 1;
5086
- outline: 2px solid var(--ngaf-chat-primary);
5290
+ outline: 2px solid var(--tplane-chat-primary);
5087
5291
  outline-offset: 2px;
5088
5292
  }
5089
5293
  .chat-thread-list__initial {
@@ -5093,8 +5297,8 @@ const CHAT_THREAD_LIST_STYLES = `
5093
5297
  border-radius: 50%;
5094
5298
  align-items: center;
5095
5299
  justify-content: center;
5096
- background: var(--ngaf-chat-surface-alt);
5097
- color: var(--ngaf-chat-text);
5300
+ background: var(--tplane-chat-surface-alt);
5301
+ color: var(--tplane-chat-text);
5098
5302
  font-weight: 500;
5099
5303
  font-size: 13px;
5100
5304
  flex-shrink: 0;
@@ -5103,18 +5307,18 @@ const CHAT_THREAD_LIST_STYLES = `
5103
5307
  width: 11px;
5104
5308
  height: 11px;
5105
5309
  margin-right: 4px;
5106
- color: var(--ngaf-chat-text-muted);
5310
+ color: var(--tplane-chat-text-muted);
5107
5311
  vertical-align: -1px;
5108
5312
  display: inline-block;
5109
5313
  }
5110
5314
  .chat-thread-list__edit {
5111
5315
  flex: 1 1 auto;
5112
- border: 1px solid var(--ngaf-chat-primary);
5113
- border-radius: var(--ngaf-chat-radius-button);
5114
- background: var(--ngaf-chat-bg);
5115
- color: var(--ngaf-chat-text);
5316
+ border: 1px solid var(--tplane-chat-primary);
5317
+ border-radius: var(--tplane-chat-radius-button);
5318
+ background: var(--tplane-chat-bg);
5319
+ color: var(--tplane-chat-text);
5116
5320
  font: inherit;
5117
- font-size: var(--ngaf-chat-font-size-sm);
5321
+ font-size: var(--tplane-chat-font-size-sm);
5118
5322
  padding: 6px 10px;
5119
5323
  min-height: 36px;
5120
5324
  outline: none;
@@ -5145,7 +5349,7 @@ const CHAT_THREAD_LIST_STYLES = `
5145
5349
  display: inline-flex;
5146
5350
  align-items: center;
5147
5351
  justify-content: center;
5148
- color: var(--ngaf-chat-text-muted);
5352
+ color: var(--tplane-chat-text-muted);
5149
5353
  font-size: 11px;
5150
5354
  line-height: 1;
5151
5355
  letter-spacing: -1px;
@@ -5176,7 +5380,7 @@ const CHAT_THREAD_LIST_STYLES = `
5176
5380
  left: 4px;
5177
5381
  right: 4px;
5178
5382
  height: 2px;
5179
- background: var(--ngaf-chat-primary);
5383
+ background: var(--tplane-chat-primary);
5180
5384
  border-radius: 1px;
5181
5385
  pointer-events: none;
5182
5386
  }
@@ -5744,7 +5948,7 @@ class ChatThreadListComponent {
5744
5948
  (confirmed)="performDelete()"
5745
5949
  (cancelled)="confirmDeleteId.set(null)"
5746
5950
  />
5747
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block;padding:var(--ngaf-chat-space-2)}.chat-thread-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:2px}.chat-thread-list__item{display:flex;flex-direction:column;gap:2px;min-height:36px;padding:8px 12px;border-radius:var(--ngaf-chat-radius-button);cursor:pointer;color:var(--ngaf-chat-text);font-size:var(--ngaf-chat-font-size-sm);background:transparent;border:0;text-align:left;width:100%;box-sizing:border-box;transition:background-color .15s ease}.chat-thread-list__item:hover{background:color-mix(in srgb,var(--ngaf-chat-text) 5%,transparent)}.chat-thread-list__item[data-active=true]{background:var(--ngaf-chat-surface-alt);font-weight:500}.chat-thread-list__item-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}.chat-thread-list__item-time{font-size:11px;color:var(--ngaf-chat-text-muted);display:block}.chat-thread-list__new{display:block;width:100%;height:36px;margin-bottom:var(--ngaf-chat-space-2);border:1px dashed var(--ngaf-chat-separator);border-radius:var(--ngaf-chat-radius-button);background:transparent;color:var(--ngaf-chat-primary);cursor:pointer;font-size:var(--ngaf-chat-font-size-sm);box-sizing:border-box;transition:background .15s ease}.chat-thread-list__new:hover{background:var(--ngaf-chat-surface-alt)}.chat-thread-list__item-wrap{position:relative;display:flex;align-items:center;gap:4px}.chat-thread-list__item-wrap .chat-thread-list__item{flex:1 1 auto;min-width:0}.chat-thread-list__kebab{flex-shrink:0;width:28px;height:28px;border:0;background:transparent;color:var(--ngaf-chat-text-muted);border-radius:4px;cursor:pointer;opacity:0;transition:opacity .1s ease;padding:0;line-height:1;font-size:18px}.chat-thread-list__item-wrap:hover .chat-thread-list__kebab,.chat-thread-list__item-wrap:focus-within .chat-thread-list__kebab{opacity:1}.chat-thread-list__kebab:hover{background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text)}.chat-thread-list__kebab:focus-visible{opacity:1;outline:2px solid var(--ngaf-chat-primary);outline-offset:2px}.chat-thread-list__initial{display:none;width:28px;height:28px;border-radius:50%;align-items:center;justify-content:center;background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text);font-weight:500;font-size:13px;flex-shrink:0}.chat-thread-list__item-pin{width:11px;height:11px;margin-right:4px;color:var(--ngaf-chat-text-muted);vertical-align:-1px;display:inline-block}.chat-thread-list__edit{flex:1 1 auto;border:1px solid var(--ngaf-chat-primary);border-radius:var(--ngaf-chat-radius-button);background:var(--ngaf-chat-bg);color:var(--ngaf-chat-text);font:inherit;font-size:var(--ngaf-chat-font-size-sm);padding:6px 10px;min-height:36px;outline:none;box-sizing:border-box}.chat-thread-list__pin-slot{position:relative;display:inline-flex;align-items:center;justify-content:center;width:13px;height:13px;margin-right:4px;flex-shrink:0;vertical-align:-1px}.chat-thread-list__pin-slot .chat-thread-list__item-pin{position:absolute;inset:0;width:13px;height:13px;opacity:1;transition:opacity .1s ease}.chat-thread-list__pin-slot .chat-thread-list__grip{position:absolute;inset:0;display:inline-flex;align-items:center;justify-content:center;color:var(--ngaf-chat-text-muted);font-size:11px;line-height:1;letter-spacing:-1px;opacity:0;transition:opacity .1s ease;-webkit-user-select:none;user-select:none;pointer-events:none}.chat-thread-list__item-wrap:hover .chat-thread-list__pin-slot .chat-thread-list__item-pin,.chat-thread-list__item-wrap:focus-within .chat-thread-list__pin-slot .chat-thread-list__item-pin{opacity:0}.chat-thread-list__item-wrap:hover .chat-thread-list__pin-slot .chat-thread-list__grip,.chat-thread-list__item-wrap:focus-within .chat-thread-list__pin-slot .chat-thread-list__grip{opacity:1}.chat-thread-list__item-wrap[draggable=true]{cursor:grab}.chat-thread-list__item-wrap[draggable=true]:active{cursor:grabbing}.chat-thread-list__item-wrap[data-dragging=true]{opacity:.4}.chat-thread-list__item-wrap[data-drop-position=before]:before,.chat-thread-list__item-wrap[data-drop-position=after]:after{content:\"\";position:absolute;left:4px;right:4px;height:2px;background:var(--ngaf-chat-primary);border-radius:1px;pointer-events:none}.chat-thread-list__item-wrap[data-drop-position=before]:before{top:-1px}.chat-thread-list__item-wrap[data-drop-position=after]:after{bottom:-1px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ChatOverflowMenuComponent, selector: "chat-overflow-menu", inputs: ["open", "items", "anchor", "anchorPos"], outputs: ["itemSelected", "closed"] }, { kind: "component", type: ChatConfirmDialogComponent, selector: "chat-confirm-dialog", inputs: ["open", "title", "body", "confirmLabel", "cancelLabel", "tone"], outputs: ["confirmed", "cancelled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5951
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block;padding:var(--tplane-chat-space-2)}.chat-thread-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:2px}.chat-thread-list__item{display:flex;flex-direction:column;gap:2px;min-height:36px;padding:8px 12px;border-radius:var(--tplane-chat-radius-button);cursor:pointer;color:var(--tplane-chat-text);font-size:var(--tplane-chat-font-size-sm);background:transparent;border:0;text-align:left;width:100%;box-sizing:border-box;transition:background-color .15s ease}.chat-thread-list__item:hover{background:color-mix(in srgb,var(--tplane-chat-text) 5%,transparent)}.chat-thread-list__item[data-active=true]{background:var(--tplane-chat-surface-alt);font-weight:500}.chat-thread-list__item-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}.chat-thread-list__item-time{font-size:11px;color:var(--tplane-chat-text-muted);display:block}.chat-thread-list__new{display:block;width:100%;height:36px;margin-bottom:var(--tplane-chat-space-2);border:1px dashed var(--tplane-chat-separator);border-radius:var(--tplane-chat-radius-button);background:transparent;color:var(--tplane-chat-primary);cursor:pointer;font-size:var(--tplane-chat-font-size-sm);box-sizing:border-box;transition:background .15s ease}.chat-thread-list__new:hover{background:var(--tplane-chat-surface-alt)}.chat-thread-list__item-wrap{position:relative;display:flex;align-items:center;gap:4px}.chat-thread-list__item-wrap .chat-thread-list__item{flex:1 1 auto;min-width:0}.chat-thread-list__kebab{flex-shrink:0;width:28px;height:28px;border:0;background:transparent;color:var(--tplane-chat-text-muted);border-radius:4px;cursor:pointer;opacity:0;transition:opacity .1s ease;padding:0;line-height:1;font-size:18px}.chat-thread-list__item-wrap:hover .chat-thread-list__kebab,.chat-thread-list__item-wrap:focus-within .chat-thread-list__kebab{opacity:1}.chat-thread-list__kebab:hover{background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text)}.chat-thread-list__kebab:focus-visible{opacity:1;outline:2px solid var(--tplane-chat-primary);outline-offset:2px}.chat-thread-list__initial{display:none;width:28px;height:28px;border-radius:50%;align-items:center;justify-content:center;background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text);font-weight:500;font-size:13px;flex-shrink:0}.chat-thread-list__item-pin{width:11px;height:11px;margin-right:4px;color:var(--tplane-chat-text-muted);vertical-align:-1px;display:inline-block}.chat-thread-list__edit{flex:1 1 auto;border:1px solid var(--tplane-chat-primary);border-radius:var(--tplane-chat-radius-button);background:var(--tplane-chat-bg);color:var(--tplane-chat-text);font:inherit;font-size:var(--tplane-chat-font-size-sm);padding:6px 10px;min-height:36px;outline:none;box-sizing:border-box}.chat-thread-list__pin-slot{position:relative;display:inline-flex;align-items:center;justify-content:center;width:13px;height:13px;margin-right:4px;flex-shrink:0;vertical-align:-1px}.chat-thread-list__pin-slot .chat-thread-list__item-pin{position:absolute;inset:0;width:13px;height:13px;opacity:1;transition:opacity .1s ease}.chat-thread-list__pin-slot .chat-thread-list__grip{position:absolute;inset:0;display:inline-flex;align-items:center;justify-content:center;color:var(--tplane-chat-text-muted);font-size:11px;line-height:1;letter-spacing:-1px;opacity:0;transition:opacity .1s ease;-webkit-user-select:none;user-select:none;pointer-events:none}.chat-thread-list__item-wrap:hover .chat-thread-list__pin-slot .chat-thread-list__item-pin,.chat-thread-list__item-wrap:focus-within .chat-thread-list__pin-slot .chat-thread-list__item-pin{opacity:0}.chat-thread-list__item-wrap:hover .chat-thread-list__pin-slot .chat-thread-list__grip,.chat-thread-list__item-wrap:focus-within .chat-thread-list__pin-slot .chat-thread-list__grip{opacity:1}.chat-thread-list__item-wrap[draggable=true]{cursor:grab}.chat-thread-list__item-wrap[draggable=true]:active{cursor:grabbing}.chat-thread-list__item-wrap[data-dragging=true]{opacity:.4}.chat-thread-list__item-wrap[data-drop-position=before]:before,.chat-thread-list__item-wrap[data-drop-position=after]:after{content:\"\";position:absolute;left:4px;right:4px;height:2px;background:var(--tplane-chat-primary);border-radius:1px;pointer-events:none}.chat-thread-list__item-wrap[data-drop-position=before]:before{top:-1px}.chat-thread-list__item-wrap[data-drop-position=after]:after{bottom:-1px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ChatOverflowMenuComponent, selector: "chat-overflow-menu", inputs: ["open", "items", "anchor", "anchorPos"], outputs: ["itemSelected", "closed"] }, { kind: "component", type: ChatConfirmDialogComponent, selector: "chat-confirm-dialog", inputs: ["open", "title", "body", "confirmLabel", "cancelLabel", "tone"], outputs: ["confirmed", "cancelled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5748
5952
  }
5749
5953
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatThreadListComponent, decorators: [{
5750
5954
  type: Component,
@@ -5854,13 +6058,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
5854
6058
  (confirmed)="performDelete()"
5855
6059
  (cancelled)="confirmDeleteId.set(null)"
5856
6060
  />
5857
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block;padding:var(--ngaf-chat-space-2)}.chat-thread-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:2px}.chat-thread-list__item{display:flex;flex-direction:column;gap:2px;min-height:36px;padding:8px 12px;border-radius:var(--ngaf-chat-radius-button);cursor:pointer;color:var(--ngaf-chat-text);font-size:var(--ngaf-chat-font-size-sm);background:transparent;border:0;text-align:left;width:100%;box-sizing:border-box;transition:background-color .15s ease}.chat-thread-list__item:hover{background:color-mix(in srgb,var(--ngaf-chat-text) 5%,transparent)}.chat-thread-list__item[data-active=true]{background:var(--ngaf-chat-surface-alt);font-weight:500}.chat-thread-list__item-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}.chat-thread-list__item-time{font-size:11px;color:var(--ngaf-chat-text-muted);display:block}.chat-thread-list__new{display:block;width:100%;height:36px;margin-bottom:var(--ngaf-chat-space-2);border:1px dashed var(--ngaf-chat-separator);border-radius:var(--ngaf-chat-radius-button);background:transparent;color:var(--ngaf-chat-primary);cursor:pointer;font-size:var(--ngaf-chat-font-size-sm);box-sizing:border-box;transition:background .15s ease}.chat-thread-list__new:hover{background:var(--ngaf-chat-surface-alt)}.chat-thread-list__item-wrap{position:relative;display:flex;align-items:center;gap:4px}.chat-thread-list__item-wrap .chat-thread-list__item{flex:1 1 auto;min-width:0}.chat-thread-list__kebab{flex-shrink:0;width:28px;height:28px;border:0;background:transparent;color:var(--ngaf-chat-text-muted);border-radius:4px;cursor:pointer;opacity:0;transition:opacity .1s ease;padding:0;line-height:1;font-size:18px}.chat-thread-list__item-wrap:hover .chat-thread-list__kebab,.chat-thread-list__item-wrap:focus-within .chat-thread-list__kebab{opacity:1}.chat-thread-list__kebab:hover{background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text)}.chat-thread-list__kebab:focus-visible{opacity:1;outline:2px solid var(--ngaf-chat-primary);outline-offset:2px}.chat-thread-list__initial{display:none;width:28px;height:28px;border-radius:50%;align-items:center;justify-content:center;background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text);font-weight:500;font-size:13px;flex-shrink:0}.chat-thread-list__item-pin{width:11px;height:11px;margin-right:4px;color:var(--ngaf-chat-text-muted);vertical-align:-1px;display:inline-block}.chat-thread-list__edit{flex:1 1 auto;border:1px solid var(--ngaf-chat-primary);border-radius:var(--ngaf-chat-radius-button);background:var(--ngaf-chat-bg);color:var(--ngaf-chat-text);font:inherit;font-size:var(--ngaf-chat-font-size-sm);padding:6px 10px;min-height:36px;outline:none;box-sizing:border-box}.chat-thread-list__pin-slot{position:relative;display:inline-flex;align-items:center;justify-content:center;width:13px;height:13px;margin-right:4px;flex-shrink:0;vertical-align:-1px}.chat-thread-list__pin-slot .chat-thread-list__item-pin{position:absolute;inset:0;width:13px;height:13px;opacity:1;transition:opacity .1s ease}.chat-thread-list__pin-slot .chat-thread-list__grip{position:absolute;inset:0;display:inline-flex;align-items:center;justify-content:center;color:var(--ngaf-chat-text-muted);font-size:11px;line-height:1;letter-spacing:-1px;opacity:0;transition:opacity .1s ease;-webkit-user-select:none;user-select:none;pointer-events:none}.chat-thread-list__item-wrap:hover .chat-thread-list__pin-slot .chat-thread-list__item-pin,.chat-thread-list__item-wrap:focus-within .chat-thread-list__pin-slot .chat-thread-list__item-pin{opacity:0}.chat-thread-list__item-wrap:hover .chat-thread-list__pin-slot .chat-thread-list__grip,.chat-thread-list__item-wrap:focus-within .chat-thread-list__pin-slot .chat-thread-list__grip{opacity:1}.chat-thread-list__item-wrap[draggable=true]{cursor:grab}.chat-thread-list__item-wrap[draggable=true]:active{cursor:grabbing}.chat-thread-list__item-wrap[data-dragging=true]{opacity:.4}.chat-thread-list__item-wrap[data-drop-position=before]:before,.chat-thread-list__item-wrap[data-drop-position=after]:after{content:\"\";position:absolute;left:4px;right:4px;height:2px;background:var(--ngaf-chat-primary);border-radius:1px;pointer-events:none}.chat-thread-list__item-wrap[data-drop-position=before]:before{top:-1px}.chat-thread-list__item-wrap[data-drop-position=after]:after{bottom:-1px}\n"] }]
6061
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block;padding:var(--tplane-chat-space-2)}.chat-thread-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:2px}.chat-thread-list__item{display:flex;flex-direction:column;gap:2px;min-height:36px;padding:8px 12px;border-radius:var(--tplane-chat-radius-button);cursor:pointer;color:var(--tplane-chat-text);font-size:var(--tplane-chat-font-size-sm);background:transparent;border:0;text-align:left;width:100%;box-sizing:border-box;transition:background-color .15s ease}.chat-thread-list__item:hover{background:color-mix(in srgb,var(--tplane-chat-text) 5%,transparent)}.chat-thread-list__item[data-active=true]{background:var(--tplane-chat-surface-alt);font-weight:500}.chat-thread-list__item-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}.chat-thread-list__item-time{font-size:11px;color:var(--tplane-chat-text-muted);display:block}.chat-thread-list__new{display:block;width:100%;height:36px;margin-bottom:var(--tplane-chat-space-2);border:1px dashed var(--tplane-chat-separator);border-radius:var(--tplane-chat-radius-button);background:transparent;color:var(--tplane-chat-primary);cursor:pointer;font-size:var(--tplane-chat-font-size-sm);box-sizing:border-box;transition:background .15s ease}.chat-thread-list__new:hover{background:var(--tplane-chat-surface-alt)}.chat-thread-list__item-wrap{position:relative;display:flex;align-items:center;gap:4px}.chat-thread-list__item-wrap .chat-thread-list__item{flex:1 1 auto;min-width:0}.chat-thread-list__kebab{flex-shrink:0;width:28px;height:28px;border:0;background:transparent;color:var(--tplane-chat-text-muted);border-radius:4px;cursor:pointer;opacity:0;transition:opacity .1s ease;padding:0;line-height:1;font-size:18px}.chat-thread-list__item-wrap:hover .chat-thread-list__kebab,.chat-thread-list__item-wrap:focus-within .chat-thread-list__kebab{opacity:1}.chat-thread-list__kebab:hover{background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text)}.chat-thread-list__kebab:focus-visible{opacity:1;outline:2px solid var(--tplane-chat-primary);outline-offset:2px}.chat-thread-list__initial{display:none;width:28px;height:28px;border-radius:50%;align-items:center;justify-content:center;background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text);font-weight:500;font-size:13px;flex-shrink:0}.chat-thread-list__item-pin{width:11px;height:11px;margin-right:4px;color:var(--tplane-chat-text-muted);vertical-align:-1px;display:inline-block}.chat-thread-list__edit{flex:1 1 auto;border:1px solid var(--tplane-chat-primary);border-radius:var(--tplane-chat-radius-button);background:var(--tplane-chat-bg);color:var(--tplane-chat-text);font:inherit;font-size:var(--tplane-chat-font-size-sm);padding:6px 10px;min-height:36px;outline:none;box-sizing:border-box}.chat-thread-list__pin-slot{position:relative;display:inline-flex;align-items:center;justify-content:center;width:13px;height:13px;margin-right:4px;flex-shrink:0;vertical-align:-1px}.chat-thread-list__pin-slot .chat-thread-list__item-pin{position:absolute;inset:0;width:13px;height:13px;opacity:1;transition:opacity .1s ease}.chat-thread-list__pin-slot .chat-thread-list__grip{position:absolute;inset:0;display:inline-flex;align-items:center;justify-content:center;color:var(--tplane-chat-text-muted);font-size:11px;line-height:1;letter-spacing:-1px;opacity:0;transition:opacity .1s ease;-webkit-user-select:none;user-select:none;pointer-events:none}.chat-thread-list__item-wrap:hover .chat-thread-list__pin-slot .chat-thread-list__item-pin,.chat-thread-list__item-wrap:focus-within .chat-thread-list__pin-slot .chat-thread-list__item-pin{opacity:0}.chat-thread-list__item-wrap:hover .chat-thread-list__pin-slot .chat-thread-list__grip,.chat-thread-list__item-wrap:focus-within .chat-thread-list__pin-slot .chat-thread-list__grip{opacity:1}.chat-thread-list__item-wrap[draggable=true]{cursor:grab}.chat-thread-list__item-wrap[draggable=true]:active{cursor:grabbing}.chat-thread-list__item-wrap[data-dragging=true]{opacity:.4}.chat-thread-list__item-wrap[data-drop-position=before]:before,.chat-thread-list__item-wrap[data-drop-position=after]:after{content:\"\";position:absolute;left:4px;right:4px;height:2px;background:var(--tplane-chat-primary);border-radius:1px;pointer-events:none}.chat-thread-list__item-wrap[data-drop-position=before]:before{top:-1px}.chat-thread-list__item-wrap[data-drop-position=after]:after{bottom:-1px}\n"] }]
5858
6062
  }], propDecorators: { threads: [{ type: i0.Input, args: [{ isSignal: true, alias: "threads", required: true }] }], activeThreadId: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeThreadId", required: false }] }], showNewThreadButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showNewThreadButton", required: false }] }], actions: [{ type: i0.Input, args: [{ isSignal: true, alias: "actions", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], projects: [{ type: i0.Input, args: [{ isSignal: true, alias: "projects", required: false }] }], threadSelected: [{ type: i0.Output, args: ["threadSelected"] }], newThreadRequested: [{ type: i0.Output, args: ["newThreadRequested"] }], templateRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => TemplateRef), { isSignal: true }] }], editInput: [{ type: i0.ViewChild, args: ['editInput', { isSignal: true }] }] } });
5859
6063
 
5860
6064
  // libs/chat/src/lib/styles/chat-project-list.styles.ts
5861
6065
  // SPDX-License-Identifier: MIT
5862
6066
  const CHAT_PROJECT_LIST_STYLES = `
5863
- :host { display: block; padding: var(--ngaf-chat-space-2); }
6067
+ :host { display: block; padding: var(--tplane-chat-space-2); }
5864
6068
  .chat-project-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 2px; }
5865
6069
  .chat-project-list__item-wrap {
5866
6070
  position: relative;
@@ -5873,10 +6077,10 @@ const CHAT_PROJECT_LIST_STYLES = `
5873
6077
  min-width: 0;
5874
6078
  min-height: 32px;
5875
6079
  padding: 6px 12px;
5876
- border-radius: var(--ngaf-chat-radius-button);
6080
+ border-radius: var(--tplane-chat-radius-button);
5877
6081
  cursor: pointer;
5878
- color: var(--ngaf-chat-text);
5879
- font-size: var(--ngaf-chat-font-size-sm);
6082
+ color: var(--tplane-chat-text);
6083
+ font-size: var(--tplane-chat-font-size-sm);
5880
6084
  background: transparent;
5881
6085
  border: 0;
5882
6086
  text-align: left;
@@ -5886,9 +6090,9 @@ const CHAT_PROJECT_LIST_STYLES = `
5886
6090
  text-overflow: ellipsis;
5887
6091
  white-space: nowrap;
5888
6092
  }
5889
- .chat-project-list__item:hover { background: color-mix(in srgb, var(--ngaf-chat-text) 5%, transparent); }
6093
+ .chat-project-list__item:hover { background: color-mix(in srgb, var(--tplane-chat-text) 5%, transparent); }
5890
6094
  .chat-project-list__item[data-active="true"] {
5891
- background: var(--ngaf-chat-surface-alt);
6095
+ background: var(--tplane-chat-surface-alt);
5892
6096
  font-weight: 500;
5893
6097
  }
5894
6098
  .chat-project-list__kebab {
@@ -5897,7 +6101,7 @@ const CHAT_PROJECT_LIST_STYLES = `
5897
6101
  height: 28px;
5898
6102
  border: 0;
5899
6103
  background: transparent;
5900
- color: var(--ngaf-chat-text-muted);
6104
+ color: var(--tplane-chat-text-muted);
5901
6105
  border-radius: 4px;
5902
6106
  cursor: pointer;
5903
6107
  opacity: 0;
@@ -5911,35 +6115,35 @@ const CHAT_PROJECT_LIST_STYLES = `
5911
6115
  opacity: 1;
5912
6116
  }
5913
6117
  .chat-project-list__kebab:hover {
5914
- background: var(--ngaf-chat-surface-alt);
5915
- color: var(--ngaf-chat-text);
6118
+ background: var(--tplane-chat-surface-alt);
6119
+ color: var(--tplane-chat-text);
5916
6120
  }
5917
6121
  .chat-project-list__kebab:focus-visible {
5918
6122
  opacity: 1;
5919
- outline: 2px solid var(--ngaf-chat-primary);
6123
+ outline: 2px solid var(--tplane-chat-primary);
5920
6124
  outline-offset: 2px;
5921
6125
  }
5922
6126
  .chat-project-list__edit {
5923
6127
  flex: 1 1 auto;
5924
- border: 1px solid var(--ngaf-chat-primary);
5925
- border-radius: var(--ngaf-chat-radius-button);
5926
- background: var(--ngaf-chat-bg);
5927
- color: var(--ngaf-chat-text);
6128
+ border: 1px solid var(--tplane-chat-primary);
6129
+ border-radius: var(--tplane-chat-radius-button);
6130
+ background: var(--tplane-chat-bg);
6131
+ color: var(--tplane-chat-text);
5928
6132
  font: inherit;
5929
- font-size: var(--ngaf-chat-font-size-sm);
6133
+ font-size: var(--tplane-chat-font-size-sm);
5930
6134
  padding: 6px 10px;
5931
6135
  min-height: 32px;
5932
6136
  outline: none;
5933
6137
  box-sizing: border-box;
5934
6138
  }
5935
6139
  .chat-project-list__new {
5936
- background: var(--ngaf-chat-surface-alt);
5937
- color: var(--ngaf-chat-text);
6140
+ background: var(--tplane-chat-surface-alt);
6141
+ color: var(--tplane-chat-text);
5938
6142
  border: 0;
5939
6143
  padding: 10px 16px;
5940
6144
  border-radius: 8px;
5941
6145
  font-family: inherit;
5942
- font-size: var(--ngaf-chat-font-size-sm);
6146
+ font-size: var(--tplane-chat-font-size-sm);
5943
6147
  font-weight: 400;
5944
6148
  display: flex;
5945
6149
  align-items: center;
@@ -5948,8 +6152,8 @@ const CHAT_PROJECT_LIST_STYLES = `
5948
6152
  width: 100%;
5949
6153
  }
5950
6154
  .chat-project-list__new:hover {
5951
- background: color-mix(in srgb, var(--ngaf-chat-text) 8%, var(--ngaf-chat-surface-alt));
5952
- color: var(--ngaf-chat-text);
6155
+ background: color-mix(in srgb, var(--tplane-chat-text) 8%, var(--tplane-chat-surface-alt));
6156
+ color: var(--tplane-chat-text);
5953
6157
  }
5954
6158
  `;
5955
6159
 
@@ -6189,7 +6393,7 @@ class ChatProjectListComponent {
6189
6393
  (confirmed)="performDelete()"
6190
6394
  (cancelled)="confirmDeleteId.set(null)"
6191
6395
  />
6192
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block;padding:var(--ngaf-chat-space-2)}.chat-project-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:2px}.chat-project-list__item-wrap{position:relative;display:flex;align-items:center;gap:4px}.chat-project-list__item{flex:1 1 auto;min-width:0;min-height:32px;padding:6px 12px;border-radius:var(--ngaf-chat-radius-button);cursor:pointer;color:var(--ngaf-chat-text);font-size:var(--ngaf-chat-font-size-sm);background:transparent;border:0;text-align:left;box-sizing:border-box;transition:background-color .15s ease;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chat-project-list__item:hover{background:color-mix(in srgb,var(--ngaf-chat-text) 5%,transparent)}.chat-project-list__item[data-active=true]{background:var(--ngaf-chat-surface-alt);font-weight:500}.chat-project-list__kebab{flex-shrink:0;width:28px;height:28px;border:0;background:transparent;color:var(--ngaf-chat-text-muted);border-radius:4px;cursor:pointer;opacity:0;transition:opacity .1s ease;padding:0;line-height:1;font-size:18px}.chat-project-list__item-wrap:hover .chat-project-list__kebab,.chat-project-list__item-wrap:focus-within .chat-project-list__kebab{opacity:1}.chat-project-list__kebab:hover{background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text)}.chat-project-list__kebab:focus-visible{opacity:1;outline:2px solid var(--ngaf-chat-primary);outline-offset:2px}.chat-project-list__edit{flex:1 1 auto;border:1px solid var(--ngaf-chat-primary);border-radius:var(--ngaf-chat-radius-button);background:var(--ngaf-chat-bg);color:var(--ngaf-chat-text);font:inherit;font-size:var(--ngaf-chat-font-size-sm);padding:6px 10px;min-height:32px;outline:none;box-sizing:border-box}.chat-project-list__new{background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text);border:0;padding:10px 16px;border-radius:8px;font-family:inherit;font-size:var(--ngaf-chat-font-size-sm);font-weight:400;display:flex;align-items:center;gap:8px;cursor:pointer;width:100%}.chat-project-list__new:hover{background:color-mix(in srgb,var(--ngaf-chat-text) 8%,var(--ngaf-chat-surface-alt));color:var(--ngaf-chat-text)}\n"], dependencies: [{ kind: "component", type: ChatOverflowMenuComponent, selector: "chat-overflow-menu", inputs: ["open", "items", "anchor", "anchorPos"], outputs: ["itemSelected", "closed"] }, { kind: "component", type: ChatConfirmDialogComponent, selector: "chat-confirm-dialog", inputs: ["open", "title", "body", "confirmLabel", "cancelLabel", "tone"], outputs: ["confirmed", "cancelled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6396
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block;padding:var(--tplane-chat-space-2)}.chat-project-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:2px}.chat-project-list__item-wrap{position:relative;display:flex;align-items:center;gap:4px}.chat-project-list__item{flex:1 1 auto;min-width:0;min-height:32px;padding:6px 12px;border-radius:var(--tplane-chat-radius-button);cursor:pointer;color:var(--tplane-chat-text);font-size:var(--tplane-chat-font-size-sm);background:transparent;border:0;text-align:left;box-sizing:border-box;transition:background-color .15s ease;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chat-project-list__item:hover{background:color-mix(in srgb,var(--tplane-chat-text) 5%,transparent)}.chat-project-list__item[data-active=true]{background:var(--tplane-chat-surface-alt);font-weight:500}.chat-project-list__kebab{flex-shrink:0;width:28px;height:28px;border:0;background:transparent;color:var(--tplane-chat-text-muted);border-radius:4px;cursor:pointer;opacity:0;transition:opacity .1s ease;padding:0;line-height:1;font-size:18px}.chat-project-list__item-wrap:hover .chat-project-list__kebab,.chat-project-list__item-wrap:focus-within .chat-project-list__kebab{opacity:1}.chat-project-list__kebab:hover{background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text)}.chat-project-list__kebab:focus-visible{opacity:1;outline:2px solid var(--tplane-chat-primary);outline-offset:2px}.chat-project-list__edit{flex:1 1 auto;border:1px solid var(--tplane-chat-primary);border-radius:var(--tplane-chat-radius-button);background:var(--tplane-chat-bg);color:var(--tplane-chat-text);font:inherit;font-size:var(--tplane-chat-font-size-sm);padding:6px 10px;min-height:32px;outline:none;box-sizing:border-box}.chat-project-list__new{background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text);border:0;padding:10px 16px;border-radius:8px;font-family:inherit;font-size:var(--tplane-chat-font-size-sm);font-weight:400;display:flex;align-items:center;gap:8px;cursor:pointer;width:100%}.chat-project-list__new:hover{background:color-mix(in srgb,var(--tplane-chat-text) 8%,var(--tplane-chat-surface-alt));color:var(--tplane-chat-text)}\n"], dependencies: [{ kind: "component", type: ChatOverflowMenuComponent, selector: "chat-overflow-menu", inputs: ["open", "items", "anchor", "anchorPos"], outputs: ["itemSelected", "closed"] }, { kind: "component", type: ChatConfirmDialogComponent, selector: "chat-confirm-dialog", inputs: ["open", "title", "body", "confirmLabel", "cancelLabel", "tone"], outputs: ["confirmed", "cancelled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6193
6397
  }
6194
6398
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatProjectListComponent, decorators: [{
6195
6399
  type: Component,
@@ -6270,7 +6474,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
6270
6474
  (confirmed)="performDelete()"
6271
6475
  (cancelled)="confirmDeleteId.set(null)"
6272
6476
  />
6273
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block;padding:var(--ngaf-chat-space-2)}.chat-project-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:2px}.chat-project-list__item-wrap{position:relative;display:flex;align-items:center;gap:4px}.chat-project-list__item{flex:1 1 auto;min-width:0;min-height:32px;padding:6px 12px;border-radius:var(--ngaf-chat-radius-button);cursor:pointer;color:var(--ngaf-chat-text);font-size:var(--ngaf-chat-font-size-sm);background:transparent;border:0;text-align:left;box-sizing:border-box;transition:background-color .15s ease;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chat-project-list__item:hover{background:color-mix(in srgb,var(--ngaf-chat-text) 5%,transparent)}.chat-project-list__item[data-active=true]{background:var(--ngaf-chat-surface-alt);font-weight:500}.chat-project-list__kebab{flex-shrink:0;width:28px;height:28px;border:0;background:transparent;color:var(--ngaf-chat-text-muted);border-radius:4px;cursor:pointer;opacity:0;transition:opacity .1s ease;padding:0;line-height:1;font-size:18px}.chat-project-list__item-wrap:hover .chat-project-list__kebab,.chat-project-list__item-wrap:focus-within .chat-project-list__kebab{opacity:1}.chat-project-list__kebab:hover{background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text)}.chat-project-list__kebab:focus-visible{opacity:1;outline:2px solid var(--ngaf-chat-primary);outline-offset:2px}.chat-project-list__edit{flex:1 1 auto;border:1px solid var(--ngaf-chat-primary);border-radius:var(--ngaf-chat-radius-button);background:var(--ngaf-chat-bg);color:var(--ngaf-chat-text);font:inherit;font-size:var(--ngaf-chat-font-size-sm);padding:6px 10px;min-height:32px;outline:none;box-sizing:border-box}.chat-project-list__new{background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text);border:0;padding:10px 16px;border-radius:8px;font-family:inherit;font-size:var(--ngaf-chat-font-size-sm);font-weight:400;display:flex;align-items:center;gap:8px;cursor:pointer;width:100%}.chat-project-list__new:hover{background:color-mix(in srgb,var(--ngaf-chat-text) 8%,var(--ngaf-chat-surface-alt));color:var(--ngaf-chat-text)}\n"] }]
6477
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block;padding:var(--tplane-chat-space-2)}.chat-project-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:2px}.chat-project-list__item-wrap{position:relative;display:flex;align-items:center;gap:4px}.chat-project-list__item{flex:1 1 auto;min-width:0;min-height:32px;padding:6px 12px;border-radius:var(--tplane-chat-radius-button);cursor:pointer;color:var(--tplane-chat-text);font-size:var(--tplane-chat-font-size-sm);background:transparent;border:0;text-align:left;box-sizing:border-box;transition:background-color .15s ease;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chat-project-list__item:hover{background:color-mix(in srgb,var(--tplane-chat-text) 5%,transparent)}.chat-project-list__item[data-active=true]{background:var(--tplane-chat-surface-alt);font-weight:500}.chat-project-list__kebab{flex-shrink:0;width:28px;height:28px;border:0;background:transparent;color:var(--tplane-chat-text-muted);border-radius:4px;cursor:pointer;opacity:0;transition:opacity .1s ease;padding:0;line-height:1;font-size:18px}.chat-project-list__item-wrap:hover .chat-project-list__kebab,.chat-project-list__item-wrap:focus-within .chat-project-list__kebab{opacity:1}.chat-project-list__kebab:hover{background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text)}.chat-project-list__kebab:focus-visible{opacity:1;outline:2px solid var(--tplane-chat-primary);outline-offset:2px}.chat-project-list__edit{flex:1 1 auto;border:1px solid var(--tplane-chat-primary);border-radius:var(--tplane-chat-radius-button);background:var(--tplane-chat-bg);color:var(--tplane-chat-text);font:inherit;font-size:var(--tplane-chat-font-size-sm);padding:6px 10px;min-height:32px;outline:none;box-sizing:border-box}.chat-project-list__new{background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text);border:0;padding:10px 16px;border-radius:8px;font-family:inherit;font-size:var(--tplane-chat-font-size-sm);font-weight:400;display:flex;align-items:center;gap:8px;cursor:pointer;width:100%}.chat-project-list__new:hover{background:color-mix(in srgb,var(--tplane-chat-text) 8%,var(--tplane-chat-surface-alt));color:var(--tplane-chat-text)}\n"] }]
6274
6478
  }], ctorParameters: () => [], propDecorators: { projects: [{ type: i0.Input, args: [{ isSignal: true, alias: "projects", required: true }] }], activeProjectId: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeProjectId", required: false }] }], showNewProjectButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showNewProjectButton", required: false }] }], actions: [{ type: i0.Input, args: [{ isSignal: true, alias: "actions", required: false }] }], projectSelected: [{ type: i0.Output, args: ["projectSelected"] }], newProjectRequested: [{ type: i0.Output, args: ["newProjectRequested"] }], createInput: [{ type: i0.ViewChild, args: ['createInput', { isSignal: true }] }], editInput: [{ type: i0.ViewChild, args: ['editInput', { isSignal: true }] }] } });
6275
6479
 
6276
6480
  // SPDX-License-Identifier: MIT
@@ -6288,7 +6492,7 @@ class ChatGenuiSkeletonComponent {
6288
6492
  <div class="chat-genui-skeleton__row"></div>
6289
6493
  </div>
6290
6494
  </div>
6291
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block;width:100%}.chat-genui-skeleton{border:1px solid var(--ngaf-chat-separator);border-radius:10px;padding:14px;background:var(--ngaf-chat-surface-alt)}.chat-genui-skeleton__label{font-size:12px;color:var(--ngaf-chat-text-muted);margin-bottom:10px;display:flex;align-items:center;gap:6px}.chat-genui-skeleton__rows{display:flex;flex-direction:column;gap:8px}.chat-genui-skeleton__row{height:10px;border-radius:5px;background:linear-gradient(90deg,var(--ngaf-chat-separator) 0%,color-mix(in srgb,var(--ngaf-chat-separator) 70%,transparent) 50%,var(--ngaf-chat-separator) 100%);background-size:200% 100%;animation:chat-genui-skeleton-shimmer 1.4s ease-in-out infinite}.chat-genui-skeleton__row:nth-child(1){width:70%}.chat-genui-skeleton__row:nth-child(2){width:90%}.chat-genui-skeleton__row:nth-child(3){width:50%}@keyframes chat-genui-skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6495
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block;width:100%}.chat-genui-skeleton{border:1px solid var(--tplane-chat-separator);border-radius:10px;padding:14px;background:var(--tplane-chat-surface-alt)}.chat-genui-skeleton__label{font-size:12px;color:var(--tplane-chat-text-muted);margin-bottom:10px;display:flex;align-items:center;gap:6px}.chat-genui-skeleton__rows{display:flex;flex-direction:column;gap:8px}.chat-genui-skeleton__row{height:10px;border-radius:5px;background:linear-gradient(90deg,var(--tplane-chat-separator) 0%,color-mix(in srgb,var(--tplane-chat-separator) 70%,transparent) 50%,var(--tplane-chat-separator) 100%);background-size:200% 100%;animation:chat-genui-skeleton-shimmer 1.4s ease-in-out infinite}.chat-genui-skeleton__row:nth-child(1){width:70%}.chat-genui-skeleton__row:nth-child(2){width:90%}.chat-genui-skeleton__row:nth-child(3){width:50%}@keyframes chat-genui-skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6292
6496
  }
6293
6497
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatGenuiSkeletonComponent, decorators: [{
6294
6498
  type: Component,
@@ -6304,7 +6508,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
6304
6508
  <div class="chat-genui-skeleton__row"></div>
6305
6509
  </div>
6306
6510
  </div>
6307
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block;width:100%}.chat-genui-skeleton{border:1px solid var(--ngaf-chat-separator);border-radius:10px;padding:14px;background:var(--ngaf-chat-surface-alt)}.chat-genui-skeleton__label{font-size:12px;color:var(--ngaf-chat-text-muted);margin-bottom:10px;display:flex;align-items:center;gap:6px}.chat-genui-skeleton__rows{display:flex;flex-direction:column;gap:8px}.chat-genui-skeleton__row{height:10px;border-radius:5px;background:linear-gradient(90deg,var(--ngaf-chat-separator) 0%,color-mix(in srgb,var(--ngaf-chat-separator) 70%,transparent) 50%,var(--ngaf-chat-separator) 100%);background-size:200% 100%;animation:chat-genui-skeleton-shimmer 1.4s ease-in-out infinite}.chat-genui-skeleton__row:nth-child(1){width:70%}.chat-genui-skeleton__row:nth-child(2){width:90%}.chat-genui-skeleton__row:nth-child(3){width:50%}@keyframes chat-genui-skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}\n"] }]
6511
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block;width:100%}.chat-genui-skeleton{border:1px solid var(--tplane-chat-separator);border-radius:10px;padding:14px;background:var(--tplane-chat-surface-alt)}.chat-genui-skeleton__label{font-size:12px;color:var(--tplane-chat-text-muted);margin-bottom:10px;display:flex;align-items:center;gap:6px}.chat-genui-skeleton__rows{display:flex;flex-direction:column;gap:8px}.chat-genui-skeleton__row{height:10px;border-radius:5px;background:linear-gradient(90deg,var(--tplane-chat-separator) 0%,color-mix(in srgb,var(--tplane-chat-separator) 70%,transparent) 50%,var(--tplane-chat-separator) 100%);background-size:200% 100%;animation:chat-genui-skeleton-shimmer 1.4s ease-in-out infinite}.chat-genui-skeleton__row:nth-child(1){width:70%}.chat-genui-skeleton__row:nth-child(2){width:90%}.chat-genui-skeleton__row:nth-child(3){width:50%}@keyframes chat-genui-skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}\n"] }]
6308
6512
  }] });
6309
6513
 
6310
6514
  // SPDX-License-Identifier: MIT
@@ -6358,17 +6562,17 @@ const CHAT_WELCOME_STYLES = `
6358
6562
  justify-content: center;
6359
6563
  width: 100%;
6360
6564
  min-height: 0;
6361
- padding: var(--ngaf-chat-welcome-padding, 24px);
6565
+ padding: var(--tplane-chat-welcome-padding, 24px);
6362
6566
  box-sizing: border-box;
6363
- animation: ngaf-chat-welcome-mount 200ms ease-out both;
6567
+ animation: tplane-chat-welcome-mount 200ms ease-out both;
6364
6568
  }
6365
6569
  .chat-welcome__inner {
6366
6570
  display: flex;
6367
6571
  flex-direction: column;
6368
6572
  align-items: center;
6369
- gap: var(--ngaf-chat-welcome-gap, 1.25rem);
6573
+ gap: var(--tplane-chat-welcome-gap, 1.25rem);
6370
6574
  width: 100%;
6371
- max-width: var(--ngaf-chat-welcome-max-width, 36rem);
6575
+ max-width: var(--tplane-chat-welcome-max-width, 36rem);
6372
6576
  text-align: center;
6373
6577
  }
6374
6578
  .chat-welcome__beacon {
@@ -6377,17 +6581,17 @@ const CHAT_WELCOME_STYLES = `
6377
6581
  height: 14px;
6378
6582
  border-radius: 50%;
6379
6583
  background: radial-gradient(circle at 30% 30%,
6380
- var(--ngaf-chat-text) 0%,
6381
- var(--ngaf-chat-text-muted) 70%,
6584
+ var(--tplane-chat-text) 0%,
6585
+ var(--tplane-chat-text-muted) 70%,
6382
6586
  transparent 100%);
6383
- animation: ngaf-chat-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
6587
+ animation: tplane-chat-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
6384
6588
  margin-bottom: 8px;
6385
6589
  }
6386
6590
  .chat-welcome__title {
6387
6591
  margin: 0;
6388
6592
  font-size: 1.25rem;
6389
6593
  font-weight: 500;
6390
- color: var(--ngaf-chat-text);
6594
+ color: var(--tplane-chat-text);
6391
6595
  line-height: 1.3;
6392
6596
  }
6393
6597
  @media (min-width: 768px) {
@@ -6425,23 +6629,23 @@ const CHAT_WELCOME_SUGGESTION_STYLES = `
6425
6629
  align-items: center;
6426
6630
  gap: 0.5rem;
6427
6631
  padding: 10px 16px;
6428
- background: var(--ngaf-chat-surface);
6429
- border: 1px solid var(--ngaf-chat-separator);
6632
+ background: var(--tplane-chat-surface);
6633
+ border: 1px solid var(--tplane-chat-separator);
6430
6634
  border-radius: 9999px;
6431
- color: var(--ngaf-chat-text);
6635
+ color: var(--tplane-chat-text);
6432
6636
  font-family: inherit;
6433
- font-size: var(--ngaf-chat-font-size-sm);
6637
+ font-size: var(--tplane-chat-font-size-sm);
6434
6638
  text-align: center;
6435
6639
  cursor: pointer;
6436
6640
  transition: background 150ms ease, border-color 150ms ease, transform 120ms ease;
6437
6641
  }
6438
6642
  .chat-welcome-suggestion:hover {
6439
- background: var(--ngaf-chat-surface-alt);
6440
- border-color: var(--ngaf-chat-text-muted);
6643
+ background: var(--tplane-chat-surface-alt);
6644
+ border-color: var(--tplane-chat-text-muted);
6441
6645
  }
6442
6646
  .chat-welcome-suggestion:active { transform: scale(0.98); }
6443
6647
  .chat-welcome-suggestion:focus-visible {
6444
- outline: 2px solid var(--ngaf-chat-text-muted);
6648
+ outline: 2px solid var(--tplane-chat-text-muted);
6445
6649
  outline-offset: 2px;
6446
6650
  }
6447
6651
  .chat-welcome-suggestion__label { white-space: nowrap; }
@@ -6460,9 +6664,9 @@ const CHAT_WELCOME_SUGGESTION_STYLES = `
6460
6664
  * [chatWelcomeSuggestions] — projects suggestion rows below the input
6461
6665
  *
6462
6666
  * Host CSS variables (override on :host or any ancestor):
6463
- * --ngaf-chat-welcome-max-width default 36rem
6464
- * --ngaf-chat-welcome-gap default 1.25rem
6465
- * --ngaf-chat-welcome-padding default 24px
6667
+ * --tplane-chat-welcome-max-width default 36rem
6668
+ * --tplane-chat-welcome-gap default 1.25rem
6669
+ * --tplane-chat-welcome-padding default 24px
6466
6670
  */
6467
6671
  class ChatWelcomeComponent {
6468
6672
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatWelcomeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
@@ -6477,7 +6681,7 @@ class ChatWelcomeComponent {
6477
6681
  <ng-content select="[chatWelcomeSuggestions]" />
6478
6682
  </div>
6479
6683
  </div>
6480
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:flex;flex:1 1 auto;align-items:center;justify-content:center;width:100%;min-height:0;padding:var(--ngaf-chat-welcome-padding, 24px);box-sizing:border-box;animation:ngaf-chat-welcome-mount .2s ease-out both}.chat-welcome__inner{display:flex;flex-direction:column;align-items:center;gap:var(--ngaf-chat-welcome-gap, 1.25rem);width:100%;max-width:var(--ngaf-chat-welcome-max-width, 36rem);text-align:center}.chat-welcome__beacon{display:inline-block;width:14px;height:14px;border-radius:50%;background:radial-gradient(circle at 30% 30%,var(--ngaf-chat-text) 0%,var(--ngaf-chat-text-muted) 70%,transparent 100%);animation:ngaf-chat-pulse 2s cubic-bezier(.4,0,.6,1) infinite;margin-bottom:8px}.chat-welcome__title{margin:0;font-size:1.25rem;font-weight:500;color:var(--ngaf-chat-text);line-height:1.3}@media(min-width:768px){.chat-welcome__title{font-size:1.5rem}}.chat-welcome__input{width:100%;margin-top:.5rem}.chat-welcome__suggestions{width:100%;display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:4px}.chat-welcome__suggestions>div{display:flex;flex-wrap:wrap;justify-content:center;gap:8px}.chat-welcome__suggestions:empty{display:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6684
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:flex;flex:1 1 auto;align-items:center;justify-content:center;width:100%;min-height:0;padding:var(--tplane-chat-welcome-padding, 24px);box-sizing:border-box;animation:tplane-chat-welcome-mount .2s ease-out both}.chat-welcome__inner{display:flex;flex-direction:column;align-items:center;gap:var(--tplane-chat-welcome-gap, 1.25rem);width:100%;max-width:var(--tplane-chat-welcome-max-width, 36rem);text-align:center}.chat-welcome__beacon{display:inline-block;width:14px;height:14px;border-radius:50%;background:radial-gradient(circle at 30% 30%,var(--tplane-chat-text) 0%,var(--tplane-chat-text-muted) 70%,transparent 100%);animation:tplane-chat-pulse 2s cubic-bezier(.4,0,.6,1) infinite;margin-bottom:8px}.chat-welcome__title{margin:0;font-size:1.25rem;font-weight:500;color:var(--tplane-chat-text);line-height:1.3}@media(min-width:768px){.chat-welcome__title{font-size:1.5rem}}.chat-welcome__input{width:100%;margin-top:.5rem}.chat-welcome__suggestions{width:100%;display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:4px}.chat-welcome__suggestions>div{display:flex;flex-wrap:wrap;justify-content:center;gap:8px}.chat-welcome__suggestions:empty{display:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6481
6685
  }
6482
6686
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatWelcomeComponent, decorators: [{
6483
6687
  type: Component,
@@ -6492,7 +6696,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
6492
6696
  <ng-content select="[chatWelcomeSuggestions]" />
6493
6697
  </div>
6494
6698
  </div>
6495
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:flex;flex:1 1 auto;align-items:center;justify-content:center;width:100%;min-height:0;padding:var(--ngaf-chat-welcome-padding, 24px);box-sizing:border-box;animation:ngaf-chat-welcome-mount .2s ease-out both}.chat-welcome__inner{display:flex;flex-direction:column;align-items:center;gap:var(--ngaf-chat-welcome-gap, 1.25rem);width:100%;max-width:var(--ngaf-chat-welcome-max-width, 36rem);text-align:center}.chat-welcome__beacon{display:inline-block;width:14px;height:14px;border-radius:50%;background:radial-gradient(circle at 30% 30%,var(--ngaf-chat-text) 0%,var(--ngaf-chat-text-muted) 70%,transparent 100%);animation:ngaf-chat-pulse 2s cubic-bezier(.4,0,.6,1) infinite;margin-bottom:8px}.chat-welcome__title{margin:0;font-size:1.25rem;font-weight:500;color:var(--ngaf-chat-text);line-height:1.3}@media(min-width:768px){.chat-welcome__title{font-size:1.5rem}}.chat-welcome__input{width:100%;margin-top:.5rem}.chat-welcome__suggestions{width:100%;display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:4px}.chat-welcome__suggestions>div{display:flex;flex-wrap:wrap;justify-content:center;gap:8px}.chat-welcome__suggestions:empty{display:none}\n"] }]
6699
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:flex;flex:1 1 auto;align-items:center;justify-content:center;width:100%;min-height:0;padding:var(--tplane-chat-welcome-padding, 24px);box-sizing:border-box;animation:tplane-chat-welcome-mount .2s ease-out both}.chat-welcome__inner{display:flex;flex-direction:column;align-items:center;gap:var(--tplane-chat-welcome-gap, 1.25rem);width:100%;max-width:var(--tplane-chat-welcome-max-width, 36rem);text-align:center}.chat-welcome__beacon{display:inline-block;width:14px;height:14px;border-radius:50%;background:radial-gradient(circle at 30% 30%,var(--tplane-chat-text) 0%,var(--tplane-chat-text-muted) 70%,transparent 100%);animation:tplane-chat-pulse 2s cubic-bezier(.4,0,.6,1) infinite;margin-bottom:8px}.chat-welcome__title{margin:0;font-size:1.25rem;font-weight:500;color:var(--tplane-chat-text);line-height:1.3}@media(min-width:768px){.chat-welcome__title{font-size:1.5rem}}.chat-welcome__input{width:100%;margin-top:.5rem}.chat-welcome__suggestions{width:100%;display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:4px}.chat-welcome__suggestions>div{display:flex;flex-wrap:wrap;justify-content:center;gap:8px}.chat-welcome__suggestions:empty{display:none}\n"] }]
6496
6700
  }] });
6497
6701
 
6498
6702
  // SPDX-License-Identifier: MIT
@@ -6515,7 +6719,7 @@ class ChatWelcomeSuggestionComponent {
6515
6719
  <span class="chat-welcome-suggestion__label">{{ label() }}</span>
6516
6720
  <span class="chat-welcome-suggestion__chevron" aria-hidden="true">›</span>
6517
6721
  </button>
6518
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:inline-block}.chat-welcome-suggestion{display:inline-flex;align-items:center;gap:.5rem;padding:10px 16px;background:var(--ngaf-chat-surface);border:1px solid var(--ngaf-chat-separator);border-radius:9999px;color:var(--ngaf-chat-text);font-family:inherit;font-size:var(--ngaf-chat-font-size-sm);text-align:center;cursor:pointer;transition:background .15s ease,border-color .15s ease,transform .12s ease}.chat-welcome-suggestion:hover{background:var(--ngaf-chat-surface-alt);border-color:var(--ngaf-chat-text-muted)}.chat-welcome-suggestion:active{transform:scale(.98)}.chat-welcome-suggestion:focus-visible{outline:2px solid var(--ngaf-chat-text-muted);outline-offset:2px}.chat-welcome-suggestion__label{white-space:nowrap}.chat-welcome-suggestion__chevron{display:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6722
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:inline-block}.chat-welcome-suggestion{display:inline-flex;align-items:center;gap:.5rem;padding:10px 16px;background:var(--tplane-chat-surface);border:1px solid var(--tplane-chat-separator);border-radius:9999px;color:var(--tplane-chat-text);font-family:inherit;font-size:var(--tplane-chat-font-size-sm);text-align:center;cursor:pointer;transition:background .15s ease,border-color .15s ease,transform .12s ease}.chat-welcome-suggestion:hover{background:var(--tplane-chat-surface-alt);border-color:var(--tplane-chat-text-muted)}.chat-welcome-suggestion:active{transform:scale(.98)}.chat-welcome-suggestion:focus-visible{outline:2px solid var(--tplane-chat-text-muted);outline-offset:2px}.chat-welcome-suggestion__label{white-space:nowrap}.chat-welcome-suggestion__chevron{display:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6519
6723
  }
6520
6724
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatWelcomeSuggestionComponent, decorators: [{
6521
6725
  type: Component,
@@ -6531,9 +6735,286 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
6531
6735
  <span class="chat-welcome-suggestion__label">{{ label() }}</span>
6532
6736
  <span class="chat-welcome-suggestion__chevron" aria-hidden="true">›</span>
6533
6737
  </button>
6534
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:inline-block}.chat-welcome-suggestion{display:inline-flex;align-items:center;gap:.5rem;padding:10px 16px;background:var(--ngaf-chat-surface);border:1px solid var(--ngaf-chat-separator);border-radius:9999px;color:var(--ngaf-chat-text);font-family:inherit;font-size:var(--ngaf-chat-font-size-sm);text-align:center;cursor:pointer;transition:background .15s ease,border-color .15s ease,transform .12s ease}.chat-welcome-suggestion:hover{background:var(--ngaf-chat-surface-alt);border-color:var(--ngaf-chat-text-muted)}.chat-welcome-suggestion:active{transform:scale(.98)}.chat-welcome-suggestion:focus-visible{outline:2px solid var(--ngaf-chat-text-muted);outline-offset:2px}.chat-welcome-suggestion__label{white-space:nowrap}.chat-welcome-suggestion__chevron{display:none}\n"] }]
6738
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:inline-block}.chat-welcome-suggestion{display:inline-flex;align-items:center;gap:.5rem;padding:10px 16px;background:var(--tplane-chat-surface);border:1px solid var(--tplane-chat-separator);border-radius:9999px;color:var(--tplane-chat-text);font-family:inherit;font-size:var(--tplane-chat-font-size-sm);text-align:center;cursor:pointer;transition:background .15s ease,border-color .15s ease,transform .12s ease}.chat-welcome-suggestion:hover{background:var(--tplane-chat-surface-alt);border-color:var(--tplane-chat-text-muted)}.chat-welcome-suggestion:active{transform:scale(.98)}.chat-welcome-suggestion:focus-visible{outline:2px solid var(--tplane-chat-text-muted);outline-offset:2px}.chat-welcome-suggestion__label{white-space:nowrap}.chat-welcome-suggestion__chevron{display:none}\n"] }]
6535
6739
  }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], selected: [{ type: i0.Output, args: ["selected"] }] } });
6536
6740
 
6741
+ // libs/chat/src/lib/primitives/overlay/overlay-container.ts
6742
+ // SPDX-License-Identifier: MIT
6743
+ const CONTAINER_CLASS = 'chat-overlay-container';
6744
+ const STYLE_ID = 'chat-overlay-structure';
6745
+ // Structural CSS, injected once into <head> (same pattern as ROOT_TOKEN_STYLES
6746
+ // in chat-tokens.ts) so consumers need not import any stylesheet.
6747
+ const STRUCTURE_CSS = `
6748
+ .${CONTAINER_CLASS} {
6749
+ position: fixed;
6750
+ inset: 0;
6751
+ z-index: 1000;
6752
+ pointer-events: none;
6753
+ }
6754
+ .chat-overlay-pane {
6755
+ position: absolute;
6756
+ pointer-events: auto;
6757
+ }
6758
+ `;
6759
+ /** Returns the single shared overlay container appended to <body>, creating it
6760
+ * (and injecting structural CSS) on first call. */
6761
+ function getOverlayContainer(doc) {
6762
+ const existing = doc.querySelector('.' + CONTAINER_CLASS);
6763
+ if (existing)
6764
+ return existing;
6765
+ if (!doc.getElementById(STYLE_ID)) {
6766
+ const style = doc.createElement('style');
6767
+ style.id = STYLE_ID;
6768
+ style.textContent = STRUCTURE_CSS;
6769
+ doc.head.appendChild(style);
6770
+ }
6771
+ const container = doc.createElement('div');
6772
+ container.className = CONTAINER_CLASS;
6773
+ doc.body.appendChild(container);
6774
+ return container;
6775
+ }
6776
+
6777
+ // libs/chat/src/lib/primitives/overlay/connected-position.ts
6778
+ // SPDX-License-Identifier: MIT
6779
+ //
6780
+ // Minimal port of CDK's FlexibleConnectedPositionStrategy fit logic
6781
+ // (~/repos/components/src/cdk/overlay/position/flexible-connected-position-strategy.ts):
6782
+ // _getOriginPoint + _getOverlayPoint + _getOverlayFit + _pushOverlayOnScreen.
6783
+ // Omits flexible-dimensions, grow-after-open, RTL, and virtual-keyboard handling.
6784
+ function originPoint(origin, pos) {
6785
+ const x = pos.originX === 'center' ? origin.left + origin.width / 2 : pos.originX === 'start' ? origin.left : origin.right;
6786
+ const y = pos.originY === 'center' ? origin.top + origin.height / 2 : pos.originY === 'top' ? origin.top : origin.bottom;
6787
+ return { x, y };
6788
+ }
6789
+ function overlayPoint(origin, size, pos) {
6790
+ let x = origin.x;
6791
+ if (pos.overlayX === 'center')
6792
+ x -= size.width / 2;
6793
+ else if (pos.overlayX === 'end')
6794
+ x -= size.width;
6795
+ let y = origin.y;
6796
+ if (pos.overlayY === 'center')
6797
+ y -= size.height / 2;
6798
+ else if (pos.overlayY === 'bottom')
6799
+ y -= size.height;
6800
+ return { x: x + (pos.offsetX ?? 0), y: y + (pos.offsetY ?? 0) };
6801
+ }
6802
+ function fitArea(point, size, viewport) {
6803
+ const left = point.x;
6804
+ const right = point.x + size.width;
6805
+ const top = point.y;
6806
+ const bottom = point.y + size.height;
6807
+ const visibleW = Math.max(0, Math.min(right, viewport.right) - Math.max(left, viewport.left));
6808
+ const visibleH = Math.max(0, Math.min(bottom, viewport.bottom) - Math.max(top, viewport.top));
6809
+ const fits = left >= viewport.left && right <= viewport.right && top >= viewport.top && bottom <= viewport.bottom;
6810
+ return { area: visibleW * visibleH, fits };
6811
+ }
6812
+ function pushOnScreen(point, size, viewport) {
6813
+ const maxLeft = viewport.right - size.width;
6814
+ const maxTop = viewport.bottom - size.height;
6815
+ return {
6816
+ x: Math.max(viewport.left, Math.min(point.x, maxLeft)),
6817
+ y: Math.max(viewport.top, Math.min(point.y, maxTop)),
6818
+ };
6819
+ }
6820
+ /** Sensible fallback when no positions are supplied: below the origin, start-aligned. */
6821
+ const DEFAULT_POSITION = { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' };
6822
+ function computeConnectedPosition(args) {
6823
+ const { originRect, overlaySize, viewport, positions } = args;
6824
+ // An empty positions array (the directive's input default) must still anchor to
6825
+ // the trigger rather than crash on best! / render at 0,0.
6826
+ const list = positions.length ? positions : [DEFAULT_POSITION];
6827
+ let best = null;
6828
+ for (const pos of list) {
6829
+ const point = overlayPoint(originPoint(originRect, pos), overlaySize, pos);
6830
+ const { area, fits } = fitArea(point, overlaySize, viewport);
6831
+ if (fits) {
6832
+ return { top: point.y, left: point.x, position: pos };
6833
+ }
6834
+ if (!best || area > best.area)
6835
+ best = { point, pos, area };
6836
+ }
6837
+ const pushed = pushOnScreen(best.point, overlaySize, viewport);
6838
+ return { top: pushed.y, left: pushed.x, position: best.pos };
6839
+ }
6840
+ function narrowViewport(win, margin) {
6841
+ return {
6842
+ left: margin,
6843
+ top: margin,
6844
+ right: win.innerWidth - margin,
6845
+ bottom: win.innerHeight - margin,
6846
+ width: win.innerWidth - 2 * margin,
6847
+ height: win.innerHeight - 2 * margin,
6848
+ };
6849
+ }
6850
+
6851
+ // libs/chat/src/lib/primitives/overlay/connected-overlay.directive.ts
6852
+ // SPDX-License-Identifier: MIT
6853
+ /* eslint-disable @angular-eslint/no-input-rename, @angular-eslint/no-output-rename --
6854
+ * The `chatOverlay*` binding aliases ARE the intended public API: they namespace
6855
+ * the directive's inputs/outputs under the `chatOverlay` prefix (mirroring Angular
6856
+ * CDK's `cdkConnectedOverlay*` convention) rather than exposing bare names like
6857
+ * `open`/`positions` on an `<ng-template>`. The internal property names stay
6858
+ * concise, so aliasing here is deliberate, not a rename to avoid. */
6859
+ /** Marks the anchor element a connected overlay positions against. */
6860
+ class ChatOverlayOriginDirective {
6861
+ elementRef = inject(ElementRef);
6862
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatOverlayOriginDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6863
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.6", type: ChatOverlayOriginDirective, isStandalone: true, selector: "[chatOverlayOrigin]", exportAs: ["chatOverlayOrigin"], ngImport: i0 });
6864
+ }
6865
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatOverlayOriginDirective, decorators: [{
6866
+ type: Directive,
6867
+ args: [{
6868
+ selector: '[chatOverlayOrigin]',
6869
+ standalone: true,
6870
+ exportAs: 'chatOverlayOrigin',
6871
+ }]
6872
+ }] });
6873
+ const VIEWPORT_MARGIN = 8;
6874
+ /**
6875
+ * Applied to an `<ng-template>`. When `chatOverlayOpen` is true, the template
6876
+ * content is portaled into the shared body-level overlay container and
6877
+ * positioned connected to `chatOverlayOrigin`, repositioning live on
6878
+ * scroll/resize. Closes on outside mousedown (via the `chatOverlayOutsideClick`
6879
+ * output) and Tab; returns focus to the origin when focus was inside the pane.
6880
+ *
6881
+ * NOTE: the directive does not own the open state — it only emits. To fully
6882
+ * close the overlay, consumers MUST handle BOTH `(chatOverlayOutsideClick)` and
6883
+ * `(chatOverlayDetach)`. Tab-close (and Escape, when the consumer routes it)
6884
+ * surface through `chatOverlayDetach`, so wiring only `chatOverlayOutsideClick`
6885
+ * leaves the overlay stuck open on Tab.
6886
+ */
6887
+ class ChatConnectedOverlayDirective {
6888
+ origin = input.required({ ...(ngDevMode ? { debugName: "origin" } : {}), alias: 'chatOverlayOrigin' });
6889
+ open = input(false, { ...(ngDevMode ? { debugName: "open" } : {}), alias: 'chatOverlayOpen' });
6890
+ positions = input([], { ...(ngDevMode ? { debugName: "positions" } : {}), alias: 'chatOverlayPositions' });
6891
+ panelClass = input('', { ...(ngDevMode ? { debugName: "panelClass" } : {}), alias: 'chatOverlayPanelClass' });
6892
+ /** Emits the pane element once attached (consumers focus content from it). */
6893
+ attached = output({ alias: 'chatOverlayAttached' });
6894
+ outsideClick = output({ alias: 'chatOverlayOutsideClick' });
6895
+ detached = output({ alias: 'chatOverlayDetach' });
6896
+ templateRef = inject((TemplateRef));
6897
+ viewContainerRef = inject(ViewContainerRef);
6898
+ document = inject(DOCUMENT);
6899
+ pane = null;
6900
+ viewRef = null;
6901
+ resizeObs = null;
6902
+ rafId = 0;
6903
+ previouslyFocused = null;
6904
+ onScrollOrResize = () => this.scheduleReposition();
6905
+ onDocMouseDown = (e) => {
6906
+ if (!this.pane)
6907
+ return;
6908
+ const path = e.composedPath();
6909
+ if (path.includes(this.pane) || path.includes(this.origin().elementRef.nativeElement))
6910
+ return;
6911
+ this.outsideClick.emit(e);
6912
+ };
6913
+ onKeydown = (e) => {
6914
+ if (e.key !== 'Tab' || !this.pane)
6915
+ return;
6916
+ const active = this.document.activeElement;
6917
+ if (this.pane.contains(active) || active === this.origin().elementRef.nativeElement) {
6918
+ this.detached.emit();
6919
+ }
6920
+ };
6921
+ constructor() {
6922
+ effect(() => {
6923
+ if (this.open())
6924
+ this.attach();
6925
+ else
6926
+ this.dispose();
6927
+ });
6928
+ inject(DestroyRef).onDestroy(() => this.dispose());
6929
+ }
6930
+ attach() {
6931
+ if (this.pane)
6932
+ return;
6933
+ const win = this.document.defaultView;
6934
+ if (!win)
6935
+ return; // SSR / detached document
6936
+ this.previouslyFocused = this.document.activeElement;
6937
+ const pane = this.document.createElement('div');
6938
+ pane.className = 'chat-overlay-pane';
6939
+ for (const c of this.normalizePanelClass())
6940
+ pane.classList.add(c);
6941
+ getOverlayContainer(this.document).appendChild(pane);
6942
+ this.viewRef = this.viewContainerRef.createEmbeddedView(this.templateRef);
6943
+ this.viewRef.detectChanges();
6944
+ for (const node of this.viewRef.rootNodes)
6945
+ pane.appendChild(node);
6946
+ this.pane = pane;
6947
+ this.reposition();
6948
+ win.addEventListener('scroll', this.onScrollOrResize, { capture: true, passive: true });
6949
+ win.addEventListener('resize', this.onScrollOrResize, { passive: true });
6950
+ this.document.addEventListener('mousedown', this.onDocMouseDown, true);
6951
+ this.document.addEventListener('keydown', this.onKeydown, true);
6952
+ if (typeof win.ResizeObserver === 'function') {
6953
+ this.resizeObs = new win.ResizeObserver(() => this.scheduleReposition());
6954
+ this.resizeObs.observe(this.origin().elementRef.nativeElement);
6955
+ this.resizeObs.observe(pane);
6956
+ }
6957
+ this.attached.emit(pane);
6958
+ }
6959
+ scheduleReposition() {
6960
+ const win = this.document.defaultView;
6961
+ if (!win || !this.pane)
6962
+ return;
6963
+ if (this.rafId)
6964
+ win.cancelAnimationFrame(this.rafId);
6965
+ this.rafId = win.requestAnimationFrame(() => this.reposition());
6966
+ }
6967
+ reposition() {
6968
+ const win = this.document.defaultView;
6969
+ if (!win || !this.pane)
6970
+ return;
6971
+ const r = this.pane.getBoundingClientRect();
6972
+ const result = computeConnectedPosition({
6973
+ originRect: this.origin().elementRef.nativeElement.getBoundingClientRect(),
6974
+ overlaySize: { width: r.width, height: r.height },
6975
+ viewport: narrowViewport(win, VIEWPORT_MARGIN),
6976
+ positions: this.positions(),
6977
+ });
6978
+ this.pane.style.top = `${Math.round(result.top)}px`;
6979
+ this.pane.style.left = `${Math.round(result.left)}px`;
6980
+ }
6981
+ dispose() {
6982
+ const win = this.document.defaultView;
6983
+ if (this.rafId && win)
6984
+ win.cancelAnimationFrame(this.rafId);
6985
+ this.rafId = 0;
6986
+ if (win) {
6987
+ win.removeEventListener('scroll', this.onScrollOrResize, { capture: true });
6988
+ win.removeEventListener('resize', this.onScrollOrResize);
6989
+ }
6990
+ this.document.removeEventListener('mousedown', this.onDocMouseDown, true);
6991
+ this.document.removeEventListener('keydown', this.onKeydown, true);
6992
+ this.resizeObs?.disconnect();
6993
+ this.resizeObs = null;
6994
+ const focusWasInPane = !!this.pane && this.pane.contains(this.document.activeElement);
6995
+ this.viewRef?.destroy();
6996
+ this.viewRef = null;
6997
+ this.pane?.remove();
6998
+ this.pane = null;
6999
+ if (focusWasInPane && this.previouslyFocused)
7000
+ this.previouslyFocused.focus();
7001
+ this.previouslyFocused = null;
7002
+ }
7003
+ normalizePanelClass() {
7004
+ const pc = this.panelClass();
7005
+ return Array.isArray(pc) ? pc : pc ? [pc] : [];
7006
+ }
7007
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatConnectedOverlayDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
7008
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.6", type: ChatConnectedOverlayDirective, isStandalone: true, selector: "[chatConnectedOverlay]", inputs: { origin: { classPropertyName: "origin", publicName: "chatOverlayOrigin", isSignal: true, isRequired: true, transformFunction: null }, open: { classPropertyName: "open", publicName: "chatOverlayOpen", isSignal: true, isRequired: false, transformFunction: null }, positions: { classPropertyName: "positions", publicName: "chatOverlayPositions", isSignal: true, isRequired: false, transformFunction: null }, panelClass: { classPropertyName: "panelClass", publicName: "chatOverlayPanelClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { attached: "chatOverlayAttached", outsideClick: "chatOverlayOutsideClick", detached: "chatOverlayDetach" }, ngImport: i0 });
7009
+ }
7010
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatConnectedOverlayDirective, decorators: [{
7011
+ type: Directive,
7012
+ args: [{
7013
+ selector: '[chatConnectedOverlay]',
7014
+ standalone: true,
7015
+ }]
7016
+ }], ctorParameters: () => [], propDecorators: { origin: [{ type: i0.Input, args: [{ isSignal: true, alias: "chatOverlayOrigin", required: true }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "chatOverlayOpen", required: false }] }], positions: [{ type: i0.Input, args: [{ isSignal: true, alias: "chatOverlayPositions", required: false }] }], panelClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "chatOverlayPanelClass", required: false }] }], attached: [{ type: i0.Output, args: ["chatOverlayAttached"] }], outsideClick: [{ type: i0.Output, args: ["chatOverlayOutsideClick"] }], detached: [{ type: i0.Output, args: ["chatOverlayDetach"] }] } });
7017
+
6537
7018
  // libs/chat/src/lib/styles/chat-select.styles.ts
6538
7019
  // SPDX-License-Identifier: MIT
6539
7020
  const CHAT_SELECT_STYLES = `
@@ -6547,9 +7028,9 @@ const CHAT_SELECT_STYLES = `
6547
7028
  border: 0;
6548
7029
  border-radius: 9999px;
6549
7030
  background: transparent;
6550
- color: var(--ngaf-chat-text-muted);
7031
+ color: var(--tplane-chat-text-muted);
6551
7032
  font: inherit;
6552
- font-size: var(--ngaf-chat-font-size-sm);
7033
+ font-size: var(--tplane-chat-font-size-sm);
6553
7034
  display: inline-flex;
6554
7035
  align-items: center;
6555
7036
  gap: 4px;
@@ -6557,8 +7038,8 @@ const CHAT_SELECT_STYLES = `
6557
7038
  transition: background 120ms ease, color 120ms ease;
6558
7039
  }
6559
7040
  .chat-select__trigger:hover:not(:disabled) {
6560
- background: var(--ngaf-chat-surface-alt);
6561
- color: var(--ngaf-chat-text);
7041
+ background: var(--tplane-chat-surface-alt);
7042
+ color: var(--tplane-chat-text);
6562
7043
  }
6563
7044
  .chat-select__trigger:disabled {
6564
7045
  opacity: 0.5;
@@ -6573,19 +7054,21 @@ const CHAT_SELECT_STYLES = `
6573
7054
  .chat-select__trigger.is-open .chat-select__chevron {
6574
7055
  transform: rotate(180deg);
6575
7056
  }
7057
+ /* The menu is rendered inside the chat connected-overlay pane (a body-level
7058
+ portal), so it no longer positions itself — the overlay primitive places
7059
+ the pane. It keeps only its own box styling here. Min/max width can be
7060
+ overridden per consumer via the overlay panelClass (see chat-select
7061
+ panelClass input). */
6576
7062
  .chat-select__menu {
6577
- position: absolute;
6578
- bottom: calc(100% + 8px);
6579
- right: 0;
6580
7063
  min-width: 180px;
6581
7064
  max-height: 320px;
6582
7065
  overflow-y: auto;
6583
- background: var(--ngaf-chat-surface);
6584
- border: 1px solid var(--ngaf-chat-separator);
7066
+ background: var(--tplane-chat-surface);
7067
+ border: 1px solid var(--tplane-chat-separator);
6585
7068
  border-radius: 12px;
6586
- box-shadow: var(--ngaf-chat-shadow-lg);
7069
+ box-shadow: var(--tplane-chat-shadow-lg);
6587
7070
  padding: 4px;
6588
- z-index: 10;
7071
+ box-sizing: border-box;
6589
7072
  }
6590
7073
  .chat-select__option {
6591
7074
  display: flex;
@@ -6598,24 +7081,24 @@ const CHAT_SELECT_STYLES = `
6598
7081
  background: transparent;
6599
7082
  padding: 8px 10px;
6600
7083
  border-radius: 8px;
6601
- color: var(--ngaf-chat-text);
7084
+ color: var(--tplane-chat-text);
6602
7085
  font: inherit;
6603
- font-size: var(--ngaf-chat-font-size-sm);
7086
+ font-size: var(--tplane-chat-font-size-sm);
6604
7087
  cursor: pointer;
6605
7088
  }
6606
7089
  .chat-select__option-desc {
6607
- font-size: var(--ngaf-chat-font-size-xs);
6608
- color: var(--ngaf-chat-text-muted);
7090
+ font-size: var(--tplane-chat-font-size-xs);
7091
+ color: var(--tplane-chat-text-muted);
6609
7092
  line-height: 1.3;
6610
7093
  white-space: normal;
6611
7094
  }
6612
7095
  .chat-select__option:hover:not(:disabled),
6613
7096
  .chat-select__option:focus-visible {
6614
- background: var(--ngaf-chat-surface-alt);
7097
+ background: var(--tplane-chat-surface-alt);
6615
7098
  outline: none;
6616
7099
  }
6617
7100
  .chat-select__option.is-active {
6618
- background: var(--ngaf-chat-surface-alt);
7101
+ background: var(--tplane-chat-surface-alt);
6619
7102
  font-weight: 500;
6620
7103
  }
6621
7104
  .chat-select__option:disabled {
@@ -6626,16 +7109,16 @@ const CHAT_SELECT_STYLES = `
6626
7109
 
6627
7110
  // libs/chat/src/lib/primitives/chat-select/chat-select.component.ts
6628
7111
  // SPDX-License-Identifier: MIT
7112
+ // Unique listbox id per instance, for aria-controls (multiple selects per page).
7113
+ let nextChatSelectId = 0;
6629
7114
  /**
6630
- * Generic single-select dropdown. Designed to slot into the chat input pill
6631
- * (via [chatInputModelSelect]) but usable anywhere.
7115
+ * Generic single-select dropdown. The menu renders through the chat
7116
+ * connected-overlay primitive (a body-level portal), so it is never clipped by
7117
+ * an ancestor's `overflow` and never trapped by an ancestor `transform`.
6632
7118
  *
6633
- * Inputs:
6634
- * options — array of { value, label, disabled? }; required
6635
- * value — currently selected value (two-way via model())
6636
- * placeholder — trigger label when no option matches; default 'Select'
6637
- * disabled — disables the trigger; default false
6638
- * menuLabel — aria-label for the popover; defaults to placeholder
7119
+ * Inputs: options (required), value (two-way), placeholder, disabled, menuLabel,
7120
+ * panelClass (extra class(es) on the overlay pane — the menu is portaled, so
7121
+ * `::ng-deep chat-select .chat-select__menu` no longer reaches it).
6639
7122
  */
6640
7123
  class ChatSelectComponent {
6641
7124
  options = input.required(...(ngDevMode ? [{ debugName: "options" }] : []));
@@ -6643,43 +7126,34 @@ class ChatSelectComponent {
6643
7126
  placeholder = input('Select', ...(ngDevMode ? [{ debugName: "placeholder" }] : []));
6644
7127
  disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
6645
7128
  menuLabel = input(undefined, ...(ngDevMode ? [{ debugName: "menuLabel" }] : []));
7129
+ panelClass = input('', ...(ngDevMode ? [{ debugName: "panelClass" }] : []));
6646
7130
  open = signal(false, ...(ngDevMode ? [{ debugName: "open" }] : []));
7131
+ menuId = `chat-select-menu-${nextChatSelectId++}`;
7132
+ // Above-right preferred (input pill sits at the bottom), then below, then the
7133
+ // left-aligned variants. The positioner flips/clamps to keep it in view.
7134
+ overlayPositions = [
7135
+ { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -8 },
7136
+ { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 8 },
7137
+ { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -8 },
7138
+ { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 8 },
7139
+ ];
7140
+ panelClasses = computed(() => {
7141
+ const extra = this.panelClass();
7142
+ const list = Array.isArray(extra) ? extra : extra ? [extra] : [];
7143
+ return ['chat-select__overlay', ...list];
7144
+ }, ...(ngDevMode ? [{ debugName: "panelClasses" }] : []));
6647
7145
  currentLabel = computed(() => {
6648
7146
  const v = this.value();
6649
- const match = this.options().find((o) => o.value === v);
6650
- return match?.label ?? this.placeholder();
7147
+ return this.options().find((o) => o.value === v)?.label ?? this.placeholder();
6651
7148
  }, ...(ngDevMode ? [{ debugName: "currentLabel" }] : []));
6652
7149
  hostEl = inject(ElementRef).nativeElement;
6653
7150
  document = inject(DOCUMENT);
6654
- destroyRef = inject(DestroyRef);
6655
- constructor() {
6656
- let onDocClick = null;
6657
- effect(() => {
6658
- const isOpen = this.open();
6659
- const win = this.document.defaultView;
6660
- if (!win)
6661
- return;
6662
- if (isOpen && !onDocClick) {
6663
- onDocClick = (e) => {
6664
- const path = e.composedPath?.() ?? [];
6665
- if (!path.includes(this.hostEl)) {
6666
- this.open.set(false);
6667
- }
6668
- };
6669
- win.addEventListener('mousedown', onDocClick, true);
6670
- }
6671
- else if (!isOpen && onDocClick) {
6672
- win.removeEventListener('mousedown', onDocClick, true);
6673
- onDocClick = null;
6674
- }
6675
- });
6676
- this.destroyRef.onDestroy(() => {
6677
- if (onDocClick) {
6678
- const win = this.document.defaultView;
6679
- win?.removeEventListener('mousedown', onDocClick, true);
6680
- onDocClick = null;
6681
- }
6682
- });
7151
+ // The overlay primitive emits the pane element on attach; options live there
7152
+ // (portaled out of the host), so option queries go through it.
7153
+ menuPane = null;
7154
+ onAttached(pane) {
7155
+ this.menuPane = pane;
7156
+ this.focusOption(0);
6683
7157
  }
6684
7158
  toggle() {
6685
7159
  if (this.disabled())
@@ -6695,10 +7169,6 @@ class ChatSelectComponent {
6695
7169
  onTriggerKeydown(e) {
6696
7170
  if (this.disabled())
6697
7171
  return;
6698
- // Escape closes an open menu when focus is still on the trigger
6699
- // (e.g. user clicked to open, then pressed Escape without arrowing
6700
- // into the menu). Caught by live browser smoke — without this, click
6701
- // + Escape leaves the menu open until the user clicks outside.
6702
7172
  if (e.key === 'Escape' && this.open()) {
6703
7173
  e.preventDefault();
6704
7174
  this.open.set(false);
@@ -6707,14 +7177,14 @@ class ChatSelectComponent {
6707
7177
  if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {
6708
7178
  e.preventDefault();
6709
7179
  this.open.set(true);
6710
- requestAnimationFrame(() => this.focusOption(0));
7180
+ // focus happens in onAttached once the pane is live
6711
7181
  }
6712
7182
  }
6713
7183
  onMenuKeydown(e) {
6714
7184
  if (e.key === 'Escape') {
6715
7185
  e.preventDefault();
6716
7186
  this.open.set(false);
6717
- this.focusTrigger();
7187
+ this.queryTrigger()?.focus();
6718
7188
  return;
6719
7189
  }
6720
7190
  if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {
@@ -6731,11 +7201,7 @@ class ChatSelectComponent {
6731
7201
  }
6732
7202
  }
6733
7203
  focusOption(index) {
6734
- const opts = this.queryOptions();
6735
- opts[index]?.focus();
6736
- }
6737
- focusTrigger() {
6738
- this.queryTrigger()?.focus();
7204
+ this.queryOptions()[index]?.focus();
6739
7205
  }
6740
7206
  moveFocus(dir) {
6741
7207
  const opts = this.queryOptions().filter((b) => !b.disabled);
@@ -6743,24 +7209,27 @@ class ChatSelectComponent {
6743
7209
  return;
6744
7210
  const active = this.document.activeElement;
6745
7211
  const idx = active ? opts.indexOf(active) : -1;
6746
- const next = (idx + dir + opts.length) % opts.length;
6747
- opts[next]?.focus();
7212
+ opts[(idx + dir + opts.length) % opts.length]?.focus();
6748
7213
  }
6749
7214
  queryOptions() {
6750
- return Array.from(this.hostEl.querySelectorAll('.chat-select__option'));
7215
+ const root = this.menuPane;
7216
+ return root ? Array.from(root.querySelectorAll('.chat-select__option')) : [];
6751
7217
  }
6752
7218
  queryTrigger() {
6753
7219
  return this.hostEl.querySelector('.chat-select__trigger');
6754
7220
  }
6755
7221
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6756
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: ChatSelectComponent, isStandalone: true, selector: "chat-select", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, menuLabel: { classPropertyName: "menuLabel", publicName: "menuLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, ngImport: i0, template: `
7222
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: ChatSelectComponent, isStandalone: true, selector: "chat-select", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, menuLabel: { classPropertyName: "menuLabel", publicName: "menuLabel", isSignal: true, isRequired: false, transformFunction: null }, panelClass: { classPropertyName: "panelClass", publicName: "panelClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, ngImport: i0, template: `
6757
7223
  <button
6758
7224
  type="button"
6759
7225
  class="chat-select__trigger"
7226
+ chatOverlayOrigin
7227
+ #origin="chatOverlayOrigin"
6760
7228
  [class.is-open]="open()"
6761
7229
  [disabled]="disabled()"
6762
7230
  [attr.aria-haspopup]="'listbox'"
6763
7231
  [attr.aria-expanded]="open()"
7232
+ [attr.aria-controls]="open() ? menuId : null"
6764
7233
  (click)="toggle()"
6765
7234
  (keydown)="onTriggerKeydown($event)"
6766
7235
  >
@@ -6769,11 +7238,21 @@ class ChatSelectComponent {
6769
7238
  <path d="M4 6l4 4 4-4" stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />
6770
7239
  </svg>
6771
7240
  </button>
6772
- @if (open()) {
7241
+ <ng-template
7242
+ chatConnectedOverlay
7243
+ [chatOverlayOrigin]="origin"
7244
+ [chatOverlayOpen]="open()"
7245
+ [chatOverlayPositions]="overlayPositions"
7246
+ [chatOverlayPanelClass]="panelClasses()"
7247
+ (chatOverlayAttached)="onAttached($event)"
7248
+ (chatOverlayOutsideClick)="open.set(false)"
7249
+ (chatOverlayDetach)="open.set(false)"
7250
+ >
6773
7251
  <div
6774
7252
  class="chat-select__menu"
6775
7253
  role="listbox"
6776
7254
  tabindex="-1"
7255
+ [id]="menuId"
6777
7256
  [attr.aria-label]="menuLabel() ?? placeholder()"
6778
7257
  (keydown)="onMenuKeydown($event)"
6779
7258
  >
@@ -6794,19 +7273,22 @@ class ChatSelectComponent {
6794
7273
  </button>
6795
7274
  }
6796
7275
  </div>
6797
- }
6798
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:inline-block;position:relative}.chat-select__trigger{height:32px;padding:0 10px;border:0;border-radius:9999px;background:transparent;color:var(--ngaf-chat-text-muted);font:inherit;font-size:var(--ngaf-chat-font-size-sm);display:inline-flex;align-items:center;gap:4px;cursor:pointer;transition:background .12s ease,color .12s ease}.chat-select__trigger:hover:not(:disabled){background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text)}.chat-select__trigger:disabled{opacity:.5;cursor:not-allowed}.chat-select__chevron{width:12px;height:12px;transition:transform .12s ease;flex:none}.chat-select__trigger.is-open .chat-select__chevron{transform:rotate(180deg)}.chat-select__menu{position:absolute;bottom:calc(100% + 8px);right:0;min-width:180px;max-height:320px;overflow-y:auto;background:var(--ngaf-chat-surface);border:1px solid var(--ngaf-chat-separator);border-radius:12px;box-shadow:var(--ngaf-chat-shadow-lg);padding:4px;z-index:10}.chat-select__option{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;text-align:left;border:0;background:transparent;padding:8px 10px;border-radius:8px;color:var(--ngaf-chat-text);font:inherit;font-size:var(--ngaf-chat-font-size-sm);cursor:pointer}.chat-select__option-desc{font-size:var(--ngaf-chat-font-size-xs);color:var(--ngaf-chat-text-muted);line-height:1.3;white-space:normal}.chat-select__option:hover:not(:disabled),.chat-select__option:focus-visible{background:var(--ngaf-chat-surface-alt);outline:none}.chat-select__option.is-active{background:var(--ngaf-chat-surface-alt);font-weight:500}.chat-select__option:disabled{opacity:.4;cursor:not-allowed}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7276
+ </ng-template>
7277
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:inline-block;position:relative}.chat-select__trigger{height:32px;padding:0 10px;border:0;border-radius:9999px;background:transparent;color:var(--tplane-chat-text-muted);font:inherit;font-size:var(--tplane-chat-font-size-sm);display:inline-flex;align-items:center;gap:4px;cursor:pointer;transition:background .12s ease,color .12s ease}.chat-select__trigger:hover:not(:disabled){background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text)}.chat-select__trigger:disabled{opacity:.5;cursor:not-allowed}.chat-select__chevron{width:12px;height:12px;transition:transform .12s ease;flex:none}.chat-select__trigger.is-open .chat-select__chevron{transform:rotate(180deg)}.chat-select__menu{min-width:180px;max-height:320px;overflow-y:auto;background:var(--tplane-chat-surface);border:1px solid var(--tplane-chat-separator);border-radius:12px;box-shadow:var(--tplane-chat-shadow-lg);padding:4px;box-sizing:border-box}.chat-select__option{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;text-align:left;border:0;background:transparent;padding:8px 10px;border-radius:8px;color:var(--tplane-chat-text);font:inherit;font-size:var(--tplane-chat-font-size-sm);cursor:pointer}.chat-select__option-desc{font-size:var(--tplane-chat-font-size-xs);color:var(--tplane-chat-text-muted);line-height:1.3;white-space:normal}.chat-select__option:hover:not(:disabled),.chat-select__option:focus-visible{background:var(--tplane-chat-surface-alt);outline:none}.chat-select__option.is-active{background:var(--tplane-chat-surface-alt);font-weight:500}.chat-select__option:disabled{opacity:.4;cursor:not-allowed}\n"], dependencies: [{ kind: "directive", type: ChatConnectedOverlayDirective, selector: "[chatConnectedOverlay]", inputs: ["chatOverlayOrigin", "chatOverlayOpen", "chatOverlayPositions", "chatOverlayPanelClass"], outputs: ["chatOverlayAttached", "chatOverlayOutsideClick", "chatOverlayDetach"] }, { kind: "directive", type: ChatOverlayOriginDirective, selector: "[chatOverlayOrigin]", exportAs: ["chatOverlayOrigin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6799
7278
  }
6800
7279
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatSelectComponent, decorators: [{
6801
7280
  type: Component,
6802
- args: [{ selector: 'chat-select', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
7281
+ args: [{ selector: 'chat-select', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [ChatConnectedOverlayDirective, ChatOverlayOriginDirective], template: `
6803
7282
  <button
6804
7283
  type="button"
6805
7284
  class="chat-select__trigger"
7285
+ chatOverlayOrigin
7286
+ #origin="chatOverlayOrigin"
6806
7287
  [class.is-open]="open()"
6807
7288
  [disabled]="disabled()"
6808
7289
  [attr.aria-haspopup]="'listbox'"
6809
7290
  [attr.aria-expanded]="open()"
7291
+ [attr.aria-controls]="open() ? menuId : null"
6810
7292
  (click)="toggle()"
6811
7293
  (keydown)="onTriggerKeydown($event)"
6812
7294
  >
@@ -6815,11 +7297,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
6815
7297
  <path d="M4 6l4 4 4-4" stroke="currentColor" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />
6816
7298
  </svg>
6817
7299
  </button>
6818
- @if (open()) {
7300
+ <ng-template
7301
+ chatConnectedOverlay
7302
+ [chatOverlayOrigin]="origin"
7303
+ [chatOverlayOpen]="open()"
7304
+ [chatOverlayPositions]="overlayPositions"
7305
+ [chatOverlayPanelClass]="panelClasses()"
7306
+ (chatOverlayAttached)="onAttached($event)"
7307
+ (chatOverlayOutsideClick)="open.set(false)"
7308
+ (chatOverlayDetach)="open.set(false)"
7309
+ >
6819
7310
  <div
6820
7311
  class="chat-select__menu"
6821
7312
  role="listbox"
6822
7313
  tabindex="-1"
7314
+ [id]="menuId"
6823
7315
  [attr.aria-label]="menuLabel() ?? placeholder()"
6824
7316
  (keydown)="onMenuKeydown($event)"
6825
7317
  >
@@ -6840,9 +7332,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
6840
7332
  </button>
6841
7333
  }
6842
7334
  </div>
6843
- }
6844
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:inline-block;position:relative}.chat-select__trigger{height:32px;padding:0 10px;border:0;border-radius:9999px;background:transparent;color:var(--ngaf-chat-text-muted);font:inherit;font-size:var(--ngaf-chat-font-size-sm);display:inline-flex;align-items:center;gap:4px;cursor:pointer;transition:background .12s ease,color .12s ease}.chat-select__trigger:hover:not(:disabled){background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text)}.chat-select__trigger:disabled{opacity:.5;cursor:not-allowed}.chat-select__chevron{width:12px;height:12px;transition:transform .12s ease;flex:none}.chat-select__trigger.is-open .chat-select__chevron{transform:rotate(180deg)}.chat-select__menu{position:absolute;bottom:calc(100% + 8px);right:0;min-width:180px;max-height:320px;overflow-y:auto;background:var(--ngaf-chat-surface);border:1px solid var(--ngaf-chat-separator);border-radius:12px;box-shadow:var(--ngaf-chat-shadow-lg);padding:4px;z-index:10}.chat-select__option{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;text-align:left;border:0;background:transparent;padding:8px 10px;border-radius:8px;color:var(--ngaf-chat-text);font:inherit;font-size:var(--ngaf-chat-font-size-sm);cursor:pointer}.chat-select__option-desc{font-size:var(--ngaf-chat-font-size-xs);color:var(--ngaf-chat-text-muted);line-height:1.3;white-space:normal}.chat-select__option:hover:not(:disabled),.chat-select__option:focus-visible{background:var(--ngaf-chat-surface-alt);outline:none}.chat-select__option.is-active{background:var(--ngaf-chat-surface-alt);font-weight:500}.chat-select__option:disabled{opacity:.4;cursor:not-allowed}\n"] }]
6845
- }], ctorParameters: () => [], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], menuLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "menuLabel", required: false }] }] } });
7335
+ </ng-template>
7336
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:inline-block;position:relative}.chat-select__trigger{height:32px;padding:0 10px;border:0;border-radius:9999px;background:transparent;color:var(--tplane-chat-text-muted);font:inherit;font-size:var(--tplane-chat-font-size-sm);display:inline-flex;align-items:center;gap:4px;cursor:pointer;transition:background .12s ease,color .12s ease}.chat-select__trigger:hover:not(:disabled){background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text)}.chat-select__trigger:disabled{opacity:.5;cursor:not-allowed}.chat-select__chevron{width:12px;height:12px;transition:transform .12s ease;flex:none}.chat-select__trigger.is-open .chat-select__chevron{transform:rotate(180deg)}.chat-select__menu{min-width:180px;max-height:320px;overflow-y:auto;background:var(--tplane-chat-surface);border:1px solid var(--tplane-chat-separator);border-radius:12px;box-shadow:var(--tplane-chat-shadow-lg);padding:4px;box-sizing:border-box}.chat-select__option{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;text-align:left;border:0;background:transparent;padding:8px 10px;border-radius:8px;color:var(--tplane-chat-text);font:inherit;font-size:var(--tplane-chat-font-size-sm);cursor:pointer}.chat-select__option-desc{font-size:var(--tplane-chat-font-size-xs);color:var(--tplane-chat-text-muted);line-height:1.3;white-space:normal}.chat-select__option:hover:not(:disabled),.chat-select__option:focus-visible{background:var(--tplane-chat-surface-alt);outline:none}.chat-select__option.is-active{background:var(--tplane-chat-surface-alt);font-weight:500}.chat-select__option:disabled{opacity:.4;cursor:not-allowed}\n"] }]
7337
+ }], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], menuLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "menuLabel", required: false }] }], panelClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelClass", required: false }] }] } });
6846
7338
 
6847
7339
  // SPDX-License-Identifier: MIT
6848
7340
  const PACKAGE_NAME = '@threadplane/chat';
@@ -7344,7 +7836,7 @@ class A2uiDefaultFallbackComponent {
7344
7836
  <div class="a2ui-default-fallback__row"></div>
7345
7837
  </div>
7346
7838
  </div>
7347
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block;width:100%}.a2ui-default-fallback{border:1px solid var(--ngaf-chat-separator);border-radius:10px;padding:14px;background:var(--ngaf-chat-surface-alt)}.a2ui-default-fallback__label{font-size:12px;color:var(--ngaf-chat-text-muted);margin-bottom:10px;display:flex;align-items:center;gap:6px}.a2ui-default-fallback__rows{display:flex;flex-direction:column;gap:8px}.a2ui-default-fallback__row{height:10px;border-radius:5px;background:linear-gradient(90deg,var(--ngaf-chat-separator) 0%,color-mix(in srgb,var(--ngaf-chat-separator) 70%,transparent) 50%,var(--ngaf-chat-separator) 100%);background-size:200% 100%;animation:a2ui-default-fallback-shimmer 1.4s ease-in-out infinite}.a2ui-default-fallback__row:nth-child(1){width:70%}.a2ui-default-fallback__row:nth-child(2){width:90%}.a2ui-default-fallback__row:nth-child(3){width:50%}@keyframes a2ui-default-fallback-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7839
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block;width:100%}.a2ui-default-fallback{border:1px solid var(--tplane-chat-separator);border-radius:10px;padding:14px;background:var(--tplane-chat-surface-alt)}.a2ui-default-fallback__label{font-size:12px;color:var(--tplane-chat-text-muted);margin-bottom:10px;display:flex;align-items:center;gap:6px}.a2ui-default-fallback__rows{display:flex;flex-direction:column;gap:8px}.a2ui-default-fallback__row{height:10px;border-radius:5px;background:linear-gradient(90deg,var(--tplane-chat-separator) 0%,color-mix(in srgb,var(--tplane-chat-separator) 70%,transparent) 50%,var(--tplane-chat-separator) 100%);background-size:200% 100%;animation:a2ui-default-fallback-shimmer 1.4s ease-in-out infinite}.a2ui-default-fallback__row:nth-child(1){width:70%}.a2ui-default-fallback__row:nth-child(2){width:90%}.a2ui-default-fallback__row:nth-child(3){width:50%}@keyframes a2ui-default-fallback-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7348
7840
  }
7349
7841
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: A2uiDefaultFallbackComponent, decorators: [{
7350
7842
  type: Component,
@@ -7360,7 +7852,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
7360
7852
  <div class="a2ui-default-fallback__row"></div>
7361
7853
  </div>
7362
7854
  </div>
7363
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block;width:100%}.a2ui-default-fallback{border:1px solid var(--ngaf-chat-separator);border-radius:10px;padding:14px;background:var(--ngaf-chat-surface-alt)}.a2ui-default-fallback__label{font-size:12px;color:var(--ngaf-chat-text-muted);margin-bottom:10px;display:flex;align-items:center;gap:6px}.a2ui-default-fallback__rows{display:flex;flex-direction:column;gap:8px}.a2ui-default-fallback__row{height:10px;border-radius:5px;background:linear-gradient(90deg,var(--ngaf-chat-separator) 0%,color-mix(in srgb,var(--ngaf-chat-separator) 70%,transparent) 50%,var(--ngaf-chat-separator) 100%);background-size:200% 100%;animation:a2ui-default-fallback-shimmer 1.4s ease-in-out infinite}.a2ui-default-fallback__row:nth-child(1){width:70%}.a2ui-default-fallback__row:nth-child(2){width:90%}.a2ui-default-fallback__row:nth-child(3){width:50%}@keyframes a2ui-default-fallback-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}\n"] }]
7855
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block;width:100%}.a2ui-default-fallback{border:1px solid var(--tplane-chat-separator);border-radius:10px;padding:14px;background:var(--tplane-chat-surface-alt)}.a2ui-default-fallback__label{font-size:12px;color:var(--tplane-chat-text-muted);margin-bottom:10px;display:flex;align-items:center;gap:6px}.a2ui-default-fallback__rows{display:flex;flex-direction:column;gap:8px}.a2ui-default-fallback__row{height:10px;border-radius:5px;background:linear-gradient(90deg,var(--tplane-chat-separator) 0%,color-mix(in srgb,var(--tplane-chat-separator) 70%,transparent) 50%,var(--tplane-chat-separator) 100%);background-size:200% 100%;animation:a2ui-default-fallback-shimmer 1.4s ease-in-out infinite}.a2ui-default-fallback__row:nth-child(1){width:70%}.a2ui-default-fallback__row:nth-child(2){width:90%}.a2ui-default-fallback__row:nth-child(3){width:50%}@keyframes a2ui-default-fallback-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}\n"] }]
7364
7856
  }] });
7365
7857
 
7366
7858
  // SPDX-License-Identifier: MIT
@@ -7901,7 +8393,7 @@ function isTraceEnabled() {
7901
8393
  function trace(...args) {
7902
8394
  if (isTraceEnabled()) {
7903
8395
  // eslint-disable-next-line no-console
7904
- console.debug('[ngaf-chat-stream]', ...args);
8396
+ console.debug('[tplane-chat-stream]', ...args);
7905
8397
  }
7906
8398
  }
7907
8399
 
@@ -8791,6 +9283,62 @@ class ChatComponent {
8791
9283
  const text = typeof message.content === 'string' ? message.content : '';
8792
9284
  return text.length === 0;
8793
9285
  }
9286
+ /** The nearest preceding assistant message (skipping hidden tool messages), or undefined. */
9287
+ prevAssistant(msgs, index) {
9288
+ for (let j = index - 1; j >= 0; j--) {
9289
+ if (msgs[j].role === 'tool')
9290
+ continue;
9291
+ return msgs[j].role === 'assistant' ? msgs[j] : undefined;
9292
+ }
9293
+ return undefined;
9294
+ }
9295
+ /**
9296
+ * True when message[index] starts a reasoning RUN — a maximal sequence of
9297
+ * consecutive assistant reasoning steps separated only by (hidden) tool
9298
+ * messages. The merged reasoning pill renders once, here.
9299
+ */
9300
+ reasoningRunStart(index) {
9301
+ const msgs = this.agent().messages();
9302
+ if (!msgs[index]?.reasoning)
9303
+ return false;
9304
+ return !this.prevAssistant(msgs, index)?.reasoning;
9305
+ }
9306
+ /**
9307
+ * Aggregate the reasoning RUN starting at `index`: joins each step's
9308
+ * reasoning, sums durations, counts steps, and computes the streaming flag
9309
+ * and the merged label when N > 1 ("Thought for {total} · {N} steps", or
9310
+ * just "{N} steps" when no step reported timing).
9311
+ */
9312
+ reasoningRun(index) {
9313
+ const msgs = this.agent().messages();
9314
+ const steps = [];
9315
+ for (let j = index; j < msgs.length; j++) {
9316
+ const m = msgs[j];
9317
+ if (m.role === 'tool')
9318
+ continue; // skip hidden tool messages
9319
+ if (m.role === 'assistant' && m.reasoning) {
9320
+ steps.push({ msg: m, idx: j });
9321
+ continue;
9322
+ }
9323
+ break; // any other message ends the run
9324
+ }
9325
+ const content = steps.map((s) => s.msg.reasoning ?? '').filter(Boolean).join('\n\n');
9326
+ const durations = steps
9327
+ .map((s) => s.msg.reasoningDurationMs)
9328
+ .filter((d) => typeof d === 'number');
9329
+ const durationMs = durations.length ? durations.reduce((a, b) => a + b, 0) : undefined;
9330
+ const last = steps[steps.length - 1];
9331
+ const streaming = last ? this.isReasoningStreaming(last.msg, last.idx) : false;
9332
+ // Only claim a duration when at least one step reported timing. Otherwise
9333
+ // "Thought for <1s" would read as "fast" when it really means "unknown", so
9334
+ // drop the duration phrase and label by step count alone.
9335
+ const label = steps.length > 1
9336
+ ? durationMs !== undefined
9337
+ ? `Thought for ${formatDuration(durationMs)} · ${steps.length} steps`
9338
+ : `${steps.length} steps`
9339
+ : undefined;
9340
+ return { content, durationMs, streaming, label };
9341
+ }
8794
9342
  classifiers = new Map();
8795
9343
  destroyRef = inject(DestroyRef);
8796
9344
  injector = inject(Injector);
@@ -8839,8 +9387,8 @@ class ChatComponent {
8839
9387
  return last?.role === 'assistant';
8840
9388
  }, ...(ngDevMode ? [{ debugName: "currentAssistantStreaming" }] : []));
8841
9389
  constructor() {
8842
- // Inject the chat lib's root CSS custom properties (--ngaf-chat-bg,
8843
- // --ngaf-chat-surface, --ngaf-chat-radius-input, etc.) the first
9390
+ // Inject the chat lib's root CSS custom properties (--tplane-chat-bg,
9391
+ // --tplane-chat-surface, --tplane-chat-radius-input, etc.) the first
8844
9392
  // time any chat composition is constructed. The module-eval side
8845
9393
  // effect that previously handled this is unreliable under
8846
9394
  // aggressive production tree-shaking — bundlers that don't see
@@ -9350,11 +9898,19 @@ class ChatComponent {
9350
9898
  [streaming]="agent().isLoading() && i === agent().messages().length - 1"
9351
9899
  [current]="i === agent().messages().length - 1"
9352
9900
  >
9353
- @if (message.reasoning) {
9901
+ <!-- Reasoning is merged across a run of consecutive (tool-
9902
+ separated) reasoning steps and rendered ONCE at the run's
9903
+ first step as "Thought for {total} · {N} steps", so a
9904
+ multi-step agent shows one compact pill instead of a
9905
+ stack of "Thought for 1s" chips. Single-step turns render
9906
+ a normal "Thought for {duration}" pill. -->
9907
+ @if (message.reasoning && reasoningRunStart(i)) {
9908
+ @let run = reasoningRun(i);
9354
9909
  <chat-reasoning
9355
- [content]="message.reasoning"
9356
- [isStreaming]="isReasoningStreaming(message, i)"
9357
- [durationMs]="message.reasoningDurationMs"
9910
+ [content]="run.content"
9911
+ [isStreaming]="run.streaming"
9912
+ [durationMs]="run.durationMs"
9913
+ [label]="run.label"
9358
9914
  />
9359
9915
  }
9360
9916
  <chat-tool-calls [agent]="agent()" [message]="message" [excludeToolNames]="excludedToolNames()">
@@ -9401,14 +9957,21 @@ class ChatComponent {
9401
9957
  />
9402
9958
  }
9403
9959
  }
9404
- <chat-message-actions
9405
- chatMessageControls
9406
- [content]="content"
9407
- [disabled]="agent().isLoading()"
9408
- (regenerate)="onRegenerate(i)"
9409
- (rate)="onRate(message, $event)"
9410
- (contentCopied)="onCopy(message, $event)"
9411
- />
9960
+ <!-- Only show message actions when there is copyable assistant
9961
+ text. Content-less messages (a bare tool call or a subagent
9962
+ delegation card) have nothing to copy/regenerate/rate, so the
9963
+ actions panel is pure whitespace there — suppress it to keep
9964
+ the stream compact. -->
9965
+ @if (content.trim()) {
9966
+ <chat-message-actions
9967
+ chatMessageControls
9968
+ [content]="content"
9969
+ [disabled]="agent().isLoading()"
9970
+ (regenerate)="onRegenerate(i)"
9971
+ (rate)="onRate(message, $event)"
9972
+ (contentCopied)="onCopy(message, $event)"
9973
+ />
9974
+ }
9412
9975
  </chat-message>
9413
9976
  </ng-template>
9414
9977
 
@@ -9457,7 +10020,7 @@ class ChatComponent {
9457
10020
  </div>
9458
10021
  </div>
9459
10022
  }
9460
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:flex;flex-direction:column;flex:1 1 auto;height:100%;min-height:0;max-height:100%;overflow:hidden;background:var(--ngaf-chat-bg)}:host>chat-welcome{display:flex;flex:1 1 auto;width:100%}.chat-shell{display:flex;flex:1;min-height:0;overflow:hidden}.chat-shell__sidebar{width:240px;flex-shrink:0;border-right:1px solid var(--ngaf-chat-separator);background:var(--ngaf-chat-surface-alt);overflow-y:auto;display:none}@media(min-width:768px){.chat-shell__sidebar{display:block}}.chat-shell__main{flex:1;min-width:0;display:flex;flex-direction:column;min-height:0}.chat-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:60px 20px;color:var(--ngaf-chat-text-muted);text-align:center;flex:1;min-height:0}.chat-empty[hidden]{display:none}.chat-empty__title{font-size:1.125rem;font-weight:500;color:var(--ngaf-chat-text);margin:0}.chat-empty__sub{margin:0;font-size:var(--ngaf-chat-font-size-sm)}.chat-scroll{flex:1;min-height:0;overflow-y:auto;padding-top:var(--ngaf-chat-edge-pad)}.chat-scroll::-webkit-scrollbar{width:6px}.chat-scroll::-webkit-scrollbar-thumb{background:var(--ngaf-chat-separator);border-radius:10px}[chatFooter]{padding-bottom:var(--ngaf-chat-edge-pad)}.chat-footer-wrap{position:relative}\n"], dependencies: [{ kind: "component", type: ChatWindowComponent, selector: "chat-window" }, { kind: "component", type: ChatMessageListComponent, selector: "chat-message-list", inputs: ["agent"] }, { kind: "directive", type: MessageTemplateDirective, selector: "ng-template[chatMessageTemplate]", inputs: ["chatMessageTemplate"] }, { kind: "component", type: ChatMessageComponent, selector: "chat-message", inputs: ["role", "current", "streaming", "prevRole", "message"] }, { kind: "component", type: ChatInputComponent, selector: "chat-input", inputs: ["agent", "submitOnEnter", "placeholder", "showStopButton"], outputs: ["submitted", "stopped"] }, { kind: "component", type: ChatTypingIndicatorComponent, selector: "chat-typing-indicator", inputs: ["agent"] }, { kind: "component", type: ChatErrorComponent, selector: "chat-error", inputs: ["agent"] }, { kind: "component", type: ChatThreadListComponent, selector: "chat-thread-list", inputs: ["threads", "activeThreadId", "showNewThreadButton", "actions", "mode", "projects"], outputs: ["threadSelected", "newThreadRequested"] }, { kind: "component", type: ChatGenerativeUiComponent, selector: "chat-generative-ui", inputs: ["spec", "registry", "store", "handlers", "loading"], outputs: ["events"] }, { kind: "component", type: ChatStreamingMdComponent, selector: "chat-streaming-md", inputs: ["content", "streaming", "viewRegistry"] }, { kind: "component", type: ChatToolCallsComponent, selector: "chat-tool-calls", inputs: ["agent", "message", "grouping", "groupSummary", "excludeToolNames"] }, { kind: "component", type: ChatToolViewsComponent, selector: "chat-tool-views", inputs: ["agent", "message", "views", "store", "handlers"], outputs: ["events"] }, { kind: "component", type: A2uiSurfaceComponent, selector: "a2ui-surface", inputs: ["surface", "state", "catalog", "handlers", "surfaceFallback"], outputs: ["events", "action"] }, { kind: "component", type: ChatMessageActionsComponent, selector: "chat-message-actions", inputs: ["content", "disabled"], outputs: ["regenerate", "rate", "contentCopied"] }, { kind: "component", type: ChatWelcomeComponent, selector: "chat-welcome" }, { kind: "component", type: ChatSelectComponent, selector: "chat-select", inputs: ["options", "value", "placeholder", "disabled", "menuLabel"], outputs: ["valueChange"] }, { kind: "component", type: ChatReasoningComponent, selector: "chat-reasoning", inputs: ["content", "isStreaming", "durationMs", "label", "defaultExpanded"] }, { kind: "component", type: ChatScrollBubbleComponent, selector: "chat-scroll-bubble", inputs: ["mode"], outputs: ["clicked"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
10023
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:flex;flex-direction:column;flex:1 1 auto;height:100%;min-height:0;max-height:100%;overflow:hidden;background:var(--tplane-chat-bg)}:host>chat-welcome{display:flex;flex:1 1 auto;width:100%}.chat-shell{display:flex;flex:1;min-height:0;overflow:hidden}.chat-shell__sidebar{width:240px;flex-shrink:0;border-right:1px solid var(--tplane-chat-separator);background:var(--tplane-chat-surface-alt);overflow-y:auto;display:none}@media(min-width:768px){.chat-shell__sidebar{display:block}}.chat-shell__main{flex:1;min-width:0;display:flex;flex-direction:column;min-height:0}.chat-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:60px 20px;color:var(--tplane-chat-text-muted);text-align:center;flex:1;min-height:0}.chat-empty[hidden]{display:none}.chat-empty__title{font-size:1.125rem;font-weight:500;color:var(--tplane-chat-text);margin:0}.chat-empty__sub{margin:0;font-size:var(--tplane-chat-font-size-sm)}.chat-scroll{flex:1;min-height:0;overflow-y:auto;padding-top:var(--tplane-chat-edge-pad)}.chat-scroll::-webkit-scrollbar{width:6px}.chat-scroll::-webkit-scrollbar-thumb{background:var(--tplane-chat-separator);border-radius:10px}[chatFooter]{padding-bottom:var(--tplane-chat-edge-pad)}.chat-footer-wrap{position:relative}\n"], dependencies: [{ kind: "component", type: ChatWindowComponent, selector: "chat-window" }, { kind: "component", type: ChatMessageListComponent, selector: "chat-message-list", inputs: ["agent"] }, { kind: "directive", type: MessageTemplateDirective, selector: "ng-template[chatMessageTemplate]", inputs: ["chatMessageTemplate"] }, { kind: "component", type: ChatMessageComponent, selector: "chat-message", inputs: ["role", "current", "streaming", "prevRole", "message"] }, { kind: "component", type: ChatInputComponent, selector: "chat-input", inputs: ["agent", "submitOnEnter", "placeholder", "showStopButton"], outputs: ["submitted", "stopped"] }, { kind: "component", type: ChatTypingIndicatorComponent, selector: "chat-typing-indicator", inputs: ["agent"] }, { kind: "component", type: ChatErrorComponent, selector: "chat-error", inputs: ["agent"] }, { kind: "component", type: ChatThreadListComponent, selector: "chat-thread-list", inputs: ["threads", "activeThreadId", "showNewThreadButton", "actions", "mode", "projects"], outputs: ["threadSelected", "newThreadRequested"] }, { kind: "component", type: ChatGenerativeUiComponent, selector: "chat-generative-ui", inputs: ["spec", "registry", "store", "handlers", "loading"], outputs: ["events"] }, { kind: "component", type: ChatStreamingMdComponent, selector: "chat-streaming-md", inputs: ["content", "streaming", "viewRegistry"] }, { kind: "component", type: ChatToolCallsComponent, selector: "chat-tool-calls", inputs: ["agent", "message", "grouping", "groupSummary", "excludeToolNames"] }, { kind: "component", type: ChatToolViewsComponent, selector: "chat-tool-views", inputs: ["agent", "message", "views", "store", "handlers"], outputs: ["events"] }, { kind: "component", type: A2uiSurfaceComponent, selector: "a2ui-surface", inputs: ["surface", "state", "catalog", "handlers", "surfaceFallback"], outputs: ["events", "action"] }, { kind: "component", type: ChatMessageActionsComponent, selector: "chat-message-actions", inputs: ["content", "disabled"], outputs: ["regenerate", "rate", "contentCopied"] }, { kind: "component", type: ChatWelcomeComponent, selector: "chat-welcome" }, { kind: "component", type: ChatSelectComponent, selector: "chat-select", inputs: ["options", "value", "placeholder", "disabled", "menuLabel", "panelClass"], outputs: ["valueChange"] }, { kind: "component", type: ChatReasoningComponent, selector: "chat-reasoning", inputs: ["content", "isStreaming", "durationMs", "label", "defaultExpanded"] }, { kind: "component", type: ChatScrollBubbleComponent, selector: "chat-scroll-bubble", inputs: ["mode"], outputs: ["clicked"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
9461
10024
  }
9462
10025
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatComponent, decorators: [{
9463
10026
  type: Component,
@@ -9519,11 +10082,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
9519
10082
  [streaming]="agent().isLoading() && i === agent().messages().length - 1"
9520
10083
  [current]="i === agent().messages().length - 1"
9521
10084
  >
9522
- @if (message.reasoning) {
10085
+ <!-- Reasoning is merged across a run of consecutive (tool-
10086
+ separated) reasoning steps and rendered ONCE at the run's
10087
+ first step as "Thought for {total} · {N} steps", so a
10088
+ multi-step agent shows one compact pill instead of a
10089
+ stack of "Thought for 1s" chips. Single-step turns render
10090
+ a normal "Thought for {duration}" pill. -->
10091
+ @if (message.reasoning && reasoningRunStart(i)) {
10092
+ @let run = reasoningRun(i);
9523
10093
  <chat-reasoning
9524
- [content]="message.reasoning"
9525
- [isStreaming]="isReasoningStreaming(message, i)"
9526
- [durationMs]="message.reasoningDurationMs"
10094
+ [content]="run.content"
10095
+ [isStreaming]="run.streaming"
10096
+ [durationMs]="run.durationMs"
10097
+ [label]="run.label"
9527
10098
  />
9528
10099
  }
9529
10100
  <chat-tool-calls [agent]="agent()" [message]="message" [excludeToolNames]="excludedToolNames()">
@@ -9570,14 +10141,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
9570
10141
  />
9571
10142
  }
9572
10143
  }
9573
- <chat-message-actions
9574
- chatMessageControls
9575
- [content]="content"
9576
- [disabled]="agent().isLoading()"
9577
- (regenerate)="onRegenerate(i)"
9578
- (rate)="onRate(message, $event)"
9579
- (contentCopied)="onCopy(message, $event)"
9580
- />
10144
+ <!-- Only show message actions when there is copyable assistant
10145
+ text. Content-less messages (a bare tool call or a subagent
10146
+ delegation card) have nothing to copy/regenerate/rate, so the
10147
+ actions panel is pure whitespace there — suppress it to keep
10148
+ the stream compact. -->
10149
+ @if (content.trim()) {
10150
+ <chat-message-actions
10151
+ chatMessageControls
10152
+ [content]="content"
10153
+ [disabled]="agent().isLoading()"
10154
+ (regenerate)="onRegenerate(i)"
10155
+ (rate)="onRate(message, $event)"
10156
+ (contentCopied)="onCopy(message, $event)"
10157
+ />
10158
+ }
9581
10159
  </chat-message>
9582
10160
  </ng-template>
9583
10161
 
@@ -9626,7 +10204,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
9626
10204
  </div>
9627
10205
  </div>
9628
10206
  }
9629
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:flex;flex-direction:column;flex:1 1 auto;height:100%;min-height:0;max-height:100%;overflow:hidden;background:var(--ngaf-chat-bg)}:host>chat-welcome{display:flex;flex:1 1 auto;width:100%}.chat-shell{display:flex;flex:1;min-height:0;overflow:hidden}.chat-shell__sidebar{width:240px;flex-shrink:0;border-right:1px solid var(--ngaf-chat-separator);background:var(--ngaf-chat-surface-alt);overflow-y:auto;display:none}@media(min-width:768px){.chat-shell__sidebar{display:block}}.chat-shell__main{flex:1;min-width:0;display:flex;flex-direction:column;min-height:0}.chat-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:60px 20px;color:var(--ngaf-chat-text-muted);text-align:center;flex:1;min-height:0}.chat-empty[hidden]{display:none}.chat-empty__title{font-size:1.125rem;font-weight:500;color:var(--ngaf-chat-text);margin:0}.chat-empty__sub{margin:0;font-size:var(--ngaf-chat-font-size-sm)}.chat-scroll{flex:1;min-height:0;overflow-y:auto;padding-top:var(--ngaf-chat-edge-pad)}.chat-scroll::-webkit-scrollbar{width:6px}.chat-scroll::-webkit-scrollbar-thumb{background:var(--ngaf-chat-separator);border-radius:10px}[chatFooter]{padding-bottom:var(--ngaf-chat-edge-pad)}.chat-footer-wrap{position:relative}\n"] }]
10207
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:flex;flex-direction:column;flex:1 1 auto;height:100%;min-height:0;max-height:100%;overflow:hidden;background:var(--tplane-chat-bg)}:host>chat-welcome{display:flex;flex:1 1 auto;width:100%}.chat-shell{display:flex;flex:1;min-height:0;overflow:hidden}.chat-shell__sidebar{width:240px;flex-shrink:0;border-right:1px solid var(--tplane-chat-separator);background:var(--tplane-chat-surface-alt);overflow-y:auto;display:none}@media(min-width:768px){.chat-shell__sidebar{display:block}}.chat-shell__main{flex:1;min-width:0;display:flex;flex-direction:column;min-height:0}.chat-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:60px 20px;color:var(--tplane-chat-text-muted);text-align:center;flex:1;min-height:0}.chat-empty[hidden]{display:none}.chat-empty__title{font-size:1.125rem;font-weight:500;color:var(--tplane-chat-text);margin:0}.chat-empty__sub{margin:0;font-size:var(--tplane-chat-font-size-sm)}.chat-scroll{flex:1;min-height:0;overflow-y:auto;padding-top:var(--tplane-chat-edge-pad)}.chat-scroll::-webkit-scrollbar{width:6px}.chat-scroll::-webkit-scrollbar-thumb{background:var(--tplane-chat-separator);border-radius:10px}[chatFooter]{padding-bottom:var(--tplane-chat-edge-pad)}.chat-footer-wrap{position:relative}\n"] }]
9630
10208
  }], ctorParameters: () => [], propDecorators: { agent: [{ type: i0.Input, args: [{ isSignal: true, alias: "agent", required: true }] }], views: [{ type: i0.Input, args: [{ isSignal: true, alias: "views", required: false }] }], clientTools: [{ type: i0.Input, args: [{ isSignal: true, alias: "clientTools", required: false }] }], store: [{ type: i0.Input, args: [{ isSignal: true, alias: "store", required: false }] }], handlers: [{ type: i0.Input, args: [{ isSignal: true, alias: "handlers", required: false }] }], threads: [{ type: i0.Input, args: [{ isSignal: true, alias: "threads", required: false }] }], activeThreadId: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeThreadId", required: false }] }], welcomeDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "welcomeDisabled", required: false }] }], modelOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "modelOptions", required: false }] }], showModelPicker: [{ type: i0.Input, args: [{ isSignal: true, alias: "showModelPicker", required: false }] }], selectedModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedModel", required: false }] }, { type: i0.Output, args: ["selectedModelChange"] }], modelPickerPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "modelPickerPlaceholder", required: false }] }], genuiToolNames: [{ type: i0.Input, args: [{ isSignal: true, alias: "genuiToolNames", required: false }] }], threadSelected: [{ type: i0.Output, args: ["threadSelected"] }], renderEvent: [{ type: i0.Output, args: ["renderEvent"] }], regenerate: [{ type: i0.Output, args: ["regenerate"] }], rate: [{ type: i0.Output, args: ["rate"] }], messageCopy: [{ type: i0.Output, args: ["messageCopy"] }], scrollContainer: [{ type: i0.ViewChild, args: ['scrollContainer', { isSignal: true }] }] } });
9631
10209
 
9632
10210
  // libs/chat/src/lib/compositions/chat-popup/chat-popup.component.ts
@@ -9714,7 +10292,7 @@ class ChatPopupComponent {
9714
10292
  <ng-content select="[chatWelcomeSuggestions]" chatWelcomeSuggestions />
9715
10293
  </chat>
9716
10294
  </div>
9717
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{position:fixed;bottom:1rem;right:1rem;z-index:var(--ngaf-chat-z-overlay-content, 30)}.chat-popup__launcher{position:relative}.chat-popup__window{position:fixed;bottom:5rem;right:1rem;width:24rem;height:600px;max-height:calc(100vh - 6rem);background:var(--ngaf-chat-bg);border:1px solid var(--ngaf-chat-separator);border-radius:.75rem;box-shadow:0 5px 40px #00000029;transform-origin:bottom right;transform:scale(.95) translateY(20px);opacity:0;pointer-events:none;transition:transform .2s ease-out,opacity .1s ease-out;overflow:hidden;display:flex;flex-direction:column}.chat-popup__window[data-open=true]{transform:scale(1) translateY(0);opacity:1;pointer-events:auto}@media(max-width:640px){.chat-popup__window{inset:0 auto auto 0;width:100vw;height:100vh;max-height:100vh;border-radius:0}}.chat-popup__close{position:absolute;top:8px;right:8px;width:32px;height:32px;background:transparent;border:0;cursor:pointer;color:var(--ngaf-chat-text-muted);border-radius:50%;z-index:1;display:flex;align-items:center;justify-content:center}.chat-popup__close:hover{background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text)}\n"], dependencies: [{ kind: "component", type: ChatComponent, selector: "chat", inputs: ["agent", "views", "clientTools", "store", "handlers", "threads", "activeThreadId", "welcomeDisabled", "modelOptions", "showModelPicker", "selectedModel", "modelPickerPlaceholder", "genuiToolNames"], outputs: ["selectedModelChange", "threadSelected", "renderEvent", "regenerate", "rate", "messageCopy"] }, { kind: "component", type: ChatLauncherButtonComponent, selector: "chat-launcher-button", outputs: ["clicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
10295
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{position:fixed;bottom:1rem;right:1rem;z-index:var(--tplane-chat-z-overlay-content, 30)}.chat-popup__launcher{position:relative}.chat-popup__window{position:fixed;bottom:5rem;right:1rem;width:24rem;height:600px;max-height:calc(100vh - 6rem);background:var(--tplane-chat-bg);border:1px solid var(--tplane-chat-separator);border-radius:.75rem;box-shadow:0 5px 40px #00000029;transform-origin:bottom right;transform:scale(.95) translateY(20px);opacity:0;pointer-events:none;transition:transform .2s ease-out,opacity .1s ease-out;overflow:hidden;display:flex;flex-direction:column}.chat-popup__window[data-open=true]{transform:scale(1) translateY(0);opacity:1;pointer-events:auto}@media(max-width:640px){.chat-popup__window{inset:0 auto auto 0;width:100vw;height:100vh;max-height:100vh;border-radius:0}}.chat-popup__close{position:absolute;top:8px;right:8px;width:32px;height:32px;background:transparent;border:0;cursor:pointer;color:var(--tplane-chat-text-muted);border-radius:50%;z-index:1;display:flex;align-items:center;justify-content:center}.chat-popup__close:hover{background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text)}\n"], dependencies: [{ kind: "component", type: ChatComponent, selector: "chat", inputs: ["agent", "views", "clientTools", "store", "handlers", "threads", "activeThreadId", "welcomeDisabled", "modelOptions", "showModelPicker", "selectedModel", "modelPickerPlaceholder", "genuiToolNames"], outputs: ["selectedModelChange", "threadSelected", "renderEvent", "regenerate", "rate", "messageCopy"] }, { kind: "component", type: ChatLauncherButtonComponent, selector: "chat-launcher-button", outputs: ["clicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
9718
10296
  }
9719
10297
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatPopupComponent, decorators: [{
9720
10298
  type: Component,
@@ -9739,7 +10317,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
9739
10317
  <ng-content select="[chatWelcomeSuggestions]" chatWelcomeSuggestions />
9740
10318
  </chat>
9741
10319
  </div>
9742
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{position:fixed;bottom:1rem;right:1rem;z-index:var(--ngaf-chat-z-overlay-content, 30)}.chat-popup__launcher{position:relative}.chat-popup__window{position:fixed;bottom:5rem;right:1rem;width:24rem;height:600px;max-height:calc(100vh - 6rem);background:var(--ngaf-chat-bg);border:1px solid var(--ngaf-chat-separator);border-radius:.75rem;box-shadow:0 5px 40px #00000029;transform-origin:bottom right;transform:scale(.95) translateY(20px);opacity:0;pointer-events:none;transition:transform .2s ease-out,opacity .1s ease-out;overflow:hidden;display:flex;flex-direction:column}.chat-popup__window[data-open=true]{transform:scale(1) translateY(0);opacity:1;pointer-events:auto}@media(max-width:640px){.chat-popup__window{inset:0 auto auto 0;width:100vw;height:100vh;max-height:100vh;border-radius:0}}.chat-popup__close{position:absolute;top:8px;right:8px;width:32px;height:32px;background:transparent;border:0;cursor:pointer;color:var(--ngaf-chat-text-muted);border-radius:50%;z-index:1;display:flex;align-items:center;justify-content:center}.chat-popup__close:hover{background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text)}\n"] }]
10320
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{position:fixed;bottom:1rem;right:1rem;z-index:var(--tplane-chat-z-overlay-content, 30)}.chat-popup__launcher{position:relative}.chat-popup__window{position:fixed;bottom:5rem;right:1rem;width:24rem;height:600px;max-height:calc(100vh - 6rem);background:var(--tplane-chat-bg);border:1px solid var(--tplane-chat-separator);border-radius:.75rem;box-shadow:0 5px 40px #00000029;transform-origin:bottom right;transform:scale(.95) translateY(20px);opacity:0;pointer-events:none;transition:transform .2s ease-out,opacity .1s ease-out;overflow:hidden;display:flex;flex-direction:column}.chat-popup__window[data-open=true]{transform:scale(1) translateY(0);opacity:1;pointer-events:auto}@media(max-width:640px){.chat-popup__window{inset:0 auto auto 0;width:100vw;height:100vh;max-height:100vh;border-radius:0}}.chat-popup__close{position:absolute;top:8px;right:8px;width:32px;height:32px;background:transparent;border:0;cursor:pointer;color:var(--tplane-chat-text-muted);border-radius:50%;z-index:1;display:flex;align-items:center;justify-content:center}.chat-popup__close:hover{background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text)}\n"] }]
9743
10321
  }], ctorParameters: () => [], propDecorators: { agent: [{ type: i0.Input, args: [{ isSignal: true, alias: "agent", required: true }] }], views: [{ type: i0.Input, args: [{ isSignal: true, alias: "views", required: false }] }], clientTools: [{ type: i0.Input, args: [{ isSignal: true, alias: "clientTools", required: false }] }], modelOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "modelOptions", required: false }] }], showModelPicker: [{ type: i0.Input, args: [{ isSignal: true, alias: "showModelPicker", required: false }] }], selectedModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedModel", required: false }] }, { type: i0.Output, args: ["selectedModelChange"] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], shortcut: [{ type: i0.Input, args: [{ isSignal: true, alias: "shortcut", required: false }] }], closeOnEscape: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnEscape", required: false }] }] } });
9744
10322
 
9745
10323
  // libs/chat/src/lib/compositions/chat-sidebar/chat-sidebar.component.ts
@@ -9775,8 +10353,8 @@ class ChatSidebarComponent {
9775
10353
  // for the full rationale. Idempotent + lifecycle-guaranteed.
9776
10354
  ensureChatRootStyles();
9777
10355
  // Publish the right-edge claim while the panel is open. Peer panels
9778
- // (e.g. chat-debug) read --ngaf-chat-occupy-right to leave room.
9779
- effect(() => {
10356
+ // (e.g. chat-debug) read --tplane-chat-occupy-right to leave room.
10357
+ effect((onCleanup) => {
9780
10358
  if (typeof document === 'undefined')
9781
10359
  return;
9782
10360
  const html = document.documentElement;
@@ -9786,6 +10364,11 @@ class ChatSidebarComponent {
9786
10364
  else {
9787
10365
  delete html.dataset['threadplaneChatSidebar'];
9788
10366
  }
10367
+ // Clear the global claim when the sidebar is destroyed (not just closed).
10368
+ // Without this, unmounting while open (e.g. switching demo modes) leaves
10369
+ // data-threadplane-chat-sidebar="open" stuck on <html>, so peer panels
10370
+ // keep reserving --tplane-chat-occupy-right and a phantom gap persists.
10371
+ onCleanup(() => { delete html.dataset['threadplaneChatSidebar']; });
9789
10372
  });
9790
10373
  effect((onCleanup) => {
9791
10374
  const closeOnEscape = this.closeOnEscape();
@@ -9832,7 +10415,7 @@ class ChatSidebarComponent {
9832
10415
  <ng-content select="[chatWelcomeSuggestions]" chatWelcomeSuggestions />
9833
10416
  </chat>
9834
10417
  </aside>
9835
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block}.chat-sidebar__content{transition:margin-right .3s ease;min-height:100vh}:host([data-push=\"true\"][data-open=\"true\"]) .chat-sidebar__content{margin-right:28rem}@media(max-width:640px){:host([data-push=\"true\"][data-open=\"true\"]) .chat-sidebar__content{margin-right:0}}.chat-sidebar__panel{position:fixed;top:0;right:0;bottom:var(--ngaf-chat-debug-claim-bottom, 0);width:28rem;background:var(--ngaf-chat-bg);border-left:1px solid var(--ngaf-chat-separator);box-shadow:-8px 0 32px #00000014;transform:translate(100%);transition:transform .2s ease-out,bottom .2s ease-out;z-index:var(--ngaf-chat-z-overlay-content, 30);display:flex;flex-direction:column}.chat-sidebar__panel[data-open=true]{transform:translate(0)}@media(max-width:640px){.chat-sidebar__panel{width:100vw}}.chat-sidebar__panel-header{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 12px;border-bottom:1px solid var(--ngaf-chat-separator);min-height:48px}.chat-sidebar__panel-title{min-width:0;flex:1 1 auto;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--ngaf-chat-text);font-weight:500;font-size:var(--ngaf-chat-font-size-sm)}.chat-sidebar__close{flex:0 0 auto;width:32px;height:32px;background:transparent;border:0;cursor:pointer;color:var(--ngaf-chat-text-muted);border-radius:50%;display:flex;align-items:center;justify-content:center}.chat-sidebar__close:hover{background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text)}.chat-sidebar__launcher{position:fixed;bottom:calc(1rem + var(--ngaf-chat-debug-claim-bottom, 0));right:1rem;z-index:var(--ngaf-chat-z-overlay-content, 30);transition:bottom .2s ease-out}:host([data-open=\"true\"]) .chat-sidebar__launcher{display:none}\n"], dependencies: [{ kind: "component", type: ChatComponent, selector: "chat", inputs: ["agent", "views", "clientTools", "store", "handlers", "threads", "activeThreadId", "welcomeDisabled", "modelOptions", "showModelPicker", "selectedModel", "modelPickerPlaceholder", "genuiToolNames"], outputs: ["selectedModelChange", "threadSelected", "renderEvent", "regenerate", "rate", "messageCopy"] }, { kind: "component", type: ChatLauncherButtonComponent, selector: "chat-launcher-button", outputs: ["clicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
10418
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:flex;height:100%;min-height:0}.chat-sidebar__content{flex:1 1 auto;min-width:0;min-height:0;transition:margin-right .3s ease}:host([data-push=\"true\"][data-open=\"true\"]) .chat-sidebar__content{margin-right:var(--tplane-chat-sidebar-width-drawer, 28rem)}@media(max-width:640px){:host([data-push=\"true\"][data-open=\"true\"]) .chat-sidebar__content{margin-right:0}}.chat-sidebar__panel{position:fixed;top:0;right:0;bottom:var(--tplane-chat-debug-claim-bottom, 0);width:var(--tplane-chat-sidebar-width-drawer, 28rem);background:var(--tplane-chat-bg);border-left:1px solid var(--tplane-chat-separator);box-shadow:-8px 0 32px #00000014;transform:translate(100%);transition:transform .2s ease-out,bottom .2s ease-out;z-index:var(--tplane-chat-z-overlay-content, 30);display:flex;flex-direction:column}.chat-sidebar__panel[data-open=true]{transform:translate(0)}@media(max-width:640px){.chat-sidebar__panel{width:100vw}}.chat-sidebar__panel-header{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 12px;border-bottom:1px solid var(--tplane-chat-separator);min-height:48px}.chat-sidebar__panel-title{min-width:0;flex:1 1 auto;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--tplane-chat-text);font-weight:500;font-size:var(--tplane-chat-font-size-sm)}.chat-sidebar__close{flex:0 0 auto;width:32px;height:32px;background:transparent;border:0;cursor:pointer;color:var(--tplane-chat-text-muted);border-radius:50%;display:flex;align-items:center;justify-content:center}.chat-sidebar__close:hover{background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text)}.chat-sidebar__launcher{position:fixed;bottom:calc(1rem + var(--tplane-chat-debug-claim-bottom, 0));right:1rem;z-index:var(--tplane-chat-z-overlay-content, 30);transition:bottom .2s ease-out}:host([data-open=\"true\"]) .chat-sidebar__launcher{display:none}\n"], dependencies: [{ kind: "component", type: ChatComponent, selector: "chat", inputs: ["agent", "views", "clientTools", "store", "handlers", "threads", "activeThreadId", "welcomeDisabled", "modelOptions", "showModelPicker", "selectedModel", "modelPickerPlaceholder", "genuiToolNames"], outputs: ["selectedModelChange", "threadSelected", "renderEvent", "regenerate", "rate", "messageCopy"] }, { kind: "component", type: ChatLauncherButtonComponent, selector: "chat-launcher-button", outputs: ["clicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
9836
10419
  }
9837
10420
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatSidebarComponent, decorators: [{
9838
10421
  type: Component,
@@ -9866,7 +10449,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
9866
10449
  <ng-content select="[chatWelcomeSuggestions]" chatWelcomeSuggestions />
9867
10450
  </chat>
9868
10451
  </aside>
9869
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block}.chat-sidebar__content{transition:margin-right .3s ease;min-height:100vh}:host([data-push=\"true\"][data-open=\"true\"]) .chat-sidebar__content{margin-right:28rem}@media(max-width:640px){:host([data-push=\"true\"][data-open=\"true\"]) .chat-sidebar__content{margin-right:0}}.chat-sidebar__panel{position:fixed;top:0;right:0;bottom:var(--ngaf-chat-debug-claim-bottom, 0);width:28rem;background:var(--ngaf-chat-bg);border-left:1px solid var(--ngaf-chat-separator);box-shadow:-8px 0 32px #00000014;transform:translate(100%);transition:transform .2s ease-out,bottom .2s ease-out;z-index:var(--ngaf-chat-z-overlay-content, 30);display:flex;flex-direction:column}.chat-sidebar__panel[data-open=true]{transform:translate(0)}@media(max-width:640px){.chat-sidebar__panel{width:100vw}}.chat-sidebar__panel-header{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 12px;border-bottom:1px solid var(--ngaf-chat-separator);min-height:48px}.chat-sidebar__panel-title{min-width:0;flex:1 1 auto;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--ngaf-chat-text);font-weight:500;font-size:var(--ngaf-chat-font-size-sm)}.chat-sidebar__close{flex:0 0 auto;width:32px;height:32px;background:transparent;border:0;cursor:pointer;color:var(--ngaf-chat-text-muted);border-radius:50%;display:flex;align-items:center;justify-content:center}.chat-sidebar__close:hover{background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text)}.chat-sidebar__launcher{position:fixed;bottom:calc(1rem + var(--ngaf-chat-debug-claim-bottom, 0));right:1rem;z-index:var(--ngaf-chat-z-overlay-content, 30);transition:bottom .2s ease-out}:host([data-open=\"true\"]) .chat-sidebar__launcher{display:none}\n"] }]
10452
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:flex;height:100%;min-height:0}.chat-sidebar__content{flex:1 1 auto;min-width:0;min-height:0;transition:margin-right .3s ease}:host([data-push=\"true\"][data-open=\"true\"]) .chat-sidebar__content{margin-right:var(--tplane-chat-sidebar-width-drawer, 28rem)}@media(max-width:640px){:host([data-push=\"true\"][data-open=\"true\"]) .chat-sidebar__content{margin-right:0}}.chat-sidebar__panel{position:fixed;top:0;right:0;bottom:var(--tplane-chat-debug-claim-bottom, 0);width:var(--tplane-chat-sidebar-width-drawer, 28rem);background:var(--tplane-chat-bg);border-left:1px solid var(--tplane-chat-separator);box-shadow:-8px 0 32px #00000014;transform:translate(100%);transition:transform .2s ease-out,bottom .2s ease-out;z-index:var(--tplane-chat-z-overlay-content, 30);display:flex;flex-direction:column}.chat-sidebar__panel[data-open=true]{transform:translate(0)}@media(max-width:640px){.chat-sidebar__panel{width:100vw}}.chat-sidebar__panel-header{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 12px;border-bottom:1px solid var(--tplane-chat-separator);min-height:48px}.chat-sidebar__panel-title{min-width:0;flex:1 1 auto;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--tplane-chat-text);font-weight:500;font-size:var(--tplane-chat-font-size-sm)}.chat-sidebar__close{flex:0 0 auto;width:32px;height:32px;background:transparent;border:0;cursor:pointer;color:var(--tplane-chat-text-muted);border-radius:50%;display:flex;align-items:center;justify-content:center}.chat-sidebar__close:hover{background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text)}.chat-sidebar__launcher{position:fixed;bottom:calc(1rem + var(--tplane-chat-debug-claim-bottom, 0));right:1rem;z-index:var(--tplane-chat-z-overlay-content, 30);transition:bottom .2s ease-out}:host([data-open=\"true\"]) .chat-sidebar__launcher{display:none}\n"] }]
9870
10453
  }], ctorParameters: () => [], propDecorators: { agent: [{ type: i0.Input, args: [{ isSignal: true, alias: "agent", required: true }] }], views: [{ type: i0.Input, args: [{ isSignal: true, alias: "views", required: false }] }], clientTools: [{ type: i0.Input, args: [{ isSignal: true, alias: "clientTools", required: false }] }], modelOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "modelOptions", required: false }] }], showModelPicker: [{ type: i0.Input, args: [{ isSignal: true, alias: "showModelPicker", required: false }] }], selectedModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedModel", required: false }] }, { type: i0.Output, args: ["selectedModelChange"] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], closeOnEscape: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnEscape", required: false }] }], pushContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "pushContent", required: false }] }] } });
9871
10454
 
9872
10455
  // libs/chat/src/lib/compositions/chat-timeline-slider/chat-timeline-slider.component.ts
@@ -9917,7 +10500,7 @@ class ChatTimelineSliderComponent {
9917
10500
  }
9918
10501
  </ul>
9919
10502
  }
9920
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block;padding:var(--ngaf-chat-space-2)}.timeline-slider__header{display:flex;align-items:center;justify-content:space-between;padding:0 var(--ngaf-chat-space-1) var(--ngaf-chat-space-2)}.timeline-slider__title{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--ngaf-chat-text-muted);margin:0}.timeline-slider__count{font-size:var(--ngaf-chat-font-size-xs);color:var(--ngaf-chat-text-muted)}.timeline-slider__empty{text-align:center;padding:var(--ngaf-chat-space-4);color:var(--ngaf-chat-text-muted);font-size:var(--ngaf-chat-font-size-xs)}.timeline-slider__list{list-style:none;padding-left:12px;margin:0;border-left:1px solid var(--ngaf-chat-separator);display:flex;flex-direction:column;gap:2px}.timeline-slider__entry{display:flex;align-items:center;gap:8px;padding:6px 8px;margin-left:-1px;border-left:2px solid transparent;border-radius:var(--ngaf-chat-radius-button);cursor:default;color:var(--ngaf-chat-text-muted);font-size:var(--ngaf-chat-font-size-sm);transition:background .15s ease}.timeline-slider__entry:hover{background:color-mix(in srgb,var(--ngaf-chat-text) 5%,transparent)}.timeline-slider__entry[data-active=true]{border-left-color:var(--ngaf-chat-primary);color:var(--ngaf-chat-text)}.timeline-slider__index{width:22px;height:22px;border-radius:9999px;background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text-muted);font-size:11px;font-weight:600;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.timeline-slider__entry[data-active=true] .timeline-slider__index{background:var(--ngaf-chat-primary);color:var(--ngaf-chat-on-primary)}.timeline-slider__body{flex:1;min-width:0}.timeline-slider__label{font-weight:500;color:var(--ngaf-chat-text);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--ngaf-chat-font-size-sm)}.timeline-slider__id{font-family:var(--ngaf-chat-font-mono);font-size:11px;color:var(--ngaf-chat-text-muted);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.timeline-slider__actions{display:flex;gap:4px;flex-shrink:0}.timeline-slider__btn{padding:2px 8px;font-size:var(--ngaf-chat-font-size-xs);border-radius:var(--ngaf-chat-radius-button);background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text);border:0;cursor:pointer;transition:background .15s ease}.timeline-slider__btn:hover{background:color-mix(in srgb,var(--ngaf-chat-text) 8%,transparent)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
10503
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block;padding:var(--tplane-chat-space-2)}.timeline-slider__header{display:flex;align-items:center;justify-content:space-between;padding:0 var(--tplane-chat-space-1) var(--tplane-chat-space-2)}.timeline-slider__title{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--tplane-chat-text-muted);margin:0}.timeline-slider__count{font-size:var(--tplane-chat-font-size-xs);color:var(--tplane-chat-text-muted)}.timeline-slider__empty{text-align:center;padding:var(--tplane-chat-space-4);color:var(--tplane-chat-text-muted);font-size:var(--tplane-chat-font-size-xs)}.timeline-slider__list{list-style:none;padding-left:12px;margin:0;border-left:1px solid var(--tplane-chat-separator);display:flex;flex-direction:column;gap:2px}.timeline-slider__entry{display:flex;align-items:center;gap:8px;padding:6px 8px;margin-left:-1px;border-left:2px solid transparent;border-radius:var(--tplane-chat-radius-button);cursor:default;color:var(--tplane-chat-text-muted);font-size:var(--tplane-chat-font-size-sm);transition:background .15s ease}.timeline-slider__entry:hover{background:color-mix(in srgb,var(--tplane-chat-text) 5%,transparent)}.timeline-slider__entry[data-active=true]{border-left-color:var(--tplane-chat-primary);color:var(--tplane-chat-text)}.timeline-slider__index{width:22px;height:22px;border-radius:9999px;background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text-muted);font-size:11px;font-weight:600;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.timeline-slider__entry[data-active=true] .timeline-slider__index{background:var(--tplane-chat-primary);color:var(--tplane-chat-on-primary)}.timeline-slider__body{flex:1;min-width:0}.timeline-slider__label{font-weight:500;color:var(--tplane-chat-text);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--tplane-chat-font-size-sm)}.timeline-slider__id{font-family:var(--tplane-chat-font-mono);font-size:11px;color:var(--tplane-chat-text-muted);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.timeline-slider__actions{display:flex;gap:4px;flex-shrink:0}.timeline-slider__btn{padding:2px 8px;font-size:var(--tplane-chat-font-size-xs);border-radius:var(--tplane-chat-radius-button);background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text);border:0;cursor:pointer;transition:background .15s ease}.timeline-slider__btn:hover{background:color-mix(in srgb,var(--tplane-chat-text) 8%,transparent)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
9921
10504
  }
9922
10505
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatTimelineSliderComponent, decorators: [{
9923
10506
  type: Component,
@@ -9951,7 +10534,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
9951
10534
  }
9952
10535
  </ul>
9953
10536
  }
9954
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block;padding:var(--ngaf-chat-space-2)}.timeline-slider__header{display:flex;align-items:center;justify-content:space-between;padding:0 var(--ngaf-chat-space-1) var(--ngaf-chat-space-2)}.timeline-slider__title{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--ngaf-chat-text-muted);margin:0}.timeline-slider__count{font-size:var(--ngaf-chat-font-size-xs);color:var(--ngaf-chat-text-muted)}.timeline-slider__empty{text-align:center;padding:var(--ngaf-chat-space-4);color:var(--ngaf-chat-text-muted);font-size:var(--ngaf-chat-font-size-xs)}.timeline-slider__list{list-style:none;padding-left:12px;margin:0;border-left:1px solid var(--ngaf-chat-separator);display:flex;flex-direction:column;gap:2px}.timeline-slider__entry{display:flex;align-items:center;gap:8px;padding:6px 8px;margin-left:-1px;border-left:2px solid transparent;border-radius:var(--ngaf-chat-radius-button);cursor:default;color:var(--ngaf-chat-text-muted);font-size:var(--ngaf-chat-font-size-sm);transition:background .15s ease}.timeline-slider__entry:hover{background:color-mix(in srgb,var(--ngaf-chat-text) 5%,transparent)}.timeline-slider__entry[data-active=true]{border-left-color:var(--ngaf-chat-primary);color:var(--ngaf-chat-text)}.timeline-slider__index{width:22px;height:22px;border-radius:9999px;background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text-muted);font-size:11px;font-weight:600;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.timeline-slider__entry[data-active=true] .timeline-slider__index{background:var(--ngaf-chat-primary);color:var(--ngaf-chat-on-primary)}.timeline-slider__body{flex:1;min-width:0}.timeline-slider__label{font-weight:500;color:var(--ngaf-chat-text);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--ngaf-chat-font-size-sm)}.timeline-slider__id{font-family:var(--ngaf-chat-font-mono);font-size:11px;color:var(--ngaf-chat-text-muted);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.timeline-slider__actions{display:flex;gap:4px;flex-shrink:0}.timeline-slider__btn{padding:2px 8px;font-size:var(--ngaf-chat-font-size-xs);border-radius:var(--ngaf-chat-radius-button);background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text);border:0;cursor:pointer;transition:background .15s ease}.timeline-slider__btn:hover{background:color-mix(in srgb,var(--ngaf-chat-text) 8%,transparent)}\n"] }]
10537
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block;padding:var(--tplane-chat-space-2)}.timeline-slider__header{display:flex;align-items:center;justify-content:space-between;padding:0 var(--tplane-chat-space-1) var(--tplane-chat-space-2)}.timeline-slider__title{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--tplane-chat-text-muted);margin:0}.timeline-slider__count{font-size:var(--tplane-chat-font-size-xs);color:var(--tplane-chat-text-muted)}.timeline-slider__empty{text-align:center;padding:var(--tplane-chat-space-4);color:var(--tplane-chat-text-muted);font-size:var(--tplane-chat-font-size-xs)}.timeline-slider__list{list-style:none;padding-left:12px;margin:0;border-left:1px solid var(--tplane-chat-separator);display:flex;flex-direction:column;gap:2px}.timeline-slider__entry{display:flex;align-items:center;gap:8px;padding:6px 8px;margin-left:-1px;border-left:2px solid transparent;border-radius:var(--tplane-chat-radius-button);cursor:default;color:var(--tplane-chat-text-muted);font-size:var(--tplane-chat-font-size-sm);transition:background .15s ease}.timeline-slider__entry:hover{background:color-mix(in srgb,var(--tplane-chat-text) 5%,transparent)}.timeline-slider__entry[data-active=true]{border-left-color:var(--tplane-chat-primary);color:var(--tplane-chat-text)}.timeline-slider__index{width:22px;height:22px;border-radius:9999px;background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text-muted);font-size:11px;font-weight:600;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.timeline-slider__entry[data-active=true] .timeline-slider__index{background:var(--tplane-chat-primary);color:var(--tplane-chat-on-primary)}.timeline-slider__body{flex:1;min-width:0}.timeline-slider__label{font-weight:500;color:var(--tplane-chat-text);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--tplane-chat-font-size-sm)}.timeline-slider__id{font-family:var(--tplane-chat-font-mono);font-size:11px;color:var(--tplane-chat-text-muted);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.timeline-slider__actions{display:flex;gap:4px;flex-shrink:0}.timeline-slider__btn{padding:2px 8px;font-size:var(--tplane-chat-font-size-xs);border-radius:var(--tplane-chat-radius-button);background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text);border:0;cursor:pointer;transition:background .15s ease}.timeline-slider__btn:hover{background:color-mix(in srgb,var(--tplane-chat-text) 8%,transparent)}\n"] }]
9955
10538
  }], propDecorators: { agent: [{ type: i0.Input, args: [{ isSignal: true, alias: "agent", required: true }] }], replayRequested: [{ type: i0.Output, args: ["replayRequested"] }], forkRequested: [{ type: i0.Output, args: ["forkRequested"] }] } });
9956
10539
 
9957
10540
  // libs/chat/src/lib/styles/chat-sidenav.styles.ts
@@ -9977,10 +10560,10 @@ const CHAT_SIDENAV_STYLES = `
9977
10560
  z-index: 100;
9978
10561
  }
9979
10562
  :host([data-mode="expanded"]) {
9980
- width: var(--ngaf-chat-sidenav-width-expanded);
10563
+ width: var(--tplane-chat-sidenav-width-expanded);
9981
10564
  }
9982
10565
  :host([data-mode="collapsed"]) {
9983
- width: var(--ngaf-chat-sidenav-width-collapsed);
10566
+ width: var(--tplane-chat-sidenav-width-collapsed);
9984
10567
  }
9985
10568
  :host([data-mode="expanded"]) .chat-sidenav {
9986
10569
  width: 100%;
@@ -9993,8 +10576,8 @@ const CHAT_SIDENAV_STYLES = `
9993
10576
  top: 0;
9994
10577
  left: 0;
9995
10578
  bottom: 0;
9996
- width: var(--ngaf-chat-sidenav-width-drawer);
9997
- z-index: var(--ngaf-chat-z-drawer, 1001);
10579
+ width: var(--tplane-chat-sidenav-width-drawer);
10580
+ z-index: var(--tplane-chat-z-drawer, 1001);
9998
10581
  }
9999
10582
  :host([data-mode="drawer"][data-open="true"]) {
10000
10583
  box-shadow: 8px 0 32px rgba(0, 0, 0, 0.18);
@@ -10003,8 +10586,8 @@ const CHAT_SIDENAV_STYLES = `
10003
10586
  display: flex;
10004
10587
  flex-direction: column;
10005
10588
  height: 100%;
10006
- background: var(--ngaf-chat-bg);
10007
- border-right: 1px solid var(--ngaf-chat-separator);
10589
+ background: var(--tplane-chat-bg);
10590
+ border-right: 1px solid var(--tplane-chat-separator);
10008
10591
  box-sizing: border-box;
10009
10592
  overflow: hidden;
10010
10593
  }
@@ -10019,7 +10602,7 @@ const CHAT_SIDENAV_STYLES = `
10019
10602
  }
10020
10603
  .chat-sidenav__header {
10021
10604
  flex-shrink: 0;
10022
- padding: var(--ngaf-chat-space-3);
10605
+ padding: var(--tplane-chat-space-3);
10023
10606
  }
10024
10607
  /* Collapse the header slot when the consumer doesn't project content
10025
10608
  * — matches the chat-window pattern. Avoids 24px of dead space above
@@ -10032,15 +10615,15 @@ const CHAT_SIDENAV_STYLES = `
10032
10615
  align-items: center;
10033
10616
  justify-content: space-between;
10034
10617
  gap: 4px;
10035
- padding: var(--ngaf-chat-space-2) var(--ngaf-chat-space-3);
10036
- border-bottom: 1px solid var(--ngaf-chat-separator);
10618
+ padding: var(--tplane-chat-space-2) var(--tplane-chat-space-3);
10619
+ border-bottom: 1px solid var(--tplane-chat-separator);
10037
10620
  }
10038
10621
  :host([data-mode="collapsed"]) .chat-sidenav__topbar {
10039
10622
  flex-direction: column;
10040
10623
  align-items: center;
10041
10624
  justify-content: center;
10042
10625
  gap: 4px;
10043
- padding: var(--ngaf-chat-space-2) 0;
10626
+ padding: var(--tplane-chat-space-2) 0;
10044
10627
  }
10045
10628
  .chat-sidenav__topbar .chat-sidenav__action--close {
10046
10629
  width: 36px;
@@ -10058,7 +10641,7 @@ const CHAT_SIDENAV_STYLES = `
10058
10641
  border: 0;
10059
10642
  padding: 12px 18px;
10060
10643
  border-radius: 8px;
10061
- font-size: var(--ngaf-chat-font-size-sm);
10644
+ font-size: var(--tplane-chat-font-size-sm);
10062
10645
  font-weight: 600;
10063
10646
  display: flex;
10064
10647
  align-items: center;
@@ -10067,7 +10650,7 @@ const CHAT_SIDENAV_STYLES = `
10067
10650
  width: 100%;
10068
10651
  }
10069
10652
  .chat-sidenav__action--new:focus-visible {
10070
- outline: 2px solid var(--ngaf-chat-primary);
10653
+ outline: 2px solid var(--tplane-chat-primary);
10071
10654
  outline-offset: 2px;
10072
10655
  }
10073
10656
  /* Collapsed mode: shrink to 32×32 icon-only square. */
@@ -10086,11 +10669,11 @@ const CHAT_SIDENAV_STYLES = `
10086
10669
  display: flex;
10087
10670
  flex-direction: column;
10088
10671
  gap: 4px;
10089
- padding: var(--ngaf-chat-space-3);
10672
+ padding: var(--tplane-chat-space-3);
10090
10673
  }
10091
10674
  :host([data-mode="collapsed"]) .chat-sidenav__actions {
10092
10675
  align-items: center;
10093
- padding: var(--ngaf-chat-space-2);
10676
+ padding: var(--tplane-chat-space-2);
10094
10677
  }
10095
10678
  .chat-sidenav__action {
10096
10679
  display: flex;
@@ -10100,17 +10683,17 @@ const CHAT_SIDENAV_STYLES = `
10100
10683
  padding: 8px 12px;
10101
10684
  border: 0;
10102
10685
  background: transparent;
10103
- color: var(--ngaf-chat-text);
10686
+ color: var(--tplane-chat-text);
10104
10687
  border-radius: 8px;
10105
10688
  cursor: pointer;
10106
10689
  font-family: inherit;
10107
- font-size: var(--ngaf-chat-font-size-sm);
10690
+ font-size: var(--tplane-chat-font-size-sm);
10108
10691
  font-weight: 400;
10109
10692
  text-align: left;
10110
10693
  }
10111
- .chat-sidenav__action:hover { background: var(--ngaf-chat-surface-alt); }
10694
+ .chat-sidenav__action:hover { background: var(--tplane-chat-surface-alt); }
10112
10695
  .chat-sidenav__action:focus-visible {
10113
- outline: 2px solid var(--ngaf-chat-primary);
10696
+ outline: 2px solid var(--tplane-chat-primary);
10114
10697
  outline-offset: 2px;
10115
10698
  }
10116
10699
  :host([data-mode="collapsed"]) .chat-sidenav__action {
@@ -10128,15 +10711,15 @@ const CHAT_SIDENAV_STYLES = `
10128
10711
  collapsed-mode overrides (which are :host-prefixed, higher
10129
10712
  specificity, so they still apply). */
10130
10713
  .chat-sidenav__action.chat-sidenav__action--new {
10131
- background: var(--ngaf-chat-text);
10132
- color: var(--ngaf-chat-bg);
10714
+ background: var(--tplane-chat-text);
10715
+ color: var(--tplane-chat-bg);
10133
10716
  border-radius: 8px;
10134
10717
  padding: 12px 18px;
10135
10718
  font-weight: 600;
10136
- font-size: var(--ngaf-chat-font-size-sm);
10719
+ font-size: var(--tplane-chat-font-size-sm);
10137
10720
  }
10138
10721
  .chat-sidenav__action.chat-sidenav__action--new:hover {
10139
- background: var(--ngaf-chat-text);
10722
+ background: var(--tplane-chat-text);
10140
10723
  filter: brightness(0.92);
10141
10724
  }
10142
10725
  .chat-sidenav__action-icon {
@@ -10156,7 +10739,7 @@ const CHAT_SIDENAV_STYLES = `
10156
10739
  .chat-sidenav__threads-heading {
10157
10740
  padding: 8px 12px 4px;
10158
10741
  font-size: 11px;
10159
- color: var(--ngaf-chat-text-muted);
10742
+ color: var(--tplane-chat-text-muted);
10160
10743
  text-transform: uppercase;
10161
10744
  letter-spacing: 0.4px;
10162
10745
  }
@@ -10168,7 +10751,7 @@ const CHAT_SIDENAV_STYLES = `
10168
10751
  align-items: center;
10169
10752
  justify-content: space-between;
10170
10753
  padding: 10px 12px;
10171
- border-top: 1px solid var(--ngaf-chat-separator);
10754
+ border-top: 1px solid var(--tplane-chat-separator);
10172
10755
  gap: 8px;
10173
10756
  flex-shrink: 0;
10174
10757
  }
@@ -10189,18 +10772,18 @@ const CHAT_SIDENAV_STYLES = `
10189
10772
  border: 0;
10190
10773
  border-radius: 8px;
10191
10774
  background: transparent;
10192
- color: var(--ngaf-chat-text-muted);
10775
+ color: var(--tplane-chat-text-muted);
10193
10776
  cursor: pointer;
10194
10777
  font: inherit;
10195
10778
  font-size: 12px;
10196
10779
  font-weight: 500;
10197
10780
  }
10198
10781
  .chat-sidenav__debug:hover {
10199
- background: var(--ngaf-chat-surface-alt);
10200
- color: var(--ngaf-chat-text);
10782
+ background: var(--tplane-chat-surface-alt);
10783
+ color: var(--tplane-chat-text);
10201
10784
  }
10202
10785
  .chat-sidenav__debug:focus-visible {
10203
- outline: 2px solid var(--ngaf-chat-primary);
10786
+ outline: 2px solid var(--tplane-chat-primary);
10204
10787
  outline-offset: 2px;
10205
10788
  }
10206
10789
  .chat-sidenav__debug-dot {
@@ -10231,15 +10814,15 @@ const CHAT_SIDENAV_STYLES = `
10231
10814
  border-radius: 8px;
10232
10815
  border: 0;
10233
10816
  background: transparent;
10234
- color: var(--ngaf-chat-text-muted);
10817
+ color: var(--tplane-chat-text-muted);
10235
10818
  cursor: pointer;
10236
10819
  display: flex;
10237
10820
  align-items: center;
10238
10821
  justify-content: center;
10239
10822
  }
10240
10823
  .chat-sidenav__toggle:hover {
10241
- background: var(--ngaf-chat-surface-alt);
10242
- color: var(--ngaf-chat-text);
10824
+ background: var(--tplane-chat-surface-alt);
10825
+ color: var(--tplane-chat-text);
10243
10826
  }
10244
10827
  /* Collapsed mode: footer becomes a vertical stack; debug stays visible. */
10245
10828
  :host([data-mode="collapsed"]) .chat-sidenav__footer {
@@ -10285,18 +10868,18 @@ const CHAT_SIDENAV_STYLES = `
10285
10868
  border: 0;
10286
10869
  border-radius: 8px;
10287
10870
  background: transparent;
10288
- color: var(--ngaf-chat-text);
10871
+ color: var(--tplane-chat-text);
10289
10872
  font: inherit;
10290
- font-size: var(--ngaf-chat-font-size-sm);
10873
+ font-size: var(--tplane-chat-font-size-sm);
10291
10874
  text-align: left;
10292
10875
  cursor: pointer;
10293
10876
  }
10294
10877
  .chat-sidenav__archived-heading:hover {
10295
- background: var(--ngaf-chat-surface-alt);
10296
- color: var(--ngaf-chat-text);
10878
+ background: var(--tplane-chat-surface-alt);
10879
+ color: var(--tplane-chat-text);
10297
10880
  }
10298
10881
  .chat-sidenav__archived-heading:focus-visible {
10299
- outline: 2px solid var(--ngaf-chat-primary);
10882
+ outline: 2px solid var(--tplane-chat-primary);
10300
10883
  outline-offset: 2px;
10301
10884
  }
10302
10885
  .chat-sidenav__archived-chevron {
@@ -10310,8 +10893,8 @@ const CHAT_SIDENAV_STYLES = `
10310
10893
  }
10311
10894
  .chat-sidenav__archived-empty {
10312
10895
  padding: 8px 12px;
10313
- color: var(--ngaf-chat-text-muted);
10314
- font-size: var(--ngaf-chat-font-size-sm);
10896
+ color: var(--tplane-chat-text-muted);
10897
+ font-size: var(--tplane-chat-font-size-sm);
10315
10898
  }
10316
10899
  :host([data-mode="collapsed"]) .chat-sidenav__archived { display: none; }
10317
10900
  .chat-sidenav__projects { flex-shrink: 0; }
@@ -10763,7 +11346,7 @@ class ChatSidenavComponent {
10763
11346
  </div>
10764
11347
  </nav>
10765
11348
  <ng-container #debugHost />
10766
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block;height:100%}:host([data-mode=\"expanded\"]),:host([data-mode=\"collapsed\"]){position:fixed;top:0;left:0;bottom:0;z-index:100}:host([data-mode=\"expanded\"]){width:var(--ngaf-chat-sidenav-width-expanded)}:host([data-mode=\"collapsed\"]){width:var(--ngaf-chat-sidenav-width-collapsed)}:host([data-mode=\"expanded\"]) .chat-sidenav{width:100%}:host([data-mode=\"collapsed\"]) .chat-sidenav{width:100%}:host([data-mode=\"drawer\"]){position:fixed;top:0;left:0;bottom:0;width:var(--ngaf-chat-sidenav-width-drawer);z-index:var(--ngaf-chat-z-drawer, 1001)}:host([data-mode=\"drawer\"][data-open=\"true\"]){box-shadow:8px 0 32px #0000002e}.chat-sidenav{display:flex;flex-direction:column;height:100%;background:var(--ngaf-chat-bg);border-right:1px solid var(--ngaf-chat-separator);box-sizing:border-box;overflow:hidden}:host([data-mode=\"drawer\"]) .chat-sidenav{width:100%;height:100%;transition:transform .2s ease;transform:translate(-100%)}:host([data-mode=\"drawer\"][data-open=\"true\"]) .chat-sidenav{transform:translate(0)}.chat-sidenav__header{flex-shrink:0;padding:var(--ngaf-chat-space-3)}.chat-sidenav__header:empty{display:none}.chat-sidenav__topbar{flex-shrink:0;display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:4px;padding:var(--ngaf-chat-space-2) var(--ngaf-chat-space-3);border-bottom:1px solid var(--ngaf-chat-separator)}:host([data-mode=\"collapsed\"]) .chat-sidenav__topbar{flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:var(--ngaf-chat-space-2) 0}.chat-sidenav__topbar .chat-sidenav__action--close{width:36px;height:36px;padding:0;justify-content:center;flex:0 0 auto}.chat-sidenav__topbar .chat-sidenav__action--close .chat-sidenav__action-label{display:none}.chat-sidenav__action--new{border:0;padding:12px 18px;border-radius:8px;font-size:var(--ngaf-chat-font-size-sm);font-weight:600;display:flex;align-items:center;gap:8px;cursor:pointer;width:100%}.chat-sidenav__action--new:focus-visible{outline:2px solid var(--ngaf-chat-primary);outline-offset:2px}:host([data-mode=\"collapsed\"]) .chat-sidenav__action--new{width:32px;height:32px;padding:0;border-radius:10px;justify-content:center}:host([data-mode=\"collapsed\"]) .chat-sidenav__action--new .chat-sidenav__action-label{display:none}.chat-sidenav__actions{flex-shrink:0;display:flex;flex-direction:column;gap:4px;padding:var(--ngaf-chat-space-3)}:host([data-mode=\"collapsed\"]) .chat-sidenav__actions{align-items:center;padding:var(--ngaf-chat-space-2)}.chat-sidenav__action{display:flex;align-items:center;gap:8px;width:100%;padding:8px 12px;border:0;background:transparent;color:var(--ngaf-chat-text);border-radius:8px;cursor:pointer;font-family:inherit;font-size:var(--ngaf-chat-font-size-sm);font-weight:400;text-align:left}.chat-sidenav__action:hover{background:var(--ngaf-chat-surface-alt)}.chat-sidenav__action:focus-visible{outline:2px solid var(--ngaf-chat-primary);outline-offset:2px}:host([data-mode=\"collapsed\"]) .chat-sidenav__action{width:36px;height:36px;padding:0;justify-content:center}:host([data-mode=\"collapsed\"]) .chat-sidenav__action-label{display:none}.chat-sidenav__action.chat-sidenav__action--new{background:var(--ngaf-chat-text);color:var(--ngaf-chat-bg);border-radius:8px;padding:12px 18px;font-weight:600;font-size:var(--ngaf-chat-font-size-sm)}.chat-sidenav__action.chat-sidenav__action--new:hover{background:var(--ngaf-chat-text);filter:brightness(.92)}.chat-sidenav__action-icon{width:16px;height:16px;flex-shrink:0}.chat-sidenav__primary,.chat-sidenav__sections{flex-shrink:0}.chat-sidenav__threads{flex:1 1 auto;min-height:0;overflow-y:auto}.chat-sidenav__threads-heading{padding:8px 12px 4px;font-size:11px;color:var(--ngaf-chat-text-muted);text-transform:uppercase;letter-spacing:.4px}:host([data-mode=\"collapsed\"]) .chat-sidenav__threads-heading{display:none}.chat-sidenav__footer{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-top:1px solid var(--ngaf-chat-separator);gap:8px;flex-shrink:0}.chat-sidenav__footer-left{display:flex;align-items:center;gap:4px;min-height:28px}.chat-sidenav__debug{height:28px;min-width:28px;display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:0 9px;border:0;border-radius:8px;background:transparent;color:var(--ngaf-chat-text-muted);cursor:pointer;font:inherit;font-size:12px;font-weight:500}.chat-sidenav__debug:hover{background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text)}.chat-sidenav__debug:focus-visible{outline:2px solid var(--ngaf-chat-primary);outline-offset:2px}.chat-sidenav__debug-dot{width:8px;height:8px;border-radius:50%;background:#22c55e;box-shadow:0 0 8px color-mix(in srgb,#22c55e 60%,transparent);flex:0 0 auto}.chat-sidenav__debug-dot--streaming{animation:chat-sidenav-debug-pulse 1.2s ease-in-out infinite}@keyframes chat-sidenav-debug-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(.85)}}.chat-sidenav__footer-right{display:flex;align-items:center;gap:4px;margin-left:auto}.chat-sidenav__toggle{width:28px;height:28px;border-radius:8px;border:0;background:transparent;color:var(--ngaf-chat-text-muted);cursor:pointer;display:flex;align-items:center;justify-content:center}.chat-sidenav__toggle:hover{background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text)}:host([data-mode=\"collapsed\"]) .chat-sidenav__footer{flex-direction:column;align-items:center;padding:10px 4px}:host([data-mode=\"collapsed\"]) .chat-sidenav__footer-left{display:flex;flex-direction:column;align-items:center;min-height:28px}:host([data-mode=\"collapsed\"]) .chat-sidenav__debug{width:28px;padding:0}:host([data-mode=\"collapsed\"]) .chat-sidenav__debug-label,:host([data-mode=\"collapsed\"]) .chat-sidenav__footer-left>:not(.chat-sidenav__debug){display:none}:host([data-mode=\"collapsed\"]) .chat-sidenav__footer-right{flex-direction:column}.chat-sidenav__account{display:none}.chat-sidenav__account:has(>*){display:flex;align-items:center;gap:4px}.chat-sidenav__archived{flex-shrink:0}.chat-sidenav__archived-heading{display:flex;align-items:center;gap:8px;width:100%;padding:8px 12px;border:0;border-radius:8px;background:transparent;color:var(--ngaf-chat-text);font:inherit;font-size:var(--ngaf-chat-font-size-sm);text-align:left;cursor:pointer}.chat-sidenav__archived-heading:hover{background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text)}.chat-sidenav__archived-heading:focus-visible{outline:2px solid var(--ngaf-chat-primary);outline-offset:2px}.chat-sidenav__archived-chevron{width:12px;height:12px;transition:transform .15s ease;flex-shrink:0}.chat-sidenav__archived[data-open=true] .chat-sidenav__archived-chevron{transform:rotate(90deg)}.chat-sidenav__archived-empty{padding:8px 12px;color:var(--ngaf-chat-text-muted);font-size:var(--ngaf-chat-font-size-sm)}:host([data-mode=\"collapsed\"]) .chat-sidenav__archived{display:none}.chat-sidenav__projects{flex-shrink:0}:host([data-mode=\"collapsed\"]) .chat-sidenav__projects{display:none}:host([data-mode=\"collapsed\"]) .chat-thread-list__initial{display:inline-flex}:host([data-mode=\"collapsed\"]) .chat-thread-list__item-title{display:none}:host([data-mode=\"collapsed\"]) .chat-thread-list__item-time{display:none}:host([data-mode=\"collapsed\"]) .chat-thread-list__kebab{display:none}:host([data-mode=\"collapsed\"]) .chat-thread-list__grip{display:none}:host([data-mode=\"collapsed\"]) .chat-thread-list__item-wrap{justify-content:center}:host([data-mode=\"collapsed\"]) .chat-thread-list__item{padding:6px;justify-content:center;align-items:center;flex-direction:row}:host([data-mode=\"collapsed\"]) .chat-thread-list__new{display:none}:host([data-mode=\"collapsed\"]) .chat-sidenav__action--search{width:32px;height:32px;padding:0;border-radius:10px;justify-content:center;background:transparent}:host([data-mode=\"collapsed\"]) .chat-sidenav__action--search .chat-sidenav__action-label{display:none}:host([data-mode=\"collapsed\"]) .chat-sidenav__threads,:host([data-mode=\"collapsed\"]) .chat-sidenav__projects,:host([data-mode=\"collapsed\"]) .chat-sidenav__archived,:host([data-mode=\"collapsed\"]) .chat-sidenav__sections,:host([data-mode=\"collapsed\"]) .chat-sidenav__primary{display:none}:host([data-mode=\"collapsed\"]) .chat-sidenav__topbar,:host([data-mode=\"collapsed\"]) .chat-sidenav__actions{padding:8px 4px;align-items:center;justify-content:center}\n"], dependencies: [{ kind: "component", type: ChatThreadListComponent, selector: "chat-thread-list", inputs: ["threads", "activeThreadId", "showNewThreadButton", "actions", "mode", "projects"], outputs: ["threadSelected", "newThreadRequested"] }, { kind: "component", type: ChatProjectListComponent, selector: "chat-project-list", inputs: ["projects", "activeProjectId", "showNewProjectButton", "actions"], outputs: ["projectSelected", "newProjectRequested"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11349
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block;height:100%}:host([data-mode=\"expanded\"]),:host([data-mode=\"collapsed\"]){position:fixed;top:0;left:0;bottom:0;z-index:100}:host([data-mode=\"expanded\"]){width:var(--tplane-chat-sidenav-width-expanded)}:host([data-mode=\"collapsed\"]){width:var(--tplane-chat-sidenav-width-collapsed)}:host([data-mode=\"expanded\"]) .chat-sidenav{width:100%}:host([data-mode=\"collapsed\"]) .chat-sidenav{width:100%}:host([data-mode=\"drawer\"]){position:fixed;top:0;left:0;bottom:0;width:var(--tplane-chat-sidenav-width-drawer);z-index:var(--tplane-chat-z-drawer, 1001)}:host([data-mode=\"drawer\"][data-open=\"true\"]){box-shadow:8px 0 32px #0000002e}.chat-sidenav{display:flex;flex-direction:column;height:100%;background:var(--tplane-chat-bg);border-right:1px solid var(--tplane-chat-separator);box-sizing:border-box;overflow:hidden}:host([data-mode=\"drawer\"]) .chat-sidenav{width:100%;height:100%;transition:transform .2s ease;transform:translate(-100%)}:host([data-mode=\"drawer\"][data-open=\"true\"]) .chat-sidenav{transform:translate(0)}.chat-sidenav__header{flex-shrink:0;padding:var(--tplane-chat-space-3)}.chat-sidenav__header:empty{display:none}.chat-sidenav__topbar{flex-shrink:0;display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:4px;padding:var(--tplane-chat-space-2) var(--tplane-chat-space-3);border-bottom:1px solid var(--tplane-chat-separator)}:host([data-mode=\"collapsed\"]) .chat-sidenav__topbar{flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:var(--tplane-chat-space-2) 0}.chat-sidenav__topbar .chat-sidenav__action--close{width:36px;height:36px;padding:0;justify-content:center;flex:0 0 auto}.chat-sidenav__topbar .chat-sidenav__action--close .chat-sidenav__action-label{display:none}.chat-sidenav__action--new{border:0;padding:12px 18px;border-radius:8px;font-size:var(--tplane-chat-font-size-sm);font-weight:600;display:flex;align-items:center;gap:8px;cursor:pointer;width:100%}.chat-sidenav__action--new:focus-visible{outline:2px solid var(--tplane-chat-primary);outline-offset:2px}:host([data-mode=\"collapsed\"]) .chat-sidenav__action--new{width:32px;height:32px;padding:0;border-radius:10px;justify-content:center}:host([data-mode=\"collapsed\"]) .chat-sidenav__action--new .chat-sidenav__action-label{display:none}.chat-sidenav__actions{flex-shrink:0;display:flex;flex-direction:column;gap:4px;padding:var(--tplane-chat-space-3)}:host([data-mode=\"collapsed\"]) .chat-sidenav__actions{align-items:center;padding:var(--tplane-chat-space-2)}.chat-sidenav__action{display:flex;align-items:center;gap:8px;width:100%;padding:8px 12px;border:0;background:transparent;color:var(--tplane-chat-text);border-radius:8px;cursor:pointer;font-family:inherit;font-size:var(--tplane-chat-font-size-sm);font-weight:400;text-align:left}.chat-sidenav__action:hover{background:var(--tplane-chat-surface-alt)}.chat-sidenav__action:focus-visible{outline:2px solid var(--tplane-chat-primary);outline-offset:2px}:host([data-mode=\"collapsed\"]) .chat-sidenav__action{width:36px;height:36px;padding:0;justify-content:center}:host([data-mode=\"collapsed\"]) .chat-sidenav__action-label{display:none}.chat-sidenav__action.chat-sidenav__action--new{background:var(--tplane-chat-text);color:var(--tplane-chat-bg);border-radius:8px;padding:12px 18px;font-weight:600;font-size:var(--tplane-chat-font-size-sm)}.chat-sidenav__action.chat-sidenav__action--new:hover{background:var(--tplane-chat-text);filter:brightness(.92)}.chat-sidenav__action-icon{width:16px;height:16px;flex-shrink:0}.chat-sidenav__primary,.chat-sidenav__sections{flex-shrink:0}.chat-sidenav__threads{flex:1 1 auto;min-height:0;overflow-y:auto}.chat-sidenav__threads-heading{padding:8px 12px 4px;font-size:11px;color:var(--tplane-chat-text-muted);text-transform:uppercase;letter-spacing:.4px}:host([data-mode=\"collapsed\"]) .chat-sidenav__threads-heading{display:none}.chat-sidenav__footer{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-top:1px solid var(--tplane-chat-separator);gap:8px;flex-shrink:0}.chat-sidenav__footer-left{display:flex;align-items:center;gap:4px;min-height:28px}.chat-sidenav__debug{height:28px;min-width:28px;display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:0 9px;border:0;border-radius:8px;background:transparent;color:var(--tplane-chat-text-muted);cursor:pointer;font:inherit;font-size:12px;font-weight:500}.chat-sidenav__debug:hover{background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text)}.chat-sidenav__debug:focus-visible{outline:2px solid var(--tplane-chat-primary);outline-offset:2px}.chat-sidenav__debug-dot{width:8px;height:8px;border-radius:50%;background:#22c55e;box-shadow:0 0 8px color-mix(in srgb,#22c55e 60%,transparent);flex:0 0 auto}.chat-sidenav__debug-dot--streaming{animation:chat-sidenav-debug-pulse 1.2s ease-in-out infinite}@keyframes chat-sidenav-debug-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(.85)}}.chat-sidenav__footer-right{display:flex;align-items:center;gap:4px;margin-left:auto}.chat-sidenav__toggle{width:28px;height:28px;border-radius:8px;border:0;background:transparent;color:var(--tplane-chat-text-muted);cursor:pointer;display:flex;align-items:center;justify-content:center}.chat-sidenav__toggle:hover{background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text)}:host([data-mode=\"collapsed\"]) .chat-sidenav__footer{flex-direction:column;align-items:center;padding:10px 4px}:host([data-mode=\"collapsed\"]) .chat-sidenav__footer-left{display:flex;flex-direction:column;align-items:center;min-height:28px}:host([data-mode=\"collapsed\"]) .chat-sidenav__debug{width:28px;padding:0}:host([data-mode=\"collapsed\"]) .chat-sidenav__debug-label,:host([data-mode=\"collapsed\"]) .chat-sidenav__footer-left>:not(.chat-sidenav__debug){display:none}:host([data-mode=\"collapsed\"]) .chat-sidenav__footer-right{flex-direction:column}.chat-sidenav__account{display:none}.chat-sidenav__account:has(>*){display:flex;align-items:center;gap:4px}.chat-sidenav__archived{flex-shrink:0}.chat-sidenav__archived-heading{display:flex;align-items:center;gap:8px;width:100%;padding:8px 12px;border:0;border-radius:8px;background:transparent;color:var(--tplane-chat-text);font:inherit;font-size:var(--tplane-chat-font-size-sm);text-align:left;cursor:pointer}.chat-sidenav__archived-heading:hover{background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text)}.chat-sidenav__archived-heading:focus-visible{outline:2px solid var(--tplane-chat-primary);outline-offset:2px}.chat-sidenav__archived-chevron{width:12px;height:12px;transition:transform .15s ease;flex-shrink:0}.chat-sidenav__archived[data-open=true] .chat-sidenav__archived-chevron{transform:rotate(90deg)}.chat-sidenav__archived-empty{padding:8px 12px;color:var(--tplane-chat-text-muted);font-size:var(--tplane-chat-font-size-sm)}:host([data-mode=\"collapsed\"]) .chat-sidenav__archived{display:none}.chat-sidenav__projects{flex-shrink:0}:host([data-mode=\"collapsed\"]) .chat-sidenav__projects{display:none}:host([data-mode=\"collapsed\"]) .chat-thread-list__initial{display:inline-flex}:host([data-mode=\"collapsed\"]) .chat-thread-list__item-title{display:none}:host([data-mode=\"collapsed\"]) .chat-thread-list__item-time{display:none}:host([data-mode=\"collapsed\"]) .chat-thread-list__kebab{display:none}:host([data-mode=\"collapsed\"]) .chat-thread-list__grip{display:none}:host([data-mode=\"collapsed\"]) .chat-thread-list__item-wrap{justify-content:center}:host([data-mode=\"collapsed\"]) .chat-thread-list__item{padding:6px;justify-content:center;align-items:center;flex-direction:row}:host([data-mode=\"collapsed\"]) .chat-thread-list__new{display:none}:host([data-mode=\"collapsed\"]) .chat-sidenav__action--search{width:32px;height:32px;padding:0;border-radius:10px;justify-content:center;background:transparent}:host([data-mode=\"collapsed\"]) .chat-sidenav__action--search .chat-sidenav__action-label{display:none}:host([data-mode=\"collapsed\"]) .chat-sidenav__threads,:host([data-mode=\"collapsed\"]) .chat-sidenav__projects,:host([data-mode=\"collapsed\"]) .chat-sidenav__archived,:host([data-mode=\"collapsed\"]) .chat-sidenav__sections,:host([data-mode=\"collapsed\"]) .chat-sidenav__primary{display:none}:host([data-mode=\"collapsed\"]) .chat-sidenav__topbar,:host([data-mode=\"collapsed\"]) .chat-sidenav__actions{padding:8px 4px;align-items:center;justify-content:center}\n"], dependencies: [{ kind: "component", type: ChatThreadListComponent, selector: "chat-thread-list", inputs: ["threads", "activeThreadId", "showNewThreadButton", "actions", "mode", "projects"], outputs: ["threadSelected", "newThreadRequested"] }, { kind: "component", type: ChatProjectListComponent, selector: "chat-project-list", inputs: ["projects", "activeProjectId", "showNewProjectButton", "actions"], outputs: ["projectSelected", "newProjectRequested"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
10767
11350
  }
10768
11351
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatSidenavComponent, decorators: [{
10769
11352
  type: Component,
@@ -11007,7 +11590,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
11007
11590
  </div>
11008
11591
  </nav>
11009
11592
  <ng-container #debugHost />
11010
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:block;height:100%}:host([data-mode=\"expanded\"]),:host([data-mode=\"collapsed\"]){position:fixed;top:0;left:0;bottom:0;z-index:100}:host([data-mode=\"expanded\"]){width:var(--ngaf-chat-sidenav-width-expanded)}:host([data-mode=\"collapsed\"]){width:var(--ngaf-chat-sidenav-width-collapsed)}:host([data-mode=\"expanded\"]) .chat-sidenav{width:100%}:host([data-mode=\"collapsed\"]) .chat-sidenav{width:100%}:host([data-mode=\"drawer\"]){position:fixed;top:0;left:0;bottom:0;width:var(--ngaf-chat-sidenav-width-drawer);z-index:var(--ngaf-chat-z-drawer, 1001)}:host([data-mode=\"drawer\"][data-open=\"true\"]){box-shadow:8px 0 32px #0000002e}.chat-sidenav{display:flex;flex-direction:column;height:100%;background:var(--ngaf-chat-bg);border-right:1px solid var(--ngaf-chat-separator);box-sizing:border-box;overflow:hidden}:host([data-mode=\"drawer\"]) .chat-sidenav{width:100%;height:100%;transition:transform .2s ease;transform:translate(-100%)}:host([data-mode=\"drawer\"][data-open=\"true\"]) .chat-sidenav{transform:translate(0)}.chat-sidenav__header{flex-shrink:0;padding:var(--ngaf-chat-space-3)}.chat-sidenav__header:empty{display:none}.chat-sidenav__topbar{flex-shrink:0;display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:4px;padding:var(--ngaf-chat-space-2) var(--ngaf-chat-space-3);border-bottom:1px solid var(--ngaf-chat-separator)}:host([data-mode=\"collapsed\"]) .chat-sidenav__topbar{flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:var(--ngaf-chat-space-2) 0}.chat-sidenav__topbar .chat-sidenav__action--close{width:36px;height:36px;padding:0;justify-content:center;flex:0 0 auto}.chat-sidenav__topbar .chat-sidenav__action--close .chat-sidenav__action-label{display:none}.chat-sidenav__action--new{border:0;padding:12px 18px;border-radius:8px;font-size:var(--ngaf-chat-font-size-sm);font-weight:600;display:flex;align-items:center;gap:8px;cursor:pointer;width:100%}.chat-sidenav__action--new:focus-visible{outline:2px solid var(--ngaf-chat-primary);outline-offset:2px}:host([data-mode=\"collapsed\"]) .chat-sidenav__action--new{width:32px;height:32px;padding:0;border-radius:10px;justify-content:center}:host([data-mode=\"collapsed\"]) .chat-sidenav__action--new .chat-sidenav__action-label{display:none}.chat-sidenav__actions{flex-shrink:0;display:flex;flex-direction:column;gap:4px;padding:var(--ngaf-chat-space-3)}:host([data-mode=\"collapsed\"]) .chat-sidenav__actions{align-items:center;padding:var(--ngaf-chat-space-2)}.chat-sidenav__action{display:flex;align-items:center;gap:8px;width:100%;padding:8px 12px;border:0;background:transparent;color:var(--ngaf-chat-text);border-radius:8px;cursor:pointer;font-family:inherit;font-size:var(--ngaf-chat-font-size-sm);font-weight:400;text-align:left}.chat-sidenav__action:hover{background:var(--ngaf-chat-surface-alt)}.chat-sidenav__action:focus-visible{outline:2px solid var(--ngaf-chat-primary);outline-offset:2px}:host([data-mode=\"collapsed\"]) .chat-sidenav__action{width:36px;height:36px;padding:0;justify-content:center}:host([data-mode=\"collapsed\"]) .chat-sidenav__action-label{display:none}.chat-sidenav__action.chat-sidenav__action--new{background:var(--ngaf-chat-text);color:var(--ngaf-chat-bg);border-radius:8px;padding:12px 18px;font-weight:600;font-size:var(--ngaf-chat-font-size-sm)}.chat-sidenav__action.chat-sidenav__action--new:hover{background:var(--ngaf-chat-text);filter:brightness(.92)}.chat-sidenav__action-icon{width:16px;height:16px;flex-shrink:0}.chat-sidenav__primary,.chat-sidenav__sections{flex-shrink:0}.chat-sidenav__threads{flex:1 1 auto;min-height:0;overflow-y:auto}.chat-sidenav__threads-heading{padding:8px 12px 4px;font-size:11px;color:var(--ngaf-chat-text-muted);text-transform:uppercase;letter-spacing:.4px}:host([data-mode=\"collapsed\"]) .chat-sidenav__threads-heading{display:none}.chat-sidenav__footer{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-top:1px solid var(--ngaf-chat-separator);gap:8px;flex-shrink:0}.chat-sidenav__footer-left{display:flex;align-items:center;gap:4px;min-height:28px}.chat-sidenav__debug{height:28px;min-width:28px;display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:0 9px;border:0;border-radius:8px;background:transparent;color:var(--ngaf-chat-text-muted);cursor:pointer;font:inherit;font-size:12px;font-weight:500}.chat-sidenav__debug:hover{background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text)}.chat-sidenav__debug:focus-visible{outline:2px solid var(--ngaf-chat-primary);outline-offset:2px}.chat-sidenav__debug-dot{width:8px;height:8px;border-radius:50%;background:#22c55e;box-shadow:0 0 8px color-mix(in srgb,#22c55e 60%,transparent);flex:0 0 auto}.chat-sidenav__debug-dot--streaming{animation:chat-sidenav-debug-pulse 1.2s ease-in-out infinite}@keyframes chat-sidenav-debug-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(.85)}}.chat-sidenav__footer-right{display:flex;align-items:center;gap:4px;margin-left:auto}.chat-sidenav__toggle{width:28px;height:28px;border-radius:8px;border:0;background:transparent;color:var(--ngaf-chat-text-muted);cursor:pointer;display:flex;align-items:center;justify-content:center}.chat-sidenav__toggle:hover{background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text)}:host([data-mode=\"collapsed\"]) .chat-sidenav__footer{flex-direction:column;align-items:center;padding:10px 4px}:host([data-mode=\"collapsed\"]) .chat-sidenav__footer-left{display:flex;flex-direction:column;align-items:center;min-height:28px}:host([data-mode=\"collapsed\"]) .chat-sidenav__debug{width:28px;padding:0}:host([data-mode=\"collapsed\"]) .chat-sidenav__debug-label,:host([data-mode=\"collapsed\"]) .chat-sidenav__footer-left>:not(.chat-sidenav__debug){display:none}:host([data-mode=\"collapsed\"]) .chat-sidenav__footer-right{flex-direction:column}.chat-sidenav__account{display:none}.chat-sidenav__account:has(>*){display:flex;align-items:center;gap:4px}.chat-sidenav__archived{flex-shrink:0}.chat-sidenav__archived-heading{display:flex;align-items:center;gap:8px;width:100%;padding:8px 12px;border:0;border-radius:8px;background:transparent;color:var(--ngaf-chat-text);font:inherit;font-size:var(--ngaf-chat-font-size-sm);text-align:left;cursor:pointer}.chat-sidenav__archived-heading:hover{background:var(--ngaf-chat-surface-alt);color:var(--ngaf-chat-text)}.chat-sidenav__archived-heading:focus-visible{outline:2px solid var(--ngaf-chat-primary);outline-offset:2px}.chat-sidenav__archived-chevron{width:12px;height:12px;transition:transform .15s ease;flex-shrink:0}.chat-sidenav__archived[data-open=true] .chat-sidenav__archived-chevron{transform:rotate(90deg)}.chat-sidenav__archived-empty{padding:8px 12px;color:var(--ngaf-chat-text-muted);font-size:var(--ngaf-chat-font-size-sm)}:host([data-mode=\"collapsed\"]) .chat-sidenav__archived{display:none}.chat-sidenav__projects{flex-shrink:0}:host([data-mode=\"collapsed\"]) .chat-sidenav__projects{display:none}:host([data-mode=\"collapsed\"]) .chat-thread-list__initial{display:inline-flex}:host([data-mode=\"collapsed\"]) .chat-thread-list__item-title{display:none}:host([data-mode=\"collapsed\"]) .chat-thread-list__item-time{display:none}:host([data-mode=\"collapsed\"]) .chat-thread-list__kebab{display:none}:host([data-mode=\"collapsed\"]) .chat-thread-list__grip{display:none}:host([data-mode=\"collapsed\"]) .chat-thread-list__item-wrap{justify-content:center}:host([data-mode=\"collapsed\"]) .chat-thread-list__item{padding:6px;justify-content:center;align-items:center;flex-direction:row}:host([data-mode=\"collapsed\"]) .chat-thread-list__new{display:none}:host([data-mode=\"collapsed\"]) .chat-sidenav__action--search{width:32px;height:32px;padding:0;border-radius:10px;justify-content:center;background:transparent}:host([data-mode=\"collapsed\"]) .chat-sidenav__action--search .chat-sidenav__action-label{display:none}:host([data-mode=\"collapsed\"]) .chat-sidenav__threads,:host([data-mode=\"collapsed\"]) .chat-sidenav__projects,:host([data-mode=\"collapsed\"]) .chat-sidenav__archived,:host([data-mode=\"collapsed\"]) .chat-sidenav__sections,:host([data-mode=\"collapsed\"]) .chat-sidenav__primary{display:none}:host([data-mode=\"collapsed\"]) .chat-sidenav__topbar,:host([data-mode=\"collapsed\"]) .chat-sidenav__actions{padding:8px 4px;align-items:center;justify-content:center}\n"] }]
11593
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:block;height:100%}:host([data-mode=\"expanded\"]),:host([data-mode=\"collapsed\"]){position:fixed;top:0;left:0;bottom:0;z-index:100}:host([data-mode=\"expanded\"]){width:var(--tplane-chat-sidenav-width-expanded)}:host([data-mode=\"collapsed\"]){width:var(--tplane-chat-sidenav-width-collapsed)}:host([data-mode=\"expanded\"]) .chat-sidenav{width:100%}:host([data-mode=\"collapsed\"]) .chat-sidenav{width:100%}:host([data-mode=\"drawer\"]){position:fixed;top:0;left:0;bottom:0;width:var(--tplane-chat-sidenav-width-drawer);z-index:var(--tplane-chat-z-drawer, 1001)}:host([data-mode=\"drawer\"][data-open=\"true\"]){box-shadow:8px 0 32px #0000002e}.chat-sidenav{display:flex;flex-direction:column;height:100%;background:var(--tplane-chat-bg);border-right:1px solid var(--tplane-chat-separator);box-sizing:border-box;overflow:hidden}:host([data-mode=\"drawer\"]) .chat-sidenav{width:100%;height:100%;transition:transform .2s ease;transform:translate(-100%)}:host([data-mode=\"drawer\"][data-open=\"true\"]) .chat-sidenav{transform:translate(0)}.chat-sidenav__header{flex-shrink:0;padding:var(--tplane-chat-space-3)}.chat-sidenav__header:empty{display:none}.chat-sidenav__topbar{flex-shrink:0;display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:4px;padding:var(--tplane-chat-space-2) var(--tplane-chat-space-3);border-bottom:1px solid var(--tplane-chat-separator)}:host([data-mode=\"collapsed\"]) .chat-sidenav__topbar{flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:var(--tplane-chat-space-2) 0}.chat-sidenav__topbar .chat-sidenav__action--close{width:36px;height:36px;padding:0;justify-content:center;flex:0 0 auto}.chat-sidenav__topbar .chat-sidenav__action--close .chat-sidenav__action-label{display:none}.chat-sidenav__action--new{border:0;padding:12px 18px;border-radius:8px;font-size:var(--tplane-chat-font-size-sm);font-weight:600;display:flex;align-items:center;gap:8px;cursor:pointer;width:100%}.chat-sidenav__action--new:focus-visible{outline:2px solid var(--tplane-chat-primary);outline-offset:2px}:host([data-mode=\"collapsed\"]) .chat-sidenav__action--new{width:32px;height:32px;padding:0;border-radius:10px;justify-content:center}:host([data-mode=\"collapsed\"]) .chat-sidenav__action--new .chat-sidenav__action-label{display:none}.chat-sidenav__actions{flex-shrink:0;display:flex;flex-direction:column;gap:4px;padding:var(--tplane-chat-space-3)}:host([data-mode=\"collapsed\"]) .chat-sidenav__actions{align-items:center;padding:var(--tplane-chat-space-2)}.chat-sidenav__action{display:flex;align-items:center;gap:8px;width:100%;padding:8px 12px;border:0;background:transparent;color:var(--tplane-chat-text);border-radius:8px;cursor:pointer;font-family:inherit;font-size:var(--tplane-chat-font-size-sm);font-weight:400;text-align:left}.chat-sidenav__action:hover{background:var(--tplane-chat-surface-alt)}.chat-sidenav__action:focus-visible{outline:2px solid var(--tplane-chat-primary);outline-offset:2px}:host([data-mode=\"collapsed\"]) .chat-sidenav__action{width:36px;height:36px;padding:0;justify-content:center}:host([data-mode=\"collapsed\"]) .chat-sidenav__action-label{display:none}.chat-sidenav__action.chat-sidenav__action--new{background:var(--tplane-chat-text);color:var(--tplane-chat-bg);border-radius:8px;padding:12px 18px;font-weight:600;font-size:var(--tplane-chat-font-size-sm)}.chat-sidenav__action.chat-sidenav__action--new:hover{background:var(--tplane-chat-text);filter:brightness(.92)}.chat-sidenav__action-icon{width:16px;height:16px;flex-shrink:0}.chat-sidenav__primary,.chat-sidenav__sections{flex-shrink:0}.chat-sidenav__threads{flex:1 1 auto;min-height:0;overflow-y:auto}.chat-sidenav__threads-heading{padding:8px 12px 4px;font-size:11px;color:var(--tplane-chat-text-muted);text-transform:uppercase;letter-spacing:.4px}:host([data-mode=\"collapsed\"]) .chat-sidenav__threads-heading{display:none}.chat-sidenav__footer{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-top:1px solid var(--tplane-chat-separator);gap:8px;flex-shrink:0}.chat-sidenav__footer-left{display:flex;align-items:center;gap:4px;min-height:28px}.chat-sidenav__debug{height:28px;min-width:28px;display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:0 9px;border:0;border-radius:8px;background:transparent;color:var(--tplane-chat-text-muted);cursor:pointer;font:inherit;font-size:12px;font-weight:500}.chat-sidenav__debug:hover{background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text)}.chat-sidenav__debug:focus-visible{outline:2px solid var(--tplane-chat-primary);outline-offset:2px}.chat-sidenav__debug-dot{width:8px;height:8px;border-radius:50%;background:#22c55e;box-shadow:0 0 8px color-mix(in srgb,#22c55e 60%,transparent);flex:0 0 auto}.chat-sidenav__debug-dot--streaming{animation:chat-sidenav-debug-pulse 1.2s ease-in-out infinite}@keyframes chat-sidenav-debug-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(.85)}}.chat-sidenav__footer-right{display:flex;align-items:center;gap:4px;margin-left:auto}.chat-sidenav__toggle{width:28px;height:28px;border-radius:8px;border:0;background:transparent;color:var(--tplane-chat-text-muted);cursor:pointer;display:flex;align-items:center;justify-content:center}.chat-sidenav__toggle:hover{background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text)}:host([data-mode=\"collapsed\"]) .chat-sidenav__footer{flex-direction:column;align-items:center;padding:10px 4px}:host([data-mode=\"collapsed\"]) .chat-sidenav__footer-left{display:flex;flex-direction:column;align-items:center;min-height:28px}:host([data-mode=\"collapsed\"]) .chat-sidenav__debug{width:28px;padding:0}:host([data-mode=\"collapsed\"]) .chat-sidenav__debug-label,:host([data-mode=\"collapsed\"]) .chat-sidenav__footer-left>:not(.chat-sidenav__debug){display:none}:host([data-mode=\"collapsed\"]) .chat-sidenav__footer-right{flex-direction:column}.chat-sidenav__account{display:none}.chat-sidenav__account:has(>*){display:flex;align-items:center;gap:4px}.chat-sidenav__archived{flex-shrink:0}.chat-sidenav__archived-heading{display:flex;align-items:center;gap:8px;width:100%;padding:8px 12px;border:0;border-radius:8px;background:transparent;color:var(--tplane-chat-text);font:inherit;font-size:var(--tplane-chat-font-size-sm);text-align:left;cursor:pointer}.chat-sidenav__archived-heading:hover{background:var(--tplane-chat-surface-alt);color:var(--tplane-chat-text)}.chat-sidenav__archived-heading:focus-visible{outline:2px solid var(--tplane-chat-primary);outline-offset:2px}.chat-sidenav__archived-chevron{width:12px;height:12px;transition:transform .15s ease;flex-shrink:0}.chat-sidenav__archived[data-open=true] .chat-sidenav__archived-chevron{transform:rotate(90deg)}.chat-sidenav__archived-empty{padding:8px 12px;color:var(--tplane-chat-text-muted);font-size:var(--tplane-chat-font-size-sm)}:host([data-mode=\"collapsed\"]) .chat-sidenav__archived{display:none}.chat-sidenav__projects{flex-shrink:0}:host([data-mode=\"collapsed\"]) .chat-sidenav__projects{display:none}:host([data-mode=\"collapsed\"]) .chat-thread-list__initial{display:inline-flex}:host([data-mode=\"collapsed\"]) .chat-thread-list__item-title{display:none}:host([data-mode=\"collapsed\"]) .chat-thread-list__item-time{display:none}:host([data-mode=\"collapsed\"]) .chat-thread-list__kebab{display:none}:host([data-mode=\"collapsed\"]) .chat-thread-list__grip{display:none}:host([data-mode=\"collapsed\"]) .chat-thread-list__item-wrap{justify-content:center}:host([data-mode=\"collapsed\"]) .chat-thread-list__item{padding:6px;justify-content:center;align-items:center;flex-direction:row}:host([data-mode=\"collapsed\"]) .chat-thread-list__new{display:none}:host([data-mode=\"collapsed\"]) .chat-sidenav__action--search{width:32px;height:32px;padding:0;border-radius:10px;justify-content:center;background:transparent}:host([data-mode=\"collapsed\"]) .chat-sidenav__action--search .chat-sidenav__action-label{display:none}:host([data-mode=\"collapsed\"]) .chat-sidenav__threads,:host([data-mode=\"collapsed\"]) .chat-sidenav__projects,:host([data-mode=\"collapsed\"]) .chat-sidenav__archived,:host([data-mode=\"collapsed\"]) .chat-sidenav__sections,:host([data-mode=\"collapsed\"]) .chat-sidenav__primary{display:none}:host([data-mode=\"collapsed\"]) .chat-sidenav__topbar,:host([data-mode=\"collapsed\"]) .chat-sidenav__actions{padding:8px 4px;align-items:center;justify-content:center}\n"] }]
11011
11594
  }], ctorParameters: () => [], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }], threads: [{ type: i0.Input, args: [{ isSignal: true, alias: "threads", required: false }] }], activeThreadId: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeThreadId", required: false }] }], actions: [{ type: i0.Input, args: [{ isSignal: true, alias: "actions", required: false }] }], archivedThreads: [{ type: i0.Input, args: [{ isSignal: true, alias: "archivedThreads", required: false }] }], projects: [{ type: i0.Input, args: [{ isSignal: true, alias: "projects", required: false }] }], selectedProjectId: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedProjectId", required: false }] }], projectActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "projectActions", required: false }] }], agent: [{ type: i0.Input, args: [{ isSignal: true, alias: "agent", required: false }] }], debug: [{ type: i0.Input, args: [{ isSignal: true, alias: "debug", required: false }] }], newChat: [{ type: i0.Output, args: ["newChat"] }], threadSelected: [{ type: i0.Output, args: ["threadSelected"] }], searchOpened: [{ type: i0.Output, args: ["searchOpened"] }], openChange: [{ type: i0.Output, args: ["openChange"] }], modeChange: [{ type: i0.Output, args: ["modeChange"] }], projectSelected: [{ type: i0.Output, args: ["projectSelected"] }], newProjectRequested: [{ type: i0.Output, args: ["newProjectRequested"] }], debugHost: [{ type: i0.ViewChild, args: ['debugHost', { ...{
11012
11595
  read: ViewContainerRef,
11013
11596
  }, isSignal: true }] }] } });
@@ -11038,7 +11621,7 @@ class ChatSidenavScrimComponent {
11038
11621
  (click)="dismiss.emit()"
11039
11622
  ></button>
11040
11623
  }
11041
- `, isInline: true, styles: [":host{display:contents}.chat-sidenav-scrim__button{position:fixed;inset:0;background:#0006;z-index:var(--ngaf-chat-z-drawer-scrim, 1000);border:0;padding:0;cursor:pointer}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11624
+ `, isInline: true, styles: [":host{display:contents}.chat-sidenav-scrim__button{position:fixed;inset:0;background:#0006;z-index:var(--tplane-chat-z-drawer-scrim, 1000);border:0;padding:0;cursor:pointer}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11042
11625
  }
11043
11626
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatSidenavScrimComponent, decorators: [{
11044
11627
  type: Component,
@@ -11051,7 +11634,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
11051
11634
  (click)="dismiss.emit()"
11052
11635
  ></button>
11053
11636
  }
11054
- `, styles: [":host{display:contents}.chat-sidenav-scrim__button{position:fixed;inset:0;background:#0006;z-index:var(--ngaf-chat-z-drawer-scrim, 1000);border:0;padding:0;cursor:pointer}\n"] }]
11637
+ `, styles: [":host{display:contents}.chat-sidenav-scrim__button{position:fixed;inset:0;background:#0006;z-index:var(--tplane-chat-z-drawer-scrim, 1000);border:0;padding:0;cursor:pointer}\n"] }]
11055
11638
  }], propDecorators: { open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }], dismiss: [{ type: i0.Output, args: ["dismiss"] }] } });
11056
11639
 
11057
11640
  // SPDX-License-Identifier: MIT
@@ -11102,7 +11685,7 @@ class ChatInterruptPanelComponent {
11102
11685
  </div>
11103
11686
  </div>
11104
11687
  }
11105
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ".chat-interrupt-panel{background:var(--ngaf-chat-surface);color:var(--ngaf-chat-text);border:1px solid var(--ngaf-chat-separator);border-radius:var(--ngaf-chat-radius-card);padding:14px 16px;font-size:var(--ngaf-chat-font-size-sm)}.chat-interrupt-panel__eyebrow{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.12em;color:var(--ngaf-chat-warning-text);margin:0 0 8px;display:flex;align-items:center;gap:6px}.chat-interrupt-panel__dot{width:6px;height:6px;border-radius:999px;background:var(--ngaf-chat-warning-text);flex:0 0 6px}.chat-interrupt-panel__body{margin:0 0 12px;color:var(--ngaf-chat-text);white-space:pre-wrap}.chat-interrupt-panel__actions{display:flex;gap:6px;flex-wrap:wrap;align-items:center}.btn{border:0;padding:6px 14px;border-radius:var(--ngaf-chat-radius-button);font-size:12px;font-weight:500;cursor:pointer;transition:transform .2s ease,opacity .2s ease}.btn:hover{transform:scale(1.03)}.btn-primary{background:var(--ngaf-chat-primary);color:var(--ngaf-chat-on-primary)}.btn-secondary{background:transparent;color:var(--ngaf-chat-text);border:1px solid var(--ngaf-chat-separator)}.btn-text{background:transparent;color:var(--ngaf-chat-text-muted);padding:6px 10px}.btn-text:hover{color:var(--ngaf-chat-text)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11688
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ".chat-interrupt-panel{background:var(--tplane-chat-surface);color:var(--tplane-chat-text);border:1px solid var(--tplane-chat-separator);border-radius:var(--tplane-chat-radius-card);padding:14px 16px;font-size:var(--tplane-chat-font-size-sm)}.chat-interrupt-panel__eyebrow{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.12em;color:var(--tplane-chat-warning-text);margin:0 0 8px;display:flex;align-items:center;gap:6px}.chat-interrupt-panel__dot{width:6px;height:6px;border-radius:999px;background:var(--tplane-chat-warning-text);flex:0 0 6px}.chat-interrupt-panel__body{margin:0 0 12px;color:var(--tplane-chat-text);white-space:pre-wrap}.chat-interrupt-panel__actions{display:flex;gap:6px;flex-wrap:wrap;align-items:center}.btn{border:0;padding:6px 14px;border-radius:var(--tplane-chat-radius-button);font-size:12px;font-weight:500;cursor:pointer;transition:transform .2s ease,opacity .2s ease}.btn:hover{transform:scale(1.03)}.btn-primary{background:var(--tplane-chat-primary);color:var(--tplane-chat-on-primary)}.btn-secondary{background:transparent;color:var(--tplane-chat-text);border:1px solid var(--tplane-chat-separator)}.btn-text{background:transparent;color:var(--tplane-chat-text-muted);padding:6px 10px}.btn-text:hover{color:var(--tplane-chat-text)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11106
11689
  }
11107
11690
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatInterruptPanelComponent, decorators: [{
11108
11691
  type: Component,
@@ -11122,7 +11705,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
11122
11705
  </div>
11123
11706
  </div>
11124
11707
  }
11125
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ".chat-interrupt-panel{background:var(--ngaf-chat-surface);color:var(--ngaf-chat-text);border:1px solid var(--ngaf-chat-separator);border-radius:var(--ngaf-chat-radius-card);padding:14px 16px;font-size:var(--ngaf-chat-font-size-sm)}.chat-interrupt-panel__eyebrow{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.12em;color:var(--ngaf-chat-warning-text);margin:0 0 8px;display:flex;align-items:center;gap:6px}.chat-interrupt-panel__dot{width:6px;height:6px;border-radius:999px;background:var(--ngaf-chat-warning-text);flex:0 0 6px}.chat-interrupt-panel__body{margin:0 0 12px;color:var(--ngaf-chat-text);white-space:pre-wrap}.chat-interrupt-panel__actions{display:flex;gap:6px;flex-wrap:wrap;align-items:center}.btn{border:0;padding:6px 14px;border-radius:var(--ngaf-chat-radius-button);font-size:12px;font-weight:500;cursor:pointer;transition:transform .2s ease,opacity .2s ease}.btn:hover{transform:scale(1.03)}.btn-primary{background:var(--ngaf-chat-primary);color:var(--ngaf-chat-on-primary)}.btn-secondary{background:transparent;color:var(--ngaf-chat-text);border:1px solid var(--ngaf-chat-separator)}.btn-text{background:transparent;color:var(--ngaf-chat-text-muted);padding:6px 10px}.btn-text:hover{color:var(--ngaf-chat-text)}\n"] }]
11708
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ".chat-interrupt-panel{background:var(--tplane-chat-surface);color:var(--tplane-chat-text);border:1px solid var(--tplane-chat-separator);border-radius:var(--tplane-chat-radius-card);padding:14px 16px;font-size:var(--tplane-chat-font-size-sm)}.chat-interrupt-panel__eyebrow{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.12em;color:var(--tplane-chat-warning-text);margin:0 0 8px;display:flex;align-items:center;gap:6px}.chat-interrupt-panel__dot{width:6px;height:6px;border-radius:999px;background:var(--tplane-chat-warning-text);flex:0 0 6px}.chat-interrupt-panel__body{margin:0 0 12px;color:var(--tplane-chat-text);white-space:pre-wrap}.chat-interrupt-panel__actions{display:flex;gap:6px;flex-wrap:wrap;align-items:center}.btn{border:0;padding:6px 14px;border-radius:var(--tplane-chat-radius-button);font-size:12px;font-weight:500;cursor:pointer;transition:transform .2s ease,opacity .2s ease}.btn:hover{transform:scale(1.03)}.btn-primary{background:var(--tplane-chat-primary);color:var(--tplane-chat-on-primary)}.btn-secondary{background:transparent;color:var(--tplane-chat-text);border:1px solid var(--tplane-chat-separator)}.btn-text{background:transparent;color:var(--tplane-chat-text-muted);padding:6px 10px}.btn-text:hover{color:var(--tplane-chat-text)}\n"] }]
11126
11709
  }], propDecorators: { agent: [{ type: i0.Input, args: [{ isSignal: true, alias: "agent", required: true }] }], action: [{ type: i0.Output, args: ["action"] }] } });
11127
11710
 
11128
11711
  // SPDX-License-Identifier: MIT
@@ -11210,7 +11793,7 @@ class ChatApprovalCardComponent {
11210
11793
  <button type="button" class="btn btn-primary" (click)="emit('approve')">Approve</button>
11211
11794
  </div>
11212
11795
  </dialog>
11213
- `, isInline: true, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:contents}dialog.chat-approval-card{width:440px;max-width:calc(100vw - 32px);margin:auto;padding:0;border:0;border-radius:12px;background:var(--ngaf-chat-surface);color:var(--ngaf-chat-text);box-shadow:0 20px 50px #0000002e}dialog.chat-approval-card::backdrop{background:#00000080;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.chat-approval-card__header{padding:14px 16px 12px;display:flex;align-items:center;gap:8px;border-bottom:1px solid var(--ngaf-chat-separator)}.chat-approval-card__header h4{margin:0;font-size:14px;font-weight:600;color:var(--ngaf-chat-text)}.chat-approval-card__header svg{color:var(--ngaf-chat-warning-text);width:16px;height:16px;flex:0 0 16px}.chat-approval-card__body{padding:14px 16px;font-size:var(--ngaf-chat-font-size-sm, 13px);color:var(--ngaf-chat-text)}.chat-approval-card__actions{padding:8px 16px 14px;display:flex;gap:6px;justify-content:flex-end;align-items:center}.btn{border:0;padding:6px 14px;border-radius:8px;font-size:12px;font-weight:500;cursor:pointer;transition:transform .2s ease,opacity .2s ease}.btn:hover{transform:scale(1.03)}.btn-primary{background:var(--ngaf-chat-primary);color:var(--ngaf-chat-on-primary)}.btn-secondary{background:transparent;color:var(--ngaf-chat-text);border:1px solid var(--ngaf-chat-separator)}.btn-text{background:transparent;color:var(--ngaf-chat-text-muted);padding:6px 10px}.btn-text:hover{color:var(--ngaf-chat-text)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11796
+ `, isInline: true, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:contents}dialog.chat-approval-card{width:440px;max-width:calc(100vw - 32px);margin:auto;padding:0;border:0;border-radius:12px;background:var(--tplane-chat-surface);color:var(--tplane-chat-text);box-shadow:0 20px 50px #0000002e}dialog.chat-approval-card::backdrop{background:#00000080;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.chat-approval-card__header{padding:14px 16px 12px;display:flex;align-items:center;gap:8px;border-bottom:1px solid var(--tplane-chat-separator)}.chat-approval-card__header h4{margin:0;font-size:14px;font-weight:600;color:var(--tplane-chat-text)}.chat-approval-card__header svg{color:var(--tplane-chat-warning-text);width:16px;height:16px;flex:0 0 16px}.chat-approval-card__body{padding:14px 16px;font-size:var(--tplane-chat-font-size-sm, 13px);color:var(--tplane-chat-text)}.chat-approval-card__actions{padding:8px 16px 14px;display:flex;gap:6px;justify-content:flex-end;align-items:center}.btn{border:0;padding:6px 14px;border-radius:8px;font-size:12px;font-weight:500;cursor:pointer;transition:transform .2s ease,opacity .2s ease}.btn:hover{transform:scale(1.03)}.btn-primary{background:var(--tplane-chat-primary);color:var(--tplane-chat-on-primary)}.btn-secondary{background:transparent;color:var(--tplane-chat-text);border:1px solid var(--tplane-chat-separator)}.btn-text{background:transparent;color:var(--tplane-chat-text-muted);padding:6px 10px}.btn-text:hover{color:var(--tplane-chat-text)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11214
11797
  }
11215
11798
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: ChatApprovalCardComponent, decorators: [{
11216
11799
  type: Component,
@@ -11235,7 +11818,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
11235
11818
  <button type="button" class="btn btn-primary" (click)="emit('approve')">Approve</button>
11236
11819
  </div>
11237
11820
  </dialog>
11238
- `, styles: [":host{font-family:var(--ngaf-chat-font-family);color:var(--ngaf-chat-text)}\n", ":host{display:contents}dialog.chat-approval-card{width:440px;max-width:calc(100vw - 32px);margin:auto;padding:0;border:0;border-radius:12px;background:var(--ngaf-chat-surface);color:var(--ngaf-chat-text);box-shadow:0 20px 50px #0000002e}dialog.chat-approval-card::backdrop{background:#00000080;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.chat-approval-card__header{padding:14px 16px 12px;display:flex;align-items:center;gap:8px;border-bottom:1px solid var(--ngaf-chat-separator)}.chat-approval-card__header h4{margin:0;font-size:14px;font-weight:600;color:var(--ngaf-chat-text)}.chat-approval-card__header svg{color:var(--ngaf-chat-warning-text);width:16px;height:16px;flex:0 0 16px}.chat-approval-card__body{padding:14px 16px;font-size:var(--ngaf-chat-font-size-sm, 13px);color:var(--ngaf-chat-text)}.chat-approval-card__actions{padding:8px 16px 14px;display:flex;gap:6px;justify-content:flex-end;align-items:center}.btn{border:0;padding:6px 14px;border-radius:8px;font-size:12px;font-weight:500;cursor:pointer;transition:transform .2s ease,opacity .2s ease}.btn:hover{transform:scale(1.03)}.btn-primary{background:var(--ngaf-chat-primary);color:var(--ngaf-chat-on-primary)}.btn-secondary{background:transparent;color:var(--ngaf-chat-text);border:1px solid var(--ngaf-chat-separator)}.btn-text{background:transparent;color:var(--ngaf-chat-text-muted);padding:6px 10px}.btn-text:hover{color:var(--ngaf-chat-text)}\n"] }]
11821
+ `, styles: [":host{font-family:var(--tplane-chat-font-family);color:var(--tplane-chat-text)}\n", ":host{display:contents}dialog.chat-approval-card{width:440px;max-width:calc(100vw - 32px);margin:auto;padding:0;border:0;border-radius:12px;background:var(--tplane-chat-surface);color:var(--tplane-chat-text);box-shadow:0 20px 50px #0000002e}dialog.chat-approval-card::backdrop{background:#00000080;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.chat-approval-card__header{padding:14px 16px 12px;display:flex;align-items:center;gap:8px;border-bottom:1px solid var(--tplane-chat-separator)}.chat-approval-card__header h4{margin:0;font-size:14px;font-weight:600;color:var(--tplane-chat-text)}.chat-approval-card__header svg{color:var(--tplane-chat-warning-text);width:16px;height:16px;flex:0 0 16px}.chat-approval-card__body{padding:14px 16px;font-size:var(--tplane-chat-font-size-sm, 13px);color:var(--tplane-chat-text)}.chat-approval-card__actions{padding:8px 16px 14px;display:flex;gap:6px;justify-content:flex-end;align-items:center}.btn{border:0;padding:6px 14px;border-radius:8px;font-size:12px;font-weight:500;cursor:pointer;transition:transform .2s ease,opacity .2s ease}.btn:hover{transform:scale(1.03)}.btn-primary{background:var(--tplane-chat-primary);color:var(--tplane-chat-on-primary)}.btn-secondary{background:transparent;color:var(--tplane-chat-text);border:1px solid var(--tplane-chat-separator)}.btn-text{background:transparent;color:var(--tplane-chat-text-muted);padding:6px 10px}.btn-text:hover{color:var(--tplane-chat-text)}\n"] }]
11239
11822
  }], ctorParameters: () => [], propDecorators: { agent: [{ type: i0.Input, args: [{ isSignal: true, alias: "agent", required: true }] }], matchKind: [{ type: i0.Input, args: [{ isSignal: true, alias: "matchKind", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], showEdit: [{ type: i0.Input, args: [{ isSignal: true, alias: "showEdit", required: false }] }], action: [{ type: i0.Output, args: ["action"] }], bodyTemplate: [{ type: i0.ContentChild, args: ['body', { isSignal: true }] }], dialogRef: [{ type: i0.ViewChild, args: ['dialogEl', { isSignal: true }] }] } });
11240
11823
 
11241
11824
  // SPDX-License-Identifier: MIT
@@ -11612,6 +12195,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
11612
12195
  }], propDecorators: { axis: [{ type: i0.Input, args: [{ isSignal: true, alias: "axis", required: false }] }], direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: false }] }], bindings: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindings", required: false }] }], emit: [{ type: i0.Input, args: [{ isSignal: true, alias: "emit", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], childKeys: [{ type: i0.Input, args: [{ isSignal: true, alias: "childKeys", required: false }] }], spec: [{ type: i0.Input, args: [{ isSignal: true, alias: "spec", required: false }] }] } });
11613
12196
 
11614
12197
  // SPDX-License-Identifier: MIT
12198
+ /**
12199
+ * Convert an icon identifier to its Material Symbols ligature form.
12200
+ *
12201
+ * Material Symbols ligatures are snake_case (`account_circle`, `trending_up`),
12202
+ * but A2UI catalogs commonly emit camelCase identifiers (`accountCircle`,
12203
+ * `shoppingCart`). Splitting on lower→upper boundaries and lowercasing maps
12204
+ * camelCase → the matching ligature. Already-snake_case names, single words,
12205
+ * and non-identifier glyphs (emoji) have no boundaries to split and pass
12206
+ * through unchanged. Unknown names still fall back to the browser default.
12207
+ */
12208
+ function toMaterialSymbolName(name) {
12209
+ return name.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase();
12210
+ }
11615
12211
  class A2uiIconComponent {
11616
12212
  /** v1 canonical prop. */
11617
12213
  name = input(undefined, ...(ngDevMode ? [{ debugName: "name" }] : []));
@@ -11625,24 +12221,32 @@ class A2uiIconComponent {
11625
12221
  childKeys = input([], ...(ngDevMode ? [{ debugName: "childKeys" }] : []));
11626
12222
  spec = input(undefined, ...(ngDevMode ? [{ debugName: "spec" }] : []));
11627
12223
  effectiveName = computed(() => this.name() ?? this.icon(), ...(ngDevMode ? [{ debugName: "effectiveName" }] : []));
12224
+ /** The effective name as a Material Symbols ligature (camelCase → snake_case). */
12225
+ glyphName = computed(() => toMaterialSymbolName(this.effectiveName()), ...(ngDevMode ? [{ debugName: "glyphName" }] : []));
11628
12226
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: A2uiIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11629
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.6", type: A2uiIconComponent, isStandalone: true, selector: "a2ui-icon", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, bindings: { classPropertyName: "bindings", publicName: "bindings", isSignal: true, isRequired: false, transformFunction: null }, emit: { classPropertyName: "emit", publicName: "emit", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, childKeys: { classPropertyName: "childKeys", publicName: "childKeys", isSignal: true, isRequired: false, transformFunction: null }, spec: { classPropertyName: "spec", publicName: "spec", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
11630
- <span
11631
- class="a2ui-icon"
11632
- [style.font-size]="size() ? size() + 'px' : '1.125rem'"
11633
- [attr.aria-label]="effectiveName()"
11634
- >{{ effectiveName() }}</span>
11635
- `, isInline: true, styles: [".a2ui-icon{display:inline-flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none}\n"] });
12227
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: A2uiIconComponent, isStandalone: true, selector: "a2ui-icon", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, bindings: { classPropertyName: "bindings", publicName: "bindings", isSignal: true, isRequired: false, transformFunction: null }, emit: { classPropertyName: "emit", publicName: "emit", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, childKeys: { classPropertyName: "childKeys", publicName: "childKeys", isSignal: true, isRequired: false, transformFunction: null }, spec: { classPropertyName: "spec", publicName: "spec", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
12228
+ @if (effectiveName(); as name) {
12229
+ <span
12230
+ class="a2ui-icon material-symbols-outlined"
12231
+ [style.font-size]="size() ? size() + 'px' : '1.125rem'"
12232
+ [attr.aria-label]="name"
12233
+ role="img"
12234
+ >{{ glyphName() }}</span>
12235
+ }
12236
+ `, isInline: true, styles: [".a2ui-icon{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;direction:ltr;font-feature-settings:\"liga\";-webkit-font-feature-settings:\"liga\";-webkit-font-smoothing:antialiased;font-variation-settings:\"FILL\" 0,\"wght\" 400,\"GRAD\" 0,\"opsz\" 24;color:currentColor;display:inline-flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none}\n"] });
11636
12237
  }
11637
12238
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: A2uiIconComponent, decorators: [{
11638
12239
  type: Component,
11639
12240
  args: [{ selector: 'a2ui-icon', standalone: true, template: `
11640
- <span
11641
- class="a2ui-icon"
11642
- [style.font-size]="size() ? size() + 'px' : '1.125rem'"
11643
- [attr.aria-label]="effectiveName()"
11644
- >{{ effectiveName() }}</span>
11645
- `, styles: [".a2ui-icon{display:inline-flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none}\n"] }]
12241
+ @if (effectiveName(); as name) {
12242
+ <span
12243
+ class="a2ui-icon material-symbols-outlined"
12244
+ [style.font-size]="size() ? size() + 'px' : '1.125rem'"
12245
+ [attr.aria-label]="name"
12246
+ role="img"
12247
+ >{{ glyphName() }}</span>
12248
+ }
12249
+ `, styles: [".a2ui-icon{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;direction:ltr;font-feature-settings:\"liga\";-webkit-font-feature-settings:\"liga\";-webkit-font-smoothing:antialiased;font-variation-settings:\"FILL\" 0,\"wght\" 400,\"GRAD\" 0,\"opsz\" 24;color:currentColor;display:inline-flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none}\n"] }]
11646
12250
  }], propDecorators: { name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], bindings: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindings", required: false }] }], emit: [{ type: i0.Input, args: [{ isSignal: true, alias: "emit", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], childKeys: [{ type: i0.Input, args: [{ isSignal: true, alias: "childKeys", required: false }] }], spec: [{ type: i0.Input, args: [{ isSignal: true, alias: "spec", required: false }] }] } });
11647
12251
 
11648
12252
  // SPDX-License-Identifier: MIT
@@ -12537,5 +13141,5 @@ function mockAgent(opts = {}) {
12537
13141
  * Generated bundle index. Do not edit.
12538
13142
  */
12539
13143
 
12540
- export { A2uiAudioPlayerComponent, A2uiButtonComponent, A2uiCardComponent, A2uiCheckBoxComponent, A2uiColumnComponent, A2uiDateTimeInputComponent, A2uiDividerComponent, A2uiIconComponent, A2uiImageComponent, A2uiListComponent, A2uiModalComponent, A2uiMultipleChoiceComponent, A2uiRowComponent, A2uiSliderComponent, A2uiSurfaceComponent, A2uiTabsComponent, A2uiTextComponent, A2uiTextFieldComponent, A2uiVideoComponent, AGENT_ERROR_MESSAGES, AgentError, CHAT_CONFIG, CHAT_LIFECYCLE, ChatApprovalCardComponent, ChatCitationCardTemplateDirective, ChatCitationsCardComponent, ChatCitationsComponent, ChatComponent, ChatConfirmDialogComponent, ChatErrorComponent, ChatGenerativeUiComponent, ChatGenuiSkeletonComponent, ChatHistorySearchPaletteComponent, ChatInputComponent, ChatInterruptComponent, ChatInterruptPanelComponent, ChatLauncherButtonComponent, ChatMessageActionsComponent, ChatMessageComponent, ChatMessageListComponent, ChatOverflowMenuComponent, ChatPopupComponent, ChatProjectListComponent, ChatReasoningComponent, ChatScrollBubbleComponent, ChatSelectComponent, ChatSidebarComponent, ChatSidenavComponent, ChatSidenavScrimComponent, ChatStreamingMdComponent, ChatSubagentCardComponent, ChatSubagentsComponent, ChatSuggestionsComponent, ChatThreadListComponent, ChatTimelineComponent, ChatTimelineSliderComponent, ChatToolCallCardComponent, ChatToolCallTemplateDirective, ChatToolCallsComponent, ChatToolViewsComponent, ChatTraceComponent, ChatTypingIndicatorComponent, ChatWelcomeComponent, ChatWelcomeSuggestionComponent, ChatWindowComponent, CitationsResolverService, IS_HEADER_ROW, MARKDOWN_VIEW_REGISTRY, MarkdownAutolinkComponent, MarkdownBlockquoteComponent, MarkdownChildrenComponent, MarkdownCitationReferenceComponent, MarkdownCodeBlockComponent, MarkdownDocumentComponent, MarkdownEmphasisComponent, MarkdownHardBreakComponent, MarkdownHeadingComponent, MarkdownImageComponent, MarkdownInlineCodeComponent, MarkdownLinkComponent, MarkdownListComponent, MarkdownListItemComponent, MarkdownParagraphComponent, MarkdownSoftBreakComponent, MarkdownStrikethroughComponent, MarkdownStrongComponent, MarkdownTableCellComponent, MarkdownTableComponent, MarkdownTableRowComponent, MarkdownTextComponent, MarkdownThematicBreakComponent, MessageTemplateDirective, a2uiBasicCatalog, action, ask, buildA2uiActionMessage, cacheplaneMarkdownViews, createA2uiSurfaceStore, createAgentRef, createContentClassifier, createParseTreeStore, createPartialArgsBridge, deriveJsonSchema, emitBinding, executeFunctionTool, extractErrorMessage, formatDuration, getInterrupt, getMessageType, injectThreadRouting, isAbortError, isAssistantMessage, isSystemMessage, isToolMessage, isTyping, isUserMessage, messageContent, mockAgent, normalizeEnvelopeArgs, normalizeViewEntry, provideChat, renderMarkdown, startClientToolExecutor, statusColor, submitMessage, toAgentError, toClientToolSpecs, tools, validateArgs, view };
13144
+ export { A2uiAudioPlayerComponent, A2uiButtonComponent, A2uiCardComponent, A2uiCheckBoxComponent, A2uiColumnComponent, A2uiDateTimeInputComponent, A2uiDividerComponent, A2uiIconComponent, A2uiImageComponent, A2uiListComponent, A2uiModalComponent, A2uiMultipleChoiceComponent, A2uiRowComponent, A2uiSliderComponent, A2uiSurfaceComponent, A2uiTabsComponent, A2uiTextComponent, A2uiTextFieldComponent, A2uiVideoComponent, AGENT_ERROR_MESSAGES, AgentError, CHAT_CONFIG, CHAT_LIFECYCLE, ChatApprovalCardComponent, ChatCitationCardTemplateDirective, ChatCitationsCardComponent, ChatCitationsComponent, ChatComponent, ChatConfirmDialogComponent, ChatConnectedOverlayDirective, ChatErrorComponent, ChatGenerativeUiComponent, ChatGenuiSkeletonComponent, ChatHistorySearchPaletteComponent, ChatInputComponent, ChatInterruptComponent, ChatInterruptPanelComponent, ChatLauncherButtonComponent, ChatMessageActionsComponent, ChatMessageComponent, ChatMessageListComponent, ChatOverflowMenuComponent, ChatOverlayOriginDirective, ChatPopupComponent, ChatProjectListComponent, ChatReasoningComponent, ChatScrollBubbleComponent, ChatSelectComponent, ChatSidebarComponent, ChatSidenavComponent, ChatSidenavScrimComponent, ChatStreamingMdComponent, ChatSubagentCardComponent, ChatSubagentsComponent, ChatSuggestionsComponent, ChatThreadListComponent, ChatTimelineComponent, ChatTimelineSliderComponent, ChatToolCallCardComponent, ChatToolCallTemplateDirective, ChatToolCallsComponent, ChatToolViewsComponent, ChatTraceComponent, ChatTypingIndicatorComponent, ChatWelcomeComponent, ChatWelcomeSuggestionComponent, ChatWindowComponent, CitationsResolverService, IS_HEADER_ROW, MARKDOWN_VIEW_REGISTRY, MarkdownAutolinkComponent, MarkdownBlockquoteComponent, MarkdownChildrenComponent, MarkdownCitationReferenceComponent, MarkdownCodeBlockComponent, MarkdownDocumentComponent, MarkdownEmphasisComponent, MarkdownHardBreakComponent, MarkdownHeadingComponent, MarkdownHtmlComponent, MarkdownImageComponent, MarkdownInlineCodeComponent, MarkdownLinkComponent, MarkdownListComponent, MarkdownListItemComponent, MarkdownMathComponent, MarkdownParagraphComponent, MarkdownSoftBreakComponent, MarkdownStrikethroughComponent, MarkdownStrongComponent, MarkdownTableCellComponent, MarkdownTableComponent, MarkdownTableRowComponent, MarkdownTextComponent, MarkdownThematicBreakComponent, MessageTemplateDirective, a2uiBasicCatalog, action, ask, buildA2uiActionMessage, cacheplaneMarkdownViews, createA2uiSurfaceStore, createAgentRef, createContentClassifier, createParseTreeStore, createPartialArgsBridge, deriveJsonSchema, emitBinding, executeFunctionTool, extractErrorMessage, formatDuration, getInterrupt, getMessageType, injectThreadRouting, isAbortError, isAssistantMessage, isSystemMessage, isToolMessage, isTyping, isUserMessage, messageContent, mockAgent, normalizeEnvelopeArgs, normalizeViewEntry, provideChat, renderMarkdown, startClientToolExecutor, statusColor, submitMessage, toAgentError, toClientToolSpecs, tools, validateArgs, view };
12541
13145
  //# sourceMappingURL=threadplane-chat.mjs.map