@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,
|
|
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
|
-
--
|
|
267
|
-
--
|
|
268
|
-
--
|
|
269
|
-
--
|
|
270
|
-
--
|
|
271
|
-
--
|
|
272
|
-
--
|
|
273
|
-
--
|
|
274
|
-
--
|
|
275
|
-
--
|
|
276
|
-
--
|
|
277
|
-
--
|
|
278
|
-
--
|
|
279
|
-
--
|
|
280
|
-
--
|
|
281
|
-
--
|
|
282
|
-
--
|
|
283
|
-
--
|
|
284
|
-
--
|
|
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
|
-
--
|
|
310
|
-
--
|
|
311
|
-
--
|
|
312
|
-
--
|
|
313
|
-
--
|
|
314
|
-
--
|
|
315
|
-
--
|
|
316
|
-
--
|
|
317
|
-
--
|
|
318
|
-
--
|
|
319
|
-
--
|
|
320
|
-
--
|
|
321
|
-
--
|
|
322
|
-
--
|
|
323
|
-
--
|
|
324
|
-
--
|
|
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
|
-
--
|
|
350
|
-
--
|
|
351
|
-
--
|
|
352
|
-
--
|
|
353
|
-
--
|
|
354
|
-
--
|
|
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
|
-
--
|
|
358
|
-
--
|
|
359
|
-
--
|
|
360
|
-
--
|
|
361
|
-
--
|
|
362
|
-
--
|
|
363
|
-
--
|
|
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
|
-
--
|
|
367
|
-
--
|
|
368
|
-
--
|
|
369
|
-
--
|
|
370
|
-
--
|
|
371
|
-
--
|
|
372
|
-
--
|
|
373
|
-
--
|
|
374
|
-
--
|
|
375
|
-
--
|
|
376
|
-
--
|
|
377
|
-
--
|
|
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
|
-
--
|
|
385
|
-
--
|
|
386
|
-
--
|
|
387
|
-
--
|
|
388
|
-
--
|
|
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 (--
|
|
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
|
-
--
|
|
405
|
-
--
|
|
406
|
-
--
|
|
407
|
-
--
|
|
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
|
-
--
|
|
411
|
-
--
|
|
412
|
-
--
|
|
413
|
-
--
|
|
414
|
-
--
|
|
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
|
-
--
|
|
419
|
-
--
|
|
419
|
+
--tplane-chat-debug-panel-size-h: 40vh;
|
|
420
|
+
--tplane-chat-debug-panel-size-w: 420px;
|
|
420
421
|
`;
|
|
421
422
|
const KEYFRAMES = `
|
|
422
|
-
@keyframes
|
|
423
|
+
@keyframes tplane-chat-spin {
|
|
423
424
|
0% { transform: rotate(0deg); }
|
|
424
425
|
100% { transform: rotate(360deg); }
|
|
425
426
|
}
|
|
426
|
-
@keyframes
|
|
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
|
|
431
|
+
@keyframes tplane-chat-pulse {
|
|
431
432
|
0%, 100% { opacity: 1; }
|
|
432
433
|
50% { opacity: 0.6; }
|
|
433
434
|
}
|
|
434
|
-
@keyframes
|
|
435
|
+
@keyframes tplane-chat-caret-blink {
|
|
435
436
|
0%, 50% { opacity: 1; }
|
|
436
437
|
50.01%, 100% { opacity: 0; }
|
|
437
438
|
}
|
|
438
|
-
@keyframes
|
|
439
|
+
@keyframes tplane-chat-caret-fade-in {
|
|
439
440
|
from { opacity: 0; }
|
|
440
441
|
to { opacity: 1; }
|
|
441
442
|
}
|
|
442
|
-
@keyframes
|
|
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 { --
|
|
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(--
|
|
462
|
-
color: var(--
|
|
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:
|
|
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
|
-
.
|
|
493
|
-
.
|
|
494
|
-
.
|
|
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
|
|
509
|
-
* `:root { --
|
|
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
|
|
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
|
-
--
|
|
609
|
-
--
|
|
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
|
-
--
|
|
613
|
-
--
|
|
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
|
-
--
|
|
617
|
-
--
|
|
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
|
-
--
|
|
621
|
-
--
|
|
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 = '
|
|
628
|
+
const STYLE_ELEMENT_ID = 'tplane-chat-root-tokens';
|
|
628
629
|
/**
|
|
629
|
-
* Idempotent: appends a `<style id="
|
|
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(--
|
|
668
|
-
max-width: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
755
|
+
color: var(--tplane-chat-text);
|
|
755
756
|
line-height: 1.55;
|
|
756
|
-
font-size: var(--
|
|
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(--
|
|
765
|
-
background: var(--
|
|
766
|
-
color: var(--
|
|
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(--
|
|
769
|
-
font-size: var(--
|
|
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(--
|
|
788
|
-
var(--
|
|
788
|
+
var(--tplane-chat-text) 0%,
|
|
789
|
+
var(--tplane-chat-text-muted) 70%,
|
|
789
790
|
transparent 100%);
|
|
790
|
-
box-shadow: 0 0 6px var(--
|
|
791
|
-
animation:
|
|
792
|
-
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
1144
|
+
color: var(--tplane-chat-text);
|
|
1144
1145
|
transform: scale(1.05);
|
|
1145
|
-
background: var(--
|
|
1146
|
+
background: var(--tplane-chat-surface-alt);
|
|
1146
1147
|
}
|
|
1147
1148
|
.chat-message-actions__btn:focus-visible {
|
|
1148
|
-
outline: 2px solid var(--
|
|
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(--
|
|
1153
|
-
background: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
1381
|
-
color: var(--
|
|
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(--
|
|
1390
|
-
border-bottom: 1px solid var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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:
|
|
1476
|
-
:host([data-state="error"]) .chat-trace__label { color: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
1587
|
-
border: 1px solid var(--
|
|
1587
|
+
background: var(--tplane-chat-surface-alt);
|
|
1588
|
+
border: 1px solid var(--tplane-chat-separator);
|
|
1588
1589
|
border-radius: 9999px;
|
|
1589
|
-
color: var(--
|
|
1590
|
-
font-size: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
1621
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
1663
|
-
chat-streaming-md mark { background: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
1688
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
1696
|
-
color: var(--
|
|
1696
|
+
background: var(--tplane-chat-surface-alt);
|
|
1697
|
+
color: var(--tplane-chat-text);
|
|
1697
1698
|
padding: 12px 14px;
|
|
1698
|
-
border-radius: var(--
|
|
1699
|
+
border-radius: var(--tplane-chat-radius-card);
|
|
1699
1700
|
overflow-x: auto;
|
|
1700
|
-
font-family: var(--
|
|
1701
|
-
font-size: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
1789
|
-
border: 1px dashed var(--
|
|
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(--
|
|
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
|
-
|
|
2768
|
+
this.finalizeTick(); // re-materialize after a debounced finalize
|
|
2563
2769
|
if (c !== this.prior) {
|
|
2564
|
-
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
2778
|
-
background: var(--
|
|
2779
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
2828
|
-
border-radius: var(--
|
|
2829
|
-
border: 1px solid var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
2884
|
-
border: 1px solid var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
2931
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
2943
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
3172
|
-
max-width: var(--
|
|
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(--
|
|
3183
|
-
animation:
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
3267
|
-
border: 1px solid var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
3515
|
+
background: var(--tplane-chat-surface-alt);
|
|
3325
3516
|
}
|
|
3326
3517
|
.chat-history-search-palette__row-title {
|
|
3327
|
-
color: var(--
|
|
3328
|
-
font-size: var(--
|
|
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(--
|
|
3332
|
-
font-size: var(--
|
|
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(--
|
|
3529
|
+
color: var(--tplane-chat-text-muted);
|
|
3339
3530
|
text-align: center;
|
|
3340
|
-
font-size: var(--
|
|
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(--
|
|
3539
|
+
background: var(--tplane-chat-surface-alt);
|
|
3349
3540
|
border-radius: 8px;
|
|
3350
|
-
animation:
|
|
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(--
|
|
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(--
|
|
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(--
|
|
3609
|
-
border: 1px solid var(--
|
|
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(--
|
|
3618
|
-
font-size: var(--
|
|
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(--
|
|
3814
|
+
background: var(--tplane-chat-surface-alt);
|
|
3624
3815
|
}
|
|
3625
3816
|
.chat-overflow-menu__item:focus-visible {
|
|
3626
|
-
outline: 2px solid var(--
|
|
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(--
|
|
3821
|
+
color: var(--tplane-chat-error-text);
|
|
3631
3822
|
}
|
|
3632
3823
|
.chat-overflow-menu__item--disabled {
|
|
3633
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
3802
|
-
border: 1px solid var(--
|
|
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(--
|
|
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(--
|
|
3815
|
-
font-size: var(--
|
|
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(--
|
|
4019
|
+
font-size: var(--tplane-chat-font-size-sm);
|
|
3829
4020
|
cursor: pointer;
|
|
3830
|
-
border: 1px solid var(--
|
|
3831
|
-
background: var(--
|
|
3832
|
-
color: var(--
|
|
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(--
|
|
4025
|
+
.chat-confirm-dialog__cancel:hover { background: var(--tplane-chat-surface-alt); }
|
|
3835
4026
|
.chat-confirm-dialog__confirm {
|
|
3836
|
-
background: var(--
|
|
3837
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
3988
|
-
border: 1px solid var(--
|
|
3989
|
-
color: var(--
|
|
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(--
|
|
4001
|
-
animation:
|
|
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(--
|
|
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(--
|
|
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(--
|
|
4078
|
-
border: 1px solid var(--
|
|
4079
|
-
color: var(--
|
|
4080
|
-
border-radius: var(--
|
|
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(--
|
|
4083
|
-
margin: 0 var(--
|
|
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(--
|
|
4091
|
-
border: 1px solid var(--
|
|
4092
|
-
border-radius: var(--
|
|
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(--
|
|
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(--
|
|
4101
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
4159
|
-
color: var(--
|
|
4160
|
-
border-left: 3px solid var(--
|
|
4161
|
-
border-radius: var(--
|
|
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(--
|
|
4164
|
-
font-size: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
4376
|
-
case 'running': return 'background: var(--
|
|
4377
|
-
case 'complete': return 'color: var(--
|
|
4378
|
-
case 'error': return 'background: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
4716
|
-
font-size: var(--
|
|
4717
|
-
line-height: var(--
|
|
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(--
|
|
4721
|
-
background: var(--
|
|
4722
|
-
border: 1px solid var(--
|
|
4723
|
-
border-radius: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
5213
|
+
border-radius: var(--tplane-chat-radius-button);
|
|
5010
5214
|
cursor: pointer;
|
|
5011
|
-
color: var(--
|
|
5012
|
-
font-size: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
5041
|
-
border: 1px dashed var(--
|
|
5042
|
-
border-radius: var(--
|
|
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(--
|
|
5248
|
+
color: var(--tplane-chat-primary);
|
|
5045
5249
|
cursor: pointer;
|
|
5046
|
-
font-size: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
5082
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
5097
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
5113
|
-
border-radius: var(--
|
|
5114
|
-
background: var(--
|
|
5115
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
6080
|
+
border-radius: var(--tplane-chat-radius-button);
|
|
5877
6081
|
cursor: pointer;
|
|
5878
|
-
color: var(--
|
|
5879
|
-
font-size: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
5915
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
5925
|
-
border-radius: var(--
|
|
5926
|
-
background: var(--
|
|
5927
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
5937
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
5952
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
6565
|
+
padding: var(--tplane-chat-welcome-padding, 24px);
|
|
6362
6566
|
box-sizing: border-box;
|
|
6363
|
-
animation:
|
|
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(--
|
|
6573
|
+
gap: var(--tplane-chat-welcome-gap, 1.25rem);
|
|
6370
6574
|
width: 100%;
|
|
6371
|
-
max-width: var(--
|
|
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(--
|
|
6381
|
-
var(--
|
|
6584
|
+
var(--tplane-chat-text) 0%,
|
|
6585
|
+
var(--tplane-chat-text-muted) 70%,
|
|
6382
6586
|
transparent 100%);
|
|
6383
|
-
animation:
|
|
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(--
|
|
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(--
|
|
6429
|
-
border: 1px solid var(--
|
|
6632
|
+
background: var(--tplane-chat-surface);
|
|
6633
|
+
border: 1px solid var(--tplane-chat-separator);
|
|
6430
6634
|
border-radius: 9999px;
|
|
6431
|
-
color: var(--
|
|
6635
|
+
color: var(--tplane-chat-text);
|
|
6432
6636
|
font-family: inherit;
|
|
6433
|
-
font-size: var(--
|
|
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(--
|
|
6440
|
-
border-color: var(--
|
|
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(--
|
|
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
|
-
* --
|
|
6464
|
-
* --
|
|
6465
|
-
* --
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
7031
|
+
color: var(--tplane-chat-text-muted);
|
|
6551
7032
|
font: inherit;
|
|
6552
|
-
font-size: var(--
|
|
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(--
|
|
6561
|
-
color: var(--
|
|
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(--
|
|
6584
|
-
border: 1px solid var(--
|
|
7066
|
+
background: var(--tplane-chat-surface);
|
|
7067
|
+
border: 1px solid var(--tplane-chat-separator);
|
|
6585
7068
|
border-radius: 12px;
|
|
6586
|
-
box-shadow: var(--
|
|
7069
|
+
box-shadow: var(--tplane-chat-shadow-lg);
|
|
6587
7070
|
padding: 4px;
|
|
6588
|
-
|
|
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(--
|
|
7084
|
+
color: var(--tplane-chat-text);
|
|
6602
7085
|
font: inherit;
|
|
6603
|
-
font-size: var(--
|
|
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(--
|
|
6608
|
-
color: var(--
|
|
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(--
|
|
7097
|
+
background: var(--tplane-chat-surface-alt);
|
|
6615
7098
|
outline: none;
|
|
6616
7099
|
}
|
|
6617
7100
|
.chat-select__option.is-active {
|
|
6618
|
-
background: var(--
|
|
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.
|
|
6631
|
-
* (
|
|
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
|
-
*
|
|
6635
|
-
*
|
|
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
|
-
|
|
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
|
-
|
|
6655
|
-
|
|
6656
|
-
|
|
6657
|
-
|
|
6658
|
-
|
|
6659
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
6747
|
-
opts[next]?.focus();
|
|
7212
|
+
opts[(idx + dir + opts.length) % opts.length]?.focus();
|
|
6748
7213
|
}
|
|
6749
7214
|
queryOptions() {
|
|
6750
|
-
|
|
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
|
-
|
|
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(--
|
|
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
|
-
|
|
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(--
|
|
6845
|
-
}],
|
|
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(--
|
|
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(--
|
|
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('[
|
|
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 (--
|
|
8843
|
-
// --
|
|
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
|
-
|
|
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]="
|
|
9356
|
-
[isStreaming]="
|
|
9357
|
-
[durationMs]="
|
|
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
|
-
|
|
9405
|
-
|
|
9406
|
-
|
|
9407
|
-
|
|
9408
|
-
|
|
9409
|
-
|
|
9410
|
-
|
|
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(--
|
|
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
|
-
|
|
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]="
|
|
9525
|
-
[isStreaming]="
|
|
9526
|
-
[durationMs]="
|
|
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
|
-
|
|
9574
|
-
|
|
9575
|
-
|
|
9576
|
-
|
|
9577
|
-
|
|
9578
|
-
|
|
9579
|
-
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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 --
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
10563
|
+
width: var(--tplane-chat-sidenav-width-expanded);
|
|
9981
10564
|
}
|
|
9982
10565
|
:host([data-mode="collapsed"]) {
|
|
9983
|
-
width: var(--
|
|
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(--
|
|
9997
|
-
z-index: var(--
|
|
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(--
|
|
10007
|
-
border-right: 1px solid var(--
|
|
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(--
|
|
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(--
|
|
10036
|
-
border-bottom: 1px solid var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
10686
|
+
color: var(--tplane-chat-text);
|
|
10104
10687
|
border-radius: 8px;
|
|
10105
10688
|
cursor: pointer;
|
|
10106
10689
|
font-family: inherit;
|
|
10107
|
-
font-size: var(--
|
|
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(--
|
|
10694
|
+
.chat-sidenav__action:hover { background: var(--tplane-chat-surface-alt); }
|
|
10112
10695
|
.chat-sidenav__action:focus-visible {
|
|
10113
|
-
outline: 2px solid var(--
|
|
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(--
|
|
10132
|
-
color: var(--
|
|
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(--
|
|
10719
|
+
font-size: var(--tplane-chat-font-size-sm);
|
|
10137
10720
|
}
|
|
10138
10721
|
.chat-sidenav__action.chat-sidenav__action--new:hover {
|
|
10139
|
-
background: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
10200
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
10242
|
-
color: var(--
|
|
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(--
|
|
10871
|
+
color: var(--tplane-chat-text);
|
|
10289
10872
|
font: inherit;
|
|
10290
|
-
font-size: var(--
|
|
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(--
|
|
10296
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
10314
|
-
font-size: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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.
|
|
11630
|
-
|
|
11631
|
-
|
|
11632
|
-
|
|
11633
|
-
|
|
11634
|
-
|
|
11635
|
-
|
|
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
|
-
|
|
11641
|
-
|
|
11642
|
-
|
|
11643
|
-
|
|
11644
|
-
|
|
11645
|
-
|
|
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
|