c3-components 0.15.0 → 0.15.2

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,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, signal, viewChild, TemplateRef, inject, ChangeDetectorRef, effect, Component, forwardRef, model, HostListener, Directive, NgModule, Inject, Injector, Injectable, Pipe, output, ViewEncapsulation, Optional, computed, InjectionToken, contentChild, contentChildren, ViewContainerRef, HostBinding, ElementRef, DestroyRef } from '@angular/core';
2
+ import { input, signal, viewChild, TemplateRef, inject, ChangeDetectorRef, effect, Component, forwardRef, model, HostListener, Directive, NgModule, Inject, ViewContainerRef, Injector, Injectable, Pipe, output, ViewEncapsulation, Optional, computed, InjectionToken, contentChild, contentChildren, HostBinding, ElementRef, DestroyRef } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import * as i2 from '@angular/forms';
@@ -380,14 +380,21 @@ class C3DialogEmbedChildComponent {
380
380
  this.dialogRef = dialogRef;
381
381
  this.data = data;
382
382
  this._cdr = _cdr;
383
- this.target = viewChild.required('target');
383
+ this.target = viewChild('target', ...(ngDevMode ? [{ debugName: "target", read: ViewContainerRef }] : [{
384
+ read: ViewContainerRef,
385
+ }]));
384
386
  // On utilise un signal pour stocker la référence du composant créé
385
387
  this.createdComponent = signal(null, ...(ngDevMode ? [{ debugName: "createdComponent" }] : []));
386
388
  }
