@truenas/ui-components 0.2.6 → 0.3.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
|
@@ -160,16 +160,249 @@ declare class TnTestIdDirective {
|
|
|
160
160
|
*/
|
|
161
161
|
declare function writeTestId(renderer: Renderer2, element: Element, attrName: string, composed: string): void;
|
|
162
162
|
|
|
163
|
+
interface TnSelectOption<T = unknown> {
|
|
164
|
+
value: T;
|
|
165
|
+
label: string;
|
|
166
|
+
disabled?: boolean;
|
|
167
|
+
}
|
|
168
|
+
interface TnSelectOptionGroup<T = unknown> {
|
|
169
|
+
label: string;
|
|
170
|
+
options: TnSelectOption<T>[];
|
|
171
|
+
disabled?: boolean;
|
|
172
|
+
}
|
|
173
|
+
declare class TnSelectComponent<T = unknown> implements ControlValueAccessor, OnDestroy {
|
|
174
|
+
options: _angular_core.InputSignal<TnSelectOption<T>[]>;
|
|
175
|
+
optionGroups: _angular_core.InputSignal<TnSelectOptionGroup<T>[]>;
|
|
176
|
+
placeholder: _angular_core.InputSignal<string>;
|
|
177
|
+
/**
|
|
178
|
+
* Accessible label for the select trigger. When set, this is used as the
|
|
179
|
+
* trigger's `aria-label` instead of the visible `placeholder` — useful in
|
|
180
|
+
* contexts (e.g. a pager's page-size dropdown) where the placeholder text
|
|
181
|
+
* doesn't accurately describe the field's purpose to screen readers.
|
|
182
|
+
*/
|
|
183
|
+
ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
184
|
+
/**
|
|
185
|
+
* Message shown inside the dropdown when no options (and no option groups)
|
|
186
|
+
* are available. Defaults to the English `'No options available'`; consumers
|
|
187
|
+
* with i18n requirements can pass a translated string.
|
|
188
|
+
*/
|
|
189
|
+
noOptionsLabel: _angular_core.InputSignal<string>;
|
|
190
|
+
/**
|
|
191
|
+
* When `true` (single-select mode only), prepends a synthetic "empty"
|
|
192
|
+
* option to the dropdown so users can unset a chosen value: picking it
|
|
193
|
+
* resets the selection to `null`, shows the placeholder again, and emits
|
|
194
|
+
* `null` via `selectionChange` (and to any bound form control). Mirrors
|
|
195
|
+
* webui ix-select's `--` option. Ignored when `multiple` is set — there,
|
|
196
|
+
* values are cleared by toggling them off individually.
|
|
197
|
+
*/
|
|
198
|
+
allowEmpty: _angular_core.InputSignal<boolean>;
|
|
199
|
+
/** Label of the empty option rendered when `allowEmpty` is set. */
|
|
200
|
+
emptyLabel: _angular_core.InputSignal<string>;
|
|
201
|
+
disabled: _angular_core.InputSignal<boolean>;
|
|
202
|
+
testId: _angular_core.InputSignal<TnTestIdValue>;
|
|
203
|
+
multiple: _angular_core.InputSignal<boolean>;
|
|
204
|
+
/**
|
|
205
|
+
* Optional extractor for the per-option test-id discriminator. Defaults to
|
|
206
|
+
* the option's `value` (when a string/number) or its `label`. Provide this
|
|
207
|
+
* when option values are objects, or to pick a more stable/unique key —
|
|
208
|
+
* mirrors webui's `[ixTest]="[controlName, option.<field>]"` discriminator.
|
|
209
|
+
*
|
|
210
|
+
* @example
|
|
211
|
+
* ```html
|
|
212
|
+
* <tn-select testId="user" [optionTestIdKey]="(o) => o.value.id" ... />
|
|
213
|
+
* ```
|
|
214
|
+
*/
|
|
215
|
+
optionTestIdKey: _angular_core.InputSignal<((option: TnSelectOption<T>) => string | number | null | undefined) | undefined>;
|
|
216
|
+
/**
|
|
217
|
+
* Custom comparator for matching option values against the selected value(s).
|
|
218
|
+
*
|
|
219
|
+
* When the option values are objects, **provide this** — the built-in
|
|
220
|
+
* fallback uses `JSON.stringify`, which is key-order dependent and can
|
|
221
|
+
* produce false negatives for structurally equal objects. For primitives the
|
|
222
|
+
* default identity check is fine.
|
|
223
|
+
*
|
|
224
|
+
* @example
|
|
225
|
+
* ```ts
|
|
226
|
+
* compareWith = (a, b) => a?.id === b?.id;
|
|
227
|
+
* ```
|
|
228
|
+
*/
|
|
229
|
+
compareWith: _angular_core.InputSignal<((a: T | null, b: T | null) => boolean) | undefined>;
|
|
230
|
+
/**
|
|
231
|
+
* Emits the picked value on each selection in single mode. Emits `null`
|
|
232
|
+
* when the user picks the `allowEmpty` empty option to clear the field.
|
|
233
|
+
*/
|
|
234
|
+
selectionChange: _angular_core.OutputEmitterRef<T | null>;
|
|
235
|
+
/** Emits the full array of selected values after each toggle in multiple mode. */
|
|
236
|
+
multiSelectionChange: _angular_core.OutputEmitterRef<T[]>;
|
|
237
|
+
protected isOpen: _angular_core.WritableSignal<boolean>;
|
|
238
|
+
protected dropdownPosition: _angular_core.WritableSignal<"below" | "above">;
|
|
239
|
+
protected selectedValue: _angular_core.WritableSignal<T | null>;
|
|
240
|
+
protected selectedValues: _angular_core.WritableSignal<T[]>;
|
|
241
|
+
/** Index into `flatOptions` of the keyboard-focused row (-1 when none). */
|
|
242
|
+
protected focusedIndex: _angular_core.WritableSignal<number>;
|
|
243
|
+
private formDisabled;
|
|
244
|
+
private static instanceCounter;
|
|
245
|
+
private instanceId;
|
|
246
|
+
/**
|
|
247
|
+
* Id namespace used by all DOM ids the template emits (dropdown panel,
|
|
248
|
+
* option rows, group labels). Prefers `testId` when set so tests can target
|
|
249
|
+
* specific instances; otherwise falls back to a per-instance counter so two
|
|
250
|
+
* `<tn-select>`s on the same page never collide on `aria-controls`/group ids.
|
|
251
|
+
*/
|
|
252
|
+
protected idNamespace: _angular_core.Signal<string>;
|
|
253
|
+
isDisabled: _angular_core.Signal<boolean>;
|
|
254
|
+
/**
|
|
255
|
+
* The synthetic clear-selection option (`allowEmpty`, single mode only).
|
|
256
|
+
* Its value is `null` cast to `T` so it flows through the same selection
|
|
257
|
+
* path as real options — `selectedValue`/`writeValue` already model "no
|
|
258
|
+
* selection" as `null`, so picking it clears the field for free.
|
|
259
|
+
*/
|
|
260
|
+
protected emptyOption: _angular_core.Signal<TnSelectOption<T> | null>;
|
|
261
|
+
/** Ungrouped options as rendered: the empty option (when enabled) first. */
|
|
262
|
+
protected displayOptions: _angular_core.Signal<TnSelectOption<T>[]>;
|
|
263
|
+
/** Whether `option` is the synthetic `allowEmpty` clear option. */
|
|
264
|
+
protected isEmptyOption(option: TnSelectOption<T>): boolean;
|
|
265
|
+
/**
|
|
266
|
+
* Selectable, non-disabled options in display order (regular options first,
|
|
267
|
+
* then groups). Used by keyboard navigation so we can skip disabled
|
|
268
|
+
* entries and group headers without a separate filter pass.
|
|
269
|
+
*/
|
|
270
|
+
navigableOptions: _angular_core.Signal<{
|
|
271
|
+
option: TnSelectOption<T>;
|
|
272
|
+
id: string;
|
|
273
|
+
}[]>;
|
|
274
|
+
/** Stable DOM id of the currently-highlighted option, for aria-activedescendant. */
|
|
275
|
+
focusedOptionId: _angular_core.Signal<string | null>;
|
|
276
|
+
/** Stable DOM id for an option; matches what navigableOptions() assigns. */
|
|
277
|
+
optionId(option: TnSelectOption<T>): string | null;
|
|
278
|
+
/** Whether `option` is the keyboard-highlighted item. */
|
|
279
|
+
isOptionFocused(option: TnSelectOption<T>): boolean;
|
|
280
|
+
/**
|
|
281
|
+
* Test-id segments for an option row, consumed by `[tnTestId]` with
|
|
282
|
+
* `tnTestIdType="option"`. The select's `testId` scopes each option so ids
|
|
283
|
+
* stay unique across selects: base `quick-filters` + option value `ssd` →
|
|
284
|
+
* `option-quick-filters-ssd`; with no base → `option-ssd`. The discriminator
|
|
285
|
+
* comes from `optionTestIdKey` when provided, else the option's primitive
|
|
286
|
+
* `value`, else its `label`.
|
|
287
|
+
*/
|
|
288
|
+
protected optionTestIdParts(option: TnSelectOption<T>): (string | number | null | undefined)[];
|
|
289
|
+
private onChange;
|
|
290
|
+
private onTouched;
|
|
291
|
+
private elementRef;
|
|
292
|
+
private cdr;
|
|
293
|
+
private overlay;
|
|
294
|
+
private viewContainerRef;
|
|
295
|
+
private triggerEl;
|
|
296
|
+
private dropdownTemplate;
|
|
297
|
+
private overlayRef?;
|
|
298
|
+
private overlaySubs;
|
|
299
|
+
writeValue(value: T | T[] | null): void;
|
|
300
|
+
registerOnChange(fn: (value: T | T[] | null) => void): void;
|
|
301
|
+
registerOnTouched(fn: () => void): void;
|
|
302
|
+
setDisabledState(isDisabled: boolean): void;
|
|
303
|
+
toggleDropdown(): void;
|
|
304
|
+
openDropdown(): void;
|
|
305
|
+
/**
|
|
306
|
+
* Attach the dropdown panel as a CDK overlay anchored to the trigger.
|
|
307
|
+
*
|
|
308
|
+
* Why an overlay (vs. an inline absolutely-positioned panel):
|
|
309
|
+
* - Escapes parent `overflow: hidden`/clipping in surrounding layouts.
|
|
310
|
+
* - `outsidePointerEvents()` notifies on outside pointerdown WITHOUT
|
|
311
|
+
* intercepting the click (no backdrop) — so the user's click reaches
|
|
312
|
+
* the underlying target while the select closes silently.
|
|
313
|
+
* - Position is recomputed on scroll so the panel stays attached.
|
|
314
|
+
* - Width is matched to the trigger so the panel doesn't jump in size.
|
|
315
|
+
*/
|
|
316
|
+
private attachOverlay;
|
|
317
|
+
private detachOverlay;
|
|
318
|
+
ngOnDestroy(): void;
|
|
319
|
+
/**
|
|
320
|
+
* Closes the dropdown.
|
|
321
|
+
*
|
|
322
|
+
* @param restoreFocus When `true` (the default), returns focus to the
|
|
323
|
+
* trigger. Used for explicit closes — Escape, Enter/Space activation,
|
|
324
|
+
* option click — where the user is still interacting with the select.
|
|
325
|
+
* Pass `false` for click-outside / blur paths so we don't steal focus
|
|
326
|
+
* from the element the user actually navigated to.
|
|
327
|
+
*/
|
|
328
|
+
closeDropdown(restoreFocus?: boolean): void;
|
|
329
|
+
onOptionClick(option: TnSelectOption<T>, groupDisabled?: boolean): void;
|
|
330
|
+
selectOption(option: TnSelectOption<T>): void;
|
|
331
|
+
private toggleOption;
|
|
332
|
+
isOptionSelected(option: TnSelectOption<T>): boolean;
|
|
333
|
+
protected displayText: _angular_core.Signal<string>;
|
|
334
|
+
private findOptionByValue;
|
|
335
|
+
protected hasAnyOptions: _angular_core.Signal<boolean>;
|
|
336
|
+
/** One-shot guard so the object-compare warning fires at most once per instance. */
|
|
337
|
+
private warnedAboutObjectCompare;
|
|
338
|
+
/**
|
|
339
|
+
* Compares two option values for equality.
|
|
340
|
+
*
|
|
341
|
+
* - Uses `compareWith` when provided (the supported path for object values).
|
|
342
|
+
* - Falls back to strict identity (`===`) — adequate for primitives.
|
|
343
|
+
* - For object values WITHOUT `compareWith` we return `false` (no
|
|
344
|
+
* structural compare) and emit a one-time warning. The previous
|
|
345
|
+
* `JSON.stringify` fallback was key-order sensitive and produced silent
|
|
346
|
+
* false-negatives that were hard to diagnose; returning `false` makes the
|
|
347
|
+
* misuse loud (selection won't match) and the warning points to the fix.
|
|
348
|
+
*
|
|
349
|
+
* The warning is **unconditional** (not gated on `isDevMode()`) so prod
|
|
350
|
+
* monitoring picks it up — consumers relying on the old stringify fallback
|
|
351
|
+
* would otherwise see selections silently stop matching after upgrade with
|
|
352
|
+
* no signal in production logs.
|
|
353
|
+
*/
|
|
354
|
+
private compareValues;
|
|
355
|
+
/**
|
|
356
|
+
* Keyboard navigation for the combobox trigger.
|
|
357
|
+
*
|
|
358
|
+
* - **ArrowDown / ArrowUp** opens the dropdown if closed; otherwise moves
|
|
359
|
+
* the keyboard-focus highlight (via aria-activedescendant) up/down,
|
|
360
|
+
* skipping disabled options and group headers.
|
|
361
|
+
* - **Home / End** jump to the first / last enabled option.
|
|
362
|
+
* - **Enter / Space** opens the dropdown if closed; if open and an option
|
|
363
|
+
* is highlighted, selects that option (in single mode) or toggles it
|
|
364
|
+
* (in multiple mode).
|
|
365
|
+
* - **Escape** closes the dropdown without changing the selection.
|
|
366
|
+
*
|
|
367
|
+
* All navigation keys call `event.preventDefault()` so the page does not
|
|
368
|
+
* scroll while the user is moving through options.
|
|
369
|
+
*/
|
|
370
|
+
onKeydown(event: KeyboardEvent): void;
|
|
371
|
+
private moveFocus;
|
|
372
|
+
private activateFocusedOption;
|
|
373
|
+
private scrollFocusedIntoView;
|
|
374
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnSelectComponent<any>, never>;
|
|
375
|
+
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; }; "allowEmpty": { "alias": "allowEmpty"; "required": false; "isSignal": true; }; "emptyLabel": { "alias": "emptyLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "optionTestIdKey": { "alias": "optionTestIdKey"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "multiSelectionChange": "multiSelectionChange"; }, never, never, true, never>;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* Option shape for `tn-autocomplete` — the `label` is displayed, the `value`
|
|
380
|
+
* is committed to the form control, and a truthy `disabled` keeps the row
|
|
381
|
+
* visible but non-selectable (skipped by keyboard nav, click, and text-match
|
|
382
|
+
* commits). Structurally identical to `TnSelectOption`, so the same data
|
|
383
|
+
* sources feed both dropdown components.
|
|
384
|
+
*/
|
|
385
|
+
type TnAutocompleteOption<T = unknown> = TnSelectOption<T>;
|
|
163
386
|
declare class TnAutocompleteComponent<T = unknown> implements ControlValueAccessor, OnDestroy {
|
|
164
387
|
private readonly elementRef;
|
|
165
388
|
private readonly overlay;
|
|
166
389
|
private readonly viewContainerRef;
|
|
167
390
|
/** Unique instance ID for ARIA linkage */
|
|
168
391
|
protected readonly uid: string;
|
|
169
|
-
/**
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
392
|
+
/**
|
|
393
|
+
* All available options. The `label` is displayed; the `value` is committed
|
|
394
|
+
* to the form control. A written value is resolved back to its option's
|
|
395
|
+
* label for display — falling back to `String(value)` until the matching
|
|
396
|
+
* option is available, and upgraded once an async option load lands.
|
|
397
|
+
*/
|
|
398
|
+
options: _angular_core.InputSignal<TnAutocompleteOption<T>[]>;
|
|
399
|
+
/**
|
|
400
|
+
* Custom comparator for matching a written control value against option
|
|
401
|
+
* values during display resolution. Defaults to identity (`===`), which is
|
|
402
|
+
* right for primitive values; provide this when option values are objects.
|
|
403
|
+
* Mirrors `tn-select`'s `compareWith`.
|
|
404
|
+
*/
|
|
405
|
+
compareWith: _angular_core.InputSignal<((a: T | null, b: T | null) => boolean) | undefined>;
|
|
173
406
|
/** Placeholder text for the input */
|
|
174
407
|
placeholder: _angular_core.InputSignal<string>;
|
|
175
408
|
/** Whether the input is disabled */
|
|
@@ -191,8 +424,8 @@ declare class TnAutocompleteComponent<T = unknown> implements ControlValueAccess
|
|
|
191
424
|
loading: _angular_core.InputSignal<boolean>;
|
|
192
425
|
/** Text shown next to the spinner while `loading` is set. */
|
|
193
426
|
loadingText: _angular_core.InputSignal<string>;
|
|
194
|
-
/** Custom filter function. Defaults to case-insensitive includes on
|
|
195
|
-
filterFn: _angular_core.InputSignal<((option: T
|
|
427
|
+
/** Custom filter function. Defaults to case-insensitive includes on the option label */
|
|
428
|
+
filterFn: _angular_core.InputSignal<((option: TnAutocompleteOption<T>, searchTerm: string) => boolean) | undefined>;
|
|
196
429
|
/** Text shown when no options match the search */
|
|
197
430
|
noResultsText: _angular_core.InputSignal<string>;
|
|
198
431
|
/**
|
|
@@ -212,8 +445,8 @@ declare class TnAutocompleteComponent<T = unknown> implements ControlValueAccess
|
|
|
212
445
|
panelMaxHeight: _angular_core.InputSignal<string | number>;
|
|
213
446
|
/** Test ID attribute */
|
|
214
447
|
testId: _angular_core.InputSignal<TnTestIdValue>;
|
|
215
|
-
/** Emits
|
|
216
|
-
optionSelected: _angular_core.OutputEmitterRef<T
|
|
448
|
+
/** Emits the full option (label + value) when one is selected */
|
|
449
|
+
optionSelected: _angular_core.OutputEmitterRef<TnAutocompleteOption<T>>;
|
|
217
450
|
/**
|
|
218
451
|
* Emits the search term as the user types (not on programmatic writes or
|
|
219
452
|
* option selection). Drive server-side filtering from this: fetch matches
|
|
@@ -249,14 +482,14 @@ declare class TnAutocompleteComponent<T = unknown> implements ControlValueAccess
|
|
|
249
482
|
protected isOpen: _angular_core.WritableSignal<boolean>;
|
|
250
483
|
/** Index of the currently highlighted option for keyboard nav */
|
|
251
484
|
protected highlightedIndex: _angular_core.WritableSignal<number>;
|
|
252
|
-
/** The currently
|
|
485
|
+
/** The currently committed value (an option's `value`, or a custom-typed one) */
|
|
253
486
|
private selectedValue;
|
|
254
487
|
/** CVA disabled state from the form */
|
|
255
488
|
private formDisabled;
|
|
256
489
|
/** Combined disabled state */
|
|
257
490
|
isDisabled: _angular_core.Signal<boolean>;
|
|
258
491
|
/** Filtered and capped options */
|
|
259
|
-
protected filteredOptions: _angular_core.Signal<T[]>;
|
|
492
|
+
protected filteredOptions: _angular_core.Signal<TnAutocompleteOption<T>[]>;
|
|
260
493
|
/** Whether there are any results to show */
|
|
261
494
|
protected hasResults: _angular_core.Signal<boolean>;
|
|
262
495
|
private onChange;
|
|
@@ -273,6 +506,8 @@ declare class TnAutocompleteComponent<T = unknown> implements ControlValueAccess
|
|
|
273
506
|
private lastOptionsCount;
|
|
274
507
|
/** Scroll distance (px) from the panel bottom that triggers `loadMore`. */
|
|
275
508
|
private static readonly loadMoreThresholdPx;
|
|
509
|
+
/** Guards the object-without-compareWith warning so it fires only once. */
|
|
510
|
+
private warnedAboutObjectCompare;
|
|
276
511
|
constructor();
|
|
277
512
|
ngOnDestroy(): void;
|
|
278
513
|
writeValue(value: T | null): void;
|
|
@@ -282,7 +517,7 @@ declare class TnAutocompleteComponent<T = unknown> implements ControlValueAccess
|
|
|
282
517
|
onInput(event: Event): void;
|
|
283
518
|
onFocus(): void;
|
|
284
519
|
onBlur(): void;
|
|
285
|
-
onOptionClick(option: T): void;
|
|
520
|
+
onOptionClick(option: TnAutocompleteOption<T>): void;
|
|
286
521
|
onKeydown(event: KeyboardEvent): void;
|
|
287
522
|
/**
|
|
288
523
|
* `loadMore` normally fires from a scroll event, which never happens when
|
|
@@ -292,6 +527,25 @@ declare class TnAutocompleteComponent<T = unknown> implements ControlValueAccess
|
|
|
292
527
|
*/
|
|
293
528
|
private checkUnderfill;
|
|
294
529
|
onPanelScroll(event: Event): void;
|
|
530
|
+
/**
|
|
531
|
+
* Whether `option` carries the committed value — drives `aria-selected` so
|
|
532
|
+
* assistive tech announces the current choice independently of the keyboard
|
|
533
|
+
* cursor (which is conveyed via `aria-activedescendant`).
|
|
534
|
+
*/
|
|
535
|
+
protected isOptionSelected(option: TnAutocompleteOption<T>): boolean;
|
|
536
|
+
/**
|
|
537
|
+
* Index of the committed value's option in the visible list, or -1 when
|
|
538
|
+
* nothing is committed or the match is absent/disabled. Used to seed the
|
|
539
|
+
* keyboard cursor when the panel opens.
|
|
540
|
+
*/
|
|
541
|
+
private selectedOptionIndex;
|
|
542
|
+
/**
|
|
543
|
+
* Next selectable option index from `from` in `direction` (+1 down, -1 up),
|
|
544
|
+
* skipping disabled rows and wrapping around. `from` of -1 ("nothing
|
|
545
|
+
* highlighted") lands on the first row going down, the last going up.
|
|
546
|
+
* Returns -1 when every visible option is disabled.
|
|
547
|
+
*/
|
|
548
|
+
private nextEnabledIndex;
|
|
295
549
|
/**
|
|
296
550
|
* Commit the current search term as the value (allowCustomValue mode). A
|
|
297
551
|
* display match (case-insensitive, same as the requireSelection path)
|
|
@@ -299,6 +553,19 @@ declare class TnAutocompleteComponent<T = unknown> implements ControlValueAccess
|
|
|
299
553
|
* typing its full text behaves like clicking it.
|
|
300
554
|
*/
|
|
301
555
|
private commitCustomValue;
|
|
556
|
+
/**
|
|
557
|
+
* Resolves a committed value back to its option's display label, falling
|
|
558
|
+
* back to the raw value's string until the matching option is available.
|
|
559
|
+
*/
|
|
560
|
+
private displayValue;
|
|
561
|
+
/**
|
|
562
|
+
* Compares option values, honoring `compareWith` when provided. Without one,
|
|
563
|
+
* falls back to identity (`===`) — which never matches structurally-equal
|
|
564
|
+
* objects from different references, so display resolution and selection
|
|
565
|
+
* silently fail. Warn once on that misuse (unconditional, like `tn-select`,
|
|
566
|
+
* so prod monitoring catches it) and return `false` to make it loud.
|
|
567
|
+
*/
|
|
568
|
+
private valueMatches;
|
|
302
569
|
private selectOption;
|
|
303
570
|
private open;
|
|
304
571
|
private close;
|
|
@@ -315,7 +582,7 @@ declare class TnAutocompleteComponent<T = unknown> implements ControlValueAccess
|
|
|
315
582
|
private detachOverlay;
|
|
316
583
|
private scrollToHighlighted;
|
|
317
584
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnAutocompleteComponent<any>, never>;
|
|
318
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnAutocompleteComponent<any>, "tn-autocomplete", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "
|
|
585
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnAutocompleteComponent<any>, "tn-autocomplete", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "requireSelection": { "alias": "requireSelection"; "required": false; "isSignal": true; }; "allowCustomValue": { "alias": "allowCustomValue"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "loadingText": { "alias": "loadingText"; "required": false; "isSignal": true; }; "filterFn": { "alias": "filterFn"; "required": false; "isSignal": true; }; "noResultsText": { "alias": "noResultsText"; "required": false; "isSignal": true; }; "maxResults": { "alias": "maxResults"; "required": false; "isSignal": true; }; "panelMaxHeight": { "alias": "panelMaxHeight"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; }, { "optionSelected": "optionSelected"; "searchChange": "searchChange"; "loadMore": "loadMore"; "opened": "opened"; }, never, never, true, never>;
|
|
319
586
|
}
|
|
320
587
|
|
|
321
588
|
/**
|
|
@@ -2783,7 +3050,7 @@ declare class TnTabComponent implements AfterContentInit {
|
|
|
2783
3050
|
onClick(): void;
|
|
2784
3051
|
onKeydown(event: KeyboardEvent): void;
|
|
2785
3052
|
classes: _angular_core.Signal<string>;
|
|
2786
|
-
tabIndex: _angular_core.Signal
|
|
3053
|
+
tabIndex: _angular_core.Signal<-1 | 0>;
|
|
2787
3054
|
hasIcon: _angular_core.Signal<boolean>;
|
|
2788
3055
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnTabComponent, never>;
|
|
2789
3056
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnTabComponent, "tn-tab", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconTemplate": { "alias": "iconTemplate"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; }, { "selected": "selected"; }, ["iconContent"], ["*"], true, never>;
|
|
@@ -3214,7 +3481,7 @@ interface TabsHarnessFilters extends BaseHarnessFilters {
|
|
|
3214
3481
|
*/
|
|
3215
3482
|
declare class TnMenuTriggerDirective implements OnDestroy {
|
|
3216
3483
|
menu: _angular_core.InputSignal<TnMenuComponent>;
|
|
3217
|
-
tnMenuPosition: _angular_core.InputSignal<"
|
|
3484
|
+
tnMenuPosition: _angular_core.InputSignal<"below" | "above" | "before" | "after">;
|
|
3218
3485
|
private overlayRef?;
|
|
3219
3486
|
private isMenuOpen;
|
|
3220
3487
|
private itemClickSub?;
|
|
@@ -3801,221 +4068,6 @@ interface FormFieldHarnessFilters extends BaseHarnessFilters {
|
|
|
3801
4068
|
testId?: string;
|
|
3802
4069
|
}
|
|
3803
4070
|
|
|
3804
|
-
interface TnSelectOption<T = unknown> {
|
|
3805
|
-
value: T;
|
|
3806
|
-
label: string;
|
|
3807
|
-
disabled?: boolean;
|
|
3808
|
-
}
|
|
3809
|
-
interface TnSelectOptionGroup<T = unknown> {
|
|
3810
|
-
label: string;
|
|
3811
|
-
options: TnSelectOption<T>[];
|
|
3812
|
-
disabled?: boolean;
|
|
3813
|
-
}
|
|
3814
|
-
declare class TnSelectComponent<T = unknown> implements ControlValueAccessor, OnDestroy {
|
|
3815
|
-
options: _angular_core.InputSignal<TnSelectOption<T>[]>;
|
|
3816
|
-
optionGroups: _angular_core.InputSignal<TnSelectOptionGroup<T>[]>;
|
|
3817
|
-
placeholder: _angular_core.InputSignal<string>;
|
|
3818
|
-
/**
|
|
3819
|
-
* Accessible label for the select trigger. When set, this is used as the
|
|
3820
|
-
* trigger's `aria-label` instead of the visible `placeholder` — useful in
|
|
3821
|
-
* contexts (e.g. a pager's page-size dropdown) where the placeholder text
|
|
3822
|
-
* doesn't accurately describe the field's purpose to screen readers.
|
|
3823
|
-
*/
|
|
3824
|
-
ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
3825
|
-
/**
|
|
3826
|
-
* Message shown inside the dropdown when no options (and no option groups)
|
|
3827
|
-
* are available. Defaults to the English `'No options available'`; consumers
|
|
3828
|
-
* with i18n requirements can pass a translated string.
|
|
3829
|
-
*/
|
|
3830
|
-
noOptionsLabel: _angular_core.InputSignal<string>;
|
|
3831
|
-
/**
|
|
3832
|
-
* When `true` (single-select mode only), prepends a synthetic "empty"
|
|
3833
|
-
* option to the dropdown so users can unset a chosen value: picking it
|
|
3834
|
-
* resets the selection to `null`, shows the placeholder again, and emits
|
|
3835
|
-
* `null` via `selectionChange` (and to any bound form control). Mirrors
|
|
3836
|
-
* webui ix-select's `--` option. Ignored when `multiple` is set — there,
|
|
3837
|
-
* values are cleared by toggling them off individually.
|
|
3838
|
-
*/
|
|
3839
|
-
allowEmpty: _angular_core.InputSignal<boolean>;
|
|
3840
|
-
/** Label of the empty option rendered when `allowEmpty` is set. */
|
|
3841
|
-
emptyLabel: _angular_core.InputSignal<string>;
|
|
3842
|
-
disabled: _angular_core.InputSignal<boolean>;
|
|
3843
|
-
testId: _angular_core.InputSignal<TnTestIdValue>;
|
|
3844
|
-
multiple: _angular_core.InputSignal<boolean>;
|
|
3845
|
-
/**
|
|
3846
|
-
* Optional extractor for the per-option test-id discriminator. Defaults to
|
|
3847
|
-
* the option's `value` (when a string/number) or its `label`. Provide this
|
|
3848
|
-
* when option values are objects, or to pick a more stable/unique key —
|
|
3849
|
-
* mirrors webui's `[ixTest]="[controlName, option.<field>]"` discriminator.
|
|
3850
|
-
*
|
|
3851
|
-
* @example
|
|
3852
|
-
* ```html
|
|
3853
|
-
* <tn-select testId="user" [optionTestIdKey]="(o) => o.value.id" ... />
|
|
3854
|
-
* ```
|
|
3855
|
-
*/
|
|
3856
|
-
optionTestIdKey: _angular_core.InputSignal<((option: TnSelectOption<T>) => string | number | null | undefined) | undefined>;
|
|
3857
|
-
/**
|
|
3858
|
-
* Custom comparator for matching option values against the selected value(s).
|
|
3859
|
-
*
|
|
3860
|
-
* When the option values are objects, **provide this** — the built-in
|
|
3861
|
-
* fallback uses `JSON.stringify`, which is key-order dependent and can
|
|
3862
|
-
* produce false negatives for structurally equal objects. For primitives the
|
|
3863
|
-
* default identity check is fine.
|
|
3864
|
-
*
|
|
3865
|
-
* @example
|
|
3866
|
-
* ```ts
|
|
3867
|
-
* compareWith = (a, b) => a?.id === b?.id;
|
|
3868
|
-
* ```
|
|
3869
|
-
*/
|
|
3870
|
-
compareWith: _angular_core.InputSignal<((a: T | null, b: T | null) => boolean) | undefined>;
|
|
3871
|
-
/**
|
|
3872
|
-
* Emits the picked value on each selection in single mode. Emits `null`
|
|
3873
|
-
* when the user picks the `allowEmpty` empty option to clear the field.
|
|
3874
|
-
*/
|
|
3875
|
-
selectionChange: _angular_core.OutputEmitterRef<T | null>;
|
|
3876
|
-
/** Emits the full array of selected values after each toggle in multiple mode. */
|
|
3877
|
-
multiSelectionChange: _angular_core.OutputEmitterRef<T[]>;
|
|
3878
|
-
protected isOpen: _angular_core.WritableSignal<boolean>;
|
|
3879
|
-
protected dropdownPosition: _angular_core.WritableSignal<"above" | "below">;
|
|
3880
|
-
protected selectedValue: _angular_core.WritableSignal<T | null>;
|
|
3881
|
-
protected selectedValues: _angular_core.WritableSignal<T[]>;
|
|
3882
|
-
/** Index into `flatOptions` of the keyboard-focused row (-1 when none). */
|
|
3883
|
-
protected focusedIndex: _angular_core.WritableSignal<number>;
|
|
3884
|
-
private formDisabled;
|
|
3885
|
-
private static instanceCounter;
|
|
3886
|
-
private instanceId;
|
|
3887
|
-
/**
|
|
3888
|
-
* Id namespace used by all DOM ids the template emits (dropdown panel,
|
|
3889
|
-
* option rows, group labels). Prefers `testId` when set so tests can target
|
|
3890
|
-
* specific instances; otherwise falls back to a per-instance counter so two
|
|
3891
|
-
* `<tn-select>`s on the same page never collide on `aria-controls`/group ids.
|
|
3892
|
-
*/
|
|
3893
|
-
protected idNamespace: _angular_core.Signal<string>;
|
|
3894
|
-
isDisabled: _angular_core.Signal<boolean>;
|
|
3895
|
-
/**
|
|
3896
|
-
* The synthetic clear-selection option (`allowEmpty`, single mode only).
|
|
3897
|
-
* Its value is `null` cast to `T` so it flows through the same selection
|
|
3898
|
-
* path as real options — `selectedValue`/`writeValue` already model "no
|
|
3899
|
-
* selection" as `null`, so picking it clears the field for free.
|
|
3900
|
-
*/
|
|
3901
|
-
protected emptyOption: _angular_core.Signal<TnSelectOption<T> | null>;
|
|
3902
|
-
/** Ungrouped options as rendered: the empty option (when enabled) first. */
|
|
3903
|
-
protected displayOptions: _angular_core.Signal<TnSelectOption<T>[]>;
|
|
3904
|
-
/** Whether `option` is the synthetic `allowEmpty` clear option. */
|
|
3905
|
-
protected isEmptyOption(option: TnSelectOption<T>): boolean;
|
|
3906
|
-
/**
|
|
3907
|
-
* Selectable, non-disabled options in display order (regular options first,
|
|
3908
|
-
* then groups). Used by keyboard navigation so we can skip disabled
|
|
3909
|
-
* entries and group headers without a separate filter pass.
|
|
3910
|
-
*/
|
|
3911
|
-
navigableOptions: _angular_core.Signal<{
|
|
3912
|
-
option: TnSelectOption<T>;
|
|
3913
|
-
id: string;
|
|
3914
|
-
}[]>;
|
|
3915
|
-
/** Stable DOM id of the currently-highlighted option, for aria-activedescendant. */
|
|
3916
|
-
focusedOptionId: _angular_core.Signal<string | null>;
|
|
3917
|
-
/** Stable DOM id for an option; matches what navigableOptions() assigns. */
|
|
3918
|
-
optionId(option: TnSelectOption<T>): string | null;
|
|
3919
|
-
/** Whether `option` is the keyboard-highlighted item. */
|
|
3920
|
-
isOptionFocused(option: TnSelectOption<T>): boolean;
|
|
3921
|
-
/**
|
|
3922
|
-
* Test-id segments for an option row, consumed by `[tnTestId]` with
|
|
3923
|
-
* `tnTestIdType="option"`. The select's `testId` scopes each option so ids
|
|
3924
|
-
* stay unique across selects: base `quick-filters` + option value `ssd` →
|
|
3925
|
-
* `option-quick-filters-ssd`; with no base → `option-ssd`. The discriminator
|
|
3926
|
-
* comes from `optionTestIdKey` when provided, else the option's primitive
|
|
3927
|
-
* `value`, else its `label`.
|
|
3928
|
-
*/
|
|
3929
|
-
protected optionTestIdParts(option: TnSelectOption<T>): (string | number | null | undefined)[];
|
|
3930
|
-
private onChange;
|
|
3931
|
-
private onTouched;
|
|
3932
|
-
private elementRef;
|
|
3933
|
-
private cdr;
|
|
3934
|
-
private overlay;
|
|
3935
|
-
private viewContainerRef;
|
|
3936
|
-
private triggerEl;
|
|
3937
|
-
private dropdownTemplate;
|
|
3938
|
-
private overlayRef?;
|
|
3939
|
-
private overlaySubs;
|
|
3940
|
-
writeValue(value: T | T[] | null): void;
|
|
3941
|
-
registerOnChange(fn: (value: T | T[] | null) => void): void;
|
|
3942
|
-
registerOnTouched(fn: () => void): void;
|
|
3943
|
-
setDisabledState(isDisabled: boolean): void;
|
|
3944
|
-
toggleDropdown(): void;
|
|
3945
|
-
openDropdown(): void;
|
|
3946
|
-
/**
|
|
3947
|
-
* Attach the dropdown panel as a CDK overlay anchored to the trigger.
|
|
3948
|
-
*
|
|
3949
|
-
* Why an overlay (vs. an inline absolutely-positioned panel):
|
|
3950
|
-
* - Escapes parent `overflow: hidden`/clipping in surrounding layouts.
|
|
3951
|
-
* - `outsidePointerEvents()` notifies on outside pointerdown WITHOUT
|
|
3952
|
-
* intercepting the click (no backdrop) — so the user's click reaches
|
|
3953
|
-
* the underlying target while the select closes silently.
|
|
3954
|
-
* - Position is recomputed on scroll so the panel stays attached.
|
|
3955
|
-
* - Width is matched to the trigger so the panel doesn't jump in size.
|
|
3956
|
-
*/
|
|
3957
|
-
private attachOverlay;
|
|
3958
|
-
private detachOverlay;
|
|
3959
|
-
ngOnDestroy(): void;
|
|
3960
|
-
/**
|
|
3961
|
-
* Closes the dropdown.
|
|
3962
|
-
*
|
|
3963
|
-
* @param restoreFocus When `true` (the default), returns focus to the
|
|
3964
|
-
* trigger. Used for explicit closes — Escape, Enter/Space activation,
|
|
3965
|
-
* option click — where the user is still interacting with the select.
|
|
3966
|
-
* Pass `false` for click-outside / blur paths so we don't steal focus
|
|
3967
|
-
* from the element the user actually navigated to.
|
|
3968
|
-
*/
|
|
3969
|
-
closeDropdown(restoreFocus?: boolean): void;
|
|
3970
|
-
onOptionClick(option: TnSelectOption<T>, groupDisabled?: boolean): void;
|
|
3971
|
-
selectOption(option: TnSelectOption<T>): void;
|
|
3972
|
-
private toggleOption;
|
|
3973
|
-
isOptionSelected(option: TnSelectOption<T>): boolean;
|
|
3974
|
-
protected displayText: _angular_core.Signal<string>;
|
|
3975
|
-
private findOptionByValue;
|
|
3976
|
-
protected hasAnyOptions: _angular_core.Signal<boolean>;
|
|
3977
|
-
/** One-shot guard so the object-compare warning fires at most once per instance. */
|
|
3978
|
-
private warnedAboutObjectCompare;
|
|
3979
|
-
/**
|
|
3980
|
-
* Compares two option values for equality.
|
|
3981
|
-
*
|
|
3982
|
-
* - Uses `compareWith` when provided (the supported path for object values).
|
|
3983
|
-
* - Falls back to strict identity (`===`) — adequate for primitives.
|
|
3984
|
-
* - For object values WITHOUT `compareWith` we return `false` (no
|
|
3985
|
-
* structural compare) and emit a one-time warning. The previous
|
|
3986
|
-
* `JSON.stringify` fallback was key-order sensitive and produced silent
|
|
3987
|
-
* false-negatives that were hard to diagnose; returning `false` makes the
|
|
3988
|
-
* misuse loud (selection won't match) and the warning points to the fix.
|
|
3989
|
-
*
|
|
3990
|
-
* The warning is **unconditional** (not gated on `isDevMode()`) so prod
|
|
3991
|
-
* monitoring picks it up — consumers relying on the old stringify fallback
|
|
3992
|
-
* would otherwise see selections silently stop matching after upgrade with
|
|
3993
|
-
* no signal in production logs.
|
|
3994
|
-
*/
|
|
3995
|
-
private compareValues;
|
|
3996
|
-
/**
|
|
3997
|
-
* Keyboard navigation for the combobox trigger.
|
|
3998
|
-
*
|
|
3999
|
-
* - **ArrowDown / ArrowUp** opens the dropdown if closed; otherwise moves
|
|
4000
|
-
* the keyboard-focus highlight (via aria-activedescendant) up/down,
|
|
4001
|
-
* skipping disabled options and group headers.
|
|
4002
|
-
* - **Home / End** jump to the first / last enabled option.
|
|
4003
|
-
* - **Enter / Space** opens the dropdown if closed; if open and an option
|
|
4004
|
-
* is highlighted, selects that option (in single mode) or toggles it
|
|
4005
|
-
* (in multiple mode).
|
|
4006
|
-
* - **Escape** closes the dropdown without changing the selection.
|
|
4007
|
-
*
|
|
4008
|
-
* All navigation keys call `event.preventDefault()` so the page does not
|
|
4009
|
-
* scroll while the user is moving through options.
|
|
4010
|
-
*/
|
|
4011
|
-
onKeydown(event: KeyboardEvent): void;
|
|
4012
|
-
private moveFocus;
|
|
4013
|
-
private activateFocusedOption;
|
|
4014
|
-
private scrollFocusedIntoView;
|
|
4015
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnSelectComponent<any>, never>;
|
|
4016
|
-
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; }; "allowEmpty": { "alias": "allowEmpty"; "required": false; "isSignal": true; }; "emptyLabel": { "alias": "emptyLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "optionTestIdKey": { "alias": "optionTestIdKey"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "multiSelectionChange": "multiSelectionChange"; }, never, never, true, never>;
|
|
4017
|
-
}
|
|
4018
|
-
|
|
4019
4071
|
/**
|
|
4020
4072
|
* Harness for interacting with tn-select in tests.
|
|
4021
4073
|
* Provides methods for querying select state, opening/closing the dropdown,
|
|
@@ -7794,4 +7846,4 @@ declare const TN_THEME_DEFINITIONS: readonly TnThemeDefinition[];
|
|
|
7794
7846
|
declare const THEME_MAP: Map<TnTheme, TnThemeDefinition>;
|
|
7795
7847
|
|
|
7796
7848
|
export { CommonShortcuts, DEFAULT_THEME, DiskIconComponent, DiskType, FileSizePipe, InputType, LIGHT_THEME, LabelMarkupPipe, LabelTextPipe, LinuxModifierKeys, LinuxShortcuts, ModifierKeys, QuickShortcuts, ShortcutBuilder, StripMntPrefixPipe, THEME_MAP, THEME_STORAGE_KEY, 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, TnCardHeaderDirective, TnCellDefDirective, TnCheckboxComponent, TnCheckboxHarness, TnCheckboxLabelDirective, TnChipComponent, TnConfirmDialogComponent, TnDateInputComponent, TnDateInputHarness, TnDateRangeInputComponent, TnDateRangeInputHarness, TnDetailRowDefDirective, TnDialog, TnDialogHarness, TnDialogShellComponent, TnDialogTesting, TnDividerComponent, TnDividerDirective, TnDrawerComponent, TnDrawerContainerComponent, TnDrawerContainerHarness, TnDrawerContentComponent, TnDrawerHarness, TnEmptyComponent, TnEmptyHarness, TnExpansionPanelComponent, TnExpansionPanelHarness, TnFilePickerComponent, TnFilePickerPopupComponent, TnFormFieldComponent, TnFormFieldHarness, TnHeaderCellDefDirective, TnIconButtonComponent, TnIconButtonHarness, TnIconComponent, TnIconHarness, TnIconRegistryService, TnIconTesting, TnInputComponent, TnInputDirective, TnInputHarness, TnKeyboardShortcutComponent, TnKeyboardShortcutService, TnListAvatarDirective, TnListComponent, TnListIconDirective, TnListItemComponent, TnListItemLineDirective, TnListItemPrimaryDirective, TnListItemSecondaryDirective, TnListItemTitleDirective, TnListItemTrailingDirective, TnListOptionComponent, TnListSubheaderComponent, TnMenuActivateHoverDirective, TnMenuComponent, TnMenuHarness, TnMenuItemComponent, TnMenuTesting, TnMenuTriggerDirective, TnMonthViewComponent, TnMultiYearViewComponent, TnNestedTreeNodeComponent, TnParticleProgressBarComponent, TnProgressBarComponent, TnRadioComponent, TnRadioHarness, TnSelectComponent, TnSelectHarness, TnSelectionListComponent, TnSidePanelActionDirective, TnSidePanelComponent, TnSidePanelHarness, TnSidePanelHeaderActionDirective, TnSlideToggleComponent, TnSlideToggleHarness, TnSliderComponent, TnSliderThumbDirective, TnSliderWithLabelDirective, TnSpinnerComponent, TnSpriteLoaderService, TnStepComponent, TnStepperComponent, TnTabComponent, TnTabHarness, TnTabPanelComponent, TnTabPanelHarness, TnTableColumnDirective, TnTableComponent, TnTableHarness, TnTablePagerComponent, TnTablePagerHarness, TnTabsComponent, TnTabsHarness, TnTestIdDirective, TnTheme, TnThemeService, TnTimeInputComponent, TnToastComponent, TnToastMock, TnToastPosition, TnToastRef, TnToastService, TnToastTesting, TnToastType, TnTooltipComponent, TnTooltipDirective, TnTreeComponent, TnTreeFlatDataSource, TnTreeFlattener, TnTreeNodeComponent, TnTreeNodeOutletDirective, TruncatePathPipe, WindowsModifierKeys, WindowsShortcuts, composeTestId, createLucideLibrary, createShortcut, defaultSpriteBasePath, defaultSpriteConfigPath, formatSize, kebabTestSegment, labelMarkupToHtml, labelMarkupToText, libIconMarker, parseLabelMarkup, parseSize, registerLucideIcons, scopeTestId, setupLucideIntegration, tnIconMarker, writeTestId };
|
|
7797
|
-
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, LabelMarkupSegment, LabelMarkupSegmentType, LabelType, LucideIconOptions, MenuHarnessFilters, MockIconRegistry, MockSpriteLoader, PathSegment, PlatformType, ProgressBarMode, RadioHarnessFilters, ResolvedIcon, SelectHarnessFilters, ShortcutHandler, SidePanelHarnessFilters, SizeStandard, SlideToggleColor, SlideToggleHarnessFilters, SpinnerMode, SpriteConfig, SubscriptSizing, TabChangeEvent, TabHarnessFilters, TabPanelHarnessFilters, TabsHarnessFilters, TnBannerType, TnButtonToggleType, TnCardAction, TnCardControl, TnCardFooterLink, TnCardHeaderStatus, TnConfirmDialogData, TnDialogDefaults, TnDialogOpenTarget, TnDrawerMode, TnDrawerPosition, TnEmptySize, TnFlatTreeNode, TnFormFieldErrorMessage, TnFormFieldErrorMessages, TnFormFieldErrorResolver, TnMenuItem, TnSelectOption, TnSelectOptionGroup, TnSelectionChange, TnSortEvent, TnTableDataProvider, TnTableDataSource, TnTableHarnessFilters, TnTablePagerHarnessFilters, TnTablePagerLabels, TnTablePagination, TnTestAttrName, TnTestIdValue, TnThemeDefinition, TnToastCall, TnToastConfig, TooltipPosition, YearCell };
|
|
7849
|
+
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, LabelMarkupSegment, LabelMarkupSegmentType, LabelType, LucideIconOptions, MenuHarnessFilters, MockIconRegistry, MockSpriteLoader, PathSegment, PlatformType, ProgressBarMode, RadioHarnessFilters, ResolvedIcon, SelectHarnessFilters, ShortcutHandler, SidePanelHarnessFilters, SizeStandard, SlideToggleColor, SlideToggleHarnessFilters, SpinnerMode, SpriteConfig, SubscriptSizing, TabChangeEvent, TabHarnessFilters, TabPanelHarnessFilters, TabsHarnessFilters, TnAutocompleteOption, TnBannerType, TnButtonToggleType, TnCardAction, TnCardControl, TnCardFooterLink, TnCardHeaderStatus, TnConfirmDialogData, TnDialogDefaults, TnDialogOpenTarget, TnDrawerMode, TnDrawerPosition, TnEmptySize, TnFlatTreeNode, TnFormFieldErrorMessage, TnFormFieldErrorMessages, TnFormFieldErrorResolver, TnMenuItem, TnSelectOption, TnSelectOptionGroup, TnSelectionChange, TnSortEvent, TnTableDataProvider, TnTableDataSource, TnTableHarnessFilters, TnTablePagerHarnessFilters, TnTablePagerLabels, TnTablePagination, TnTestAttrName, TnTestIdValue, TnThemeDefinition, TnToastCall, TnToastConfig, TooltipPosition, YearCell };
|