@truenas/ui-components 0.7.0 → 0.7.2
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.
|
@@ -1055,26 +1055,6 @@ interface AutocompleteHarnessFilters extends BaseHarnessFilters {
|
|
|
1055
1055
|
|
|
1056
1056
|
type TnDrawerMode = 'side' | 'over';
|
|
1057
1057
|
type TnDrawerPosition = 'start' | 'end';
|
|
1058
|
-
/**
|
|
1059
|
-
* The accessible name a drawer falls back to when the caller names neither
|
|
1060
|
-
* `ariaLabel` nor `ariaLabelledby` (#214).
|
|
1061
|
-
*
|
|
1062
|
-
* `ariaLabel` defaults to `undefined`, so the DEFAULT rendering in `over` mode
|
|
1063
|
-
* was a `role="dialog"` with `aria-modal="true"` and no name — measured as an
|
|
1064
|
-
* `aria-dialog-name` violation. In `side` mode the same omission leaves a
|
|
1065
|
-
* `role="navigation"` landmark unnamed, which axe does not report while there is
|
|
1066
|
-
* only one of them on the page, and which stops telling them apart the moment
|
|
1067
|
-
* there are two.
|
|
1068
|
-
*
|
|
1069
|
-
* One fallback for both modes rather than one per mode: the drawer is the same
|
|
1070
|
-
* surface either way, the name answers the same question ("what is this?"), and
|
|
1071
|
-
* a rule that changes with the mode is one more thing for a caller to be wrong
|
|
1072
|
-
* about. A generic name is still a poor one, so it is paired with the dev-mode
|
|
1073
|
-
* warning `tnAccessibleName` raises.
|
|
1074
|
-
*
|
|
1075
|
-
* Exported so specs assert against it by name rather than by a copied literal.
|
|
1076
|
-
*/
|
|
1077
|
-
declare const TN_DRAWER_DEFAULT_LABEL = "Drawer";
|
|
1078
1058
|
/**
|
|
1079
1059
|
* A drawer, which is two different things by `mode`: in `side` it is
|
|
1080
1060
|
* persistent navigation beside the page's content, and in `over` it is a modal
|
|
@@ -1184,6 +1164,7 @@ declare class TnDrawerComponent implements OnDestroy {
|
|
|
1184
1164
|
protected trapFocus: _angular_core.Signal<boolean>;
|
|
1185
1165
|
/** Role depends on mode: navigation for side, dialog for over */
|
|
1186
1166
|
protected panelRole: _angular_core.Signal<"dialog" | "navigation">;
|
|
1167
|
+
private readonly fallbackName;
|
|
1187
1168
|
/**
|
|
1188
1169
|
* The name to render as `aria-label`, or `null` to render none — and the
|
|
1189
1170
|
* dev-mode warning when the caller named neither input.
|
|
@@ -4723,6 +4704,294 @@ interface CheckboxHarnessFilters extends BaseHarnessFilters {
|
|
|
4723
4704
|
testId?: string;
|
|
4724
4705
|
}
|
|
4725
4706
|
|
|
4707
|
+
/** One option of a `tn-checkbox-group`, rendered as a single `tn-checkbox`. */
|
|
4708
|
+
interface TnCheckboxOption<T = unknown> {
|
|
4709
|
+
value: T;
|
|
4710
|
+
label: string;
|
|
4711
|
+
disabled?: boolean;
|
|
4712
|
+
}
|
|
4713
|
+
/**
|
|
4714
|
+
* A `role="group"` wrapper that owns the selection for a set of `tn-checkbox`es, as one control
|
|
4715
|
+
* whose value is the ARRAY of checked option values.
|
|
4716
|
+
*
|
|
4717
|
+
* `tn-checkbox` is a boolean `ControlValueAccessor` — one control per box. A multi-select field
|
|
4718
|
+
* ("which USB devices to pass through", "which catalog trains to offer") has a single
|
|
4719
|
+
* array-valued control instead, and nothing in the library spoke that shape: consumers either
|
|
4720
|
+
* exploded it into one boolean control per option and reassembled the array by hand on submit, or
|
|
4721
|
+
* kept a bespoke component outside the library. This is that shape, with the same
|
|
4722
|
+
* `options`/`compareWith`/`testId` surface as {@link TnRadioGroupComponent} so the single-select
|
|
4723
|
+
* and multi-select forms of the same field read alike.
|
|
4724
|
+
*
|
|
4725
|
+
* ```html
|
|
4726
|
+
* <tn-form-field label="USB Devices" tooltip="Devices to pass through to the container">
|
|
4727
|
+
* <tn-checkbox-group formControlName="usb_devices" [options]="usbOptions" />
|
|
4728
|
+
* </tn-form-field>
|
|
4729
|
+
* ```
|
|
4730
|
+
*
|
|
4731
|
+
* Inside a `tn-form-field` the group is a normal control: the field names it via
|
|
4732
|
+
* `aria-labelledby`, infers the required indicator from its validators, and renders its validation
|
|
4733
|
+
* message — none of which a loose pile of checkboxes gets.
|
|
4734
|
+
*
|
|
4735
|
+
* Options come from the `options` input only. Unlike `tn-radio`, `tn-checkbox` is not group-aware,
|
|
4736
|
+
* so a projected child would render as an independent boolean control that silently ignores the
|
|
4737
|
+
* group's value; the group therefore projects nothing rather than accepting content it cannot
|
|
4738
|
+
* drive.
|
|
4739
|
+
*/
|
|
4740
|
+
declare class TnCheckboxGroupComponent<T = unknown> implements ControlValueAccessor {
|
|
4741
|
+
/**
|
|
4742
|
+
* Options to render, one checkbox each.
|
|
4743
|
+
*
|
|
4744
|
+
* Options are tracked by `value`, so object values must be referentially stable — rebuilding
|
|
4745
|
+
* them as fresh literals on every change detection pass re-creates the whole list. Same
|
|
4746
|
+
* requirement the `compareWith` case implies; hold the objects in a field.
|
|
4747
|
+
*/
|
|
4748
|
+
options: _angular_core.InputSignal<TnCheckboxOption<T>[]>;
|
|
4749
|
+
/**
|
|
4750
|
+
* Lays the options out in a wrapping row of equal columns instead of stacking them. Column width
|
|
4751
|
+
* comes from `--tn-checkbox-group-inline-basis` (default `50%`), and collapses to one column on
|
|
4752
|
+
* a narrow viewport.
|
|
4753
|
+
*/
|
|
4754
|
+
inline: _angular_core.InputSignal<boolean>;
|
|
4755
|
+
/**
|
|
4756
|
+
* Explicit accessible name for the group. Inside a `tn-form-field` with a label this is
|
|
4757
|
+
* unnecessary — the field names the group automatically — but a group with neither is announced
|
|
4758
|
+
* as an unlabeled group.
|
|
4759
|
+
*
|
|
4760
|
+
* A required group appends "required" to whatever this says, since that is the only channel
|
|
4761
|
+
* `role="group"` leaves open for it — see the `required` input.
|
|
4762
|
+
*/
|
|
4763
|
+
ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
4764
|
+
disabled: _angular_core.InputSignal<boolean>;
|
|
4765
|
+
/**
|
|
4766
|
+
* Whether the group announces itself as required.
|
|
4767
|
+
*
|
|
4768
|
+
* Deliberately NOT propagated to the options' native `required`, which is the opposite of the
|
|
4769
|
+
* choice `tn-radio-group` makes — and the difference is in the HTML, not in taste. A required
|
|
4770
|
+
* radio is satisfied by any one option in the `name` group; a required checkbox is satisfied
|
|
4771
|
+
* only by ITSELF being checked, so propagating it here would have the browser demand every box.
|
|
4772
|
+
* "At least one" is a validator's job.
|
|
4773
|
+
*
|
|
4774
|
+
* Nor does it become `aria-required`, which is the OTHER place `tn-radio-group` cannot be
|
|
4775
|
+
* copied: WAI-ARIA 1.2 supports only the globals plus `aria-activedescendant`/`aria-disabled`
|
|
4776
|
+
* on `role="group"`, so an `aria-required` there is dropped by assistive tech and flagged by
|
|
4777
|
+
* axe, whereas `role="radiogroup"` genuinely supports it. The state instead rides in the
|
|
4778
|
+
* group's accessible NAME, as a "required" suffix — see {@link labelledBy}.
|
|
4779
|
+
*/
|
|
4780
|
+
required: _angular_core.InputSignal<boolean>;
|
|
4781
|
+
/**
|
|
4782
|
+
* Test-id base for the group and, scoped by the option label, for every option: base
|
|
4783
|
+
* `usb_devices` yields `checkbox-group-usb-devices` on the group and
|
|
4784
|
+
* `checkbox-usb-devices-web-cam` on its options. Falls back to the bound control name.
|
|
4785
|
+
*/
|
|
4786
|
+
testId: _angular_core.InputSignal<TnTestIdValue>;
|
|
4787
|
+
/**
|
|
4788
|
+
* Custom comparator for matching option values against the selected ones. Provide it when option
|
|
4789
|
+
* values are objects — the default is identity, so a structurally-equal-but-distinct object
|
|
4790
|
+
* would leave the group rendering nothing as checked.
|
|
4791
|
+
*
|
|
4792
|
+
* Called with an option value on the right and a currently-selected value on the left, and must
|
|
4793
|
+
* tolerate `null`/`undefined` on either side rather than dereferencing straight into a property.
|
|
4794
|
+
*
|
|
4795
|
+
* @example
|
|
4796
|
+
* ```ts
|
|
4797
|
+
* compareWith = (a, b) => a?.id === b?.id;
|
|
4798
|
+
* ```
|
|
4799
|
+
*/
|
|
4800
|
+
compareWith: _angular_core.InputSignal<((a: T | null, b: T | null) => boolean) | undefined>;
|
|
4801
|
+
/** Emits the new value array on every user toggle (not on programmatic writes). */
|
|
4802
|
+
change: _angular_core.OutputEmitterRef<T[]>;
|
|
4803
|
+
/**
|
|
4804
|
+
* ARIA wiring from an enclosing `tn-form-field` (label, error/hint, invalid, required).
|
|
4805
|
+
* All-null standalone, or when `ariaLabel` overrides the field's label.
|
|
4806
|
+
*/
|
|
4807
|
+
protected readonly fieldAria: _truenas_ui_components.TnFormFieldAriaBindings;
|
|
4808
|
+
/** Test-id base, falling back to the bound control name when `testId` is unset. */
|
|
4809
|
+
protected readonly resolvedTestId: _angular_core.Signal<TnTestIdValue>;
|
|
4810
|
+
private readonly selectedValues;
|
|
4811
|
+
private readonly formDisabled;
|
|
4812
|
+
/**
|
|
4813
|
+
* Combined disabled state (own input plus a disabled bound control). The native `disabled` on
|
|
4814
|
+
* each option is what blocks interaction; `aria-disabled` on the group is what tells a screen
|
|
4815
|
+
* reader landing on the container about it, and gives styling a hook for the group as a whole.
|
|
4816
|
+
*/
|
|
4817
|
+
readonly isDisabled: _angular_core.Signal<boolean>;
|
|
4818
|
+
/** Whether the group announces itself as required: its own input, or the field's inferred state. */
|
|
4819
|
+
protected readonly ariaRequired: _angular_core.Signal<boolean>;
|
|
4820
|
+
/** Id of the visually hidden "required" text this group contributes to its own name. */
|
|
4821
|
+
protected readonly requiredTextId: string;
|
|
4822
|
+
/**
|
|
4823
|
+
* `aria-label` for the group: the `ariaLabel` input with the required-ness folded in, since
|
|
4824
|
+
* `role="group"` gives it nowhere else to go (see the `required` input).
|
|
4825
|
+
*/
|
|
4826
|
+
protected readonly resolvedAriaLabel: _angular_core.Signal<string | null>;
|
|
4827
|
+
/**
|
|
4828
|
+
* `aria-labelledby` for the group: the enclosing field's label, plus this group's own hidden
|
|
4829
|
+
* "required" text when required. A multi-id `aria-labelledby` concatenates, so the field keeps
|
|
4830
|
+
* naming the group and the required-ness reaches a screen reader as part of that name.
|
|
4831
|
+
*
|
|
4832
|
+
* Null when the name comes from `ariaLabel` instead — that path carries the suffix itself,
|
|
4833
|
+
* because `aria-labelledby` would otherwise win over the very label it is meant to extend.
|
|
4834
|
+
*/
|
|
4835
|
+
protected readonly labelledBy: _angular_core.Signal<string | null>;
|
|
4836
|
+
private onChange;
|
|
4837
|
+
private onTouched;
|
|
4838
|
+
/** Whether `value` is among the currently selected values. */
|
|
4839
|
+
protected isSelected(value: T): boolean;
|
|
4840
|
+
/**
|
|
4841
|
+
* Adds or removes an option's value.
|
|
4842
|
+
*
|
|
4843
|
+
* The emitted array is rebuilt in `options` order rather than appended to in click order, so the
|
|
4844
|
+
* value a given set of checked boxes produces is the same however the user got there — which is
|
|
4845
|
+
* what makes a payload diff (and a spec asserting one) stable.
|
|
4846
|
+
*
|
|
4847
|
+
* Ordering is all the rebuild changes: an already-selected value is re-emitted as the object the
|
|
4848
|
+
* consumer wrote, not as the equal-under-`compareWith` object the option holds. A control loaded
|
|
4849
|
+
* with `{ id: 2, name: 'usb-cam' }` against an option of `{ id: 2 }` keeps its `name` when an
|
|
4850
|
+
* unrelated box is toggled; only a newly checked option contributes the option's own value.
|
|
4851
|
+
*/
|
|
4852
|
+
protected toggle(value: T, checked: boolean): void;
|
|
4853
|
+
private matches;
|
|
4854
|
+
writeValue(value: T[] | null | undefined): void;
|
|
4855
|
+
registerOnChange(fn: (value: T[]) => void): void;
|
|
4856
|
+
registerOnTouched(fn: () => void): void;
|
|
4857
|
+
setDisabledState(isDisabled: boolean): void;
|
|
4858
|
+
/**
|
|
4859
|
+
* Marks the control touched when focus leaves the group. `focusout` also fires while moving
|
|
4860
|
+
* between the group's own options, which is harmless — the user has interacted either way — and
|
|
4861
|
+
* it is the only blur signal available, since a checkbox's blur does not bubble.
|
|
4862
|
+
*/
|
|
4863
|
+
protected onFocusOut(): void;
|
|
4864
|
+
/** Per-option test-id segments: the group's base scoped by the option label. */
|
|
4865
|
+
protected optionTestId(option: TnCheckboxOption<T>): TnTestIdValue;
|
|
4866
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnCheckboxGroupComponent<any>, never>;
|
|
4867
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnCheckboxGroupComponent<any>, "tn-checkbox-group", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "inline": { "alias": "inline"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; }, { "change": "change"; }, never, never, true, never>;
|
|
4868
|
+
}
|
|
4869
|
+
|
|
4870
|
+
/**
|
|
4871
|
+
* Harness for interacting with `tn-checkbox-group` in tests.
|
|
4872
|
+
* Drives the group as a whole — reading the checked set, replacing it wholesale, toggling one
|
|
4873
|
+
* option by label — rather than reaching for each `tn-checkbox` individually.
|
|
4874
|
+
*
|
|
4875
|
+
* @example
|
|
4876
|
+
* ```typescript
|
|
4877
|
+
* const group = await loader.getHarness(TnCheckboxGroupHarness.with({ testId: 'checkbox-group-trains' }));
|
|
4878
|
+
* // Labels, not option values — the DOM only carries what the user can read.
|
|
4879
|
+
* await group.setValue(['Stable', 'Enterprise']);
|
|
4880
|
+
* expect(await group.getValue()).toEqual(['Stable', 'Enterprise']);
|
|
4881
|
+
* ```
|
|
4882
|
+
*/
|
|
4883
|
+
declare class TnCheckboxGroupHarness extends ComponentHarness {
|
|
4884
|
+
/** The selector for the host element of a `TnCheckboxGroupComponent` instance. */
|
|
4885
|
+
static hostSelector: string;
|
|
4886
|
+
private _root;
|
|
4887
|
+
private _checkboxes;
|
|
4888
|
+
/**
|
|
4889
|
+
* Gets a `HarnessPredicate` that can be used to search for a checkbox group with specific
|
|
4890
|
+
* attributes.
|
|
4891
|
+
*
|
|
4892
|
+
* @param options Options for filtering which checkbox group instances are considered a match.
|
|
4893
|
+
* @returns A `HarnessPredicate` configured with the given options.
|
|
4894
|
+
*
|
|
4895
|
+
* @example
|
|
4896
|
+
* ```typescript
|
|
4897
|
+
* // Find by accessible name
|
|
4898
|
+
* const group = await loader.getHarness(TnCheckboxGroupHarness.with({ ariaLabel: 'USB Devices' }));
|
|
4899
|
+
*
|
|
4900
|
+
* // Find by testId
|
|
4901
|
+
* const group = await loader.getHarness(TnCheckboxGroupHarness.with({ testId: 'checkbox-group-usb-devices' }));
|
|
4902
|
+
* ```
|
|
4903
|
+
*/
|
|
4904
|
+
static with(options?: CheckboxGroupHarnessFilters): HarnessPredicate<TnCheckboxGroupHarness>;
|
|
4905
|
+
/**
|
|
4906
|
+
* Gets the harnesses for the group's options, in DOM order.
|
|
4907
|
+
*
|
|
4908
|
+
* @example
|
|
4909
|
+
* ```typescript
|
|
4910
|
+
* const options = await group.getOptions();
|
|
4911
|
+
* expect(options).toHaveLength(3);
|
|
4912
|
+
* ```
|
|
4913
|
+
*/
|
|
4914
|
+
getOptions(): Promise<TnCheckboxHarness[]>;
|
|
4915
|
+
/**
|
|
4916
|
+
* Gets the label text of every option, in DOM order.
|
|
4917
|
+
*
|
|
4918
|
+
* @example
|
|
4919
|
+
* ```typescript
|
|
4920
|
+
* expect(await group.getOptionLabels()).toEqual(['Stable', 'Enterprise']);
|
|
4921
|
+
* ```
|
|
4922
|
+
*/
|
|
4923
|
+
getOptionLabels(): Promise<string[]>;
|
|
4924
|
+
/**
|
|
4925
|
+
* Gets the labels of the currently checked options, in DOM order.
|
|
4926
|
+
*
|
|
4927
|
+
* Labels rather than values, because the values live in the bound control and the DOM only ever
|
|
4928
|
+
* carries what the user can read.
|
|
4929
|
+
*
|
|
4930
|
+
* @example
|
|
4931
|
+
* ```typescript
|
|
4932
|
+
* expect(await group.getValue()).toEqual(['Stable']);
|
|
4933
|
+
* ```
|
|
4934
|
+
*/
|
|
4935
|
+
getValue(): Promise<string[]>;
|
|
4936
|
+
/**
|
|
4937
|
+
* Makes the checked set exactly the options with the given labels — checking the ones listed and
|
|
4938
|
+
* unchecking every other.
|
|
4939
|
+
*
|
|
4940
|
+
* @param labels Label text of the options that should end up checked.
|
|
4941
|
+
*
|
|
4942
|
+
* @example
|
|
4943
|
+
* ```typescript
|
|
4944
|
+
* await group.setValue(['Stable']);
|
|
4945
|
+
* ```
|
|
4946
|
+
*/
|
|
4947
|
+
setValue(labels: string[]): Promise<void>;
|
|
4948
|
+
/**
|
|
4949
|
+
* Toggles the option with the given label. Throws when the group has no such option, so a
|
|
4950
|
+
* renamed or missing option fails loudly instead of silently leaving the selection unchanged.
|
|
4951
|
+
*
|
|
4952
|
+
* @param label Label text of the option to toggle.
|
|
4953
|
+
*
|
|
4954
|
+
* @example
|
|
4955
|
+
* ```typescript
|
|
4956
|
+
* await group.toggle('Enterprise');
|
|
4957
|
+
* ```
|
|
4958
|
+
*/
|
|
4959
|
+
toggle(label: string): Promise<void>;
|
|
4960
|
+
/**
|
|
4961
|
+
* Checks whether every option is disabled — the state a disabled group or a disabled bound form
|
|
4962
|
+
* control produces. Use {@link getOptions} to inspect a single per-option `disabled`.
|
|
4963
|
+
*
|
|
4964
|
+
* @example
|
|
4965
|
+
* ```typescript
|
|
4966
|
+
* expect(await group.isDisabled()).toBe(true);
|
|
4967
|
+
* ```
|
|
4968
|
+
*/
|
|
4969
|
+
isDisabled(): Promise<boolean>;
|
|
4970
|
+
/**
|
|
4971
|
+
* Gets the group's accessible name as written by the `ariaLabel` input, or null when the name
|
|
4972
|
+
* comes from an enclosing `tn-form-field` (see {@link getAriaLabelledBy}).
|
|
4973
|
+
*/
|
|
4974
|
+
getAriaLabel(): Promise<string | null>;
|
|
4975
|
+
/** Gets the id the group's accessible name is delegated to, or null. */
|
|
4976
|
+
getAriaLabelledBy(): Promise<string | null>;
|
|
4977
|
+
/**
|
|
4978
|
+
* Gets the test ID attribute value of the group root.
|
|
4979
|
+
*
|
|
4980
|
+
* @example
|
|
4981
|
+
* ```typescript
|
|
4982
|
+
* expect(await group.getTestId()).toBe('checkbox-group-trains');
|
|
4983
|
+
* ```
|
|
4984
|
+
*/
|
|
4985
|
+
getTestId(): Promise<string | null>;
|
|
4986
|
+
}
|
|
4987
|
+
/** A set of criteria that can be used to filter a list of `TnCheckboxGroupHarness` instances. */
|
|
4988
|
+
interface CheckboxGroupHarnessFilters extends BaseHarnessFilters {
|
|
4989
|
+
/** Filters by the group's `aria-label`. Supports string or regex matching. */
|
|
4990
|
+
ariaLabel?: string | RegExp;
|
|
4991
|
+
/** Filters by the resolved test-id attribute on the group root. */
|
|
4992
|
+
testId?: string;
|
|
4993
|
+
}
|
|
4994
|
+
|
|
4726
4995
|
declare class TnRadioComponent implements AfterViewInit, OnDestroy, ControlValueAccessor {
|
|
4727
4996
|
radioEl: _angular_core.Signal<ElementRef<HTMLInputElement>>;
|
|
4728
4997
|
label: _angular_core.InputSignal<string>;
|
|
@@ -11029,21 +11298,236 @@ declare function labelMarkupToHtml(value: string): string;
|
|
|
11029
11298
|
*/
|
|
11030
11299
|
declare function labelMarkupToText(value: string): string;
|
|
11031
11300
|
|
|
11032
|
-
|
|
11301
|
+
/**
|
|
11302
|
+
* Every generic name this library falls back to when a caller names neither
|
|
11303
|
+
* `ariaLabel` nor `ariaLabelledby`, in one bundle a consumer provides once.
|
|
11304
|
+
*
|
|
11305
|
+
* WHY A TOKEN AND NOT CONSTANTS ALONE
|
|
11306
|
+
* -----------------------------------
|
|
11307
|
+
* The constants below are English, and a spinner announcing "Loading" to a
|
|
11308
|
+
* screen reader in a Spanish app is the same untranslated-chrome bug that
|
|
11309
|
+
* `TN_SELECT_LABELS` and `TN_TABLE_LABELS` were added for: a string this
|
|
11310
|
+
* library renders into a consumer's UI has to be translatable, and the only
|
|
11311
|
+
* route to these was an `ariaLabel` on every single call site. In webui that
|
|
11312
|
+
* came to nineteen spinners and nineteen bars each carrying an identical
|
|
11313
|
+
* `[ariaLabel]="'Loading' | translate"` — the copy-on-every-instance shape
|
|
11314
|
+
* those two tokens already exist to remove.
|
|
11315
|
+
*
|
|
11316
|
+
* A per-instance `ariaLabel` still wins, and is still the right answer wherever
|
|
11317
|
+
* a name can say WHAT is loading or WHAT is open. This token is for the rest:
|
|
11318
|
+
* the generic name the component would otherwise render in English.
|
|
11319
|
+
*
|
|
11320
|
+
* WHY ONE BUNDLE, AND WHICH NAMES ARE IN IT
|
|
11321
|
+
* -----------------------------------------
|
|
11322
|
+
* Exactly the fallbacks `tnAccessibleName` renders — the four progressbars and
|
|
11323
|
+
* the three surfaces — because they already share one rule, and a consumer
|
|
11324
|
+
* translating one of them wants all seven. Separate keys rather than one shared
|
|
11325
|
+
* string, because the least-bad generic name differs by what the component is
|
|
11326
|
+
* ("Progress" for a bar, "Loading" for a spinner, "Dialog" for a dialog), and
|
|
11327
|
+
* `tn-branded-spinner` differs again for a reason
|
|
11328
|
+
* {@link TN_BRANDED_SPINNER_DEFAULT_LABEL} sets out.
|
|
11329
|
+
*
|
|
11330
|
+
* Not in it: `TN_SIDE_PANEL_CONTENT_LABEL`, `TN_DRAWER_CONTENT_LABEL`,
|
|
11331
|
+
* `TN_TAB_PANEL_CONTENT_LABEL` and `TN_TABLE_SCROLL_REGION_LABEL`. Those name a
|
|
11332
|
+
* scrolling REGION rather than the component, each already has a per-instance
|
|
11333
|
+
* input a consumer can translate through, and none of them warns — so they are
|
|
11334
|
+
* a separate decision from this one rather than part of it.
|
|
11335
|
+
*
|
|
11336
|
+
* WHAT PROVIDING IT DOES TO THE DEV WARNING
|
|
11337
|
+
* -----------------------------------------
|
|
11338
|
+
* It stands the warning down for the components whose fallback it supplies.
|
|
11339
|
+
* That is the same exception `tn-table-pager` already has, for the same reason,
|
|
11340
|
+
* written out at `resolvedTablePaginationLabel`: a name the consumer configured
|
|
11341
|
+
* is a DESIGNED name, not a last resort for one someone forgot, so warning
|
|
11342
|
+
* about it fires on the ordinary case and teaches readers to ignore the warning
|
|
11343
|
+
* where it means something. Registering this provider is a deliberate app-wide
|
|
11344
|
+
* decision about what an unnamed spinner or surface should say; the warning has
|
|
11345
|
+
* been heard, and an app that has answered it should not have every test that
|
|
11346
|
+
* renders a spinner fail on the answer.
|
|
11347
|
+
*
|
|
11348
|
+
* The half of `tnAccessibleName` that is NOT about the warning is unchanged: an
|
|
11349
|
+
* explicit `ariaLabel` still always survives, and the fallback — configured or
|
|
11350
|
+
* not — is still withheld beside an `ariaLabelledby`, so a dangling IDREF still
|
|
11351
|
+
* fails its axe name rule loudly instead of being masked by a name that says
|
|
11352
|
+
* nothing.
|
|
11353
|
+
*
|
|
11354
|
+
* Unlike its neighbours in this folder (`accessible-name.ts`, `live-region.ts`),
|
|
11355
|
+
* this file IS part of the public API: it is how a consumer answers the
|
|
11356
|
+
* question those two only ask.
|
|
11357
|
+
*/
|
|
11358
|
+
interface TnFallbackLabels {
|
|
11359
|
+
/** Fallback name for `tn-spinner`. */
|
|
11360
|
+
spinner: string;
|
|
11361
|
+
/** Fallback name for `tn-branded-spinner`. */
|
|
11362
|
+
brandedSpinner: string;
|
|
11363
|
+
/** Fallback name for `tn-progress-bar`. */
|
|
11364
|
+
progressBar: string;
|
|
11365
|
+
/** Fallback name for `tn-particle-progress-bar`. */
|
|
11366
|
+
particleProgressBar: string;
|
|
11367
|
+
/** Fallback name for the `tn-dialog-shell` surface itself, for a dialog with no `title`. */
|
|
11368
|
+
dialog: string;
|
|
11369
|
+
/** Fallback name for the `tn-side-panel` surface itself, for a panel with no `title`. */
|
|
11370
|
+
sidePanel: string;
|
|
11371
|
+
/** Fallback name for `tn-drawer`, in both of its modes. */
|
|
11372
|
+
drawer: string;
|
|
11373
|
+
}
|
|
11033
11374
|
/**
|
|
11034
11375
|
* The accessible name a spinner falls back to when the caller names neither
|
|
11035
11376
|
* `ariaLabel` nor `ariaLabelledby` (#202). Same reasoning as
|
|
11036
|
-
*
|
|
11037
|
-
* defaults to indeterminate mode, so its unnamed default rendering
|
|
11038
|
-
* assistive technology as a progressbar with neither a name nor a
|
|
11377
|
+
* {@link TN_PROGRESS_BAR_DEFAULT_LABEL}, and the case is sharper here: the
|
|
11378
|
+
* spinner defaults to indeterminate mode, so its unnamed default rendering
|
|
11379
|
+
* reached assistive technology as a progressbar with neither a name nor a
|
|
11380
|
+
* value.
|
|
11039
11381
|
*
|
|
11040
|
-
* `branded-spinner.component.ts`
|
|
11382
|
+
* `branded-spinner.component.ts` already fell back this way —
|
|
11041
11383
|
* `ariaLabel() || "Loading..."` inline — so a fallback is the shape this
|
|
11042
11384
|
* library had already settled on; what it lacked was the warning. It has both
|
|
11043
|
-
* since #206, through the same `tnAccessibleName`
|
|
11385
|
+
* since #206, through the same `tnAccessibleName` that component uses, which is
|
|
11044
11386
|
* why the two constants sit side by side and differ.
|
|
11045
11387
|
*/
|
|
11046
11388
|
declare const TN_SPINNER_DEFAULT_LABEL = "Loading";
|
|
11389
|
+
/**
|
|
11390
|
+
* The name `tn-branded-spinner` falls back to when the caller names neither
|
|
11391
|
+
* `ariaLabel` nor `ariaLabelledby`. Same reasoning as
|
|
11392
|
+
* {@link TN_SPINNER_DEFAULT_LABEL} and {@link TN_PROGRESS_BAR_DEFAULT_LABEL}.
|
|
11393
|
+
*
|
|
11394
|
+
* It differs from `TN_SPINNER_DEFAULT_LABEL` — `"Loading..."` against
|
|
11395
|
+
* `"Loading"` — only because this is the string the component already rendered,
|
|
11396
|
+
* inline in its host binding, before #206 gave it the shared resolver. Aligning
|
|
11397
|
+
* the two would change what a screen reader announces for every unnamed branded
|
|
11398
|
+
* spinner already in the wild, which is a louder change than the consistency
|
|
11399
|
+
* fix it would be part of. Exported so specs assert against it by name rather
|
|
11400
|
+
* than by a copied string literal.
|
|
11401
|
+
*/
|
|
11402
|
+
declare const TN_BRANDED_SPINNER_DEFAULT_LABEL = "Loading...";
|
|
11403
|
+
/**
|
|
11404
|
+
* The accessible name a bar falls back to when the caller names neither
|
|
11405
|
+
* `ariaLabel` nor `ariaLabelledby` (#202).
|
|
11406
|
+
*
|
|
11407
|
+
* Deliberately generic, and deliberately not silent: the host carries
|
|
11408
|
+
* `role="progressbar"` unconditionally, so without a fallback the default
|
|
11409
|
+
* rendering is a progressbar assistive technology announces with no name at all
|
|
11410
|
+
* — "progress bar, 40%", with nothing to say what is progressing. The
|
|
11411
|
+
* alternative fix, withholding the role until there is a name for it, trades
|
|
11412
|
+
* that for no announcement whatever, which is worse: a screen reader would not
|
|
11413
|
+
* learn that anything is in progress, and on a determinate bar it would lose
|
|
11414
|
+
* the value too.
|
|
11415
|
+
*
|
|
11416
|
+
* A generic name is still a poor one, so it is paired with the dev-mode warning
|
|
11417
|
+
* `tnAccessibleName` raises. Exported so specs assert against it by name rather
|
|
11418
|
+
* than by a copied string literal.
|
|
11419
|
+
*/
|
|
11420
|
+
declare const TN_PROGRESS_BAR_DEFAULT_LABEL = "Progress";
|
|
11421
|
+
/**
|
|
11422
|
+
* The accessible name `tn-particle-progress-bar` falls back to when the caller
|
|
11423
|
+
* names neither `ariaLabel` nor `ariaLabelledby` (#209).
|
|
11424
|
+
*
|
|
11425
|
+
* The same string and the same reasoning as
|
|
11426
|
+
* {@link TN_PROGRESS_BAR_DEFAULT_LABEL} next door, and deliberately a separate
|
|
11427
|
+
* constant rather than an alias of it: `tnAccessibleName` takes a fallback PER
|
|
11428
|
+
* COMPONENT because the least-bad generic name differs by what the component is
|
|
11429
|
+
* ("Progress" for a bar, "Loading" for a spinner), and sharing the binding would
|
|
11430
|
+
* make a future divergence in one a silent change to the other. Exported so
|
|
11431
|
+
* specs assert against it by name rather than by a copied string literal.
|
|
11432
|
+
*/
|
|
11433
|
+
declare const TN_PARTICLE_PROGRESS_BAR_DEFAULT_LABEL = "Progress";
|
|
11434
|
+
/**
|
|
11435
|
+
* The accessible name a dialog falls back to when it renders no `title` and the
|
|
11436
|
+
* caller named it through neither this component nor the `DialogConfig` (#219).
|
|
11437
|
+
*
|
|
11438
|
+
* `title` defaults to `''`, so the DEFAULT rendering of this component put an
|
|
11439
|
+
* empty `<h2>` in the header and left the CDK container with no naming
|
|
11440
|
+
* attribute at all — measured as `empty-heading` on the heading and
|
|
11441
|
+
* `aria-dialog-name` on the dialog. A dialog with no name is announced as
|
|
11442
|
+
* "dialog" and nothing else, which is the whole of what a screen-reader user is
|
|
11443
|
+
* told about a surface that just took over the page and trapped their focus.
|
|
11444
|
+
*
|
|
11445
|
+
* "Dialog" is a poor name, and says almost exactly what the role already says.
|
|
11446
|
+
* It is still better than the two alternatives: leaving the surface unnamed, or
|
|
11447
|
+
* withholding `role="dialog"` until there is a name — the latter would move a
|
|
11448
|
+
* listener into a focus trap with no announcement that anything had opened. So
|
|
11449
|
+
* it is paired with the dev-mode warning `tnAccessibleName` raises, which is
|
|
11450
|
+
* what keeps the fallback from becoming a quiet way to ship a nameless dialog.
|
|
11451
|
+
*
|
|
11452
|
+
* Exported so specs assert against it by name rather than by a copied literal.
|
|
11453
|
+
*/
|
|
11454
|
+
declare const TN_DIALOG_SHELL_DEFAULT_LABEL = "Dialog";
|
|
11455
|
+
/**
|
|
11456
|
+
* The accessible name an open panel falls back to when it has no `title` and the
|
|
11457
|
+
* caller named neither `ariaLabel` nor `ariaLabelledby` (#214).
|
|
11458
|
+
*
|
|
11459
|
+
* `title` defaults to `''`, so the DEFAULT rendering of this component was a
|
|
11460
|
+
* `role="dialog"` with `aria-labelledby` pointing at an empty `<h2>` — measured
|
|
11461
|
+
* as an `aria-dialog-name` violation, alongside `empty-heading`. A dialog with no
|
|
11462
|
+
* name is announced as "dialog" and nothing else, which is the whole of what a
|
|
11463
|
+
* screen-reader user gets told about a surface that just covered the page.
|
|
11464
|
+
*
|
|
11465
|
+
* Withholding `role="dialog"` until there is a name would be the other way to
|
|
11466
|
+
* clear the rule, and it is worse: the panel traps focus either way, so a
|
|
11467
|
+
* listener would be moved into a region with no announcement that anything had
|
|
11468
|
+
* opened. A generic name is still a poor one, so it is paired with the dev-mode
|
|
11469
|
+
* warning `tnAccessibleName` raises.
|
|
11470
|
+
*
|
|
11471
|
+
* Exported so specs assert against it by name rather than by a copied literal.
|
|
11472
|
+
*/
|
|
11473
|
+
declare const TN_SIDE_PANEL_DEFAULT_LABEL = "Side panel";
|
|
11474
|
+
/**
|
|
11475
|
+
* The accessible name a drawer falls back to when the caller names neither
|
|
11476
|
+
* `ariaLabel` nor `ariaLabelledby` (#214).
|
|
11477
|
+
*
|
|
11478
|
+
* `ariaLabel` defaults to `undefined`, so the DEFAULT rendering in `over` mode
|
|
11479
|
+
* was a `role="dialog"` with `aria-modal="true"` and no name — measured as an
|
|
11480
|
+
* `aria-dialog-name` violation. In `side` mode the same omission leaves a
|
|
11481
|
+
* `role="navigation"` landmark unnamed, which axe does not report while there is
|
|
11482
|
+
* only one of them on the page, and which stops telling them apart the moment
|
|
11483
|
+
* there are two.
|
|
11484
|
+
*
|
|
11485
|
+
* One fallback for both modes rather than one per mode: the drawer is the same
|
|
11486
|
+
* surface either way, the name answers the same question ("what is this?"), and
|
|
11487
|
+
* a rule that changes with the mode is one more thing for a caller to be wrong
|
|
11488
|
+
* about. A generic name is still a poor one, so it is paired with the dev-mode
|
|
11489
|
+
* warning `tnAccessibleName` raises.
|
|
11490
|
+
*
|
|
11491
|
+
* Exported so specs assert against it by name rather than by a copied literal.
|
|
11492
|
+
*/
|
|
11493
|
+
declare const TN_DRAWER_DEFAULT_LABEL = "Drawer";
|
|
11494
|
+
/** English defaults used when no {@link TN_FALLBACK_LABELS} provider is registered. */
|
|
11495
|
+
declare const TN_DEFAULT_FALLBACK_LABELS: TnFallbackLabels;
|
|
11496
|
+
/**
|
|
11497
|
+
* DI token for the app-wide fallback names above. Provide either a static
|
|
11498
|
+
* object or a `Signal<TnFallbackLabels>` — the latter lets every component
|
|
11499
|
+
* react to language changes when the consumer wires it up to an i18n service.
|
|
11500
|
+
*
|
|
11501
|
+
* An `ariaLabel` on a particular instance still wins over these, and is still
|
|
11502
|
+
* what to reach for when a name can say what is loading or what is open.
|
|
11503
|
+
*/
|
|
11504
|
+
declare const TN_FALLBACK_LABELS: InjectionToken<TnFallbackLabels | Signal<TnFallbackLabels>>;
|
|
11505
|
+
/** One component's fallback name, and where it came from. */
|
|
11506
|
+
interface TnFallbackName {
|
|
11507
|
+
/** The name to render when the caller names neither input. */
|
|
11508
|
+
label: Signal<string>;
|
|
11509
|
+
/**
|
|
11510
|
+
* Whether that name came from a consumer's provider rather than this
|
|
11511
|
+
* library's English default — which is what decides whether an unnamed
|
|
11512
|
+
* instance warns. See the file comment above.
|
|
11513
|
+
*/
|
|
11514
|
+
configured: boolean;
|
|
11515
|
+
}
|
|
11516
|
+
/**
|
|
11517
|
+
* Reads one component's fallback name out of {@link TN_FALLBACK_LABELS}.
|
|
11518
|
+
*
|
|
11519
|
+
* Not `injectTnLabels`, which normalizes the token to a Signal and drops the
|
|
11520
|
+
* value it started from: telling a configured bundle from the built-in one is an
|
|
11521
|
+
* identity check against `builtInLabels`, so this needs the raw injected value.
|
|
11522
|
+
* A consumer who provides a bundle equal to the defaults — the exported constant
|
|
11523
|
+
* included — still counts as configured, which is the right way round: they said
|
|
11524
|
+
* so on purpose.
|
|
11525
|
+
*
|
|
11526
|
+
* **Must be called from an injection context.**
|
|
11527
|
+
*/
|
|
11528
|
+
declare function injectTnFallbackName(key: keyof TnFallbackLabels): TnFallbackName;
|
|
11529
|
+
|
|
11530
|
+
type SpinnerMode = 'determinate' | 'indeterminate';
|
|
11047
11531
|
declare class TnSpinnerComponent {
|
|
11048
11532
|
mode: _angular_core.InputSignal<SpinnerMode>;
|
|
11049
11533
|
value: _angular_core.InputSignal<number>;
|
|
@@ -11051,6 +11535,7 @@ declare class TnSpinnerComponent {
|
|
|
11051
11535
|
strokeWidth: _angular_core.InputSignal<number>;
|
|
11052
11536
|
ariaLabel: _angular_core.InputSignal<string | null>;
|
|
11053
11537
|
ariaLabelledby: _angular_core.InputSignal<string | null>;
|
|
11538
|
+
private readonly fallbackName;
|
|
11054
11539
|
/**
|
|
11055
11540
|
* The name to render, or `null` to render no `aria-label` attribute — and the
|
|
11056
11541
|
* dev-mode warning when the caller named neither input.
|
|
@@ -11072,23 +11557,10 @@ declare class TnSpinnerComponent {
|
|
|
11072
11557
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnSpinnerComponent, "tn-spinner", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "diameter": { "alias": "diameter"; "required": false; "isSignal": true; }; "strokeWidth": { "alias": "strokeWidth"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
11073
11558
|
}
|
|
11074
11559
|
|
|
11075
|
-
/**
|
|
11076
|
-
* The name this spinner falls back to when the caller names neither `ariaLabel`
|
|
11077
|
-
* nor `ariaLabelledby`. Same reasoning as `TN_SPINNER_DEFAULT_LABEL` and
|
|
11078
|
-
* `TN_PROGRESS_BAR_DEFAULT_LABEL`.
|
|
11079
|
-
*
|
|
11080
|
-
* It differs from `TN_SPINNER_DEFAULT_LABEL` — `"Loading..."` against
|
|
11081
|
-
* `"Loading"` — only because this is the string the component already rendered,
|
|
11082
|
-
* inline in its host binding, before #206 gave it the shared resolver. Aligning
|
|
11083
|
-
* the two would change what a screen reader announces for every unnamed branded
|
|
11084
|
-
* spinner already in the wild, which is a louder change than the consistency
|
|
11085
|
-
* fix it would be part of. Exported so specs assert against it by name rather
|
|
11086
|
-
* than by a copied string literal.
|
|
11087
|
-
*/
|
|
11088
|
-
declare const TN_BRANDED_SPINNER_DEFAULT_LABEL = "Loading...";
|
|
11089
11560
|
declare class TnBrandedSpinnerComponent implements OnInit, OnDestroy, AfterViewInit {
|
|
11090
11561
|
ariaLabel: _angular_core.InputSignal<string | null>;
|
|
11091
11562
|
ariaLabelledby: _angular_core.InputSignal<string | null>;
|
|
11563
|
+
private readonly fallbackName;
|
|
11092
11564
|
/**
|
|
11093
11565
|
* The name to render, or `null` to render no `aria-label` attribute — and the
|
|
11094
11566
|
* dev-mode warning when the caller named neither input.
|
|
@@ -11120,30 +11592,13 @@ declare class TnBrandedSpinnerComponent implements OnInit, OnDestroy, AfterViewI
|
|
|
11120
11592
|
}
|
|
11121
11593
|
|
|
11122
11594
|
type ProgressBarMode = 'determinate' | 'indeterminate' | 'buffer';
|
|
11123
|
-
/**
|
|
11124
|
-
* The accessible name a bar falls back to when the caller names neither
|
|
11125
|
-
* `ariaLabel` nor `ariaLabelledby` (#202).
|
|
11126
|
-
*
|
|
11127
|
-
* Deliberately generic, and deliberately not silent: the host carries
|
|
11128
|
-
* `role="progressbar"` unconditionally, so without a fallback the default
|
|
11129
|
-
* rendering is a progressbar assistive technology announces with no name at all
|
|
11130
|
-
* — "progress bar, 40%", with nothing to say what is progressing. The
|
|
11131
|
-
* alternative fix, withholding the role until there is a name for it, trades
|
|
11132
|
-
* that for no announcement whatever, which is worse: a screen reader would not
|
|
11133
|
-
* learn that anything is in progress, and on a determinate bar it would lose
|
|
11134
|
-
* the value too.
|
|
11135
|
-
*
|
|
11136
|
-
* A generic name is still a poor one, so it is paired with the dev-mode warning
|
|
11137
|
-
* `tnAccessibleName` raises. Exported so specs assert against it by name rather
|
|
11138
|
-
* than by a copied string literal.
|
|
11139
|
-
*/
|
|
11140
|
-
declare const TN_PROGRESS_BAR_DEFAULT_LABEL = "Progress";
|
|
11141
11595
|
declare class TnProgressBarComponent {
|
|
11142
11596
|
mode: _angular_core.InputSignal<ProgressBarMode>;
|
|
11143
11597
|
value: _angular_core.InputSignal<number>;
|
|
11144
11598
|
bufferValue: _angular_core.InputSignal<number>;
|
|
11145
11599
|
ariaLabel: _angular_core.InputSignal<string | null>;
|
|
11146
11600
|
ariaLabelledby: _angular_core.InputSignal<string | null>;
|
|
11601
|
+
private readonly fallbackName;
|
|
11147
11602
|
/**
|
|
11148
11603
|
* The name to render, or `null` to render no `aria-label` attribute — and the
|
|
11149
11604
|
* dev-mode warning when the caller named neither input.
|
|
@@ -11177,19 +11632,6 @@ declare class TnProgressBarComponent {
|
|
|
11177
11632
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnProgressBarComponent, "tn-progress-bar", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "bufferValue": { "alias": "bufferValue"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
11178
11633
|
}
|
|
11179
11634
|
|
|
11180
|
-
/**
|
|
11181
|
-
* The accessible name this bar falls back to when the caller names neither
|
|
11182
|
-
* `ariaLabel` nor `ariaLabelledby` (#209).
|
|
11183
|
-
*
|
|
11184
|
-
* The same string and the same reasoning as `TN_PROGRESS_BAR_DEFAULT_LABEL`
|
|
11185
|
-
* next door, and deliberately a separate constant rather than an import of it:
|
|
11186
|
-
* `tnAccessibleName` takes a fallback PER COMPONENT because the least-bad
|
|
11187
|
-
* generic name differs by what the component is ("Progress" for a bar,
|
|
11188
|
-
* "Loading" for a spinner), and sharing the binding would make a future
|
|
11189
|
-
* divergence in one a silent change to the other. Exported so specs assert
|
|
11190
|
-
* against it by name rather than by a copied string literal.
|
|
11191
|
-
*/
|
|
11192
|
-
declare const TN_PARTICLE_PROGRESS_BAR_DEFAULT_LABEL = "Progress";
|
|
11193
11635
|
/**
|
|
11194
11636
|
* THE DECISION #209 ASKED FOR: THIS IS A PROGRESSBAR, NOT DECORATION
|
|
11195
11637
|
* ------------------------------------------------------------------
|
|
@@ -11249,6 +11691,7 @@ declare class TnParticleProgressBarComponent implements AfterViewInit, OnDestroy
|
|
|
11249
11691
|
canvasRef: _angular_core.Signal<ElementRef<HTMLCanvasElement>>;
|
|
11250
11692
|
/** Exposed to the template so the rects and the ARIA value share one inset. */
|
|
11251
11693
|
readonly trackInset = 50;
|
|
11694
|
+
private readonly fallbackName;
|
|
11252
11695
|
/**
|
|
11253
11696
|
* The name to render, or `null` to render no `aria-label` at all — and the
|
|
11254
11697
|
* dev-mode warning when the caller named neither input.
|
|
@@ -13156,27 +13599,6 @@ declare const TN_DIALOG_DEFAULT_CHROME_LABELS: TnDialogChromeLabels;
|
|
|
13156
13599
|
* the consumer wires it up to an i18n service.
|
|
13157
13600
|
*/
|
|
13158
13601
|
declare const TN_DIALOG_CHROME_LABELS: InjectionToken<TnDialogChromeLabels | Signal<TnDialogChromeLabels>>;
|
|
13159
|
-
/**
|
|
13160
|
-
* The accessible name a dialog falls back to when it renders no `title` and the
|
|
13161
|
-
* caller named it through neither this component nor the `DialogConfig` (#219).
|
|
13162
|
-
*
|
|
13163
|
-
* `title` defaults to `''`, so the DEFAULT rendering of this component put an
|
|
13164
|
-
* empty `<h2>` in the header and left the CDK container with no naming
|
|
13165
|
-
* attribute at all — measured as `empty-heading` on the heading and
|
|
13166
|
-
* `aria-dialog-name` on the dialog. A dialog with no name is announced as
|
|
13167
|
-
* "dialog" and nothing else, which is the whole of what a screen-reader user is
|
|
13168
|
-
* told about a surface that just took over the page and trapped their focus.
|
|
13169
|
-
*
|
|
13170
|
-
* "Dialog" is a poor name, and says almost exactly what the role already says.
|
|
13171
|
-
* It is still better than the two alternatives: leaving the surface unnamed, or
|
|
13172
|
-
* withholding `role="dialog"` until there is a name — the latter would move a
|
|
13173
|
-
* listener into a focus trap with no announcement that anything had opened. So
|
|
13174
|
-
* it is paired with the dev-mode warning `tnAccessibleName` raises, which is
|
|
13175
|
-
* what keeps the fallback from becoming a quiet way to ship a nameless dialog.
|
|
13176
|
-
*
|
|
13177
|
-
* Exported so specs assert against it by name rather than by a copied literal.
|
|
13178
|
-
*/
|
|
13179
|
-
declare const TN_DIALOG_SHELL_DEFAULT_LABEL = "Dialog";
|
|
13180
13602
|
declare class TnDialogShellComponent implements OnInit {
|
|
13181
13603
|
protected readonly labels: Signal<TnDialogChromeLabels>;
|
|
13182
13604
|
/** Accessible name for the fullscreen toggle, following its current state. */
|
|
@@ -13276,6 +13698,7 @@ declare class TnDialogShellComponent implements OnInit {
|
|
|
13276
13698
|
private resolvedAriaLabelledby;
|
|
13277
13699
|
/** An explicit label, from this component's input or from the `DialogConfig`. */
|
|
13278
13700
|
private explicitAriaLabel;
|
|
13701
|
+
private readonly fallbackName;
|
|
13279
13702
|
/**
|
|
13280
13703
|
* The name to render as `aria-label`, or `null` to render none — and the
|
|
13281
13704
|
* dev-mode warning when the dialog has no name from any route.
|
|
@@ -13493,25 +13916,6 @@ declare class TnDialogTesting {
|
|
|
13493
13916
|
static rootLoader(fixture: ComponentFixture<unknown>): HarnessLoader;
|
|
13494
13917
|
}
|
|
13495
13918
|
|
|
13496
|
-
/**
|
|
13497
|
-
* The accessible name an open panel falls back to when it has no `title` and the
|
|
13498
|
-
* caller named neither `ariaLabel` nor `ariaLabelledby` (#214).
|
|
13499
|
-
*
|
|
13500
|
-
* `title` defaults to `''`, so the DEFAULT rendering of this component was a
|
|
13501
|
-
* `role="dialog"` with `aria-labelledby` pointing at an empty `<h2>` — measured
|
|
13502
|
-
* as an `aria-dialog-name` violation, alongside `empty-heading`. A dialog with no
|
|
13503
|
-
* name is announced as "dialog" and nothing else, which is the whole of what a
|
|
13504
|
-
* screen-reader user gets told about a surface that just covered the page.
|
|
13505
|
-
*
|
|
13506
|
-
* Withholding `role="dialog"` until there is a name would be the other way to
|
|
13507
|
-
* clear the rule, and it is worse: the panel traps focus either way, so a
|
|
13508
|
-
* listener would be moved into a region with no announcement that anything had
|
|
13509
|
-
* opened. A generic name is still a poor one, so it is paired with the dev-mode
|
|
13510
|
-
* warning `tnAccessibleName` raises.
|
|
13511
|
-
*
|
|
13512
|
-
* Exported so specs assert against it by name rather than by a copied literal.
|
|
13513
|
-
*/
|
|
13514
|
-
declare const TN_SIDE_PANEL_DEFAULT_LABEL = "Side panel";
|
|
13515
13919
|
/**
|
|
13516
13920
|
* The name given to the scrolling content region once it becomes focusable
|
|
13517
13921
|
* (#248).
|
|
@@ -13700,6 +14104,7 @@ declare class TnSidePanelComponent implements OnDestroy {
|
|
|
13700
14104
|
* when there is one, the caller's IDREF otherwise.
|
|
13701
14105
|
*/
|
|
13702
14106
|
protected resolvedAriaLabelledby: _angular_core.Signal<string | null>;
|
|
14107
|
+
private readonly fallbackName;
|
|
13703
14108
|
/**
|
|
13704
14109
|
* The name to render as `aria-label`, or `null` to render none — and the
|
|
13705
14110
|
* dev-mode warning when the panel has no name from any route.
|
|
@@ -15226,5 +15631,5 @@ declare const TN_THEME_DEFINITIONS: readonly TnThemeDefinition[];
|
|
|
15226
15631
|
*/
|
|
15227
15632
|
declare const THEME_MAP: Map<TnTheme, TnThemeDefinition>;
|
|
15228
15633
|
|
|
15229
|
-
export { CommonShortcuts, DEFAULT_THEME, DiskIconComponent, DiskType, FileSizePipe, InputType, LIGHT_THEME, LabelMarkupPipe, LabelTextPipe, LinuxModifierKeys, LinuxShortcuts, ModifierKeys, QuickShortcuts, ShortcutBuilder, THEME_MAP, THEME_STORAGE_KEY, TN_AUTOCOMPLETE_DEFAULT_LABELS, TN_AUTOCOMPLETE_LABELS, TN_BRANDED_SPINNER_DEFAULT_LABEL, TN_CALENDAR_INTL, TN_CALENDAR_INTL_DEFAULTS, TN_DIALOG_CHROME_LABELS, TN_DIALOG_DEFAULT_CHROME_LABELS, TN_DIALOG_SHELL_DEFAULT_LABEL, TN_DRAWER_CONTENT_LABEL, TN_DRAWER_DEFAULT_LABEL, TN_FORM_FIELD_CONTEXT, TN_FORM_FIELD_DISMISSIBLE_ERRORS, TN_FORM_FIELD_ERRORS, TN_FORM_LIST_CONTEXT, TN_PARTICLE_PROGRESS_BAR_DEFAULT_LABEL, TN_PROGRESS_BAR_DEFAULT_LABEL, TN_RADIO_GROUP, TN_SELECT_DEFAULT_LABELS, TN_SELECT_LABELS, TN_SIDE_PANEL_CONTENT_LABEL, TN_SIDE_PANEL_DEFAULT_LABEL, TN_SIDE_PANEL_OVERFLOW_TOLERANCE_PX, TN_SPINNER_DEFAULT_LABEL, TN_STEPPER_STATUS_COMPLETED, TN_STEPPER_STATUS_ERROR, TN_TABLE_DEFAULT_LABELS, TN_TABLE_LABELS, TN_TABLE_PAGER_DEFAULT_LABELS, TN_TABLE_PAGER_LABELS, TN_TABLE_SCROLL_REGION_LABEL, TN_TAB_PANEL_CONTENT_LABEL, TN_TEST_ATTR, TN_THEME_DEFINITIONS, TN_TOAST_ANNOUNCE_DELAY_MS, TnAutocompleteComponent, TnAutocompleteHarness, TnBannerActionDirective, TnBannerActionHarness, TnBannerComponent, TnBannerHarness, TnBrandedSpinnerComponent, TnButtonComponent, TnButtonHarness, TnButtonToggleComponent, TnButtonToggleGroupComponent, TnButtonToggleGroupHarness, TnButtonToggleHarness, TnCalendarCellHarness, TnCalendarComponent, TnCalendarHarness, 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, TnFilePickerHarness, TnFilePickerPopupComponent, TnFormErrorsComponent, TnFormErrorsHarness, TnFormFieldComponent, TnFormFieldHarness, TnFormListComponent, TnFormListHarness, TnFormListItemComponent, TnFormListItemHarness, 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, TnRadioGroupComponent, TnRadioGroupHarness, TnRadioHarness, TnRowActionsDefDirective, 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, TnTableTesting, TnTabsComponent, TnTabsHarness, TnTestIdDirective, TnTheme, TnThemeService, TnTimeInputComponent, TnToastComponent, TnToastMock, TnToastPosition, TnToastRef, TnToastService, TnToastTesting, TnToastType, TnTooltipComponent, TnTooltipDirective, TnTooltipHarness, TnTooltipTesting, TnTreeComponent, TnTreeFlatDataSource, TnTreeFlattener, TnTreeHarness, TnTreeNodeComponent, TnTreeNodeHarness, TnTreeNodeOutletDirective, TnTreeVirtualScrollNodeOutletDirective, TnTreeVirtualScrollViewComponent, TnTreeVirtualScrollViewHarness, TruncatePathPipe, WindowsModifierKeys, WindowsShortcuts, allowsCurrentDirectorySelection, canonicalizeSize, composeTestId, controlTestId, createFlatTreeControl, createLucideLibrary, createNestedTreeControl, createShortcut, defaultSpriteBasePath, defaultSpriteConfigPath, defaultTreeItemSize, formatSize, formatSizeExact, formatSizeForEditing, getSelectableTypes, injectTnCalendarIntl, injectTnFormFieldAria, injectTnLabels, isPathWithinRoot, kebabTestSegment, labelMarkupToHtml, labelMarkupToText, libIconMarker, normalizeRootPath, optionTestId, parseLabelMarkup, parseSize, parseSizeParts, registerLucideIcons, resolveErrorMessage, scopeTestId, setupLucideIntegration, tnIconMarker, writeTestId };
|
|
15230
|
-
export type { AutocompleteHarnessFilters, BannerActionHarnessFilters, BannerHarnessFilters, ButtonHarnessFilters, ButtonToggleHarnessFilters, CalendarCell, CalendarCellFill, CalendarCellHarnessFilters, CalendarHarnessFilters, CheckboxHarnessFilters, ChipColor, ChipHarnessFilters, DateInputHarnessFilters, DateRange, DateRangeInputHarnessFilters, DialogHarnessFilters, EmptyHarnessFilters, ExpansionPanelHarnessFilters, FileInputHarnessFilters, FilePickerCallbacks, FilePickerCreateAction, FilePickerCreateActionEvent, FilePickerError, FilePickerHarnessFilters, FilePickerMode, FileSystemItem, FileSystemItemType, FlatTreeControlOptions, FormFieldHarnessFilters, FormSectionHarnessFilters, IconButtonHarnessFilters, IconHarnessFilters, IconLibrary, IconLibraryType, IconResult, IconSize, IconSource, IconTestingMockOverrides, InputHarnessFilters, KeyCombination, LabelMarkupSegment, LabelMarkupSegmentType, LabelType, LucideIconOptions, MenuHarnessFilters, MockIconRegistry, MockSpriteLoader, NestedTreeControlOptions, ParsedSize, PathSegment, PlatformType, ProgressBarMode, RadioGroupHarnessFilters, RadioHarnessFilters, ResolveErrorMessageOptions, ResolvedIcon, SelectHarnessFilters, ShortcutHandler, SidePanelHarnessFilters, SizeStandard, SlideToggleColor, SlideToggleHarnessFilters, SpinnerMode, SpriteConfig, StepperHarnessFilters, SubscriptSizing, TabChangeEvent, TabHarnessFilters, TabPanelHarnessFilters, TabsHarnessFilters, TnAutocompleteLabels, TnAutocompleteOption, TnBannerType, TnButtonToggleType, TnCalendarIntl, TnCalendarIntlInput, TnCalendarView, TnCardAction, TnCardControl, TnCardFooterLink, TnCardHeaderStatus, TnChipInputHarnessFilters, TnChipInputOption, TnConfirmDialogData, TnDialogChromeLabels, TnDialogDefaults, TnDialogOpenTarget, TnDrawerMode, TnDrawerPosition, TnEmptySize, TnFlatTreeNode, TnFormErrorsHarnessFilters, TnFormFieldAriaBindings, TnFormFieldContext, TnFormFieldErrorMessage, TnFormFieldErrorMessages, TnFormFieldErrorResolver, TnFormListContext, TnFormListHarnessFilters, TnFormListItemHarnessFilters, TnMenuItem, TnOptionTestIdSource, TnRadioGroupApi, TnRadioOption, TnSelectLabels, TnSelectOption, TnSelectOptionGroup, TnSelectionChange, TnSortEvent, TnTableDataProvider, TnTableDataSource, TnTableHarnessFilters, TnTableLabels, TnTableMobileLayout, TnTablePagerHarnessFilters, TnTablePagerLabels, TnTablePagination, TnTestAttrName, TnTestIdValue, TnThemeDefinition, TnToastCall, TnToastConfig, TnTreeExpansion, TnTreeHarnessFilters, TnTreeNodeHarnessFilters, TnTreeVirtualNodeData, TnTreeVirtualScrollViewHarnessFilters, TooltipHarnessFilters, TooltipPosition, YearCell };
|
|
15634
|
+
export { CommonShortcuts, DEFAULT_THEME, DiskIconComponent, DiskType, FileSizePipe, InputType, LIGHT_THEME, LabelMarkupPipe, LabelTextPipe, LinuxModifierKeys, LinuxShortcuts, ModifierKeys, QuickShortcuts, ShortcutBuilder, THEME_MAP, THEME_STORAGE_KEY, TN_AUTOCOMPLETE_DEFAULT_LABELS, TN_AUTOCOMPLETE_LABELS, TN_BRANDED_SPINNER_DEFAULT_LABEL, TN_CALENDAR_INTL, TN_CALENDAR_INTL_DEFAULTS, TN_DEFAULT_FALLBACK_LABELS, TN_DIALOG_CHROME_LABELS, TN_DIALOG_DEFAULT_CHROME_LABELS, TN_DIALOG_SHELL_DEFAULT_LABEL, TN_DRAWER_CONTENT_LABEL, TN_DRAWER_DEFAULT_LABEL, TN_FALLBACK_LABELS, TN_FORM_FIELD_CONTEXT, TN_FORM_FIELD_DISMISSIBLE_ERRORS, TN_FORM_FIELD_ERRORS, TN_FORM_LIST_CONTEXT, TN_PARTICLE_PROGRESS_BAR_DEFAULT_LABEL, TN_PROGRESS_BAR_DEFAULT_LABEL, TN_RADIO_GROUP, TN_SELECT_DEFAULT_LABELS, TN_SELECT_LABELS, TN_SIDE_PANEL_CONTENT_LABEL, TN_SIDE_PANEL_DEFAULT_LABEL, TN_SIDE_PANEL_OVERFLOW_TOLERANCE_PX, TN_SPINNER_DEFAULT_LABEL, TN_STEPPER_STATUS_COMPLETED, TN_STEPPER_STATUS_ERROR, TN_TABLE_DEFAULT_LABELS, TN_TABLE_LABELS, TN_TABLE_PAGER_DEFAULT_LABELS, TN_TABLE_PAGER_LABELS, TN_TABLE_SCROLL_REGION_LABEL, TN_TAB_PANEL_CONTENT_LABEL, TN_TEST_ATTR, TN_THEME_DEFINITIONS, TN_TOAST_ANNOUNCE_DELAY_MS, TnAutocompleteComponent, TnAutocompleteHarness, TnBannerActionDirective, TnBannerActionHarness, TnBannerComponent, TnBannerHarness, TnBrandedSpinnerComponent, TnButtonComponent, TnButtonHarness, TnButtonToggleComponent, TnButtonToggleGroupComponent, TnButtonToggleGroupHarness, TnButtonToggleHarness, TnCalendarCellHarness, TnCalendarComponent, TnCalendarHarness, TnCalendarHeaderComponent, TnCardComponent, TnCardFooterActionsDirective, TnCardHeaderActionsDirective, TnCardHeaderDirective, TnCellDefDirective, TnCheckboxComponent, TnCheckboxGroupComponent, TnCheckboxGroupHarness, 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, TnFilePickerHarness, TnFilePickerPopupComponent, TnFormErrorsComponent, TnFormErrorsHarness, TnFormFieldComponent, TnFormFieldHarness, TnFormListComponent, TnFormListHarness, TnFormListItemComponent, TnFormListItemHarness, 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, TnRadioGroupComponent, TnRadioGroupHarness, TnRadioHarness, TnRowActionsDefDirective, 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, TnTableTesting, TnTabsComponent, TnTabsHarness, TnTestIdDirective, TnTheme, TnThemeService, TnTimeInputComponent, TnToastComponent, TnToastMock, TnToastPosition, TnToastRef, TnToastService, TnToastTesting, TnToastType, TnTooltipComponent, TnTooltipDirective, TnTooltipHarness, TnTooltipTesting, TnTreeComponent, TnTreeFlatDataSource, TnTreeFlattener, TnTreeHarness, TnTreeNodeComponent, TnTreeNodeHarness, TnTreeNodeOutletDirective, TnTreeVirtualScrollNodeOutletDirective, TnTreeVirtualScrollViewComponent, TnTreeVirtualScrollViewHarness, TruncatePathPipe, WindowsModifierKeys, WindowsShortcuts, allowsCurrentDirectorySelection, canonicalizeSize, composeTestId, controlTestId, createFlatTreeControl, createLucideLibrary, createNestedTreeControl, createShortcut, defaultSpriteBasePath, defaultSpriteConfigPath, defaultTreeItemSize, formatSize, formatSizeExact, formatSizeForEditing, getSelectableTypes, injectTnCalendarIntl, injectTnFallbackName, injectTnFormFieldAria, injectTnLabels, isPathWithinRoot, kebabTestSegment, labelMarkupToHtml, labelMarkupToText, libIconMarker, normalizeRootPath, optionTestId, parseLabelMarkup, parseSize, parseSizeParts, registerLucideIcons, resolveErrorMessage, scopeTestId, setupLucideIntegration, tnIconMarker, writeTestId };
|
|
15635
|
+
export type { AutocompleteHarnessFilters, BannerActionHarnessFilters, BannerHarnessFilters, ButtonHarnessFilters, ButtonToggleHarnessFilters, CalendarCell, CalendarCellFill, CalendarCellHarnessFilters, CalendarHarnessFilters, CheckboxGroupHarnessFilters, CheckboxHarnessFilters, ChipColor, ChipHarnessFilters, DateInputHarnessFilters, DateRange, DateRangeInputHarnessFilters, DialogHarnessFilters, EmptyHarnessFilters, ExpansionPanelHarnessFilters, FileInputHarnessFilters, FilePickerCallbacks, FilePickerCreateAction, FilePickerCreateActionEvent, FilePickerError, FilePickerHarnessFilters, FilePickerMode, FileSystemItem, FileSystemItemType, FlatTreeControlOptions, FormFieldHarnessFilters, FormSectionHarnessFilters, IconButtonHarnessFilters, IconHarnessFilters, IconLibrary, IconLibraryType, IconResult, IconSize, IconSource, IconTestingMockOverrides, InputHarnessFilters, KeyCombination, LabelMarkupSegment, LabelMarkupSegmentType, LabelType, LucideIconOptions, MenuHarnessFilters, MockIconRegistry, MockSpriteLoader, NestedTreeControlOptions, ParsedSize, PathSegment, PlatformType, ProgressBarMode, RadioGroupHarnessFilters, RadioHarnessFilters, ResolveErrorMessageOptions, ResolvedIcon, SelectHarnessFilters, ShortcutHandler, SidePanelHarnessFilters, SizeStandard, SlideToggleColor, SlideToggleHarnessFilters, SpinnerMode, SpriteConfig, StepperHarnessFilters, SubscriptSizing, TabChangeEvent, TabHarnessFilters, TabPanelHarnessFilters, TabsHarnessFilters, TnAutocompleteLabels, TnAutocompleteOption, TnBannerType, TnButtonToggleType, TnCalendarIntl, TnCalendarIntlInput, TnCalendarView, TnCardAction, TnCardControl, TnCardFooterLink, TnCardHeaderStatus, TnCheckboxOption, TnChipInputHarnessFilters, TnChipInputOption, TnConfirmDialogData, TnDialogChromeLabels, TnDialogDefaults, TnDialogOpenTarget, TnDrawerMode, TnDrawerPosition, TnEmptySize, TnFallbackLabels, TnFallbackName, TnFlatTreeNode, TnFormErrorsHarnessFilters, TnFormFieldAriaBindings, TnFormFieldContext, TnFormFieldErrorMessage, TnFormFieldErrorMessages, TnFormFieldErrorResolver, TnFormListContext, TnFormListHarnessFilters, TnFormListItemHarnessFilters, TnMenuItem, TnOptionTestIdSource, TnRadioGroupApi, TnRadioOption, TnSelectLabels, TnSelectOption, TnSelectOptionGroup, TnSelectionChange, TnSortEvent, TnTableDataProvider, TnTableDataSource, TnTableHarnessFilters, TnTableLabels, TnTableMobileLayout, TnTablePagerHarnessFilters, TnTablePagerLabels, TnTablePagination, TnTestAttrName, TnTestIdValue, TnThemeDefinition, TnToastCall, TnToastConfig, TnTreeExpansion, TnTreeHarnessFilters, TnTreeNodeHarnessFilters, TnTreeVirtualNodeData, TnTreeVirtualScrollViewHarnessFilters, TooltipHarnessFilters, TooltipPosition, YearCell };
|