@truenas/ui-components 0.7.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@truenas/ui-components",
3
- "version": "0.7.0",
3
+ "version": "0.7.1",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org",
6
6
  "access": "public"
@@ -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.
@@ -11029,21 +11010,236 @@ declare function labelMarkupToHtml(value: string): string;
11029
11010
  */
11030
11011
  declare function labelMarkupToText(value: string): string;
11031
11012
 
11032
- type SpinnerMode = 'determinate' | 'indeterminate';
11013
+ /**
11014
+ * Every generic name this library falls back to when a caller names neither
11015
+ * `ariaLabel` nor `ariaLabelledby`, in one bundle a consumer provides once.
11016
+ *
11017
+ * WHY A TOKEN AND NOT CONSTANTS ALONE
11018
+ * -----------------------------------
11019
+ * The constants below are English, and a spinner announcing "Loading" to a
11020
+ * screen reader in a Spanish app is the same untranslated-chrome bug that
11021
+ * `TN_SELECT_LABELS` and `TN_TABLE_LABELS` were added for: a string this
11022
+ * library renders into a consumer's UI has to be translatable, and the only
11023
+ * route to these was an `ariaLabel` on every single call site. In webui that
11024
+ * came to nineteen spinners and nineteen bars each carrying an identical
11025
+ * `[ariaLabel]="'Loading' | translate"` — the copy-on-every-instance shape
11026
+ * those two tokens already exist to remove.
11027
+ *
11028
+ * A per-instance `ariaLabel` still wins, and is still the right answer wherever
11029
+ * a name can say WHAT is loading or WHAT is open. This token is for the rest:
11030
+ * the generic name the component would otherwise render in English.
11031
+ *
11032
+ * WHY ONE BUNDLE, AND WHICH NAMES ARE IN IT
11033
+ * -----------------------------------------
11034
+ * Exactly the fallbacks `tnAccessibleName` renders — the four progressbars and
11035
+ * the three surfaces — because they already share one rule, and a consumer
11036
+ * translating one of them wants all seven. Separate keys rather than one shared
11037
+ * string, because the least-bad generic name differs by what the component is
11038
+ * ("Progress" for a bar, "Loading" for a spinner, "Dialog" for a dialog), and
11039
+ * `tn-branded-spinner` differs again for a reason
11040
+ * {@link TN_BRANDED_SPINNER_DEFAULT_LABEL} sets out.
11041
+ *
11042
+ * Not in it: `TN_SIDE_PANEL_CONTENT_LABEL`, `TN_DRAWER_CONTENT_LABEL`,
11043
+ * `TN_TAB_PANEL_CONTENT_LABEL` and `TN_TABLE_SCROLL_REGION_LABEL`. Those name a
11044
+ * scrolling REGION rather than the component, each already has a per-instance
11045
+ * input a consumer can translate through, and none of them warns — so they are
11046
+ * a separate decision from this one rather than part of it.
11047
+ *
11048
+ * WHAT PROVIDING IT DOES TO THE DEV WARNING
11049
+ * -----------------------------------------
11050
+ * It stands the warning down for the components whose fallback it supplies.
11051
+ * That is the same exception `tn-table-pager` already has, for the same reason,
11052
+ * written out at `resolvedTablePaginationLabel`: a name the consumer configured
11053
+ * is a DESIGNED name, not a last resort for one someone forgot, so warning
11054
+ * about it fires on the ordinary case and teaches readers to ignore the warning
11055
+ * where it means something. Registering this provider is a deliberate app-wide
11056
+ * decision about what an unnamed spinner or surface should say; the warning has
11057
+ * been heard, and an app that has answered it should not have every test that
11058
+ * renders a spinner fail on the answer.
11059
+ *
11060
+ * The half of `tnAccessibleName` that is NOT about the warning is unchanged: an
11061
+ * explicit `ariaLabel` still always survives, and the fallback — configured or
11062
+ * not — is still withheld beside an `ariaLabelledby`, so a dangling IDREF still
11063
+ * fails its axe name rule loudly instead of being masked by a name that says
11064
+ * nothing.
11065
+ *
11066
+ * Unlike its neighbours in this folder (`accessible-name.ts`, `live-region.ts`),
11067
+ * this file IS part of the public API: it is how a consumer answers the
11068
+ * question those two only ask.
11069
+ */
11070
+ interface TnFallbackLabels {
11071
+ /** Fallback name for `tn-spinner`. */
11072
+ spinner: string;
11073
+ /** Fallback name for `tn-branded-spinner`. */
11074
+ brandedSpinner: string;
11075
+ /** Fallback name for `tn-progress-bar`. */
11076
+ progressBar: string;
11077
+ /** Fallback name for `tn-particle-progress-bar`. */
11078
+ particleProgressBar: string;
11079
+ /** Fallback name for the `tn-dialog-shell` surface itself, for a dialog with no `title`. */
11080
+ dialog: string;
11081
+ /** Fallback name for the `tn-side-panel` surface itself, for a panel with no `title`. */
11082
+ sidePanel: string;
11083
+ /** Fallback name for `tn-drawer`, in both of its modes. */
11084
+ drawer: string;
11085
+ }
11033
11086
  /**
11034
11087
  * The accessible name a spinner falls back to when the caller names neither
11035
11088
  * `ariaLabel` nor `ariaLabelledby` (#202). Same reasoning as
11036
- * `TN_PROGRESS_BAR_DEFAULT_LABEL`, and the case is sharper here: the spinner
11037
- * defaults to indeterminate mode, so its unnamed default rendering reached
11038
- * assistive technology as a progressbar with neither a name nor a value.
11089
+ * {@link TN_PROGRESS_BAR_DEFAULT_LABEL}, and the case is sharper here: the
11090
+ * spinner defaults to indeterminate mode, so its unnamed default rendering
11091
+ * reached assistive technology as a progressbar with neither a name nor a
11092
+ * value.
11039
11093
  *
11040
- * `branded-spinner.component.ts` in this folder already fell back this way —
11094
+ * `branded-spinner.component.ts` already fell back this way —
11041
11095
  * `ariaLabel() || "Loading..."` inline — so a fallback is the shape this
11042
11096
  * library had already settled on; what it lacked was the warning. It has both
11043
- * since #206, through the same `tnAccessibleName` this component uses, which is
11097
+ * since #206, through the same `tnAccessibleName` that component uses, which is
11044
11098
  * why the two constants sit side by side and differ.
11045
11099
  */
