@atelier-ui/angular 0.0.11 → 0.0.12

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,15 +1,15 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, computed, ChangeDetectionStrategy, Component, model, viewChild, effect, InjectionToken, inject, ElementRef, signal, output, Directive, ViewEncapsulation, Injector, Injectable, DestroyRef, untracked, contentChildren } from '@angular/core';
2
+ import { input, computed, ChangeDetectionStrategy, Component, model, viewChild, effect, InjectionToken, inject, ElementRef, signal, output, Injector, viewChildren, Directive, ViewEncapsulation, Injectable, DestroyRef, untracked, contentChildren } from '@angular/core';
3
3
  import * as i1 from '@angular/cdk/text-field';
4
4
  import { TextFieldModule } from '@angular/cdk/text-field';
5
5
  import * as i1$1 from '@angular/cdk/a11y';
6
- import { ActiveDescendantKeyManager, A11yModule } from '@angular/cdk/a11y';
6
+ import { FocusKeyManager, ActiveDescendantKeyManager, A11yModule } from '@angular/cdk/a11y';
7
+ import { createFlexibleConnectedPositionStrategy, createRepositionScrollStrategy, createOverlayRef } from '@angular/cdk/overlay';
8
+ import { DomPortal, ComponentPortal } from '@angular/cdk/portal';
7
9
  import * as i1$2 from '@angular/cdk/accordion';
8
10
  import { CdkAccordion, CdkAccordionItem } from '@angular/cdk/accordion';
9
11
  import * as i1$3 from '@angular/cdk/menu';
10
12
  import { CdkMenuTrigger, CdkMenu, CdkMenuItem } from '@angular/cdk/menu';
11
- import { createFlexibleConnectedPositionStrategy, createRepositionScrollStrategy, createOverlayRef } from '@angular/cdk/overlay';
12
- import { ComponentPortal } from '@angular/cdk/portal';
13
13
 
14
14
  /**
15
15
  * Accessible button component with visual variants and sizes.
@@ -77,13 +77,13 @@ class LlmCard {
77
77
  padding = input('md', ...(ngDevMode ? [{ debugName: "padding" }] : /* istanbul ignore next */ []));
78
78
  hostClasses = computed(() => `variant-${this.variant()} padding-${this.padding()}`, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
79
79
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmCard, deps: [], target: i0.ɵɵFactoryTarget.Component });
80
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: LlmCard, isStandalone: true, selector: "llm-card", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, styles: ["llm-card{display:block;border-radius:var(--ui-radius-xl);background-color:var(--ui-color-surface);overflow:hidden}llm-card.variant-elevated{box-shadow:var(--ui-shadow-md);border:1px solid var(--ui-color-border)}llm-card.variant-outlined{border:1px solid var(--ui-color-border);background-color:var(--ui-color-surface)}llm-card.variant-flat{background-color:var(--ui-color-surface-sunken)}llm-card.padding-none llm-card-header,llm-card.padding-none llm-card-content,llm-card.padding-none llm-card-footer{padding:0}llm-card.padding-sm llm-card-header,llm-card.padding-sm llm-card-content,llm-card.padding-sm llm-card-footer{padding:var(--ui-spacing-3)}llm-card.padding-md llm-card-header,llm-card.padding-md llm-card-content,llm-card.padding-md llm-card-footer{padding:var(--ui-spacing-4)}llm-card.padding-lg llm-card-header,llm-card.padding-lg llm-card-content,llm-card.padding-lg llm-card-footer{padding:var(--ui-spacing-6)}llm-card-header{display:block;font-size:var(--ui-font-size-lg);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text);border-bottom:1px solid var(--ui-color-border);letter-spacing:var(--ui-letter-spacing-tight)}llm-card-content{display:block;color:var(--ui-color-text);line-height:var(--ui-line-height-normal)}llm-card-footer{display:flex;align-items:center;gap:var(--ui-spacing-2);border-top:1px solid var(--ui-color-border)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
80
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: LlmCard, isStandalone: true, selector: "llm-card", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, styles: [":host(llm-card){display:block;border-radius:var(--ui-radius-xl);background-color:var(--ui-color-surface);overflow:hidden}:host(llm-card.variant-elevated){box-shadow:var(--ui-shadow-md);border:1px solid var(--ui-color-border)}:host(llm-card.variant-outlined){border:1px solid var(--ui-color-border);background-color:var(--ui-color-surface)}:host(llm-card.variant-flat){background-color:var(--ui-color-surface-sunken)}:host(llm-card.padding-none){--llm-card-padding: 0}:host(llm-card.padding-sm){--llm-card-padding: var(--ui-spacing-3)}:host(llm-card.padding-md){--llm-card-padding: var(--ui-spacing-4)}:host(llm-card.padding-lg){--llm-card-padding: var(--ui-spacing-6)}:host(llm-card-header){display:block;font-size:var(--ui-font-size-lg);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text);border-bottom:1px solid var(--ui-color-border);letter-spacing:var(--ui-letter-spacing-tight);padding:var(--llm-card-padding, var(--ui-spacing-4))}:host(llm-card-content){display:block;color:var(--ui-color-text);line-height:var(--ui-line-height-normal);padding:var(--llm-card-padding, var(--ui-spacing-4))}:host(llm-card-footer){display:flex;align-items:center;gap:var(--ui-spacing-2);border-top:1px solid var(--ui-color-border);padding:var(--llm-card-padding, var(--ui-spacing-4))}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
81
81
  }
82
82
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmCard, decorators: [{
83
83
  type: Component,
84
84
  args: [{ selector: 'llm-card', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `<ng-content />`, host: {
85
85
  '[class]': 'hostClasses()',
86
- }, styles: ["llm-card{display:block;border-radius:var(--ui-radius-xl);background-color:var(--ui-color-surface);overflow:hidden}llm-card.variant-elevated{box-shadow:var(--ui-shadow-md);border:1px solid var(--ui-color-border)}llm-card.variant-outlined{border:1px solid var(--ui-color-border);background-color:var(--ui-color-surface)}llm-card.variant-flat{background-color:var(--ui-color-surface-sunken)}llm-card.padding-none llm-card-header,llm-card.padding-none llm-card-content,llm-card.padding-none llm-card-footer{padding:0}llm-card.padding-sm llm-card-header,llm-card.padding-sm llm-card-content,llm-card.padding-sm llm-card-footer{padding:var(--ui-spacing-3)}llm-card.padding-md llm-card-header,llm-card.padding-md llm-card-content,llm-card.padding-md llm-card-footer{padding:var(--ui-spacing-4)}llm-card.padding-lg llm-card-header,llm-card.padding-lg llm-card-content,llm-card.padding-lg llm-card-footer{padding:var(--ui-spacing-6)}llm-card-header{display:block;font-size:var(--ui-font-size-lg);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text);border-bottom:1px solid var(--ui-color-border);letter-spacing:var(--ui-letter-spacing-tight)}llm-card-content{display:block;color:var(--ui-color-text);line-height:var(--ui-line-height-normal)}llm-card-footer{display:flex;align-items:center;gap:var(--ui-spacing-2);border-top:1px solid var(--ui-color-border)}\n"] }]
86
+ }, styles: [":host(llm-card){display:block;border-radius:var(--ui-radius-xl);background-color:var(--ui-color-surface);overflow:hidden}:host(llm-card.variant-elevated){box-shadow:var(--ui-shadow-md);border:1px solid var(--ui-color-border)}:host(llm-card.variant-outlined){border:1px solid var(--ui-color-border);background-color:var(--ui-color-surface)}:host(llm-card.variant-flat){background-color:var(--ui-color-surface-sunken)}:host(llm-card.padding-none){--llm-card-padding: 0}:host(llm-card.padding-sm){--llm-card-padding: var(--ui-spacing-3)}:host(llm-card.padding-md){--llm-card-padding: var(--ui-spacing-4)}:host(llm-card.padding-lg){--llm-card-padding: var(--ui-spacing-6)}:host(llm-card-header){display:block;font-size:var(--ui-font-size-lg);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text);border-bottom:1px solid var(--ui-color-border);letter-spacing:var(--ui-letter-spacing-tight);padding:var(--llm-card-padding, var(--ui-spacing-4))}:host(llm-card-content){display:block;color:var(--ui-color-text);line-height:var(--ui-line-height-normal);padding:var(--llm-card-padding, var(--ui-spacing-4))}:host(llm-card-footer){display:flex;align-items:center;gap:var(--ui-spacing-2);border-top:1px solid var(--ui-color-border);padding:var(--llm-card-padding, var(--ui-spacing-4))}\n"] }]
87
87
  }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], padding: [{ type: i0.Input, args: [{ isSignal: true, alias: "padding", required: false }] }] } });
88
88
  /**
89
89
  * Header slot for `llm-card`. Renders above the main content with a bottom separator.
@@ -95,11 +95,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
95
95
  */
96
96
  class LlmCardHeader {
97
97
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmCardHeader, deps: [], target: i0.ɵɵFactoryTarget.Component });
98
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: LlmCardHeader, isStandalone: true, selector: "llm-card-header", ngImport: i0, template: `<ng-content />`, isInline: true, styles: ["llm-card{display:block;border-radius:var(--ui-radius-xl);background-color:var(--ui-color-surface);overflow:hidden}llm-card.variant-elevated{box-shadow:var(--ui-shadow-md);border:1px solid var(--ui-color-border)}llm-card.variant-outlined{border:1px solid var(--ui-color-border);background-color:var(--ui-color-surface)}llm-card.variant-flat{background-color:var(--ui-color-surface-sunken)}llm-card.padding-none llm-card-header,llm-card.padding-none llm-card-content,llm-card.padding-none llm-card-footer{padding:0}llm-card.padding-sm llm-card-header,llm-card.padding-sm llm-card-content,llm-card.padding-sm llm-card-footer{padding:var(--ui-spacing-3)}llm-card.padding-md llm-card-header,llm-card.padding-md llm-card-content,llm-card.padding-md llm-card-footer{padding:var(--ui-spacing-4)}llm-card.padding-lg llm-card-header,llm-card.padding-lg llm-card-content,llm-card.padding-lg llm-card-footer{padding:var(--ui-spacing-6)}llm-card-header{display:block;font-size:var(--ui-font-size-lg);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text);border-bottom:1px solid var(--ui-color-border);letter-spacing:var(--ui-letter-spacing-tight)}llm-card-content{display:block;color:var(--ui-color-text);line-height:var(--ui-line-height-normal)}llm-card-footer{display:flex;align-items:center;gap:var(--ui-spacing-2);border-top:1px solid var(--ui-color-border)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
98
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: LlmCardHeader, isStandalone: true, selector: "llm-card-header", ngImport: i0, template: `<ng-content />`, isInline: true, styles: [":host(llm-card){display:block;border-radius:var(--ui-radius-xl);background-color:var(--ui-color-surface);overflow:hidden}:host(llm-card.variant-elevated){box-shadow:var(--ui-shadow-md);border:1px solid var(--ui-color-border)}:host(llm-card.variant-outlined){border:1px solid var(--ui-color-border);background-color:var(--ui-color-surface)}:host(llm-card.variant-flat){background-color:var(--ui-color-surface-sunken)}:host(llm-card.padding-none){--llm-card-padding: 0}:host(llm-card.padding-sm){--llm-card-padding: var(--ui-spacing-3)}:host(llm-card.padding-md){--llm-card-padding: var(--ui-spacing-4)}:host(llm-card.padding-lg){--llm-card-padding: var(--ui-spacing-6)}:host(llm-card-header){display:block;font-size:var(--ui-font-size-lg);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text);border-bottom:1px solid var(--ui-color-border);letter-spacing:var(--ui-letter-spacing-tight);padding:var(--llm-card-padding, var(--ui-spacing-4))}:host(llm-card-content){display:block;color:var(--ui-color-text);line-height:var(--ui-line-height-normal);padding:var(--llm-card-padding, var(--ui-spacing-4))}:host(llm-card-footer){display:flex;align-items:center;gap:var(--ui-spacing-2);border-top:1px solid var(--ui-color-border);padding:var(--llm-card-padding, var(--ui-spacing-4))}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
99
99
  }
100
100
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmCardHeader, decorators: [{
101
101
  type: Component,
102
- args: [{ selector: 'llm-card-header', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `<ng-content />`, styles: ["llm-card{display:block;border-radius:var(--ui-radius-xl);background-color:var(--ui-color-surface);overflow:hidden}llm-card.variant-elevated{box-shadow:var(--ui-shadow-md);border:1px solid var(--ui-color-border)}llm-card.variant-outlined{border:1px solid var(--ui-color-border);background-color:var(--ui-color-surface)}llm-card.variant-flat{background-color:var(--ui-color-surface-sunken)}llm-card.padding-none llm-card-header,llm-card.padding-none llm-card-content,llm-card.padding-none llm-card-footer{padding:0}llm-card.padding-sm llm-card-header,llm-card.padding-sm llm-card-content,llm-card.padding-sm llm-card-footer{padding:var(--ui-spacing-3)}llm-card.padding-md llm-card-header,llm-card.padding-md llm-card-content,llm-card.padding-md llm-card-footer{padding:var(--ui-spacing-4)}llm-card.padding-lg llm-card-header,llm-card.padding-lg llm-card-content,llm-card.padding-lg llm-card-footer{padding:var(--ui-spacing-6)}llm-card-header{display:block;font-size:var(--ui-font-size-lg);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text);border-bottom:1px solid var(--ui-color-border);letter-spacing:var(--ui-letter-spacing-tight)}llm-card-content{display:block;color:var(--ui-color-text);line-height:var(--ui-line-height-normal)}llm-card-footer{display:flex;align-items:center;gap:var(--ui-spacing-2);border-top:1px solid var(--ui-color-border)}\n"] }]
102
+ args: [{ selector: 'llm-card-header', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `<ng-content />`, styles: [":host(llm-card){display:block;border-radius:var(--ui-radius-xl);background-color:var(--ui-color-surface);overflow:hidden}:host(llm-card.variant-elevated){box-shadow:var(--ui-shadow-md);border:1px solid var(--ui-color-border)}:host(llm-card.variant-outlined){border:1px solid var(--ui-color-border);background-color:var(--ui-color-surface)}:host(llm-card.variant-flat){background-color:var(--ui-color-surface-sunken)}:host(llm-card.padding-none){--llm-card-padding: 0}:host(llm-card.padding-sm){--llm-card-padding: var(--ui-spacing-3)}:host(llm-card.padding-md){--llm-card-padding: var(--ui-spacing-4)}:host(llm-card.padding-lg){--llm-card-padding: var(--ui-spacing-6)}:host(llm-card-header){display:block;font-size:var(--ui-font-size-lg);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text);border-bottom:1px solid var(--ui-color-border);letter-spacing:var(--ui-letter-spacing-tight);padding:var(--llm-card-padding, var(--ui-spacing-4))}:host(llm-card-content){display:block;color:var(--ui-color-text);line-height:var(--ui-line-height-normal);padding:var(--llm-card-padding, var(--ui-spacing-4))}:host(llm-card-footer){display:flex;align-items:center;gap:var(--ui-spacing-2);border-top:1px solid var(--ui-color-border);padding:var(--llm-card-padding, var(--ui-spacing-4))}\n"] }]
103
103
  }] });
104
104
  /**
105
105
  * Content slot for `llm-card`. Primary content area of the card.
@@ -111,11 +111,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
111
111
  */
112
112
  class LlmCardContent {
113
113
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmCardContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
114
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: LlmCardContent, isStandalone: true, selector: "llm-card-content", ngImport: i0, template: `<ng-content />`, isInline: true, styles: ["llm-card{display:block;border-radius:var(--ui-radius-xl);background-color:var(--ui-color-surface);overflow:hidden}llm-card.variant-elevated{box-shadow:var(--ui-shadow-md);border:1px solid var(--ui-color-border)}llm-card.variant-outlined{border:1px solid var(--ui-color-border);background-color:var(--ui-color-surface)}llm-card.variant-flat{background-color:var(--ui-color-surface-sunken)}llm-card.padding-none llm-card-header,llm-card.padding-none llm-card-content,llm-card.padding-none llm-card-footer{padding:0}llm-card.padding-sm llm-card-header,llm-card.padding-sm llm-card-content,llm-card.padding-sm llm-card-footer{padding:var(--ui-spacing-3)}llm-card.padding-md llm-card-header,llm-card.padding-md llm-card-content,llm-card.padding-md llm-card-footer{padding:var(--ui-spacing-4)}llm-card.padding-lg llm-card-header,llm-card.padding-lg llm-card-content,llm-card.padding-lg llm-card-footer{padding:var(--ui-spacing-6)}llm-card-header{display:block;font-size:var(--ui-font-size-lg);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text);border-bottom:1px solid var(--ui-color-border);letter-spacing:var(--ui-letter-spacing-tight)}llm-card-content{display:block;color:var(--ui-color-text);line-height:var(--ui-line-height-normal)}llm-card-footer{display:flex;align-items:center;gap:var(--ui-spacing-2);border-top:1px solid var(--ui-color-border)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
114
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: LlmCardContent, isStandalone: true, selector: "llm-card-content", ngImport: i0, template: `<ng-content />`, isInline: true, styles: [":host(llm-card){display:block;border-radius:var(--ui-radius-xl);background-color:var(--ui-color-surface);overflow:hidden}:host(llm-card.variant-elevated){box-shadow:var(--ui-shadow-md);border:1px solid var(--ui-color-border)}:host(llm-card.variant-outlined){border:1px solid var(--ui-color-border);background-color:var(--ui-color-surface)}:host(llm-card.variant-flat){background-color:var(--ui-color-surface-sunken)}:host(llm-card.padding-none){--llm-card-padding: 0}:host(llm-card.padding-sm){--llm-card-padding: var(--ui-spacing-3)}:host(llm-card.padding-md){--llm-card-padding: var(--ui-spacing-4)}:host(llm-card.padding-lg){--llm-card-padding: var(--ui-spacing-6)}:host(llm-card-header){display:block;font-size:var(--ui-font-size-lg);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text);border-bottom:1px solid var(--ui-color-border);letter-spacing:var(--ui-letter-spacing-tight);padding:var(--llm-card-padding, var(--ui-spacing-4))}:host(llm-card-content){display:block;color:var(--ui-color-text);line-height:var(--ui-line-height-normal);padding:var(--llm-card-padding, var(--ui-spacing-4))}:host(llm-card-footer){display:flex;align-items:center;gap:var(--ui-spacing-2);border-top:1px solid var(--ui-color-border);padding:var(--llm-card-padding, var(--ui-spacing-4))}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
115
115
  }
116
116
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmCardContent, decorators: [{
117
117
  type: Component,
118
- args: [{ selector: 'llm-card-content', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `<ng-content />`, styles: ["llm-card{display:block;border-radius:var(--ui-radius-xl);background-color:var(--ui-color-surface);overflow:hidden}llm-card.variant-elevated{box-shadow:var(--ui-shadow-md);border:1px solid var(--ui-color-border)}llm-card.variant-outlined{border:1px solid var(--ui-color-border);background-color:var(--ui-color-surface)}llm-card.variant-flat{background-color:var(--ui-color-surface-sunken)}llm-card.padding-none llm-card-header,llm-card.padding-none llm-card-content,llm-card.padding-none llm-card-footer{padding:0}llm-card.padding-sm llm-card-header,llm-card.padding-sm llm-card-content,llm-card.padding-sm llm-card-footer{padding:var(--ui-spacing-3)}llm-card.padding-md llm-card-header,llm-card.padding-md llm-card-content,llm-card.padding-md llm-card-footer{padding:var(--ui-spacing-4)}llm-card.padding-lg llm-card-header,llm-card.padding-lg llm-card-content,llm-card.padding-lg llm-card-footer{padding:var(--ui-spacing-6)}llm-card-header{display:block;font-size:var(--ui-font-size-lg);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text);border-bottom:1px solid var(--ui-color-border);letter-spacing:var(--ui-letter-spacing-tight)}llm-card-content{display:block;color:var(--ui-color-text);line-height:var(--ui-line-height-normal)}llm-card-footer{display:flex;align-items:center;gap:var(--ui-spacing-2);border-top:1px solid var(--ui-color-border)}\n"] }]
118
+ args: [{ selector: 'llm-card-content', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `<ng-content />`, styles: [":host(llm-card){display:block;border-radius:var(--ui-radius-xl);background-color:var(--ui-color-surface);overflow:hidden}:host(llm-card.variant-elevated){box-shadow:var(--ui-shadow-md);border:1px solid var(--ui-color-border)}:host(llm-card.variant-outlined){border:1px solid var(--ui-color-border);background-color:var(--ui-color-surface)}:host(llm-card.variant-flat){background-color:var(--ui-color-surface-sunken)}:host(llm-card.padding-none){--llm-card-padding: 0}:host(llm-card.padding-sm){--llm-card-padding: var(--ui-spacing-3)}:host(llm-card.padding-md){--llm-card-padding: var(--ui-spacing-4)}:host(llm-card.padding-lg){--llm-card-padding: var(--ui-spacing-6)}:host(llm-card-header){display:block;font-size:var(--ui-font-size-lg);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text);border-bottom:1px solid var(--ui-color-border);letter-spacing:var(--ui-letter-spacing-tight);padding:var(--llm-card-padding, var(--ui-spacing-4))}:host(llm-card-content){display:block;color:var(--ui-color-text);line-height:var(--ui-line-height-normal);padding:var(--llm-card-padding, var(--ui-spacing-4))}:host(llm-card-footer){display:flex;align-items:center;gap:var(--ui-spacing-2);border-top:1px solid var(--ui-color-border);padding:var(--llm-card-padding, var(--ui-spacing-4))}\n"] }]
119
119
  }] });
120
120
  /**
121
121
  * Footer slot for `llm-card`. Renders below the main content, typically holds actions.
@@ -129,11 +129,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
129
129
  */
130
130
  class LlmCardFooter {
131
131
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmCardFooter, deps: [], target: i0.ɵɵFactoryTarget.Component });
132
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: LlmCardFooter, isStandalone: true, selector: "llm-card-footer", ngImport: i0, template: `<ng-content />`, isInline: true, styles: ["llm-card{display:block;border-radius:var(--ui-radius-xl);background-color:var(--ui-color-surface);overflow:hidden}llm-card.variant-elevated{box-shadow:var(--ui-shadow-md);border:1px solid var(--ui-color-border)}llm-card.variant-outlined{border:1px solid var(--ui-color-border);background-color:var(--ui-color-surface)}llm-card.variant-flat{background-color:var(--ui-color-surface-sunken)}llm-card.padding-none llm-card-header,llm-card.padding-none llm-card-content,llm-card.padding-none llm-card-footer{padding:0}llm-card.padding-sm llm-card-header,llm-card.padding-sm llm-card-content,llm-card.padding-sm llm-card-footer{padding:var(--ui-spacing-3)}llm-card.padding-md llm-card-header,llm-card.padding-md llm-card-content,llm-card.padding-md llm-card-footer{padding:var(--ui-spacing-4)}llm-card.padding-lg llm-card-header,llm-card.padding-lg llm-card-content,llm-card.padding-lg llm-card-footer{padding:var(--ui-spacing-6)}llm-card-header{display:block;font-size:var(--ui-font-size-lg);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text);border-bottom:1px solid var(--ui-color-border);letter-spacing:var(--ui-letter-spacing-tight)}llm-card-content{display:block;color:var(--ui-color-text);line-height:var(--ui-line-height-normal)}llm-card-footer{display:flex;align-items:center;gap:var(--ui-spacing-2);border-top:1px solid var(--ui-color-border)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
132
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: LlmCardFooter, isStandalone: true, selector: "llm-card-footer", ngImport: i0, template: `<ng-content />`, isInline: true, styles: [":host(llm-card){display:block;border-radius:var(--ui-radius-xl);background-color:var(--ui-color-surface);overflow:hidden}:host(llm-card.variant-elevated){box-shadow:var(--ui-shadow-md);border:1px solid var(--ui-color-border)}:host(llm-card.variant-outlined){border:1px solid var(--ui-color-border);background-color:var(--ui-color-surface)}:host(llm-card.variant-flat){background-color:var(--ui-color-surface-sunken)}:host(llm-card.padding-none){--llm-card-padding: 0}:host(llm-card.padding-sm){--llm-card-padding: var(--ui-spacing-3)}:host(llm-card.padding-md){--llm-card-padding: var(--ui-spacing-4)}:host(llm-card.padding-lg){--llm-card-padding: var(--ui-spacing-6)}:host(llm-card-header){display:block;font-size:var(--ui-font-size-lg);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text);border-bottom:1px solid var(--ui-color-border);letter-spacing:var(--ui-letter-spacing-tight);padding:var(--llm-card-padding, var(--ui-spacing-4))}:host(llm-card-content){display:block;color:var(--ui-color-text);line-height:var(--ui-line-height-normal);padding:var(--llm-card-padding, var(--ui-spacing-4))}:host(llm-card-footer){display:flex;align-items:center;gap:var(--ui-spacing-2);border-top:1px solid var(--ui-color-border);padding:var(--llm-card-padding, var(--ui-spacing-4))}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
133
133
  }
134
134
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmCardFooter, decorators: [{
135
135
  type: Component,
136
- args: [{ selector: 'llm-card-footer', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `<ng-content />`, styles: ["llm-card{display:block;border-radius:var(--ui-radius-xl);background-color:var(--ui-color-surface);overflow:hidden}llm-card.variant-elevated{box-shadow:var(--ui-shadow-md);border:1px solid var(--ui-color-border)}llm-card.variant-outlined{border:1px solid var(--ui-color-border);background-color:var(--ui-color-surface)}llm-card.variant-flat{background-color:var(--ui-color-surface-sunken)}llm-card.padding-none llm-card-header,llm-card.padding-none llm-card-content,llm-card.padding-none llm-card-footer{padding:0}llm-card.padding-sm llm-card-header,llm-card.padding-sm llm-card-content,llm-card.padding-sm llm-card-footer{padding:var(--ui-spacing-3)}llm-card.padding-md llm-card-header,llm-card.padding-md llm-card-content,llm-card.padding-md llm-card-footer{padding:var(--ui-spacing-4)}llm-card.padding-lg llm-card-header,llm-card.padding-lg llm-card-content,llm-card.padding-lg llm-card-footer{padding:var(--ui-spacing-6)}llm-card-header{display:block;font-size:var(--ui-font-size-lg);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text);border-bottom:1px solid var(--ui-color-border);letter-spacing:var(--ui-letter-spacing-tight)}llm-card-content{display:block;color:var(--ui-color-text);line-height:var(--ui-line-height-normal)}llm-card-footer{display:flex;align-items:center;gap:var(--ui-spacing-2);border-top:1px solid var(--ui-color-border)}\n"] }]
136
+ args: [{ selector: 'llm-card-footer', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `<ng-content />`, styles: [":host(llm-card){display:block;border-radius:var(--ui-radius-xl);background-color:var(--ui-color-surface);overflow:hidden}:host(llm-card.variant-elevated){box-shadow:var(--ui-shadow-md);border:1px solid var(--ui-color-border)}:host(llm-card.variant-outlined){border:1px solid var(--ui-color-border);background-color:var(--ui-color-surface)}:host(llm-card.variant-flat){background-color:var(--ui-color-surface-sunken)}:host(llm-card.padding-none){--llm-card-padding: 0}:host(llm-card.padding-sm){--llm-card-padding: var(--ui-spacing-3)}:host(llm-card.padding-md){--llm-card-padding: var(--ui-spacing-4)}:host(llm-card.padding-lg){--llm-card-padding: var(--ui-spacing-6)}:host(llm-card-header){display:block;font-size:var(--ui-font-size-lg);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text);border-bottom:1px solid var(--ui-color-border);letter-spacing:var(--ui-letter-spacing-tight);padding:var(--llm-card-padding, var(--ui-spacing-4))}:host(llm-card-content){display:block;color:var(--ui-color-text);line-height:var(--ui-line-height-normal);padding:var(--llm-card-padding, var(--ui-spacing-4))}:host(llm-card-footer){display:flex;align-items:center;gap:var(--ui-spacing-2);border-top:1px solid var(--ui-color-border);padding:var(--llm-card-padding, var(--ui-spacing-4))}\n"] }]
137
137
  }] });
138
138
 
139
139
  /**
@@ -163,7 +163,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
163
163
  }, styles: [":host{display:inline-flex;align-items:center;justify-content:center;border-radius:var(--ui-radius-full);font-family:var(--ui-font-family);font-weight:var(--ui-font-weight-semibold);line-height:var(--ui-line-height-tight);white-space:nowrap;letter-spacing:.01em}:host(.size-sm){padding:.1875rem var(--ui-spacing-2);font-size:var(--ui-font-size-xs)}:host(.size-md){padding:.3125rem var(--ui-spacing-3);font-size:var(--ui-font-size-sm)}:host(.variant-default){background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text-muted);border:1px solid var(--ui-color-border)}:host(.variant-success){background-color:color-mix(in srgb,var(--ui-color-success) 12%,transparent);color:var(--ui-color-success);border:1px solid color-mix(in srgb,var(--ui-color-success) 25%,transparent)}:host(.variant-warning){background-color:color-mix(in srgb,var(--ui-color-warning) 12%,transparent);color:var(--ui-color-warning);border:1px solid color-mix(in srgb,var(--ui-color-warning) 25%,transparent)}:host(.variant-danger){background-color:color-mix(in srgb,var(--ui-color-danger) 12%,transparent);color:var(--ui-color-danger);border:1px solid color-mix(in srgb,var(--ui-color-danger) 25%,transparent)}:host(.variant-info){background-color:color-mix(in srgb,var(--ui-color-info) 12%,transparent);color:var(--ui-color-info);border:1px solid color-mix(in srgb,var(--ui-color-info) 25%,transparent)}\n"] }]
164
164
  }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }] } });
165
165
 
166
- let nextId$a = 0;
166
+ let nextId$c = 0;
167
167
  /**
168
168
  * Accessible text input component for use with Angular Signal Forms.
169
169
  *
@@ -195,7 +195,7 @@ class LlmInput {
195
195
  /** The input's name attribute. Bound by [formField] directive. */