387
389
  ngAfterViewInit() {
388
390
  // Si on a un composant, on le crée dynamiquement
389
391
  if (this.data.component && !this.data.templateRef) {
390
- const compRef = this.target().createComponent(this.data.component);
392
+ const targetRef = this.target();
393
+ if (!targetRef) {
394
+ console.error('ViewContainerRef not found');
395
+ return;
396
+ }
397
+ const compRef = targetRef.createComponent(this.data.component);
391
398
  this.createdComponent.set(compRef);
392
399
  // Injecter les inputs dans le composant
393
400
  if (this.data.inputs) {
@@ -432,7 +439,7 @@ class C3DialogEmbedChildComponent {
432
439
  }
433
440
  }
434
441
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3DialogEmbedChildComponent, deps: [{ token: i1$2.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
435
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.14", type: C3DialogEmbedChildComponent, isStandalone: false, selector: "C3DialogEmbedChildComponent", viewQueries: [{ propertyName: "target", first: true, predicate: ["target"], descendants: true, isSignal: true }], ngImport: i0, template: `
442
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.14", type: C3DialogEmbedChildComponent, isStandalone: false, selector: "C3DialogEmbedChildComponent", viewQueries: [{ propertyName: "target", first: true, predicate: ["target"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: `
436
443
  <div [class]="'dialog-content-container ' + (data.classContainer || '')">
437
444
  @if (data.toolbar) {
438
445
  <mat-toolbar [color]="data.toolbar.color || 'default'" class="py-1">
@@ -445,17 +452,17 @@ class C3DialogEmbedChildComponent {
445
452
  }
446
453
  </mat-toolbar>
447
454
  }
448
-
455
+
449
456
  <div [class]="'dialog-content ' + (data.classContent || '')">
450
457
  <!-- Si templateRef est présent, on l'affiche directement,
451
458
  sinon on laisse la place au composant dynamique -->
452
459
  @if (data.templateRef) {
453
460
  <ng-container *ngTemplateOutlet="data.templateRef"></ng-container>
454
461
  } @else {
455
- <ng-template #target></ng-template>
462
+ <ng-container #target></ng-container>
456
463
  }
457
464
  </div>
458
-
465
+
459
466
  @if (data.actions && data.actions.length > 0) {
460
467
  <div [class]="'dialog-actions ' + (data.classActions || '')">
461
468
  @for (action of data.actions; track action.label) {
@@ -490,7 +497,7 @@ class C3DialogEmbedChildComponent {
490
497
  </div>
491
498
  }
492
499
  </div>
493
- `, isInline: true, styles: [".dialog-content-container{display:flex;flex-direction:column;height:100%;padding:1rem;overflow:auto}.dialog-content-container .dialog-content{display:flex;flex-direction:column;height:100%;overflow:auto;flex-grow:1}.dialog-content-container .mat-toolbar{display:flex;justify-content:space-between;align-items:center;border-radius:.25rem}.dialog-content-container .mat-toolbar span{color:inherit}.dialog-content-container .spacer{flex:1 1 auto;min-width:16px}.dialog-actions{display:flex;justify-content:flex-end;gap:.5rem}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i1$2.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5$1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }] }); }
500
+ `, isInline: true, styles: [".dialog-content-container{display:flex;flex-direction:column;height:100%;padding:1rem;overflow:auto}.dialog-content-container .dialog-content{display:flex;flex-direction:column;height:100%;overflow:auto;flex-grow:1}.dialog-content-container .mat-toolbar{display:flex;justify-content:space-between;align-items:center;border-radius:.25rem}.dialog-content-container .mat-toolbar span{color:inherit}.dialog-content-container .spacer{flex:1 1 auto;min-width:16px}.dialog-actions{display:flex;justify-content:flex-end;gap:.5rem}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i1$2.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5$1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }] }); }
494
501
  }
495
502
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3DialogEmbedChildComponent, decorators: [{
496
503
  type: Component,
@@ -507,17 +514,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
507
514
  }
508
515
  </mat-toolbar>
509
516
  }
510
-
517
+
511
518
  <div [class]="'dialog-content ' + (data.classContent || '')">
512
519
  <!-- Si templateRef est présent, on l'affiche directement,
513
520
  sinon on laisse la place au composant dynamique -->
514
521
  @if (data.templateRef) {
515
522
  <ng-container *ngTemplateOutlet="data.templateRef"></ng-container>
516
523
  } @else {
517
- <ng-template #target></ng-template>
524
+ <ng-container #target></ng-container>
518
525
  }
519
526
  </div>
520
-
527
+
521
528
  @if (data.actions && data.actions.length > 0) {
522
529
  <div [class]="'dialog-actions ' + (data.classActions || '')">
523
530
  @for (action of data.actions; track action.label) {
@@ -552,11 +559,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
552
559
  </div>
553
560
  }
554
561
  </div>
555
- `, standalone: false, styles: [".dialog-content-container{display:flex;flex-direction:column;height:100%;padding:1rem;overflow:auto}.dialog-content-container .dialog-content{display:flex;flex-direction:column;height:100%;overflow:auto;flex-grow:1}.dialog-content-container .mat-toolbar{display:flex;justify-content:space-between;align-items:center;border-radius:.25rem}.dialog-content-container .mat-toolbar span{color:inherit}.dialog-content-container .spacer{flex:1 1 auto;min-width:16px}.dialog-actions{display:flex;justify-content:flex-end;gap:.5rem}\n"] }]
562
+ `, standalone: false, styles: [".dialog-content-container{display:flex;flex-direction:column;height:100%;padding:1rem;overflow:auto}.dialog-content-container .dialog-content{display:flex;flex-direction:column;height:100%;overflow:auto;flex-grow:1}.dialog-content-container .mat-toolbar{display:flex;justify-content:space-between;align-items:center;border-radius:.25rem}.dialog-content-container .mat-toolbar span{color:inherit}.dialog-content-container .spacer{flex:1 1 auto;min-width:16px}.dialog-actions{display:flex;justify-content:flex-end;gap:.5rem}\n"] }]
556
563
  }], ctorParameters: () => [{ type: i1$2.MatDialogRef }, { type: undefined, decorators: [{
557
564
  type: Inject,
558
565
  args: [MAT_DIALOG_DATA]
559
- }] }, { type: i0.ChangeDetectorRef }], propDecorators: { target: [{ type: i0.ViewChild, args: ['target', { isSignal: true }] }] } });
566
+ }] }, { type: i0.ChangeDetectorRef }], propDecorators: { target: [{ type: i0.ViewChild, args: ['target', { ...{
567
+ read: ViewContainerRef,
568
+ }, isSignal: true }] }] } });
560
569
 
