@truenas/ui-components 0.1.56 → 0.1.57

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@truenas/ui-components",
3
- "version": "0.1.56",
3
+ "version": "0.1.57",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org",
6
6
  "access": "public"
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { ElementRef, OnDestroy, AfterViewInit, AfterContentInit, TemplateRef, Provider, ChangeDetectorRef, OnInit, PipeTransform, ViewContainerRef, AfterViewChecked, ComponentRef } from '@angular/core';
2
+ import { ElementRef, OnDestroy, AfterViewInit, AfterContentInit, TemplateRef, Provider, ChangeDetectorRef, OnInit, PipeTransform, ViewContainerRef, AfterViewChecked, ComponentRef, InjectionToken } from '@angular/core';
3
3
  import { ControlValueAccessor, NgControl } from '@angular/forms';
4
4
  import { ComponentHarness, BaseHarnessFilters, HarnessPredicate, HarnessLoader } from '@angular/cdk/testing';
5
5
  import { SafeHtml, SafeResourceUrl, DomSanitizer } from '@angular/platform-browser';
@@ -270,6 +270,11 @@ declare class TnDrawerComponent implements OnDestroy {
270
270
  position: _angular_core.InputSignal<TnDrawerPosition>;
271
271
  /** Accessible label for the drawer panel */
272
272
  ariaLabel: _angular_core.InputSignal<string | undefined>;
273
+ /**
274
+ * Test-id applied to the drawer panel. Rendered under whichever attribute name is
275
+ * configured via `TN_TEST_ATTR` (default `data-testid`).
276
+ */
277
+ testId: _angular_core.InputSignal<string | undefined>;
273
278
  /** Fires after the open transition completes */
274
279
  openedComplete: _angular_core.OutputEmitterRef<void>;
275
280
  /** Fires after the close transition completes */
@@ -308,7 +313,7 @@ declare class TnDrawerComponent implements OnDestroy {
308
313
  protected onTransitionEnd(event: TransitionEvent): void;
309
314
  private restoreFocus;
310
315
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnDrawerComponent, never>;
311
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnDrawerComponent, "tn-drawer", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "opened": { "alias": "opened"; "required": false; "isSignal": true; }; "disableClose": { "alias": "disableClose"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "opened": "openedChange"; "openedComplete": "openedComplete"; "closed": "closed"; }, never, ["*"], true, never>;
316
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnDrawerComponent, "tn-drawer", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "opened": { "alias": "opened"; "required": false; "isSignal": true; }; "disableClose": { "alias": "disableClose"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; }, { "opened": "openedChange"; "openedComplete": "openedComplete"; "closed": "closed"; }, never, ["*"], true, never>;
312
317
  }
313
318
 
314
319
  declare class TnDrawerContainerComponent {
@@ -527,10 +532,15 @@ declare class TnButtonComponent {
527
532
  backgroundColor: _angular_core.InputSignal<string | undefined>;
528
533
  label: _angular_core.InputSignal<string>;
529
534
  disabled: _angular_core.InputSignal<boolean>;
535
+ /**
536
+ * Test-id applied to the rendered `<button>` element. Rendered under whichever attribute
537
+ * name is configured via `TN_TEST_ATTR` (default `data-testid`).
538
+ */
539
+ testId: _angular_core.InputSignal<string | undefined>;
530
540
  onClick: _angular_core.OutputEmitterRef<MouseEvent>;
531
541
  classes: _angular_core.Signal<string[]>;
532
542
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnButtonComponent, never>;
533
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnButtonComponent, "tn-button", never, { "primary": { "alias": "primary"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "onClick": "onClick"; }, never, never, true, never>;
543
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnButtonComponent, "tn-button", never, { "primary": { "alias": "primary"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; }, { "onClick": "onClick"; }, never, never, true, never>;
534
544
  }
535
545
 
536
546
  /**
@@ -673,6 +683,11 @@ declare class TnIconComponent {
673
683
  declare class TnIconButtonComponent {
674
684
  disabled: _angular_core.InputSignal<boolean>;
675
685
  ariaLabel: _angular_core.InputSignal<string | undefined>;
686
+ /**
687
+ * Test-id applied to the rendered `<button>` element. Rendered under whichever attribute
688
+ * name is configured via `TN_TEST_ATTR` (default `data-testid`).
689
+ */
690
+ testId: _angular_core.InputSignal<string | undefined>;
676
691
  name: _angular_core.InputSignal<string>;
677
692
  size: _angular_core.InputSignal<IconSize>;
678
693
  color: _angular_core.InputSignal<string | undefined>;
@@ -682,7 +697,7 @@ declare class TnIconButtonComponent {
682
697
  classes: _angular_core.Signal<string[]>;
683
698
  effectiveAriaLabel: _angular_core.Signal<string>;
684
699
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnIconButtonComponent, never>;
685
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnIconButtonComponent, "tn-icon-button", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "library": { "alias": "library"; "required": false; "isSignal": true; }; }, { "onClick": "onClick"; }, never, never, true, never>;
700
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnIconButtonComponent, "tn-icon-button", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "library": { "alias": "library"; "required": false; "isSignal": true; }; }, { "onClick": "onClick"; }, never, never, true, never>;
686
701
  }
687
702
 
688
703
  /**
@@ -1213,20 +1228,40 @@ interface TnCardAction {
1213
1228
  handler: () => void;
1214
1229
  disabled?: boolean;
1215
1230
  icon?: string;
1231
+ /**
1232
+ * Test-id applied to the rendered action button. Rendered under whichever attribute name
1233
+ * is configured via `TN_TEST_ATTR` (default `data-testid`).
1234
+ */
1235
+ testId?: string;
1216
1236
  }
1217
1237
  interface TnCardControl {
1218
1238
  label: string;
1219
1239
  checked: boolean;
1220
1240
  handler: (checked: boolean) => void;
1221
1241
  disabled?: boolean;
1242
+ /**
1243
+ * Test-id applied to the rendered slide-toggle. Rendered under whichever attribute name
1244
+ * is configured via `TN_TEST_ATTR` (default `data-testid`).
1245
+ */
1246
+ testId?: string;
1222
1247
  }
1223
1248
  interface TnCardHeaderStatus {
1224
1249
  label: string;
1225
1250
  type?: 'success' | 'warning' | 'error' | 'info' | 'neutral';
1251
+ /**
1252
+ * Test-id applied to the rendered status pill `<div>`. Rendered under whichever attribute name
1253
+ * is configured via `TN_TEST_ATTR` (default `data-testid`).
1254
+ */
1255
+ testId?: string;
1226
1256
  }
1227
1257
  interface TnCardFooterLink {
1228
1258
  label: string;
1229
1259
  handler: () => void;
1260
+ /**
1261
+ * Test-id applied to the rendered footer link button. Rendered under whichever attribute name
1262
+ * is configured via `TN_TEST_ATTR` (default `data-testid`).
1263
+ */
1264
+ testId?: string;
1230
1265
  }
1231
1266
 
1232
1267
  /**
@@ -1301,6 +1336,12 @@ declare class TnCardComponent {
1301
1336
  headerStatus: _angular_core.InputSignal<TnCardHeaderStatus | undefined>;
1302
1337
  headerControl: _angular_core.InputSignal<TnCardControl | undefined>;
1303
1338
  headerMenu: _angular_core.InputSignal<TnMenuItem[] | undefined>;
1339
+ /**
1340
+ * Test-id applied to the kebab-menu trigger button rendered when `headerMenu` is set.
1341
+ * Rendered under whichever attribute name is configured via `TN_TEST_ATTR`
1342
+ * (default `data-testid`).
1343
+ */
1344
+ headerMenuTriggerTestId: _angular_core.InputSignal<string | undefined>;
1304
1345
  primaryAction: _angular_core.InputSignal<TnCardAction | undefined>;
1305
1346
  secondaryAction: _angular_core.InputSignal<TnCardAction | undefined>;
1306
1347
  footerLink: _angular_core.InputSignal<TnCardFooterLink | undefined>;
@@ -1317,7 +1358,7 @@ declare class TnCardComponent {
1317
1358
  onHeaderMenuItemClick(_item: TnMenuItem): void;
1318
1359
  getStatusClass(type?: string): string;
1319
1360
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnCardComponent, never>;
1320
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnCardComponent, "tn-card", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "titleLink": { "alias": "titleLink"; "required": false; "isSignal": true; }; "elevation": { "alias": "elevation"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; "padContent": { "alias": "padContent"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "background": { "alias": "background"; "required": false; "isSignal": true; }; "headerStatus": { "alias": "headerStatus"; "required": false; "isSignal": true; }; "headerControl": { "alias": "headerControl"; "required": false; "isSignal": true; }; "headerMenu": { "alias": "headerMenu"; "required": false; "isSignal": true; }; "primaryAction": { "alias": "primaryAction"; "required": false; "isSignal": true; }; "secondaryAction": { "alias": "secondaryAction"; "required": false; "isSignal": true; }; "footerLink": { "alias": "footerLink"; "required": false; "isSignal": true; }; }, {}, ["projectedHeader"], ["[tnCardHeader]", "*"], true, never>;
1361
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnCardComponent, "tn-card", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "titleLink": { "alias": "titleLink"; "required": false; "isSignal": true; }; "elevation": { "alias": "elevation"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; "padContent": { "alias": "padContent"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "background": { "alias": "background"; "required": false; "isSignal": true; }; "headerStatus": { "alias": "headerStatus"; "required": false; "isSignal": true; }; "headerControl": { "alias": "headerControl"; "required": false; "isSignal": true; }; "headerMenu": { "alias": "headerMenu"; "required": false; "isSignal": true; }; "headerMenuTriggerTestId": { "alias": "headerMenuTriggerTestId"; "required": false; "isSignal": true; }; "primaryAction": { "alias": "primaryAction"; "required": false; "isSignal": true; }; "secondaryAction": { "alias": "secondaryAction"; "required": false; "isSignal": true; }; "footerLink": { "alias": "footerLink"; "required": false; "isSignal": true; }; }, {}, ["projectedHeader"], ["[tnCardHeader]", "*"], true, never>;
1321
1362
  }
1322
1363
 
1323
1364
  declare class TnExpansionPanelComponent {
@@ -1329,6 +1370,15 @@ declare class TnExpansionPanelComponent {
1329
1370
  expanded: _angular_core.InputSignal<boolean>;
1330
1371
  disabled: _angular_core.InputSignal<boolean>;
1331
1372
  titleStyle: _angular_core.InputSignal<"body" | "header" | "link">;
1373
+ /**
1374
+ * Test-id applied to the panel's root element. Rendered under whichever attribute name
1375
+ * is configured via `TN_TEST_ATTR` (default `data-testid`).
1376
+ */
1377
+ testId: _angular_core.InputSignal<string | undefined>;
1378
+ /**
1379
+ * Test-id applied to the expand/collapse toggle header button.
1380
+ */
1381
+ toggleTestId: _angular_core.InputSignal<string | undefined>;
1332
1382
  expandedChange: _angular_core.OutputEmitterRef<boolean>;
1333
1383
  toggleEvent: _angular_core.OutputEmitterRef<void>;
1334
1384
  private internalExpanded;
@@ -1337,7 +1387,7 @@ declare class TnExpansionPanelComponent {
1337
1387
  toggle(): void;
1338
1388
  classes: _angular_core.Signal<string[]>;
1339
1389
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnExpansionPanelComponent, never>;
1340
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnExpansionPanelComponent, "tn-expansion-panel", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "elevation": { "alias": "elevation"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "background": { "alias": "background"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "titleStyle": { "alias": "titleStyle"; "required": false; "isSignal": true; }; }, { "expandedChange": "expandedChange"; "toggleEvent": "toggleEvent"; }, never, ["[slot=title]", "*"], true, never>;
1390
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnExpansionPanelComponent, "tn-expansion-panel", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "elevation": { "alias": "elevation"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "background": { "alias": "background"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "titleStyle": { "alias": "titleStyle"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; "toggleTestId": { "alias": "toggleTestId"; "required": false; "isSignal": true; }; }, { "expandedChange": "expandedChange"; "toggleEvent": "toggleEvent"; }, never, ["[slot=title]", "*"], true, never>;
1341
1391
  }
1342
1392
 
1343
1393
  /**
@@ -1992,6 +2042,11 @@ declare class TnTabsComponent implements AfterContentInit, AfterViewInit, OnDest
1992
2042
  selectedIndex: _angular_core.InputSignal<number>;
1993
2043
  orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
1994
2044
  highlightPosition: _angular_core.InputSignal<"top" | "bottom" | "left" | "right">;
2045
+ /**
2046
+ * Test-id applied to the tablist root element. Rendered under whichever attribute name
2047
+ * is configured via `TN_TEST_ATTR` (default `data-testid`).
2048
+ */
2049
+ testId: _angular_core.InputSignal<string | undefined>;
1995
2050
  selectedIndexChange: _angular_core.OutputEmitterRef<number>;
1996
2051
  tabChange: _angular_core.OutputEmitterRef<TabChangeEvent>;
1997
2052
  private internalSelectedIndex;
@@ -2017,7 +2072,7 @@ declare class TnTabsComponent implements AfterContentInit, AfterViewInit, OnDest
2017
2072
  private focusTab;
2018
2073
  classes: _angular_core.Signal<string>;
2019
2074
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnTabsComponent, never>;
2020
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnTabsComponent, "tn-tabs", never, { "selectedIndex": { "alias": "selectedIndex"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "highlightPosition": { "alias": "highlightPosition"; "required": false; "isSignal": true; }; }, { "selectedIndexChange": "selectedIndexChange"; "tabChange": "tabChange"; }, ["tabs", "panels"], ["tn-tab", "tn-tab-panel"], true, never>;
2075
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnTabsComponent, "tn-tabs", never, { "selectedIndex": { "alias": "selectedIndex"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "highlightPosition": { "alias": "highlightPosition"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; }, { "selectedIndexChange": "selectedIndexChange"; "tabChange": "tabChange"; }, ["tabs", "panels"], ["tn-tab", "tn-tab-panel"], true, never>;
2021
2076
  }
2022
2077
 
2023
2078
  /**
@@ -3494,6 +3549,32 @@ declare class TnListOptionComponent implements AfterContentInit {
3494
3549
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnListOptionComponent, "tn-list-option", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, never, ["[tnListIcon], [tnListAvatar]", "[tnListItemTitle], [tnListItemPrimary]", "*", "[tnListItemLine], [tnListItemSecondary]"], true, never>;
3495
3550
  }
3496
3551
 
3552
+ /**
3553
+ * Primitive directive that writes a raw `testId` value to whichever attribute name has been
3554
+ * configured via {@link TN_TEST_ATTR} (default `data-testid`).
3555
+ *
3556
+ * Library components should use this directive instead of hard-coding `[attr.data-testid]` so
3557
+ * the attribute name remains centrally controlled and consumers with different conventions
3558
+ * (e.g. `data-test`) can opt in with a single root-level provider.
3559
+ *
3560
+ * @example
3561
+ * ```html
3562
+ * <button [tnTestId]="myTestId()">Click me</button>
3563
+ * ```
3564
+ *
3565
+ * Passing `null` / `undefined` / `''` removes the attribute entirely (avoids `data-testid=""`).
3566
+ */
3567
+ declare class TnTestIdDirective {
3568
+ private readonly renderer;
3569
+ private readonly host;
3570
+ private readonly attrName;
3571
+ /** The raw test-id value to apply. Falsy values remove the attribute. */
3572
+ readonly testId: _angular_core.InputSignal<string | null | undefined>;
3573
+ constructor();
3574
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnTestIdDirective, never>;
3575
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TnTestIdDirective, "[tnTestId]", never, { "testId": { "alias": "tnTestId"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3576
+ }
3577
+
3497
3578
  interface TnSelectionChange {
3498
3579
  source: TnSelectionListComponent;
3499
3580
  options: TnListOptionComponent[];
@@ -3517,7 +3598,7 @@ declare class TnSelectionListComponent implements ControlValueAccessor {
3517
3598
  onOptionSelectionChange(): void;
3518
3599
  get selectedOptions(): TnListOptionComponent[];
3519
3600
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnSelectionListComponent, never>;
3520
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnSelectionListComponent, "tn-selection-list", never, { "dense": { "alias": "dense"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, ["options"], ["*"], true, never>;
3601
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnSelectionListComponent, "tn-selection-list", never, { "dense": { "alias": "dense"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, ["options"], ["*"], true, [{ directive: typeof TnTestIdDirective; inputs: { "tnTestId": "testId"; }; outputs: {}; }]>;
3521
3602
  }
3522
3603
 
3523
3604
  declare class TnHeaderCellDefDirective {
@@ -3614,7 +3695,7 @@ declare class TnTableComponent<T = unknown> implements OnInit {
3614
3695
  getColumnDef(columnName: string): TnTableColumnDirective | undefined;
3615
3696
  getCellValue(row: T, column: string): unknown;
3616
3697
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnTableComponent<any>, never>;
3617
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnTableComponent<any>, "tn-table", never, { "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; "displayedColumns": { "alias": "displayedColumns"; "required": false; "isSignal": true; }; "trackBy": { "alias": "trackBy"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "emptyIcon": { "alias": "emptyIcon"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; }, { "sortChange": "sortChange"; "selectionChange": "selectionChange"; }, ["columnDefs", "detailRowDef"], never, true, never>;
3698
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnTableComponent<any>, "tn-table", never, { "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; "displayedColumns": { "alias": "displayedColumns"; "required": false; "isSignal": true; }; "trackBy": { "alias": "trackBy"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "emptyIcon": { "alias": "emptyIcon"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; }, { "sortChange": "sortChange"; "selectionChange": "selectionChange"; }, ["columnDefs", "detailRowDef"], never, true, [{ directive: typeof TnTestIdDirective; inputs: { "tnTestId": "testId"; }; outputs: {}; }]>;
3618
3699
  }
3619
3700
 
3620
3701
  /**
@@ -3790,7 +3871,7 @@ declare class TnTreeFlatDataSource<T, F> extends DataSource<F> {
3790
3871
  declare class TnTreeComponent<T, K = T> extends CdkTree<T, K> {
3791
3872
  constructor();
3792
3873
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnTreeComponent<any, any>, never>;
3793
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnTreeComponent<any, any>, "tn-tree", ["tnTree"], {}, {}, never, never, true, never>;
3874
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnTreeComponent<any, any>, "tn-tree", ["tnTree"], {}, {}, never, never, true, [{ directive: typeof TnTestIdDirective; inputs: { "tnTestId": "testId"; }; outputs: {}; }]>;
3794
3875
  }
3795
3876
 
3796
3877
  declare class TnTreeNodeComponent<T, K = T> extends CdkTreeNode<T, K> {
@@ -3802,7 +3883,7 @@ declare class TnTreeNodeComponent<T, K = T> extends CdkTreeNode<T, K> {
3802
3883
  /** Whether the tree node is expanded */
3803
3884
  get isExpanded(): boolean;
3804
3885
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnTreeNodeComponent<any, any>, never>;
3805
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnTreeNodeComponent<any, any>, "tn-tree-node", ["tnTreeNode"], {}, {}, never, ["*"], true, never>;
3886
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnTreeNodeComponent<any, any>, "tn-tree-node", ["tnTreeNode"], {}, {}, never, ["*"], true, [{ directive: typeof TnTestIdDirective; inputs: { "tnTestId": "testId"; }; outputs: {}; }]>;
3806
3887
  }
3807
3888
 
3808
3889
  declare class TnNestedTreeNodeComponent<T, K = T> extends CdkNestedTreeNode<T, K> {
@@ -4172,6 +4253,11 @@ interface DateRange {
4172
4253
  declare class TnDateRangeInputComponent implements ControlValueAccessor, OnInit, OnDestroy {
4173
4254
  disabled: _angular_core.InputSignal<boolean>;
4174
4255
  placeholder: _angular_core.InputSignal<string>;
4256
+ /**
4257
+ * Test-id applied to the date-range-input container. Rendered under whichever attribute name
4258
+ * is configured via `TN_TEST_ATTR` (default `data-testid`).
4259
+ */
4260
+ testId: _angular_core.InputSignal<string | undefined>;
4175
4261
  private formDisabled;
4176
4262
  isDisabled: _angular_core.Signal<boolean>;
4177
4263
  startMonthRef: _angular_core.Signal<ElementRef<HTMLInputElement>>;
@@ -4220,7 +4306,7 @@ declare class TnDateRangeInputComponent implements ControlValueAccessor, OnInit,
4220
4306
  close(): void;
4221
4307
  private createOverlay;
4222
4308
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnDateRangeInputComponent, never>;
4223
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnDateRangeInputComponent, "tn-date-range-input", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4309
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnDateRangeInputComponent, "tn-date-range-input", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4224
4310
  }
4225
4311
 
4226
4312
  declare class TnCalendarComponent implements OnInit {
@@ -4260,7 +4346,7 @@ declare class TnCalendarComponent implements OnInit {
4260
4346
  */
4261
4347
  resetInteractionState(): void;
4262
4348
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnCalendarComponent, never>;
4263
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnCalendarComponent, "tn-calendar", never, { "startView": { "alias": "startView"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "dateFilter": { "alias": "dateFilter"; "required": false; "isSignal": true; }; "rangeMode": { "alias": "rangeMode"; "required": false; "isSignal": true; }; "selectedRange": { "alias": "selectedRange"; "required": false; "isSignal": true; }; }, { "selectedChange": "selectedChange"; "activeDateChange": "activeDateChange"; "viewChanged": "viewChanged"; "selectedRangeChange": "selectedRangeChange"; }, never, never, true, never>;
4349
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnCalendarComponent, "tn-calendar", never, { "startView": { "alias": "startView"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "dateFilter": { "alias": "dateFilter"; "required": false; "isSignal": true; }; "rangeMode": { "alias": "rangeMode"; "required": false; "isSignal": true; }; "selectedRange": { "alias": "selectedRange"; "required": false; "isSignal": true; }; }, { "selectedChange": "selectedChange"; "activeDateChange": "activeDateChange"; "viewChanged": "viewChanged"; "selectedRangeChange": "selectedRangeChange"; }, never, never, true, [{ directive: typeof TnTestIdDirective; inputs: { "tnTestId": "testId"; }; outputs: {}; }]>;
4264
4350
  }
4265
4351
 
4266
4352
  declare class TnCalendarHeaderComponent {
@@ -4372,6 +4458,11 @@ declare class TnDateInputComponent implements ControlValueAccessor, OnInit, OnDe
4372
4458
  min: _angular_core.InputSignal<Date | undefined>;
4373
4459
  max: _angular_core.InputSignal<Date | undefined>;
4374
4460
  dateFilter: _angular_core.InputSignal<((date: Date) => boolean) | undefined>;
4461
+ /**
4462
+ * Test-id applied to the date-input container. Rendered under whichever attribute name
4463
+ * is configured via `TN_TEST_ATTR` (default `data-testid`).
4464
+ */
4465
+ testId: _angular_core.InputSignal<string | undefined>;
4375
4466
  private formDisabled;
4376
4467
  isDisabled: _angular_core.Signal<boolean>;
4377
4468
  monthRef: _angular_core.Signal<ElementRef<HTMLInputElement>>;
@@ -4409,7 +4500,7 @@ declare class TnDateInputComponent implements ControlValueAccessor, OnInit, OnDe
4409
4500
  close(): void;
4410
4501
  private createOverlay;
4411
4502
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnDateInputComponent, never>;
4412
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnDateInputComponent, "tn-date-input", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "dateFilter": { "alias": "dateFilter"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4503
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnDateInputComponent, "tn-date-input", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "dateFilter": { "alias": "dateFilter"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4413
4504
  }
4414
4505
 
4415
4506
  /**
@@ -4674,6 +4765,11 @@ declare class TnSliderComponent implements ControlValueAccessor, OnDestroy, Afte
4674
4765
  labelPrefix: _angular_core.InputSignal<string>;
4675
4766
  labelSuffix: _angular_core.InputSignal<string>;
4676
4767
  labelType: _angular_core.InputSignal<LabelType>;
4768
+ /**
4769
+ * Test-id applied to the slider's root container. Rendered under whichever attribute name
4770
+ * is configured via `TN_TEST_ATTR` (default `data-testid`).
4771
+ */
4772
+ testId: _angular_core.InputSignal<string | undefined>;
4677
4773
  thumbDirective: _angular_core.Signal<TnSliderThumbDirective>;
4678
4774
  sliderContainer: _angular_core.Signal<ElementRef<HTMLDivElement>>;
4679
4775
  thumbVisual: _angular_core.Signal<ElementRef<HTMLDivElement>>;
@@ -4709,7 +4805,7 @@ declare class TnSliderComponent implements ControlValueAccessor, OnDestroy, Afte
4709
4805
  private onInteractionStart;
4710
4806
  private onInteractionEnd;
4711
4807
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnSliderComponent, never>;
4712
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnSliderComponent, "tn-slider", never, { "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "labelPrefix": { "alias": "labelPrefix"; "required": false; "isSignal": true; }; "labelSuffix": { "alias": "labelSuffix"; "required": false; "isSignal": true; }; "labelType": { "alias": "labelType"; "required": false; "isSignal": true; }; }, {}, ["thumbDirective"], ["*"], true, never>;
4808
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnSliderComponent, "tn-slider", never, { "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "labelPrefix": { "alias": "labelPrefix"; "required": false; "isSignal": true; }; "labelSuffix": { "alias": "labelSuffix"; "required": false; "isSignal": true; }; "labelType": { "alias": "labelType"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; }, {}, ["thumbDirective"], ["*"], true, never>;
4713
4809
  }
4714
4810
 
4715
4811
  declare class TnSliderWithLabelDirective implements OnInit, OnDestroy {
@@ -4734,6 +4830,11 @@ declare class TnButtonToggleGroupComponent implements ControlValueAccessor {
4734
4830
  name: _angular_core.InputSignal<string>;
4735
4831
  ariaLabel: _angular_core.InputSignal<string>;
4736
4832
  ariaLabelledby: _angular_core.InputSignal<string>;
4833
+ /**
4834
+ * Test-id applied to the group root. Rendered under whichever attribute name
4835
+ * is configured via `TN_TEST_ATTR` (default `data-testid`).
4836
+ */
4837
+ testId: _angular_core.InputSignal<string | undefined>;
4737
4838
  change: _angular_core.OutputEmitterRef<{
4738
4839
  source: TnButtonToggleComponent;
4739
4840
  value: unknown;
@@ -4755,7 +4856,7 @@ declare class TnButtonToggleGroupComponent implements ControlValueAccessor {
4755
4856
  private updateTogglesFromValue;
4756
4857
  private updateTogglesFromValues;
4757
4858
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnButtonToggleGroupComponent, never>;
4758
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnButtonToggleGroupComponent, "tn-button-toggle-group", never, { "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; "isSignal": true; }; }, { "change": "change"; }, ["buttonToggles"], ["*"], true, never>;
4859
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnButtonToggleGroupComponent, "tn-button-toggle-group", never, { "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; }, { "change": "change"; }, ["buttonToggles"], ["*"], true, never>;
4759
4860
  }
4760
4861
 
4761
4862
  declare class TnButtonToggleComponent implements ControlValueAccessor {
@@ -4767,6 +4868,11 @@ declare class TnButtonToggleComponent implements ControlValueAccessor {
4767
4868
  checked: _angular_core.WritableSignal<boolean>;
4768
4869
  ariaLabel: _angular_core.InputSignal<string>;
4769
4870
  ariaLabelledby: _angular_core.InputSignal<string>;
4871
+ /**
4872
+ * Test-id applied to the rendered toggle button. Rendered under whichever attribute name
4873
+ * is configured via `TN_TEST_ATTR` (default `data-testid`).
4874
+ */
4875
+ testId: _angular_core.InputSignal<string | undefined>;
4770
4876
  change: _angular_core.OutputEmitterRef<{
4771
4877
  source: TnButtonToggleComponent;
4772
4878
  value: unknown;
@@ -4786,7 +4892,7 @@ declare class TnButtonToggleComponent implements ControlValueAccessor {
4786
4892
  _markForCheck(): void;
4787
4893
  _markForUncheck(): void;
4788
4894
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnButtonToggleComponent, never>;
4789
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnButtonToggleComponent, "tn-button-toggle", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; "isSignal": true; }; }, { "change": "change"; }, never, ["*"], true, never>;
4895
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnButtonToggleComponent, "tn-button-toggle", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; }, { "change": "change"; }, never, ["*"], true, never>;
4790
4896
  }
4791
4897
 
4792
4898
  /**
@@ -5285,6 +5391,15 @@ declare class TnSidePanelComponent implements OnDestroy {
5285
5391
  hasBackdrop: _angular_core.InputSignal<boolean>;
5286
5392
  closeOnBackdropClick: _angular_core.InputSignal<boolean>;
5287
5393
  closeOnEscape: _angular_core.InputSignal<boolean>;
5394
+ /**
5395
+ * Test-id applied to the panel's root overlay element. Rendered under whichever attribute
5396
+ * name is configured via `TN_TEST_ATTR` (default `data-testid`).
5397
+ */
5398
+ testId: _angular_core.InputSignal<string | undefined>;
5399
+ /**
5400
+ * Test-id applied to the panel's close (×) button.
5401
+ */
5402
+ closeButtonTestId: _angular_core.InputSignal<string | undefined>;
5288
5403
  opened: _angular_core.OutputEmitterRef<void>;
5289
5404
  closed: _angular_core.OutputEmitterRef<void>;
5290
5405
  private actionContent;
@@ -5301,7 +5416,7 @@ declare class TnSidePanelComponent implements OnDestroy {
5301
5416
  private restoreFocus;
5302
5417
  private registerMdiIcons;
5303
5418
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnSidePanelComponent, never>;
5304
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnSidePanelComponent, "tn-side-panel", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "hasBackdrop": { "alias": "hasBackdrop"; "required": false; "isSignal": true; }; "closeOnBackdropClick": { "alias": "closeOnBackdropClick"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "opened": "opened"; "closed": "closed"; }, ["actionContent"], ["[tnSidePanelHeaderAction]", "*", "[tnSidePanelAction]"], true, never>;
5419
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnSidePanelComponent, "tn-side-panel", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "hasBackdrop": { "alias": "hasBackdrop"; "required": false; "isSignal": true; }; "closeOnBackdropClick": { "alias": "closeOnBackdropClick"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; "closeButtonTestId": { "alias": "closeButtonTestId"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "opened": "opened"; "closed": "closed"; }, ["actionContent"], ["[tnSidePanelHeaderAction]", "*", "[tnSidePanelAction]"], true, never>;
5305
5420
  }
5306
5421
 
5307
5422
  interface SidePanelHarnessFilters extends BaseHarnessFilters {
@@ -5353,6 +5468,11 @@ declare class TnStepperComponent {
5353
5468
  orientation: _angular_core.InputSignal<"auto" | "horizontal" | "vertical">;
5354
5469
  linear: _angular_core.InputSignal<boolean>;
5355
5470
  selectedIndex: _angular_core.ModelSignal<number>;
5471
+ /**
5472
+ * Test-id applied to the stepper root. Rendered under whichever attribute name
5473
+ * is configured via `TN_TEST_ATTR` (default `data-testid`).
5474
+ */
5475
+ testId: _angular_core.InputSignal<string | undefined>;
5356
5476
  selectionChange: _angular_core.OutputEmitterRef<{
5357
5477
  selectedIndex: number;
5358
5478
  previouslySelectedIndex: number;
@@ -5374,7 +5494,7 @@ declare class TnStepperComponent {
5374
5494
  previous(): void;
5375
5495
  _trackByStepIndex(index: number): number;
5376
5496
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnStepperComponent, never>;
5377
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnStepperComponent, "tn-stepper", never, { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "linear": { "alias": "linear"; "required": false; "isSignal": true; }; "selectedIndex": { "alias": "selectedIndex"; "required": false; "isSignal": true; }; }, { "selectedIndex": "selectedIndexChange"; "selectionChange": "selectionChange"; "completed": "completed"; }, ["steps"], never, true, never>;
5497
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnStepperComponent, "tn-stepper", never, { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "linear": { "alias": "linear"; "required": false; "isSignal": true; }; "selectedIndex": { "alias": "selectedIndex"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; }, { "selectedIndex": "selectedIndexChange"; "selectionChange": "selectionChange"; "completed": "completed"; }, ["steps"], never, true, never>;
5378
5498
  }
5379
5499
 
5380
5500
  declare class TnFilePickerComponent implements ControlValueAccessor, OnInit, OnDestroy {
@@ -5386,6 +5506,11 @@ declare class TnFilePickerComponent implements ControlValueAccessor, OnInit, OnD
5386
5506
  allowManualInput: _angular_core.InputSignal<boolean>;
5387
5507
  placeholder: _angular_core.InputSignal<string>;
5388
5508
  disabled: _angular_core.InputSignal<boolean>;
5509
+ /**
5510
+ * Test-id applied to the file-picker container. Rendered under whichever attribute name
5511
+ * is configured via `TN_TEST_ATTR` (default `data-testid`).
5512
+ */
5513
+ testId: _angular_core.InputSignal<string | undefined>;
5389
5514
  startPath: _angular_core.InputSignal<string>;
5390
5515
  rootPath: _angular_core.InputSignal<string | undefined>;
5391
5516
  fileExtensions: _angular_core.InputSignal<string[] | undefined>;
@@ -5444,7 +5569,7 @@ declare class TnFilePickerComponent implements ControlValueAccessor, OnInit, OnD
5444
5569
  private emitError;
5445
5570
  private createOverlay;
5446
5571
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnFilePickerComponent, never>;
5447
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnFilePickerComponent, "tn-file-picker", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "multiSelect": { "alias": "multiSelect"; "required": false; "isSignal": true; }; "allowCreate": { "alias": "allowCreate"; "required": false; "isSignal": true; }; "allowDatasetCreate": { "alias": "allowDatasetCreate"; "required": false; "isSignal": true; }; "allowZvolCreate": { "alias": "allowZvolCreate"; "required": false; "isSignal": true; }; "allowManualInput": { "alias": "allowManualInput"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "startPath": { "alias": "startPath"; "required": false; "isSignal": true; }; "rootPath": { "alias": "rootPath"; "required": false; "isSignal": true; }; "fileExtensions": { "alias": "fileExtensions"; "required": false; "isSignal": true; }; "callbacks": { "alias": "callbacks"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "pathChange": "pathChange"; "createFolder": "createFolder"; "error": "error"; }, never, never, true, never>;
5572
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnFilePickerComponent, "tn-file-picker", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "multiSelect": { "alias": "multiSelect"; "required": false; "isSignal": true; }; "allowCreate": { "alias": "allowCreate"; "required": false; "isSignal": true; }; "allowDatasetCreate": { "alias": "allowDatasetCreate"; "required": false; "isSignal": true; }; "allowZvolCreate": { "alias": "allowZvolCreate"; "required": false; "isSignal": true; }; "allowManualInput": { "alias": "allowManualInput"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; "startPath": { "alias": "startPath"; "required": false; "isSignal": true; }; "rootPath": { "alias": "rootPath"; "required": false; "isSignal": true; }; "fileExtensions": { "alias": "fileExtensions"; "required": false; "isSignal": true; }; "callbacks": { "alias": "callbacks"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "pathChange": "pathChange"; "createFolder": "createFolder"; "error": "error"; }, never, never, true, never>;
5448
5573
  }
5449
5574
 
5450
5575
  declare class TnFilePickerPopupComponent implements OnInit, AfterViewInit, AfterViewChecked {
@@ -5883,6 +6008,32 @@ declare class TnKeyboardShortcutService {
5883
6008
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<TnKeyboardShortcutService>;
5884
6009
  }
5885
6010
 
6011
+ /**
6012
+ * Test-id attribute names supported by the library.
6013
+ *
6014
+ * - `'data-testid'` is the modern industry default and the library's out-of-the-box behavior.
6015
+ * - `'data-test'` exists for consumers that have an established convention they don't want to disrupt
6016
+ * (notably webui, which has thousands of selectors targeting `data-test`).
6017
+ */
6018
+ type TnTestAttrName = 'data-test' | 'data-testid';
6019
+ /**
6020
+ * Controls which attribute name the library renders `testId` values to.
6021
+ *
6022
+ * Defaults to `'data-testid'`. Consumers can override at the application root:
6023
+ *
6024
+ * ```ts
6025
+ * bootstrapApplication(AppComponent, {
6026
+ * providers: [
6027
+ * { provide: TN_TEST_ATTR, useValue: 'data-test' },
6028
+ * ],
6029
+ * });
6030
+ * ```
6031
+ *
6032
+ * Every component-level `testId` input and every `[tnTestId]` directive usage reads this token
6033
+ * so that a single override switches the entire library consistently.
6034
+ */
6035
+ declare const TN_TEST_ATTR: InjectionToken<TnTestAttrName>;
6036
+
5886
6037
  /**
5887
6038
  * Enum of available theme names.
5888
6039
  * Use these constants instead of hardcoded strings.
@@ -6077,5 +6228,5 @@ declare const TN_THEME_DEFINITIONS: readonly TnThemeDefinition[];
6077
6228
  */
6078
6229
  declare const THEME_MAP: Map<TnTheme, TnThemeDefinition>;
6079
6230
 
6080
- export { CommonShortcuts, DEFAULT_THEME, DiskIconComponent, DiskType, FileSizePipe, InputType, LIGHT_THEME, LinuxModifierKeys, LinuxShortcuts, ModifierKeys, QuickShortcuts, ShortcutBuilder, StripMntPrefixPipe, THEME_MAP, THEME_STORAGE_KEY, TN_THEME_DEFINITIONS, TnAutocompleteComponent, TnAutocompleteHarness, TnBannerActionDirective, TnBannerComponent, TnBannerHarness, TnBrandedSpinnerComponent, TnButtonComponent, TnButtonHarness, TnButtonToggleComponent, TnButtonToggleGroupComponent, TnButtonToggleGroupHarness, TnButtonToggleHarness, TnCalendarComponent, TnCalendarHeaderComponent, TnCardComponent, TnCardHeaderDirective, TnCellDefDirective, TnCheckboxComponent, TnCheckboxHarness, TnCheckboxLabelDirective, TnChipComponent, TnConfirmDialogComponent, TnDateInputComponent, TnDateInputHarness, TnDateRangeInputComponent, TnDateRangeInputHarness, TnDetailRowDefDirective, TnDialog, TnDialogHarness, TnDialogShellComponent, TnDialogTesting, TnDividerComponent, TnDividerDirective, TnDrawerComponent, TnDrawerContainerComponent, TnDrawerContainerHarness, TnDrawerContentComponent, TnDrawerHarness, TnEmptyComponent, TnEmptyHarness, TnExpansionPanelComponent, TnExpansionPanelHarness, TnFilePickerComponent, TnFilePickerPopupComponent, TnFormFieldComponent, TnFormFieldHarness, TnHeaderCellDefDirective, TnIconButtonComponent, TnIconButtonHarness, TnIconComponent, TnIconHarness, TnIconRegistryService, TnIconTesting, TnInputComponent, TnInputDirective, TnInputHarness, TnKeyboardShortcutComponent, TnKeyboardShortcutService, TnListAvatarDirective, TnListComponent, TnListIconDirective, TnListItemComponent, TnListItemLineDirective, TnListItemPrimaryDirective, TnListItemSecondaryDirective, TnListItemTitleDirective, TnListItemTrailingDirective, TnListOptionComponent, TnListSubheaderComponent, TnMenuActivateHoverDirective, TnMenuComponent, TnMenuHarness, TnMenuTesting, TnMenuTriggerDirective, TnMonthViewComponent, TnMultiYearViewComponent, TnNestedTreeNodeComponent, TnParticleProgressBarComponent, TnProgressBarComponent, TnRadioComponent, TnRadioHarness, TnSelectComponent, TnSelectHarness, TnSelectionListComponent, TnSidePanelActionDirective, TnSidePanelComponent, TnSidePanelHarness, TnSidePanelHeaderActionDirective, TnSlideToggleComponent, TnSlideToggleHarness, TnSliderComponent, TnSliderThumbDirective, TnSliderWithLabelDirective, TnSpinnerComponent, TnSpriteLoaderService, TnStepComponent, TnStepperComponent, TnTabComponent, TnTabHarness, TnTabPanelComponent, TnTabPanelHarness, TnTableColumnDirective, TnTableComponent, TnTableHarness, TnTabsComponent, TnTabsHarness, TnTheme, TnThemeService, TnTimeInputComponent, TnToastComponent, TnToastMock, TnToastPosition, TnToastRef, TnToastService, TnToastTesting, TnToastType, TnTooltipComponent, TnTooltipDirective, TnTreeComponent, TnTreeFlatDataSource, TnTreeFlattener, TnTreeNodeComponent, TnTreeNodeOutletDirective, TruncatePathPipe, WindowsModifierKeys, WindowsShortcuts, createLucideLibrary, createShortcut, defaultSpriteBasePath, defaultSpriteConfigPath, libIconMarker, registerLucideIcons, setupLucideIntegration, tnIconMarker };
6081
- export type { AutocompleteHarnessFilters, BannerHarnessFilters, ButtonHarnessFilters, ButtonToggleHarnessFilters, CalendarCell, CheckboxHarnessFilters, ChipColor, CreateFolderEvent, DateInputHarnessFilters, DateRange, DateRangeInputHarnessFilters, DialogHarnessFilters, EmptyHarnessFilters, ExpansionPanelHarnessFilters, FilePickerCallbacks, FilePickerError, FilePickerMode, FileSystemItem, FormFieldHarnessFilters, IconButtonHarnessFilters, IconHarnessFilters, IconLibrary, IconLibraryType, IconResult, IconSize, IconSource, IconTestingMockOverrides, InputHarnessFilters, KeyCombination, LabelType, LucideIconOptions, MenuHarnessFilters, MockIconRegistry, MockSpriteLoader, PathSegment, PlatformType, ProgressBarMode, RadioHarnessFilters, ResolvedIcon, SelectHarnessFilters, ShortcutHandler, SidePanelHarnessFilters, SlideToggleColor, SlideToggleHarnessFilters, SpinnerMode, SpriteConfig, SubscriptSizing, TabChangeEvent, TabHarnessFilters, TabPanelHarnessFilters, TabsHarnessFilters, TnBannerType, TnButtonToggleType, TnCardAction, TnCardControl, TnCardFooterLink, TnCardHeaderStatus, TnConfirmDialogData, TnDialogDefaults, TnDialogOpenTarget, TnDrawerMode, TnDrawerPosition, TnEmptySize, TnFlatTreeNode, TnMenuItem, TnSelectOption, TnSelectOptionGroup, TnSelectionChange, TnSortEvent, TnTableDataSource, TnTableHarnessFilters, TnThemeDefinition, TnToastCall, TnToastConfig, TooltipPosition, YearCell };
6231
+ export { CommonShortcuts, DEFAULT_THEME, DiskIconComponent, DiskType, FileSizePipe, InputType, LIGHT_THEME, LinuxModifierKeys, LinuxShortcuts, ModifierKeys, QuickShortcuts, ShortcutBuilder, StripMntPrefixPipe, THEME_MAP, THEME_STORAGE_KEY, TN_TEST_ATTR, TN_THEME_DEFINITIONS, TnAutocompleteComponent, TnAutocompleteHarness, TnBannerActionDirective, TnBannerComponent, TnBannerHarness, TnBrandedSpinnerComponent, TnButtonComponent, TnButtonHarness, TnButtonToggleComponent, TnButtonToggleGroupComponent, TnButtonToggleGroupHarness, TnButtonToggleHarness, TnCalendarComponent, TnCalendarHeaderComponent, TnCardComponent, TnCardHeaderDirective, TnCellDefDirective, TnCheckboxComponent, TnCheckboxHarness, TnCheckboxLabelDirective, TnChipComponent, TnConfirmDialogComponent, TnDateInputComponent, TnDateInputHarness, TnDateRangeInputComponent, TnDateRangeInputHarness, TnDetailRowDefDirective, TnDialog, TnDialogHarness, TnDialogShellComponent, TnDialogTesting, TnDividerComponent, TnDividerDirective, TnDrawerComponent, TnDrawerContainerComponent, TnDrawerContainerHarness, TnDrawerContentComponent, TnDrawerHarness, TnEmptyComponent, TnEmptyHarness, TnExpansionPanelComponent, TnExpansionPanelHarness, TnFilePickerComponent, TnFilePickerPopupComponent, TnFormFieldComponent, TnFormFieldHarness, TnHeaderCellDefDirective, TnIconButtonComponent, TnIconButtonHarness, TnIconComponent, TnIconHarness, TnIconRegistryService, TnIconTesting, TnInputComponent, TnInputDirective, TnInputHarness, TnKeyboardShortcutComponent, TnKeyboardShortcutService, TnListAvatarDirective, TnListComponent, TnListIconDirective, TnListItemComponent, TnListItemLineDirective, TnListItemPrimaryDirective, TnListItemSecondaryDirective, TnListItemTitleDirective, TnListItemTrailingDirective, TnListOptionComponent, TnListSubheaderComponent, TnMenuActivateHoverDirective, TnMenuComponent, TnMenuHarness, TnMenuTesting, TnMenuTriggerDirective, TnMonthViewComponent, TnMultiYearViewComponent, TnNestedTreeNodeComponent, TnParticleProgressBarComponent, TnProgressBarComponent, TnRadioComponent, TnRadioHarness, TnSelectComponent, TnSelectHarness, TnSelectionListComponent, TnSidePanelActionDirective, TnSidePanelComponent, TnSidePanelHarness, TnSidePanelHeaderActionDirective, TnSlideToggleComponent, TnSlideToggleHarness, TnSliderComponent, TnSliderThumbDirective, TnSliderWithLabelDirective, TnSpinnerComponent, TnSpriteLoaderService, TnStepComponent, TnStepperComponent, TnTabComponent, TnTabHarness, TnTabPanelComponent, TnTabPanelHarness, TnTableColumnDirective, TnTableComponent, TnTableHarness, TnTabsComponent, TnTabsHarness, TnTestIdDirective, TnTheme, TnThemeService, TnTimeInputComponent, TnToastComponent, TnToastMock, TnToastPosition, TnToastRef, TnToastService, TnToastTesting, TnToastType, TnTooltipComponent, TnTooltipDirective, TnTreeComponent, TnTreeFlatDataSource, TnTreeFlattener, TnTreeNodeComponent, TnTreeNodeOutletDirective, TruncatePathPipe, WindowsModifierKeys, WindowsShortcuts, createLucideLibrary, createShortcut, defaultSpriteBasePath, defaultSpriteConfigPath, libIconMarker, registerLucideIcons, setupLucideIntegration, tnIconMarker };
6232
+ export type { AutocompleteHarnessFilters, BannerHarnessFilters, ButtonHarnessFilters, ButtonToggleHarnessFilters, CalendarCell, CheckboxHarnessFilters, ChipColor, CreateFolderEvent, DateInputHarnessFilters, DateRange, DateRangeInputHarnessFilters, DialogHarnessFilters, EmptyHarnessFilters, ExpansionPanelHarnessFilters, FilePickerCallbacks, FilePickerError, FilePickerMode, FileSystemItem, FormFieldHarnessFilters, IconButtonHarnessFilters, IconHarnessFilters, IconLibrary, IconLibraryType, IconResult, IconSize, IconSource, IconTestingMockOverrides, InputHarnessFilters, KeyCombination, LabelType, LucideIconOptions, MenuHarnessFilters, MockIconRegistry, MockSpriteLoader, PathSegment, PlatformType, ProgressBarMode, RadioHarnessFilters, ResolvedIcon, SelectHarnessFilters, ShortcutHandler, SidePanelHarnessFilters, SlideToggleColor, SlideToggleHarnessFilters, SpinnerMode, SpriteConfig, SubscriptSizing, TabChangeEvent, TabHarnessFilters, TabPanelHarnessFilters, TabsHarnessFilters, TnBannerType, TnButtonToggleType, TnCardAction, TnCardControl, TnCardFooterLink, TnCardHeaderStatus, TnConfirmDialogData, TnDialogDefaults, TnDialogOpenTarget, TnDrawerMode, TnDrawerPosition, TnEmptySize, TnFlatTreeNode, TnMenuItem, TnSelectOption, TnSelectOptionGroup, TnSelectionChange, TnSortEvent, TnTableDataSource, TnTableHarnessFilters, TnTestAttrName, TnThemeDefinition, TnToastCall, TnToastConfig, TooltipPosition, YearCell };