196
196
  name = input('', ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
197
197
  /** @internal */
198
- errorId = `llm-input-errors-${nextId$a++}`;
198
+ errorId = `llm-input-errors-${nextId$c++}`;
199
199
  /** @internal */
200
200
  showErrors = computed(() => this.touched() && this.invalid() && this.errors().length > 0, ...(ngDevMode ? [{ debugName: "showErrors" }] : /* istanbul ignore next */ []));
201
201
  /** @internal */
@@ -268,7 +268,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
268
268
  }, styles: [":host{display:block;font-family:var(--ui-font-family);font-size:var(--ui-font-size-md)}input{display:block;width:100%;padding:.625rem var(--ui-spacing-3);font-size:inherit;font-family:inherit;line-height:var(--ui-line-height-normal);color:var(--ui-color-text);background-color:var(--ui-color-input-bg);border:1px solid var(--ui-color-input-border);border-radius:var(--ui-radius-md);box-shadow:inset 0 1px 2px #0000000a;transition:border-color var(--ui-transition-fast),box-shadow var(--ui-transition-fast),background-color var(--ui-transition-fast);outline:none;box-sizing:border-box}input::placeholder{color:var(--ui-color-placeholder)}input:hover:not(:disabled):not(:read-only){border-color:var(--ui-color-input-border-hover)}input:focus{border-color:var(--ui-color-input-border-focus);background-color:var(--ui-color-input-bg-focus);box-shadow:var(--ui-focus-ring)}:host(.is-invalid) input{border-color:var(--ui-color-input-border-invalid)}:host(.is-invalid) input:focus{border-color:var(--ui-color-input-border-invalid);box-shadow:0 0 0 2px var(--ui-color-surface),0 0 0 4px var(--ui-color-danger)}:host(.is-disabled){opacity:var(--ui-opacity-disabled);cursor:not-allowed}:host(.is-disabled) input{cursor:not-allowed}:host(.is-readonly) input{background-color:var(--ui-color-surface-sunken);cursor:default;box-shadow:none}.errors{margin-top:var(--ui-spacing-1)}.error-message{margin:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-error-text);line-height:var(--ui-line-height-normal)}\n"] }]
269
269
  }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }] } });
270
270
 
271
- let nextId$9 = 0;
271
+ let nextId$b = 0;
272
272
  /**
273
273
  * Accessible multiline text input component for use with Angular Signal Forms.
274
274
  *
@@ -302,7 +302,7 @@ class LlmTextarea {
302
302
  /** Whether to auto-resize the textarea height to fit its content. */
303
303
  autoResize = input(false, ...(ngDevMode ? [{ debugName: "autoResize" }] : /* istanbul ignore next */ []));
304
304
  /** @internal */
305
- errorId = `llm-textarea-errors-${nextId$9++}`;
305
+ errorId = `llm-textarea-errors-${nextId$b++}`;
306
306
  /** @internal */
307
307
  showErrors = computed(() => this.touched() && this.invalid() && this.errors().length > 0, ...(ngDevMode ? [{ debugName: "showErrors" }] : /* istanbul ignore next */ []));
308
308
  /** @internal */
@@ -381,7 +381,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
381
381
  }, styles: [":host{display:block;font-family:var(--ui-font-family);font-size:var(--ui-font-size-md)}textarea{display:block;width:100%;padding:.625rem var(--ui-spacing-3);font-size:inherit;font-family:inherit;line-height:var(--ui-line-height-normal);color:var(--ui-color-text);background-color:var(--ui-color-input-bg);border:1px solid var(--ui-color-input-border);border-radius:var(--ui-radius-md);box-shadow:inset 0 1px 2px #0000000a;transition:border-color var(--ui-transition-fast),box-shadow var(--ui-transition-fast),background-color var(--ui-transition-fast);outline:none;box-sizing:border-box;resize:vertical;min-height:80px}textarea::placeholder{color:var(--ui-color-placeholder)}textarea:hover:not(:disabled):not(:read-only){border-color:var(--ui-color-input-border-hover)}textarea:focus{border-color:var(--ui-color-input-border-focus);background-color:var(--ui-color-input-bg-focus);box-shadow:var(--ui-focus-ring)}:host(.is-invalid) textarea{border-color:var(--ui-color-input-border-invalid)}:host(.is-invalid) textarea:focus{border-color:var(--ui-color-input-border-invalid);box-shadow:0 0 0 2px var(--ui-color-surface),0 0 0 4px var(--ui-color-danger)}:host(.is-disabled){opacity:var(--ui-opacity-disabled);cursor:not-allowed}:host(.is-disabled) textarea{cursor:not-allowed}:host(.is-readonly) textarea{background-color:var(--ui-color-surface-sunken);cursor:default;box-shadow:none}:host(.is-auto-resize) textarea{resize:none;overflow:hidden}.errors{margin-top:var(--ui-spacing-1)}.error-message{margin:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-error-text);line-height:var(--ui-line-height-normal)}\n"] }]
382
382
  }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], autoResize: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoResize", required: false }] }] } });
383
383
 
384
- let nextId$8 = 0;
384
+ let nextId$a = 0;
385
385
  /**
386
386
  * Accessible checkbox component for use with Angular Signal Forms.
387
387
  *
@@ -409,9 +409,9 @@ class LlmCheckbox {
409
409
  /** Validation errors from the form system. Bound by [formField] directive. */
410
410
  errors = input([], ...(ngDevMode ? [{ debugName: "errors" }] : /* istanbul ignore next */ []));
411
411
  /** @internal */
412
- inputId = `llm-checkbox-${nextId$8++}`;
412
+ inputId = `llm-checkbox-${nextId$a++}`;
413
413
  /** @internal */
414
- errorId = `llm-checkbox-errors-${nextId$8++}`;
414
+ errorId = `llm-checkbox-errors-${nextId$a++}`;
415
415
  /** @internal */
416
416
  nativeInput = viewChild('nativeInput', ...(ngDevMode ? [{ debugName: "nativeInput" }] : /* istanbul ignore next */ []));
417
417
  /** @internal */
@@ -502,7 +502,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
502
502
 
503
503
  const LLM_RADIO_GROUP = new InjectionToken('LLM_RADIO_GROUP');
504
504
 
505
- let nextId$7 = 0;
505
+ let nextId$9 = 0;
506
506
  /**
507
507
  * Individual radio button. Must be placed inside an `llm-radio-group`.
508
508
  *
@@ -518,17 +518,18 @@ class LlmRadio {
518
518
  /** The value this radio option represents within the group. */
519
519
  radioValue = input.required(...(ngDevMode ? [{ debugName: "radioValue" }] : /* istanbul ignore next */ []));
520
520
  /** Whether this specific radio is individually disabled (stacked with group disabled). */
521
- disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
521
+ // eslint-disable-next-line @angular-eslint/no-input-rename
522
+ disabledInput = input(false, { ...(ngDevMode ? { debugName: "disabledInput" } : /* istanbul ignore next */ {}), alias: 'disabled' });
522
523
  /** @internal */
523
524
  group = inject(LLM_RADIO_GROUP, { optional: true });
524
525
  /** @internal */
525
526
  el = inject(ElementRef);
526
527
  /** @internal */
527
- inputId = `llm-radio-${nextId$7++}`;
528
+ inputId = `llm-radio-${nextId$9++}`;
528
529
  /** @internal */
529
530
  isChecked = computed(() => this.group?.value() === this.radioValue(), ...(ngDevMode ? [{ debugName: "isChecked" }] : /* istanbul ignore next */ []));
530
531
  /** @internal */