11046
11100
  declare const TN_SPINNER_DEFAULT_LABEL = "Loading";
11101
+ /**
11102
+ * The name `tn-branded-spinner` falls back to when the caller names neither
11103
+ * `ariaLabel` nor `ariaLabelledby`. Same reasoning as
11104
+ * {@link TN_SPINNER_DEFAULT_LABEL} and {@link TN_PROGRESS_BAR_DEFAULT_LABEL}.
11105
+ *
11106
+ * It differs from `TN_SPINNER_DEFAULT_LABEL` — `"Loading..."` against
11107
+ * `"Loading"` — only because this is the string the component already rendered,
11108
+ * inline in its host binding, before #206 gave it the shared resolver. Aligning
11109
+ * the two would change what a screen reader announces for every unnamed branded
11110
+ * spinner already in the wild, which is a louder change than the consistency
11111
+ * fix it would be part of. Exported so specs assert against it by name rather
11112
+ * than by a copied string literal.
11113
+ */
11114
+ declare const TN_BRANDED_SPINNER_DEFAULT_LABEL = "Loading...";
11115
+ /**
11116
+ * The accessible name a bar falls back to when the caller names neither
11117
+ * `ariaLabel` nor `ariaLabelledby` (#202).
11118
+ *
11119
+ * Deliberately generic, and deliberately not silent: the host carries
11120
+ * `role="progressbar"` unconditionally, so without a fallback the default
11121
+ * rendering is a progressbar assistive technology announces with no name at all
11122
+ * — "progress bar, 40%", with nothing to say what is progressing. The
11123
+ * alternative fix, withholding the role until there is a name for it, trades
11124
+ * that for no announcement whatever, which is worse: a screen reader would not
11125
+ * learn that anything is in progress, and on a determinate bar it would lose
11126
+ * the value too.
11127
+ *
11128
+ * A generic name is still a poor one, so it is paired with the dev-mode warning
11129
+ * `tnAccessibleName` raises. Exported so specs assert against it by name rather
11130
+ * than by a copied string literal.
11131
+ */
11132
+ declare const TN_PROGRESS_BAR_DEFAULT_LABEL = "Progress";
11133
+ /**
11134
+ * The accessible name `tn-particle-progress-bar` falls back to when the caller
11135
+ * names neither `ariaLabel` nor `ariaLabelledby` (#209).
11136
+ *
11137
+ * The same string and the same reasoning as
11138
+ * {@link TN_PROGRESS_BAR_DEFAULT_LABEL} next door, and deliberately a separate
11139
+ * constant rather than an alias of it: `tnAccessibleName` takes a fallback PER
11140
+ * COMPONENT because the least-bad generic name differs by what the component is
11141
+ * ("Progress" for a bar, "Loading" for a spinner), and sharing the binding would
11142
+ * make a future divergence in one a silent change to the other. Exported so
11143
+ * specs assert against it by name rather than by a copied string literal.
11144
+ */
11145
+ declare const TN_PARTICLE_PROGRESS_BAR_DEFAULT_LABEL = "Progress";
11146
+ /**
11147
+ * The accessible name a dialog falls back to when it renders no `title` and the
11148
+ * caller named it through neither this component nor the `DialogConfig` (#219).
11149
+ *
11150
+ * `title` defaults to `''`, so the DEFAULT rendering of this component put an
11151
+ * empty `<h2>` in the header and left the CDK container with no naming
11152
+ * attribute at all — measured as `empty-heading` on the heading and
11153
+ * `aria-dialog-name` on the dialog. A dialog with no name is announced as
11154
+ * "dialog" and nothing else, which is the whole of what a screen-reader user is
11155
+ * told about a surface that just took over the page and trapped their focus.
11156
+ *
11157
+ * "Dialog" is a poor name, and says almost exactly what the role already says.
11158
+ * It is still better than the two alternatives: leaving the surface unnamed, or
11159
+ * withholding `role="dialog"` until there is a name — the latter would move a
11160
+ * listener into a focus trap with no announcement that anything had opened. So
11161
+ * it is paired with the dev-mode warning `tnAccessibleName` raises, which is
11162
+ * what keeps the fallback from becoming a quiet way to ship a nameless dialog.
11163
+ *
11164
+ * Exported so specs assert against it by name rather than by a copied literal.
11165
+ */
11166
+ declare const TN_DIALOG_SHELL_DEFAULT_LABEL = "Dialog";
11167
+ /**
11168
+ * The accessible name an open panel falls back to when it has no `title` and the
11169
+ * caller named neither `ariaLabel` nor `ariaLabelledby` (#214).
11170
+ *
11171
+ * `title` defaults to `''`, so the DEFAULT rendering of this component was a
11172
+ * `role="dialog"` with `aria-labelledby` pointing at an empty `<h2>` — measured
11173
+ * as an `aria-dialog-name` violation, alongside `empty-heading`. A dialog with no
11174
+ * name is announced as "dialog" and nothing else, which is the whole of what a
11175
+ * screen-reader user gets told about a surface that just covered the page.
11176
+ *
11177
+ * Withholding `role="dialog"` until there is a name would be the other way to
11178
+ * clear the rule, and it is worse: the panel traps focus either way, so a
11179
+ * listener would be moved into a region with no announcement that anything had
11180
+ * opened. A generic name is still a poor one, so it is paired with the dev-mode
11181
+ * warning `tnAccessibleName` raises.
11182
+ *
11183
+ * Exported so specs assert against it by name rather than by a copied literal.
11184
+ */
11185
+ declare const TN_SIDE_PANEL_DEFAULT_LABEL = "Side panel";
11186
+ /**
11187
+ * The accessible name a drawer falls back to when the caller names neither
11188
+ * `ariaLabel` nor `ariaLabelledby` (#214).
11189
+ *
11190
+ * `ariaLabel` defaults to `undefined`, so the DEFAULT rendering in `over` mode
11191
+ * was a `role="dialog"` with `aria-modal="true"` and no name — measured as an
11192
+ * `aria-dialog-name` violation. In `side` mode the same omission leaves a
11193
+ * `role="navigation"` landmark unnamed, which axe does not report while there is
11194
+ * only one of them on the page, and which stops telling them apart the moment
11195
+ * there are two.
11196
+ *
11197
+ * One fallback for both modes rather than one per mode: the drawer is the same
11198
+ * surface either way, the name answers the same question ("what is this?"), and
11199
+ * a rule that changes with the mode is one more thing for a caller to be wrong
11200
+ * about. A generic name is still a poor one, so it is paired with the dev-mode
11201
+ * warning `tnAccessibleName` raises.
11202
+ *
11203
+ * Exported so specs assert against it by name rather than by a copied literal.
11204
+ */
11205
+ declare const TN_DRAWER_DEFAULT_LABEL = "Drawer";
11206
+ /** English defaults used when no {@link TN_FALLBACK_LABELS} provider is registered. */
11207
+ declare const TN_DEFAULT_FALLBACK_LABELS: TnFallbackLabels;
11208
+ /**
11209
+ * DI token for the app-wide fallback names above. Provide either a static
11210
+ * object or a `Signal<TnFallbackLabels>` — the latter lets every component
11211
+ * react to language changes when the consumer wires it up to an i18n service.
11212
+ *
11213
+ * An `ariaLabel` on a particular instance still wins over these, and is still
11214
+ * what to reach for when a name can say what is loading or what is open.
11215
+ */
11216
+ declare const TN_FALLBACK_LABELS: InjectionToken<TnFallbackLabels | Signal<TnFallbackLabels>>;
11217
+ /** One component's fallback name, and where it came from. */
11218
+ interface TnFallbackName {
11219
+ /** The name to render when the caller names neither input. */
11220
+ label: Signal<string>;
11221
+ /**
11222
+ * Whether that name came from a consumer's provider rather than this
11223
+ * library's English default — which is what decides whether an unnamed
11224
+ * instance warns. See the file comment above.
11225
+ */
11226
+ configured: boolean;
11227
+ }
11228
+ /**
11229
+ * Reads one component's fallback name out of {@link TN_FALLBACK_LABELS}.
11230
+ *
11231
+ * Not `injectTnLabels`, which normalizes the token to a Signal and drops the
11232
+ * value it started from: telling a configured bundle from the built-in one is an
11233
+ * identity check against `builtInLabels`, so this needs the raw injected value.
11234
+ * A consumer who provides a bundle equal to the defaults — the exported constant
11235
+ * included — still counts as configured, which is the right way round: they said
11236
+ * so on purpose.
11237
+ *
11238
+ * **Must be called from an injection context.**
11239
+ */
11240
+ declare function injectTnFallbackName(key: keyof TnFallbackLabels): TnFallbackName;
11241
+
11242
+ type SpinnerMode = 'determinate' | 'indeterminate';
11047
11243
  declare class TnSpinnerComponent {
11048
11244
  mode: _angular_core.InputSignal<SpinnerMode>;
11049
11245
  value: _angular_core.InputSignal<number>;
@@ -11051,6 +11247,7 @@ declare class TnSpinnerComponent {
11051
11247
  strokeWidth: _angular_core.InputSignal<number>;
11052
11248
  ariaLabel: _angular_core.InputSignal<string | null>;
11053
11249
  ariaLabelledby: _angular_core.InputSignal<string | null>;
11250
+ private readonly fallbackName;
11054
11251
  /**
11055
11252
  * The name to render, or `null` to render no `aria-label` attribute — and the
11056
11253
  * dev-mode warning when the caller named neither input.
@@ -11072,23 +11269,10 @@ declare class TnSpinnerComponent {
11072
11269
  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
11270
  }
11074
11271
 
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
11272
  declare class TnBrandedSpinnerComponent implements OnInit, OnDestroy, AfterViewInit {
11090
11273
  ariaLabel: _angular_core.InputSignal<string | null>;
11091
11274
  ariaLabelledby: _angular_core.InputSignal<string | null>;
11275
+ private readonly fallbackName;
11092
11276
  /**
11093
11277
  * The name to render, or `null` to render no `aria-label` attribute — and the
11094
11278
  * dev-mode warning when the caller named neither input.
@@ -11120,30 +11304,13 @@ declare class TnBrandedSpinnerComponent implements OnInit, OnDestroy, AfterViewI
11120
11304
  }
11121
11305
 
11122
11306
  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
11307
  declare class TnProgressBarComponent {
11142
11308
  mode: _angular_core.InputSignal<ProgressBarMode>;
11143
11309
  value: _angular_core.InputSignal<number>;
11144
11310
  bufferValue: _angular_core.InputSignal<number>;
11145
11311
  ariaLabel: _angular_core.InputSignal<string | null>;
11146
11312
  ariaLabelledby: _angular_core.InputSignal<string | null>;
11313
+ private readonly fallbackName;
11147
11314
  /**
11148
11315
  * The name to render, or `null` to render no `aria-label` attribute — and the
11149
11316
  * dev-mode warning when the caller named neither input.
@@ -11177,19 +11344,6 @@ declare class TnProgressBarComponent {
11177
11344
  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
11345
  }
11179
11346
 
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
11347
  /**
11194
11348
  * THE DECISION #209 ASKED FOR: THIS IS A PROGRESSBAR, NOT DECORATION
11195
11349
  * ------------------------------------------------------------------
@@ -11249,6 +11403,7 @@ declare class TnParticleProgressBarComponent implements AfterViewInit, OnDestroy
11249
11403
  canvasRef: _angular_core.Signal<ElementRef<HTMLCanvasElement>>;
11250
11404
  /** Exposed to the template so the rects and the ARIA value share one inset. */
11251
11405
  readonly trackInset = 50;
11406
+ private readonly fallbackName;
11252
11407
  /**
11253
11408
  * The name to render, or `null` to render no `aria-label` at all — and the
11254
11409
  * dev-mode warning when the caller named neither input.
@@ -13156,27 +13311,6 @@ declare const TN_DIALOG_DEFAULT_CHROME_LABELS: TnDialogChromeLabels;
13156
13311
  * the consumer wires it up to an i18n service.
13157
13312
  */
13158
13313
  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
13314
  declare class TnDialogShellComponent implements OnInit {
13181
13315
  protected readonly labels: Signal<TnDialogChromeLabels>;
13182
13316
  /** Accessible name for the fullscreen toggle, following its current state. */
@@ -13276,6 +13410,7 @@ declare class TnDialogShellComponent implements OnInit {
13276
13410
  private resolvedAriaLabelledby;
13277
13411
  /** An explicit label, from this component's input or from the `DialogConfig`. */
13278
13412
  private explicitAriaLabel;
13413
+ private readonly fallbackName;
13279
13414
  /**
13280
13415
  * The name to render as `aria-label`, or `null` to render none — and the
13281
13416
  * dev-mode warning when the dialog has no name from any route.
@@ -13493,25 +13628,6 @@ declare class TnDialogTesting {
13493
13628
  static rootLoader(fixture: ComponentFixture<unknown>): HarnessLoader;
13494
13629
  }
13495
13630
 
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
13631
  /**
13516
13632
  * The name given to the scrolling content region once it becomes focusable
13517
13633
  * (#248).
@@ -13700,6 +13816,7 @@ declare class TnSidePanelComponent implements OnDestroy {
13700
13816
  * when there is one, the caller's IDREF otherwise.
13701
13817
  */
13702
13818
  protected resolvedAriaLabelledby: _angular_core.Signal<string | null>;
13819
+ private readonly fallbackName;
13703
13820
  /**
13704
13821
  * The name to render as `aria-label`, or `null` to render none — and the
13705
13822
  * dev-mode warning when the panel has no name from any route.
@@ -15226,5 +15343,5 @@ declare const TN_THEME_DEFINITIONS: readonly TnThemeDefinition[];
15226
15343
  */
15227
15344
  declare const THEME_MAP: Map<TnTheme, TnThemeDefinition>;
15228
15345
 
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 };
15346
+ 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, 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 };
15347
+ 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, 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 };