561
570
  class C3DialogTemplateComponent {
562
571
  constructor() {
@@ -990,10 +999,15 @@ class C3FileViewerComponent {
990
999
  constructor(moduleConfig, _http) {
991
1000
  this.moduleConfig = moduleConfig;
992
1001
  this._http = _http;
1002
+ /** Height in pixels occupied by other elements (e.g. header), used to calculate viewer height. Defaults to 0. */
993
1003
  this.screenHeightOccupied = input(0, ...(ngDevMode ? [{ debugName: "screenHeightOccupied" }] : [])); // In Px
1004
+ /** The C3FileViewer instance to control the viewer. */
994
1005
  this.fileViewer = input.required(...(ngDevMode ? [{ debugName: "fileViewer" }] : []));
1006
+ /** Emits when the current file index changes. */
995
1007
  this.indexChange = output();
1008
+ /** Emits configuration changes. */
996
1009
  this.configChange = output();
1010
+ /** Emits custom events from the file viewer. */
997
1011
  this.customFileEvent = output();
998
1012
  // Setup subscriptions in constructor using effect
999
1013
  effect(() => {
@@ -1567,11 +1581,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
1567
1581
 
1568
1582
  class C3FileDisplayCardComponent {
1569
1583
  constructor() {
1584
+ /**
1585
+ * The file object/metadata to display. Can include an observable for the object URL.
1586
+ */
1570
1587
  this.fileObjectUrl = input.required(...(ngDevMode ? [{ debugName: "fileObjectUrl" }] : []));
1588
+ /**
1589
+ * Function to extract the display name from the file metadata.
1590
+ * Defaults to returning `file.name`.
1591
+ */
1571
1592
  this.displayFn = input((file) => file.name, ...(ngDevMode ? [{ debugName: "displayFn" }] : []));
1593
+ /** Whether the file can be deleted. Defaults to false. */
1572
1594
  this.deletable = input(false, ...(ngDevMode ? [{ debugName: "deletable" }] : []));
1595
+ /** Size of the card. Options: '16', '32', '64', '128', '256'. Defaults to '32'. */
1573
1596
  this.size = input('32', ...(ngDevMode ? [{ debugName: "size" }] : []));
1597
+ /** Emits when the delete button is clicked. */
1574
1598
  this.onDelete = output();
1599
+ /** Emits when the download button/action is triggered. */
1575
1600
  this.onDownload = output();
1576
1601
  this.getFileType = computed(() => {
1577
1602
  const file = this.fileObjectUrl();
@@ -1686,7 +1711,7 @@ class C3FileDisplayIconComponent {
1686
1711
  }
1687
1712
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3FileDisplayIconComponent, decorators: [{
1688
1713
  type: Component,
1689
- args: [{ selector: 'c3-file-display-icon', imports: [CommonModule, MatIconModule], template: "<mat-icon [ngClass]=\"color()\">{{ displayedIcon() }}</mat-icon>\n", styles: [":host{display:block}:host .text-primary{color:var(--primary-color)}:host .text-secondary{color:var(--secondary-color)}:host .text-success{color:var(--success-color)}:host .text-gray{color:var(--gray-color)}\n"] }]
1714
+ args: [{ selector: 'c3-file-display-icon', standalone: true, imports: [CommonModule, MatIconModule], template: "<mat-icon [ngClass]=\"color()\">{{ displayedIcon() }}</mat-icon>\n", styles: [":host{display:block}:host .text-primary{color:var(--primary-color)}:host .text-secondary{color:var(--secondary-color)}:host .text-success{color:var(--success-color)}:host .text-gray{color:var(--gray-color)}\n"] }]
1690
1715
  }], propDecorators: { fileType: [{ type: i0.Input, args: [{ isSignal: true, alias: "fileType", required: true }] }] } });
1691
1716
 
1692
1717
  /**
@@ -1779,8 +1804,11 @@ class C3FileDisplayListColumnDefDirective {
1779
1804
  }]));
1780
1805
  this.classList = input([], ...(ngDevMode ? [{ debugName: "classList" }] : []));
1781
1806
  this._table = inject(C3_FILE_DISPLAY_LIST, { optional: true });
1782
- this.headerCellDef = contentChild(C3FileDisplayListHeaderCellDefDirective, ...(ngDevMode ? [{ debugName: "headerCellDef" }] : []));
1783
- this.cellDef = contentChild(C3FileDisplayListCellDefDirective, ...(ngDevMode ? [{ debugName: "cellDef" }] : []));
1807
+ // contentChild searches in projected content (via ng-content)
1808
+ // Note: contentChild may not find directives on ng-template in tests, but works in real usage
1809
+ // when directives are projected via ng-content in the parent component
1810
+ this.headerCellDef = contentChild(C3FileDisplayListHeaderCellDefDirective, ...(ngDevMode ? [{ debugName: "headerCellDef", descendants: true }] : [{ descendants: true }]));
1811
+ this.cellDef = contentChild(C3FileDisplayListCellDefDirective, ...(ngDevMode ? [{ debugName: "cellDef", descendants: true }] : [{ descendants: true }]));
1784
1812
  }
1785
1813
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3FileDisplayListColumnDefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1786
1814
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.3.14", type: C3FileDisplayListColumnDefDirective, isStandalone: true, selector: "[c3FileDisplayListColumnDef]", inputs: { title: { classPropertyName: "title", publicName: "c3FileDisplayListColumnDef", isSignal: true, isRequired: true, transformFunction: null }, classList: { classPropertyName: "classList", publicName: "classList", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "headerCellDef", first: true, predicate: C3FileDisplayListHeaderCellDefDirective, descendants: true, isSignal: true }, { propertyName: "cellDef", first: true, predicate: C3FileDisplayListCellDefDirective, descendants: true, isSignal: true }], ngImport: i0 }); }
@@ -1789,8 +1817,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
1789
1817
  type: Directive,
1790
1818
  args: [{
1791
1819
  selector: '[c3FileDisplayListColumnDef]',
1820
+ standalone: true,
1792
1821
  }]
1793
- }], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "c3FileDisplayListColumnDef", required: true }] }], classList: [{ type: i0.Input, args: [{ isSignal: true, alias: "classList", required: false }] }], headerCellDef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => C3FileDisplayListHeaderCellDefDirective), { isSignal: true }] }], cellDef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => C3FileDisplayListCellDefDirective), { isSignal: true }] }] } });
1822
+ }], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "c3FileDisplayListColumnDef", required: true }] }], classList: [{ type: i0.Input, args: [{ isSignal: true, alias: "classList", required: false }] }], headerCellDef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => C3FileDisplayListHeaderCellDefDirective), { ...{ descendants: true }, isSignal: true }] }], cellDef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => C3FileDisplayListCellDefDirective), { ...{ descendants: true }, isSignal: true }] }] } });
1794
1823
  class C3FileDisplayListHeaderCellDefDirective {
1795
1824
  constructor() {
1796
1825
  this.template = inject(TemplateRef);
@@ -1802,6 +1831,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
1802
1831
  type: Directive,
1803
1832
  args: [{
1804
1833
  selector: '[c3FileDisplayListHeaderCellDef]',
1834
+ standalone: true,
1805
1835
  }]
1806
1836
  }] });
1807
1837
  class C3FileDisplayListCellDefDirective {
@@ -1815,6 +1845,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
1815
1845
  type: Directive,
1816
1846
  args: [{
1817
1847
  selector: '[c3FileDisplayListCellDef]',
1848
+ standalone: true,
1818
1849
  }]
1819
1850
  }] });
1820
1851
 
@@ -1858,7 +1889,7 @@ class C3FileDisplayListComponent {
1858
1889
  }
1859
1890
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3FileDisplayListComponent, decorators: [{
1860
1891
  type: Component,
1861
- args: [{ selector: 'c3-file-display-list', imports: [
1892
+ args: [{ selector: 'c3-file-display-list', standalone: true, imports: [
1862
1893
  C3StopPropagationDirective,
1863
1894
  C3FileViewerModule,
1864
1895
  C3FileDisplayIconComponent,
@@ -1962,12 +1993,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
1962
1993
  }]
1963
1994
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }] } });
1964
1995
 
1996
+ /**
1997
+ * C3ExpansionComponent
1998
+ * A style-agnostic expansion panel. Provides the expansion logic and animation
1999
+ * (via c3-auto-animate) but leaves styling to the consumer.
2000
+ */
1965
2001
  class C3ExpansionComponent {
1966
2002
  get hostClass() {
1967
2003
  return 'c3-expansion';
1968
2004
  }
1969
2005
  constructor() {
2006
+ /** Class to apply to the header element. Defaults to 'c3-expansion-header'. */
1970
2007
  this.headerClass = input('c3-expansion-header', ...(ngDevMode ? [{ debugName: "headerClass" }] : []));
2008
+ /** Whether the panel is expanded. Two-way binding supported. */
1971
2009
  this.isExpanded = model(false, ...(ngDevMode ? [{ debugName: "isExpanded" }] : []));
1972
2010
  this._elementRef = inject(ElementRef);
1973
2011
  this.header = contentChild(C3ExpansionHeaderComponent, ...(ngDevMode ? [{ debugName: "header" }] : []));
@@ -2207,20 +2245,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
2207
2245
 
2208
2246
  class C3TraceCardTitleComponent {
2209
2247
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3TraceCardTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2210
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: C3TraceCardTitleComponent, isStandalone: false, selector: "c3-trace-card-title", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [""] }); }
2248
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: C3TraceCardTitleComponent, isStandalone: false, selector: "c3-trace-card-title", host: { classAttribute: "c3-trace-card-title" }, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [""] }); }
2211
2249
  }
2212
2250
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3TraceCardTitleComponent, decorators: [{
2213
2251
  type: Component,
2214
- args: [{ selector: 'c3-trace-card-title', standalone: false, template: "<ng-content></ng-content>\n" }]
2252
+ args: [{ selector: 'c3-trace-card-title', standalone: false, host: {
2253
+ class: 'c3-trace-card-title',
2254
+ }, template: "<ng-content></ng-content>\n" }]
2215
2255
  }] });
2216
2256
 
2217
2257
  class C3TraceCardContentComponent {
2218
2258
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3TraceCardContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2219
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: C3TraceCardContentComponent, isStandalone: false, selector: "c3-trace-card-content", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [""] }); }
2259
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: C3TraceCardContentComponent, isStandalone: false, selector: "c3-trace-card-content", host: { classAttribute: "c3-trace-card-content" }, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [""] }); }
2220
2260
  }