531
- isDisabled = computed(() => this.disabled() || (this.group?.disabled() ?? false), ...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
532
+ isDisabled = computed(() => this.disabledInput() || (this.group?.disabled() ?? false), ...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
532
533
  /** @internal */
533
534
  effectiveName = computed(() => this.group?.name() ?? '', ...(ngDevMode ? [{ debugName: "effectiveName" }] : /* istanbul ignore next */ []));
534
535
  /** @internal */
@@ -541,7 +542,11 @@ class LlmRadio {
541
542
  return classes.join(' ');
542
543
  }, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
543
544
  /** @internal — for FocusKeyManager */
544
- focusInput() {
545
+ get disabled() {
546
+ return this.isDisabled();
547
+ }
548
+ /** @internal — for FocusKeyManager */
549
+ focus() {
545
550
  this.el.nativeElement.querySelector('input')?.focus();
546
551
  }
547
552
  ngOnInit() {
@@ -559,7 +564,7 @@ class LlmRadio {
559
564
  this.group?.markTouched();
560
565
  }
561
566
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmRadio, deps: [], target: i0.ɵɵFactoryTarget.Component });
562
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: LlmRadio, isStandalone: true, selector: "llm-radio", inputs: { radioValue: { classPropertyName: "radioValue", publicName: "radioValue", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses()" } }, ngImport: i0, template: `
567
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: LlmRadio, isStandalone: true, selector: "llm-radio", inputs: { radioValue: { classPropertyName: "radioValue", publicName: "radioValue", isSignal: true, isRequired: true, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses()" } }, ngImport: i0, template: `
563
568
  <label [attr.for]="inputId">
564
569
  <input
565
570
  type="radio"
@@ -594,9 +599,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
594
599
  `, host: {
595
600
  '[class]': 'hostClasses()',
596
601
  }, styles: [":host{display:block;font-family:var(--ui-font-family);font-size:var(--ui-font-size-md)}label{display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--ui-color-text);line-height:var(--ui-line-height-normal)}input[type=radio]{appearance:none;-webkit-appearance:none;flex-shrink:0;width:1.25rem;height:1.25rem;border:1.5px solid var(--ui-color-input-border);border-radius:50%;background-color:var(--ui-color-input-bg);cursor:pointer;position:relative;transition:border-color var(--ui-transition-fast),background-color var(--ui-transition-fast),box-shadow var(--ui-transition-fast);outline:none}input[type=radio]:hover:not(:disabled){border-color:var(--ui-color-input-border-hover);background-color:var(--ui-color-primary-light)}input[type=radio]:focus-visible{box-shadow:var(--ui-focus-ring);border-color:var(--ui-color-input-border-focus)}input[type=radio]:checked{background-color:var(--ui-color-primary);border-color:var(--ui-color-primary)}input[type=radio]:checked:after{content:\"\";position:absolute;inset:0;margin:auto;width:.45rem;height:.45rem;border-radius:50%;background-color:var(--ui-color-on-primary);animation:llm-radio-pop var(--ui-duration-normal) var(--ui-ease-spring)}:host-context(llm-radio-group.is-invalid) input[type=radio],:host(.is-invalid) input[type=radio]{border-color:var(--ui-color-input-border-invalid)}:host-context(llm-radio-group.is-invalid) input[type=radio]:focus-visible,:host(.is-invalid) input[type=radio]:focus-visible{border-color:var(--ui-color-input-border-invalid);box-shadow:0 0 0 2px var(--ui-color-surface),0 0 0 4px var(--ui-color-danger)}:host(.is-disabled){opacity:var(--ui-opacity-disabled);cursor:not-allowed}:host(.is-disabled) label{cursor:not-allowed}:host(.is-disabled) input[type=radio]{cursor:not-allowed}@keyframes llm-radio-pop{0%{transform:scale(0)}60%{transform:scale(1.2)}to{transform:scale(1)}}\n"] }]
597
- }], propDecorators: { radioValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "radioValue", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
602
+ }], propDecorators: { radioValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "radioValue", required: true }] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
598
603
 
599
- let nextId$6 = 0;
604
+ let nextId$8 = 0;
600
605
  /**
601
606
  * Container for a group of radio buttons. Manages keyboard navigation, shared name,
602
607
  * and Signal Forms integration.
@@ -631,10 +636,12 @@ class LlmRadioGroup {
631
636
  /** Validation errors from the form system. Bound by [formField] directive. */
632
637
  errors = input([], ...(ngDevMode ? [{ debugName: "errors" }] : /* istanbul ignore next */ []));
633
638
  /** @internal */
634
- errorId = `llm-radio-group-errors-${nextId$6++}`;
639
+ errorId = `llm-radio-group-errors-${nextId$8++}`;
635
640
  /** @internal */
636
641
  items = signal([], ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
637
642
  /** @internal */
643
+ keyManager = null;
644
+ /** @internal */
638
645
  showErrors = computed(() => this.touched() && this.invalid() && this.errors().length > 0, ...(ngDevMode ? [{ debugName: "showErrors" }] : /* istanbul ignore next */ []));
639
646
  /** @internal */
640
647
  hostClasses = computed(() => {
@@ -667,24 +674,20 @@ class LlmRadioGroup {
667
674
  }
668
675
  /** @internal */
669
676
  onKeydown(event) {
670
- const key = event.key;
671
- if (key !== 'ArrowDown' && key !== 'ArrowRight' && key !== 'ArrowUp' && key !== 'ArrowLeft')
672
- return;
673
- event.preventDefault();
674
- const radioItems = this.items();
675
- const enabled = radioItems.filter((item) => !item.isDisabled());
676
- if (enabled.length === 0)
677
+ if (this.disabled())
677
678
  return;
678
- const currentPos = enabled.findIndex((i) => i.radioValue() === this.value());
679
- const isNext = key === 'ArrowDown' || key === 'ArrowRight';
680
- const n = enabled.length;
681
- const nextPos = isNext
682
- ? (currentPos + 1) % n
683
- : (currentPos - 1 + n) % n;
684
- const target = enabled[nextPos];
685
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/strict-boolean-expressions
686
- if (target) {
687
- target.focusInput();
679
+ if (!this.keyManager) {
680
+ this.keyManager = new FocusKeyManager(this.items())
681
+ .withHorizontalOrientation('ltr')
682
+ .withVerticalOrientation()
683
+ .withWrap();
684
+ }
685
+ const currentIdx = this.items().findIndex((i) => i.radioValue() === this.value());
686
+ this.keyManager.setActiveItem(currentIdx);
687
+ this.keyManager.onKeydown(event);
688
+ const activeIdx = this.keyManager.activeItemIndex;
689
+ if (activeIdx !== null && activeIdx !== -1 && activeIdx !== currentIdx) {
690
+ const target = this.items()[activeIdx];
688
691
  this.value.set(target.radioValue());
689
692
  this.touched.set(true);
690
693
  }
@@ -722,7 +725,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
722
725
  }, providers: [{ provide: LLM_RADIO_GROUP, useExisting: LlmRadioGroup }], styles: [":host{display:block;font-family:var(--ui-font-family)}:host(.is-disabled){opacity:var(--ui-opacity-disabled);cursor:not-allowed}.errors{margin-top:var(--ui-spacing-1)}.error-message{margin:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-error-text);line-height:var(--ui-line-height-normal)}\n"] }]
723
726
  }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }] } });
724
727
 
725
- let nextId$5 = 0;
728
+ let nextId$7 = 0;
726
729
  /**
727
730
  * Accessible toggle (switch) component for use with Angular Signal Forms.
728
731
  * Presents as a pill-shaped on/off slider instead of a checkbox box,
@@ -750,9 +753,9 @@ class LlmToggle {
750
753
  /** Validation errors from the form system. Bound by [formField] directive. */
751
754
  errors = input([], ...(ngDevMode ? [{ debugName: "errors" }] : /* istanbul ignore next */ []));
752
755
  /** @internal */
753
- inputId = `llm-toggle-${nextId$5++}`;
756
+ inputId = `llm-toggle-${nextId$7++}`;
754
757
  /** @internal */
755
- errorId = `llm-toggle-errors-${nextId$5++}`;
758
+ errorId = `llm-toggle-errors-${nextId$7++}`;
756
759
  /** @internal */
757
760
  showErrors = computed(() => this.touched() && this.invalid() && this.errors().length > 0, ...(ngDevMode ? [{ debugName: "showErrors" }] : /* istanbul ignore next */ []));
758
761
  /** @internal */
@@ -931,10 +934,10 @@ class SelectOptionItem {
931
934
  // Handled by key manager — no-op here
932
935
  }
933
936
  }
934
- let nextId$4 = 0;
937
+ let nextId$6 = 0;
935
938
  /**
936
939
  * Accessible dropdown select component for use with Angular Signal Forms.
937
- * Uses the native Popover API for the panel overlay.
940
+ * Uses the CDK Overlay for viewport-aware panel positioning.
938
941
  *
939
942
  * Usage:
940
943
  * ```html
@@ -975,11 +978,11 @@ class LlmSelect {
975
978
  /** @internal */
976
979
  panelRef = viewChild('panel', ...(ngDevMode ? [{ debugName: "panelRef" }] : /* istanbul ignore next */ []));
977
980
  /** @internal */
978
- triggerId = `llm-select-trigger-${nextId$4}`;
981
+ triggerId = `llm-select-trigger-${nextId$6}`;
979
982
  /** @internal */
980
- panelId = `llm-select-panel-${nextId$4}`;
983
+ panelId = `llm-select-panel-${nextId$6}`;
981
984
  /** @internal */
982
- errorId = `llm-select-errors-${nextId$4++}`;
985
+ errorId = `llm-select-errors-${nextId$6++}`;
983
986
  /** @internal */
984
987
  selectedLabel = computed(() => this.optionsList().find((o) => o.value === this.value())?.labelText ?? '', ...(ngDevMode ? [{ debugName: "selectedLabel" }] : /* istanbul ignore next */ []));
985
988
  /** @internal */
@@ -999,8 +1002,10 @@ class LlmSelect {
999
1002
  }, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
1000
1003
  /** @internal */
1001
1004
  keyManager = null;
1005
+ overlayRef = null;
1002
1006
  outsideClickHandler = null;
1003
1007
  elementRef = inject(ElementRef);
1008
+ injector = inject(Injector);
1004
1009
  /** @internal — called by LlmOption on init */
1005
1010
  registerOption(id, value, labelText, disabled) {
1006
1011
  this.optionsList.update((list) => [...list, { id, value, labelText, disabled }]);
@@ -1038,14 +1043,6 @@ class LlmSelect {
1038
1043
  }
1039
1044
  }
1040
1045
  /** @internal */
1041
- onPanelToggle(event) {
1042
- const toggleEvent = event;
1043
- if (toggleEvent.newState === 'closed') {
1044
- this.isOpen.set(false);
1045
- this.activeOptionId.set(null);
1046
- }
1047
- }
1048
- /** @internal */
1049
1046
  onKeydown(event) {
1050
1047
  if (this.disabled())
1051
1048
  return;
@@ -1081,11 +1078,24 @@ class LlmSelect {
1081
1078
  }
1082
1079
  }
1083
1080
  }
1081
+ ngOnDestroy() {
1082
+ this.overlayRef?.dispose();
1083
+ this.overlayRef = null;
1084
+ if (this.outsideClickHandler) {
1085
+ document.removeEventListener('click', this.outsideClickHandler);
1086
+ this.outsideClickHandler = null;
1087
+ }
1088
+ }
1084
1089
  open() {
1085
1090
  const panel = this.panelRef();
1086
1091
  if (!panel)
1087
1092
  return;
1088
- panel.nativeElement.showPopover();
1093
+ if (!this.overlayRef) {
1094
+ this.overlayRef = this.createOverlay();
1095
+ }
1096
+ this.overlayRef.attach(new DomPortal(panel.nativeElement));
1097
+ panel.nativeElement.classList.add('is-open');
1098
+ this.overlayRef.updatePosition();
1089
1099
  this.isOpen.set(true);
1090
1100
  // (Re)create key manager with current options
1091
1101
  const items = this.optionsList().map((o) => new SelectOptionItem(o.id, o.value, o.labelText, o.disabled, this.activeOptionId));
@@ -1101,9 +1111,11 @@ class LlmSelect {
1101
1111
  if (activeIdx >= 0) {
1102
1112
  this.keyManager.setActiveItem(activeIdx);
1103
1113
  }
1104
- // Outside click listener
1114
+ // Outside click — check host AND panel (panel is in overlay container, outside host)
1105
1115
  this.outsideClickHandler = (e) => {
1106
- if (!this.elementRef.nativeElement.contains(e.target)) {
1116
+ const target = e.target;
1117
+ if (!this.elementRef.nativeElement.contains(target) &&
1118
+ !panel.nativeElement.contains(target)) {
1107
1119
  this.close();
1108
1120
  }
1109
1121
  };
@@ -1111,14 +1123,10 @@ class LlmSelect {
1111
1123
  }
1112
1124
  close() {
1113
1125
  const panel = this.panelRef();
1114
- if (!panel)
1115
- return;
1116
- try {
1117
- panel.nativeElement.hidePopover();
1118
- }
1119
- catch {
1120
- // Panel may already be hidden
1126
+ if (panel) {
1127
+ panel.nativeElement.classList.remove('is-open');
1121
1128
  }
1129
+ this.overlayRef?.detach();
1122
1130
  this.isOpen.set(false);
1123
1131
  this.activeOptionId.set(null);
1124
1132
  this.keyManager = null;
@@ -1127,6 +1135,24 @@ class LlmSelect {
1127
1135
  this.outsideClickHandler = null;
1128
1136
  }
1129
1137
  }
1138
+ createOverlay() {
1139
+ const triggerEl = this.elementRef.nativeElement.querySelector('.trigger');
1140
+ if (!triggerEl)
1141
+ throw new Error('LlmSelect: trigger element not found');
1142
+ const positionStrategy = createFlexibleConnectedPositionStrategy(this.injector, triggerEl)
1143
+ .withPositions([
1144
+ { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },
1145
+ { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },
1146
+ ])
1147
+ .withFlexibleDimensions(false)
1148
+ .withPush(true);
1149
+ const scrollStrategy = createRepositionScrollStrategy(this.injector);
1150
+ return createOverlayRef(this.injector, {
1151
+ positionStrategy,
1152
+ scrollStrategy,
1153
+ minWidth: triggerEl.offsetWidth,
1154
+ });
1155
+ }
1130
1156
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmSelect, deps: [], target: i0.ɵɵFactoryTarget.Component });
1131
1157
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: LlmSelect, isStandalone: true, selector: "llm-select", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", 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 }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", touched: "touchedChange" }, host: { attributes: { "role": "combobox" }, listeners: { "keydown": "onKeydown($event)" }, properties: { "class": "hostClasses()" } }, providers: [{ provide: LLM_SELECT, useExisting: LlmSelect }], viewQueries: [{ propertyName: "panelRef", first: true, predicate: ["panel"], descendants: true, isSignal: true }], ngImport: i0, template: `
1132
1158
  <button
@@ -1149,11 +1175,9 @@ class LlmSelect {
1149
1175
  <div
1150
1176
  #panel
1151
1177
  [id]="panelId"
1152
- popover="manual"
1153
1178
  role="listbox"
1154
1179
  class="panel"
1155
1180
  [attr.aria-labelledby]="triggerId"
1156
- (toggle)="onPanelToggle($event)"
1157
1181
  >
1158
1182
  <ng-content />
1159
1183
  </div>
@@ -1165,7 +1189,7 @@ class LlmSelect {
1165
1189
  }
1166
1190
  </div>
1167
1191
  }
1168
- `, isInline: true, styles: [":host{display:inline-block;position:relative;font-family:var(--ui-font-family);font-size:var(--ui-font-size-md)}.trigger{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-spacing-2);width:100%;padding:var(--ui-spacing-2) var(--ui-spacing-3);background:var(--ui-color-input-bg);border:1px solid var(--ui-color-input-border);border-radius:var(--ui-radius-md);color:var(--ui-color-text);font-family:inherit;font-size:inherit;cursor:pointer;transition:border-color var(--ui-transition-fast),box-shadow var(--ui-transition-fast);anchor-name:--select-trigger}.trigger:hover:not(:disabled){border-color:var(--ui-color-input-border-hover)}.trigger:focus-visible{outline:none;box-shadow:var(--ui-focus-ring);border-color:var(--ui-color-input-border-focus)}.trigger:disabled{opacity:var(--ui-opacity-disabled);cursor:not-allowed}:host(.is-invalid) .trigger{border-color:var(--ui-color-input-border-invalid)}:host(.is-open) .trigger{border-color:var(--ui-color-input-border-focus);box-shadow:var(--ui-focus-ring)}.trigger-text{flex:1;text-align:start;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ui-color-text)}.trigger-text:empty,.trigger[data-placeholder] .trigger-text{color:var(--ui-color-placeholder)}.trigger-icon{flex-shrink:0;font-size:var(--ui-font-size-xs);color:var(--ui-color-text-muted);transition:transform var(--ui-transition-fast)}:host(.is-open) .trigger-icon{transform:rotate(180deg)}.panel[popover]{position:absolute;position-anchor:--select-trigger;inset-block-start:anchor(bottom);inset-inline-start:anchor(left);min-width:anchor-size(width);margin-block-start:var(--ui-spacing-1);padding:var(--ui-spacing-1) 0;background:var(--ui-color-surface-raised);border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-md);box-shadow:var(--ui-shadow-lg);z-index:var(--ui-z-dropdown);max-height:16rem;overflow-y:auto;opacity:0;transform:translateY(-4px);transition:opacity var(--ui-transition-normal),transform var(--ui-transition-normal)}.panel[popover]:popover-open{opacity:1;transform:translateY(0)}llm-option [role=option]{padding:var(--ui-spacing-2) var(--ui-spacing-3);cursor:pointer;color:var(--ui-color-text);transition:background var(--ui-transition-fast)}llm-option [role=option]:hover,llm-option [role=option].is-active{background:var(--ui-color-surface-sunken)}llm-option [role=option].is-selected{background:var(--ui-color-primary-light);color:var(--ui-color-primary);font-weight:var(--ui-font-weight-medium)}llm-option [role=option].is-disabled{opacity:var(--ui-opacity-disabled);cursor:not-allowed}.errors{margin-top:var(--ui-spacing-1)}.error-message{margin:0;font-size:var(--ui-font-size-xs);color:var(--ui-color-error-text)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1192
+ `, isInline: true, styles: [":host{display:inline-block;position:relative;font-family:var(--ui-font-family);font-size:var(--ui-font-size-md)}.trigger{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-spacing-2);width:100%;padding:var(--ui-spacing-2) var(--ui-spacing-3);background:var(--ui-color-input-bg);border:1px solid var(--ui-color-input-border);border-radius:var(--ui-radius-md);color:var(--ui-color-text);font-family:inherit;font-size:inherit;cursor:pointer;transition:border-color var(--ui-transition-fast),box-shadow var(--ui-transition-fast)}.trigger:hover:not(:disabled){border-color:var(--ui-color-input-border-hover)}.trigger:focus-visible{outline:none;box-shadow:var(--ui-focus-ring);border-color:var(--ui-color-input-border-focus)}.trigger:disabled{opacity:var(--ui-opacity-disabled);cursor:not-allowed}:host(.is-invalid) .trigger{border-color:var(--ui-color-input-border-invalid)}:host(.is-open) .trigger{border-color:var(--ui-color-input-border-focus);box-shadow:var(--ui-focus-ring)}.trigger-text{flex:1;text-align:start;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ui-color-text)}.trigger-text:empty,.trigger[data-placeholder] .trigger-text{color:var(--ui-color-placeholder)}.trigger-icon{flex-shrink:0;font-size:var(--ui-font-size-xs);color:var(--ui-color-text-muted);transition:transform var(--ui-transition-fast)}:host(.is-open) .trigger-icon{transform:rotate(180deg)}.panel{visibility:hidden;pointer-events:none;padding:var(--ui-spacing-1) 0;background:var(--ui-color-surface-raised);border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-md);box-shadow:var(--ui-shadow-lg);max-height:16rem;overflow-y:auto;opacity:0;transform:translateY(-4px);transition:opacity var(--ui-transition-normal),transform var(--ui-transition-normal)}.panel.is-open{visibility:visible;pointer-events:auto;opacity:1;transform:translateY(0)}llm-option [role=option]{padding:var(--ui-spacing-2) var(--ui-spacing-3);cursor:pointer;color:var(--ui-color-text);transition:background var(--ui-transition-fast)}llm-option [role=option]:hover,llm-option [role=option].is-active{background:var(--ui-color-surface-sunken)}llm-option [role=option].is-selected{background:var(--ui-color-primary-light);color:var(--ui-color-primary);font-weight:var(--ui-font-weight-medium)}llm-option [role=option].is-disabled{opacity:var(--ui-opacity-disabled);cursor:not-allowed}.errors{margin-top:var(--ui-spacing-1)}.error-message{margin:0;font-size:var(--ui-font-size-xs);color:var(--ui-color-error-text)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1169
1193
  }
1170
1194
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmSelect, decorators: [{
1171
1195
  type: Component,
@@ -1190,11 +1214,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
1190
1214
  <div
1191
1215
  #panel
1192
1216
  [id]="panelId"
1193
- popover="manual"
1194
1217
  role="listbox"
1195
1218
  class="panel"
1196
1219
  [attr.aria-labelledby]="triggerId"
1197
- (toggle)="onPanelToggle($event)"
1198
1220
  >
1199
1221
  <ng-content />
1200
1222
  </div>
@@ -1210,7 +1232,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
1210
1232
  role: 'combobox',
1211
1233
  '[class]': 'hostClasses()',
1212
1234
  '(keydown)': 'onKeydown($event)',
1213
- }, providers: [{ provide: LLM_SELECT, useExisting: LlmSelect }], styles: [":host{display:inline-block;position:relative;font-family:var(--ui-font-family);font-size:var(--ui-font-size-md)}.trigger{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-spacing-2);width:100%;padding:var(--ui-spacing-2) var(--ui-spacing-3);background:var(--ui-color-input-bg);border:1px solid var(--ui-color-input-border);border-radius:var(--ui-radius-md);color:var(--ui-color-text);font-family:inherit;font-size:inherit;cursor:pointer;transition:border-color var(--ui-transition-fast),box-shadow var(--ui-transition-fast);anchor-name:--select-trigger}.trigger:hover:not(:disabled){border-color:var(--ui-color-input-border-hover)}.trigger:focus-visible{outline:none;box-shadow:var(--ui-focus-ring);border-color:var(--ui-color-input-border-focus)}.trigger:disabled{opacity:var(--ui-opacity-disabled);cursor:not-allowed}:host(.is-invalid) .trigger{border-color:var(--ui-color-input-border-invalid)}:host(.is-open) .trigger{border-color:var(--ui-color-input-border-focus);box-shadow:var(--ui-focus-ring)}.trigger-text{flex:1;text-align:start;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ui-color-text)}.trigger-text:empty,.trigger[data-placeholder] .trigger-text{color:var(--ui-color-placeholder)}.trigger-icon{flex-shrink:0;font-size:var(--ui-font-size-xs);color:var(--ui-color-text-muted);transition:transform var(--ui-transition-fast)}:host(.is-open) .trigger-icon{transform:rotate(180deg)}.panel[popover]{position:absolute;position-anchor:--select-trigger;inset-block-start:anchor(bottom);inset-inline-start:anchor(left);min-width:anchor-size(width);margin-block-start:var(--ui-spacing-1);padding:var(--ui-spacing-1) 0;background:var(--ui-color-surface-raised);border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-md);box-shadow:var(--ui-shadow-lg);z-index:var(--ui-z-dropdown);max-height:16rem;overflow-y:auto;opacity:0;transform:translateY(-4px);transition:opacity var(--ui-transition-normal),transform var(--ui-transition-normal)}.panel[popover]:popover-open{opacity:1;transform:translateY(0)}llm-option [role=option]{padding:var(--ui-spacing-2) var(--ui-spacing-3);cursor:pointer;color:var(--ui-color-text);transition:background var(--ui-transition-fast)}llm-option [role=option]:hover,llm-option [role=option].is-active{background:var(--ui-color-surface-sunken)}llm-option [role=option].is-selected{background:var(--ui-color-primary-light);color:var(--ui-color-primary);font-weight:var(--ui-font-weight-medium)}llm-option [role=option].is-disabled{opacity:var(--ui-opacity-disabled);cursor:not-allowed}.errors{margin-top:var(--ui-spacing-1)}.error-message{margin:0;font-size:var(--ui-font-size-xs);color:var(--ui-color-error-text)}\n"] }]
1235
+ }, providers: [{ provide: LLM_SELECT, useExisting: LlmSelect }], styles: [":host{display:inline-block;position:relative;font-family:var(--ui-font-family);font-size:var(--ui-font-size-md)}.trigger{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-spacing-2);width:100%;padding:var(--ui-spacing-2) var(--ui-spacing-3);background:var(--ui-color-input-bg);border:1px solid var(--ui-color-input-border);border-radius:var(--ui-radius-md);color:var(--ui-color-text);font-family:inherit;font-size:inherit;cursor:pointer;transition:border-color var(--ui-transition-fast),box-shadow var(--ui-transition-fast)}.trigger:hover:not(:disabled){border-color:var(--ui-color-input-border-hover)}.trigger:focus-visible{outline:none;box-shadow:var(--ui-focus-ring);border-color:var(--ui-color-input-border-focus)}.trigger:disabled{opacity:var(--ui-opacity-disabled);cursor:not-allowed}:host(.is-invalid) .trigger{border-color:var(--ui-color-input-border-invalid)}:host(.is-open) .trigger{border-color:var(--ui-color-input-border-focus);box-shadow:var(--ui-focus-ring)}.trigger-text{flex:1;text-align:start;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ui-color-text)}.trigger-text:empty,.trigger[data-placeholder] .trigger-text{color:var(--ui-color-placeholder)}.trigger-icon{flex-shrink:0;font-size:var(--ui-font-size-xs);color:var(--ui-color-text-muted);transition:transform var(--ui-transition-fast)}:host(.is-open) .trigger-icon{transform:rotate(180deg)}.panel{visibility:hidden;pointer-events:none;padding:var(--ui-spacing-1) 0;background:var(--ui-color-surface-raised);border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-md);box-shadow:var(--ui-shadow-lg);max-height:16rem;overflow-y:auto;opacity:0;transform:translateY(-4px);transition:opacity var(--ui-transition-normal),transform var(--ui-transition-normal)}.panel.is-open{visibility:visible;pointer-events:auto;opacity:1;transform:translateY(0)}llm-option [role=option]{padding:var(--ui-spacing-2) var(--ui-spacing-3);cursor:pointer;color:var(--ui-color-text);transition:background var(--ui-transition-fast)}llm-option [role=option]:hover,llm-option [role=option].is-active{background:var(--ui-color-surface-sunken)}llm-option [role=option].is-selected{background:var(--ui-color-primary-light);color:var(--ui-color-primary);font-weight:var(--ui-font-weight-medium)}llm-option [role=option].is-disabled{opacity:var(--ui-opacity-disabled);cursor:not-allowed}.errors{margin-top:var(--ui-spacing-1)}.error-message{margin:0;font-size:var(--ui-font-size-xs);color:var(--ui-color-error-text)}\n"] }]
1214
1236
  }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], panelRef: [{ type: i0.ViewChild, args: ['panel', { isSignal: true }] }] } });
1215
1237
 
1216
1238
  let nextOptionId = 0;
@@ -1301,9 +1323,358 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
1301
1323
  }]
1302
1324
  }], propDecorators: { optionValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionValue", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
1303
1325
 
1326
+ let nextId$5 = 0;
1327
+ /**
1328
+ * Filterable autocomplete combobox. Accepts an `options` array and emits the
1329
+ * selected option's `value`. The user types to narrow the list; selecting an
1330
+ * option commits the value and displays its label.
1331
+ *
1332
+ * Usage:
1333
+ * ```html
1334
+ * <llm-combobox
1335
+ * [(value)]="country"
1336
+ * [options]="countryOptions"
1337
+ * placeholder="Search country…"
1338
+ * />
1339
+ *
1340
+ * <!-- With Signal Forms -->
1341
+ * <llm-combobox [formField]="form.country" [options]="countryOptions" />
1342
+ * ```
1343
+ */
1344
+ class LlmCombobox {
1345
+ /** The selected value. Supports [(value)] two-way binding and [formField] directive. */
1346
+ value = model('', ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
1347
+ /** Whether the user has interacted. Bound by [formField] directive. */
1348
+ touched = model(false, ...(ngDevMode ? [{ debugName: "touched" }] : /* istanbul ignore next */ []));
1349
+ /** Options to display and filter. */
1350
+ options = input([], ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
1351
+ /** Placeholder text for the input. */
1352
+ placeholder = input('', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
1353
+ /** Whether the combobox is disabled. */
1354
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
1355
+ /** Whether the combobox has validation errors. */
1356
+ invalid = input(false, ...(ngDevMode ? [{ debugName: "invalid" }] : /* istanbul ignore next */ []));
1357
+ /** Whether the combobox is required. */
1358
+ required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
1359
+ /** The input's name attribute. */
1360
+ name = input('', ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
1361
+ /** Validation errors from the form system. */
1362
+ errors = input([], ...(ngDevMode ? [{ debugName: "errors" }] : /* istanbul ignore next */ []));
1363
+ /** @internal */
1364
+ query = signal('', ...(ngDevMode ? [{ debugName: "query" }] : /* istanbul ignore next */ []));
1365
+ /** @internal */
1366
+ isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
1367
+ /** @internal */
1368
+ activeIndex = signal(-1, ...(ngDevMode ? [{ debugName: "activeIndex" }] : /* istanbul ignore next */ []));
1369
+ /** @internal */
1370
+ panelRef = viewChild('panel', ...(ngDevMode ? [{ debugName: "panelRef" }] : /* istanbul ignore next */ []));
1371
+ /** @internal */
1372
+ inputEl = viewChild('inputEl', ...(ngDevMode ? [{ debugName: "inputEl" }] : /* istanbul ignore next */ []));
1373
+ /** @internal */
1374
+ inputId = `llm-combobox-input-${nextId$5}`;
1375
+ /** @internal */
1376
+ panelId = `llm-combobox-panel-${nextId$5}`;
1377
+ /** @internal */
1378
+ errorId = `llm-combobox-errors-${nextId$5++}`;
1379
+ /** @internal */
1380
+ filteredOptions = computed(() => {
1381
+ const q = this.query().toLowerCase();
1382
+ if (!q)
1383
+ return this.options();
1384
+ return this.options().filter((o) => o.label.toLowerCase().includes(q));
1385
+ }, ...(ngDevMode ? [{ debugName: "filteredOptions" }] : /* istanbul ignore next */ []));
1386
+ /** @internal */
1387
+ activeOptionId = computed(() => {
1388
+ const idx = this.activeIndex();
1389
+ return idx >= 0 ? this.optionId(idx) : null;
1390
+ }, ...(ngDevMode ? [{ debugName: "activeOptionId" }] : /* istanbul ignore next */ []));
1391
+ /** @internal */
1392
+ showErrors = computed(() => this.touched() && this.invalid() && this.errors().length > 0, ...(ngDevMode ? [{ debugName: "showErrors" }] : /* istanbul ignore next */ []));
1393
+ /** @internal */
1394
+ hostClasses = computed(() => {
1395
+ const classes = [];
1396
+ if (this.isOpen())
1397
+ classes.push('is-open');
1398
+ if (this.disabled())
1399
+ classes.push('is-disabled');
1400
+ if (this.invalid())
1401
+ classes.push('is-invalid');
1402
+ if (this.touched())
1403
+ classes.push('is-touched');
1404
+ return classes.join(' ');
1405
+ }, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
1406
+ outsideClickHandler = null;
1407
+ elementRef = inject(ElementRef);
1408
+ /** @internal */
1409
+ optionId(index) {
1410
+ return `${this.panelId}-option-${index}`;
1411
+ }
1412
+ /** @internal */
1413
+ onInput(event) {
1414
+ const q = event.target.value;
1415
+ this.query.set(q);
1416
+ this.activeIndex.set(-1);
1417
+ if (q === '') {
1418
+ this.value.set('');
1419
+ }
1420
+ if (!this.isOpen())
1421
+ this.open();
1422
+ }
1423
+ /** @internal */
1424
+ onFocus() {
1425
+ if (!this.disabled())
1426
+ this.open();
1427
+ }
1428
+ /** @internal */
1429
+ onBlur() {
1430
+ const selectedOption = this.options().find((o) => o.value === this.value());
1431
+ this.query.set(selectedOption?.label ?? '');
1432
+ this.touched.set(true);
1433
+ }
1434
+ /** @internal */
1435
+ onOptionSelect(option) {
1436
+ if (option.disabled || this.disabled())
1437
+ return;
1438
+ this.value.set(option.value);
1439
+ this.query.set(option.label);
1440
+ this.touched.set(true);
1441
+ this.close();
1442
+ this.inputEl()?.nativeElement.focus();
1443
+ }
1444
+ /** @internal */
1445
+ onKeydown(event) {
1446
+ if (this.disabled())
1447
+ return;
1448
+ switch (event.key) {
1449
+ case 'Enter': {
1450
+ const activeIdx = this.activeIndex();
1451
+ if (this.isOpen() && activeIdx >= 0) {
1452
+ event.preventDefault();
1453
+ const option = this.filteredOptions()[activeIdx];
1454
+ this.onOptionSelect(option);
1455
+ }
1456
+ break;
1457
+ }
1458
+ case 'Escape': {
1459
+ event.preventDefault();
1460
+ const selectedOption = this.options().find((o) => o.value === this.value());
1461
+ this.query.set(selectedOption?.label ?? '');
1462
+ this.close();
1463
+ break;
1464
+ }
1465
+ case 'Tab': {
1466
+ this.close();
1467
+ break;
1468
+ }
1469
+ case 'ArrowDown':
1470
+ case 'ArrowUp': {
1471
+ if (!this.isOpen()) {
1472
+ this.open();
1473
+ break;
1474
+ }
1475
+ event.preventDefault();
1476
+ const opts = this.filteredOptions();
1477
+ const enabledIndices = opts.map((_, i) => i).filter((i) => !opts[i].disabled);
1478
+ if (enabledIndices.length === 0)
1479
+ break;
1480
+ const currentPos = enabledIndices.indexOf(this.activeIndex());
1481
+ const len = enabledIndices.length;
1482
+ const nextPos = event.key === 'ArrowDown'
1483
+ ? (currentPos + 1) % len
1484
+ : (currentPos - 1 + len) % len;
1485
+ this.activeIndex.set(enabledIndices[nextPos]);
1486
+ break;
1487
+ }
1488
+ }
1489
+ }
1490
+ open() {
1491
+ const panel = this.panelRef();
1492
+ if (!panel || this.isOpen())
1493
+ return;
1494
+ panel.nativeElement.showPopover();
1495
+ this.isOpen.set(true);
1496
+ this.activeIndex.set(-1);
1497
+ this.outsideClickHandler = (e) => {
1498
+ if (!this.elementRef.nativeElement.contains(e.target)) {
1499
+ this.close();
1500
+ }
1501
+ };
1502
+ document.addEventListener('click', this.outsideClickHandler);
1503
+ }
1504
+ close() {
1505
+ const panel = this.panelRef();
1506
+ if (!panel || !this.isOpen())
1507
+ return;
1508
+ try {
1509
+ panel.nativeElement.hidePopover();
1510
+ }
1511
+ catch {
1512
+ // Panel may already be hidden
1513
+ }
1514
+ this.isOpen.set(false);
1515
+ this.activeIndex.set(-1);
1516
+ if (this.outsideClickHandler) {
1517
+ document.removeEventListener('click', this.outsideClickHandler);
1518
+ this.outsideClickHandler = null;
1519
+ }
1520
+ }
1521
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmCombobox, deps: [], target: i0.ɵɵFactoryTarget.Component });
1522
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: LlmCombobox, isStandalone: true, selector: "llm-combobox", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", 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 }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", touched: "touchedChange" }, host: { properties: { "class": "hostClasses()" } }, viewQueries: [{ propertyName: "panelRef", first: true, predicate: ["panel"], descendants: true, isSignal: true }, { propertyName: "inputEl", first: true, predicate: ["inputEl"], descendants: true, isSignal: true }], ngImport: i0, template: `
1523
+ <div class="combobox-wrapper">
1524
+ <input
1525
+ #inputEl
1526
+ class="combobox-input"
1527
+ type="text"
1528
+ autocomplete="off"
1529
+ role="combobox"
1530
+ [id]="inputId"
1531
+ [attr.aria-expanded]="isOpen()"
1532
+ [attr.aria-controls]="panelId"
1533
+ aria-autocomplete="list"
1534
+ [attr.aria-activedescendant]="activeOptionId()"
1535
+ [attr.aria-invalid]="invalid() || null"
1536
+ [attr.disabled]="disabled() || null"
1537
+ [attr.required]="required() || null"
1538
+ [attr.name]="name() || null"
1539
+ [placeholder]="placeholder()"
1540
+ [value]="query()"
1541
+ (input)="onInput($event)"
1542
+ (focus)="onFocus()"
1543
+ (blur)="onBlur()"
1544
+ (keydown)="onKeydown($event)"
1545
+ />
1546
+ <span class="combobox-icon" aria-hidden="true">
1547
+ <svg width="12" height="12" viewBox="0 0 12 12" fill="none">
1548
+ <path d="M2 4l4 4 4-4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1549
+ </svg>
1550
+ </span>
1551
+ </div>
1552
+
1553
+ <ul
1554
+ #panel
1555
+ [id]="panelId"
1556
+ popover="manual"
1557
+ role="listbox"
1558
+ class="panel"
1559
+ [attr.aria-labelledby]="inputId"
1560
+ >
1561
+ @for (option of filteredOptions(); track option.value; let i = $index) {
1562
+ <li
1563
+ [id]="optionId(i)"
1564
+ role="option"
1565
+ class="option"
1566
+ [class.is-active]="activeIndex() === i"
1567
+ [class.is-selected]="option.value === value()"
1568
+ [class.is-disabled]="option.disabled"
1569
+ [attr.aria-selected]="option.value === value()"
1570
+ [attr.aria-disabled]="option.disabled || null"
1571
+ (mousedown)="onOptionSelect(option)"
1572
+ (mouseenter)="activeIndex.set(i)"
1573
+ >
1574
+ <span>{{ option.label }}</span>
1575
+ @if (option.value === value()) {
1576
+ <svg class="option-check" width="14" height="14" viewBox="0 0 14 14" fill="none" aria-hidden="true">
1577
+ <path d="M2 7l4 4 6-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
1578
+ </svg>
1579
+ }
1580
+ </li>
1581
+ }
1582
+ @if (filteredOptions().length === 0) {
1583
+ <li class="no-results" role="option" aria-selected="false" aria-disabled="true">No results found.</li>
1584
+ }
1585
+ </ul>
1586
+
1587
+ @if (showErrors()) {
1588
+ <div class="errors" [id]="errorId" aria-live="polite">
1589
+ @for (error of errors(); track error.kind) {
1590
+ <p class="error-message">{{ error.message }}</p>
1591
+ }
1592
+ </div>
1593
+ }
1594
+ `, isInline: true, styles: [":host{display:block;position:relative;font-family:var(--ui-font-family);font-size:var(--ui-font-size-md)}.combobox-wrapper{position:relative;display:flex;align-items:center}input.combobox-input{width:100%;box-sizing:border-box;padding:var(--ui-spacing-2) var(--ui-spacing-8) var(--ui-spacing-2) var(--ui-spacing-3);font-family:inherit;font-size:inherit;color:var(--ui-color-text);background-color:var(--ui-color-input-bg);border:1.5px solid var(--ui-color-input-border);border-radius:var(--ui-radius-md);outline:none;transition:border-color var(--ui-transition-fast),box-shadow var(--ui-transition-fast);cursor:text}input.combobox-input::placeholder{color:var(--ui-color-text-muted)}input.combobox-input:hover:not(:disabled){border-color:var(--ui-color-input-border-hover)}input.combobox-input:focus-visible,:host(.is-open) input.combobox-input{border-color:var(--ui-color-input-border-focus);box-shadow:var(--ui-focus-ring)}:host(.is-invalid) input.combobox-input{border-color:var(--ui-color-input-border-invalid)}:host(.is-invalid) input.combobox-input:focus-visible{border-color:var(--ui-color-input-border-invalid);box-shadow:0 0 0 2px var(--ui-color-surface),0 0 0 4px var(--ui-color-danger)}:host(.is-disabled){opacity:var(--ui-opacity-disabled);cursor:not-allowed}:host(.is-disabled) input.combobox-input{cursor:not-allowed}.combobox-icon{position:absolute;right:var(--ui-spacing-3);pointer-events:none;color:var(--ui-color-text-muted);transition:transform var(--ui-transition-fast);display:flex;align-items:center}:host(.is-open) .combobox-icon{transform:rotate(180deg)}.panel{position:absolute;inset-inline-start:0;inset-block-start:calc(100% + var(--ui-spacing-1));width:100%;max-height:16rem;overflow-y:auto;margin:0;padding:var(--ui-spacing-1) 0;background-color:var(--ui-color-surface);border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-md);box-shadow:var(--ui-shadow-md);z-index:100;list-style:none}.panel:not(:popover-open){display:none}.option{display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-2) var(--ui-spacing-3);cursor:pointer;color:var(--ui-color-text);font-size:var(--ui-font-size-md);transition:background-color var(--ui-transition-fast)}.option:hover:not(.is-disabled){background-color:var(--ui-color-surface-sunken)}.option.is-active{background-color:var(--ui-color-primary-light);color:var(--ui-color-primary)}.option.is-selected{font-weight:var(--ui-font-weight-semibold)}.option.is-disabled{opacity:var(--ui-opacity-disabled);cursor:not-allowed}.option-check{color:var(--ui-color-primary);flex-shrink:0}.no-results{padding:var(--ui-spacing-4) var(--ui-spacing-3);text-align:center;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-sm)}.errors{margin-top:var(--ui-spacing-1)}.error-message{margin:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-error-text);line-height:var(--ui-line-height-normal)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1595
+ }
1596
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmCombobox, decorators: [{
1597
+ type: Component,
1598
+ args: [{ selector: 'llm-combobox', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
1599
+ <div class="combobox-wrapper">
1600
+ <input
1601
+ #inputEl
1602
+ class="combobox-input"
1603
+ type="text"
1604
+ autocomplete="off"
1605
+ role="combobox"
1606
+ [id]="inputId"
1607
+ [attr.aria-expanded]="isOpen()"
1608
+ [attr.aria-controls]="panelId"
1609
+ aria-autocomplete="list"
1610
+ [attr.aria-activedescendant]="activeOptionId()"
1611
+ [attr.aria-invalid]="invalid() || null"
1612
+ [attr.disabled]="disabled() || null"
1613
+ [attr.required]="required() || null"
1614
+ [attr.name]="name() || null"
1615
+ [placeholder]="placeholder()"
1616
+ [value]="query()"
1617
+ (input)="onInput($event)"
1618
+ (focus)="onFocus()"
1619
+ (blur)="onBlur()"
1620
+ (keydown)="onKeydown($event)"
1621
+ />
1622
+ <span class="combobox-icon" aria-hidden="true">
1623
+ <svg width="12" height="12" viewBox="0 0 12 12" fill="none">
1624
+ <path d="M2 4l4 4 4-4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1625
+ </svg>
1626
+ </span>
1627
+ </div>
1628
+
1629
+ <ul
1630
+ #panel
1631
+ [id]="panelId"
1632
+ popover="manual"
1633
+ role="listbox"
1634
+ class="panel"
1635
+ [attr.aria-labelledby]="inputId"
1636
+ >
1637
+ @for (option of filteredOptions(); track option.value; let i = $index) {
1638
+ <li
1639
+ [id]="optionId(i)"
1640
+ role="option"
1641
+ class="option"
1642
+ [class.is-active]="activeIndex() === i"
1643
+ [class.is-selected]="option.value === value()"
1644
+ [class.is-disabled]="option.disabled"
1645
+ [attr.aria-selected]="option.value === value()"
1646
+ [attr.aria-disabled]="option.disabled || null"
1647
+ (mousedown)="onOptionSelect(option)"
1648
+ (mouseenter)="activeIndex.set(i)"
1649
+ >
1650
+ <span>{{ option.label }}</span>
1651
+ @if (option.value === value()) {
1652
+ <svg class="option-check" width="14" height="14" viewBox="0 0 14 14" fill="none" aria-hidden="true">
1653
+ <path d="M2 7l4 4 6-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
1654
+ </svg>
1655
+ }
1656
+ </li>
1657
+ }
1658
+ @if (filteredOptions().length === 0) {
1659
+ <li class="no-results" role="option" aria-selected="false" aria-disabled="true">No results found.</li>
1660
+ }
1661
+ </ul>
1662
+
1663
+ @if (showErrors()) {
1664
+ <div class="errors" [id]="errorId" aria-live="polite">
1665
+ @for (error of errors(); track error.kind) {
1666
+ <p class="error-message">{{ error.message }}</p>
1667
+ }
1668
+ </div>
1669
+ }
1670
+ `, host: {
1671
+ '[class]': 'hostClasses()',
1672
+ }, styles: [":host{display:block;position:relative;font-family:var(--ui-font-family);font-size:var(--ui-font-size-md)}.combobox-wrapper{position:relative;display:flex;align-items:center}input.combobox-input{width:100%;box-sizing:border-box;padding:var(--ui-spacing-2) var(--ui-spacing-8) var(--ui-spacing-2) var(--ui-spacing-3);font-family:inherit;font-size:inherit;color:var(--ui-color-text);background-color:var(--ui-color-input-bg);border:1.5px solid var(--ui-color-input-border);border-radius:var(--ui-radius-md);outline:none;transition:border-color var(--ui-transition-fast),box-shadow var(--ui-transition-fast);cursor:text}input.combobox-input::placeholder{color:var(--ui-color-text-muted)}input.combobox-input:hover:not(:disabled){border-color:var(--ui-color-input-border-hover)}input.combobox-input:focus-visible,:host(.is-open) input.combobox-input{border-color:var(--ui-color-input-border-focus);box-shadow:var(--ui-focus-ring)}:host(.is-invalid) input.combobox-input{border-color:var(--ui-color-input-border-invalid)}:host(.is-invalid) input.combobox-input:focus-visible{border-color:var(--ui-color-input-border-invalid);box-shadow:0 0 0 2px var(--ui-color-surface),0 0 0 4px var(--ui-color-danger)}:host(.is-disabled){opacity:var(--ui-opacity-disabled);cursor:not-allowed}:host(.is-disabled) input.combobox-input{cursor:not-allowed}.combobox-icon{position:absolute;right:var(--ui-spacing-3);pointer-events:none;color:var(--ui-color-text-muted);transition:transform var(--ui-transition-fast);display:flex;align-items:center}:host(.is-open) .combobox-icon{transform:rotate(180deg)}.panel{position:absolute;inset-inline-start:0;inset-block-start:calc(100% + var(--ui-spacing-1));width:100%;max-height:16rem;overflow-y:auto;margin:0;padding:var(--ui-spacing-1) 0;background-color:var(--ui-color-surface);border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-md);box-shadow:var(--ui-shadow-md);z-index:100;list-style:none}.panel:not(:popover-open){display:none}.option{display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-2) var(--ui-spacing-3);cursor:pointer;color:var(--ui-color-text);font-size:var(--ui-font-size-md);transition:background-color var(--ui-transition-fast)}.option:hover:not(.is-disabled){background-color:var(--ui-color-surface-sunken)}.option.is-active{background-color:var(--ui-color-primary-light);color:var(--ui-color-primary)}.option.is-selected{font-weight:var(--ui-font-weight-semibold)}.option.is-disabled{opacity:var(--ui-opacity-disabled);cursor:not-allowed}.option-check{color:var(--ui-color-primary);flex-shrink:0}.no-results{padding:var(--ui-spacing-4) var(--ui-spacing-3);text-align:center;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-sm)}.errors{margin-top:var(--ui-spacing-1)}.error-message{margin:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-error-text);line-height:var(--ui-line-height-normal)}\n"] }]
1673
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], panelRef: [{ type: i0.ViewChild, args: ['panel', { isSignal: true }] }], inputEl: [{ type: i0.ViewChild, args: ['inputEl', { isSignal: true }] }] } });
1674
+
1304
1675
  const LLM_DIALOG = new InjectionToken('LLM_DIALOG');
1305
1676
 
1306
- let nextId$3 = 0;
1677
+ let nextId$4 = 0;
1307
1678
  /**
1308
1679
  * Accessible modal dialog using the native `<dialog>` element.
1309
1680
  * Includes focus trap, Escape to close, backdrop click to close, and animation.
@@ -1332,8 +1703,8 @@ class LlmDialog {
1332
1703
  /** ID of the element that labels the dialog (defaults to the llm-dialog-header id). */
1333
1704
  ariaLabelledby = input('', { ...(ngDevMode ? { debugName: "ariaLabelledby" } : /* istanbul ignore next */ {}), alias: 'aria-labelledby' });
1334
1705
  /** @internal — referenced by LlmDialogHeader via LLM_DIALOG token */
1335
- headerId = `llm-dialog-header-${nextId$3}`;
1336
- dialogId = `llm-dialog-${nextId$3++}`;
1706
+ headerId = `llm-dialog-header-${nextId$4}`;
1707
+ dialogId = `llm-dialog-${nextId$4++}`;
1337
1708
  dialogRef = viewChild('dialogEl', ...(ngDevMode ? [{ debugName: "dialogRef" }] : /* istanbul ignore next */ []));
1338
1709
  triggerEl = signal(null, ...(ngDevMode ? [{ debugName: "triggerEl" }] : /* istanbul ignore next */ []));
1339
1710
  panelClass = computed(() => `panel size-${this.size()}`, ...(ngDevMode ? [{ debugName: "panelClass" }] : /* istanbul ignore next */ []));
@@ -1389,7 +1760,7 @@ class LlmDialog {
1389
1760
  <ng-content />
1390
1761
  </div>
1391
1762
  </dialog>
1392
- `, isInline: true, styles: ["llm-dialog{display:contents}dialog{all:unset;position:fixed;inset:0;margin:auto;display:none;flex-direction:column;max-height:calc(100dvh - var(--ui-spacing-8));border-radius:var(--ui-radius-lg);background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;opacity:0;transform:scale(.95);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;opacity:1;transform:scale(1)}@starting-style{dialog[open]{opacity:0;transform:scale(.95)}}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;max-height:inherit;overflow:hidden}.size-sm{width:min(24rem,90vw)}.size-md{width:min(36rem,90vw)}.size-lg{width:min(48rem,90vw)}.size-xl{width:min(64rem,90vw)}.size-full{width:100vw;height:100dvh;max-height:100dvh;border-radius:0;margin:0}llm-dialog-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}llm-dialog-content{display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}llm-dialog-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"], dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1$1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1763
+ `, isInline: true, styles: [":host(llm-dialog){display:contents}dialog{all:unset;position:fixed;inset:0;margin:auto;display:none;flex-direction:column;max-height:calc(100dvh - var(--ui-spacing-8));border-radius:var(--ui-radius-lg);background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;opacity:0;transform:scale(.95);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;opacity:1;transform:scale(1)}@starting-style{dialog[open]{opacity:0;transform:scale(.95)}}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;max-height:inherit;overflow:hidden}.size-sm{width:min(24rem,90vw)}.size-md{width:min(36rem,90vw)}.size-lg{width:min(48rem,90vw)}.size-xl{width:min(64rem,90vw)}.size-full{width:100vw;height:100dvh;max-height:100dvh;border-radius:0;margin:0}:host(llm-dialog-header){display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}:host(llm-dialog-content){display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}:host(llm-dialog-footer){display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"], dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1$1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1393
1764
  }
1394
1765
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmDialog, decorators: [{
1395
1766
  type: Component,
@@ -1419,7 +1790,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
1419
1790
  </dialog>
1420
1791
  `, host: {
1421
1792
  '[class]': 'hostClasses()',
1422
- }, styles: ["llm-dialog{display:contents}dialog{all:unset;position:fixed;inset:0;margin:auto;display:none;flex-direction:column;max-height:calc(100dvh - var(--ui-spacing-8));border-radius:var(--ui-radius-lg);background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;opacity:0;transform:scale(.95);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;opacity:1;transform:scale(1)}@starting-style{dialog[open]{opacity:0;transform:scale(.95)}}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;max-height:inherit;overflow:hidden}.size-sm{width:min(24rem,90vw)}.size-md{width:min(36rem,90vw)}.size-lg{width:min(48rem,90vw)}.size-xl{width:min(64rem,90vw)}.size-full{width:100vw;height:100dvh;max-height:100dvh;border-radius:0;margin:0}llm-dialog-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}llm-dialog-content{display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}llm-dialog-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"] }]
1793
+ }, styles: [":host(llm-dialog){display:contents}dialog{all:unset;position:fixed;inset:0;margin:auto;display:none;flex-direction:column;max-height:calc(100dvh - var(--ui-spacing-8));border-radius:var(--ui-radius-lg);background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;opacity:0;transform:scale(.95);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;opacity:1;transform:scale(1)}@starting-style{dialog[open]{opacity:0;transform:scale(.95)}}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;max-height:inherit;overflow:hidden}.size-sm{width:min(24rem,90vw)}.size-md{width:min(36rem,90vw)}.size-lg{width:min(48rem,90vw)}.size-xl{width:min(64rem,90vw)}.size-full{width:100vw;height:100dvh;max-height:100dvh;border-radius:0;margin:0}:host(llm-dialog-header){display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}:host(llm-dialog-content){display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}:host(llm-dialog-footer){display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"] }]
1423
1794
  }], ctorParameters: () => [], propDecorators: { open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], closeOnBackdrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnBackdrop", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], ariaLabelledby: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-labelledby", required: false }] }], dialogRef: [{ type: i0.ViewChild, args: ['dialogEl', { isSignal: true }] }] } });
1424
1795
  /**
1425
1796
  * Header slot for `llm-dialog`. Renders above content with a bottom separator.
@@ -1453,7 +1824,7 @@ class LlmDialogHeader {
1453
1824
  <line x1="6" y1="6" x2="18" y2="18" />
1454
1825
  </svg>
1455
1826
  </button>
1456
- `, isInline: true, styles: ["llm-dialog{display:contents}dialog{all:unset;position:fixed;inset:0;margin:auto;display:none;flex-direction:column;max-height:calc(100dvh - var(--ui-spacing-8));border-radius:var(--ui-radius-lg);background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;opacity:0;transform:scale(.95);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;opacity:1;transform:scale(1)}@starting-style{dialog[open]{opacity:0;transform:scale(.95)}}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;max-height:inherit;overflow:hidden}.size-sm{width:min(24rem,90vw)}.size-md{width:min(36rem,90vw)}.size-lg{width:min(48rem,90vw)}.size-xl{width:min(64rem,90vw)}.size-full{width:100vw;height:100dvh;max-height:100dvh;border-radius:0;margin:0}llm-dialog-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}llm-dialog-content{display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}llm-dialog-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1827
+ `, isInline: true, styles: [":host(llm-dialog){display:contents}dialog{all:unset;position:fixed;inset:0;margin:auto;display:none;flex-direction:column;max-height:calc(100dvh - var(--ui-spacing-8));border-radius:var(--ui-radius-lg);background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;opacity:0;transform:scale(.95);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;opacity:1;transform:scale(1)}@starting-style{dialog[open]{opacity:0;transform:scale(.95)}}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;max-height:inherit;overflow:hidden}.size-sm{width:min(24rem,90vw)}.size-md{width:min(36rem,90vw)}.size-lg{width:min(48rem,90vw)}.size-xl{width:min(64rem,90vw)}.size-full{width:100vw;height:100dvh;max-height:100dvh;border-radius:0;margin:0}:host(llm-dialog-header){display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}:host(llm-dialog-content){display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}:host(llm-dialog-footer){display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1457
1828
  }
1458
1829
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmDialogHeader, decorators: [{
1459
1830
  type: Component,
@@ -1484,34 +1855,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
1484
1855
  </button>
1485
1856
  `, host: {
1486
1857
  '[attr.id]': 'context.headerId',
1487
- }, styles: ["llm-dialog{display:contents}dialog{all:unset;position:fixed;inset:0;margin:auto;display:none;flex-direction:column;max-height:calc(100dvh - var(--ui-spacing-8));border-radius:var(--ui-radius-lg);background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;opacity:0;transform:scale(.95);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;opacity:1;transform:scale(1)}@starting-style{dialog[open]{opacity:0;transform:scale(.95)}}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;max-height:inherit;overflow:hidden}.size-sm{width:min(24rem,90vw)}.size-md{width:min(36rem,90vw)}.size-lg{width:min(48rem,90vw)}.size-xl{width:min(64rem,90vw)}.size-full{width:100vw;height:100dvh;max-height:100dvh;border-radius:0;margin:0}llm-dialog-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}llm-dialog-content{display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}llm-dialog-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"] }]
1858
+ }, styles: [":host(llm-dialog){display:contents}dialog{all:unset;position:fixed;inset:0;margin:auto;display:none;flex-direction:column;max-height:calc(100dvh - var(--ui-spacing-8));border-radius:var(--ui-radius-lg);background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;opacity:0;transform:scale(.95);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;opacity:1;transform:scale(1)}@starting-style{dialog[open]{opacity:0;transform:scale(.95)}}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;max-height:inherit;overflow:hidden}.size-sm{width:min(24rem,90vw)}.size-md{width:min(36rem,90vw)}.size-lg{width:min(48rem,90vw)}.size-xl{width:min(64rem,90vw)}.size-full{width:100vw;height:100dvh;max-height:100dvh;border-radius:0;margin:0}:host(llm-dialog-header){display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}:host(llm-dialog-content){display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}:host(llm-dialog-footer){display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"] }]
1488
1859
  }] });
