@truenas/ui-components 0.1.67 → 0.1.69

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.67",
3
+ "version": "0.1.69",
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 { OnDestroy, ElementRef, AfterViewInit, OnInit, TemplateRef, AfterContentInit, Provider, ChangeDetectorRef, InjectionToken, Signal, PipeTransform, ViewContainerRef, AfterViewChecked, ComponentRef } from '@angular/core';
2
+ import { OnDestroy, ElementRef, InjectionToken, AfterViewInit, OnInit, TemplateRef, AfterContentInit, Provider, ChangeDetectorRef, Signal, PipeTransform, ViewContainerRef, AfterViewChecked, ComponentRef } 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';
@@ -11,7 +11,7 @@ import * as i1 from '@angular/cdk/tree';
11
11
  import { CdkTree, FlatTreeControl, CdkTreeNode, CdkNestedTreeNode } from '@angular/cdk/tree';
12
12
  export { FlatTreeControl } from '@angular/cdk/tree';
13
13
  import { Overlay } from '@angular/cdk/overlay';
14
- import { DialogConfig, DialogRef } from '@angular/cdk/dialog';
14
+ import { DialogRef, DialogConfig } from '@angular/cdk/dialog';
15
15
  import { ComponentType } from '@angular/cdk/portal';
16
16
 
