@truenas/ui-components 0.1.70 → 0.1.72

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.70",
3
+ "version": "0.1.72",
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, InjectionToken, AfterViewInit, OnInit, TemplateRef, AfterContentInit, Provider, ChangeDetectorRef, Signal, PipeTransform, ViewContainerRef, AfterViewChecked, ComponentRef } from '@angular/core';
2
+ import { InjectionToken, OnDestroy, ElementRef, 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';
@@ -14,6 +14,135 @@ import { Overlay } from '@angular/cdk/overlay';
14
14
  import { DialogRef, DialogConfig } from '@angular/cdk/dialog';
15
15
  import { ComponentType } from '@angular/cdk/portal';
16
16
 
17
+ /**
18
+ * Value shapes accepted as a test-id base.
19
+ *
20
+ * A consumer supplies the *semantic* part of a test id — a single token
21
+ * (`'save'`, `'username'`) or an ordered list of segments
22
+ * (`['username', option.value]`). The library owns the element-type prefix and
23
+ * the final string assembly; consumers never hand-craft the full id.
24
+ */
25
+ type TnTestIdValue = string | number | (string | number | null | undefined)[] | null | undefined;
26
+ /**
27
+ * Normalize one segment to a kebab-case token: split camelCase, lower-case,
28
+ * collapse any run of non-alphanumeric characters to a single hyphen, and trim
29
+ * leading/trailing hyphens.
30
+ *
31
+ * Mirrors the normalization webui's legacy `ixTest` directive applied via
32
+ * lodash `kebabCase`, so migrated values stay stable (`sshPort` → `ssh-port`,
33
+ * `addr_trtype` → `addr-trtype`, `'My Label'` → `my-label`).
34
+ */
35
+ declare function kebabTestSegment(part: string | number): string;
36
+ /**
37
+ * Scope a test-id base with one or more trailing suffix segments.
38
+ *
39
+ * Normalizes the base — a single token or an array of segments — into a flat
40
+ * segment array and appends the suffixes, producing a value that is itself a
41
+ * valid {@link TnTestIdValue}. This is the canonical "derive a per-child id from
42
+ * a parent base" operation, e.g. a dialog's close button (`[base, 'close']`) or
43
+ * a select's per-option id (`[base, option.label]`). Centralizing it keeps the
44
+ * `string | array` flattening contract in one place rather than re-implemented
45
+ * at each call site.
46
+ *
47
+ * Falsy segments are preserved here (not filtered) so `composeTestId` can apply
48
+ * its own drop/scoping rules — `scopeTestId(undefined, 'close')` yields
49
+ * `[undefined, 'close']`, which `composeTestId('button', …)` renders as the
50
+ * unscoped `button-close`.
51
+ *
52
+ * @example
53
+ * scopeTestId('actions', 'edit') // ['actions', 'edit']
54
+ * scopeTestId(['menu', 'main'], 'edit') // ['menu', 'main', 'edit']
55
+ * scopeTestId(undefined, 'close') // [undefined, 'close']
56
+ */
57
+ declare function scopeTestId(base: TnTestIdValue, ...suffix: (string | number | null | undefined)[]): (string | number | null | undefined)[];
58
+ /**
59
+ * Compose the canonical test-id string: `${type}-${...segments}`.
60
+ *
61
+ * - `type` is the element-type prefix the component declares (e.g. `'button'`,
62
+ * `'option'`, `'menu-item'`). Pass `null`/`undefined` for no prefix.
63
+ * - `value` is the consumer-provided base — a single token or an array of
64
+ * segments (used to scope dynamic/repeated children, e.g. `[base, item.id]`).
65
+ *
66
+ * Falsy/empty parts are dropped, every part is kebab-normalized, and parts are
67
+ * joined with `-`. Returns `''` when nothing usable remains — callers treat
68
+ * `''` as "render no attribute" (avoids `data-testid=""`).
69
+ *
70
+ * @example
71
+ * composeTestId('button', 'save') // 'button-save'
72
+ * composeTestId('option', ['username', 'Jane Doe'])// 'option-username-jane-doe'
73
+ * composeTestId('menu-item', [undefined, 'edit']) // 'menu-item-edit' (no base → unscoped)
74
+ * composeTestId('menu-item', ['actions', 'edit']) // 'menu-item-actions-edit'
75
+ * composeTestId(undefined, 'already-made') // 'already-made' (verbatim passthrough)
76
+ * composeTestId('button', 'button-first-page') // 'button-first-page' (idempotent — not doubled)
77
+ */
78
+ declare function composeTestId(type: string | null | undefined, value: TnTestIdValue): string;
79
+
80
+ /**
81
+ * Test-id attribute names supported by the library.
82
+ *
83
+ * - `'data-testid'` is the modern industry default and the library's out-of-the-box behavior.
84
+ * - `'data-test'` exists for consumers that have an established convention they don't want to disrupt
85
+ * (notably webui, which has thousands of selectors targeting `data-test`).
86
+ */
87
+ type TnTestAttrName = 'data-test' | 'data-testid';
88
+ /**
89
+ * Controls which attribute name the library renders `testId` values to.
90
+ *
91
+ * Defaults to `'data-testid'`. Consumers can override at the application root:
92
+ *
93
+ * ```ts
94
+ * bootstrapApplication(AppComponent, {
95
+ * providers: [
96
+ * { provide: TN_TEST_ATTR, useValue: 'data-test' },
97
+ * ],
98
+ * });
99
+ * ```
100
+ *
101
+ * Every component-level `testId` input and every `[tnTestId]` directive usage reads this token
102
+ * so that a single override switches the entire library consistently.
103
+ */
104
+ declare const TN_TEST_ATTR: InjectionToken<TnTestAttrName>;
105
+
106
+ /**
107
+ * Writes a composed `testId` value to whichever attribute name is configured via
108
+ * {@link TN_TEST_ATTR} (default `data-testid`).
109
+ *
110
+ * The library owns the whole id: the consumer passes only the *semantic* base
111
+ * (`tnTestId`), the component declares its element type (`tnTestIdType`), and
112
+ * this directive assembles `${type}-${base}` (kebab-cased, see
113
+ * {@link composeTestId}). When no `tnTestIdType` is set the value is written
114
+ * verbatim, so existing call sites are unaffected.
115
+ *
116
+ * @example
117
+ * ```html
118
+ * <!-- component-owned prefix: emits data-testid="button-save" -->
119
+ * <button [tnTestId]="'save'" tnTestIdType="button">Save</button>
120
+ *
121
+ * <!-- array base scopes a dynamic child: emits data-testid="option-username-jane-doe" -->
122
+ * <li [tnTestId]="['username', option.label]" tnTestIdType="option"></li>
123
+ *
124
+ * <!-- no type: written verbatim (legacy behavior) -->
125
+ * <button [tnTestId]="myTestId()">Click me</button>
126
+ * ```
127
+ *
128
+ * Falsy / empty results remove the attribute entirely (avoids `data-testid=""`).
129
+ */
130
+ declare class TnTestIdDirective {
131
+ private readonly renderer;
132
+ private readonly host;
133
+ private readonly attrName;
134
+ /** The semantic base value (token or ordered segments). Falsy parts are dropped. */
135
+ readonly testId: _angular_core.InputSignal<TnTestIdValue>;
136
+ /**
137
+ * Element-type prefix the component declares (e.g. `'button'`, `'option'`).
138
+ * Omit to write the base verbatim with no prefix.
139
+ */
140
+ readonly tnTestIdType: _angular_core.InputSignal<string | null | undefined>;
141
+ constructor();
142
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnTestIdDirective, never>;
143
+ 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>;
144
+ }
145
+
17
146
  declare class TnAutocompleteComponent<T = unknown> implements ControlValueAccessor, OnDestroy {
18
147
  private readonly elementRef;
19
148
  private readonly overlay;
@@ -50,7 +179,7 @@ declare class TnAutocompleteComponent<T = unknown> implements ControlValueAccess
50
179
  */
51
180
  panelMaxHeight: _angular_core.InputSignal<string | number>;
52
181
  /** Test ID attribute */
53
- testId: _angular_core.InputSignal<string>;
182
+ testId: _angular_core.InputSignal<TnTestIdValue>;
54
183
  /** Emits when an option is selected */
55
184
  optionSelected: _angular_core.OutputEmitterRef<T>;
56
185
  /** Reference to the input element */
@@ -289,113 +418,6 @@ interface AutocompleteHarnessFilters extends BaseHarnessFilters {
289
418
  placeholder?: string;
290
419
  }
291
420
 
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
-
399
421
  type TnDrawerMode = 'side' | 'over';
400
422
  type TnDrawerPosition = 'start' | 'end';
401
423
  declare class TnDrawerComponent implements OnDestroy {
@@ -828,6 +850,14 @@ declare class TnIconComponent {
828
850
  tooltip: _angular_core.InputSignal<string | undefined>;
829
851
  ariaLabel: _angular_core.InputSignal<string | undefined>;
830
852
  library: _angular_core.InputSignal<IconLibraryType | undefined>;
853
+ /**
854
+ * Semantic test-id base for the icon. The library prepends the element type
855
+ * (`icon`) and renders the result under whichever attribute name is configured
856
+ * via `TN_TEST_ATTR` (default `data-testid`) — e.g. `testId="close"` →
857
+ * `icon-close`. Accepts an array of segments to scope the id (e.g.
858
+ * `['tooltip', header()]`). Unset emits no attribute.
859
+ */
860
+ testId: _angular_core.InputSignal<TnTestIdValue>;
831
861
  /**
832
862
  * When true, the icon will expand to fill its container (100% width and height)
833
863
  * instead of using the fixed size from the `size` input.
@@ -859,7 +889,7 @@ declare class TnIconComponent {
859
889
  */
860
890
  private warnMissingSpriteIcon;
861
891
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnIconComponent, never>;
862
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnIconComponent, "tn-icon", never, { "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; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "library": { "alias": "library"; "required": false; "isSignal": true; }; "fullSize": { "alias": "fullSize"; "required": false; "isSignal": true; }; "customSize": { "alias": "customSize"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
892
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnIconComponent, "tn-icon", never, { "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; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "library": { "alias": "library"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; "fullSize": { "alias": "fullSize"; "required": false; "isSignal": true; }; "customSize": { "alias": "customSize"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
863
893
  }
864
894
 
865
895
  type TooltipPosition = 'above' | 'below' | 'left' | 'right' | 'before' | 'after';
@@ -1234,6 +1264,7 @@ declare class TnIconHarness extends ComponentHarness {
1234
1264
  * ```
1235
1265
  */
1236
1266
  static with(options?: IconHarnessFilters): HarnessPredicate<TnIconHarness>;
1267
+ private root;
1237
1268
  /**
1238
1269
  * Gets the icon name.
1239
1270
  *
@@ -1337,6 +1368,18 @@ declare class TnIconHarness extends ComponentHarness {
1337
1368
  * ```
1338
1369
  */
1339
1370
  click(): Promise<void>;
1371
+ /**
1372
+ * Gets the composed test-id attribute value (e.g. `icon-close`).
1373
+ *
1374
+ * @returns Promise resolving to the test-id string, or null when unset.
1375
+ *
1376
+ * @example
1377
+ * ```typescript
1378
+ * const icon = await loader.getHarness(TnIconHarness);
1379
+ * expect(await icon.getTestId()).toBe('icon-close');
1380
+ * ```
1381
+ */
1382
+ getTestId(): Promise<string | null>;
1340
1383
  }
1341
1384
  /**
1342
1385
  * A set of criteria that can be used to filter a list of `TnIconHarness` instances.
@@ -1352,6 +1395,8 @@ interface IconHarnessFilters extends BaseHarnessFilters {
1352
1395
  fullSize?: boolean;
1353
1396
  /** Filters by custom size value. */
1354
1397
  customSize?: string;
1398
+ /** Filters by composed test-id value (e.g. `icon-close`). */
1399
+ testId?: string;
1355
1400
  }
1356
1401
 
1357
1402
  /**
@@ -1628,7 +1673,12 @@ declare class TnMenuItemComponent {
1628
1673
  shortcut: _angular_core.InputSignal<string | undefined>;
1629
1674
  disabled: _angular_core.InputSignal<boolean>;
1630
1675
  selected: _angular_core.InputSignal<boolean>;
1631
- testId: _angular_core.InputSignal<string | undefined>;
1676
+ /**
1677
+ * Semantic test-id base. Accepts a single token or an array of segments
1678
+ * (e.g. `['format', format]`) to scope dynamic/repeated items. The owning
1679
+ * `<tn-menu-panel>` prepends the `button` element type.
1680
+ */
1681
+ testId: _angular_core.InputSignal<TnTestIdValue>;
1632
1682
  itemClick: _angular_core.OutputEmitterRef<MouseEvent>;
1633
1683
  /** Template capturing whatever the consumer projected as item content. */
1634
1684
  content: _angular_core.Signal<TemplateRef<unknown>>;
@@ -1639,7 +1689,7 @@ declare class TnMenuItemComponent {
1639
1689
  * an already-`button-`-prefixed value is not doubled). Returns `undefined`
1640
1690
  * when neither is set, which composes to no attribute.
1641
1691
  */
1642
- resolvedTestId: _angular_core.Signal<string | undefined>;
1692
+ resolvedTestId: _angular_core.Signal<string | number | (string | number | null | undefined)[] | undefined>;
1643
1693
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnMenuItemComponent, never>;
1644
1694
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnMenuItemComponent, "tn-menu-item", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconLibrary": { "alias": "iconLibrary"; "required": false; "isSignal": true; }; "shortcut": { "alias": "shortcut"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; }, never, ["*"], true, never>;
1645
1695
  }
@@ -1671,7 +1721,7 @@ declare class TnMenuActivateHoverDirective implements AfterContentInit {
1671
1721
  interface TnMenuItem {
1672
1722
  id: string;
1673
1723
  label: string;
1674
- testId?: string;
1724
+ testId?: TnTestIdValue;
1675
1725
  icon?: string;
1676
1726
  iconLibrary?: 'material' | 'mdi' | 'custom' | 'lucide';
1677
1727
  disabled?: boolean;
@@ -1698,7 +1748,7 @@ declare class TnMenuComponent implements OnDestroy {
1698
1748
  * composed with the same `button-` prefix (idempotently, so an already
1699
1749
  * `button-`-prefixed value is not doubled).
1700
1750
  */
1701
- testId: _angular_core.InputSignal<string | undefined>;
1751
+ testId: _angular_core.InputSignal<TnTestIdValue>;
1702
1752
  menuItemClick: _angular_core.OutputEmitterRef<TnMenuItem>;
1703
1753
  menuOpen: _angular_core.OutputEmitterRef<void>;
1704
1754
  menuClose: _angular_core.OutputEmitterRef<void>;
@@ -3322,7 +3372,7 @@ declare class TnSelectComponent<T = unknown> implements ControlValueAccessor, On
3322
3372
  */
3323
3373
  noOptionsLabel: _angular_core.InputSignal<string>;
3324
3374
  disabled: _angular_core.InputSignal<boolean>;
3325
- testId: _angular_core.InputSignal<string>;
3375
+ testId: _angular_core.InputSignal<TnTestIdValue>;
3326
3376
  multiple: _angular_core.InputSignal<boolean>;
3327
3377
  /**
3328
3378
  * Optional extractor for the per-option test-id discriminator. Defaults to
@@ -5176,7 +5226,7 @@ declare class TnDateRangeInputComponent implements ControlValueAccessor, OnInit,
5176
5226
  * Test-id applied to the date-range-input container. Rendered under whichever attribute name
5177
5227
  * is configured via `TN_TEST_ATTR` (default `data-testid`).
5178
5228
  */
5179
- testId: _angular_core.InputSignal<string | undefined>;
5229
+ testId: _angular_core.InputSignal<TnTestIdValue>;
5180
5230
  private formDisabled;
5181
5231
  isDisabled: _angular_core.Signal<boolean>;
5182
5232
  startMonthRef: _angular_core.Signal<ElementRef<HTMLInputElement>>;
@@ -5381,7 +5431,7 @@ declare class TnDateInputComponent implements ControlValueAccessor, OnInit, OnDe
5381
5431
  * Test-id applied to the date-input container. Rendered under whichever attribute name
5382
5432
  * is configured via `TN_TEST_ATTR` (default `data-testid`).
5383
5433
  */
5384
- testId: _angular_core.InputSignal<string | undefined>;
5434
+ testId: _angular_core.InputSignal<TnTestIdValue>;
5385
5435
  private formDisabled;
5386
5436
  isDisabled: _angular_core.Signal<boolean>;
5387
5437
  monthRef: _angular_core.Signal<ElementRef<HTMLInputElement>>;
@@ -5621,7 +5671,7 @@ declare class TnTimeInputComponent implements ControlValueAccessor {
5621
5671
  format: _angular_core.InputSignal<"12h" | "24h">;
5622
5672
  granularity: _angular_core.InputSignal<"15m" | "30m" | "1h">;
5623
5673
  placeholder: _angular_core.InputSignal<string>;
5624
- testId: _angular_core.InputSignal<string>;
5674
+ testId: _angular_core.InputSignal<TnTestIdValue>;
5625
5675
  private formDisabled;
5626
5676
  isDisabled: _angular_core.Signal<boolean>;
5627
5677
  private step;
@@ -6061,7 +6111,11 @@ declare class TnDialogShellComponent implements OnInit {
6061
6111
  * or `button-<testId>-close` / `-fullscreen` when a base is provided (useful
6062
6112
  * when more than one dialog can be open).
6063
6113
  */
6064
- testId: _angular_core.InputSignal<string | undefined>;
6114
+ testId: _angular_core.InputSignal<TnTestIdValue>;
6115
+ /** Scoped test-id segments for the close button (`button-[<base>-]close`). */
6116
+ protected closeTestId: _angular_core.Signal<(string | number | null | undefined)[]>;
6117
+ /** Scoped test-id segments for the fullscreen button (`button-[<base>-]fullscreen`). */
6118
+ protected fullscreenTestId: _angular_core.Signal<(string | number | null | undefined)[]>;
6065
6119
  /** Stable id for the title heading, referenced by the dialog's aria-labelledby. */
6066
6120
  readonly titleId: string;
6067
6121
  isFullscreen: _angular_core.WritableSignal<boolean>;
@@ -6324,7 +6378,7 @@ declare class TnSidePanelComponent implements OnDestroy {
6324
6378
  * Test-id applied to the panel's root overlay element. Rendered under whichever attribute
6325
6379
  * name is configured via `TN_TEST_ATTR` (default `data-testid`).
6326
6380
  */
6327
- testId: _angular_core.InputSignal<string | undefined>;
6381
+ testId: _angular_core.InputSignal<TnTestIdValue>;
6328
6382
  /**
6329
6383
  * Test-id applied to the panel's close (×) button.
6330
6384
  */
@@ -6439,7 +6493,7 @@ declare class TnFilePickerComponent implements ControlValueAccessor, OnInit, OnD
6439
6493
  * Test-id applied to the file-picker container. Rendered under whichever attribute name
6440
6494
  * is configured via `TN_TEST_ATTR` (default `data-testid`).
6441
6495
  */
6442
- testId: _angular_core.InputSignal<string | undefined>;
6496
+ testId: _angular_core.InputSignal<TnTestIdValue>;
6443
6497
  startPath: _angular_core.InputSignal<string>;
6444
6498
  rootPath: _angular_core.InputSignal<string | undefined>;
6445
6499
  fileExtensions: _angular_core.InputSignal<string[] | undefined>;
@@ -7144,5 +7198,5 @@ declare const TN_THEME_DEFINITIONS: readonly TnThemeDefinition[];
7144
7198
  */
7145
7199
  declare const THEME_MAP: Map<TnTheme, TnThemeDefinition>;
7146
7200
 
7147
- 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 };
7201
+ 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, scopeTestId, setupLucideIntegration, tnIconMarker };
7148
7202
  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 };