1489
1860
  /**
1490
1861
  * Content slot for `llm-dialog`. Scrollable primary content area.
1491
1862
  */
1492
1863
  class LlmDialogContent {
1493
1864
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmDialogContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1494
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: LlmDialogContent, isStandalone: true, selector: "llm-dialog-content", ngImport: i0, template: `<ng-content />`, isInline: true, styles: ["llm-dialog{display:contents}dialog{all:unset;position:fixed;inset:0;margin:auto;display:none;flex-direction:column;max-height:calc(100dvh - var(--ui-spacing-8));border-radius:var(--ui-radius-lg);background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;opacity:0;transform:scale(.95);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;opacity:1;transform:scale(1)}@starting-style{dialog[open]{opacity:0;transform:scale(.95)}}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;max-height:inherit;overflow:hidden}.size-sm{width:min(24rem,90vw)}.size-md{width:min(36rem,90vw)}.size-lg{width:min(48rem,90vw)}.size-xl{width:min(64rem,90vw)}.size-full{width:100vw;height:100dvh;max-height:100dvh;border-radius:0;margin:0}llm-dialog-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}llm-dialog-content{display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}llm-dialog-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1865
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: LlmDialogContent, isStandalone: true, selector: "llm-dialog-content", ngImport: i0, template: `<ng-content />`, isInline: true, styles: [":host(llm-dialog){display:contents}dialog{all:unset;position:fixed;inset:0;margin:auto;display:none;flex-direction:column;max-height:calc(100dvh - var(--ui-spacing-8));border-radius:var(--ui-radius-lg);background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;opacity:0;transform:scale(.95);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;opacity:1;transform:scale(1)}@starting-style{dialog[open]{opacity:0;transform:scale(.95)}}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;max-height:inherit;overflow:hidden}.size-sm{width:min(24rem,90vw)}.size-md{width:min(36rem,90vw)}.size-lg{width:min(48rem,90vw)}.size-xl{width:min(64rem,90vw)}.size-full{width:100vw;height:100dvh;max-height:100dvh;border-radius:0;margin:0}:host(llm-dialog-header){display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}:host(llm-dialog-content){display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}:host(llm-dialog-footer){display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1495
1866
  }
1496
1867
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmDialogContent, decorators: [{
1497
1868
  type: Component,
1498
- args: [{ selector: 'llm-dialog-content', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `<ng-content />`, styles: ["llm-dialog{display:contents}dialog{all:unset;position:fixed;inset:0;margin:auto;display:none;flex-direction:column;max-height:calc(100dvh - var(--ui-spacing-8));border-radius:var(--ui-radius-lg);background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;opacity:0;transform:scale(.95);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;opacity:1;transform:scale(1)}@starting-style{dialog[open]{opacity:0;transform:scale(.95)}}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;max-height:inherit;overflow:hidden}.size-sm{width:min(24rem,90vw)}.size-md{width:min(36rem,90vw)}.size-lg{width:min(48rem,90vw)}.size-xl{width:min(64rem,90vw)}.size-full{width:100vw;height:100dvh;max-height:100dvh;border-radius:0;margin:0}llm-dialog-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}llm-dialog-content{display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}llm-dialog-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"] }]
1869
+ args: [{ selector: 'llm-dialog-content', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `<ng-content />`, styles: [":host(llm-dialog){display:contents}dialog{all:unset;position:fixed;inset:0;margin:auto;display:none;flex-direction:column;max-height:calc(100dvh - var(--ui-spacing-8));border-radius:var(--ui-radius-lg);background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;opacity:0;transform:scale(.95);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;opacity:1;transform:scale(1)}@starting-style{dialog[open]{opacity:0;transform:scale(.95)}}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;max-height:inherit;overflow:hidden}.size-sm{width:min(24rem,90vw)}.size-md{width:min(36rem,90vw)}.size-lg{width:min(48rem,90vw)}.size-xl{width:min(64rem,90vw)}.size-full{width:100vw;height:100dvh;max-height:100dvh;border-radius:0;margin:0}:host(llm-dialog-header){display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}:host(llm-dialog-content){display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}:host(llm-dialog-footer){display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"] }]
1499
1870
  }] });
1500
1871
  /**
1501
1872
  * Footer slot for `llm-dialog`. Renders below content, typically holds action buttons.
1502
1873
  */
1503
1874
  class LlmDialogFooter {
1504
1875
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmDialogFooter, deps: [], target: i0.ɵɵFactoryTarget.Component });
1505
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: LlmDialogFooter, isStandalone: true, selector: "llm-dialog-footer", ngImport: i0, template: `<ng-content />`, isInline: true, styles: ["llm-dialog{display:contents}dialog{all:unset;position:fixed;inset:0;margin:auto;display:none;flex-direction:column;max-height:calc(100dvh - var(--ui-spacing-8));border-radius:var(--ui-radius-lg);background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;opacity:0;transform:scale(.95);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;opacity:1;transform:scale(1)}@starting-style{dialog[open]{opacity:0;transform:scale(.95)}}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;max-height:inherit;overflow:hidden}.size-sm{width:min(24rem,90vw)}.size-md{width:min(36rem,90vw)}.size-lg{width:min(48rem,90vw)}.size-xl{width:min(64rem,90vw)}.size-full{width:100vw;height:100dvh;max-height:100dvh;border-radius:0;margin:0}llm-dialog-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}llm-dialog-content{display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}llm-dialog-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1876
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: LlmDialogFooter, isStandalone: true, selector: "llm-dialog-footer", ngImport: i0, template: `<ng-content />`, isInline: true, styles: [":host(llm-dialog){display:contents}dialog{all:unset;position:fixed;inset:0;margin:auto;display:none;flex-direction:column;max-height:calc(100dvh - var(--ui-spacing-8));border-radius:var(--ui-radius-lg);background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;opacity:0;transform:scale(.95);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;opacity:1;transform:scale(1)}@starting-style{dialog[open]{opacity:0;transform:scale(.95)}}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;max-height:inherit;overflow:hidden}.size-sm{width:min(24rem,90vw)}.size-md{width:min(36rem,90vw)}.size-lg{width:min(48rem,90vw)}.size-xl{width:min(64rem,90vw)}.size-full{width:100vw;height:100dvh;max-height:100dvh;border-radius:0;margin:0}:host(llm-dialog-header){display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}:host(llm-dialog-content){display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}:host(llm-dialog-footer){display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1506
1877
  }
1507
1878
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmDialogFooter, decorators: [{
1508
1879
  type: Component,
1509
- args: [{ selector: 'llm-dialog-footer', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `<ng-content />`, styles: ["llm-dialog{display:contents}dialog{all:unset;position:fixed;inset:0;margin:auto;display:none;flex-direction:column;max-height:calc(100dvh - var(--ui-spacing-8));border-radius:var(--ui-radius-lg);background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;opacity:0;transform:scale(.95);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;opacity:1;transform:scale(1)}@starting-style{dialog[open]{opacity:0;transform:scale(.95)}}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;max-height:inherit;overflow:hidden}.size-sm{width:min(24rem,90vw)}.size-md{width:min(36rem,90vw)}.size-lg{width:min(48rem,90vw)}.size-xl{width:min(64rem,90vw)}.size-full{width:100vw;height:100dvh;max-height:100dvh;border-radius:0;margin:0}llm-dialog-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}llm-dialog-content{display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}llm-dialog-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"] }]
1880
+ args: [{ selector: 'llm-dialog-footer', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `<ng-content />`, styles: [":host(llm-dialog){display:contents}dialog{all:unset;position:fixed;inset:0;margin:auto;display:none;flex-direction:column;max-height:calc(100dvh - var(--ui-spacing-8));border-radius:var(--ui-radius-lg);background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;opacity:0;transform:scale(.95);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;opacity:1;transform:scale(1)}@starting-style{dialog[open]{opacity:0;transform:scale(.95)}}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;max-height:inherit;overflow:hidden}.size-sm{width:min(24rem,90vw)}.size-md{width:min(36rem,90vw)}.size-lg{width:min(48rem,90vw)}.size-xl{width:min(64rem,90vw)}.size-full{width:100vw;height:100dvh;max-height:100dvh;border-radius:0;margin:0}:host(llm-dialog-header){display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}:host(llm-dialog-content){display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}:host(llm-dialog-footer){display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"] }]
1510
1881
  }] });
1511
1882
 
1512
1883
  const LLM_TAB_GROUP = new InjectionToken('LLM_TAB_GROUP');
1513
1884
 
1514
- let nextId$2 = 0;
1885
+ let nextId$3 = 0;
1515
1886
  /**
1516
1887
  * Accessible tabbed interface container. Renders a tab list and manages
1517
1888
  * keyboard navigation with roving tabindex.
@@ -1533,7 +1904,7 @@ class LlmTabGroup {
1533
1904
  /** @internal */
1534
1905
  tabs = signal([], ...(ngDevMode ? [{ debugName: "tabs" }] : /* istanbul ignore next */ []));
1535
1906
  /** @internal */
1536
- elementRef = inject(ElementRef);
1907
+ tabBtns = viewChildren('tabBtn', ...(ngDevMode ? [{ debugName: "tabBtns" }] : /* istanbul ignore next */ []));
1537
1908
  /** @internal */