17
17
  declare class TnAutocompleteComponent<T = unknown> implements ControlValueAccessor, OnDestroy {
@@ -289,6 +289,113 @@ interface AutocompleteHarnessFilters extends BaseHarnessFilters {
289
289
  placeholder?: string;
290
290
  }
291
291
 
292
+ /**
293
+ * Value shapes accepted as a test-id base.
294
+ *
295
+ * A consumer supplies the *semantic* part of a test id — a single token
296
+ * (`'save'`, `'username'`) or an ordered list of segments
297
+ * (`['username', option.value]`). The library owns the element-type prefix and
298
+ * the final string assembly; consumers never hand-craft the full id.
299
+ */
300
+ type TnTestIdValue = string | number | (string | number | null | undefined)[] | null | undefined;
301
+ /**
302
+ * Normalize one segment to a kebab-case token: split camelCase, lower-case,
303
+ * collapse any run of non-alphanumeric characters to a single hyphen, and trim
304
+ * leading/trailing hyphens.
305
+ *
306
+ * Mirrors the normalization webui's legacy `ixTest` directive applied via
307
+ * lodash `kebabCase`, so migrated values stay stable (`sshPort` → `ssh-port`,
308
+ * `addr_trtype` → `addr-trtype`, `'My Label'` → `my-label`).
309
+ */
310
+ declare function kebabTestSegment(part: string | number): string;
311
+ /**
312
+ * Compose the canonical test-id string: `${type}-${...segments}`.
313
+ *
314
+ * - `type` is the element-type prefix the component declares (e.g. `'button'`,
315
+ * `'option'`, `'menu-item'`). Pass `null`/`undefined` for no prefix.
316
+ * - `value` is the consumer-provided base — a single token or an array of
317
+ * segments (used to scope dynamic/repeated children, e.g. `[base, item.id]`).
318
+ *
319
+ * Falsy/empty parts are dropped, every part is kebab-normalized, and parts are
320
+ * joined with `-`. Returns `''` when nothing usable remains — callers treat
321
+ * `''` as "render no attribute" (avoids `data-testid=""`).
322
+ *
323
+ * @example
324
+ * composeTestId('button', 'save') // 'button-save'
325
+ * composeTestId('option', ['username', 'Jane Doe'])// 'option-username-jane-doe'
326
+ * composeTestId('menu-item', [undefined, 'edit']) // 'menu-item-edit' (no base → unscoped)
327
+ * composeTestId('menu-item', ['actions', 'edit']) // 'menu-item-actions-edit'
328
+ * composeTestId(undefined, 'already-made') // 'already-made' (verbatim passthrough)
329
+ * composeTestId('button', 'button-first-page') // 'button-first-page' (idempotent — not doubled)
330
+ */
331
+ declare function composeTestId(type: string | null | undefined, value: TnTestIdValue): string;
332
+
333
+ /**
334
+ * Test-id attribute names supported by the library.
335
+ *
336
+ * - `'data-testid'` is the modern industry default and the library's out-of-the-box behavior.
337
+ * - `'data-test'` exists for consumers that have an established convention they don't want to disrupt
338
+ * (notably webui, which has thousands of selectors targeting `data-test`).
339
+ */
340
+ type TnTestAttrName = 'data-test' | 'data-testid';
341
+ /**
342
+ * Controls which attribute name the library renders `testId` values to.
343
+ *
344
+ * Defaults to `'data-testid'`. Consumers can override at the application root:
345
+ *
346
+ * ```ts
347
+ * bootstrapApplication(AppComponent, {
348
+ * providers: [
349
+ * { provide: TN_TEST_ATTR, useValue: 'data-test' },
350
+ * ],
351
+ * });
352
+ * ```
353
+ *
354
+ * Every component-level `testId` input and every `[tnTestId]` directive usage reads this token
355
+ * so that a single override switches the entire library consistently.
356
+ */
357
+ declare const TN_TEST_ATTR: InjectionToken<TnTestAttrName>;
358
+
359
+ /**
360
+ * Writes a composed `testId` value to whichever attribute name is configured via
361
+ * {@link TN_TEST_ATTR} (default `data-testid`).
362
+ *
363
+ * The library owns the whole id: the consumer passes only the *semantic* base
364
+ * (`tnTestId`), the component declares its element type (`tnTestIdType`), and
365
+ * this directive assembles `${type}-${base}` (kebab-cased, see
366
+ * {@link composeTestId}). When no `tnTestIdType` is set the value is written
367
+ * verbatim, so existing call sites are unaffected.
368
+ *
369
+ * @example
370
+ * ```html
371
+ * <!-- component-owned prefix: emits data-testid="button-save" -->
372
+ * <button [tnTestId]="'save'" tnTestIdType="button">Save</button>
373
+ *
374
+ * <!-- array base scopes a dynamic child: emits data-testid="option-username-jane-doe" -->
375
+ * <li [tnTestId]="['username', option.label]" tnTestIdType="option"></li>
376
+ *
377
+ * <!-- no type: written verbatim (legacy behavior) -->
378
+ * <button [tnTestId]="myTestId()">Click me</button>
379
+ * ```
380
+ *
381
+ * Falsy / empty results remove the attribute entirely (avoids `data-testid=""`).
382
+ */
383
+ declare class TnTestIdDirective {
384
+ private readonly renderer;
385
+ private readonly host;
386
+ private readonly attrName;
387
+ /** The semantic base value (token or ordered segments). Falsy parts are dropped. */
388
+ readonly testId: _angular_core.InputSignal<TnTestIdValue>;
389
+ /**
390
+ * Element-type prefix the component declares (e.g. `'button'`, `'option'`).
391
+ * Omit to write the base verbatim with no prefix.
392
+ */
393
+ readonly tnTestIdType: _angular_core.InputSignal<string | null | undefined>;
394
+ constructor();
395
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnTestIdDirective, never>;
396
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TnTestIdDirective, "[tnTestId]", never, { "testId": { "alias": "tnTestId"; "required": false; "isSignal": true; }; "tnTestIdType": { "alias": "tnTestIdType"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
397
+ }
398
+
292
399
  type TnDrawerMode = 'side' | 'over';
293
400
  type TnDrawerPosition = 'start' | 'end';
294
401
  declare class TnDrawerComponent implements OnDestroy {
@@ -309,7 +416,7 @@ declare class TnDrawerComponent implements OnDestroy {
309
416
  * Test-id applied to the drawer panel. Rendered under whichever attribute name is
310
417
  * configured via `TN_TEST_ATTR` (default `data-testid`).
311
418
  */
312
- testId: _angular_core.InputSignal<string | undefined>;
419
+ testId: _angular_core.InputSignal<TnTestIdValue>;
313
420
  /** Fires after the open transition completes */
314
421
  openedComplete: _angular_core.OutputEmitterRef<void>;
315
422
  /** Fires after the close transition completes */
@@ -568,10 +675,13 @@ declare class TnButtonComponent implements AfterViewInit {
568
675
  label: _angular_core.InputSignal<string>;
569
676
  disabled: _angular_core.InputSignal<boolean>;
570
677
  /**
571
- * Test-id applied to the rendered element. Rendered under whichever attribute
572
- * name is configured via `TN_TEST_ATTR` (default `data-testid`).
678
+ * Semantic test-id base for the rendered element. The library prepends the
679
+ * element type (`button`) and renders the result under whichever attribute
680
+ * name is configured via `TN_TEST_ATTR` (default `data-testid`) — e.g.
681
+ * `testId="save"` → `button-save`. Accepts an array of segments to scope the
682
+ * id (e.g. `[formControlName, 'submit']`).
573
683
  */
574
- testId: _angular_core.InputSignal<string | undefined>;
684
+ testId: _angular_core.InputSignal<TnTestIdValue>;
575
685
  /**
576
686
  * Renders the button as an `<a>` with a plain `href` attribute.
577
687
  * Mutually exclusive with `routerLink` — if both are provided, `routerLink` wins.
@@ -807,10 +917,12 @@ declare class TnIconButtonComponent implements AfterViewInit {
807
917
  /** Reflects an expanded/collapsed state (e.g. toggling a panel) onto the inner button. */
808
918
  ariaExpanded: _angular_core.InputSignal<boolean | undefined>;
809
919
  /**
810
- * Test-id applied to the rendered `<button>` element. Rendered under whichever attribute
811
- * name is configured via `TN_TEST_ATTR` (default `data-testid`).
920
+ * Semantic test-id base for the rendered `<button>`. The library prepends the
921
+ * element type (`button`) and renders the result under whichever attribute
922
+ * name is configured via `TN_TEST_ATTR` (default `data-testid`) — e.g.
923
+ * `testId="first-page"` → `button-first-page`.
812
924
  */
813
- testId: _angular_core.InputSignal<string | undefined>;
925
+ testId: _angular_core.InputSignal<TnTestIdValue>;
814
926
  name: _angular_core.InputSignal<string>;
815
927
  size: _angular_core.InputSignal<IconSize>;
816
928
  color: _angular_core.InputSignal<string | undefined>;
@@ -996,7 +1108,7 @@ declare class TnInputComponent implements AfterViewInit, OnDestroy, ControlValue
996
1108
  inputEl: _angular_core.Signal<ElementRef<HTMLInputElement | HTMLTextAreaElement>>;
997
1109
  inputType: _angular_core.InputSignal<InputType>;
998
1110
  placeholder: _angular_core.InputSignal<string>;
999
- testId: _angular_core.InputSignal<string | undefined>;
1111
+ testId: _angular_core.InputSignal<TnTestIdValue>;
1000
1112
  disabled: _angular_core.InputSignal<boolean>;
1001
1113
  multiline: _angular_core.InputSignal<boolean>;
1002
1114
  rows: _angular_core.InputSignal<number>;
@@ -1403,7 +1515,7 @@ declare class TnChipComponent implements AfterViewInit, OnDestroy {
1403
1515
  closable: _angular_core.InputSignal<boolean>;
1404
1516
  disabled: _angular_core.InputSignal<boolean>;
1405
1517
  color: _angular_core.InputSignal<ChipColor>;
1406
- testId: _angular_core.InputSignal<string | undefined>;
1518
+ testId: _angular_core.InputSignal<TnTestIdValue>;
1407
1519
  onClose: _angular_core.OutputEmitterRef<void>;
1408
1520
  onClick: _angular_core.OutputEmitterRef<MouseEvent>;
1409
1521
  private focusMonitor;
@@ -1526,16 +1638,20 @@ declare class TnMenuItemComponent {
1526
1638
  }
1527
1639
 
1528
1640
  /**
1529
- * Activates CDK menu hover-to-open behavior for menus opened via custom overlays.
1641
+ * Activates CDK menu hover-to-open behavior and keyboard focus entry — for a
1642
+ * root menu opened via a custom overlay instead of CDK's own `CdkMenuTrigger`.
1530
1643
  *
1531
1644
  * CDK's hover-to-open for submenu triggers is guarded by `!menuStack.isEmpty()`.
1532
- * When a CdkMenu is opened via TnMenuTriggerDirective (custom overlay) instead of
1533
- * CDK's own CdkMenuTrigger, the menu is considered "inline" and doesn't register
1534
- * with the stack, disabling hover for its submenu triggers.
1535
- *
1536
- * This directive pushes the CdkMenu to its own stack and focuses the element
1537
- * (to trigger the CdkMenu's focusin host listener, preventing the hasFocus
1538
- * auto-close subscription from immediately clearing the stack).
1645
+ * When a `CdkMenu` is opened via `TnMenuTriggerDirective` (custom overlay)
1646
+ * rather than `CdkMenuTrigger`, the menu is considered "inline" and doesn't
1647
+ * register with the stack, disabling hover for its submenu triggers and leaving
1648
+ * keyboard focus outside the panel.
1649
+ *
1650
+ * This directive pushes that root menu onto its own stack and moves focus to
1651
+ * the first (or selected) item so arrow-key navigation works immediately.
1652
+ * Submenus — opened by `CdkMenuTrigger` — already push themselves and are
1653
+ * focused by CDK, so for them this directive only installs the skip-disabled
1654
+ * predicate and otherwise stays out of the way.
1539
1655
  */
1540
1656
  declare class TnMenuActivateHoverDirective implements AfterContentInit {
1541
1657
  private cdkMenu;
@@ -1544,6 +1660,7 @@ declare class TnMenuActivateHoverDirective implements AfterContentInit {
1544
1660
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnMenuActivateHoverDirective, never>;
1545
1661
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TnMenuActivateHoverDirective, "[tnMenuActivateHover]", never, {}, {}, never, never, true, never>;
1546
1662
  }
1663
+
1547
1664
  interface TnMenuItem {
1548
1665
  id: string;
1549
1666
  label: string;
@@ -1565,6 +1682,14 @@ interface TnMenuItem {
1565
1682
  declare class TnMenuComponent implements OnDestroy {
1566
1683
  items: _angular_core.InputSignal<TnMenuItem[]>;
1567
1684
  contextMenu: _angular_core.InputSignal<boolean>;
1685
+ /**
1686
+ * Semantic base that scopes the test ids of this menu's items. Each item
1687
+ * resolves to `menu-item-${testId}-${item.id}` (e.g. menu `testId="actions"`
1688
+ * + item `id="edit"` → `menu-item-actions-edit`), which keeps ids unique when
1689
+ * several menus render on one page. Omit it and items fall back to the
1690
+ * unscoped `menu-item-${item.id}`. A per-item `testId` overrides both.
1691
+ */
1692
+ testId: _angular_core.InputSignal<string | undefined>;
1568
1693
  menuItemClick: _angular_core.OutputEmitterRef<TnMenuItem>;
1569
1694
  menuOpen: _angular_core.OutputEmitterRef<void>;
1570
1695
  menuClose: _angular_core.OutputEmitterRef<void>;
@@ -1593,9 +1718,8 @@ declare class TnMenuComponent implements OnDestroy {
1593
1718
  private closeContextMenu;
1594
1719
  ngOnDestroy(): void;
1595
1720
  onContextMenu(event: MouseEvent): void;
1596
- trackByItemId(index: number, item: TnMenuItem): string;
1597
1721
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnMenuComponent, never>;
1598
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnMenuComponent, "tn-menu", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "contextMenu": { "alias": "contextMenu"; "required": false; "isSignal": true; }; }, { "menuItemClick": "menuItemClick"; "menuOpen": "menuOpen"; "menuClose": "menuClose"; }, ["contentItems"], ["*"], true, never>;
1722
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnMenuComponent, "tn-menu", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "contextMenu": { "alias": "contextMenu"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; }, { "menuItemClick": "menuItemClick"; "menuOpen": "menuOpen"; "menuClose": "menuClose"; }, ["contentItems"], ["*"], true, never>;
1599
1723
  }
1600
1724
 
1601
1725
  declare class TnCardComponent {
@@ -1651,11 +1775,11 @@ declare class TnExpansionPanelComponent {
1651
1775
  * Test-id applied to the panel's root element. Rendered under whichever attribute name
1652
1776
  * is configured via `TN_TEST_ATTR` (default `data-testid`).
1653
1777
  */
1654
- testId: _angular_core.InputSignal<string | undefined>;
1778
+ testId: _angular_core.InputSignal<TnTestIdValue>;
1655
1779
  /**
1656
1780
  * Test-id applied to the expand/collapse toggle header button.
1657
1781
  */
1658
- toggleTestId: _angular_core.InputSignal<string | undefined>;
1782
+ toggleTestId: _angular_core.InputSignal<TnTestIdValue>;
1659
1783
  expandedChange: _angular_core.OutputEmitterRef<boolean>;
1660
1784
  toggleEvent: _angular_core.OutputEmitterRef<void>;
1661
1785
  private internalExpanded;
@@ -1806,7 +1930,7 @@ declare class TnCheckboxComponent implements AfterViewInit, OnDestroy, ControlVa
1806
1930
  disabled: _angular_core.InputSignal<boolean>;
1807
1931
  required: _angular_core.InputSignal<boolean>;
1808
1932
  indeterminate: _angular_core.InputSignal<boolean>;
1809
- testId: _angular_core.InputSignal<string | undefined>;
1933
+ testId: _angular_core.InputSignal<TnTestIdValue>;
1810
1934
  error: _angular_core.InputSignal<string | null>;
1811
1935
  checked: _angular_core.InputSignal<boolean>;
1812
1936
  change: _angular_core.OutputEmitterRef<boolean>;
@@ -2015,7 +2139,7 @@ declare class TnRadioComponent implements AfterViewInit, OnDestroy, ControlValue
2015
2139
  name: _angular_core.InputSignal<string | undefined>;
2016
2140
  disabled: _angular_core.InputSignal<boolean>;
2017
2141
  required: _angular_core.InputSignal<boolean>;
2018
- testId: _angular_core.InputSignal<string | undefined>;
2142
+ testId: _angular_core.InputSignal<TnTestIdValue>;
2019
2143
  error: _angular_core.InputSignal<string | null>;
2020
2144
  change: _angular_core.OutputEmitterRef<unknown>;
2021
2145
  id: string;
@@ -2158,7 +2282,7 @@ declare class TnSlideToggleComponent implements AfterViewInit, OnDestroy, Contro
2158
2282
  disabled: _angular_core.InputSignal<boolean>;
2159
2283
  required: _angular_core.InputSignal<boolean>;
2160
2284
  color: _angular_core.InputSignal<SlideToggleColor>;
2161
- testId: _angular_core.InputSignal<string | undefined>;
2285
+ testId: _angular_core.InputSignal<TnTestIdValue>;
2162
2286
  ariaLabel: _angular_core.InputSignal<string | undefined>;
2163
2287
  ariaLabelledby: _angular_core.InputSignal<string | undefined>;
2164
2288
  checked: _angular_core.InputSignal<boolean>;
@@ -2271,7 +2395,7 @@ declare class TnTabComponent implements AfterContentInit {
2271
2395
  disabled: _angular_core.InputSignal<boolean>;
2272
2396
  icon: _angular_core.InputSignal<string | undefined>;
2273
2397
  iconTemplate: _angular_core.InputSignal<TemplateRef<unknown> | undefined>;
2274
- testId: _angular_core.InputSignal<string | undefined>;
2398
+ testId: _angular_core.InputSignal<TnTestIdValue>;
2275
2399
  selected: _angular_core.OutputEmitterRef<void>;
2276
2400
  iconContent: _angular_core.Signal<TemplateRef<unknown> | undefined>;
2277
2401
  index: _angular_core.WritableSignal<number>;
@@ -2295,7 +2419,7 @@ declare class TnTabComponent implements AfterContentInit {
2295
2419
  declare class TnTabPanelComponent {
2296
2420
  label: _angular_core.InputSignal<string>;
2297
2421
  lazyLoad: _angular_core.InputSignal<boolean>;
2298
- testId: _angular_core.InputSignal<string | undefined>;
2422
+ testId: _angular_core.InputSignal<TnTestIdValue>;
2299
2423
  content: _angular_core.Signal<TemplateRef<unknown>>;
2300
2424
  index: _angular_core.WritableSignal<number>;
2301
2425
  isActive: _angular_core.WritableSignal<boolean>;
@@ -2324,7 +2448,7 @@ declare class TnTabsComponent implements AfterContentInit, AfterViewInit, OnDest
2324
2448
  * Test-id applied to the tablist root element. Rendered under whichever attribute name
2325
2449
  * is configured via `TN_TEST_ATTR` (default `data-testid`).
2326
2450
  */
2327
- testId: _angular_core.InputSignal<string | undefined>;
2451
+ testId: _angular_core.InputSignal<TnTestIdValue>;
2328
2452
  selectedIndexChange: _angular_core.OutputEmitterRef<number>;
2329
2453
  tabChange: _angular_core.OutputEmitterRef<TabChangeEvent>;
2330
2454
  private internalSelectedIndex;
@@ -2959,7 +3083,7 @@ declare class TnFormFieldComponent implements AfterContentInit {
2959
3083
  label: _angular_core.InputSignal<string>;
2960
3084
  hint: _angular_core.InputSignal<string>;
2961
3085
  required: _angular_core.InputSignal<boolean>;
2962
- testId: _angular_core.InputSignal<string>;
3086
+ testId: _angular_core.InputSignal<TnTestIdValue>;
2963
3087
  subscriptSizing: _angular_core.InputSignal<SubscriptSizing>;
2964
3088
  /** Optional tooltip shown via a help icon next to the label. */
2965
3089
  tooltip: _angular_core.InputSignal<string>;
@@ -3191,6 +3315,18 @@ declare class TnSelectComponent<T = unknown> implements ControlValueAccessor, On
3191
3315
  disabled: _angular_core.InputSignal<boolean>;
3192
3316
  testId: _angular_core.InputSignal<string>;
3193
3317
  multiple: _angular_core.InputSignal<boolean>;
3318
+ /**
3319
+ * Optional extractor for the per-option test-id discriminator. Defaults to
3320
+ * the option's `value` (when a string/number) or its `label`. Provide this
3321
+ * when option values are objects, or to pick a more stable/unique key —
3322
+ * mirrors webui's `[ixTest]="[controlName, option.<field>]"` discriminator.
3323
+ *
3324
+ * @example
3325
+ * ```html
3326
+ * <tn-select testId="user" [optionTestIdKey]="(o) => o.value.id" ... />
3327
+ * ```
3328
+ */
3329
+ optionTestIdKey: _angular_core.InputSignal<((option: TnSelectOption<T>) => string | number | null | undefined) | undefined>;
3194
3330
  /**
3195
3331
  * Custom comparator for matching option values against the selected value(s).
3196
3332
  *
@@ -3240,6 +3376,15 @@ declare class TnSelectComponent<T = unknown> implements ControlValueAccessor, On
3240
3376
  optionId(option: TnSelectOption<T>): string | null;
3241
3377
  /** Whether `option` is the keyboard-highlighted item. */
3242
3378
  isOptionFocused(option: TnSelectOption<T>): boolean;
3379
+ /**
3380
+ * Test-id segments for an option row, consumed by `[tnTestId]` with
3381
+ * `tnTestIdType="option"`. The select's `testId` scopes each option so ids
3382
+ * stay unique across selects: base `quick-filters` + option value `ssd` →
3383
+ * `option-quick-filters-ssd`; with no base → `option-ssd`. The discriminator
3384
+ * comes from `optionTestIdKey` when provided, else the option's primitive
3385
+ * `value`, else its `label`.
3386
+ */
3387
+ protected optionTestIdParts(option: TnSelectOption<T>): (string | number | null | undefined)[];
3243
3388
  private onChange;
3244
3389
  private onTouched;
3245
3390
  private elementRef;
@@ -3326,7 +3471,7 @@ declare class TnSelectComponent<T = unknown> implements ControlValueAccessor, On
3326
3471
  private activateFocusedOption;
3327
3472
  private scrollFocusedIntoView;
3328
3473
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnSelectComponent<any>, never>;
3329
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnSelectComponent<any>, "tn-select", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "optionGroups": { "alias": "optionGroups"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "noOptionsLabel": { "alias": "noOptionsLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "multiSelectionChange": "multiSelectionChange"; }, never, never, true, never>;
3474
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnSelectComponent<any>, "tn-select", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "optionGroups": { "alias": "optionGroups"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "noOptionsLabel": { "alias": "noOptionsLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "optionTestIdKey": { "alias": "optionTestIdKey"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "multiSelectionChange": "multiSelectionChange"; }, never, never, true, never>;
3330
3475
  }
3331
3476
 
3332
3477
  /**
@@ -4018,32 +4163,6 @@ declare class TnListOptionComponent implements AfterContentInit {
4018
4163
  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>;
4019
4164
  }
4020
4165
 
4021
- /**
4022
- * Primitive directive that writes a raw `testId` value to whichever attribute name has been
4023
- * configured via {@link TN_TEST_ATTR} (default `data-testid`).
4024
- *
4025
- * Library components should use this directive instead of hard-coding `[attr.data-testid]` so
4026
- * the attribute name remains centrally controlled and consumers with different conventions
4027
- * (e.g. `data-test`) can opt in with a single root-level provider.
4028
- *
4029
- * @example
4030
- * ```html
4031
- * <button [tnTestId]="myTestId()">Click me</button>
4032
- * ```
4033
- *
4034
- * Passing `null` / `undefined` / `''` removes the attribute entirely (avoids `data-testid=""`).
4035
- */
4036
- declare class TnTestIdDirective {
4037
- private readonly renderer;
4038
- private readonly host;
4039
- private readonly attrName;
4040
- /** The raw test-id value to apply. Falsy values remove the attribute. */
4041
- readonly testId: _angular_core.InputSignal<string | null | undefined>;
4042
- constructor();
4043
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnTestIdDirective, never>;
4044
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TnTestIdDirective, "[tnTestId]", never, { "testId": { "alias": "tnTestId"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4045
- }
4046
-
4047
4166
  interface TnSelectionChange {
4048
4167
  source: TnSelectionListComponent;
4049
4168
  options: TnListOptionComponent[];
@@ -4482,6 +4601,14 @@ interface TnTableDataProvider {
4482
4601
  */
4483
4602
  declare class TnTablePagerComponent {
4484
4603
  private destroyRef;
4604
+ private readonly testIdDirective;
4605
+ /**
4606
+ * Build a child control's test-id base by joining the pager's `testId` with
4607
+ * `suffix` into a single string (kebab-joined). Returning a string keeps it
4608
+ * assignable to both `tn-select`'s `string` testId and `tn-icon-button`'s
4609
+ * `TnTestIdValue` testId.
4610
+ */
4611
+ protected childTestId(suffix: string): string;
4485
4612
  /**
4486
4613
  * Normalize the injected token into a Signal so consumers can supply either
4487
4614
  * a plain object or a reactive signal (e.g. derived from a TranslateService's
@@ -5552,7 +5679,7 @@ declare class TnSliderComponent implements ControlValueAccessor, OnDestroy, Afte
5552
5679
  * Test-id applied to the slider's root container. Rendered under whichever attribute name
5553
5680
  * is configured via `TN_TEST_ATTR` (default `data-testid`).
5554
5681
  */
5555
- testId: _angular_core.InputSignal<string | undefined>;
5682
+ testId: _angular_core.InputSignal<TnTestIdValue>;
5556
5683
  thumbDirective: _angular_core.Signal<TnSliderThumbDirective>;
5557
5684
  sliderContainer: _angular_core.Signal<ElementRef<HTMLDivElement>>;
5558
5685
  thumbVisual: _angular_core.Signal<ElementRef<HTMLDivElement>>;
@@ -5633,7 +5760,7 @@ declare class TnButtonToggleGroupComponent implements ControlValueAccessor {
5633
5760
  * Test-id applied to the group root. Rendered under whichever attribute name
5634
5761
  * is configured via `TN_TEST_ATTR` (default `data-testid`).
5635
5762
  */
5636
- testId: _angular_core.InputSignal<string | undefined>;
5763
+ testId: _angular_core.InputSignal<TnTestIdValue>;
5637
5764
  change: _angular_core.OutputEmitterRef<{
5638
5765
  source: TnButtonToggleComponent;
5639
5766
  value: unknown;
@@ -5671,7 +5798,7 @@ declare class TnButtonToggleComponent implements ControlValueAccessor {
5671
5798
  * Test-id applied to the rendered toggle button. Rendered under whichever attribute name
5672
5799
  * is configured via `TN_TEST_ATTR` (default `data-testid`).
5673
5800
  */
5674
- testId: _angular_core.InputSignal<string | undefined>;
5801
+ testId: _angular_core.InputSignal<TnTestIdValue>;
5675
5802
  change: _angular_core.OutputEmitterRef<{
5676
5803
  source: TnButtonToggleComponent;
5677
5804
  value: unknown;
@@ -5864,6 +5991,27 @@ declare class TnTooltipComponent {
5864
5991
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnTooltipComponent, "tn-tooltip", never, { "message": { "alias": "message"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5865
5992
  }
5866
5993
 
5994
+ interface TnConfirmDialogData {
5995
+ title: string;
5996
+ message?: string;
5997
+ confirmText?: string;
5998
+ cancelText?: string;
5999
+ destructive?: boolean;
6000
+ /**
6001
+ * Semantic test-id bases for the library-rendered action buttons. The buttons
6002
+ * emit `button-confirm` / `button-cancel` by default (the library adds the
6003
+ * `button-` prefix); override here when a page opens more than one dialog.
6004
+ */
6005
+ confirmTestId?: string;
6006
+ cancelTestId?: string;
6007
+ }
6008
+ declare class TnConfirmDialogComponent {
6009
+ ref: DialogRef<boolean, unknown>;
6010
+ data: TnConfirmDialogData;
6011
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnConfirmDialogComponent, never>;
6012
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnConfirmDialogComponent, "tn-confirm-dialog", never, {}, {}, never, never, true, never>;
6013
+ }
6014
+
5867
6015
  type TnDialogOpenTarget<C> = ComponentType<C> | TemplateRef<unknown>;
5868
6016
  interface TnDialogDefaults {
5869
6017
  panelClass?: string | string[];
@@ -5890,13 +6038,7 @@ declare class TnDialog {
5890
6038
  /**
5891
6039
  * Open a confirmation dialog. Resolves to true if confirmed, false otherwise.
5892
6040
  */
5893
- confirm(opts: {
5894
- title: string;
5895
- message?: string;
5896
- confirmText?: string;
5897
- cancelText?: string;
5898
- destructive?: boolean;
5899
- }): Promise<boolean>;
6041
+ confirm(opts: TnConfirmDialogData): Promise<boolean>;
5900
6042
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnDialog, never>;
5901
6043
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<TnDialog>;
5902
6044
  }
@@ -5904,6 +6046,13 @@ declare class TnDialog {
5904
6046
  declare class TnDialogShellComponent implements OnInit {
5905
6047
  title: _angular_core.InputSignal<string>;
5906
6048
  showFullscreenButton: _angular_core.InputSignal<boolean>;
6049
+ /**
6050
+ * Optional semantic base that scopes the shell's chrome buttons. The close
6051
+ * and fullscreen buttons emit `button-close` / `button-fullscreen` by default,
6052
+ * or `button-<testId>-close` / `-fullscreen` when a base is provided (useful
6053
+ * when more than one dialog can be open).
6054
+ */
6055
+ testId: _angular_core.InputSignal<string | undefined>;
5907
6056
  /** Stable id for the title heading, referenced by the dialog's aria-labelledby. */
5908
6057
  readonly titleId: string;
5909
6058
  isFullscreen: _angular_core.WritableSignal<boolean>;
@@ -5919,21 +6068,7 @@ declare class TnDialogShellComponent implements OnInit {
5919
6068
  private enterFullscreen;
5920
6069
  private exitFullscreen;
5921
6070
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnDialogShellComponent, never>;
5922
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnDialogShellComponent, "tn-dialog-shell", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "showFullscreenButton": { "alias": "showFullscreenButton"; "required": false; "isSignal": true; }; }, {}, never, ["*", "[tnDialogAction]"], true, never>;
5923
- }
5924
-
5925
- interface TnConfirmDialogData {
5926
- title: string;
5927
- message?: string;
5928
- confirmText?: string;
5929
- cancelText?: string;
5930
- destructive?: boolean;
5931
- }
5932
- declare class TnConfirmDialogComponent {
5933
- ref: DialogRef<boolean, unknown>;
5934
- data: TnConfirmDialogData;
5935
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnConfirmDialogComponent, never>;
5936
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnConfirmDialogComponent, "tn-confirm-dialog", never, {}, {}, never, never, true, never>;
6071
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnDialogShellComponent, "tn-dialog-shell", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "showFullscreenButton": { "alias": "showFullscreenButton"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; }, {}, never, ["*", "[tnDialogAction]"], true, never>;
5937
6072
  }
5938
6073
 
5939
6074
  /**
@@ -6257,7 +6392,7 @@ declare class TnStepperComponent {
6257
6392
  * Test-id applied to the stepper root. Rendered under whichever attribute name
6258
6393
  * is configured via `TN_TEST_ATTR` (default `data-testid`).
6259
6394
  */
6260
- testId: _angular_core.InputSignal<string | undefined>;
6395
+ testId: _angular_core.InputSignal<TnTestIdValue>;
6261
6396
  selectionChange: _angular_core.OutputEmitterRef<{
6262
6397
  selectedIndex: number;
6263
6398
  previouslySelectedIndex: number;
@@ -6806,32 +6941,6 @@ declare class TnKeyboardShortcutService {
6806
6941
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<TnKeyboardShortcutService>;
6807
6942
  }
6808
6943
 
6809
- /**
6810
- * Test-id attribute names supported by the library.
6811
- *
6812
- * - `'data-testid'` is the modern industry default and the library's out-of-the-box behavior.
6813
- * - `'data-test'` exists for consumers that have an established convention they don't want to disrupt
6814
- * (notably webui, which has thousands of selectors targeting `data-test`).
6815
- */
6816
- type TnTestAttrName = 'data-test' | 'data-testid';
6817
- /**
6818
- * Controls which attribute name the library renders `testId` values to.
6819
- *
6820
- * Defaults to `'data-testid'`. Consumers can override at the application root:
6821
- *
6822
- * ```ts
6823
- * bootstrapApplication(AppComponent, {
6824
- * providers: [
6825
- * { provide: TN_TEST_ATTR, useValue: 'data-test' },
6826
- * ],
6827
- * });
6828
- * ```
6829
- *
6830
- * Every component-level `testId` input and every `[tnTestId]` directive usage reads this token
6831
- * so that a single override switches the entire library consistently.
6832
- */
6833
- declare const TN_TEST_ATTR: InjectionToken<TnTestAttrName>;
6834
-
6835
6944
  /**
6836
6945
  * Enum of available theme names.
6837
6946
  * Use these constants instead of hardcoded strings.
@@ -7026,5 +7135,5 @@ declare const TN_THEME_DEFINITIONS: readonly TnThemeDefinition[];
7026
7135
  */
7027
7136
  declare const THEME_MAP: Map<TnTheme, TnThemeDefinition>;
7028
7137
 
7029
- export { CommonShortcuts, DEFAULT_THEME, DiskIconComponent, DiskType, FileSizePipe, InputType, LIGHT_THEME, LinuxModifierKeys, LinuxShortcuts, ModifierKeys, QuickShortcuts, ShortcutBuilder, StripMntPrefixPipe, THEME_MAP, THEME_STORAGE_KEY, TN_TABLE_PAGER_DEFAULT_LABELS, TN_TABLE_PAGER_LABELS, 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, TnMenuItemComponent, 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, TnTablePagerComponent, TnTablePagerHarness, 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 };
7030
- 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, TnTableDataProvider, TnTableDataSource, TnTableHarnessFilters, TnTablePagerHarnessFilters, TnTablePagerLabels, TnTablePagination, TnTestAttrName, TnThemeDefinition, TnToastCall, TnToastConfig, TooltipPosition, YearCell };
7138
+ export { CommonShortcuts, DEFAULT_THEME, DiskIconComponent, DiskType, FileSizePipe, InputType, LIGHT_THEME, LinuxModifierKeys, LinuxShortcuts, ModifierKeys, QuickShortcuts, ShortcutBuilder, StripMntPrefixPipe, THEME_MAP, THEME_STORAGE_KEY, TN_TABLE_PAGER_DEFAULT_LABELS, TN_TABLE_PAGER_LABELS, 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, TnMenuItemComponent, 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, TnTablePagerComponent, TnTablePagerHarness, TnTabsComponent, TnTabsHarness, TnTestIdDirective, TnTheme, TnThemeService, TnTimeInputComponent, TnToastComponent, TnToastMock, TnToastPosition, TnToastRef, TnToastService, TnToastTesting, TnToastType, TnTooltipComponent, TnTooltipDirective, TnTreeComponent, TnTreeFlatDataSource, TnTreeFlattener, TnTreeNodeComponent, TnTreeNodeOutletDirective, TruncatePathPipe, WindowsModifierKeys, WindowsShortcuts, composeTestId, createLucideLibrary, createShortcut, defaultSpriteBasePath, defaultSpriteConfigPath, kebabTestSegment, libIconMarker, registerLucideIcons, setupLucideIntegration, tnIconMarker };
7139
+ 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, TnTableDataProvider, TnTableDataSource, TnTableHarnessFilters, TnTablePagerHarnessFilters, TnTablePagerLabels, TnTablePagination, TnTestAttrName, TnTestIdValue, TnThemeDefinition, TnToastCall, TnToastConfig, TooltipPosition, YearCell };