@truenas/ui-components 0.1.57 → 0.1.59
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.
|
|
3
|
+
"version": "0.1.59",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"registry": "https://registry.npmjs.org",
|
|
6
6
|
"access": "public"
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
"@angular/cdk": "^21.0.0",
|
|
17
17
|
"@angular/common": "^21.0.0",
|
|
18
18
|
"@angular/core": "^21.0.0",
|
|
19
|
+
"@angular/router": "^21.0.0",
|
|
19
20
|
"@mdi/angular-material": "^7.2.96",
|
|
20
21
|
"@mdi/js": "^7.4.47"
|
|
21
22
|
},
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { ElementRef, OnDestroy, AfterViewInit, AfterContentInit, TemplateRef, Provider, ChangeDetectorRef, OnInit, PipeTransform, ViewContainerRef, AfterViewChecked, ComponentRef
|
|
2
|
+
import { ElementRef, OnDestroy, AfterViewInit, AfterContentInit, TemplateRef, Provider, ChangeDetectorRef, OnInit, InjectionToken, 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';
|
|
6
6
|
import { ComponentFixture } from '@angular/core/testing';
|
|
7
7
|
import { SelectionModel, DataSource } from '@angular/cdk/collections';
|
|
8
|
+
import * as rxjs from 'rxjs';
|
|
9
|
+
import { Observable } from 'rxjs';
|
|
8
10
|
import * as i1 from '@angular/cdk/tree';
|
|
9
11
|
import { CdkTree, FlatTreeControl, CdkTreeNode, CdkNestedTreeNode } from '@angular/cdk/tree';
|
|
10
12
|
export { FlatTreeControl } from '@angular/cdk/tree';
|
|
11
|
-
import * as rxjs from 'rxjs';
|
|
12
|
-
import { Observable } from 'rxjs';
|
|
13
13
|
import { Overlay } from '@angular/cdk/overlay';
|
|
14
14
|
import { DialogConfig, DialogRef } from '@angular/cdk/dialog';
|
|
15
15
|
import { ComponentType } from '@angular/cdk/portal';
|
|
@@ -533,14 +533,36 @@ declare class TnButtonComponent {
|
|
|
533
533
|
label: _angular_core.InputSignal<string>;
|
|
534
534
|
disabled: _angular_core.InputSignal<boolean>;
|
|
535
535
|
/**
|
|
536
|
-
* Test-id applied to the rendered
|
|
536
|
+
* Test-id applied to the rendered element. Rendered under whichever attribute
|
|
537
537
|
* name is configured via `TN_TEST_ATTR` (default `data-testid`).
|
|
538
538
|
*/
|
|
539
539
|
testId: _angular_core.InputSignal<string | undefined>;
|
|
540
|
+
/**
|
|
541
|
+
* Renders the button as an `<a>` with a plain `href` attribute.
|
|
542
|
+
* Mutually exclusive with `routerLink` — if both are provided, `routerLink` wins.
|
|
543
|
+
*/
|
|
544
|
+
href: _angular_core.InputSignal<string | undefined>;
|
|
545
|
+
/**
|
|
546
|
+
* Renders the button as an `<a>` driven by Angular Router. Accepts the same
|
|
547
|
+
* shapes as `[routerLink]` (`string | any[]`).
|
|
548
|
+
*/
|
|
549
|
+
routerLink: _angular_core.InputSignal<string | unknown[] | undefined>;
|
|
550
|
+
queryParams: _angular_core.InputSignal<Record<string, unknown> | undefined>;
|
|
551
|
+
fragment: _angular_core.InputSignal<string | undefined>;
|
|
552
|
+
target: _angular_core.InputSignal<string | undefined>;
|
|
553
|
+
rel: _angular_core.InputSignal<string | undefined>;
|
|
554
|
+
/**
|
|
555
|
+
* Accessible label for the rendered element. Mirrors `aria-label`; useful when
|
|
556
|
+
* the visible label alone is insufficient (e.g. icon-only links).
|
|
557
|
+
*/
|
|
558
|
+
ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
540
559
|
onClick: _angular_core.OutputEmitterRef<MouseEvent>;
|
|
560
|
+
isAnchor: _angular_core.Signal<boolean>;
|
|
561
|
+
isRouterLink: _angular_core.Signal<boolean>;
|
|
541
562
|
classes: _angular_core.Signal<string[]>;
|
|
563
|
+
handleAnchorClick(event: MouseEvent): void;
|
|
542
564
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnButtonComponent, 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>;
|
|
565
|
+
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; }; "href": { "alias": "href"; "required": false; "isSignal": true; }; "routerLink": { "alias": "routerLink"; "required": false; "isSignal": true; }; "queryParams": { "alias": "queryParams"; "required": false; "isSignal": true; }; "fragment": { "alias": "fragment"; "required": false; "isSignal": true; }; "target": { "alias": "target"; "required": false; "isSignal": true; }; "rel": { "alias": "rel"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "onClick": "onClick"; }, never, never, true, never>;
|
|
544
566
|
}
|
|
545
567
|
|
|
546
568
|
/**
|
|
@@ -609,6 +631,18 @@ declare class TnButtonHarness extends ComponentHarness {
|
|
|
609
631
|
* ```
|
|
610
632
|
*/
|
|
611
633
|
isDisabled(): Promise<boolean>;
|
|
634
|
+
/**
|
|
635
|
+
* Gets the resolved URL of the rendered element. Returns the `href` for
|
|
636
|
+
* anchor-mode renders (both plain `href` and `routerLink`) and `null` for
|
|
637
|
+
* button-mode renders.
|
|
638
|
+
*
|
|
639
|
+
* @example
|
|
640
|
+
* ```typescript
|
|
641
|
+
* const link = await loader.getHarness(TnButtonHarness.with({ label: 'Audit Settings' }));
|
|
642
|
+
* expect(await link.getHref()).toContain('/audit/settings');
|
|
643
|
+
* ```
|
|
644
|
+
*/
|
|
645
|
+
getHref(): Promise<string | null>;
|
|
612
646
|
/**
|
|
613
647
|
* Clicks the button.
|
|
614
648
|
*
|
|
@@ -1294,6 +1328,12 @@ interface TnMenuItem {
|
|
|
1294
1328
|
action?: () => void;
|
|
1295
1329
|
children?: TnMenuItem[];
|
|
1296
1330
|
shortcut?: string;
|
|
1331
|
+
/**
|
|
1332
|
+
* Marks this item as the currently-chosen option (e.g. the active sort key
|
|
1333
|
+
* or export format). Applies the `tn-menu-item--selected` class and an
|
|
1334
|
+
* `aria-current="true"` attribute. Visually distinct from focus/hover.
|
|
1335
|
+
*/
|
|
1336
|
+
selected?: boolean;
|
|
1297
1337
|
}
|
|
1298
1338
|
declare class TnMenuComponent {
|
|
1299
1339
|
items: _angular_core.InputSignal<TnMenuItem[]>;
|
|
@@ -1307,6 +1347,8 @@ declare class TnMenuComponent {
|
|
|
1307
1347
|
private overlay;
|
|
1308
1348
|
private viewContainerRef;
|
|
1309
1349
|
onMenuItemClick(item: TnMenuItem): void;
|
|
1350
|
+
private contentItems;
|
|
1351
|
+
constructor();
|
|
1310
1352
|
hasChildren: _angular_core.Signal<(item: TnMenuItem) => boolean>;
|
|
1311
1353
|
onMenuOpen(): void;
|
|
1312
1354
|
onMenuClose(): void;
|
|
@@ -1319,7 +1361,7 @@ declare class TnMenuComponent {
|
|
|
1319
1361
|
onContextMenu(event: MouseEvent): void;
|
|
1320
1362
|
trackByItemId(index: number, item: TnMenuItem): string;
|
|
1321
1363
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnMenuComponent, never>;
|
|
1322
|
-
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"; },
|
|
1364
|
+
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"], ["*", "tn-menu-item, .tn-menu-separator"], true, never>;
|
|
1323
1365
|
}
|
|
1324
1366
|
|
|
1325
1367
|
declare class TnCardComponent {
|
|
@@ -2433,6 +2475,55 @@ interface TabsHarnessFilters extends BaseHarnessFilters {
|
|
|
2433
2475
|
hasTab?: string | RegExp;
|
|
2434
2476
|
}
|
|
2435
2477
|
|
|
2478
|
+
/**
|
|
2479
|
+
* Projection-based menu item for use inside `<tn-menu>`.
|
|
2480
|
+
*
|
|
2481
|
+
* Two authoring modes:
|
|
2482
|
+
* 1. **Convenience** — set `label` (and optionally `icon`/`shortcut`); the
|
|
2483
|
+
* default icon + label + shortcut layout renders.
|
|
2484
|
+
* 2. **Custom content** — omit `label`; project arbitrary content via
|
|
2485
|
+
* `<ng-content>` (badges, two-line layouts, etc.).
|
|
2486
|
+
*
|
|
2487
|
+
* Existing `<tn-menu [items]="...">` consumers don't need this component;
|
|
2488
|
+
* the items-array API continues to work unchanged. Items-array entries and
|
|
2489
|
+
* projected `<tn-menu-item>` children render together inside one `<tn-menu>`.
|
|
2490
|
+
*
|
|
2491
|
+
* Subscribe to either the projected item's own `itemClick` output (preferred,
|
|
2492
|
+
* per-item handlers) or the parent menu's `menuItemClick` (uniform handler).
|
|
2493
|
+
* Trigger-driven menus close automatically on projected-item click.
|
|
2494
|
+
*
|
|
2495
|
+
* **Note on keyboard navigation:** projected items render as `role="menuitem"`
|
|
2496
|
+
* buttons but do not participate in `CdkMenu` arrow-key navigation (CdkMenuItem
|
|
2497
|
+
* requires its parent `CdkMenu` in the same injector tree, which projection
|
|
2498
|
+
* breaks). For menus that depend on arrow-key navigation between options, use
|
|
2499
|
+
* the `items` input form. Tab/Shift+Tab and Enter/Space activation still work.
|
|
2500
|
+
*
|
|
2501
|
+
* @example
|
|
2502
|
+
* ```html
|
|
2503
|
+
* <tn-menu>
|
|
2504
|
+
* <tn-menu-item label="JSON" [selected]="format === 'json'"
|
|
2505
|
+
* (itemClick)="setFormat('json')" />
|
|
2506
|
+
* <tn-menu-item label="CSV" [selected]="format === 'csv'"
|
|
2507
|
+
* (itemClick)="setFormat('csv')" />
|
|
2508
|
+
* </tn-menu>
|
|
2509
|
+
* ```
|
|
2510
|
+
*/
|
|
2511
|
+
declare class TnMenuItemComponent {
|
|
2512
|
+
id: _angular_core.InputSignal<string | undefined>;
|
|
2513
|
+
label: _angular_core.InputSignal<string | undefined>;
|
|
2514
|
+
icon: _angular_core.InputSignal<string | undefined>;
|
|
2515
|
+
iconLibrary: _angular_core.InputSignal<"material" | "mdi" | "custom" | "lucide" | undefined>;
|
|
2516
|
+
shortcut: _angular_core.InputSignal<string | undefined>;
|
|
2517
|
+
disabled: _angular_core.InputSignal<boolean>;
|
|
2518
|
+
selected: _angular_core.InputSignal<boolean>;
|
|
2519
|
+
testId: _angular_core.InputSignal<string | undefined>;
|
|
2520
|
+
itemClick: _angular_core.OutputEmitterRef<MouseEvent>;
|
|
2521
|
+
resolvedTestId: _angular_core.Signal<string | undefined>;
|
|
2522
|
+
handleClick(event: MouseEvent): void;
|
|
2523
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnMenuItemComponent, never>;
|
|
2524
|
+
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>;
|
|
2525
|
+
}
|
|
2526
|
+
|
|
2436
2527
|
/**
|
|
2437
2528
|
* Directive that attaches a menu to any element.
|
|
2438
2529
|
* Usage: <button [tnMenuTriggerFor]="menu">Open Menu</button>
|
|
@@ -2555,6 +2646,24 @@ declare class TnMenuHarness extends ComponentHarness {
|
|
|
2555
2646
|
* Gets the number of menu items (excluding separators).
|
|
2556
2647
|
*/
|
|
2557
2648
|
getItemCount(): Promise<number>;
|
|
2649
|
+
/**
|
|
2650
|
+
* Checks whether a menu item is marked as the currently-selected option
|
|
2651
|
+
* (i.e. has `aria-current="true"`).
|
|
2652
|
+
*
|
|
2653
|
+
* @example
|
|
2654
|
+
* ```typescript
|
|
2655
|
+
* const menu = await rootLoader.getHarness(TnMenuHarness);
|
|
2656
|
+
* expect(await menu.isItemSelected({ label: 'JSON' })).toBe(true);
|
|
2657
|
+
* ```
|
|
2658
|
+
*/
|
|
2659
|
+
isItemSelected(filter: {
|
|
2660
|
+
label: string | RegExp;
|
|
2661
|
+
}): Promise<boolean>;
|
|
2662
|
+
/**
|
|
2663
|
+
* Gets the label of the currently-selected item, or `null` when no item is
|
|
2664
|
+
* marked as selected.
|
|
2665
|
+
*/
|
|
2666
|
+
getSelectedItemLabel(): Promise<string | null>;
|
|
2558
2667
|
}
|
|
2559
2668
|
/**
|
|
2560
2669
|
* A set of criteria that can be used to filter `TnMenuHarness` instances.
|
|
@@ -2824,40 +2933,141 @@ declare class TnSelectComponent<T = unknown> implements ControlValueAccessor {
|
|
|
2824
2933
|
options: _angular_core.InputSignal<TnSelectOption<T>[]>;
|
|
2825
2934
|
optionGroups: _angular_core.InputSignal<TnSelectOptionGroup<T>[]>;
|
|
2826
2935
|
placeholder: _angular_core.InputSignal<string>;
|
|
2936
|
+
/**
|
|
2937
|
+
* Accessible label for the select trigger. When set, this is used as the
|
|
2938
|
+
* trigger's `aria-label` instead of the visible `placeholder` — useful in
|
|
2939
|
+
* contexts (e.g. a pager's page-size dropdown) where the placeholder text
|
|
2940
|
+
* doesn't accurately describe the field's purpose to screen readers.
|
|
2941
|
+
*/
|
|
2942
|
+
ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
2943
|
+
/**
|
|
2944
|
+
* Message shown inside the dropdown when no options (and no option groups)
|
|
2945
|
+
* are available. Defaults to the English `'No options available'`; consumers
|
|
2946
|
+
* with i18n requirements can pass a translated string.
|
|
2947
|
+
*/
|
|
2948
|
+
noOptionsLabel: _angular_core.InputSignal<string>;
|
|
2827
2949
|
disabled: _angular_core.InputSignal<boolean>;
|
|
2828
2950
|
testId: _angular_core.InputSignal<string>;
|
|
2829
2951
|
multiple: _angular_core.InputSignal<boolean>;
|
|
2952
|
+
/**
|
|
2953
|
+
* Custom comparator for matching option values against the selected value(s).
|
|
2954
|
+
*
|
|
2955
|
+
* When the option values are objects, **provide this** — the built-in
|
|
2956
|
+
* fallback uses `JSON.stringify`, which is key-order dependent and can
|
|
2957
|
+
* produce false negatives for structurally equal objects. For primitives the
|
|
2958
|
+
* default identity check is fine.
|
|
2959
|
+
*/
|
|
2830
2960
|
compareWith: _angular_core.InputSignal<((a: T | null, b: T | null) => boolean) | undefined>;
|
|
2831
2961
|
selectionChange: _angular_core.OutputEmitterRef<T>;
|
|
2832
2962
|
/** Emits the full array of selected values after each toggle in multiple mode. */
|
|
2833
2963
|
multiSelectionChange: _angular_core.OutputEmitterRef<T[]>;
|
|
2834
2964
|
protected isOpen: _angular_core.WritableSignal<boolean>;
|
|
2965
|
+
protected dropdownPosition: _angular_core.WritableSignal<"above" | "below">;
|
|
2835
2966
|
protected selectedValue: _angular_core.WritableSignal<T | null>;
|
|
2836
2967
|
protected selectedValues: _angular_core.WritableSignal<T[]>;
|
|
2968
|
+
/** Index into `flatOptions` of the keyboard-focused row (-1 when none). */
|
|
2969
|
+
protected focusedIndex: _angular_core.WritableSignal<number>;
|
|
2837
2970
|
private formDisabled;
|
|
2971
|
+
private static readonly DROPDOWN_MAX_HEIGHT_VAR;
|
|
2972
|
+
private static readonly DROPDOWN_MAX_HEIGHT_FALLBACK;
|
|
2973
|
+
private readonly fallbackId;
|
|
2974
|
+
protected uniqueId: _angular_core.Signal<string>;
|
|
2838
2975
|
isDisabled: _angular_core.Signal<boolean>;
|
|
2976
|
+
/**
|
|
2977
|
+
* Flattened option list (ungrouped + grouped, in render order). The keyboard
|
|
2978
|
+
* navigation walks this list — entries from disabled groups are kept but
|
|
2979
|
+
* marked disabled so the cursor skips over them correctly.
|
|
2980
|
+
*/
|
|
2981
|
+
protected flatOptions: _angular_core.Signal<TnSelectOption<T>[]>;
|
|
2982
|
+
/**
|
|
2983
|
+
* Starting flat-index of each option group, used by the template to
|
|
2984
|
+
* translate a (group, option) pair into the matching `flatOptions` index.
|
|
2985
|
+
*/
|
|
2986
|
+
protected groupOffsets: _angular_core.Signal<number[]>;
|
|
2987
|
+
/** `aria-activedescendant` id for the focused option (or null). */
|
|
2988
|
+
protected activeOptionId: _angular_core.Signal<string | null>;
|
|
2839
2989
|
private onChange;
|
|
2840
2990
|
private onTouched;
|
|
2841
2991
|
private elementRef;
|
|
2842
2992
|
private cdr;
|
|
2993
|
+
protected triggerEl: _angular_core.Signal<ElementRef<HTMLElement> | undefined>;
|
|
2843
2994
|
constructor();
|
|
2844
2995
|
writeValue(value: T | T[] | null): void;
|
|
2845
2996
|
registerOnChange(fn: (value: T | T[] | null) => void): void;
|
|
2846
2997
|
registerOnTouched(fn: () => void): void;
|
|
2847
2998
|
setDisabledState(isDisabled: boolean): void;
|
|
2848
2999
|
toggleDropdown(): void;
|
|
2849
|
-
|
|
3000
|
+
/**
|
|
3001
|
+
* Open the dropdown, seed the keyboard cursor on the currently-selected
|
|
3002
|
+
* option (or the first focusable one), and decide whether to flip up.
|
|
3003
|
+
*/
|
|
3004
|
+
private openDropdown;
|
|
3005
|
+
/**
|
|
3006
|
+
* Close the dropdown.
|
|
3007
|
+
*
|
|
3008
|
+
* @param restoreFocus When `true` (default), return focus to the trigger so
|
|
3009
|
+
* keyboard users land somewhere sensible. Pass `false` for click-outside
|
|
3010
|
+
* so we don't steal focus from the element the user just navigated to.
|
|
3011
|
+
*/
|
|
3012
|
+
closeDropdown(options?: {
|
|
3013
|
+
restoreFocus?: boolean;
|
|
3014
|
+
}): void;
|
|
3015
|
+
/** Picks the initial focused-row index when the dropdown opens. */
|
|
3016
|
+
private initialFocusIndex;
|
|
3017
|
+
/**
|
|
3018
|
+
* Decide whether the dropdown should open above or below the trigger.
|
|
3019
|
+
* Opens above when there isn't enough space below the trigger AND there is
|
|
3020
|
+
* more space above — otherwise stays below. Falls back to `'below'` when no
|
|
3021
|
+
* trigger element is found yet.
|
|
3022
|
+
*/
|
|
3023
|
+
private computeDropdownPosition;
|
|
3024
|
+
/**
|
|
3025
|
+
* Reads the dropdown's max-height from the CSS custom property set in
|
|
3026
|
+
* select.component.scss. Single source of truth for the flip-up threshold —
|
|
3027
|
+
* if the stylesheet changes, the heuristic follows automatically.
|
|
3028
|
+
*/
|
|
3029
|
+
private readDropdownMaxHeight;
|
|
2850
3030
|
onOptionClick(option: TnSelectOption<T>, groupDisabled?: boolean): void;
|
|
2851
3031
|
selectOption(option: TnSelectOption<T>): void;
|
|
2852
3032
|
private toggleOption;
|
|
2853
3033
|
isOptionSelected(option: TnSelectOption<T>): boolean;
|
|
2854
|
-
|
|
3034
|
+
/** Build a stable DOM id for the option at `index` for aria-activedescendant. */
|
|
3035
|
+
protected optionId(index: number): string;
|
|
3036
|
+
protected displayText: _angular_core.Signal<string>;
|
|
2855
3037
|
private findOptionByValue;
|
|
2856
|
-
|
|
3038
|
+
protected anyOptionsPresent: _angular_core.Signal<boolean>;
|
|
3039
|
+
/**
|
|
3040
|
+
* Compares two option values for equality. Uses `compareWith` if provided,
|
|
3041
|
+
* otherwise identity (`===`). For object values it falls back to
|
|
3042
|
+
* `JSON.stringify`, which is key-order dependent — consumers with object
|
|
3043
|
+
* values should provide `compareWith` to avoid subtle bugs.
|
|
3044
|
+
*/
|
|
2857
3045
|
private compareValues;
|
|
3046
|
+
/**
|
|
3047
|
+
* Keyboard handling on the trigger (focus stays on the trigger while the
|
|
3048
|
+
* dropdown is open — options use mousedown-preventDefault to avoid stealing
|
|
3049
|
+
* it). Implements the WAI-ARIA combobox pattern subset we need:
|
|
3050
|
+
*
|
|
3051
|
+
* - **Enter / Space**: open closed dropdown, or select the focused row
|
|
3052
|
+
* (toggle in multi-mode).
|
|
3053
|
+
* - **ArrowDown / ArrowUp**: move the focused row; opens the dropdown first
|
|
3054
|
+
* if it's closed.
|
|
3055
|
+
* - **Home / End**: jump to first / last focusable row (when open).
|
|
3056
|
+
* - **Escape**: close and restore focus to the trigger.
|
|
3057
|
+
* - **Tab**: close without preventing default so focus moves to the next
|
|
3058
|
+
* element naturally.
|
|
3059
|
+
*/
|
|
2858
3060
|
onKeydown(event: KeyboardEvent): void;
|
|
3061
|
+
/** Step the focused row by ±1 (or more), skipping disabled options. */
|
|
3062
|
+
private moveFocus;
|
|
3063
|
+
/** Move focus to a specific index, scanning forward/backward to skip disabled. */
|
|
3064
|
+
private moveFocusTo;
|
|
3065
|
+
/** Select (or toggle, in multi-mode) the currently keyboard-focused row. */
|
|
3066
|
+
private selectFocused;
|
|
3067
|
+
/** Scrolls the keyboard-focused option into view if it's outside the dropdown's viewport. */
|
|
3068
|
+
private scrollFocusedIntoView;
|
|
2859
3069
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnSelectComponent<any>, never>;
|
|
2860
|
-
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; }; "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>;
|
|
3070
|
+
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>;
|
|
2861
3071
|
}
|
|
2862
3072
|
|
|
2863
3073
|
/**
|
|
@@ -3834,6 +4044,238 @@ declare class TnTableHarness extends ComponentHarness {
|
|
|
3834
4044
|
interface TnTableHarnessFilters extends BaseHarnessFilters {
|
|
3835
4045
|
}
|
|
3836
4046
|
|
|
4047
|
+
/**
|
|
4048
|
+
* Default labels rendered inside `tn-table-pager`. Consumers can override any
|
|
4049
|
+
* subset of these at the app root by providing a value for the
|
|
4050
|
+
* `TN_TABLE_PAGER_LABELS` token — typically wired up to an i18n service so the
|
|
4051
|
+
* pager picks up translated copy without each call site having to bind six
|
|
4052
|
+
* label inputs. Inputs on `<tn-table-pager>` still win when explicitly set.
|
|
4053
|
+
*/
|
|
4054
|
+
interface TnTablePagerLabels {
|
|
4055
|
+
itemsPerPage: string;
|
|
4056
|
+
of: string;
|
|
4057
|
+
firstPage: string;
|
|
4058
|
+
previousPage: string;
|
|
4059
|
+
nextPage: string;
|
|
4060
|
+
lastPage: string;
|
|
4061
|
+
/** Accessible label applied to the pager's `navigation` landmark. */
|
|
4062
|
+
tablePagination: string;
|
|
4063
|
+
}
|
|
4064
|
+
/** English defaults used when no `TN_TABLE_PAGER_LABELS` provider is registered. */
|
|
4065
|
+
declare const TN_TABLE_PAGER_DEFAULT_LABELS: TnTablePagerLabels;
|
|
4066
|
+
/**
|
|
4067
|
+
* DI token for app-wide default labels. Provide either a static object or a
|
|
4068
|
+
* `Signal<TnTablePagerLabels>` — the latter lets the pager react to language
|
|
4069
|
+
* changes when the consumer wires it up to an i18n service.
|
|
4070
|
+
*
|
|
4071
|
+
* Explicit input bindings on `<tn-table-pager>` still win over these defaults.
|
|
4072
|
+
*/
|
|
4073
|
+
declare const TN_TABLE_PAGER_LABELS: InjectionToken<TnTablePagerLabels | Signal<TnTablePagerLabels>>;
|
|
4074
|
+
/** Pagination state shared between `tn-table-pager` and an arbitrary data layer. */
|
|
4075
|
+
interface TnTablePagination {
|
|
4076
|
+
pageNumber: number | null;
|
|
4077
|
+
pageSize: number | null;
|
|
4078
|
+
}
|
|
4079
|
+
/**
|
|
4080
|
+
* Minimal contract a data layer must implement to be driven by `tn-table-pager`
|
|
4081
|
+
* via the `dataProvider` input. Designed to match the shape of NAS's
|
|
4082
|
+
* `ix-table` `DataProvider<T>` so existing wrappers can be removed — but the
|
|
4083
|
+
* library itself only depends on this slim interface, not on any consumer code.
|
|
4084
|
+
*/
|
|
4085
|
+
interface TnTableDataProvider {
|
|
4086
|
+
/** Total number of rows the data layer is aware of, across all pages. */
|
|
4087
|
+
totalRows: number;
|
|
4088
|
+
/** The data layer's current pagination state. */
|
|
4089
|
+
pagination: TnTablePagination;
|
|
4090
|
+
/**
|
|
4091
|
+
* Emits whenever the data layer's state changes in a way the pager should
|
|
4092
|
+
* react to. The emitted value itself isn't read — it's purely a "something
|
|
4093
|
+
* changed, re-read me" notification.
|
|
4094
|
+
*
|
|
4095
|
+
* **Implementations must emit on**:
|
|
4096
|
+
* - page-number changes (the canonical case),
|
|
4097
|
+
* - page-size changes the data layer applies on its own, and
|
|
4098
|
+
* - **`totalRows` changes** (e.g. after a filter/refresh).
|
|
4099
|
+
*
|
|
4100
|
+
* The pager reads `totalRows` imperatively inside its sync handler, so a
|
|
4101
|
+
* provider that only emits on `pageNumber` won't surface row-count updates
|
|
4102
|
+
* to the displayed range.
|
|
4103
|
+
*
|
|
4104
|
+
* Any stream type (`Subject`, `BehaviorSubject`, `ReplaySubject`, …) works —
|
|
4105
|
+
* the pager guards against feedback loops by remembering the last pagination
|
|
4106
|
+
* it pushed and treating a matching emission as its own echo. Replay
|
|
4107
|
+
* semantics are therefore harmless but not required.
|
|
4108
|
+
*/
|
|
4109
|
+
currentPage$: Observable<unknown>;
|
|
4110
|
+
/** Pushes new pagination to the data layer; typically triggers a data refresh. */
|
|
4111
|
+
setPagination(pagination: TnTablePagination): void;
|
|
4112
|
+
}
|
|
4113
|
+
/**
|
|
4114
|
+
* Pagination control for the `tn-table` (or any list view that paginates).
|
|
4115
|
+
*
|
|
4116
|
+
* Works in two modes:
|
|
4117
|
+
*
|
|
4118
|
+
* 1. **Dumb mode** — bind `[currentPage]`, `[pageSize]`, `[totalItems]` and listen
|
|
4119
|
+
* to `pageChange` / `pageSizeChange`. The component owns no provider state.
|
|
4120
|
+
* 2. **Data-provider mode** — bind `[dataProvider]` and the component drives
|
|
4121
|
+
* `setPagination()` on the provider, mirrors `totalRows`, and reacts to
|
|
4122
|
+
* `currentPage$` changes (with an internal guard against feedback loops).
|
|
4123
|
+
*
|
|
4124
|
+
* @example Dumb mode
|
|
4125
|
+
* ```html
|
|
4126
|
+
* <tn-table-pager
|
|
4127
|
+
* [(currentPage)]="page"
|
|
4128
|
+
* [(pageSize)]="size"
|
|
4129
|
+
* [totalItems]="total()"
|
|
4130
|
+
* (pageChange)="loadPage($event)" />
|
|
4131
|
+
* ```
|
|
4132
|
+
*
|
|
4133
|
+
* @example Data-provider mode (replaces the typical ix-table-pager wrapper)
|
|
4134
|
+
* ```html
|
|
4135
|
+
* <tn-table-pager
|
|
4136
|
+
* [dataProvider]="dataProvider()"
|
|
4137
|
+
* [pageSize]="dataProvider().pagination.pageSize ?? 50"
|
|
4138
|
+
* [currentPage]="dataProvider().pagination.pageNumber ?? 1"
|
|
4139
|
+
* [itemsPerPageLabel]="'Items per page' | translate" />
|
|
4140
|
+
* ```
|
|
4141
|
+
*/
|
|
4142
|
+
declare class TnTablePagerComponent {
|
|
4143
|
+
private destroyRef;
|
|
4144
|
+
/**
|
|
4145
|
+
* Normalize the injected token into a Signal so consumers can supply either
|
|
4146
|
+
* a plain object or a reactive signal (e.g. derived from a TranslateService's
|
|
4147
|
+
* onLangChange) and the pager re-renders when labels change.
|
|
4148
|
+
*/
|
|
4149
|
+
private readonly defaultLabels;
|
|
4150
|
+
/** 1-based index of the currently displayed page. */
|
|
4151
|
+
currentPage: _angular_core.ModelSignal<number>;
|
|
4152
|
+
/** Number of items per page. */
|
|
4153
|
+
pageSize: _angular_core.ModelSignal<number>;
|
|
4154
|
+
/** Selectable page-size values rendered in the dropdown. */
|
|
4155
|
+
pageSizeOptions: _angular_core.InputSignal<number[]>;
|
|
4156
|
+
/**
|
|
4157
|
+
* Total item count across all pages — drives `totalPages` and the range
|
|
4158
|
+
* labels. Ignored when `dataProvider` is set (the provider's `totalRows`
|
|
4159
|
+
* wins, so consumers don't have to keep both in sync).
|
|
4160
|
+
*/
|
|
4161
|
+
totalItems: _angular_core.InputSignal<number>;
|
|
4162
|
+
/**
|
|
4163
|
+
* Optional data-provider integration. When supplied, the pager initializes
|
|
4164
|
+
* the provider's pagination on the first effect run, mirrors `totalRows`
|
|
4165
|
+
* into the displayed total, and listens to `currentPage$` to sync external
|
|
4166
|
+
* page changes. Page/size changes from user input are pushed back via
|
|
4167
|
+
* `setPagination()`.
|
|
4168
|
+
*/
|
|
4169
|
+
dataProvider: _angular_core.InputSignal<TnTableDataProvider | undefined>;
|
|
4170
|
+
/**
|
|
4171
|
+
* Label inputs are nullable on purpose: the template reads the resolved
|
|
4172
|
+
* `*Label` computed signals below, which fall back to the DI-provided default
|
|
4173
|
+
* (a signal — so language changes propagate live). An explicit input binding
|
|
4174
|
+
* always wins.
|
|
4175
|
+
*/
|
|
4176
|
+
itemsPerPageLabel: _angular_core.InputSignal<string | undefined>;
|
|
4177
|
+
ofLabel: _angular_core.InputSignal<string | undefined>;
|
|
4178
|
+
firstPageLabel: _angular_core.InputSignal<string | undefined>;
|
|
4179
|
+
previousPageLabel: _angular_core.InputSignal<string | undefined>;
|
|
4180
|
+
nextPageLabel: _angular_core.InputSignal<string | undefined>;
|
|
4181
|
+
lastPageLabel: _angular_core.InputSignal<string | undefined>;
|
|
4182
|
+
tablePaginationLabel: _angular_core.InputSignal<string | undefined>;
|
|
4183
|
+
/** Resolved labels: explicit input takes precedence over the DI default. */
|
|
4184
|
+
protected resolvedItemsPerPageLabel: Signal<string>;
|
|
4185
|
+
protected resolvedOfLabel: Signal<string>;
|
|
4186
|
+
protected resolvedFirstPageLabel: Signal<string>;
|
|
4187
|
+
protected resolvedPreviousPageLabel: Signal<string>;
|
|
4188
|
+
protected resolvedNextPageLabel: Signal<string>;
|
|
4189
|
+
protected resolvedLastPageLabel: Signal<string>;
|
|
4190
|
+
protected resolvedTablePaginationLabel: Signal<string>;
|
|
4191
|
+
/** Emits the new 1-based page number whenever the user navigates. */
|
|
4192
|
+
pageChange: _angular_core.OutputEmitterRef<number>;
|
|
4193
|
+
/** Emits the new page-size value when the dropdown changes. */
|
|
4194
|
+
pageSizeChange: _angular_core.OutputEmitterRef<number>;
|
|
4195
|
+
/**
|
|
4196
|
+
* Total items reported by the data provider (when one is bound). Falls back
|
|
4197
|
+
* to `totalItems` input otherwise — see `effectiveTotalItems`.
|
|
4198
|
+
*/
|
|
4199
|
+
private providerTotalItems;
|
|
4200
|
+
/** The provider reference we're currently bound to (used to detect swaps). */
|
|
4201
|
+
private currentProvider;
|
|
4202
|
+
/** Subscription to the current provider's `currentPage$` — torn down on swap. */
|
|
4203
|
+
private providerSub;
|
|
4204
|
+
/**
|
|
4205
|
+
* Last pagination value we pushed to the provider. Used to recognize the
|
|
4206
|
+
* provider's resulting emission as our own echo and break the feedback loop
|
|
4207
|
+
* (setPagination → provider emits → syncFromProvider → setPagination …)
|
|
4208
|
+
* regardless of whether the provider emits synchronously or asynchronously,
|
|
4209
|
+
* and regardless of whether its stream replays on subscribe.
|
|
4210
|
+
*/
|
|
4211
|
+
private lastPushedPagination;
|
|
4212
|
+
protected effectiveTotalItems: Signal<number>;
|
|
4213
|
+
protected totalPages: Signal<number>;
|
|
4214
|
+
protected firstItemOnPage: Signal<number>;
|
|
4215
|
+
protected lastItemOnPage: Signal<number>;
|
|
4216
|
+
protected isFirstPageDisabled: Signal<boolean>;
|
|
4217
|
+
protected isLastPageDisabled: Signal<boolean>;
|
|
4218
|
+
protected pageSizeSelectOptions: Signal<TnSelectOption<number>[]>;
|
|
4219
|
+
constructor();
|
|
4220
|
+
private syncFromProvider;
|
|
4221
|
+
/**
|
|
4222
|
+
* Public navigation API: jump to a specific 1-based page. Used both by the
|
|
4223
|
+
* template (first/last buttons) and by consumers who want to drive the pager
|
|
4224
|
+
* programmatically. Out-of-range values and no-op transitions are silently
|
|
4225
|
+
* ignored. Sibling helpers `previousPage` / `nextPage` are template-only and
|
|
4226
|
+
* therefore `protected` — `goToPage` is intentionally part of the public API.
|
|
4227
|
+
*/
|
|
4228
|
+
goToPage(pageNumber: number): void;
|
|
4229
|
+
protected previousPage(): void;
|
|
4230
|
+
protected nextPage(): void;
|
|
4231
|
+
protected onPageSizeChange(value: number): void;
|
|
4232
|
+
/** Forwards the current page/size to the data provider, if one is bound. */
|
|
4233
|
+
private pushToProvider;
|
|
4234
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnTablePagerComponent, never>;
|
|
4235
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnTablePagerComponent, "tn-table-pager", never, { "currentPage": { "alias": "currentPage"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "totalItems": { "alias": "totalItems"; "required": false; "isSignal": true; }; "dataProvider": { "alias": "dataProvider"; "required": false; "isSignal": true; }; "itemsPerPageLabel": { "alias": "itemsPerPageLabel"; "required": false; "isSignal": true; }; "ofLabel": { "alias": "ofLabel"; "required": false; "isSignal": true; }; "firstPageLabel": { "alias": "firstPageLabel"; "required": false; "isSignal": true; }; "previousPageLabel": { "alias": "previousPageLabel"; "required": false; "isSignal": true; }; "nextPageLabel": { "alias": "nextPageLabel"; "required": false; "isSignal": true; }; "lastPageLabel": { "alias": "lastPageLabel"; "required": false; "isSignal": true; }; "tablePaginationLabel": { "alias": "tablePaginationLabel"; "required": false; "isSignal": true; }; }, { "currentPage": "currentPageChange"; "pageSize": "pageSizeChange"; "pageChange": "pageChange"; "pageSizeChange": "pageSizeChange"; }, never, never, true, [{ directive: typeof TnTestIdDirective; inputs: { "tnTestId": "testId"; }; outputs: {}; }]>;
|
|
4236
|
+
}
|
|
4237
|
+
|
|
4238
|
+
/**
|
|
4239
|
+
* Harness for interacting with `tn-table-pager` in tests.
|
|
4240
|
+
*
|
|
4241
|
+
* @example
|
|
4242
|
+
* ```ts
|
|
4243
|
+
* const pager = await loader.getHarness(TnTablePagerHarness);
|
|
4244
|
+
* await pager.nextPage();
|
|
4245
|
+
* expect(await pager.getRangeText()).toBe('21 – 40 of 47');
|
|
4246
|
+
* ```
|
|
4247
|
+
*/
|
|
4248
|
+
declare class TnTablePagerHarness extends ComponentHarness {
|
|
4249
|
+
static hostSelector: string;
|
|
4250
|
+
static with(options?: TnTablePagerHarnessFilters): HarnessPredicate<TnTablePagerHarness>;
|
|
4251
|
+
private firstButton;
|
|
4252
|
+
private previousButton;
|
|
4253
|
+
private nextButton;
|
|
4254
|
+
private lastButton;
|
|
4255
|
+
private pageSizeSelect;
|
|
4256
|
+
private rangeEl;
|
|
4257
|
+
/**
|
|
4258
|
+
* Returns the rendered range text (e.g. `"1 – 20 of 47"`).
|
|
4259
|
+
*/
|
|
4260
|
+
getRangeText(): Promise<string>;
|
|
4261
|
+
/** Clicks the "first page" button. */
|
|
4262
|
+
goToFirstPage(): Promise<void>;
|
|
4263
|
+
/** Clicks the "previous page" button. */
|
|
4264
|
+
previousPage(): Promise<void>;
|
|
4265
|
+
/** Clicks the "next page" button. */
|
|
4266
|
+
nextPage(): Promise<void>;
|
|
4267
|
+
/** Clicks the "last page" button. */
|
|
4268
|
+
goToLastPage(): Promise<void>;
|
|
4269
|
+
isFirstButtonDisabled(): Promise<boolean>;
|
|
4270
|
+
isPreviousButtonDisabled(): Promise<boolean>;
|
|
4271
|
+
isNextButtonDisabled(): Promise<boolean>;
|
|
4272
|
+
isLastButtonDisabled(): Promise<boolean>;
|
|
4273
|
+
/** Returns the harness for the underlying page-size `tn-select`. */
|
|
4274
|
+
getPageSizeSelect(): Promise<TnSelectHarness>;
|
|
4275
|
+
}
|
|
4276
|
+
interface TnTablePagerHarnessFilters extends BaseHarnessFilters {
|
|
4277
|
+
}
|
|
4278
|
+
|
|
3837
4279
|
/** Flat node with expandable and level information */
|
|
3838
4280
|
interface TnFlatTreeNode<T = unknown> {
|
|
3839
4281
|
data: T;
|
|
@@ -5660,14 +6102,20 @@ declare class TnEmptyComponent {
|
|
|
5660
6102
|
description: _angular_core.InputSignal<string | undefined>;
|
|
5661
6103
|
icon: _angular_core.InputSignal<string | undefined>;
|
|
5662
6104
|
iconLibrary: _angular_core.InputSignal<IconLibraryType>;
|
|
6105
|
+
/**
|
|
6106
|
+
* Overrides the icon size derived from `size`. Accepts any valid CSS size value
|
|
6107
|
+
* (e.g. `'48px'`, `'3rem'`). Use this when the variant presets are too small for an
|
|
6108
|
+
* empty-state illustration. When unset, the icon falls back to the `size`-based preset.
|
|
6109
|
+
*/
|
|
6110
|
+
iconSize: _angular_core.InputSignal<string | undefined>;
|
|
5663
6111
|
actionText: _angular_core.InputSignal<string | undefined>;
|
|
5664
6112
|
bordered: _angular_core.InputSignal<boolean>;
|
|
5665
6113
|
size: _angular_core.InputSignal<TnEmptySize>;
|
|
5666
6114
|
onAction: _angular_core.OutputEmitterRef<void>;
|
|
5667
6115
|
protected hasAction: _angular_core.Signal<boolean>;
|
|
5668
|
-
|
|
6116
|
+
protected iconSizePreset: _angular_core.Signal<"lg" | "xl">;
|
|
5669
6117
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnEmptyComponent, never>;
|
|
5670
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnEmptyComponent, "tn-empty", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconLibrary": { "alias": "iconLibrary"; "required": false; "isSignal": true; }; "actionText": { "alias": "actionText"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, { "onAction": "onAction"; }, never, never, true, never>;
|
|
6118
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnEmptyComponent, "tn-empty", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconLibrary": { "alias": "iconLibrary"; "required": false; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; "actionText": { "alias": "actionText"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, { "onAction": "onAction"; }, never, never, true, never>;
|
|
5671
6119
|
}
|
|
5672
6120
|
|
|
5673
6121
|
/**
|
|
@@ -6228,5 +6676,5 @@ declare const TN_THEME_DEFINITIONS: readonly TnThemeDefinition[];
|
|
|
6228
6676
|
*/
|
|
6229
6677
|
declare const THEME_MAP: Map<TnTheme, TnThemeDefinition>;
|
|
6230
6678
|
|
|
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 };
|
|
6679
|
+
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 };
|
|
6680
|
+
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 };
|