1538
1909
  hostClasses = computed(() => `variant-${this.variant()}`, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
1539
1910
  /** @internal — called by LlmTab on init */
@@ -1554,43 +1925,39 @@ class LlmTabGroup {
1554
1925
  }
1555
1926
  /** @internal */
1556
1927
  onTabKeydown(event) {
1557
- const tabs = this.tabs();
1558
- const enabled = tabs.map((tab, i) => ({ tab, i })).filter(({ tab }) => !tab.disabled);
1559
- if (enabled.length === 0)
1928
+ const allTabs = this.tabs();
1929
+ const enabledIndices = allTabs.map((_, i) => i).filter((i) => !allTabs[i].disabled);
1930
+ const len = enabledIndices.length;
1931
+ if (len === 0)
1560
1932
  return;
1561
- const currentPos = enabled.findIndex(({ i }) => i === this.selectedIndex());
1562
- const n = enabled.length;
1563
- let targetEntry = null;
1933
+ const currentPosInEnabled = enabledIndices.indexOf(this.selectedIndex());
1934
+ let targetIdx = null;
1564
1935
  switch (event.key) {
1565
1936
  case 'ArrowRight':
1566
- event.preventDefault();
1567
- targetEntry = enabled[(currentPos + 1) % n];
1937
+ targetIdx = enabledIndices[(currentPosInEnabled + 1) % len];
1568
1938
  break;
1569
1939
  case 'ArrowLeft':
1570
- event.preventDefault();
1571
- targetEntry = enabled[(currentPos - 1 + n) % n];
1940
+ targetIdx = enabledIndices[(currentPosInEnabled - 1 + len) % len];
1572
1941
  break;
1573
1942
  case 'Home':
1574
- event.preventDefault();
1575
- targetEntry = enabled[0];
1943
+ targetIdx = enabledIndices[0];
1576
1944
  break;
1577
1945
  case 'End':
1578
- event.preventDefault();
1579
- targetEntry = enabled[n - 1];
1946
+ targetIdx = enabledIndices[len - 1];
1580
1947
  break;
1948
+ default:
1949
+ return;
1581
1950
  }
1582
- if (targetEntry) {
1583
- this.selectedIndex.set(targetEntry.i);
1584
- const buttons = this.elementRef.nativeElement.querySelectorAll('[role="tab"]');
1585
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
1586
- buttons[targetEntry.i]?.focus();
1587
- }
1951
+ event.preventDefault();
1952
+ this.selectTab(targetIdx);
1953
+ this.tabBtns()[targetIdx]?.nativeElement.focus();
1588
1954
  }
1589
1955
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmTabGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
1590
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: LlmTabGroup, isStandalone: true, selector: "llm-tab-group", inputs: { selectedIndex: { classPropertyName: "selectedIndex", publicName: "selectedIndex", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedIndex: "selectedIndexChange" }, host: { properties: { "class": "hostClasses()" } }, providers: [{ provide: LLM_TAB_GROUP, useExisting: LlmTabGroup }], ngImport: i0, template: `
1956
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: LlmTabGroup, isStandalone: true, selector: "llm-tab-group", inputs: { selectedIndex: { classPropertyName: "selectedIndex", publicName: "selectedIndex", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedIndex: "selectedIndexChange" }, host: { properties: { "class": "hostClasses()" } }, providers: [{ provide: LLM_TAB_GROUP, useExisting: LlmTabGroup }], viewQueries: [{ propertyName: "tabBtns", predicate: ["tabBtn"], descendants: true, isSignal: true }], ngImport: i0, template: `
1591
1957
  <div class="tablist" role="tablist">
1592
1958
  @for (tab of tabs(); track tab.id; let i = $index) {
1593
1959
  <button
1960
+ #tabBtn
1594
1961
  type="button"
1595
1962
  role="tab"
1596
1963
  [id]="tab.tabId"
@@ -1608,7 +1975,7 @@ class LlmTabGroup {
1608
1975
  }
1609
1976
  </div>
1610
1977
  <ng-content />
1611
- `, isInline: true, styles: [":host{display:block;font-family:var(--ui-font-family)}.tablist{display:flex;gap:var(--ui-spacing-1);border-bottom:1px solid var(--ui-color-border);overflow-x:auto;scrollbar-width:none}.tablist::-webkit-scrollbar{display:none}.tablist button{all:unset;box-sizing:border-box;position:relative;display:inline-flex;align-items:center;padding:var(--ui-spacing-2) var(--ui-spacing-4);font-size:var(--ui-font-size-sm);font-weight:var(--ui-font-weight-medium);color:var(--ui-color-text-muted);cursor:pointer;transition:var(--ui-transition-fast);transition-property:color,background-color;border-radius:var(--ui-radius-md) var(--ui-radius-md) 0 0;white-space:nowrap;-webkit-user-select:none;user-select:none}.tablist button:after{content:\"\";position:absolute;bottom:-1px;left:0;right:0;height:2px;background:transparent;border-radius:var(--ui-radius-full);transition:background var(--ui-transition-fast)}.tablist button.is-active{color:var(--ui-color-primary)}.tablist button.is-active:after{background:var(--ui-color-primary)}.tablist button:hover:not(.is-disabled):not(.is-active){color:var(--ui-color-text);background:var(--ui-color-surface-sunken)}.tablist button:focus-visible{outline:none;box-shadow:var(--ui-focus-ring);border-radius:var(--ui-radius-md)}.tablist button.is-disabled{opacity:.4;cursor:not-allowed}llm-tab [role=tabpanel]{padding:var(--ui-spacing-4) 0}llm-tab [role=tabpanel]:focus-visible{outline:none;box-shadow:var(--ui-focus-ring);border-radius:var(--ui-radius-md)}:host(.variant-pills) .tablist{border-bottom:none;gap:var(--ui-spacing-2);padding:var(--ui-spacing-1);background:var(--ui-color-surface-sunken);border-radius:var(--ui-radius-lg)}:host(.variant-pills) .tablist button{border-radius:var(--ui-radius-md);padding:var(--ui-spacing-1) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}:host(.variant-pills) .tablist button:after{display:none}:host(.variant-pills) .tablist button.is-active{background:var(--ui-color-surface);color:var(--ui-color-text);box-shadow:var(--ui-shadow-sm)}:host(.variant-pills) .tablist button:hover:not(.is-disabled):not(.is-active){background:transparent;color:var(--ui-color-text)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1978
+ `, isInline: true, styles: [":host{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.tablist{display:flex;gap:var(--ui-spacing-1);border-bottom:1px solid var(--ui-color-border);overflow-x:auto;scrollbar-width:none}.tablist::-webkit-scrollbar{display:none}.tablist button{all:unset;box-sizing:border-box;position:relative;display:inline-flex;align-items:center;padding:var(--ui-spacing-2) var(--ui-spacing-4);font-size:var(--ui-font-size-sm);font-weight:var(--ui-font-weight-medium);color:var(--ui-color-text-muted);cursor:pointer;transition:var(--ui-transition-fast);transition-property:color,background-color;border-radius:var(--ui-radius-md) var(--ui-radius-md) 0 0;white-space:nowrap;-webkit-user-select:none;user-select:none}.tablist button:after{content:\"\";position:absolute;bottom:-1px;left:0;right:0;height:2px;background:transparent;border-radius:var(--ui-radius-full);transition:background var(--ui-transition-fast)}.tablist button.is-active{color:var(--ui-color-primary)}.tablist button.is-active:after{background:var(--ui-color-primary)}.tablist button:hover:not(.is-disabled):not(.is-active){color:var(--ui-color-text);background:var(--ui-color-surface-sunken)}.tablist button:focus-visible{outline:none;box-shadow:var(--ui-focus-ring);border-radius:var(--ui-radius-md)}.tablist button.is-disabled{opacity:var(--ui-opacity-disabled);cursor:not-allowed}llm-tab [role=tabpanel]{padding:var(--ui-spacing-4) 0}llm-tab [role=tabpanel]:focus-visible{outline:none;box-shadow:var(--ui-focus-ring);border-radius:var(--ui-radius-md)}:host(.variant-pills) .tablist{border-bottom:none;gap:var(--ui-spacing-2);padding:var(--ui-spacing-1);background:var(--ui-color-surface-sunken);border-radius:var(--ui-radius-lg)}:host(.variant-pills) .tablist button{border-radius:var(--ui-radius-md);padding:var(--ui-spacing-1) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}:host(.variant-pills) .tablist button:after{display:none}:host(.variant-pills) .tablist button.is-active{background:var(--ui-color-surface);color:var(--ui-color-text);box-shadow:var(--ui-shadow-sm)}:host(.variant-pills) .tablist button:hover:not(.is-disabled):not(.is-active){background:transparent;color:var(--ui-color-text)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1612
1979
  }
1613
1980
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmTabGroup, decorators: [{
1614
1981
  type: Component,
@@ -1616,6 +1983,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
1616
1983
  <div class="tablist" role="tablist">
1617
1984
  @for (tab of tabs(); track tab.id; let i = $index) {
1618
1985
  <button
1986
+ #tabBtn
1619
1987
  type="button"
1620
1988
  role="tab"
1621
1989
  [id]="tab.tabId"
@@ -1635,8 +2003,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
1635
2003
  <ng-content />
1636
2004
  `, host: {
1637
2005
  '[class]': 'hostClasses()',
1638
- }, providers: [{ provide: LLM_TAB_GROUP, useExisting: LlmTabGroup }], styles: [":host{display:block;font-family:var(--ui-font-family)}.tablist{display:flex;gap:var(--ui-spacing-1);border-bottom:1px solid var(--ui-color-border);overflow-x:auto;scrollbar-width:none}.tablist::-webkit-scrollbar{display:none}.tablist button{all:unset;box-sizing:border-box;position:relative;display:inline-flex;align-items:center;padding:var(--ui-spacing-2) var(--ui-spacing-4);font-size:var(--ui-font-size-sm);font-weight:var(--ui-font-weight-medium);color:var(--ui-color-text-muted);cursor:pointer;transition:var(--ui-transition-fast);transition-property:color,background-color;border-radius:var(--ui-radius-md) var(--ui-radius-md) 0 0;white-space:nowrap;-webkit-user-select:none;user-select:none}.tablist button:after{content:\"\";position:absolute;bottom:-1px;left:0;right:0;height:2px;background:transparent;border-radius:var(--ui-radius-full);transition:background var(--ui-transition-fast)}.tablist button.is-active{color:var(--ui-color-primary)}.tablist button.is-active:after{background:var(--ui-color-primary)}.tablist button:hover:not(.is-disabled):not(.is-active){color:var(--ui-color-text);background:var(--ui-color-surface-sunken)}.tablist button:focus-visible{outline:none;box-shadow:var(--ui-focus-ring);border-radius:var(--ui-radius-md)}.tablist button.is-disabled{opacity:.4;cursor:not-allowed}llm-tab [role=tabpanel]{padding:var(--ui-spacing-4) 0}llm-tab [role=tabpanel]:focus-visible{outline:none;box-shadow:var(--ui-focus-ring);border-radius:var(--ui-radius-md)}:host(.variant-pills) .tablist{border-bottom:none;gap:var(--ui-spacing-2);padding:var(--ui-spacing-1);background:var(--ui-color-surface-sunken);border-radius:var(--ui-radius-lg)}:host(.variant-pills) .tablist button{border-radius:var(--ui-radius-md);padding:var(--ui-spacing-1) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}:host(.variant-pills) .tablist button:after{display:none}:host(.variant-pills) .tablist button.is-active{background:var(--ui-color-surface);color:var(--ui-color-text);box-shadow:var(--ui-shadow-sm)}:host(.variant-pills) .tablist button:hover:not(.is-disabled):not(.is-active){background:transparent;color:var(--ui-color-text)}\n"] }]
1639
- }], propDecorators: { selectedIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedIndex", required: false }] }, { type: i0.Output, args: ["selectedIndexChange"] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] } });
2006
+ }, providers: [{ provide: LLM_TAB_GROUP, useExisting: LlmTabGroup }], styles: [":host{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.tablist{display:flex;gap:var(--ui-spacing-1);border-bottom:1px solid var(--ui-color-border);overflow-x:auto;scrollbar-width:none}.tablist::-webkit-scrollbar{display:none}.tablist button{all:unset;box-sizing:border-box;position:relative;display:inline-flex;align-items:center;padding:var(--ui-spacing-2) var(--ui-spacing-4);font-size:var(--ui-font-size-sm);font-weight:var(--ui-font-weight-medium);color:var(--ui-color-text-muted);cursor:pointer;transition:var(--ui-transition-fast);transition-property:color,background-color;border-radius:var(--ui-radius-md) var(--ui-radius-md) 0 0;white-space:nowrap;-webkit-user-select:none;user-select:none}.tablist button:after{content:\"\";position:absolute;bottom:-1px;left:0;right:0;height:2px;background:transparent;border-radius:var(--ui-radius-full);transition:background var(--ui-transition-fast)}.tablist button.is-active{color:var(--ui-color-primary)}.tablist button.is-active:after{background:var(--ui-color-primary)}.tablist button:hover:not(.is-disabled):not(.is-active){color:var(--ui-color-text);background:var(--ui-color-surface-sunken)}.tablist button:focus-visible{outline:none;box-shadow:var(--ui-focus-ring);border-radius:var(--ui-radius-md)}.tablist button.is-disabled{opacity:var(--ui-opacity-disabled);cursor:not-allowed}llm-tab [role=tabpanel]{padding:var(--ui-spacing-4) 0}llm-tab [role=tabpanel]:focus-visible{outline:none;box-shadow:var(--ui-focus-ring);border-radius:var(--ui-radius-md)}:host(.variant-pills) .tablist{border-bottom:none;gap:var(--ui-spacing-2);padding:var(--ui-spacing-1);background:var(--ui-color-surface-sunken);border-radius:var(--ui-radius-lg)}:host(.variant-pills) .tablist button{border-radius:var(--ui-radius-md);padding:var(--ui-spacing-1) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}:host(.variant-pills) .tablist button:after{display:none}:host(.variant-pills) .tablist button.is-active{background:var(--ui-color-surface);color:var(--ui-color-text);box-shadow:var(--ui-shadow-sm)}:host(.variant-pills) .tablist button:hover:not(.is-disabled):not(.is-active){background:transparent;color:var(--ui-color-text)}\n"] }]
2007
+ }], propDecorators: { selectedIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedIndex", required: false }] }, { type: i0.Output, args: ["selectedIndexChange"] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], tabBtns: [{ type: i0.ViewChildren, args: ['tabBtn', { isSignal: true }] }] } });
1640
2008
  /**
1641
2009
  * Individual tab definition. Place inside `<llm-tab-group>`.
1642
2010
  *
@@ -1651,11 +2019,11 @@ class LlmTab {
1651
2019
  /** Whether this tab is disabled. */
1652
2020
  disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
1653
2021
  /** @internal */
1654
- tabId = `llm-tab-${nextId$2}`;
2022
+ tabId = `llm-tab-${nextId$3}`;
1655
2023
  /** @internal */
1656
- panelId = `llm-tab-panel-${nextId$2}`;
2024
+ panelId = `llm-tab-panel-${nextId$3}`;
1657
2025
  /** @internal */
1658
- id = `llm-tab-instance-${nextId$2++}`;
2026
+ id = `llm-tab-instance-${nextId$3++}`;
1659
2027
  /** @internal */
1660
2028
  context = inject(LLM_TAB_GROUP);
1661
2029
  /** @internal */
@@ -1707,7 +2075,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
1707
2075
 
1708
2076
  const LLM_ACCORDION_GROUP = new InjectionToken('LLM_ACCORDION_GROUP');
1709
2077
 
1710
- let nextId$1 = 0;
2078
+ let nextId$2 = 0;
1711
2079
  /**
1712
2080
  * Container that manages accordion items. Controls single vs multi expansion
1713
2081
  * and provides keyboard navigation across items.
@@ -1742,42 +2110,40 @@ class LlmAccordionGroup {
1742
2110
  this.items.update((list) => list.filter((i) => i !== item));
1743
2111
  }
1744
2112
  handleKeydown(event, item) {
1745
- const allItems = this.items();
1746
- const enabled = allItems.filter((i) => !i.isItemDisabled());
1747
- if (enabled.length === 0)
2113
+ const enabledItems = this.items().filter((i) => !i.disabled);
2114
+ const len = enabledItems.length;
2115
+ if (len === 0)
1748
2116
  return;
1749
- const pos = enabled.indexOf(item);
1750
- const n = enabled.length;
1751
- let target = null;
2117
+ const currentIdx = enabledItems.indexOf(item);
2118
+ let targetItem = null;
1752
2119
  switch (event.key) {
1753
2120
  case 'ArrowDown':
1754
- event.preventDefault();
1755
- target = enabled[(pos + 1) % n];
2121
+ targetItem = enabledItems[(currentIdx + 1) % len];
1756
2122
  break;
1757
2123
  case 'ArrowUp':
1758
- event.preventDefault();
1759
- target = enabled[(pos - 1 + n) % n];
2124
+ targetItem = enabledItems[(currentIdx - 1 + len) % len];
1760
2125
  break;
1761
2126
  case 'Home':
1762
- event.preventDefault();
1763
- target = enabled[0];
2127
+ targetItem = enabledItems[0];
1764
2128
  break;
1765
2129
  case 'End':
1766
- event.preventDefault();
1767
- target = enabled[n - 1];
2130
+ targetItem = enabledItems[len - 1];
1768
2131
  break;
2132
+ default:
2133
+ return;
1769
2134
  }
1770
- target?.focusTrigger();
2135
+ event.preventDefault();
2136
+ targetItem.focus();
1771
2137
  }
1772
2138
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmAccordionGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
1773
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: LlmAccordionGroup, isStandalone: true, selector: "llm-accordion-group", inputs: { multi: { classPropertyName: "multi", publicName: "multi", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "presentation" }, properties: { "class": "hostClassesValue" } }, providers: [{ provide: LLM_ACCORDION_GROUP, useExisting: LlmAccordionGroup }], hostDirectives: [{ directive: i1$2.CdkAccordion, inputs: ["multi", "multi"] }], ngImport: i0, template: `<ng-content />`, isInline: true, styles: [":host{display:block;font-family:var(--ui-font-family)}:host(.variant-default){border-top:1px solid var(--ui-color-border)}:host(.variant-default) llm-accordion-item{border-bottom:1px solid var(--ui-color-border)}:host(.variant-bordered){border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-lg);overflow:hidden}:host(.variant-bordered) llm-accordion-item:not(:last-child){border-bottom:1px solid var(--ui-color-border)}:host(.variant-separated){display:flex;flex-direction:column;gap:var(--ui-spacing-2)}:host(.variant-separated) llm-accordion-item{border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-lg);overflow:hidden}llm-accordion-item{display:block}.accordion-heading{all:unset;display:block}.accordion-trigger{all:unset;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;width:100%;padding:var(--ui-spacing-4);font-size:var(--ui-font-size-md);font-weight:var(--ui-font-weight-medium);color:var(--ui-color-text);cursor:pointer;transition:background-color var(--ui-transition-fast);-webkit-user-select:none;user-select:none}.accordion-trigger:hover:not(.is-disabled){background:var(--ui-color-surface-sunken)}.accordion-trigger:focus-visible{outline:none;box-shadow:var(--ui-focus-ring);position:relative;z-index:1}.accordion-trigger.is-disabled{opacity:var(--ui-opacity-disabled);cursor:not-allowed}.chevron{flex-shrink:0;color:var(--ui-color-text-muted);transition:transform var(--ui-duration-normal) var(--ui-ease-out)}.chevron.is-expanded{transform:rotate(180deg)}.accordion-panel-wrapper{display:grid;grid-template-rows:0fr;transition:grid-template-rows var(--ui-duration-normal) var(--ui-ease-out)}.accordion-panel-wrapper.is-expanded{grid-template-rows:1fr}.accordion-panel{overflow:hidden}.accordion-panel-wrapper.is-expanded .accordion-panel{padding:0 var(--ui-spacing-4) var(--ui-spacing-4)}.accordion-panel-wrapper:not(.is-expanded) .accordion-panel{padding:0 var(--ui-spacing-4)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2139
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: LlmAccordionGroup, isStandalone: true, selector: "llm-accordion-group", inputs: { multi: { classPropertyName: "multi", publicName: "multi", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "presentation" }, properties: { "class": "hostClassesValue" } }, providers: [{ provide: LLM_ACCORDION_GROUP, useExisting: LlmAccordionGroup }], hostDirectives: [{ directive: i1$2.CdkAccordion, inputs: ["multi", "multi"] }], ngImport: i0, template: `<ng-content />`, isInline: true, styles: [":host{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}:host(.variant-default){border-top:1px solid var(--ui-color-border)}:host(.variant-default) llm-accordion-item{border-bottom:1px solid var(--ui-color-border)}:host(.variant-bordered){border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-lg);overflow:hidden}:host(.variant-bordered) llm-accordion-item:not(:last-child){border-bottom:1px solid var(--ui-color-border)}:host(.variant-separated){display:flex;flex-direction:column;gap:var(--ui-spacing-2)}:host(.variant-separated) llm-accordion-item{border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-lg);overflow:hidden}llm-accordion-item{display:block}.accordion-heading{all:unset;display:block}.accordion-trigger{all:unset;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;width:100%;padding:var(--ui-spacing-4);font-size:var(--ui-font-size-md);font-weight:var(--ui-font-weight-medium);color:var(--ui-color-text);cursor:pointer;transition:background-color var(--ui-transition-fast);-webkit-user-select:none;user-select:none}.accordion-trigger:hover:not(.is-disabled){background:var(--ui-color-surface-sunken)}.accordion-trigger:focus-visible{outline:none;box-shadow:var(--ui-focus-ring);position:relative;z-index:1}.accordion-trigger.is-disabled{opacity:var(--ui-opacity-disabled);cursor:not-allowed}.chevron{flex-shrink:0;color:var(--ui-color-text-muted);transition:transform var(--ui-duration-normal) var(--ui-ease-out)}.chevron.is-expanded{transform:rotate(180deg)}.accordion-panel-wrapper{display:grid;grid-template-rows:0fr;transition:grid-template-rows var(--ui-duration-normal) var(--ui-ease-out)}.accordion-panel-wrapper.is-expanded{grid-template-rows:1fr}.accordion-panel{overflow:hidden}.accordion-panel-wrapper.is-expanded .accordion-panel{padding:0 var(--ui-spacing-4) var(--ui-spacing-4)}.accordion-panel-wrapper:not(.is-expanded) .accordion-panel{padding:0 var(--ui-spacing-4)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1774
2140
  }
1775
2141
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmAccordionGroup, decorators: [{
1776
2142
  type: Component,
1777
2143
  args: [{ selector: 'llm-accordion-group', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `<ng-content />`, hostDirectives: [{ directive: CdkAccordion, inputs: ['multi'] }], host: {
1778
2144
  '[class]': 'hostClassesValue',
1779
2145
  role: 'presentation',
1780
- }, providers: [{ provide: LLM_ACCORDION_GROUP, useExisting: LlmAccordionGroup }], styles: [":host{display:block;font-family:var(--ui-font-family)}:host(.variant-default){border-top:1px solid var(--ui-color-border)}:host(.variant-default) llm-accordion-item{border-bottom:1px solid var(--ui-color-border)}:host(.variant-bordered){border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-lg);overflow:hidden}:host(.variant-bordered) llm-accordion-item:not(:last-child){border-bottom:1px solid var(--ui-color-border)}:host(.variant-separated){display:flex;flex-direction:column;gap:var(--ui-spacing-2)}:host(.variant-separated) llm-accordion-item{border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-lg);overflow:hidden}llm-accordion-item{display:block}.accordion-heading{all:unset;display:block}.accordion-trigger{all:unset;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;width:100%;padding:var(--ui-spacing-4);font-size:var(--ui-font-size-md);font-weight:var(--ui-font-weight-medium);color:var(--ui-color-text);cursor:pointer;transition:background-color var(--ui-transition-fast);-webkit-user-select:none;user-select:none}.accordion-trigger:hover:not(.is-disabled){background:var(--ui-color-surface-sunken)}.accordion-trigger:focus-visible{outline:none;box-shadow:var(--ui-focus-ring);position:relative;z-index:1}.accordion-trigger.is-disabled{opacity:var(--ui-opacity-disabled);cursor:not-allowed}.chevron{flex-shrink:0;color:var(--ui-color-text-muted);transition:transform var(--ui-duration-normal) var(--ui-ease-out)}.chevron.is-expanded{transform:rotate(180deg)}.accordion-panel-wrapper{display:grid;grid-template-rows:0fr;transition:grid-template-rows var(--ui-duration-normal) var(--ui-ease-out)}.accordion-panel-wrapper.is-expanded{grid-template-rows:1fr}.accordion-panel{overflow:hidden}.accordion-panel-wrapper.is-expanded .accordion-panel{padding:0 var(--ui-spacing-4) var(--ui-spacing-4)}.accordion-panel-wrapper:not(.is-expanded) .accordion-panel{padding:0 var(--ui-spacing-4)}\n"] }]
2146
+ }, providers: [{ provide: LLM_ACCORDION_GROUP, useExisting: LlmAccordionGroup }], styles: [":host{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}:host(.variant-default){border-top:1px solid var(--ui-color-border)}:host(.variant-default) llm-accordion-item{border-bottom:1px solid var(--ui-color-border)}:host(.variant-bordered){border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-lg);overflow:hidden}:host(.variant-bordered) llm-accordion-item:not(:last-child){border-bottom:1px solid var(--ui-color-border)}:host(.variant-separated){display:flex;flex-direction:column;gap:var(--ui-spacing-2)}:host(.variant-separated) llm-accordion-item{border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-lg);overflow:hidden}llm-accordion-item{display:block}.accordion-heading{all:unset;display:block}.accordion-trigger{all:unset;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;width:100%;padding:var(--ui-spacing-4);font-size:var(--ui-font-size-md);font-weight:var(--ui-font-weight-medium);color:var(--ui-color-text);cursor:pointer;transition:background-color var(--ui-transition-fast);-webkit-user-select:none;user-select:none}.accordion-trigger:hover:not(.is-disabled){background:var(--ui-color-surface-sunken)}.accordion-trigger:focus-visible{outline:none;box-shadow:var(--ui-focus-ring);position:relative;z-index:1}.accordion-trigger.is-disabled{opacity:var(--ui-opacity-disabled);cursor:not-allowed}.chevron{flex-shrink:0;color:var(--ui-color-text-muted);transition:transform var(--ui-duration-normal) var(--ui-ease-out)}.chevron.is-expanded{transform:rotate(180deg)}.accordion-panel-wrapper{display:grid;grid-template-rows:0fr;transition:grid-template-rows var(--ui-duration-normal) var(--ui-ease-out)}.accordion-panel-wrapper.is-expanded{grid-template-rows:1fr}.accordion-panel{overflow:hidden}.accordion-panel-wrapper.is-expanded .accordion-panel{padding:0 var(--ui-spacing-4) var(--ui-spacing-4)}.accordion-panel-wrapper:not(.is-expanded) .accordion-panel{padding:0 var(--ui-spacing-4)}\n"] }]
1781
2147
  }], propDecorators: { multi: [{ type: i0.Input, args: [{ isSignal: true, alias: "multi", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] } });
1782
2148
  /**
1783
2149
  * Directive to mark the accordion header content.
@@ -1808,9 +2174,14 @@ class LlmAccordionItem {
1808
2174
  /** Whether this item is expanded. Supports two-way binding. */
1809
2175
  expanded = model(false, ...(ngDevMode ? [{ debugName: "expanded" }] : /* istanbul ignore next */ []));
1810
2176
  /** Whether this item is disabled. */
1811
- disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
2177
+ // eslint-disable-next-line @angular-eslint/no-input-rename
2178
+ disabledInput = input(false, { ...(ngDevMode ? { debugName: "disabledInput" } : /* istanbul ignore next */ {}), alias: 'disabled' });
2179
+ /** @internal — satisfies AccordionItem / FocusableOption interface */
2180
+ get disabled() {
2181
+ return this.disabledInput();
2182
+ }
1812
2183
  /** @internal */
1813
- id = `llm-accordion-item-${nextId$1++}`;
2184
+ id = `llm-accordion-item-${nextId$2++}`;
1814
2185
  /** @internal */
1815
2186
  triggerId = `${this.id}-trigger`;
1816
2187
  /** @internal */
@@ -1829,11 +2200,11 @@ class LlmAccordionItem {
1829
2200
  }
1830
2201
  /** @internal */
1831
2202
  get isDisabled() {
1832
- return this.disabled();
2203
+ return this.disabledInput();
1833
2204
  }
1834
2205
  /** @internal */
1835
2206
  get ariaDisabled() {
1836
- return this.disabled() || null;
2207
+ return this.disabledInput() || null;
1837
2208
  }
1838
2209
  constructor() {
1839
2210
  this.cdkItem.expandedChange.subscribe((expanded) => {
@@ -1852,16 +2223,12 @@ class LlmAccordionItem {
1852
2223
  this.group.unregister(this);
1853
2224
  }
1854
2225
  /** @internal — for FocusKeyManager */
1855
- focusTrigger() {
2226
+ focus() {
1856
2227
  this.el.nativeElement.querySelector('.accordion-trigger')?.focus();
1857
2228
  }
1858
- /** @internal — for FocusKeyManager */
1859
- isItemDisabled() {
1860
- return this.disabled();
1861
- }
1862
2229
  /** @internal */
1863
2230
  onToggle() {
1864
- if (this.disabled())
2231
+ if (this.disabledInput())
1865
2232
  return;
1866
2233
  this.cdkItem.toggle();
1867
2234
  }
@@ -1870,7 +2237,7 @@ class LlmAccordionItem {
1870
2237
  this.group.handleKeydown(event, this);
1871
2238
  }
1872
2239
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmAccordionItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
1873
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: LlmAccordionItem, isStandalone: true, selector: "llm-accordion-item", inputs: { expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { expanded: "expandedChange" }, host: { properties: { "attr.data-accordion-id": "id" } }, hostDirectives: [{ directive: i1$2.CdkAccordionItem }], ngImport: i0, template: `
2240
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: LlmAccordionItem, isStandalone: true, selector: "llm-accordion-item", inputs: { expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { expanded: "expandedChange" }, host: { properties: { "attr.data-accordion-id": "id" } }, hostDirectives: [{ directive: i1$2.CdkAccordionItem }], ngImport: i0, template: `
1874
2241
  <h3 class="accordion-heading">
1875
2242
  <button
1876
2243
  type="button"
@@ -1916,7 +2283,7 @@ class LlmAccordionItem {
1916
2283
  <ng-content />
1917
2284
  </div>
1918
2285
  </div>
1919
- `, isInline: true, styles: [":host{display:block;font-family:var(--ui-font-family)}:host(.variant-default){border-top:1px solid var(--ui-color-border)}:host(.variant-default) llm-accordion-item{border-bottom:1px solid var(--ui-color-border)}:host(.variant-bordered){border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-lg);overflow:hidden}:host(.variant-bordered) llm-accordion-item:not(:last-child){border-bottom:1px solid var(--ui-color-border)}:host(.variant-separated){display:flex;flex-direction:column;gap:var(--ui-spacing-2)}:host(.variant-separated) llm-accordion-item{border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-lg);overflow:hidden}llm-accordion-item{display:block}.accordion-heading{all:unset;display:block}.accordion-trigger{all:unset;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;width:100%;padding:var(--ui-spacing-4);font-size:var(--ui-font-size-md);font-weight:var(--ui-font-weight-medium);color:var(--ui-color-text);cursor:pointer;transition:background-color var(--ui-transition-fast);-webkit-user-select:none;user-select:none}.accordion-trigger:hover:not(.is-disabled){background:var(--ui-color-surface-sunken)}.accordion-trigger:focus-visible{outline:none;box-shadow:var(--ui-focus-ring);position:relative;z-index:1}.accordion-trigger.is-disabled{opacity:var(--ui-opacity-disabled);cursor:not-allowed}.chevron{flex-shrink:0;color:var(--ui-color-text-muted);transition:transform var(--ui-duration-normal) var(--ui-ease-out)}.chevron.is-expanded{transform:rotate(180deg)}.accordion-panel-wrapper{display:grid;grid-template-rows:0fr;transition:grid-template-rows var(--ui-duration-normal) var(--ui-ease-out)}.accordion-panel-wrapper.is-expanded{grid-template-rows:1fr}.accordion-panel{overflow:hidden}.accordion-panel-wrapper.is-expanded .accordion-panel{padding:0 var(--ui-spacing-4) var(--ui-spacing-4)}.accordion-panel-wrapper:not(.is-expanded) .accordion-panel{padding:0 var(--ui-spacing-4)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2286
+ `, isInline: true, styles: [":host{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}:host(.variant-default){border-top:1px solid var(--ui-color-border)}:host(.variant-default) llm-accordion-item{border-bottom:1px solid var(--ui-color-border)}:host(.variant-bordered){border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-lg);overflow:hidden}:host(.variant-bordered) llm-accordion-item:not(:last-child){border-bottom:1px solid var(--ui-color-border)}:host(.variant-separated){display:flex;flex-direction:column;gap:var(--ui-spacing-2)}:host(.variant-separated) llm-accordion-item{border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-lg);overflow:hidden}llm-accordion-item{display:block}.accordion-heading{all:unset;display:block}.accordion-trigger{all:unset;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;width:100%;padding:var(--ui-spacing-4);font-size:var(--ui-font-size-md);font-weight:var(--ui-font-weight-medium);color:var(--ui-color-text);cursor:pointer;transition:background-color var(--ui-transition-fast);-webkit-user-select:none;user-select:none}.accordion-trigger:hover:not(.is-disabled){background:var(--ui-color-surface-sunken)}.accordion-trigger:focus-visible{outline:none;box-shadow:var(--ui-focus-ring);position:relative;z-index:1}.accordion-trigger.is-disabled{opacity:var(--ui-opacity-disabled);cursor:not-allowed}.chevron{flex-shrink:0;color:var(--ui-color-text-muted);transition:transform var(--ui-duration-normal) var(--ui-ease-out)}.chevron.is-expanded{transform:rotate(180deg)}.accordion-panel-wrapper{display:grid;grid-template-rows:0fr;transition:grid-template-rows var(--ui-duration-normal) var(--ui-ease-out)}.accordion-panel-wrapper.is-expanded{grid-template-rows:1fr}.accordion-panel{overflow:hidden}.accordion-panel-wrapper.is-expanded .accordion-panel{padding:0 var(--ui-spacing-4) var(--ui-spacing-4)}.accordion-panel-wrapper:not(.is-expanded) .accordion-panel{padding:0 var(--ui-spacing-4)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1920
2287
  }
1921
2288
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmAccordionItem, decorators: [{
1922
2289
  type: Component,
@@ -1968,8 +2335,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
1968
2335
  </div>
1969
2336
  `, host: {
1970
2337
  '[attr.data-accordion-id]': 'id',
1971
- }, styles: [":host{display:block;font-family:var(--ui-font-family)}:host(.variant-default){border-top:1px solid var(--ui-color-border)}:host(.variant-default) llm-accordion-item{border-bottom:1px solid var(--ui-color-border)}:host(.variant-bordered){border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-lg);overflow:hidden}:host(.variant-bordered) llm-accordion-item:not(:last-child){border-bottom:1px solid var(--ui-color-border)}:host(.variant-separated){display:flex;flex-direction:column;gap:var(--ui-spacing-2)}:host(.variant-separated) llm-accordion-item{border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-lg);overflow:hidden}llm-accordion-item{display:block}.accordion-heading{all:unset;display:block}.accordion-trigger{all:unset;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;width:100%;padding:var(--ui-spacing-4);font-size:var(--ui-font-size-md);font-weight:var(--ui-font-weight-medium);color:var(--ui-color-text);cursor:pointer;transition:background-color var(--ui-transition-fast);-webkit-user-select:none;user-select:none}.accordion-trigger:hover:not(.is-disabled){background:var(--ui-color-surface-sunken)}.accordion-trigger:focus-visible{outline:none;box-shadow:var(--ui-focus-ring);position:relative;z-index:1}.accordion-trigger.is-disabled{opacity:var(--ui-opacity-disabled);cursor:not-allowed}.chevron{flex-shrink:0;color:var(--ui-color-text-muted);transition:transform var(--ui-duration-normal) var(--ui-ease-out)}.chevron.is-expanded{transform:rotate(180deg)}.accordion-panel-wrapper{display:grid;grid-template-rows:0fr;transition:grid-template-rows var(--ui-duration-normal) var(--ui-ease-out)}.accordion-panel-wrapper.is-expanded{grid-template-rows:1fr}.accordion-panel{overflow:hidden}.accordion-panel-wrapper.is-expanded .accordion-panel{padding:0 var(--ui-spacing-4) var(--ui-spacing-4)}.accordion-panel-wrapper:not(.is-expanded) .accordion-panel{padding:0 var(--ui-spacing-4)}\n"] }]
1972
- }], ctorParameters: () => [], propDecorators: { expanded: [{ type: i0.Input, args: [{ isSignal: true, alias: "expanded", required: false }] }, { type: i0.Output, args: ["expandedChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
2338
+ }, styles: [":host{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}:host(.variant-default){border-top:1px solid var(--ui-color-border)}:host(.variant-default) llm-accordion-item{border-bottom:1px solid var(--ui-color-border)}:host(.variant-bordered){border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-lg);overflow:hidden}:host(.variant-bordered) llm-accordion-item:not(:last-child){border-bottom:1px solid var(--ui-color-border)}:host(.variant-separated){display:flex;flex-direction:column;gap:var(--ui-spacing-2)}:host(.variant-separated) llm-accordion-item{border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-lg);overflow:hidden}llm-accordion-item{display:block}.accordion-heading{all:unset;display:block}.accordion-trigger{all:unset;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;width:100%;padding:var(--ui-spacing-4);font-size:var(--ui-font-size-md);font-weight:var(--ui-font-weight-medium);color:var(--ui-color-text);cursor:pointer;transition:background-color var(--ui-transition-fast);-webkit-user-select:none;user-select:none}.accordion-trigger:hover:not(.is-disabled){background:var(--ui-color-surface-sunken)}.accordion-trigger:focus-visible{outline:none;box-shadow:var(--ui-focus-ring);position:relative;z-index:1}.accordion-trigger.is-disabled{opacity:var(--ui-opacity-disabled);cursor:not-allowed}.chevron{flex-shrink:0;color:var(--ui-color-text-muted);transition:transform var(--ui-duration-normal) var(--ui-ease-out)}.chevron.is-expanded{transform:rotate(180deg)}.accordion-panel-wrapper{display:grid;grid-template-rows:0fr;transition:grid-template-rows var(--ui-duration-normal) var(--ui-ease-out)}.accordion-panel-wrapper.is-expanded{grid-template-rows:1fr}.accordion-panel{overflow:hidden}.accordion-panel-wrapper.is-expanded .accordion-panel{padding:0 var(--ui-spacing-4) var(--ui-spacing-4)}.accordion-panel-wrapper:not(.is-expanded) .accordion-panel{padding:0 var(--ui-spacing-4)}\n"] }]
2339
+ }], ctorParameters: () => [], propDecorators: { expanded: [{ type: i0.Input, args: [{ isSignal: true, alias: "expanded", required: false }] }, { type: i0.Output, args: ["expandedChange"] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
1973
2340
 
1974
2341
  /**
1975
2342
  * Trigger directive that opens an `<llm-menu>` dropdown.
@@ -2704,7 +3071,7 @@ class LlmBreadcrumbs {
2704
3071
  <ng-content />
2705
3072
  </ol>
2706
3073
  </nav>
2707
- `, isInline: true, styles: ["llm-breadcrumbs{display:block;font-family:var(--ui-font-family)}nav{display:block}.list{display:flex;flex-wrap:wrap;align-items:center;gap:0;list-style:none;margin:0;padding:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-text-muted)}llm-breadcrumb-item{display:contents}.item{display:flex;align-items:center}.item:after{content:var(--llm-separator, \"/\");margin:0 var(--ui-spacing-2);color:var(--ui-color-border-hover);font-size:var(--ui-font-size-md);line-height:1}:host(.is-current) .item:after{display:none}.item a[href]{color:var(--ui-color-text-muted);text-decoration:none;border-radius:var(--ui-radius-sm);padding:.125rem .25rem;margin:-.125rem -.25rem;transition:color var(--ui-transition-fast)}.item a[href]:hover{color:var(--ui-color-text);text-decoration:underline}.item a[href]:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}.item a:not([href]){color:var(--ui-color-text);font-weight:var(--ui-font-weight-semibold)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3074
+ `, isInline: true, styles: [":host(llm-breadcrumbs){display:block;font-family:var(--ui-font-family)}nav{display:block}.list{display:flex;flex-wrap:wrap;align-items:center;gap:0;list-style:none;margin:0;padding:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-text-muted)}:host(llm-breadcrumb-item){display:contents}.item{display:flex;align-items:center}.item:after{content:var(--llm-separator, \"/\");margin:0 var(--ui-spacing-2);color:var(--ui-color-border-hover);font-size:var(--ui-font-size-md);line-height:1}:host(.is-current) .item:after{display:none}.item a[href]{color:var(--ui-color-text-muted);text-decoration:none;border-radius:var(--ui-radius-sm);padding:.125rem .25rem;margin:-.125rem -.25rem;transition:color var(--ui-transition-fast)}.item a[href]:hover{color:var(--ui-color-text);text-decoration:underline}.item a[href]:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}.item a:not([href]){color:var(--ui-color-text);font-weight:var(--ui-font-weight-semibold)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2708
3075
  }
2709
3076
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmBreadcrumbs, decorators: [{
2710
3077
  type: Component,
@@ -2726,7 +3093,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
2726
3093
  </nav>
2727
3094
  `, host: {
2728
3095
  '[style.--llm-separator]': 'separatorCssVar()',
2729
- }, styles: ["llm-breadcrumbs{display:block;font-family:var(--ui-font-family)}nav{display:block}.list{display:flex;flex-wrap:wrap;align-items:center;gap:0;list-style:none;margin:0;padding:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-text-muted)}llm-breadcrumb-item{display:contents}.item{display:flex;align-items:center}.item:after{content:var(--llm-separator, \"/\");margin:0 var(--ui-spacing-2);color:var(--ui-color-border-hover);font-size:var(--ui-font-size-md);line-height:1}:host(.is-current) .item:after{display:none}.item a[href]{color:var(--ui-color-text-muted);text-decoration:none;border-radius:var(--ui-radius-sm);padding:.125rem .25rem;margin:-.125rem -.25rem;transition:color var(--ui-transition-fast)}.item a[href]:hover{color:var(--ui-color-text);text-decoration:underline}.item a[href]:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}.item a:not([href]){color:var(--ui-color-text);font-weight:var(--ui-font-weight-semibold)}\n"] }]
3096
+ }, styles: [":host(llm-breadcrumbs){display:block;font-family:var(--ui-font-family)}nav{display:block}.list{display:flex;flex-wrap:wrap;align-items:center;gap:0;list-style:none;margin:0;padding:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-text-muted)}:host(llm-breadcrumb-item){display:contents}.item{display:flex;align-items:center}.item:after{content:var(--llm-separator, \"/\");margin:0 var(--ui-spacing-2);color:var(--ui-color-border-hover);font-size:var(--ui-font-size-md);line-height:1}:host(.is-current) .item:after{display:none}.item a[href]{color:var(--ui-color-text-muted);text-decoration:none;border-radius:var(--ui-radius-sm);padding:.125rem .25rem;margin:-.125rem -.25rem;transition:color var(--ui-transition-fast)}.item a[href]:hover{color:var(--ui-color-text);text-decoration:underline}.item a[href]:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}.item a:not([href]){color:var(--ui-color-text);font-weight:var(--ui-font-weight-semibold)}\n"] }]
2730
3097
  }], propDecorators: { separator: [{ type: i0.Input, args: [{ isSignal: true, alias: "separator", required: false }] }] } });
2731
3098
  /**
2732
3099
  * A single breadcrumb step. The last item is automatically treated as
@@ -2754,7 +3121,7 @@ class LlmBreadcrumbItem {
2754
3121
  [attr.aria-current]="isCurrent() ? 'page' : null"
2755
3122
  ><ng-content /></a>
2756
3123
  </li>
2757
- `, isInline: true, styles: ["llm-breadcrumbs{display:block;font-family:var(--ui-font-family)}nav{display:block}.list{display:flex;flex-wrap:wrap;align-items:center;gap:0;list-style:none;margin:0;padding:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-text-muted)}llm-breadcrumb-item{display:contents}.item{display:flex;align-items:center}.item:after{content:var(--llm-separator, \"/\");margin:0 var(--ui-spacing-2);color:var(--ui-color-border-hover);font-size:var(--ui-font-size-md);line-height:1}:host(.is-current) .item:after{display:none}.item a[href]{color:var(--ui-color-text-muted);text-decoration:none;border-radius:var(--ui-radius-sm);padding:.125rem .25rem;margin:-.125rem -.25rem;transition:color var(--ui-transition-fast)}.item a[href]:hover{color:var(--ui-color-text);text-decoration:underline}.item a[href]:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}.item a:not([href]){color:var(--ui-color-text);font-weight:var(--ui-font-weight-semibold)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3124
+ `, isInline: true, styles: [":host(llm-breadcrumbs){display:block;font-family:var(--ui-font-family)}nav{display:block}.list{display:flex;flex-wrap:wrap;align-items:center;gap:0;list-style:none;margin:0;padding:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-text-muted)}:host(llm-breadcrumb-item){display:contents}.item{display:flex;align-items:center}.item:after{content:var(--llm-separator, \"/\");margin:0 var(--ui-spacing-2);color:var(--ui-color-border-hover);font-size:var(--ui-font-size-md);line-height:1}:host(.is-current) .item:after{display:none}.item a[href]{color:var(--ui-color-text-muted);text-decoration:none;border-radius:var(--ui-radius-sm);padding:.125rem .25rem;margin:-.125rem -.25rem;transition:color var(--ui-transition-fast)}.item a[href]:hover{color:var(--ui-color-text);text-decoration:underline}.item a[href]:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}.item a:not([href]){color:var(--ui-color-text);font-weight:var(--ui-font-weight-semibold)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2758
3125
  }
2759
3126
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmBreadcrumbItem, decorators: [{
2760
3127
  type: Component,
@@ -2767,7 +3134,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
2767
3134
  </li>
2768
3135
  `, host: {
2769
3136
  '[class.is-current]': 'isCurrent()',
2770
- }, styles: ["llm-breadcrumbs{display:block;font-family:var(--ui-font-family)}nav{display:block}.list{display:flex;flex-wrap:wrap;align-items:center;gap:0;list-style:none;margin:0;padding:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-text-muted)}llm-breadcrumb-item{display:contents}.item{display:flex;align-items:center}.item:after{content:var(--llm-separator, \"/\");margin:0 var(--ui-spacing-2);color:var(--ui-color-border-hover);font-size:var(--ui-font-size-md);line-height:1}:host(.is-current) .item:after{display:none}.item a[href]{color:var(--ui-color-text-muted);text-decoration:none;border-radius:var(--ui-radius-sm);padding:.125rem .25rem;margin:-.125rem -.25rem;transition:color var(--ui-transition-fast)}.item a[href]:hover{color:var(--ui-color-text);text-decoration:underline}.item a[href]:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}.item a:not([href]){color:var(--ui-color-text);font-weight:var(--ui-font-weight-semibold)}\n"] }]
3137
+ }, styles: [":host(llm-breadcrumbs){display:block;font-family:var(--ui-font-family)}nav{display:block}.list{display:flex;flex-wrap:wrap;align-items:center;gap:0;list-style:none;margin:0;padding:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-text-muted)}:host(llm-breadcrumb-item){display:contents}.item{display:flex;align-items:center}.item:after{content:var(--llm-separator, \"/\");margin:0 var(--ui-spacing-2);color:var(--ui-color-border-hover);font-size:var(--ui-font-size-md);line-height:1}:host(.is-current) .item:after{display:none}.item a[href]{color:var(--ui-color-text-muted);text-decoration:none;border-radius:var(--ui-radius-sm);padding:.125rem .25rem;margin:-.125rem -.25rem;transition:color var(--ui-transition-fast)}.item a[href]:hover{color:var(--ui-color-text);text-decoration:underline}.item a[href]:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}.item a:not([href]){color:var(--ui-color-text);font-weight:var(--ui-font-weight-semibold)}\n"] }]
2771
3138
  }], propDecorators: { href: [{ type: i0.Input, args: [{ isSignal: true, alias: "href", required: false }] }] } });
2772
3139
 
2773
3140
  /**
@@ -2895,7 +3262,7 @@ class LlmPagination {
2895
3262
  }
2896
3263
  </ul>
2897
3264
  </nav>
2898
- `, isInline: true, styles: [":host{display:block;font-family:var(--ui-font-family)}nav{display:block}.page-list{display:flex;flex-wrap:wrap;align-items:center;gap:var(--ui-spacing-1);list-style:none;margin:0;padding:0}.page-btn{all:unset;display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:var(--ui-radius-md);border:1px solid var(--ui-color-border);background:var(--ui-color-surface);color:var(--ui-color-text);font-size:var(--ui-font-size-sm);font-weight:var(--ui-font-weight-medium);cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color var(--ui-transition-fast),border-color var(--ui-transition-fast),color var(--ui-transition-fast)}.page-btn:hover:not(:disabled){background-color:var(--ui-color-surface-sunken);border-color:var(--ui-color-border-hover)}.page-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}.page-btn.is-active{background-color:var(--ui-color-primary);border-color:var(--ui-color-primary);color:var(--ui-color-text-on-primary)}.page-btn.is-active:hover{background-color:var(--ui-color-primary-hover);border-color:var(--ui-color-primary-hover)}.page-btn.is-disabled,.page-btn:disabled{opacity:.4;pointer-events:none;cursor:default}.ellipsis{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-sm);-webkit-user-select:none;user-select:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3265
+ `, isInline: true, styles: [":host{display:block;font-family:var(--ui-font-family)}nav{display:block}.page-list{display:flex;flex-wrap:wrap;align-items:center;gap:var(--ui-spacing-1);list-style:none;margin:0;padding:0}.page-btn{all:unset;display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:var(--ui-radius-md);border:1px solid var(--ui-color-border);background:var(--ui-color-surface);color:var(--ui-color-text);font-size:var(--ui-font-size-sm);font-weight:var(--ui-font-weight-medium);cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color var(--ui-transition-fast),border-color var(--ui-transition-fast),color var(--ui-transition-fast)}.page-btn:hover:not(:disabled){background-color:var(--ui-color-surface-sunken);border-color:var(--ui-color-border-hover)}.page-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}.page-btn.is-active{background-color:var(--ui-color-primary);border-color:var(--ui-color-primary);color:var(--ui-color-text-on-primary)}.page-btn.is-active:hover{background-color:var(--ui-color-primary-hover);border-color:var(--ui-color-primary-hover)}.page-btn.is-disabled,.page-btn:disabled{opacity:var(--ui-opacity-disabled);pointer-events:none;cursor:default}.ellipsis{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-sm);-webkit-user-select:none;user-select:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2899
3266
  }
2900
3267
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmPagination, decorators: [{
2901
3268
  type: Component,
@@ -2963,12 +3330,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
2963
3330
  }
2964
3331
  </ul>
2965
3332
  </nav>
2966
- `, styles: [":host{display:block;font-family:var(--ui-font-family)}nav{display:block}.page-list{display:flex;flex-wrap:wrap;align-items:center;gap:var(--ui-spacing-1);list-style:none;margin:0;padding:0}.page-btn{all:unset;display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:var(--ui-radius-md);border:1px solid var(--ui-color-border);background:var(--ui-color-surface);color:var(--ui-color-text);font-size:var(--ui-font-size-sm);font-weight:var(--ui-font-weight-medium);cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color var(--ui-transition-fast),border-color var(--ui-transition-fast),color var(--ui-transition-fast)}.page-btn:hover:not(:disabled){background-color:var(--ui-color-surface-sunken);border-color:var(--ui-color-border-hover)}.page-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}.page-btn.is-active{background-color:var(--ui-color-primary);border-color:var(--ui-color-primary);color:var(--ui-color-text-on-primary)}.page-btn.is-active:hover{background-color:var(--ui-color-primary-hover);border-color:var(--ui-color-primary-hover)}.page-btn.is-disabled,.page-btn:disabled{opacity:.4;pointer-events:none;cursor:default}.ellipsis{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-sm);-webkit-user-select:none;user-select:none}\n"] }]
3333
+ `, styles: [":host{display:block;font-family:var(--ui-font-family)}nav{display:block}.page-list{display:flex;flex-wrap:wrap;align-items:center;gap:var(--ui-spacing-1);list-style:none;margin:0;padding:0}.page-btn{all:unset;display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:var(--ui-radius-md);border:1px solid var(--ui-color-border);background:var(--ui-color-surface);color:var(--ui-color-text);font-size:var(--ui-font-size-sm);font-weight:var(--ui-font-weight-medium);cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color var(--ui-transition-fast),border-color var(--ui-transition-fast),color var(--ui-transition-fast)}.page-btn:hover:not(:disabled){background-color:var(--ui-color-surface-sunken);border-color:var(--ui-color-border-hover)}.page-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}.page-btn.is-active{background-color:var(--ui-color-primary);border-color:var(--ui-color-primary);color:var(--ui-color-text-on-primary)}.page-btn.is-active:hover{background-color:var(--ui-color-primary-hover);border-color:var(--ui-color-primary-hover)}.page-btn.is-disabled,.page-btn:disabled{opacity:var(--ui-opacity-disabled);pointer-events:none;cursor:default}.ellipsis{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-sm);-webkit-user-select:none;user-select:none}\n"] }]
2967
3334
  }], propDecorators: { page: [{ type: i0.Input, args: [{ isSignal: true, alias: "page", required: false }] }, { type: i0.Output, args: ["pageChange"] }], pageCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageCount", required: false }] }], siblingCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "siblingCount", required: false }] }], showFirstLast: [{ type: i0.Input, args: [{ isSignal: true, alias: "showFirstLast", required: false }] }] } });
2968
3335
 
2969
3336
  const LLM_DRAWER = new InjectionToken('LLM_DRAWER');
2970
3337
 
2971
- let nextId = 0;
3338
+ let nextId$1 = 0;
2972
3339
  /**
2973
3340
  * Slide-in drawer panel using the native `<dialog>` element.
2974
3341
  * Supports left, right, top, and bottom positions with focus trap,
@@ -2997,8 +3364,8 @@ class LlmDrawer {
2997
3364
  /** Whether clicking the backdrop closes the drawer. */
2998
3365
  closeOnBackdrop = input(true, ...(ngDevMode ? [{ debugName: "closeOnBackdrop" }] : /* istanbul ignore next */ []));
2999
3366
  /** @internal — referenced by LlmDrawerHeader via LLM_DRAWER token */
3000
- headerId = `llm-drawer-header-${nextId}`;
3001
- drawerId = `llm-drawer-${nextId++}`;
3367
+ headerId = `llm-drawer-header-${nextId$1}`;
3368
+ drawerId = `llm-drawer-${nextId$1++}`;
3002
3369
  dialogRef = viewChild('dialogEl', ...(ngDevMode ? [{ debugName: "dialogRef" }] : /* istanbul ignore next */ []));
3003
3370
  triggerEl = signal(null, ...(ngDevMode ? [{ debugName: "triggerEl" }] : /* istanbul ignore next */ []));
3004
3371
  hostClasses = computed(() => `position-${this.position()} size-${this.size()}${this.open() ? ' is-open' : ''}`, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
@@ -3054,7 +3421,7 @@ class LlmDrawer {
3054
3421
  <ng-content />
3055
3422
  </div>
3056
3423
  </dialog>
3057
- `, isInline: true, styles: ["llm-drawer{display:contents}dialog{all:unset;position:fixed;display:none;flex-direction:column;background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;transition:transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;transform:translate(0)!important}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden}:host(.position-right) dialog{inset:0 0 0 auto;height:100dvh;transform:translate(100%)}@starting-style{:host(.position-right) dialog[open]{transform:translate(100%)}}:host(.position-left) dialog{inset:0 auto 0 0;height:100dvh;transform:translate(-100%)}@starting-style{:host(.position-left) dialog[open]{transform:translate(-100%)}}:host(.position-top) dialog{inset:0 0 auto;width:100vw;transform:translateY(-100%)}@starting-style{:host(.position-top) dialog[open]{transform:translateY(-100%)}}:host(.position-bottom) dialog{inset:auto 0 0;width:100vw;transform:translateY(100%)}@starting-style{:host(.position-bottom) dialog[open]{transform:translateY(100%)}}:host(.position-right.size-sm) dialog,:host(.position-left.size-sm) dialog{width:20rem}:host(.position-right.size-md) dialog,:host(.position-left.size-md) dialog{width:28rem}:host(.position-right.size-lg) dialog,:host(.position-left.size-lg) dialog{width:40rem}:host(.position-right.size-full) dialog,:host(.position-left.size-full) dialog{width:100vw}:host(.position-top.size-sm) dialog,:host(.position-bottom.size-sm) dialog{height:12rem}:host(.position-top.size-md) dialog,:host(.position-bottom.size-md) dialog{height:20rem}:host(.position-top.size-lg) dialog,:host(.position-bottom.size-lg) dialog{height:32rem}:host(.position-top.size-full) dialog,:host(.position-bottom.size-full) dialog{height:100dvh}llm-drawer-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}llm-drawer-content{display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}llm-drawer-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"], dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1$1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3424
+ `, isInline: true, styles: [":host(llm-drawer){display:contents}dialog{all:unset;position:fixed;display:none;flex-direction:column;background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;transition:transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;transform:translate(0)!important}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden}:host(.position-right) dialog{inset:0 0 0 auto;height:100dvh;transform:translate(100%)}@starting-style{:host(.position-right) dialog[open]{transform:translate(100%)}}:host(.position-left) dialog{inset:0 auto 0 0;height:100dvh;transform:translate(-100%)}@starting-style{:host(.position-left) dialog[open]{transform:translate(-100%)}}:host(.position-top) dialog{inset:0 0 auto;width:100vw;transform:translateY(-100%)}@starting-style{:host(.position-top) dialog[open]{transform:translateY(-100%)}}:host(.position-bottom) dialog{inset:auto 0 0;width:100vw;transform:translateY(100%)}@starting-style{:host(.position-bottom) dialog[open]{transform:translateY(100%)}}:host(.position-right.size-sm) dialog,:host(.position-left.size-sm) dialog{width:20rem}:host(.position-right.size-md) dialog,:host(.position-left.size-md) dialog{width:28rem}:host(.position-right.size-lg) dialog,:host(.position-left.size-lg) dialog{width:40rem}:host(.position-right.size-full) dialog,:host(.position-left.size-full) dialog{width:100vw}:host(.position-top.size-sm) dialog,:host(.position-bottom.size-sm) dialog{height:12rem}:host(.position-top.size-md) dialog,:host(.position-bottom.size-md) dialog{height:20rem}:host(.position-top.size-lg) dialog,:host(.position-bottom.size-lg) dialog{height:32rem}:host(.position-top.size-full) dialog,:host(.position-bottom.size-full) dialog{height:100dvh}:host(llm-drawer-header){display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}:host(llm-drawer-content){display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}:host(llm-drawer-footer){display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"], dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1$1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3058
3425
  }
3059
3426
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmDrawer, decorators: [{
3060
3427
  type: Component,
@@ -3085,7 +3452,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
3085
3452
  </dialog>
3086
3453
  `, host: {
3087
3454
  '[class]': 'hostClasses()',
3088
- }, styles: ["llm-drawer{display:contents}dialog{all:unset;position:fixed;display:none;flex-direction:column;background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;transition:transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;transform:translate(0)!important}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden}:host(.position-right) dialog{inset:0 0 0 auto;height:100dvh;transform:translate(100%)}@starting-style{:host(.position-right) dialog[open]{transform:translate(100%)}}:host(.position-left) dialog{inset:0 auto 0 0;height:100dvh;transform:translate(-100%)}@starting-style{:host(.position-left) dialog[open]{transform:translate(-100%)}}:host(.position-top) dialog{inset:0 0 auto;width:100vw;transform:translateY(-100%)}@starting-style{:host(.position-top) dialog[open]{transform:translateY(-100%)}}:host(.position-bottom) dialog{inset:auto 0 0;width:100vw;transform:translateY(100%)}@starting-style{:host(.position-bottom) dialog[open]{transform:translateY(100%)}}:host(.position-right.size-sm) dialog,:host(.position-left.size-sm) dialog{width:20rem}:host(.position-right.size-md) dialog,:host(.position-left.size-md) dialog{width:28rem}:host(.position-right.size-lg) dialog,:host(.position-left.size-lg) dialog{width:40rem}:host(.position-right.size-full) dialog,:host(.position-left.size-full) dialog{width:100vw}:host(.position-top.size-sm) dialog,:host(.position-bottom.size-sm) dialog{height:12rem}:host(.position-top.size-md) dialog,:host(.position-bottom.size-md) dialog{height:20rem}:host(.position-top.size-lg) dialog,:host(.position-bottom.size-lg) dialog{height:32rem}:host(.position-top.size-full) dialog,:host(.position-bottom.size-full) dialog{height:100dvh}llm-drawer-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}llm-drawer-content{display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}llm-drawer-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"] }]
3455
+ }, styles: [":host(llm-drawer){display:contents}dialog{all:unset;position:fixed;display:none;flex-direction:column;background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;transition:transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;transform:translate(0)!important}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden}:host(.position-right) dialog{inset:0 0 0 auto;height:100dvh;transform:translate(100%)}@starting-style{:host(.position-right) dialog[open]{transform:translate(100%)}}:host(.position-left) dialog{inset:0 auto 0 0;height:100dvh;transform:translate(-100%)}@starting-style{:host(.position-left) dialog[open]{transform:translate(-100%)}}:host(.position-top) dialog{inset:0 0 auto;width:100vw;transform:translateY(-100%)}@starting-style{:host(.position-top) dialog[open]{transform:translateY(-100%)}}:host(.position-bottom) dialog{inset:auto 0 0;width:100vw;transform:translateY(100%)}@starting-style{:host(.position-bottom) dialog[open]{transform:translateY(100%)}}:host(.position-right.size-sm) dialog,:host(.position-left.size-sm) dialog{width:20rem}:host(.position-right.size-md) dialog,:host(.position-left.size-md) dialog{width:28rem}:host(.position-right.size-lg) dialog,:host(.position-left.size-lg) dialog{width:40rem}:host(.position-right.size-full) dialog,:host(.position-left.size-full) dialog{width:100vw}:host(.position-top.size-sm) dialog,:host(.position-bottom.size-sm) dialog{height:12rem}:host(.position-top.size-md) dialog,:host(.position-bottom.size-md) dialog{height:20rem}:host(.position-top.size-lg) dialog,:host(.position-bottom.size-lg) dialog{height:32rem}:host(.position-top.size-full) dialog,:host(.position-bottom.size-full) dialog{height:100dvh}:host(llm-drawer-header){display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}:host(llm-drawer-content){display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}:host(llm-drawer-footer){display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"] }]
3089
3456
  }], ctorParameters: () => [], propDecorators: { open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], closeOnBackdrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnBackdrop", required: false }] }], dialogRef: [{ type: i0.ViewChild, args: ['dialogEl', { isSignal: true }] }] } });
3090
3457
  /**
3091
3458
  * Header slot for `llm-drawer`. Contains the title and a close button.
@@ -3119,7 +3486,7 @@ class LlmDrawerHeader {
3119
3486
  <line x1="6" y1="6" x2="18" y2="18" />
3120
3487
  </svg>
3121
3488
  </button>
3122
- `, isInline: true, styles: ["llm-drawer{display:contents}dialog{all:unset;position:fixed;display:none;flex-direction:column;background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;transition:transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;transform:translate(0)!important}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden}:host(.position-right) dialog{inset:0 0 0 auto;height:100dvh;transform:translate(100%)}@starting-style{:host(.position-right) dialog[open]{transform:translate(100%)}}:host(.position-left) dialog{inset:0 auto 0 0;height:100dvh;transform:translate(-100%)}@starting-style{:host(.position-left) dialog[open]{transform:translate(-100%)}}:host(.position-top) dialog{inset:0 0 auto;width:100vw;transform:translateY(-100%)}@starting-style{:host(.position-top) dialog[open]{transform:translateY(-100%)}}:host(.position-bottom) dialog{inset:auto 0 0;width:100vw;transform:translateY(100%)}@starting-style{:host(.position-bottom) dialog[open]{transform:translateY(100%)}}:host(.position-right.size-sm) dialog,:host(.position-left.size-sm) dialog{width:20rem}:host(.position-right.size-md) dialog,:host(.position-left.size-md) dialog{width:28rem}:host(.position-right.size-lg) dialog,:host(.position-left.size-lg) dialog{width:40rem}:host(.position-right.size-full) dialog,:host(.position-left.size-full) dialog{width:100vw}:host(.position-top.size-sm) dialog,:host(.position-bottom.size-sm) dialog{height:12rem}:host(.position-top.size-md) dialog,:host(.position-bottom.size-md) dialog{height:20rem}:host(.position-top.size-lg) dialog,:host(.position-bottom.size-lg) dialog{height:32rem}:host(.position-top.size-full) dialog,:host(.position-bottom.size-full) dialog{height:100dvh}llm-drawer-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}llm-drawer-content{display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}llm-drawer-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3489
+ `, isInline: true, styles: [":host(llm-drawer){display:contents}dialog{all:unset;position:fixed;display:none;flex-direction:column;background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;transition:transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;transform:translate(0)!important}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden}:host(.position-right) dialog{inset:0 0 0 auto;height:100dvh;transform:translate(100%)}@starting-style{:host(.position-right) dialog[open]{transform:translate(100%)}}:host(.position-left) dialog{inset:0 auto 0 0;height:100dvh;transform:translate(-100%)}@starting-style{:host(.position-left) dialog[open]{transform:translate(-100%)}}:host(.position-top) dialog{inset:0 0 auto;width:100vw;transform:translateY(-100%)}@starting-style{:host(.position-top) dialog[open]{transform:translateY(-100%)}}:host(.position-bottom) dialog{inset:auto 0 0;width:100vw;transform:translateY(100%)}@starting-style{:host(.position-bottom) dialog[open]{transform:translateY(100%)}}:host(.position-right.size-sm) dialog,:host(.position-left.size-sm) dialog{width:20rem}:host(.position-right.size-md) dialog,:host(.position-left.size-md) dialog{width:28rem}:host(.position-right.size-lg) dialog,:host(.position-left.size-lg) dialog{width:40rem}:host(.position-right.size-full) dialog,:host(.position-left.size-full) dialog{width:100vw}:host(.position-top.size-sm) dialog,:host(.position-bottom.size-sm) dialog{height:12rem}:host(.position-top.size-md) dialog,:host(.position-bottom.size-md) dialog{height:20rem}:host(.position-top.size-lg) dialog,:host(.position-bottom.size-lg) dialog{height:32rem}:host(.position-top.size-full) dialog,:host(.position-bottom.size-full) dialog{height:100dvh}:host(llm-drawer-header){display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}:host(llm-drawer-content){display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}:host(llm-drawer-footer){display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3123
3490
  }
3124
3491
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmDrawerHeader, decorators: [{
3125
3492
  type: Component,
@@ -3150,29 +3517,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
3150
3517
  </button>
3151
3518
  `, host: {
3152
3519
  '[attr.id]': 'context.headerId',
3153
- }, styles: ["llm-drawer{display:contents}dialog{all:unset;position:fixed;display:none;flex-direction:column;background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;transition:transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;transform:translate(0)!important}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden}:host(.position-right) dialog{inset:0 0 0 auto;height:100dvh;transform:translate(100%)}@starting-style{:host(.position-right) dialog[open]{transform:translate(100%)}}:host(.position-left) dialog{inset:0 auto 0 0;height:100dvh;transform:translate(-100%)}@starting-style{:host(.position-left) dialog[open]{transform:translate(-100%)}}:host(.position-top) dialog{inset:0 0 auto;width:100vw;transform:translateY(-100%)}@starting-style{:host(.position-top) dialog[open]{transform:translateY(-100%)}}:host(.position-bottom) dialog{inset:auto 0 0;width:100vw;transform:translateY(100%)}@starting-style{:host(.position-bottom) dialog[open]{transform:translateY(100%)}}:host(.position-right.size-sm) dialog,:host(.position-left.size-sm) dialog{width:20rem}:host(.position-right.size-md) dialog,:host(.position-left.size-md) dialog{width:28rem}:host(.position-right.size-lg) dialog,:host(.position-left.size-lg) dialog{width:40rem}:host(.position-right.size-full) dialog,:host(.position-left.size-full) dialog{width:100vw}:host(.position-top.size-sm) dialog,:host(.position-bottom.size-sm) dialog{height:12rem}:host(.position-top.size-md) dialog,:host(.position-bottom.size-md) dialog{height:20rem}:host(.position-top.size-lg) dialog,:host(.position-bottom.size-lg) dialog{height:32rem}:host(.position-top.size-full) dialog,:host(.position-bottom.size-full) dialog{height:100dvh}llm-drawer-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}llm-drawer-content{display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}llm-drawer-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"] }]
3520
+ }, styles: [":host(llm-drawer){display:contents}dialog{all:unset;position:fixed;display:none;flex-direction:column;background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;transition:transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;transform:translate(0)!important}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden}:host(.position-right) dialog{inset:0 0 0 auto;height:100dvh;transform:translate(100%)}@starting-style{:host(.position-right) dialog[open]{transform:translate(100%)}}:host(.position-left) dialog{inset:0 auto 0 0;height:100dvh;transform:translate(-100%)}@starting-style{:host(.position-left) dialog[open]{transform:translate(-100%)}}:host(.position-top) dialog{inset:0 0 auto;width:100vw;transform:translateY(-100%)}@starting-style{:host(.position-top) dialog[open]{transform:translateY(-100%)}}:host(.position-bottom) dialog{inset:auto 0 0;width:100vw;transform:translateY(100%)}@starting-style{:host(.position-bottom) dialog[open]{transform:translateY(100%)}}:host(.position-right.size-sm) dialog,:host(.position-left.size-sm) dialog{width:20rem}:host(.position-right.size-md) dialog,:host(.position-left.size-md) dialog{width:28rem}:host(.position-right.size-lg) dialog,:host(.position-left.size-lg) dialog{width:40rem}:host(.position-right.size-full) dialog,:host(.position-left.size-full) dialog{width:100vw}:host(.position-top.size-sm) dialog,:host(.position-bottom.size-sm) dialog{height:12rem}:host(.position-top.size-md) dialog,:host(.position-bottom.size-md) dialog{height:20rem}:host(.position-top.size-lg) dialog,:host(.position-bottom.size-lg) dialog{height:32rem}:host(.position-top.size-full) dialog,:host(.position-bottom.size-full) dialog{height:100dvh}:host(llm-drawer-header){display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}:host(llm-drawer-content){display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}:host(llm-drawer-footer){display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"] }]
3154
3521
  }] });
3155
3522
  /**
3156
3523
  * Content slot for `llm-drawer`. Scrollable primary content area.
3157
3524
  */
3158
3525
  class LlmDrawerContent {
3159
3526
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmDrawerContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3160
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: LlmDrawerContent, isStandalone: true, selector: "llm-drawer-content", ngImport: i0, template: `<ng-content />`, isInline: true, styles: ["llm-drawer{display:contents}dialog{all:unset;position:fixed;display:none;flex-direction:column;background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;transition:transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;transform:translate(0)!important}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden}:host(.position-right) dialog{inset:0 0 0 auto;height:100dvh;transform:translate(100%)}@starting-style{:host(.position-right) dialog[open]{transform:translate(100%)}}:host(.position-left) dialog{inset:0 auto 0 0;height:100dvh;transform:translate(-100%)}@starting-style{:host(.position-left) dialog[open]{transform:translate(-100%)}}:host(.position-top) dialog{inset:0 0 auto;width:100vw;transform:translateY(-100%)}@starting-style{:host(.position-top) dialog[open]{transform:translateY(-100%)}}:host(.position-bottom) dialog{inset:auto 0 0;width:100vw;transform:translateY(100%)}@starting-style{:host(.position-bottom) dialog[open]{transform:translateY(100%)}}:host(.position-right.size-sm) dialog,:host(.position-left.size-sm) dialog{width:20rem}:host(.position-right.size-md) dialog,:host(.position-left.size-md) dialog{width:28rem}:host(.position-right.size-lg) dialog,:host(.position-left.size-lg) dialog{width:40rem}:host(.position-right.size-full) dialog,:host(.position-left.size-full) dialog{width:100vw}:host(.position-top.size-sm) dialog,:host(.position-bottom.size-sm) dialog{height:12rem}:host(.position-top.size-md) dialog,:host(.position-bottom.size-md) dialog{height:20rem}:host(.position-top.size-lg) dialog,:host(.position-bottom.size-lg) dialog{height:32rem}:host(.position-top.size-full) dialog,:host(.position-bottom.size-full) dialog{height:100dvh}llm-drawer-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}llm-drawer-content{display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}llm-drawer-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3527
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: LlmDrawerContent, isStandalone: true, selector: "llm-drawer-content", ngImport: i0, template: `<ng-content />`, isInline: true, styles: [":host(llm-drawer){display:contents}dialog{all:unset;position:fixed;display:none;flex-direction:column;background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;transition:transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;transform:translate(0)!important}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden}:host(.position-right) dialog{inset:0 0 0 auto;height:100dvh;transform:translate(100%)}@starting-style{:host(.position-right) dialog[open]{transform:translate(100%)}}:host(.position-left) dialog{inset:0 auto 0 0;height:100dvh;transform:translate(-100%)}@starting-style{:host(.position-left) dialog[open]{transform:translate(-100%)}}:host(.position-top) dialog{inset:0 0 auto;width:100vw;transform:translateY(-100%)}@starting-style{:host(.position-top) dialog[open]{transform:translateY(-100%)}}:host(.position-bottom) dialog{inset:auto 0 0;width:100vw;transform:translateY(100%)}@starting-style{:host(.position-bottom) dialog[open]{transform:translateY(100%)}}:host(.position-right.size-sm) dialog,:host(.position-left.size-sm) dialog{width:20rem}:host(.position-right.size-md) dialog,:host(.position-left.size-md) dialog{width:28rem}:host(.position-right.size-lg) dialog,:host(.position-left.size-lg) dialog{width:40rem}:host(.position-right.size-full) dialog,:host(.position-left.size-full) dialog{width:100vw}:host(.position-top.size-sm) dialog,:host(.position-bottom.size-sm) dialog{height:12rem}:host(.position-top.size-md) dialog,:host(.position-bottom.size-md) dialog{height:20rem}:host(.position-top.size-lg) dialog,:host(.position-bottom.size-lg) dialog{height:32rem}:host(.position-top.size-full) dialog,:host(.position-bottom.size-full) dialog{height:100dvh}:host(llm-drawer-header){display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}:host(llm-drawer-content){display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}:host(llm-drawer-footer){display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3161
3528
  }
3162
3529
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmDrawerContent, decorators: [{
3163
3530
  type: Component,
3164
- args: [{ selector: 'llm-drawer-content', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `<ng-content />`, styles: ["llm-drawer{display:contents}dialog{all:unset;position:fixed;display:none;flex-direction:column;background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;transition:transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;transform:translate(0)!important}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden}:host(.position-right) dialog{inset:0 0 0 auto;height:100dvh;transform:translate(100%)}@starting-style{:host(.position-right) dialog[open]{transform:translate(100%)}}:host(.position-left) dialog{inset:0 auto 0 0;height:100dvh;transform:translate(-100%)}@starting-style{:host(.position-left) dialog[open]{transform:translate(-100%)}}:host(.position-top) dialog{inset:0 0 auto;width:100vw;transform:translateY(-100%)}@starting-style{:host(.position-top) dialog[open]{transform:translateY(-100%)}}:host(.position-bottom) dialog{inset:auto 0 0;width:100vw;transform:translateY(100%)}@starting-style{:host(.position-bottom) dialog[open]{transform:translateY(100%)}}:host(.position-right.size-sm) dialog,:host(.position-left.size-sm) dialog{width:20rem}:host(.position-right.size-md) dialog,:host(.position-left.size-md) dialog{width:28rem}:host(.position-right.size-lg) dialog,:host(.position-left.size-lg) dialog{width:40rem}:host(.position-right.size-full) dialog,:host(.position-left.size-full) dialog{width:100vw}:host(.position-top.size-sm) dialog,:host(.position-bottom.size-sm) dialog{height:12rem}:host(.position-top.size-md) dialog,:host(.position-bottom.size-md) dialog{height:20rem}:host(.position-top.size-lg) dialog,:host(.position-bottom.size-lg) dialog{height:32rem}:host(.position-top.size-full) dialog,:host(.position-bottom.size-full) dialog{height:100dvh}llm-drawer-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}llm-drawer-content{display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}llm-drawer-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"] }]
3531
+ args: [{ selector: 'llm-drawer-content', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `<ng-content />`, styles: [":host(llm-drawer){display:contents}dialog{all:unset;position:fixed;display:none;flex-direction:column;background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;transition:transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;transform:translate(0)!important}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden}:host(.position-right) dialog{inset:0 0 0 auto;height:100dvh;transform:translate(100%)}@starting-style{:host(.position-right) dialog[open]{transform:translate(100%)}}:host(.position-left) dialog{inset:0 auto 0 0;height:100dvh;transform:translate(-100%)}@starting-style{:host(.position-left) dialog[open]{transform:translate(-100%)}}:host(.position-top) dialog{inset:0 0 auto;width:100vw;transform:translateY(-100%)}@starting-style{:host(.position-top) dialog[open]{transform:translateY(-100%)}}:host(.position-bottom) dialog{inset:auto 0 0;width:100vw;transform:translateY(100%)}@starting-style{:host(.position-bottom) dialog[open]{transform:translateY(100%)}}:host(.position-right.size-sm) dialog,:host(.position-left.size-sm) dialog{width:20rem}:host(.position-right.size-md) dialog,:host(.position-left.size-md) dialog{width:28rem}:host(.position-right.size-lg) dialog,:host(.position-left.size-lg) dialog{width:40rem}:host(.position-right.size-full) dialog,:host(.position-left.size-full) dialog{width:100vw}:host(.position-top.size-sm) dialog,:host(.position-bottom.size-sm) dialog{height:12rem}:host(.position-top.size-md) dialog,:host(.position-bottom.size-md) dialog{height:20rem}:host(.position-top.size-lg) dialog,:host(.position-bottom.size-lg) dialog{height:32rem}:host(.position-top.size-full) dialog,:host(.position-bottom.size-full) dialog{height:100dvh}:host(llm-drawer-header){display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}:host(llm-drawer-content){display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}:host(llm-drawer-footer){display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"] }]
3165
3532
  }] });
3166
3533
  /**
3167
3534
  * Footer slot for `llm-drawer`. Renders at the bottom with action buttons.
3168
3535
  */
3169
3536
  class LlmDrawerFooter {
3170
3537
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmDrawerFooter, deps: [], target: i0.ɵɵFactoryTarget.Component });
3171
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: LlmDrawerFooter, isStandalone: true, selector: "llm-drawer-footer", ngImport: i0, template: `<ng-content />`, isInline: true, styles: ["llm-drawer{display:contents}dialog{all:unset;position:fixed;display:none;flex-direction:column;background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;transition:transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;transform:translate(0)!important}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden}:host(.position-right) dialog{inset:0 0 0 auto;height:100dvh;transform:translate(100%)}@starting-style{:host(.position-right) dialog[open]{transform:translate(100%)}}:host(.position-left) dialog{inset:0 auto 0 0;height:100dvh;transform:translate(-100%)}@starting-style{:host(.position-left) dialog[open]{transform:translate(-100%)}}:host(.position-top) dialog{inset:0 0 auto;width:100vw;transform:translateY(-100%)}@starting-style{:host(.position-top) dialog[open]{transform:translateY(-100%)}}:host(.position-bottom) dialog{inset:auto 0 0;width:100vw;transform:translateY(100%)}@starting-style{:host(.position-bottom) dialog[open]{transform:translateY(100%)}}:host(.position-right.size-sm) dialog,:host(.position-left.size-sm) dialog{width:20rem}:host(.position-right.size-md) dialog,:host(.position-left.size-md) dialog{width:28rem}:host(.position-right.size-lg) dialog,:host(.position-left.size-lg) dialog{width:40rem}:host(.position-right.size-full) dialog,:host(.position-left.size-full) dialog{width:100vw}:host(.position-top.size-sm) dialog,:host(.position-bottom.size-sm) dialog{height:12rem}:host(.position-top.size-md) dialog,:host(.position-bottom.size-md) dialog{height:20rem}:host(.position-top.size-lg) dialog,:host(.position-bottom.size-lg) dialog{height:32rem}:host(.position-top.size-full) dialog,:host(.position-bottom.size-full) dialog{height:100dvh}llm-drawer-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}llm-drawer-content{display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}llm-drawer-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3538
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: LlmDrawerFooter, isStandalone: true, selector: "llm-drawer-footer", ngImport: i0, template: `<ng-content />`, isInline: true, styles: [":host(llm-drawer){display:contents}dialog{all:unset;position:fixed;display:none;flex-direction:column;background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;transition:transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;transform:translate(0)!important}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden}:host(.position-right) dialog{inset:0 0 0 auto;height:100dvh;transform:translate(100%)}@starting-style{:host(.position-right) dialog[open]{transform:translate(100%)}}:host(.position-left) dialog{inset:0 auto 0 0;height:100dvh;transform:translate(-100%)}@starting-style{:host(.position-left) dialog[open]{transform:translate(-100%)}}:host(.position-top) dialog{inset:0 0 auto;width:100vw;transform:translateY(-100%)}@starting-style{:host(.position-top) dialog[open]{transform:translateY(-100%)}}:host(.position-bottom) dialog{inset:auto 0 0;width:100vw;transform:translateY(100%)}@starting-style{:host(.position-bottom) dialog[open]{transform:translateY(100%)}}:host(.position-right.size-sm) dialog,:host(.position-left.size-sm) dialog{width:20rem}:host(.position-right.size-md) dialog,:host(.position-left.size-md) dialog{width:28rem}:host(.position-right.size-lg) dialog,:host(.position-left.size-lg) dialog{width:40rem}:host(.position-right.size-full) dialog,:host(.position-left.size-full) dialog{width:100vw}:host(.position-top.size-sm) dialog,:host(.position-bottom.size-sm) dialog{height:12rem}:host(.position-top.size-md) dialog,:host(.position-bottom.size-md) dialog{height:20rem}:host(.position-top.size-lg) dialog,:host(.position-bottom.size-lg) dialog{height:32rem}:host(.position-top.size-full) dialog,:host(.position-bottom.size-full) dialog{height:100dvh}:host(llm-drawer-header){display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}:host(llm-drawer-content){display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}:host(llm-drawer-footer){display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3172
3539
  }
3173
3540
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmDrawerFooter, decorators: [{
3174
3541
  type: Component,
3175
- args: [{ selector: 'llm-drawer-footer', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `<ng-content />`, styles: ["llm-drawer{display:contents}dialog{all:unset;position:fixed;display:none;flex-direction:column;background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;transition:transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;transform:translate(0)!important}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden}:host(.position-right) dialog{inset:0 0 0 auto;height:100dvh;transform:translate(100%)}@starting-style{:host(.position-right) dialog[open]{transform:translate(100%)}}:host(.position-left) dialog{inset:0 auto 0 0;height:100dvh;transform:translate(-100%)}@starting-style{:host(.position-left) dialog[open]{transform:translate(-100%)}}:host(.position-top) dialog{inset:0 0 auto;width:100vw;transform:translateY(-100%)}@starting-style{:host(.position-top) dialog[open]{transform:translateY(-100%)}}:host(.position-bottom) dialog{inset:auto 0 0;width:100vw;transform:translateY(100%)}@starting-style{:host(.position-bottom) dialog[open]{transform:translateY(100%)}}:host(.position-right.size-sm) dialog,:host(.position-left.size-sm) dialog{width:20rem}:host(.position-right.size-md) dialog,:host(.position-left.size-md) dialog{width:28rem}:host(.position-right.size-lg) dialog,:host(.position-left.size-lg) dialog{width:40rem}:host(.position-right.size-full) dialog,:host(.position-left.size-full) dialog{width:100vw}:host(.position-top.size-sm) dialog,:host(.position-bottom.size-sm) dialog{height:12rem}:host(.position-top.size-md) dialog,:host(.position-bottom.size-md) dialog{height:20rem}:host(.position-top.size-lg) dialog,:host(.position-bottom.size-lg) dialog{height:32rem}:host(.position-top.size-full) dialog,:host(.position-bottom.size-full) dialog{height:100dvh}llm-drawer-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}llm-drawer-content{display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}llm-drawer-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"] }]
3542
+ args: [{ selector: 'llm-drawer-footer', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `<ng-content />`, styles: [":host(llm-drawer){display:contents}dialog{all:unset;position:fixed;display:none;flex-direction:column;background:var(--ui-color-surface);box-shadow:var(--ui-shadow-xl, 0 20px 60px rgba(0, 0, 0, .3));color:var(--ui-color-text);overflow:hidden;transition:transform var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}dialog[open]{display:flex;transform:translate(0)!important}dialog::backdrop{background:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);transition:opacity var(--ui-duration-slow) var(--ui-ease-out, ease-out),display var(--ui-duration-slow) allow-discrete,overlay var(--ui-duration-slow) allow-discrete}@starting-style{dialog[open]::backdrop{opacity:0}}@media(prefers-color-scheme:dark){dialog::backdrop{background:#000000b3}}[data-theme=dark] dialog::backdrop{background:#000000b3}.panel{display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden}:host(.position-right) dialog{inset:0 0 0 auto;height:100dvh;transform:translate(100%)}@starting-style{:host(.position-right) dialog[open]{transform:translate(100%)}}:host(.position-left) dialog{inset:0 auto 0 0;height:100dvh;transform:translate(-100%)}@starting-style{:host(.position-left) dialog[open]{transform:translate(-100%)}}:host(.position-top) dialog{inset:0 0 auto;width:100vw;transform:translateY(-100%)}@starting-style{:host(.position-top) dialog[open]{transform:translateY(-100%)}}:host(.position-bottom) dialog{inset:auto 0 0;width:100vw;transform:translateY(100%)}@starting-style{:host(.position-bottom) dialog[open]{transform:translateY(100%)}}:host(.position-right.size-sm) dialog,:host(.position-left.size-sm) dialog{width:20rem}:host(.position-right.size-md) dialog,:host(.position-left.size-md) dialog{width:28rem}:host(.position-right.size-lg) dialog,:host(.position-left.size-lg) dialog{width:40rem}:host(.position-right.size-full) dialog,:host(.position-left.size-full) dialog{width:100vw}:host(.position-top.size-sm) dialog,:host(.position-bottom.size-sm) dialog{height:12rem}:host(.position-top.size-md) dialog,:host(.position-bottom.size-md) dialog{height:20rem}:host(.position-top.size-lg) dialog,:host(.position-bottom.size-lg) dialog{height:32rem}:host(.position-top.size-full) dialog,:host(.position-bottom.size-full) dialog{height:100dvh}:host(llm-drawer-header){display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-4) var(--ui-spacing-5);border-bottom:1px solid var(--ui-color-border);font-size:var(--ui-font-size-xl);font-weight:600;letter-spacing:var(--ui-letter-spacing-tight);color:var(--ui-color-text);flex-shrink:0}:host(llm-drawer-content){display:block;padding:var(--ui-spacing-5);overflow-y:auto;flex:1;color:var(--ui-color-text)}:host(llm-drawer-footer){display:flex;align-items:center;justify-content:flex-end;gap:var(--ui-spacing-2);padding:var(--ui-spacing-4) var(--ui-spacing-5);border-top:1px solid var(--ui-color-border);flex-shrink:0}.close-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.75rem;height:1.75rem;padding:0;margin-left:var(--ui-spacing-3);background:transparent;border:none;border-radius:var(--ui-radius-sm);cursor:pointer;color:var(--ui-color-text-muted);transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast);line-height:1}.close-btn:hover{background-color:var(--ui-color-surface-sunken);color:var(--ui-color-text)}.close-btn:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}\n"] }]
3176
3543
  }] });
