@truenas/ui-components 0.3.25 → 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
|
*
|
|
@@ -6572,7 +6597,12 @@ declare class TnNestedTreeNodeComponent<T, K = T> extends CdkNestedTreeNode<T, K
|
|
|
6572
6597
|
* defaults to the previous hardcoded value.
|
|
6573
6598
|
*/
|
|
6574
6599
|
readonly toggleAriaLabel: _angular_core.InputSignal<string>;
|
|
6575
|
-
/**
|
|
6600
|
+
/**
|
|
6601
|
+
* Semantic test-id base applied to the built-in toggle button (`button-`
|
|
6602
|
+
* prefixed). When unset, derives from the node's own `testId` — a row with
|
|
6603
|
+
* `[testId]="['vdev', guid]"` gets `button-toggle-vdev-<guid>` — so every
|
|
6604
|
+
* identified row has an addressable expand control without repeating the id.
|
|
6605
|
+
*/
|
|
6576
6606
|
readonly toggleTestId: _angular_core.InputSignal<TnTestIdValue>;
|
|
6577
6607
|
/**
|
|
6578
6608
|
* Suppresses the built-in toggle button (and its alignment spacer) so the
|
|
@@ -6584,7 +6614,10 @@ declare class TnNestedTreeNodeComponent<T, K = T> extends CdkNestedTreeNode<T, K
|
|
|
6584
6614
|
*/
|
|
6585
6615
|
readonly hideToggle: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
6586
6616
|
private readonly changeDetectorRef;
|
|
6617
|
+
private readonly hostTestId;
|
|
6587
6618
|
private destroyed;
|
|
6619
|
+
/** Explicit `toggleTestId` wins; otherwise `toggle`-scoped from the node's `testId`. */
|
|
6620
|
+
protected readonly resolvedToggleTestId: _angular_core.Signal<TnTestIdValue>;
|
|
6588
6621
|
constructor();
|
|
6589
6622
|
/** The tree node's level in the tree */
|
|
6590
6623
|
get level(): number;
|
|
@@ -6744,8 +6777,6 @@ interface TnTreeNodeHarnessFilters extends BaseHarnessFilters {
|
|
|
6744
6777
|
/** Only find nodes at the given 0-based level (root nodes are 0). */
|
|
6745
6778
|
level?: number;
|
|
6746
6779
|
}
|
|
6747
|
-
/** Filters for finding `TnTreeHarness` instances. */
|
|
6748
|
-
type TnTreeHarnessFilters = BaseHarnessFilters;
|
|
6749
6780
|
/**
|
|
6750
6781
|
* Harness for interacting with a single `tn-tree-node` or `tn-nested-tree-node`.
|
|
6751
6782
|
*
|
|
@@ -6817,6 +6848,9 @@ declare class TnTreeNodeHarness extends ComponentHarness {
|
|
|
6817
6848
|
collapse(): Promise<void>;
|
|
6818
6849
|
private getToggle;
|
|
6819
6850
|
}
|
|
6851
|
+
|
|
6852
|
+
/** Filters for finding `TnTreeHarness` instances. */
|
|
6853
|
+
type TnTreeHarnessFilters = BaseHarnessFilters;
|
|
6820
6854
|
/**
|
|
6821
6855
|
* Harness for interacting with `tn-tree` in tests.
|
|
6822
6856
|
*
|
|
@@ -7446,53 +7480,6 @@ declare function labelMarkupToHtml(value: string): string;
|
|
|
7446
7480
|
*/
|
|
7447
7481
|
declare function labelMarkupToText(value: string): string;
|
|
7448
7482
|
|
|
7449
|
-
declare class StripMntPrefixPipe implements PipeTransform {
|
|
7450
|
-
transform(path: string | null | undefined): string;
|
|
7451
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StripMntPrefixPipe, never>;
|
|
7452
|
-
static ɵpipe: _angular_core.ɵɵPipeDeclaration<StripMntPrefixPipe, "tnStripMntPrefix", true>;
|
|
7453
|
-
}
|
|
7454
|
-
|
|
7455
|
-
interface FileSystemItem {
|
|
7456
|
-
path: string;
|
|
7457
|
-
name: string;
|
|
7458
|
-
type: 'file' | 'folder' | 'dataset' | 'zvol' | 'mountpoint';
|
|
7459
|
-
size?: number;
|
|
7460
|
-
modified?: Date;
|
|
7461
|
-
permissions?: 'read' | 'write' | 'none';
|
|
7462
|
-
icon?: string;
|
|
7463
|
-
disabled?: boolean;
|
|
7464
|
-
isCreating?: boolean;
|
|
7465
|
-
tempId?: string;
|
|
7466
|
-
creationError?: string;
|
|
7467
|
-
}
|
|
7468
|
-
interface FilePickerCallbacks {
|
|
7469
|
-
getChildren?: (path: string) => Promise<FileSystemItem[]>;
|
|
7470
|
-
validatePath?: (path: string) => Promise<boolean>;
|
|
7471
|
-
createFolder?: (parentPath: string, name: string) => Promise<string>;
|
|
7472
|
-
createDataset?: (parentPath: string) => Promise<string>;
|
|
7473
|
-
createZvol?: (parentPath: string) => Promise<string>;
|
|
7474
|
-
}
|
|
7475
|
-
interface CreateFolderEvent {
|
|
7476
|
-
parentPath: string;
|
|
7477
|
-
folderName: string;
|
|
7478
|
-
}
|
|
7479
|
-
interface FilePickerError {
|
|
7480
|
-
type: 'navigation' | 'permission' | 'creation' | 'validation';
|
|
7481
|
-
message: string;
|
|
7482
|
-
path?: string;
|
|
7483
|
-
}
|
|
7484
|
-
interface PathSegment {
|
|
7485
|
-
name: string;
|
|
7486
|
-
path: string;
|
|
7487
|
-
}
|
|
7488
|
-
type FilePickerMode = 'file' | 'folder' | 'dataset' | 'zvol' | 'any';
|
|
7489
|
-
|
|
7490
|
-
declare class TruncatePathPipe implements PipeTransform {
|
|
7491
|
-
transform(path: string): PathSegment[];
|
|
7492
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TruncatePathPipe, never>;
|
|
7493
|
-
static ɵpipe: _angular_core.ɵɵPipeDeclaration<TruncatePathPipe, "tnTruncatePath", true>;
|
|
7494
|
-
}
|
|
7495
|
-
|
|
7496
7483
|
type SpinnerMode = 'determinate' | 'indeterminate';
|
|
7497
7484
|
declare class TnSpinnerComponent {
|
|
7498
7485
|
mode: _angular_core.InputSignal<SpinnerMode>;
|
|
@@ -9036,12 +9023,89 @@ interface StepperHarnessFilters extends BaseHarnessFilters {
|
|
|
9036
9023
|
orientation?: 'horizontal' | 'vertical';
|
|
9037
9024
|
}
|
|
9038
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
|
+
|
|
9039
9097
|
declare class TnFilePickerComponent implements ControlValueAccessor, OnInit, OnDestroy {
|
|
9040
|
-
|
|
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")[]>;
|
|
9041
9106
|
multiSelect: _angular_core.InputSignal<boolean>;
|
|
9042
|
-
|
|
9043
|
-
|
|
9044
|
-
allowZvolCreate: _angular_core.InputSignal<boolean>;
|
|
9107
|
+
/** Consumer-defined creation flows shown as buttons in the popup footer. */
|
|
9108
|
+
createActions: _angular_core.InputSignal<FilePickerCreateAction[]>;
|
|
9045
9109
|
allowManualInput: _angular_core.InputSignal<boolean>;
|
|
9046
9110
|
placeholder: _angular_core.InputSignal<string>;
|
|
9047
9111
|
disabled: _angular_core.InputSignal<boolean>;
|
|
@@ -9051,12 +9115,14 @@ declare class TnFilePickerComponent implements ControlValueAccessor, OnInit, OnD
|
|
|
9051
9115
|
*/
|
|
9052
9116
|
testId: _angular_core.InputSignal<TnTestIdValue>;
|
|
9053
9117
|
startPath: _angular_core.InputSignal<string>;
|
|
9118
|
+
/** Restricts navigation — users cannot navigate above this path. */
|
|
9054
9119
|
rootPath: _angular_core.InputSignal<string | undefined>;
|
|
9055
9120
|
fileExtensions: _angular_core.InputSignal<string[] | undefined>;
|
|
9056
9121
|
callbacks: _angular_core.InputSignal<FilePickerCallbacks | undefined>;
|
|
9057
9122
|
selectionChange: _angular_core.OutputEmitterRef<string | string[]>;
|
|
9058
9123
|
pathChange: _angular_core.OutputEmitterRef<string>;
|
|
9059
|
-
|
|
9124
|
+
/** Re-emitted from the popup when one of the `createActions` buttons is pressed. */
|
|
9125
|
+
createAction: _angular_core.OutputEmitterRef<FilePickerCreateActionEvent>;
|
|
9060
9126
|
error: _angular_core.OutputEmitterRef<FilePickerError>;
|
|
9061
9127
|
wrapperEl: _angular_core.Signal<ElementRef<HTMLDivElement>>;
|
|
9062
9128
|
filePickerTemplate: _angular_core.Signal<TemplateRef<unknown>>;
|
|
@@ -9070,10 +9136,9 @@ declare class TnFilePickerComponent implements ControlValueAccessor, OnInit, OnD
|
|
|
9070
9136
|
selectedItems: _angular_core.WritableSignal<string[]>;
|
|
9071
9137
|
loading: _angular_core.WritableSignal<boolean>;
|
|
9072
9138
|
hasError: _angular_core.WritableSignal<boolean>;
|
|
9073
|
-
creatingItemTempId: _angular_core.WritableSignal<string | null>;
|
|
9074
|
-
creationLoading: _angular_core.WritableSignal<boolean>;
|
|
9075
9139
|
private formDisabled;
|
|
9076
9140
|
isDisabled: _angular_core.Signal<boolean>;
|
|
9141
|
+
effectiveRootPath: _angular_core.Signal<string>;
|
|
9077
9142
|
private onChange;
|
|
9078
9143
|
private onTouched;
|
|
9079
9144
|
private overlay;
|
|
@@ -9085,7 +9150,13 @@ declare class TnFilePickerComponent implements ControlValueAccessor, OnInit, OnD
|
|
|
9085
9150
|
registerOnChange(fn: (value: string | string[]) => void): void;
|
|
9086
9151
|
registerOnTouched(fn: () => void): void;
|
|
9087
9152
|
setDisabledState(isDisabled: boolean): void;
|
|
9088
|
-
|
|
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;
|
|
9089
9160
|
openFilePicker(): void;
|
|
9090
9161
|
close(): void;
|
|
9091
9162
|
onItemClick(item: FileSystemItem): void;
|
|
@@ -9093,104 +9164,213 @@ declare class TnFilePickerComponent implements ControlValueAccessor, OnInit, OnD
|
|
|
9093
9164
|
onSubmit(): void;
|
|
9094
9165
|
onCancel(): void;
|
|
9095
9166
|
navigateToPath(path: string): void;
|
|
9096
|
-
|
|
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;
|
|
9097
9200
|
onClearSelection(): void;
|
|
9098
|
-
onSubmitFolderName(name: string, tempId: string): Promise<void>;
|
|
9099
|
-
onCancelFolderCreation(tempId: string): void;
|
|
9100
|
-
private removePendingItem;
|
|
9101
|
-
private updateCreatingItemError;
|
|
9102
|
-
private validateFolderName;
|
|
9103
9201
|
private loadDirectory;
|
|
9104
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
|
+
*/
|
|
9105
9209
|
private updateSelection;
|
|
9106
|
-
private updateSelectionFromItems;
|
|
9107
|
-
private toFullPath;
|
|
9108
9210
|
private emitError;
|
|
9109
9211
|
private createOverlay;
|
|
9110
9212
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnFilePickerComponent, never>;
|
|
9111
|
-
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>;
|
|
9112
9214
|
}
|
|
9113
9215
|
|
|
9114
|
-
|
|
9115
|
-
|
|
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")[]>;
|
|
9116
9237
|
multiSelect: _angular_core.InputSignal<boolean>;
|
|
9117
|
-
|
|
9118
|
-
|
|
9119
|
-
|
|
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[]>;
|
|
9120
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>;
|
|
9121
9251
|
fileItems: _angular_core.InputSignal<FileSystemItem[]>;
|
|
9122
9252
|
selectedItems: _angular_core.InputSignal<string[]>;
|
|
9123
9253
|
loading: _angular_core.InputSignal<boolean>;
|
|
9124
|
-
creationLoading: _angular_core.InputSignal<boolean>;
|
|
9125
9254
|
fileExtensions: _angular_core.InputSignal<string[] | undefined>;
|
|
9126
9255
|
private iconRegistry;
|
|
9256
|
+
private elementRef;
|
|
9127
9257
|
constructor();
|
|
9128
9258
|
/**
|
|
9129
|
-
*
|
|
9130
|
-
*
|
|
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.
|
|
9131
9273
|
*/
|
|
9132
|
-
private registerMdiIcons;
|
|
9133
|
-
ngOnInit(): void;
|
|
9134
|
-
ngAfterViewInit(): void;
|
|
9135
9274
|
ngAfterViewChecked(): void;
|
|
9136
9275
|
itemClick: _angular_core.OutputEmitterRef<FileSystemItem>;
|
|
9137
9276
|
itemDoubleClick: _angular_core.OutputEmitterRef<FileSystemItem>;
|
|
9138
9277
|
pathNavigate: _angular_core.OutputEmitterRef<string>;
|
|
9139
|
-
|
|
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>;
|
|
9140
9282
|
clearSelection: _angular_core.OutputEmitterRef<void>;
|
|
9141
9283
|
close: _angular_core.OutputEmitterRef<void>;
|
|
9142
9284
|
submit: _angular_core.OutputEmitterRef<void>;
|
|
9143
9285
|
cancel: _angular_core.OutputEmitterRef<void>;
|
|
9144
|
-
submitFolderName: _angular_core.OutputEmitterRef<{
|
|
9145
|
-
name: string;
|
|
9146
|
-
tempId: string;
|
|
9147
|
-
}>;
|
|
9148
|
-
cancelFolderCreation: _angular_core.OutputEmitterRef<string>;
|
|
9149
9286
|
displayedColumns: string[];
|
|
9150
|
-
|
|
9151
|
-
|
|
9152
|
-
|
|
9153
|
-
|
|
9154
|
-
|
|
9155
|
-
|
|
9156
|
-
|
|
9157
|
-
|
|
9158
|
-
|
|
9159
|
-
isCreating?: boolean;
|
|
9160
|
-
tempId?: string;
|
|
9161
|
-
creationError?: string;
|
|
9162
|
-
}[]>;
|
|
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[]>;
|
|
9163
9296
|
onItemClick(item: FileSystemItem): void;
|
|
9164
9297
|
onItemDoubleClick(item: FileSystemItem): void;
|
|
9298
|
+
onNavigateClick(event: Event, item: FileSystemItem): void;
|
|
9165
9299
|
navigateToPath(path: string): void;
|
|
9166
|
-
|
|
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;
|
|
9167
9318
|
onClearSelection(): void;
|
|
9168
9319
|
onSubmit(): void;
|
|
9169
9320
|
onCancel(): void;
|
|
9170
|
-
onFolderNameSubmit(event: Event, item: FileSystemItem): void;
|
|
9171
|
-
onFolderNameCancel(item: FileSystemItem): void;
|
|
9172
|
-
onFolderNameInputBlur(event: Event, item: FileSystemItem): void;
|
|
9173
|
-
onFolderNameKeyDown(event: KeyboardEvent, item: FileSystemItem): void;
|
|
9174
|
-
isCreateDisabled(): boolean;
|
|
9175
9321
|
isNavigatable(item: FileSystemItem): boolean;
|
|
9176
|
-
getItemIcon(item: FileSystemItem): string;
|
|
9177
|
-
getFileIcon(filename: string): string;
|
|
9178
9322
|
/**
|
|
9179
|
-
*
|
|
9180
|
-
*
|
|
9181
|
-
* @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.
|
|
9182
9325
|
*/
|
|
9183
|
-
|
|
9326
|
+
getItemIcon(item: FileSystemItem): string;
|
|
9327
|
+
getFileIcon(filename: string): string;
|
|
9184
9328
|
getZfsBadge(item: FileSystemItem): string;
|
|
9185
9329
|
isZfsObject(item: FileSystemItem): boolean;
|
|
9186
9330
|
isSelected(item: FileSystemItem): boolean;
|
|
9187
|
-
|
|
9188
|
-
|
|
9189
|
-
|
|
9190
|
-
|
|
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;
|
|
9191
9336
|
formatDate(date: Date): string;
|
|
9192
9337
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnFilePickerPopupComponent, never>;
|
|
9193
|
-
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>;
|
|
9194
9374
|
}
|
|
9195
9375
|
|
|
9196
9376
|
type TnEmptySize = 'default' | 'compact';
|
|
@@ -9754,5 +9934,5 @@ declare const TN_THEME_DEFINITIONS: readonly TnThemeDefinition[];
|
|
|
9754
9934
|
*/
|
|
9755
9935
|
declare const THEME_MAP: Map<TnTheme, TnThemeDefinition>;
|
|
9756
9936
|
|
|
9757
|
-
export { CommonShortcuts, DEFAULT_THEME, DiskIconComponent, DiskType, FileSizePipe, InputType, LIGHT_THEME, LabelMarkupPipe, LabelTextPipe, LinuxModifierKeys, LinuxShortcuts, ModifierKeys, QuickShortcuts, ShortcutBuilder,
|
|
9758
|
-
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 };
|