2221
2261
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3TraceCardContentComponent, decorators: [{
2222
2262
  type: Component,
2223
- args: [{ selector: 'c3-trace-card-content', standalone: false, template: "<ng-content></ng-content>\n" }]
2263
+ args: [{ selector: 'c3-trace-card-content', host: {
2264
+ class: 'c3-trace-card-content',
2265
+ }, standalone: false, template: "<ng-content></ng-content>\n" }]
2224
2266
  }] });
2225
2267
 
2226
2268
  class C3TraceCardAlignLeftDirective {
@@ -2325,6 +2367,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
2325
2367
  }]
2326
2368
  }], ctorParameters: () => [] });
2327
2369
 
2370
+ /**
2371
+ * C3MenuComponent
2372
+ * Wrapper for the side menu. It projects `c3-nav-item` components.
2373
+ * Automatically handles `headless` mode via query params (managed by C3MenuService).
2374
+ */
2328
2375
  class C3MenuComponent {
2329
2376
  constructor() {
2330
2377
  this._c3Menu = inject(C3MenuService);
@@ -2339,9 +2386,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
2339
2386
 
2340
2387
  class C3NavItemComponent {
2341
2388
  constructor() {
2389
+ /** The router link path for this navigation item. */
2342
2390
  this.route = input.required(...(ngDevMode ? [{ debugName: "route" }] : []));
2391
+ /** The title/label of the navigation item. */
2343
2392
  this.itemTitle = input.required(...(ngDevMode ? [{ debugName: "itemTitle" }] : []));
2393
+ /** Optional regex string to check if the item is active based on URL. If null, defaults to `route`. */
2344
2394
  this.check = input(null, ...(ngDevMode ? [{ debugName: "check" }] : []));
2395
+ /** Whether the link is external (opens in new tab/window). Defaults to false. */
2345
2396
  this.isExternal = input(false, ...(ngDevMode ? [{ debugName: "isExternal" }] : []));
2346
2397
  this.element = viewChild('button', ...(ngDevMode ? [{ debugName: "element", read: (ElementRef) }] : [{
2347
2398
  read: (ElementRef),