3177
3544
 
3178
3545
  const LLM_TABLE = new InjectionToken('LLM_TABLE');
@@ -3225,7 +3592,7 @@ class LlmTable {
3225
3592
  <ng-content />
3226
3593
  </table>
3227
3594
  </div>
3228
- `, isInline: true, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3595
+ `, isInline: true, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text);border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-md);overflow:hidden}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}llm-table llm-tbody llm-tr:last-child td{border-bottom:none}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
3229
3596
  }
3230
3597
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmTable, decorators: [{
3231
3598
  type: Component,
@@ -3237,7 +3604,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
3237
3604
  </div>
3238
3605
  `, host: {
3239
3606
  '[class]': 'hostClasses()',
3240
- }, providers: [{ provide: LLM_TABLE, useExisting: LlmTable }], styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"] }]
3607
+ }, providers: [{ provide: LLM_TABLE, useExisting: LlmTable }], encapsulation: ViewEncapsulation.None, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text);border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-md);overflow:hidden}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}llm-table llm-tbody llm-tr:last-child td{border-bottom:none}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"] }]
3241
3608
  }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], stickyHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "stickyHeader", required: false }] }] } });
3242
3609
  // ---------------------------------------------------------------------------
3243
3610
  // LlmThead
@@ -3256,11 +3623,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
3256
3623
  */
3257
3624
  class LlmThead {
3258
3625
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmThead, deps: [], target: i0.ɵɵFactoryTarget.Component });
3259
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: LlmThead, isStandalone: true, selector: "llm-thead", ngImport: i0, template: `<thead><ng-content /></thead>`, isInline: true, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3626
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: LlmThead, isStandalone: true, selector: "llm-thead", host: { properties: { "style.display": "\"contents\"" } }, ngImport: i0, template: `<thead><ng-content /></thead>`, isInline: true, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text);border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-md);overflow:hidden}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}llm-table llm-tbody llm-tr:last-child td{border-bottom:none}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3260
3627
  }
3261
3628
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmThead, decorators: [{
3262
3629
  type: Component,
3263
- args: [{ selector: 'llm-thead', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `<thead><ng-content /></thead>`, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"] }]
3630
+ args: [{ selector: 'llm-thead', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `<thead><ng-content /></thead>`, host: { '[style.display]': '"contents"' }, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text);border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-md);overflow:hidden}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}llm-table llm-tbody llm-tr:last-child td{border-bottom:none}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"] }]
3264
3631
  }] });
3265
3632
  // ---------------------------------------------------------------------------
3266
3633
  // LlmTbody
@@ -3284,7 +3651,7 @@ class LlmTbody {
3284
3651
  /** Number of columns to span in the empty-state row. Should match total column count. */
3285
3652
  colSpan = input(1, ...(ngDevMode ? [{ debugName: "colSpan" }] : /* istanbul ignore next */ []));
3286
3653
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmTbody, deps: [], target: i0.ɵɵFactoryTarget.Component });
3287
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: LlmTbody, isStandalone: true, selector: "llm-tbody", inputs: { empty: { classPropertyName: "empty", publicName: "empty", isSignal: true, isRequired: false, transformFunction: null }, colSpan: { classPropertyName: "colSpan", publicName: "colSpan", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
3654
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: LlmTbody, isStandalone: true, selector: "llm-tbody", inputs: { empty: { classPropertyName: "empty", publicName: "empty", isSignal: true, isRequired: false, transformFunction: null }, colSpan: { classPropertyName: "colSpan", publicName: "colSpan", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.display": "\"contents\"" } }, ngImport: i0, template: `
3288
3655
  <tbody>
3289
3656
  @if (!empty()) {
3290
3657
  <ng-content />
@@ -3296,7 +3663,7 @@ class LlmTbody {
3296
3663
  </tr>
3297
3664
  }
3298
3665
  </tbody>
3299
- `, isInline: true, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3666
+ `, isInline: true, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text);border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-md);overflow:hidden}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}llm-table llm-tbody llm-tr:last-child td{border-bottom:none}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3300
3667
  }
