@truenas/ui-components 0.3.26 → 0.4.0
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
|
@@ -5933,6 +5933,15 @@ declare class TnTableComponent<T = unknown> implements OnInit {
|
|
|
5933
5933
|
* the row by id in your data source before assigning here.
|
|
5934
5934
|
*/
|
|
5935
5935
|
activeRow: _angular_core.InputSignal<T | null>;
|
|
5936
|
+
/**
|
|
5937
|
+
* Optional predicate marking rows as active, in addition to `activeRow`.
|
|
5938
|
+
* Use when several rows can be active at once (e.g. multi-selection
|
|
5939
|
+
* highlighting) or when matching by key rather than by reference. Active
|
|
5940
|
+
* rows get the same `tn-table__row--active` styling and, when `clickable`,
|
|
5941
|
+
* `aria-selected`. Re-evaluated on each change detection, so it may depend
|
|
5942
|
+
* on signals — keep it cheap and pure.
|
|
5943
|
+
*/
|
|
5944
|
+
activeWhen: _angular_core.InputSignal<((row: T) => boolean) | undefined>;
|
|
5936
5945
|
/**
|
|
5937
5946
|
* Overrides the active-row background color. Accepts any CSS color value
|
|
5938
5947
|
* (`#hex`, `rgb()`, `var(--token)`). Defaults to `--tn-bg3` when null.
|
|
@@ -5961,6 +5970,13 @@ declare class TnTableComponent<T = unknown> implements OnInit {
|
|
|
5961
5970
|
selectionChange: _angular_core.OutputEmitterRef<T[]>;
|
|
5962
5971
|
/** Emits the row when a clickable row is activated (click or Enter/Space). */
|
|
5963
5972
|
rowClick: _angular_core.OutputEmitterRef<T>;
|
|
5973
|
+
/**
|
|
5974
|
+
* Emits the row when a clickable row is double-clicked. Double-click has no
|
|
5975
|
+
* keyboard equivalent (Enter/Space emit `rowClick`), so consumers must
|
|
5976
|
+
* provide an accessible alternative for the same action — e.g. a dedicated
|
|
5977
|
+
* button inside the row, as the file picker does for entering directories.
|
|
5978
|
+
*/
|
|
5979
|
+
rowDoubleClick: _angular_core.OutputEmitterRef<T>;
|
|
5964
5980
|
columnDefs: _angular_core.Signal<readonly TnTableColumnDirective[]>;
|
|
5965
5981
|
detailRowDef: _angular_core.Signal<TnDetailRowDefDirective | undefined>;
|
|
5966
5982
|
sortColumn: _angular_core.WritableSignal<string>;
|
|
@@ -5997,6 +6013,7 @@ declare class TnTableComponent<T = unknown> implements OnInit {
|
|
|
5997
6013
|
isRowExpanded(row: T): boolean;
|
|
5998
6014
|
isRowActive(row: T): boolean;
|
|
5999
6015
|
onRowClick(row: T): void;
|
|
6016
|
+
onRowDoubleClick(row: T): void;
|
|
6000
6017
|
onRowKeydown(event: KeyboardEvent, row: T): void;
|
|
6001
6018
|
toggleSelectAll(): void;
|
|
6002
6019
|
toggleRowSelection(row: T): void;
|
|
@@ -6004,7 +6021,7 @@ declare class TnTableComponent<T = unknown> implements OnInit {
|
|
|
6004
6021
|
getColumnDef(columnName: string): TnTableColumnDirective | undefined;
|
|
6005
6022
|
getCellValue(row: T, column: string): unknown;
|
|
6006
6023
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnTableComponent<any>, never>;
|
|
6007
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnTableComponent<any>, "tn-table", never, { "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; "displayedColumns": { "alias": "displayedColumns"; "required": false; "isSignal": true; }; "trackBy": { "alias": "trackBy"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "emptyIcon": { "alias": "emptyIcon"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "isRowExpandable": { "alias": "isRowExpandable"; "required": false; "isSignal": true; }; "activeRow": { "alias": "activeRow"; "required": false; "isSignal": true; }; "activeBg": { "alias": "activeBg"; "required": false; "isSignal": true; }; "activeIndicator": { "alias": "activeIndicator"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "loadingMessage": { "alias": "loadingMessage"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; }, { "sortChange": "sortChange"; "selectionChange": "selectionChange"; "rowClick": "rowClick"; }, ["columnDefs", "detailRowDef"], never, true, [{ directive: typeof TnTestIdDirective; inputs: { "tnTestId": "testId"; }; outputs: {}; }]>;
|
|
6024
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnTableComponent<any>, "tn-table", never, { "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; "displayedColumns": { "alias": "displayedColumns"; "required": false; "isSignal": true; }; "trackBy": { "alias": "trackBy"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "emptyIcon": { "alias": "emptyIcon"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "isRowExpandable": { "alias": "isRowExpandable"; "required": false; "isSignal": true; }; "activeRow": { "alias": "activeRow"; "required": false; "isSignal": true; }; "activeWhen": { "alias": "activeWhen"; "required": false; "isSignal": true; }; "activeBg": { "alias": "activeBg"; "required": false; "isSignal": true; }; "activeIndicator": { "alias": "activeIndicator"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "loadingMessage": { "alias": "loadingMessage"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; }, { "sortChange": "sortChange"; "selectionChange": "selectionChange"; "rowClick": "rowClick"; "rowDoubleClick": "rowDoubleClick"; }, ["columnDefs", "detailRowDef"], never, true, [{ directive: typeof TnTestIdDirective; inputs: { "tnTestId": "testId"; }; outputs: {}; }]>;
|
|
6008
6025
|
}
|
|
6009
6026
|
|
|
6010
6027
|
/**
|
|
@@ -6136,6 +6153,14 @@ declare class TnTableHarness extends ComponentHarness {
|
|
|
6136
6153
|
* @param rowIndex Zero-based index of the data row.
|
|
6137
6154
|
*/
|
|
6138
6155
|
clickRow(rowIndex: number): Promise<void>;
|
|
6156
|
+
/**
|
|
6157
|
+
* Double-clicks a row (for tables with `clickable` enabled), triggering
|
|
6158
|
+
* `rowDoubleClick`. Note that a real double-click also fires two single
|
|
6159
|
+
* clicks first; this helper dispatches only the `dblclick` event.
|
|
6160
|
+
*
|
|
6161
|
+
* @param rowIndex Zero-based index of the data row.
|
|
6162
|
+
*/
|
|
6163
|
+
doubleClickRow(rowIndex: number): Promise<void>;
|
|
6139
6164
|
/**
|
|
6140
6165
|
* Sends a keyboard event to a row (Enter/Space activate clickable rows).
|
|
6141
6166
|
*
|
|
@@ -7455,53 +7480,6 @@ declare function labelMarkupToHtml(value: string): string;
|
|
|
7455
7480
|
*/
|
|
7456
7481
|
declare function labelMarkupToText(value: string): string;
|
|
7457
7482
|
|
|
7458
|
-
declare class StripMntPrefixPipe implements PipeTransform {
|
|
7459
|
-
transform(path: string | null | undefined): string;
|
|
7460
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StripMntPrefixPipe, never>;
|
|
7461
|
-
static ɵpipe: _angular_core.ɵɵPipeDeclaration<StripMntPrefixPipe, "tnStripMntPrefix", true>;
|
|
7462
|
-
}
|
|
7463
|
-
|
|
7464
|
-
interface FileSystemItem {
|
|
7465
|
-
path: string;
|
|
7466
|
-
name: string;
|
|
7467
|
-
type: 'file' | 'folder' | 'dataset' | 'zvol' | 'mountpoint';
|
|
7468
|
-
size?: number;
|
|
7469
|
-
modified?: Date;
|
|
7470
|
-
permissions?: 'read' | 'write' | 'none';
|
|
7471
|
-
icon?: string;
|
|
7472
|
-
disabled?: boolean;
|
|
7473
|
-
isCreating?: boolean;
|
|
7474
|
-
tempId?: string;
|
|
7475
|
-
creationError?: string;
|
|
7476
|
-
}
|
|
7477
|
-
interface FilePickerCallbacks {
|
|
7478
|
-
getChildren?: (path: string) => Promise<FileSystemItem[]>;
|
|
7479
|
-
validatePath?: (path: string) => Promise<boolean>;
|
|
7480
|
-
createFolder?: (parentPath: string, name: string) => Promise<string>;
|
|
7481
|
-
createDataset?: (parentPath: string) => Promise<string>;
|
|
7482
|
-
createZvol?: (parentPath: string) => Promise<string>;
|
|
7483
|
-
}
|
|
7484
|
-
interface CreateFolderEvent {
|
|
7485
|
-
parentPath: string;
|
|
7486
|
-
folderName: string;
|
|
7487
|
-
}
|
|
7488
|
-
interface FilePickerError {
|
|
7489
|
-
type: 'navigation' | 'permission' | 'creation' | 'validation';
|
|
7490
|
-
message: string;
|
|
7491
|
-
path?: string;
|
|
7492
|
-
}
|
|
7493
|
-
interface PathSegment {
|
|
7494
|
-
name: string;
|
|
7495
|
-
path: string;
|
|
7496
|
-
}
|
|
7497
|
-
type FilePickerMode = 'file' | 'folder' | 'dataset' | 'zvol' | 'any';
|
|
7498
|
-
|
|
7499
|
-
declare class TruncatePathPipe implements PipeTransform {
|
|
7500
|
-
transform(path: string): PathSegment[];
|
|
7501
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TruncatePathPipe, never>;
|
|
7502
|
-
static ɵpipe: _angular_core.ɵɵPipeDeclaration<TruncatePathPipe, "tnTruncatePath", true>;
|
|
7503
|
-
}
|
|
7504
|
-
|
|
7505
7483
|
type SpinnerMode = 'determinate' | 'indeterminate';
|
|
7506
7484
|
declare class TnSpinnerComponent {
|
|
7507
7485
|
mode: _angular_core.InputSignal<SpinnerMode>;
|
|
@@ -9045,12 +9023,89 @@ interface StepperHarnessFilters extends BaseHarnessFilters {
|
|
|
9045
9023
|
orientation?: 'horizontal' | 'vertical';
|
|
9046
9024
|
}
|
|
9047
9025
|
|
|
9026
|
+
interface FileSystemItem {
|
|
9027
|
+
path: string;
|
|
9028
|
+
name: string;
|
|
9029
|
+
type: 'file' | 'folder' | 'dataset' | 'zvol' | 'mountpoint';
|
|
9030
|
+
size?: number;
|
|
9031
|
+
modified?: Date;
|
|
9032
|
+
permissions?: 'read' | 'write' | 'none';
|
|
9033
|
+
/**
|
|
9034
|
+
* Fully-qualified sprite icon id overriding the type-based default, e.g.
|
|
9035
|
+
* 'mdi-folder' or 'tn-dataset'. Mark the icon for sprite inclusion with
|
|
9036
|
+
* `tnIconMarker` in the consuming code.
|
|
9037
|
+
*/
|
|
9038
|
+
icon?: string;
|
|
9039
|
+
disabled?: boolean;
|
|
9040
|
+
}
|
|
9041
|
+
interface FilePickerCallbacks {
|
|
9042
|
+
getChildren?: (path: string) => Promise<FileSystemItem[]>;
|
|
9043
|
+
validatePath?: (path: string) => Promise<boolean>;
|
|
9044
|
+
}
|
|
9045
|
+
/**
|
|
9046
|
+
* A consumer-defined creation flow surfaced as a button in the picker footer,
|
|
9047
|
+
* e.g. creating a dataset or zvol through a dialog. The creation itself
|
|
9048
|
+
* always happens outside the picker — either in a fully consumer-owned flow
|
|
9049
|
+
* (`createAction` event) or through the pluggable inline flow (`create`).
|
|
9050
|
+
*/
|
|
9051
|
+
interface FilePickerCreateAction {
|
|
9052
|
+
/** Identifies the action in `createAction` events, e.g. 'dataset'. */
|
|
9053
|
+
id: string;
|
|
9054
|
+
/** Button label. */
|
|
9055
|
+
label: string;
|
|
9056
|
+
/**
|
|
9057
|
+
* Fully-qualified sprite icon id shown in the inline creation row,
|
|
9058
|
+
* e.g. 'tn-dataset'. Defaults to 'mdi-folder'.
|
|
9059
|
+
*/
|
|
9060
|
+
icon?: string;
|
|
9061
|
+
/**
|
|
9062
|
+
* Opts into the built-in inline creation row. Pressing the action's button
|
|
9063
|
+
* then renders an editable name row at the top of the listing instead of
|
|
9064
|
+
* emitting `createAction`; submitting calls this with the browsed directory
|
|
9065
|
+
* and the entered name — the implementation does the real work (e.g. a
|
|
9066
|
+
* websocket API call). Resolve with the created path: the picker refreshes
|
|
9067
|
+
* the listing and selects it. Reject with an Error to show its message as
|
|
9068
|
+
* the inline error and keep the row editable for retry. Name validation
|
|
9069
|
+
* (duplicates, invalid characters, …) belongs in this callback.
|
|
9070
|
+
*
|
|
9071
|
+
* The row auto-submits when it loses focus with a non-empty name
|
|
9072
|
+
* (matching inline-rename conventions), so this callback can also fire
|
|
9073
|
+
* when the user clicks away — including on a click that navigates
|
|
9074
|
+
* elsewhere, which abandons the row and silently discards the resolved
|
|
9075
|
+
* path even though the item was created. Implementations should tolerate
|
|
9076
|
+
* that (e.g. creation is cheap to leave behind, or idempotent).
|
|
9077
|
+
*/
|
|
9078
|
+
create?: (parentPath: string, name: string) => Promise<string>;
|
|
9079
|
+
}
|
|
9080
|
+
interface FilePickerCreateActionEvent {
|
|
9081
|
+
actionId: string;
|
|
9082
|
+
/** Directory being browsed when the action was triggered. */
|
|
9083
|
+
parentPath: string;
|
|
9084
|
+
}
|
|
9085
|
+
interface FilePickerError {
|
|
9086
|
+
type: 'navigation' | 'permission' | 'creation' | 'validation';
|
|
9087
|
+
message: string;
|
|
9088
|
+
path?: string;
|
|
9089
|
+
}
|
|
9090
|
+
interface PathSegment {
|
|
9091
|
+
name: string;
|
|
9092
|
+
path: string;
|
|
9093
|
+
}
|
|
9094
|
+
type FileSystemItemType = FileSystemItem['type'];
|
|
9095
|
+
type FilePickerMode = 'file' | 'folder' | 'dataset' | 'zvol' | 'any';
|
|
9096
|
+
|
|
9048
9097
|
declare class TnFilePickerComponent implements ControlValueAccessor, OnInit, OnDestroy {
|
|
9049
|
-
|
|
9098
|
+
/**
|
|
9099
|
+
* What can be selected: a single mode, or an explicit list of selectable
|
|
9100
|
+
* item types, e.g. ['folder', 'dataset']. Whenever a directory-like type
|
|
9101
|
+
* (folder, dataset, mountpoint) is selectable, an empty selection stands
|
|
9102
|
+
* for the directory being browsed and submitting it picks `currentPath` —
|
|
9103
|
+
* this keeps empty directories selectable.
|
|
9104
|
+
*/
|
|
9105
|
+
mode: _angular_core.InputSignal<FilePickerMode | ("file" | "folder" | "dataset" | "zvol" | "mountpoint")[]>;
|
|
9050
9106
|
multiSelect: _angular_core.InputSignal<boolean>;
|
|
9051
|
-
|
|
9052
|
-
|
|
9053
|
-
allowZvolCreate: _angular_core.InputSignal<boolean>;
|
|
9107
|
+
/** Consumer-defined creation flows shown as buttons in the popup footer. */
|
|
9108
|
+
createActions: _angular_core.InputSignal<FilePickerCreateAction[]>;
|
|
9054
9109
|
allowManualInput: _angular_core.InputSignal<boolean>;
|
|
9055
9110
|
placeholder: _angular_core.InputSignal<string>;
|
|
9056
9111
|
disabled: _angular_core.InputSignal<boolean>;
|
|
@@ -9060,12 +9115,14 @@ declare class TnFilePickerComponent implements ControlValueAccessor, OnInit, OnD
|
|
|
9060
9115
|
*/
|
|
9061
9116
|
testId: _angular_core.InputSignal<TnTestIdValue>;
|
|
9062
9117
|
startPath: _angular_core.InputSignal<string>;
|
|
9118
|
+
/** Restricts navigation — users cannot navigate above this path. */
|
|
9063
9119
|
rootPath: _angular_core.InputSignal<string | undefined>;
|
|
9064
9120
|
fileExtensions: _angular_core.InputSignal<string[] | undefined>;
|
|
9065
9121
|
callbacks: _angular_core.InputSignal<FilePickerCallbacks | undefined>;
|
|
9066
9122
|
selectionChange: _angular_core.OutputEmitterRef<string | string[]>;
|
|
9067
9123
|
pathChange: _angular_core.OutputEmitterRef<string>;
|
|
9068
|
-
|
|
9124
|
+
/** Re-emitted from the popup when one of the `createActions` buttons is pressed. */
|
|
9125
|
+
createAction: _angular_core.OutputEmitterRef<FilePickerCreateActionEvent>;
|
|
9069
9126
|
error: _angular_core.OutputEmitterRef<FilePickerError>;
|
|
9070
9127
|
wrapperEl: _angular_core.Signal<ElementRef<HTMLDivElement>>;
|
|
9071
9128
|
filePickerTemplate: _angular_core.Signal<TemplateRef<unknown>>;
|
|
@@ -9079,10 +9136,9 @@ declare class TnFilePickerComponent implements ControlValueAccessor, OnInit, OnD
|
|
|
9079
9136
|
selectedItems: _angular_core.WritableSignal<string[]>;
|
|
9080
9137
|
loading: _angular_core.WritableSignal<boolean>;
|
|
9081
9138
|
hasError: _angular_core.WritableSignal<boolean>;
|
|
9082
|
-
creatingItemTempId: _angular_core.WritableSignal<string | null>;
|
|
9083
|
-
creationLoading: _angular_core.WritableSignal<boolean>;
|
|
9084
9139
|
private formDisabled;
|
|
9085
9140
|
isDisabled: _angular_core.Signal<boolean>;
|
|
9141
|
+
effectiveRootPath: _angular_core.Signal<string>;
|
|
9086
9142
|
private onChange;
|
|
9087
9143
|
private onTouched;
|
|
9088
9144
|
private overlay;
|
|
@@ -9094,7 +9150,13 @@ declare class TnFilePickerComponent implements ControlValueAccessor, OnInit, OnD
|
|
|
9094
9150
|
registerOnChange(fn: (value: string | string[]) => void): void;
|
|
9095
9151
|
registerOnTouched(fn: () => void): void;
|
|
9096
9152
|
setDisabledState(isDisabled: boolean): void;
|
|
9097
|
-
|
|
9153
|
+
/**
|
|
9154
|
+
* Commits a manually typed path. Bound to the input's `change` event
|
|
9155
|
+
* (Enter or blur), not `input`: validating per keystroke would emit an
|
|
9156
|
+
* error for every incomplete prefix of a valid path ('/m', '/mn', …)
|
|
9157
|
+
* and spam `validatePath` with paths the user never meant.
|
|
9158
|
+
*/
|
|
9159
|
+
onPathCommit(event: Event): void;
|
|
9098
9160
|
openFilePicker(): void;
|
|
9099
9161
|
close(): void;
|
|
9100
9162
|
onItemClick(item: FileSystemItem): void;
|
|
@@ -9102,104 +9164,213 @@ declare class TnFilePickerComponent implements ControlValueAccessor, OnInit, OnD
|
|
|
9102
9164
|
onSubmit(): void;
|
|
9103
9165
|
onCancel(): void;
|
|
9104
9166
|
navigateToPath(path: string): void;
|
|
9105
|
-
|
|
9167
|
+
/** An inline `create` flow finished — show the new item selected and applied. */
|
|
9168
|
+
onCreated(path: string): void;
|
|
9169
|
+
/**
|
|
9170
|
+
* Re-fetches the listing of the directory currently being browsed. Call it
|
|
9171
|
+
* when the directory changed outside the picker, e.g. after a
|
|
9172
|
+
* `createAction` flow created something in it.
|
|
9173
|
+
*/
|
|
9174
|
+
refresh(): Promise<void>;
|
|
9175
|
+
/**
|
|
9176
|
+
* Programmatically selects `path`, e.g. the mountpoint a `createAction`
|
|
9177
|
+
* flow just created: browses to its parent so the refreshed listing shows
|
|
9178
|
+
* the new item selected, and applies the path as the picker's value (form
|
|
9179
|
+
* value and `selectionChange`). The popup stays open so the user can
|
|
9180
|
+
* confirm with Select or keep browsing. Paths outside `rootPath` are
|
|
9181
|
+
* rejected with a `validation` error — the picker's value honors the same
|
|
9182
|
+
* confinement as navigation and manual input.
|
|
9183
|
+
*
|
|
9184
|
+
* This is a single-path operation: like a manually typed path, it
|
|
9185
|
+
* REPLACES any pending multi-selection rather than appending to it —
|
|
9186
|
+
* the intent is to focus the one path (e.g. a just-created item), not to
|
|
9187
|
+
* merge it into picks the user may have abandoned.
|
|
9188
|
+
*/
|
|
9189
|
+
selectPath(path: string): Promise<void>;
|
|
9190
|
+
private clampToRoot;
|
|
9191
|
+
/**
|
|
9192
|
+
* Browsing to another directory drops a not-yet-applied single-select
|
|
9193
|
+
* selection: keeping it would leave the footer claiming an item from a
|
|
9194
|
+
* directory the user is no longer looking at, and would mask the implicit
|
|
9195
|
+
* current-directory selection. Multi-select keeps its selection so items
|
|
9196
|
+
* can be picked across directories. The applied value (`selectedPath`,
|
|
9197
|
+
* form value) is untouched either way.
|
|
9198
|
+
*/
|
|
9199
|
+
private clearStalePendingSelection;
|
|
9106
9200
|
onClearSelection(): void;
|
|
9107
|
-
onSubmitFolderName(name: string, tempId: string): Promise<void>;
|
|
9108
|
-
onCancelFolderCreation(tempId: string): void;
|
|
9109
|
-
private removePendingItem;
|
|
9110
|
-
private updateCreatingItemError;
|
|
9111
|
-
private validateFolderName;
|
|
9112
9201
|
private loadDirectory;
|
|
9113
9202
|
private getMockFileItems;
|
|
9203
|
+
/**
|
|
9204
|
+
* Applies `path` as the picker's whole value. In multi-select this
|
|
9205
|
+
* replaces the selection with the single path — both callers (typed
|
|
9206
|
+
* paths, `selectPath()`) express one deliberate choice, so appending
|
|
9207
|
+
* would be the surprising behavior.
|
|
9208
|
+
*/
|
|
9114
9209
|
private updateSelection;
|
|
9115
|
-
private updateSelectionFromItems;
|
|
9116
|
-
private toFullPath;
|
|
9117
9210
|
private emitError;
|
|
9118
9211
|
private createOverlay;
|
|
9119
9212
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnFilePickerComponent, never>;
|
|
9120
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnFilePickerComponent, "tn-file-picker", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "multiSelect": { "alias": "multiSelect"; "required": false; "isSignal": true; }; "
|
|
9213
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnFilePickerComponent, "tn-file-picker", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "multiSelect": { "alias": "multiSelect"; "required": false; "isSignal": true; }; "createActions": { "alias": "createActions"; "required": false; "isSignal": true; }; "allowManualInput": { "alias": "allowManualInput"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; "startPath": { "alias": "startPath"; "required": false; "isSignal": true; }; "rootPath": { "alias": "rootPath"; "required": false; "isSignal": true; }; "fileExtensions": { "alias": "fileExtensions"; "required": false; "isSignal": true; }; "callbacks": { "alias": "callbacks"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "pathChange": "pathChange"; "createAction": "createAction"; "error": "error"; }, never, never, true, never>;
|
|
9121
9214
|
}
|
|
9122
9215
|
|
|
9123
|
-
|
|
9124
|
-
|
|
9216
|
+
/** State of an open inline creation row. */
|
|
9217
|
+
interface InlineCreationState {
|
|
9218
|
+
action: FilePickerCreateAction;
|
|
9219
|
+
/** Name entered so far, mirrored from the input on every keystroke. */
|
|
9220
|
+
name: string;
|
|
9221
|
+
loading: boolean;
|
|
9222
|
+
error?: string;
|
|
9223
|
+
}
|
|
9224
|
+
/** FileSystemItem decorated for display, plus the synthetic inline-create row. */
|
|
9225
|
+
interface DisplayedFileItem extends FileSystemItem {
|
|
9226
|
+
/** Dim only items with no interaction left. */
|
|
9227
|
+
dimmed: boolean;
|
|
9228
|
+
/** Marks the synthetic first row hosting the inline creation input. */
|
|
9229
|
+
inlineCreate?: boolean;
|
|
9230
|
+
}
|
|
9231
|
+
declare class TnFilePickerPopupComponent implements AfterViewChecked {
|
|
9232
|
+
/**
|
|
9233
|
+
* What can be selected: a single mode, or an explicit list of selectable
|
|
9234
|
+
* item types, e.g. ['folder', 'dataset'].
|
|
9235
|
+
*/
|
|
9236
|
+
mode: _angular_core.InputSignal<FilePickerMode | ("file" | "folder" | "dataset" | "zvol" | "mountpoint")[]>;
|
|
9125
9237
|
multiSelect: _angular_core.InputSignal<boolean>;
|
|
9126
|
-
|
|
9127
|
-
|
|
9128
|
-
|
|
9238
|
+
/**
|
|
9239
|
+
* Consumer-defined creation flows rendered as buttons in the footer, next to the
|
|
9240
|
+
* Select button. Pressing one emits `createAction` with the action id and the
|
|
9241
|
+
* currently browsed path.
|
|
9242
|
+
*/
|
|
9243
|
+
createActions: _angular_core.InputSignal<FilePickerCreateAction[]>;
|
|
9129
9244
|
currentPath: _angular_core.InputSignal<string>;
|
|
9245
|
+
/**
|
|
9246
|
+
* Topmost path the breadcrumb can navigate to. It is always the first
|
|
9247
|
+
* breadcrumb segment, rendered with its leading slash drawn as a separator
|
|
9248
|
+
* so the path reads "/ mnt / showcase".
|
|
9249
|
+
*/
|
|
9250
|
+
rootPath: _angular_core.InputSignal<string>;
|
|
9130
9251
|
fileItems: _angular_core.InputSignal<FileSystemItem[]>;
|
|
9131
9252
|
selectedItems: _angular_core.InputSignal<string[]>;
|
|
9132
9253
|
loading: _angular_core.InputSignal<boolean>;
|
|
9133
|
-
creationLoading: _angular_core.InputSignal<boolean>;
|
|
9134
9254
|
fileExtensions: _angular_core.InputSignal<string[] | undefined>;
|
|
9135
9255
|
private iconRegistry;
|
|
9256
|
+
private elementRef;
|
|
9136
9257
|
constructor();
|
|
9137
9258
|
/**
|
|
9138
|
-
*
|
|
9139
|
-
*
|
|
9259
|
+
* Requests a focus of the inline creation input on the next view check.
|
|
9260
|
+
* Set when the row opens and when a failed attempt re-enables the input —
|
|
9261
|
+
* the two moments the input either just entered the DOM or just lost focus
|
|
9262
|
+
* to the `disabled` attribute. Cleared once the focus is scheduled, so
|
|
9263
|
+
* focus is NOT permanently forced back: after an error the user can still
|
|
9264
|
+
* click elsewhere without being trapped in the input.
|
|
9265
|
+
*/
|
|
9266
|
+
private pendingCreationFocus;
|
|
9267
|
+
/**
|
|
9268
|
+
* Focus runs here rather than at the call sites because the input may not
|
|
9269
|
+
* be in the DOM (or may still be disabled) until a later view check, and a
|
|
9270
|
+
* re-render can replace the element after focus() was scheduled — render
|
|
9271
|
+
* scheduling differs between hosts. So the request keeps retrying on each
|
|
9272
|
+
* check and is cleared only once the input actually holds focus.
|
|
9140
9273
|
*/
|
|
9141
|
-
private registerMdiIcons;
|
|
9142
|
-
ngOnInit(): void;
|
|
9143
|
-
ngAfterViewInit(): void;
|
|
9144
9274
|
ngAfterViewChecked(): void;
|
|
9145
9275
|
itemClick: _angular_core.OutputEmitterRef<FileSystemItem>;
|
|
9146
9276
|
itemDoubleClick: _angular_core.OutputEmitterRef<FileSystemItem>;
|
|
9147
9277
|
pathNavigate: _angular_core.OutputEmitterRef<string>;
|
|
9148
|
-
|
|
9278
|
+
/** Emits when a `createActions` button without a `create` callback is pressed. */
|
|
9279
|
+
createAction: _angular_core.OutputEmitterRef<FilePickerCreateActionEvent>;
|
|
9280
|
+
/** Emits the created path when an inline `create` flow succeeds. */
|
|
9281
|
+
created: _angular_core.OutputEmitterRef<string>;
|
|
9149
9282
|
clearSelection: _angular_core.OutputEmitterRef<void>;
|
|
9150
9283
|
close: _angular_core.OutputEmitterRef<void>;
|
|
9151
9284
|
submit: _angular_core.OutputEmitterRef<void>;
|
|
9152
9285
|
cancel: _angular_core.OutputEmitterRef<void>;
|
|
9153
|
-
submitFolderName: _angular_core.OutputEmitterRef<{
|
|
9154
|
-
name: string;
|
|
9155
|
-
tempId: string;
|
|
9156
|
-
}>;
|
|
9157
|
-
cancelFolderCreation: _angular_core.OutputEmitterRef<string>;
|
|
9158
9286
|
displayedColumns: string[];
|
|
9159
|
-
|
|
9160
|
-
|
|
9161
|
-
|
|
9162
|
-
|
|
9163
|
-
|
|
9164
|
-
|
|
9165
|
-
|
|
9166
|
-
|
|
9167
|
-
|
|
9168
|
-
isCreating?: boolean;
|
|
9169
|
-
tempId?: string;
|
|
9170
|
-
creationError?: string;
|
|
9171
|
-
}[]>;
|
|
9287
|
+
/**
|
|
9288
|
+
* Whether an empty selection stands for the directory being browsed: true
|
|
9289
|
+
* whenever the selectable types include a directory-like type. The footer
|
|
9290
|
+
* then names the implicit selection and the Select button stays enabled; on
|
|
9291
|
+
* `submit` with no `selectedItems`, consumers treat `currentPath` as the
|
|
9292
|
+
* selection.
|
|
9293
|
+
*/
|
|
9294
|
+
allowCurrentDirectorySelection: _angular_core.Signal<boolean>;
|
|
9295
|
+
filteredFileItems: _angular_core.Signal<DisplayedFileItem[]>;
|
|
9172
9296
|
onItemClick(item: FileSystemItem): void;
|
|
9173
9297
|
onItemDoubleClick(item: FileSystemItem): void;
|
|
9298
|
+
onNavigateClick(event: Event, item: FileSystemItem): void;
|
|
9174
9299
|
navigateToPath(path: string): void;
|
|
9175
|
-
|
|
9300
|
+
onCreateAction(action: FilePickerCreateAction): void;
|
|
9301
|
+
/**
|
|
9302
|
+
* Inline creation state while a `create`-capable action's row is open.
|
|
9303
|
+
* The consumer's `create` callback does the real work; the row shows its
|
|
9304
|
+
* rejection message as the inline error. The entered name lives here (not
|
|
9305
|
+
* only in the DOM) so a listing re-render can't wipe it.
|
|
9306
|
+
*/
|
|
9307
|
+
inlineCreation: _angular_core.WritableSignal<InlineCreationState | null>;
|
|
9308
|
+
/** Links the inline creation input to its error message for screen readers. */
|
|
9309
|
+
inlineErrorId: string;
|
|
9310
|
+
submitInlineCreation(): Promise<void>;
|
|
9311
|
+
onInlineCreationKeyDown(event: KeyboardEvent): void;
|
|
9312
|
+
/**
|
|
9313
|
+
* Mirrors the typed name into the creation state and clears a shown error
|
|
9314
|
+
* as soon as the name is edited, re-arming blur submit.
|
|
9315
|
+
*/
|
|
9316
|
+
onInlineCreationInput(event: Event): void;
|
|
9317
|
+
onInlineCreationBlur(): void;
|
|
9176
9318
|
onClearSelection(): void;
|
|
9177
9319
|
onSubmit(): void;
|
|
9178
9320
|
onCancel(): void;
|
|
9179
|
-
onFolderNameSubmit(event: Event, item: FileSystemItem): void;
|
|
9180
|
-
onFolderNameCancel(item: FileSystemItem): void;
|
|
9181
|
-
onFolderNameInputBlur(event: Event, item: FileSystemItem): void;
|
|
9182
|
-
onFolderNameKeyDown(event: KeyboardEvent, item: FileSystemItem): void;
|
|
9183
|
-
isCreateDisabled(): boolean;
|
|
9184
9321
|
isNavigatable(item: FileSystemItem): boolean;
|
|
9185
|
-
getItemIcon(item: FileSystemItem): string;
|
|
9186
|
-
getFileIcon(filename: string): string;
|
|
9187
9322
|
/**
|
|
9188
|
-
*
|
|
9189
|
-
*
|
|
9190
|
-
* @returns 'custom' for TrueNAS custom icons, 'mdi' for Material Design Icons
|
|
9323
|
+
* Fully-qualified sprite icon name for an item. `tnIconMarker`/`libIconMarker`
|
|
9324
|
+
* calls double as build-time markers that pull these icons into the sprite.
|
|
9191
9325
|
*/
|
|
9192
|
-
|
|
9326
|
+
getItemIcon(item: FileSystemItem): string;
|
|
9327
|
+
getFileIcon(filename: string): string;
|
|
9193
9328
|
getZfsBadge(item: FileSystemItem): string;
|
|
9194
9329
|
isZfsObject(item: FileSystemItem): boolean;
|
|
9195
9330
|
isSelected(item: FileSystemItem): boolean;
|
|
9196
|
-
|
|
9197
|
-
|
|
9198
|
-
|
|
9199
|
-
|
|
9331
|
+
/**
|
|
9332
|
+
* Highlights selected rows through the table's supported active-row
|
|
9333
|
+
* styling (`activeWhen`) instead of reaching into its DOM.
|
|
9334
|
+
*/
|
|
9335
|
+
isRowSelected: (row: FileSystemItem) => boolean;
|
|
9200
9336
|
formatDate(date: Date): string;
|
|
9201
9337
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnFilePickerPopupComponent, never>;
|
|
9202
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnFilePickerPopupComponent, "tn-file-picker-popup", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "multiSelect": { "alias": "multiSelect"; "required": false; "isSignal": true; }; "
|
|
9338
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnFilePickerPopupComponent, "tn-file-picker-popup", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "multiSelect": { "alias": "multiSelect"; "required": false; "isSignal": true; }; "createActions": { "alias": "createActions"; "required": false; "isSignal": true; }; "currentPath": { "alias": "currentPath"; "required": false; "isSignal": true; }; "rootPath": { "alias": "rootPath"; "required": false; "isSignal": true; }; "fileItems": { "alias": "fileItems"; "required": false; "isSignal": true; }; "selectedItems": { "alias": "selectedItems"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "fileExtensions": { "alias": "fileExtensions"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; "itemDoubleClick": "itemDoubleClick"; "pathNavigate": "pathNavigate"; "createAction": "createAction"; "created": "created"; "clearSelection": "clearSelection"; "close": "close"; "submit": "submit"; "cancel": "cancel"; }, never, never, true, never>;
|
|
9339
|
+
}
|
|
9340
|
+
|
|
9341
|
+
/** Item types selectable under `mode`; null means every type is selectable. */
|
|
9342
|
+
declare function getSelectableTypes(mode: FilePickerMode | FileSystemItemType[]): FileSystemItemType[] | null;
|
|
9343
|
+
/**
|
|
9344
|
+
* Whether the browsed directory itself is a valid selection under `mode`,
|
|
9345
|
+
* i.e. whether any selectable type is directory-like. An empty selection
|
|
9346
|
+
* then stands for the current directory, which keeps empty directories
|
|
9347
|
+
* selectable.
|
|
9348
|
+
*/
|
|
9349
|
+
declare function allowsCurrentDirectorySelection(mode: FilePickerMode | FileSystemItemType[]): boolean;
|
|
9350
|
+
|
|
9351
|
+
/**
|
|
9352
|
+
* Whether `path` is `root` itself or nested anywhere beneath it. A plain
|
|
9353
|
+
* prefix check is not enough: '/mntx' is not within '/mnt', and a path
|
|
9354
|
+
* containing relative segments ('/mnt/../etc') could resolve outside the
|
|
9355
|
+
* root even though it starts with it — such paths are never within the root.
|
|
9356
|
+
*/
|
|
9357
|
+
declare function isPathWithinRoot(path: string, root: string): boolean;
|
|
9358
|
+
/**
|
|
9359
|
+
* Collapses trailing slashes so root comparisons are exact: '/mnt/backups/'
|
|
9360
|
+
* would otherwise never equal the '/mnt/backups' produced by navigation.
|
|
9361
|
+
* '/' stays '/'.
|
|
9362
|
+
*/
|
|
9363
|
+
declare function normalizeRootPath(root: string): string;
|
|
9364
|
+
|
|
9365
|
+
declare class TruncatePathPipe implements PipeTransform {
|
|
9366
|
+
transform(path: string, rootPath?: string): PathSegment[];
|
|
9367
|
+
/**
|
|
9368
|
+
* Collapses the middle of deep paths into an "…" segment that navigates to the
|
|
9369
|
+
* parent of the first visible directory, e.g. /mnt/a/b/c/d/e/f → /mnt … d e f.
|
|
9370
|
+
*/
|
|
9371
|
+
private truncateMiddle;
|
|
9372
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TruncatePathPipe, never>;
|
|
9373
|
+
static ɵpipe: _angular_core.ɵɵPipeDeclaration<TruncatePathPipe, "tnTruncatePath", true>;
|
|
9203
9374
|
}
|
|
9204
9375
|
|
|
9205
9376
|
type TnEmptySize = 'default' | 'compact';
|
|
@@ -9763,5 +9934,5 @@ declare const TN_THEME_DEFINITIONS: readonly TnThemeDefinition[];
|
|
|
9763
9934
|
*/
|
|
9764
9935
|
declare const THEME_MAP: Map<TnTheme, TnThemeDefinition>;
|
|
9765
9936
|
|
|
9766
|
-
export { CommonShortcuts, DEFAULT_THEME, DiskIconComponent, DiskType, FileSizePipe, InputType, LIGHT_THEME, LabelMarkupPipe, LabelTextPipe, LinuxModifierKeys, LinuxShortcuts, ModifierKeys, QuickShortcuts, ShortcutBuilder,
|
|
9767
|
-
export type { AutocompleteHarnessFilters, BannerHarnessFilters, ButtonHarnessFilters, ButtonToggleHarnessFilters, CalendarCell, CheckboxHarnessFilters, ChipColor, ChipHarnessFilters,
|
|
9937
|
+
export { CommonShortcuts, DEFAULT_THEME, DiskIconComponent, DiskType, FileSizePipe, InputType, LIGHT_THEME, LabelMarkupPipe, LabelTextPipe, LinuxModifierKeys, LinuxShortcuts, ModifierKeys, QuickShortcuts, ShortcutBuilder, THEME_MAP, THEME_STORAGE_KEY, TN_FORM_FIELD_CONTEXT, TN_FORM_FIELD_ERRORS, 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, TnCardFooterActionsDirective, TnCardHeaderActionsDirective, TnCardHeaderDirective, TnCellDefDirective, TnCheckboxComponent, TnCheckboxHarness, TnCheckboxLabelDirective, TnChipComponent, TnChipHarness, TnChipInputComponent, TnChipInputHarness, TnConfirmDialogComponent, TnDateInputComponent, TnDateInputHarness, TnDateRangeInputComponent, TnDateRangeInputHarness, TnDetailRowDefDirective, TnDialog, TnDialogHarness, TnDialogShellComponent, TnDialogTesting, TnDividerComponent, TnDividerDirective, TnDrawerComponent, TnDrawerContainerComponent, TnDrawerContainerHarness, TnDrawerContentComponent, TnDrawerHarness, TnEmptyComponent, TnEmptyHarness, TnExpansionPanelComponent, TnExpansionPanelHarness, TnFileInputComponent, TnFileInputHarness, TnFilePickerComponent, TnFilePickerPopupComponent, TnFormFieldComponent, TnFormFieldHarness, TnFormSectionComponent, TnFormSectionHarness, 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, TnNestedTreeDataSource, TnNestedTreeNodeComponent, TnParticleProgressBarComponent, TnProgressBarComponent, TnRadioComponent, TnRadioHarness, TnSelectComponent, TnSelectHarness, TnSelectionListComponent, TnSidePanelActionDirective, TnSidePanelComponent, TnSidePanelHarness, TnSidePanelHeaderActionDirective, TnSlideToggleComponent, TnSlideToggleHarness, TnSliderComponent, TnSliderThumbDirective, TnSliderWithLabelDirective, TnSpinnerComponent, TnSpriteLoaderService, TnStepComponent, TnStepperComponent, TnStepperHarness, TnStepperNextDirective, TnStepperPreviousDirective, 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, TnTreeHarness, TnTreeNodeComponent, TnTreeNodeHarness, TnTreeNodeOutletDirective, TnTreeVirtualScrollNodeOutletDirective, TnTreeVirtualScrollViewComponent, TnTreeVirtualScrollViewHarness, TruncatePathPipe, WindowsModifierKeys, WindowsShortcuts, allowsCurrentDirectorySelection, composeTestId, controlTestId, createFlatTreeControl, createLucideLibrary, createNestedTreeControl, createShortcut, defaultSpriteBasePath, defaultSpriteConfigPath, defaultTreeItemSize, formatSize, getSelectableTypes, injectTnFormFieldAria, isPathWithinRoot, kebabTestSegment, labelMarkupToHtml, labelMarkupToText, libIconMarker, normalizeRootPath, optionTestId, parseLabelMarkup, parseSize, registerLucideIcons, scopeTestId, setupLucideIntegration, tnIconMarker, writeTestId };
|
|
9938
|
+
export type { AutocompleteHarnessFilters, BannerHarnessFilters, ButtonHarnessFilters, ButtonToggleHarnessFilters, CalendarCell, CheckboxHarnessFilters, ChipColor, ChipHarnessFilters, DateInputHarnessFilters, DateRange, DateRangeInputHarnessFilters, DialogHarnessFilters, EmptyHarnessFilters, ExpansionPanelHarnessFilters, FileInputHarnessFilters, FilePickerCallbacks, FilePickerCreateAction, FilePickerCreateActionEvent, FilePickerError, FilePickerMode, FileSystemItem, FileSystemItemType, FlatTreeControlOptions, FormFieldHarnessFilters, FormSectionHarnessFilters, IconButtonHarnessFilters, IconHarnessFilters, IconLibrary, IconLibraryType, IconResult, IconSize, IconSource, IconTestingMockOverrides, InputHarnessFilters, KeyCombination, LabelMarkupSegment, LabelMarkupSegmentType, LabelType, LucideIconOptions, MenuHarnessFilters, MockIconRegistry, MockSpriteLoader, NestedTreeControlOptions, PathSegment, PlatformType, ProgressBarMode, RadioHarnessFilters, ResolvedIcon, SelectHarnessFilters, ShortcutHandler, SidePanelHarnessFilters, SizeStandard, SlideToggleColor, SlideToggleHarnessFilters, SpinnerMode, SpriteConfig, StepperHarnessFilters, SubscriptSizing, TabChangeEvent, TabHarnessFilters, TabPanelHarnessFilters, TabsHarnessFilters, TnAutocompleteOption, TnBannerType, TnButtonToggleType, TnCardAction, TnCardControl, TnCardFooterLink, TnCardHeaderStatus, TnChipInputHarnessFilters, TnChipInputOption, TnConfirmDialogData, TnDialogDefaults, TnDialogOpenTarget, TnDrawerMode, TnDrawerPosition, TnEmptySize, TnFlatTreeNode, TnFormFieldAriaBindings, TnFormFieldContext, TnFormFieldErrorMessage, TnFormFieldErrorMessages, TnFormFieldErrorResolver, TnMenuItem, TnOptionTestIdSource, TnSelectOption, TnSelectOptionGroup, TnSelectionChange, TnSortEvent, TnTableDataProvider, TnTableDataSource, TnTableHarnessFilters, TnTablePagerHarnessFilters, TnTablePagerLabels, TnTablePagination, TnTestAttrName, TnTestIdValue, TnThemeDefinition, TnToastCall, TnToastConfig, TnTreeExpansion, TnTreeHarnessFilters, TnTreeNodeHarnessFilters, TnTreeVirtualNodeData, TnTreeVirtualScrollViewHarnessFilters, TooltipPosition, YearCell };
|