3301
3668
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmTbody, decorators: [{
3302
3669
  type: Component,
@@ -3312,7 +3679,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
3312
3679
  </tr>
3313
3680
  }
3314
3681
  </tbody>
3315
- `, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"] }]
3682
+ `, host: { '[style.display]': '"contents"' }, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text);border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-md);overflow:hidden}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}llm-table llm-tbody llm-tr:last-child td{border-bottom:none}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"] }]
3316
3683
  }], propDecorators: { empty: [{ type: i0.Input, args: [{ isSignal: true, alias: "empty", required: false }] }], colSpan: [{ type: i0.Input, args: [{ isSignal: true, alias: "colSpan", required: false }] }] } });
3317
3684
  // ---------------------------------------------------------------------------
3318
3685
  // LlmTr
@@ -3342,7 +3709,7 @@ class LlmTr {
3342
3709
  /** @internal — applied to inner <tr> for CSS selection styling */
3343
3710
  innerClasses = computed(() => this.selected() ? 'is-selected' : '', ...(ngDevMode ? [{ debugName: "innerClasses" }] : /* istanbul ignore next */ []));
3344
3711
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmTr, deps: [], target: i0.ɵɵFactoryTarget.Component });
3345
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: LlmTr, isStandalone: true, selector: "llm-tr", inputs: { selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, rowId: { classPropertyName: "rowId", publicName: "rowId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedChange: "selectedChange" }, host: { properties: { "class": "hostClasses()" } }, ngImport: i0, template: `
3712
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: LlmTr, isStandalone: true, selector: "llm-tr", inputs: { selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, rowId: { classPropertyName: "rowId", publicName: "rowId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedChange: "selectedChange" }, host: { properties: { "class": "hostClasses()", "style.display": "\"contents\"" } }, ngImport: i0, template: `
3346
3713
  <tr
3347
3714
  [attr.aria-selected]="selectable() ? selected() : null"
3348
3715
  [class]="innerClasses()"
@@ -3354,7 +3721,7 @@ class LlmTr {
3354
3721
  }
3355
3722
  <ng-content />
3356
3723
  </tr>
3357
- `, isInline: true, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"], dependencies: [{ kind: "component", type: LlmCheckbox, selector: "llm-checkbox", inputs: ["checked", "touched", "indeterminate", "disabled", "invalid", "required", "name", "errors"], outputs: ["checkedChange", "touchedChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3724
+ `, isInline: true, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text);border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-md);overflow:hidden}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}llm-table llm-tbody llm-tr:last-child td{border-bottom:none}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"], dependencies: [{ kind: "component", type: LlmCheckbox, selector: "llm-checkbox", inputs: ["checked", "touched", "indeterminate", "disabled", "invalid", "required", "name", "errors"], outputs: ["checkedChange", "touchedChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3358
3725
  }
3359
3726
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmTr, decorators: [{
3360
3727
  type: Component,
@@ -3372,7 +3739,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
3372
3739
  </tr>
3373
3740
  `, host: {
3374
3741
  '[class]': 'hostClasses()',
3375
- }, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"] }]
3742
+ '[style.display]': '"contents"',
3743
+ }, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text);border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-md);overflow:hidden}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}llm-table llm-tbody llm-tr:last-child td{border-bottom:none}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"] }]
3376
3744
  }], propDecorators: { selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], selectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectable", required: false }] }], rowId: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowId", required: false }] }], selectedChange: [{ type: i0.Output, args: ["selectedChange"] }] } });
3377
3745
  /**
3378
3746
  * Table header cell. Set `sortable` to enable sort cycling.
@@ -3426,7 +3794,7 @@ class LlmTh {
3426
3794
  this.sort.emit(next);
3427
3795
  }
3428
3796
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmTh, deps: [], target: i0.ɵɵFactoryTarget.Component });
3429
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: LlmTh, isStandalone: true, selector: "llm-th", inputs: { sortable: { classPropertyName: "sortable", publicName: "sortable", isSignal: true, isRequired: false, transformFunction: null }, sortDirection: { classPropertyName: "sortDirection", publicName: "sortDirection", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sort: "sort" }, ngImport: i0, template: `
3797
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: LlmTh, isStandalone: true, selector: "llm-th", inputs: { sortable: { classPropertyName: "sortable", publicName: "sortable", isSignal: true, isRequired: false, transformFunction: null }, sortDirection: { classPropertyName: "sortDirection", publicName: "sortDirection", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sort: "sort" }, host: { properties: { "style.display": "\"contents\"" } }, ngImport: i0, template: `
3430
3798
  <th
3431
3799
  [attr.aria-sort]="ariaSort()"
3432
3800
  [style.width]="width() ?? null"
@@ -3451,7 +3819,7 @@ class LlmTh {
3451
3819
  <ng-content />
3452
3820
  }
3453
3821
  </th>
3454
- `, isInline: true, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3822
+ `, isInline: true, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text);border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-md);overflow:hidden}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}llm-table llm-tbody llm-tr:last-child td{border-bottom:none}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3455
3823
  }
3456
3824
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmTh, decorators: [{
3457
3825
  type: Component,
@@ -3480,7 +3848,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
3480
3848
  <ng-content />
3481
3849
  }
3482
3850
  </th>
3483
- `, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"] }]
3851
+ `, host: { '[style.display]': '"contents"' }, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text);border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-md);overflow:hidden}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}llm-table llm-tbody llm-tr:last-child td{border-bottom:none}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"] }]
3484
3852
  }], propDecorators: { sortable: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortable", required: false }] }], sortDirection: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortDirection", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], sort: [{ type: i0.Output, args: ["sort"] }] } });
3485
3853
  // ---------------------------------------------------------------------------
3486
3854
  // LlmTd
@@ -3497,11 +3865,11 @@ class LlmTd {
3497
3865
  /** Text alignment of the cell content. */
3498
3866
  align = input('start', ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
3499
3867
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmTd, deps: [], target: i0.ɵɵFactoryTarget.Component });
3500
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: LlmTd, isStandalone: true, selector: "llm-td", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
3868
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: LlmTd, isStandalone: true, selector: "llm-td", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.display": "\"contents\"" } }, ngImport: i0, template: `
3501
3869
  <td [class]="'align-' + align()">
3502
3870
  <ng-content />
3503
3871
  </td>
3504
- `, isInline: true, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3872
+ `, isInline: true, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text);border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-md);overflow:hidden}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}llm-table llm-tbody llm-tr:last-child td{border-bottom:none}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3505
3873
  }
3506
3874
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmTd, decorators: [{
3507
3875
  type: Component,
@@ -3509,9 +3877,402 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
3509
3877
  <td [class]="'align-' + align()">
3510
3878
  <ng-content />
3511
3879
  </td>
3512
- `, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text)}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"] }]
3880
+ `, host: { '[style.display]': '"contents"' }, styles: ["llm-thead,llm-tbody,llm-tr,llm-th,llm-td{display:contents}llm-table{display:block;font-family:var(--ui-font-family);color:var(--ui-color-text);border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-md);overflow:hidden}.llm-table-wrapper{width:100%;overflow-x:auto}llm-table table{width:100%;border-collapse:collapse}llm-table thead th{font-size:var(--ui-font-size-xs);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text-muted);letter-spacing:var(--ui-letter-spacing-wide);text-transform:uppercase;border-bottom:2px solid var(--ui-color-border);background-color:var(--ui-color-surface);padding:var(--ui-spacing-3) var(--ui-spacing-4);text-align:start;white-space:nowrap}llm-table tbody td{border-bottom:1px solid var(--ui-color-border);padding:var(--ui-spacing-3) var(--ui-spacing-4);vertical-align:middle;background-color:var(--ui-color-surface);transition:background-color var(--ui-transition-fast)}llm-table.size-sm thead th,llm-table.size-sm tbody td{padding:var(--ui-spacing-2) var(--ui-spacing-3);font-size:var(--ui-font-size-xs)}llm-table.size-md thead th,llm-table.size-md tbody td{padding:var(--ui-spacing-3) var(--ui-spacing-4);font-size:var(--ui-font-size-sm)}llm-table.size-lg thead th,llm-table.size-lg tbody td{padding:var(--ui-spacing-4) var(--ui-spacing-6);font-size:var(--ui-font-size-md)}llm-table.variant-striped llm-tbody llm-tr:nth-child(2n) td{background-color:var(--ui-color-surface-sunken)}llm-table.variant-bordered thead th,llm-table.variant-bordered tbody td{border:1px solid var(--ui-color-border)}th.align-start,td.align-start{text-align:start}th.align-center,td.align-center{text-align:center}th.align-end,td.align-end{text-align:end}llm-table tbody tr:hover td{background-color:var(--ui-color-surface-sunken)}llm-table tbody tr.is-selected td{background-color:var(--ui-color-primary-light)}llm-table tbody tr.is-selected:hover td{background-color:var(--ui-color-primary-light)}.llm-tr-select-cell{width:2.75rem;text-align:center}.llm-tr-select-cell llm-checkbox label{justify-content:center}llm-table.is-sticky-header thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px 0 0 var(--ui-color-border)}.llm-th-sort-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:var(--ui-spacing-2);cursor:pointer;font:inherit;color:inherit;font-weight:inherit;width:100%}.llm-th-sort-btn:focus-visible{outline:var(--ui-focus-ring);border-radius:var(--ui-radius-sm)}.llm-th-sort-icon{flex-shrink:0}.llm-th-sort-asc-arrow,.llm-th-sort-desc-arrow{opacity:.25;transition:opacity var(--ui-transition-fast)}th.is-sorted .llm-th-sort-icon{color:var(--ui-color-primary)}th.sort-asc .llm-th-sort-asc-arrow,th.sort-desc .llm-th-sort-desc-arrow{opacity:1}llm-table llm-tbody llm-tr:last-child td{border-bottom:none}.llm-tbody-empty-cell{text-align:center;padding:var(--ui-spacing-12) var(--ui-spacing-4)!important;color:var(--ui-color-text-muted);font-size:var(--ui-font-size-md);background-color:var(--ui-color-surface)!important}\n"] }]
3513
3881
  }], propDecorators: { align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }] } });
3514
3882
 
3883
+ const LLM_STEPPER = new InjectionToken('LLM_STEPPER');
3884
+
3885
+ let nextId = 0;
3886
+ /**
3887
+ * Multi-step wizard container.
3888
+ *
3889
+ * Usage:
3890
+ * ```html
3891
+ * <llm-stepper [(activeStep)]="step">
3892
+ * <llm-step label="Account">Account form here.</llm-step>
3893
+ * <llm-step label="Profile">Profile form here.</llm-step>
3894
+ * <llm-step label="Review">Review and submit.</llm-step>
3895
+ * </llm-stepper>
3896
+ * ```
3897
+ */
3898
+ class LlmStepper {
3899
+ /** Index of the currently active step. Supports two-way binding. */
3900
+ activeStep = model(0, ...(ngDevMode ? [{ debugName: "activeStep" }] : /* istanbul ignore next */ []));
3901
+ /** Layout orientation. */
3902
+ orientation = input('horizontal', ...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
3903
+ /**
3904
+ * When true, users can only navigate to completed steps or the next pending step.
3905
+ * Use `goTo()` / `next()` in your step content to advance programmatically.
3906
+ */
3907
+ linear = input(false, ...(ngDevMode ? [{ debugName: "linear" }] : /* istanbul ignore next */ []));
3908
+ /** @internal */
3909
+ steps = signal([], ...(ngDevMode ? [{ debugName: "steps" }] : /* istanbul ignore next */ []));
3910
+ /** @internal */
3911
+ hostClasses = computed(() => `orientation-${this.orientation()}`, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
3912
+ /** @internal — called by LlmStep on init */
3913
+ registerStep(info) {
3914
+ this.steps.update((list) => [...list, info]);
3915
+ }
3916
+ /** @internal — called by LlmStep on destroy */
3917
+ unregisterStep(id) {
3918
+ this.steps.update((list) => list.filter((s) => s.id !== id));
3919
+ }
3920
+ /** @internal — called by LlmStep effect when inputs change */
3921
+ updateStep(id, info) {
3922
+ this.steps.update((list) => list.map((s) => (s.id === id ? { ...s, ...info } : s)));
3923
+ }
3924
+ /** Navigate to a specific step index. Respects linear mode. */
3925
+ goTo(index) {
3926
+ const steps = this.steps();
3927
+ if (index < 0 || index >= steps.length)
3928
+ return;
3929
+ if (steps[index].disabled)
3930
+ return;
3931
+ if (this.linear()) {
3932
+ // In linear mode, only allow going back or to the next uncompleted step
3933
+ const canGoForward = steps.slice(0, index).every((s) => s.completed || s.optional);
3934
+ if (index > this.activeStep() && !canGoForward)
3935
+ return;
3936
+ }
3937
+ this.activeStep.set(index);
3938
+ }
3939
+ /** Advance to the next step. */
3940
+ next() {
3941
+ this.goTo(this.activeStep() + 1);
3942
+ }
3943
+ /** Go back to the previous step. */
3944
+ prev() {
3945
+ const prev = this.activeStep() - 1;
3946
+ if (prev < 0)
3947
+ return;
3948
+ const steps = this.steps();
3949
+ if (steps[prev]?.disabled)
3950
+ return;
3951
+ this.activeStep.set(prev);
3952
+ }
3953
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmStepper, deps: [], target: i0.ɵɵFactoryTarget.Component });
3954
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: LlmStepper, isStandalone: true, selector: "llm-stepper", inputs: { activeStep: { classPropertyName: "activeStep", publicName: "activeStep", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, linear: { classPropertyName: "linear", publicName: "linear", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeStep: "activeStepChange" }, host: { properties: { "class": "hostClasses()" } }, providers: [{ provide: LLM_STEPPER, useExisting: LlmStepper }], ngImport: i0, template: `
3955
+ <div class="stepper-header" role="tablist">
3956
+ @for (step of steps(); track step.id; let i = $index; let last = $last) {
3957
+ <div
3958
+ class="step-item"
3959
+ [class.is-active]="activeStep() === i"
3960
+ [class.is-completed]="step.completed && activeStep() !== i"
3961
+ [class.is-error]="step.error"
3962
+ [class.is-disabled]="step.disabled"
3963
+ >
3964
+ <button
3965
+ type="button"
3966
+ role="tab"
3967
+ class="step-circle"
3968
+ [id]="'llm-step-' + i"
3969
+ [attr.aria-label]="step.label"
3970
+ [attr.aria-selected]="activeStep() === i"
3971
+ [attr.aria-controls]="'llm-step-panel-' + i"
3972
+ [attr.aria-disabled]="step.disabled || null"
3973
+ [attr.tabindex]="activeStep() === i ? 0 : -1"
3974
+ [disabled]="step.disabled || null"
3975
+ (click)="goTo(i)"
3976
+ >
3977
+ @if (step.completed && !step.error) {
3978
+ <svg width="14" height="14" viewBox="0 0 14 14" fill="none" aria-hidden="true">
3979
+ <path d="M2 7L5.5 10.5L12 3.5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3980
+ </svg>
3981
+ } @else if (step.error) {
3982
+ <svg width="14" height="14" viewBox="0 0 14 14" fill="none" aria-hidden="true">
3983
+ <path d="M3 3L11 11M11 3L3 11" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
3984
+ </svg>
3985
+ } @else {
3986
+ {{ i + 1 }}
3987
+ }
3988
+ </button>
3989
+ <div class="step-text">
3990
+ <span class="step-label">{{ step.label }}</span>
3991
+ @if (step.description) {
3992
+ <span class="step-description">{{ step.description }}</span>
3993
+ }
3994
+ @if (step.optional && !step.completed) {
3995
+ <span class="step-optional">Optional</span>
3996
+ }
3997
+ </div>
3998
+ </div>
3999
+ @if (!last) {
4000
+ <div
4001
+ class="step-connector"
4002
+ [class.is-active]="activeStep() > i || step.completed"
4003
+ ></div>
4004
+ }
4005
+ }
4006
+ </div>
4007
+ <div class="stepper-content">
4008
+ <ng-content />
4009
+ </div>
4010
+ `, isInline: true, styles: [":host{display:block;font-family:var(--ui-font-family)}.stepper-header{display:flex;align-items:center}.step-item{display:flex;flex-direction:column;align-items:center;min-width:0}.step-connector{flex:1;height:2px;background:var(--ui-color-border);transition:background var(--ui-transition-fast);min-width:var(--ui-spacing-4)}.step-connector.is-active{background:var(--ui-color-primary)}.step-circle{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;border:2px solid var(--ui-color-border);background:var(--ui-color-surface);color:var(--ui-color-text-muted);font-size:var(--ui-font-size-sm);font-weight:var(--ui-font-weight-semibold);cursor:pointer;transition:var(--ui-transition-fast);transition-property:border-color,background-color,color,box-shadow;-webkit-user-select:none;user-select:none;flex-shrink:0}.step-circle:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}.step-circle[disabled]{cursor:not-allowed}.step-text{display:flex;flex-direction:column;align-items:center;margin-top:var(--ui-spacing-2);text-align:center}.step-label{font-size:var(--ui-font-size-sm);font-weight:var(--ui-font-weight-medium);color:var(--ui-color-text-muted);white-space:nowrap}.step-description{font-size:var(--ui-font-size-xs);color:var(--ui-color-text-muted);margin-top:2px}.step-optional{font-size:var(--ui-font-size-xs);color:var(--ui-color-text-muted);font-style:italic;margin-top:2px}.stepper-content{margin-top:var(--ui-spacing-6)}.step-item.is-active .step-circle{border-color:var(--ui-color-primary);color:var(--ui-color-primary)}.step-item.is-active .step-label{color:var(--ui-color-text)}.step-item.is-completed .step-circle{border-color:var(--ui-color-primary);background:var(--ui-color-primary);color:var(--ui-color-on-primary)}.step-item.is-completed .step-label{color:var(--ui-color-text)}.step-item.is-error .step-circle{border-color:var(--ui-color-danger);background:var(--ui-color-danger);color:var(--ui-color-text-on-danger, #ffffff)}.step-item.is-error .step-label{color:var(--ui-color-danger)}.step-item.is-disabled .step-circle{opacity:var(--ui-opacity-disabled);cursor:not-allowed}.step-item.is-disabled .step-label{opacity:var(--ui-opacity-disabled)}:host(.orientation-vertical) .stepper-header{flex-direction:column;align-items:stretch}:host(.orientation-vertical) .step-item{flex-direction:row;align-items:flex-start;gap:var(--ui-spacing-3)}:host(.orientation-vertical) .step-text{align-items:flex-start;text-align:left;margin-top:0;padding-top:var(--ui-spacing-1)}:host(.orientation-vertical) .step-connector{flex:none;width:2px;height:var(--ui-spacing-6);margin-left:15px;min-width:0;align-self:auto}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4011
+ }
4012
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmStepper, decorators: [{
4013
+ type: Component,
4014
+ args: [{ selector: 'llm-stepper', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
4015
+ <div class="stepper-header" role="tablist">
4016
+ @for (step of steps(); track step.id; let i = $index; let last = $last) {
4017
+ <div
4018
+ class="step-item"
4019
+ [class.is-active]="activeStep() === i"
4020
+ [class.is-completed]="step.completed && activeStep() !== i"
4021
+ [class.is-error]="step.error"
4022
+ [class.is-disabled]="step.disabled"
4023
+ >
4024
+ <button
4025
+ type="button"
4026
+ role="tab"
4027
+ class="step-circle"
4028
+ [id]="'llm-step-' + i"
4029
+ [attr.aria-label]="step.label"
4030
+ [attr.aria-selected]="activeStep() === i"
4031
+ [attr.aria-controls]="'llm-step-panel-' + i"
4032
+ [attr.aria-disabled]="step.disabled || null"
4033
+ [attr.tabindex]="activeStep() === i ? 0 : -1"
4034
+ [disabled]="step.disabled || null"
4035
+ (click)="goTo(i)"
4036
+ >
4037
+ @if (step.completed && !step.error) {
4038
+ <svg width="14" height="14" viewBox="0 0 14 14" fill="none" aria-hidden="true">
4039
+ <path d="M2 7L5.5 10.5L12 3.5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
4040
+ </svg>
4041
+ } @else if (step.error) {
4042
+ <svg width="14" height="14" viewBox="0 0 14 14" fill="none" aria-hidden="true">
4043
+ <path d="M3 3L11 11M11 3L3 11" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
4044
+ </svg>
4045
+ } @else {
4046
+ {{ i + 1 }}
4047
+ }
4048
+ </button>
4049
+ <div class="step-text">
4050
+ <span class="step-label">{{ step.label }}</span>
4051
+ @if (step.description) {
4052
+ <span class="step-description">{{ step.description }}</span>
4053
+ }
4054
+ @if (step.optional && !step.completed) {
4055
+ <span class="step-optional">Optional</span>
4056
+ }
4057
+ </div>
4058
+ </div>
4059
+ @if (!last) {
4060
+ <div
4061
+ class="step-connector"
4062
+ [class.is-active]="activeStep() > i || step.completed"
4063
+ ></div>
4064
+ }
4065
+ }
4066
+ </div>
4067
+ <div class="stepper-content">
4068
+ <ng-content />
4069
+ </div>
4070
+ `, host: {
4071
+ '[class]': 'hostClasses()',
4072
+ }, providers: [{ provide: LLM_STEPPER, useExisting: LlmStepper }], styles: [":host{display:block;font-family:var(--ui-font-family)}.stepper-header{display:flex;align-items:center}.step-item{display:flex;flex-direction:column;align-items:center;min-width:0}.step-connector{flex:1;height:2px;background:var(--ui-color-border);transition:background var(--ui-transition-fast);min-width:var(--ui-spacing-4)}.step-connector.is-active{background:var(--ui-color-primary)}.step-circle{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;border:2px solid var(--ui-color-border);background:var(--ui-color-surface);color:var(--ui-color-text-muted);font-size:var(--ui-font-size-sm);font-weight:var(--ui-font-weight-semibold);cursor:pointer;transition:var(--ui-transition-fast);transition-property:border-color,background-color,color,box-shadow;-webkit-user-select:none;user-select:none;flex-shrink:0}.step-circle:focus-visible{outline:none;box-shadow:var(--ui-focus-ring)}.step-circle[disabled]{cursor:not-allowed}.step-text{display:flex;flex-direction:column;align-items:center;margin-top:var(--ui-spacing-2);text-align:center}.step-label{font-size:var(--ui-font-size-sm);font-weight:var(--ui-font-weight-medium);color:var(--ui-color-text-muted);white-space:nowrap}.step-description{font-size:var(--ui-font-size-xs);color:var(--ui-color-text-muted);margin-top:2px}.step-optional{font-size:var(--ui-font-size-xs);color:var(--ui-color-text-muted);font-style:italic;margin-top:2px}.stepper-content{margin-top:var(--ui-spacing-6)}.step-item.is-active .step-circle{border-color:var(--ui-color-primary);color:var(--ui-color-primary)}.step-item.is-active .step-label{color:var(--ui-color-text)}.step-item.is-completed .step-circle{border-color:var(--ui-color-primary);background:var(--ui-color-primary);color:var(--ui-color-on-primary)}.step-item.is-completed .step-label{color:var(--ui-color-text)}.step-item.is-error .step-circle{border-color:var(--ui-color-danger);background:var(--ui-color-danger);color:var(--ui-color-text-on-danger, #ffffff)}.step-item.is-error .step-label{color:var(--ui-color-danger)}.step-item.is-disabled .step-circle{opacity:var(--ui-opacity-disabled);cursor:not-allowed}.step-item.is-disabled .step-label{opacity:var(--ui-opacity-disabled)}:host(.orientation-vertical) .stepper-header{flex-direction:column;align-items:stretch}:host(.orientation-vertical) .step-item{flex-direction:row;align-items:flex-start;gap:var(--ui-spacing-3)}:host(.orientation-vertical) .step-text{align-items:flex-start;text-align:left;margin-top:0;padding-top:var(--ui-spacing-1)}:host(.orientation-vertical) .step-connector{flex:none;width:2px;height:var(--ui-spacing-6);margin-left:15px;min-width:0;align-self:auto}\n"] }]
4073
+ }], propDecorators: { activeStep: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeStep", required: false }] }, { type: i0.Output, args: ["activeStepChange"] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], linear: [{ type: i0.Input, args: [{ isSignal: true, alias: "linear", required: false }] }] } });
4074
+ /**
4075
+ * Individual step. Place inside `<llm-stepper>`.
4076
+ *
4077
+ * Usage:
4078
+ * ```html
4079
+ * <llm-step label="Account">Account form here.</llm-step>
4080
+ * ```
4081
+ */
4082
+ class LlmStep {
4083
+ /** Text displayed on the step indicator. Required. */
4084
+ label = input.required(...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
4085
+ /** Optional subtitle shown below the label. */
4086
+ description = input(undefined, ...(ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []));
4087
+ /** Mark this step as completed (shows a checkmark). */
4088
+ completed = input(false, ...(ngDevMode ? [{ debugName: "completed" }] : /* istanbul ignore next */ []));
4089
+ /** Mark this step as having an error (shows an X). */
4090
+ error = input(false, ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
4091
+ /** Mark this step as optional. */
4092
+ optional = input(false, ...(ngDevMode ? [{ debugName: "optional" }] : /* istanbul ignore next */ []));
4093
+ /** Whether this step is disabled. */
4094
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
4095
+ /** @internal */
4096
+ id = `llm-step-instance-${nextId++}`;
4097
+ /** @internal */
4098
+ context = inject(LLM_STEPPER);
4099
+ /** @internal */
4100
+ myIndex = computed(() => this.context.steps().findIndex((s) => s.id === this.id), ...(ngDevMode ? [{ debugName: "myIndex" }] : /* istanbul ignore next */ []));
4101
+ /** @internal */
4102
+ isActive = computed(() => this.context.activeStep() === this.myIndex(), ...(ngDevMode ? [{ debugName: "isActive" }] : /* istanbul ignore next */ []));
4103
+ constructor() {
4104
+ // Keep step info in sync when inputs change
4105
+ effect(() => {
4106
+ if (this.myIndex() === -1)
4107
+ return;
4108
+ this.context.updateStep(this.id, {
4109
+ label: this.label(),
4110
+ description: this.description(),
4111
+ completed: this.completed(),
4112
+ error: this.error(),
4113
+ optional: this.optional(),
4114
+ disabled: this.disabled(),
4115
+ });
4116
+ });
4117
+ }
4118
+ ngOnInit() {
4119
+ this.context.registerStep({
4120
+ id: this.id,
4121
+ label: this.label(),
4122
+ description: this.description(),
4123
+ completed: this.completed(),
4124
+ error: this.error(),
4125
+ optional: this.optional(),
4126
+ disabled: this.disabled(),
4127
+ });
4128
+ }
4129
+ ngOnDestroy() {
4130
+ this.context.unregisterStep(this.id);
4131
+ }
4132
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmStep, deps: [], target: i0.ɵɵFactoryTarget.Component });
4133
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: LlmStep, isStandalone: true, selector: "llm-step", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, completed: { classPropertyName: "completed", publicName: "completed", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, optional: { classPropertyName: "optional", publicName: "optional", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
4134
+ @if (isActive()) {
4135
+ <div
4136
+ role="tabpanel"
4137
+ [id]="'llm-step-panel-' + myIndex()"
4138
+ [attr.aria-labelledby]="'llm-step-' + myIndex()"
4139
+ tabindex="0"
4140
+ >
4141
+ <ng-content />
4142
+ </div>
4143
+ }
4144
+ `, isInline: true, styles: [":host{display:contents}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4145
+ }
4146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmStep, decorators: [{
4147
+ type: Component,
4148
+ args: [{ selector: 'llm-step', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
4149
+ @if (isActive()) {
4150
+ <div
4151
+ role="tabpanel"
4152
+ [id]="'llm-step-panel-' + myIndex()"
4153
+ [attr.aria-labelledby]="'llm-step-' + myIndex()"
4154
+ tabindex="0"
4155
+ >
4156
+ <ng-content />
4157
+ </div>
4158
+ }
4159
+ `, styles: [":host{display:contents}\n"] }]
4160
+ }], ctorParameters: () => [], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], completed: [{ type: i0.Input, args: [{ isSignal: true, alias: "completed", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], optional: [{ type: i0.Input, args: [{ isSignal: true, alias: "optional", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
4161
+
4162
+ /**
4163
+ * Displays a block of code with an optional header, language label, and copy button.
4164
+ * Designed for rendering LLM-generated code output, inline snippets, and API examples.
4165
+ *
4166
+ * Usage:
4167
+ * ```html
4168
+ * <llm-code-block code="const x = 1;" language="typescript" />
4169
+ * <llm-code-block [code]="generatedCode" filename="app.component.ts" [showLineNumbers]="true" />
4170
+ * ```
4171
+ */
4172
+ class LlmCodeBlock {
4173
+ /** The code string to display. */
4174
+ code = input('', ...(ngDevMode ? [{ debugName: "code" }] : /* istanbul ignore next */ []));
4175
+ /** Language label shown in the header. Ignored if filename is set. */
4176
+ language = input('text', ...(ngDevMode ? [{ debugName: "language" }] : /* istanbul ignore next */ []));
4177
+ /** Optional filename shown in the header instead of the language label. */
4178
+ filename = input('', ...(ngDevMode ? [{ debugName: "filename" }] : /* istanbul ignore next */ []));
4179
+ /** Whether to show a copy-to-clipboard button. */
4180
+ copyable = input(true, ...(ngDevMode ? [{ debugName: "copyable" }] : /* istanbul ignore next */ []));
4181
+ /** Whether to display line numbers alongside the code. */
4182
+ showLineNumbers = input(false, ...(ngDevMode ? [{ debugName: "showLineNumbers" }] : /* istanbul ignore next */ []));
4183
+ copied = signal(false, ...(ngDevMode ? [{ debugName: "copied" }] : /* istanbul ignore next */ []));
4184
+ displayLabel = computed(() => this.filename() || this.language(), ...(ngDevMode ? [{ debugName: "displayLabel" }] : /* istanbul ignore next */ []));
4185
+ lines = computed(() => this.code().split('\n'), ...(ngDevMode ? [{ debugName: "lines" }] : /* istanbul ignore next */ []));
4186
+ copy() {
4187
+ void navigator.clipboard.writeText(this.code()).then(() => {
4188
+ this.copied.set(true);
4189
+ setTimeout(() => this.copied.set(false), 1800);
4190
+ });
4191
+ }
4192
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmCodeBlock, deps: [], target: i0.ɵɵFactoryTarget.Component });
4193
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: LlmCodeBlock, isStandalone: true, selector: "llm-code-block", inputs: { code: { classPropertyName: "code", publicName: "code", isSignal: true, isRequired: false, transformFunction: null }, language: { classPropertyName: "language", publicName: "language", isSignal: true, isRequired: false, transformFunction: null }, filename: { classPropertyName: "filename", publicName: "filename", isSignal: true, isRequired: false, transformFunction: null }, copyable: { classPropertyName: "copyable", publicName: "copyable", isSignal: true, isRequired: false, transformFunction: null }, showLineNumbers: { classPropertyName: "showLineNumbers", publicName: "showLineNumbers", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "\"llm-code-block\"" } }, ngImport: i0, template: `
4194
+ <div class="code-block-header">
4195
+ <span class="code-block-label">{{ displayLabel() }}</span>
4196
+ @if (copyable()) {
4197
+ <button
4198
+ class="code-block-copy"
4199
+ type="button"
4200
+ [attr.aria-label]="copied() ? 'Copied' : 'Copy code'"
4201
+ (click)="copy()"
4202
+ >
4203
+ @if (copied()) {
4204
+ <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
4205
+ <polyline points="20 6 9 17 4 12" />
4206
+ </svg>
4207
+ Copied
4208
+ } @else {
4209
+ <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
4210
+ <rect x="9" y="9" width="13" height="13" rx="2" ry="2" />
4211
+ <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" />
4212
+ </svg>
4213
+ Copy
4214
+ }
4215
+ </button>
4216
+ }
4217
+ </div>
4218
+ <div class="code-block-body">
4219
+ <pre class="code-block-pre"><code>@if (showLineNumbers()) {
4220
+ @for (line of lines(); track $index) {
4221
+ <span class="code-line">
4222
+ <span class="code-line-number">{{ $index + 1 }}</span>
4223
+ <span class="code-line-text">{{ line }}</span>
4224
+ </span>
4225
+ }
4226
+ } @else {
4227
+ {{ code() }}
4228
+ }</code></pre>
4229
+ </div>
4230
+ `, isInline: true, styles: [":host{display:block;border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-md);overflow:hidden;font-family:var(--ui-font-family)}.code-block-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-2) var(--ui-spacing-3);background:var(--ui-color-surface-raised);border-bottom:1px solid var(--ui-color-border);min-height:2.25rem}.code-block-label{font-family:var(--ui-font-mono, \"Menlo\", \"Monaco\", \"Courier New\", monospace);font-size:.72rem;font-weight:600;letter-spacing:.03em;color:var(--ui-color-text-muted);text-transform:lowercase;-webkit-user-select:none;user-select:none}.code-block-copy{display:inline-flex;align-items:center;gap:.3rem;padding:.2rem .55rem;border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-sm);background:transparent;color:var(--ui-color-text-muted);font-family:inherit;font-size:.72rem;font-weight:500;cursor:pointer;transition:color var(--ui-transition-fast),background var(--ui-transition-fast),border-color var(--ui-transition-fast);white-space:nowrap}.code-block-copy:hover{color:var(--ui-color-text);background:var(--ui-color-surface);border-color:var(--ui-color-input-border)}.code-block-copy:focus-visible{outline:var(--ui-focus-ring);outline-offset:2px}.code-block-body{background:var(--ui-color-surface);overflow-x:auto}.code-block-pre{margin:0;padding:var(--ui-spacing-4);font-family:var(--ui-font-mono, \"Menlo\", \"Monaco\", \"Courier New\", monospace);font-size:var(--ui-font-size-sm);line-height:1.65;color:var(--ui-color-text);white-space:pre;tab-size:2}.code-line{display:flex}.code-line-number{display:inline-block;min-width:2rem;padding-right:var(--ui-spacing-3);color:var(--ui-color-text-muted);text-align:right;-webkit-user-select:none;user-select:none;border-right:1px solid var(--ui-color-border);margin-right:var(--ui-spacing-3);flex-shrink:0;opacity:.6}.code-line-text{flex:1}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4231
+ }
4232
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LlmCodeBlock, decorators: [{
4233
+ type: Component,
4234
+ args: [{ selector: 'llm-code-block', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
4235
+ <div class="code-block-header">
4236
+ <span class="code-block-label">{{ displayLabel() }}</span>
4237
+ @if (copyable()) {
4238
+ <button
4239
+ class="code-block-copy"
4240
+ type="button"
4241
+ [attr.aria-label]="copied() ? 'Copied' : 'Copy code'"
4242
+ (click)="copy()"
4243
+ >
4244
+ @if (copied()) {
4245
+ <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
4246
+ <polyline points="20 6 9 17 4 12" />
4247
+ </svg>
4248
+ Copied
4249
+ } @else {
4250
+ <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
4251
+ <rect x="9" y="9" width="13" height="13" rx="2" ry="2" />
4252
+ <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" />
4253
+ </svg>
4254
+ Copy
4255
+ }
4256
+ </button>
4257
+ }
4258
+ </div>
4259
+ <div class="code-block-body">
4260
+ <pre class="code-block-pre"><code>@if (showLineNumbers()) {
4261
+ @for (line of lines(); track $index) {
4262
+ <span class="code-line">
4263
+ <span class="code-line-number">{{ $index + 1 }}</span>
4264
+ <span class="code-line-text">{{ line }}</span>
4265
+ </span>
4266
+ }
4267
+ } @else {
4268
+ {{ code() }}
4269
+ }</code></pre>
4270
+ </div>
4271
+ `, host: {
4272
+ '[class]': '"llm-code-block"',
4273
+ }, styles: [":host{display:block;border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-md);overflow:hidden;font-family:var(--ui-font-family)}.code-block-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ui-spacing-2) var(--ui-spacing-3);background:var(--ui-color-surface-raised);border-bottom:1px solid var(--ui-color-border);min-height:2.25rem}.code-block-label{font-family:var(--ui-font-mono, \"Menlo\", \"Monaco\", \"Courier New\", monospace);font-size:.72rem;font-weight:600;letter-spacing:.03em;color:var(--ui-color-text-muted);text-transform:lowercase;-webkit-user-select:none;user-select:none}.code-block-copy{display:inline-flex;align-items:center;gap:.3rem;padding:.2rem .55rem;border:1px solid var(--ui-color-border);border-radius:var(--ui-radius-sm);background:transparent;color:var(--ui-color-text-muted);font-family:inherit;font-size:.72rem;font-weight:500;cursor:pointer;transition:color var(--ui-transition-fast),background var(--ui-transition-fast),border-color var(--ui-transition-fast);white-space:nowrap}.code-block-copy:hover{color:var(--ui-color-text);background:var(--ui-color-surface);border-color:var(--ui-color-input-border)}.code-block-copy:focus-visible{outline:var(--ui-focus-ring);outline-offset:2px}.code-block-body{background:var(--ui-color-surface);overflow-x:auto}.code-block-pre{margin:0;padding:var(--ui-spacing-4);font-family:var(--ui-font-mono, \"Menlo\", \"Monaco\", \"Courier New\", monospace);font-size:var(--ui-font-size-sm);line-height:1.65;color:var(--ui-color-text);white-space:pre;tab-size:2}.code-line{display:flex}.code-line-number{display:inline-block;min-width:2rem;padding-right:var(--ui-spacing-3);color:var(--ui-color-text-muted);text-align:right;-webkit-user-select:none;user-select:none;border-right:1px solid var(--ui-color-border);margin-right:var(--ui-spacing-3);flex-shrink:0;opacity:.6}.code-line-text{flex:1}\n"] }]
4274
+ }], propDecorators: { code: [{ type: i0.Input, args: [{ isSignal: true, alias: "code", required: false }] }], language: [{ type: i0.Input, args: [{ isSignal: true, alias: "language", required: false }] }], filename: [{ type: i0.Input, args: [{ isSignal: true, alias: "filename", required: false }] }], copyable: [{ type: i0.Input, args: [{ isSignal: true, alias: "copyable", required: false }] }], showLineNumbers: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLineNumbers", required: false }] }] } });
4275
+
3515
4276
  // Design tokens stylesheet — consumers should import:
3516
4277
  // @import '@atelier-ui/angular/styles/tokens.css';
3517
4278
 
@@ -3519,5 +4280,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
3519
4280
  * Generated bundle index. Do not edit.
3520
4281
  */
3521
4282
 
3522
- export { LLM_ACCORDION_GROUP, LLM_BREADCRUMBS, LLM_DIALOG, LLM_DRAWER, LLM_RADIO_GROUP, LLM_SELECT, LLM_TABLE, LLM_TAB_GROUP, LlmAccordionGroup, LlmAccordionHeader, LlmAccordionItem, LlmAlert, LlmAvatar, LlmAvatarGroup, LlmBadge, LlmBreadcrumbItem, LlmBreadcrumbs, LlmButton, LlmCard, LlmCardContent, LlmCardFooter, LlmCardHeader, LlmCheckbox, LlmDialog, LlmDialogContent, LlmDialogFooter, LlmDialogHeader, LlmDrawer, LlmDrawerContent, LlmDrawerFooter, LlmDrawerHeader, LlmInput, LlmMenu, LlmMenuItem, LlmMenuSeparator, LlmMenuTrigger, LlmOption, LlmPagination, LlmProgress, LlmRadio, LlmRadioGroup, LlmSelect, LlmSkeleton, LlmTab, LlmTabGroup, LlmTable, LlmTbody, LlmTd, LlmTextarea, LlmTh, LlmThead, LlmToast, LlmToastContainer, LlmToastService, LlmToggle, LlmTooltip, LlmTr };
4283
+ export { LLM_ACCORDION_GROUP, LLM_BREADCRUMBS, LLM_DIALOG, LLM_DRAWER, LLM_RADIO_GROUP, LLM_SELECT, LLM_STEPPER, LLM_TABLE, LLM_TAB_GROUP, LlmAccordionGroup, LlmAccordionHeader, LlmAccordionItem, LlmAlert, LlmAvatar, LlmAvatarGroup, LlmBadge, LlmBreadcrumbItem, LlmBreadcrumbs, LlmButton, LlmCard, LlmCardContent, LlmCardFooter, LlmCardHeader, LlmCheckbox, LlmCodeBlock, LlmCombobox, LlmDialog, LlmDialogContent, LlmDialogFooter, LlmDialogHeader, LlmDrawer, LlmDrawerContent, LlmDrawerFooter, LlmDrawerHeader, LlmInput, LlmMenu, LlmMenuItem, LlmMenuSeparator, LlmMenuTrigger, LlmOption, LlmPagination, LlmProgress, LlmRadio, LlmRadioGroup, LlmSelect, LlmSkeleton, LlmStep, LlmStepper, LlmTab, LlmTabGroup, LlmTable, LlmTbody, LlmTd, LlmTextarea, LlmTh, LlmThead, LlmToast, LlmToastContainer, LlmToastService, LlmToggle, LlmTooltip, LlmTr };
3523
4284
  //# sourceMappingURL=atelier-ui-angular.mjs.map