@uni-design-system/uni-angular 8.3.1 → 8.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { Signal, WritableSignal, InjectionToken, ElementRef, TemplateRef, OnInit, OnDestroy, AfterViewInit } from '@angular/core';
3
3
  import * as _uni_design_system_uni_core from '@uni-design-system/uni-core';
4
- import { IconName, Variant, ContainerColorToken, PaletteConfig, GenerateColorsConfig, Radii, UniTheme, ComponentName, ComponentTheme, NullableSize, ThemeName, ThemeParseResult, TextRole, ContentColorToken, Size, Thickness, NullableStyleExpression, ColorKey, ColorToken, Typeface, Radius, OptionalSize, Border, Shadow, ZIndexableElements, Elevation, RadiiSize, TextColor, JustifyContent, StyleExpression, Orientation, CssLength, OptionalAlignSelf, OptionalAlignItems, OptionalAlignContent, OptionalJustifyContent, OptionalDisplay, OptionalPosition, OptionalOverflow, OptionalFlexDirection, OptionalTextAlign, OptionalWrap, TagTone, ColorScheme, ColorCategory, ThemeShape, ContrastCheck, Colors, GenerationInput } from '@uni-design-system/uni-core';
4
+ import { IconName, Variant, ContainerColorToken, PaletteConfig, GenerateColorsConfig, Radii, UniTheme, ComponentName, ComponentTheme, NullableSize, MotionToken, ThemeName, ThemeParseResult, TextRole, ContentColorToken, Size, Thickness, NullableStyleExpression, ColorKey, ColorToken, Typeface, Radius, Motion, OptionalSize, Border, Shadow, ZIndexableElements, Elevation, RadiiSize, TextColor, JustifyContent, StyleExpression, Orientation, CssLength, OptionalAlignSelf, OptionalAlignItems, OptionalAlignContent, OptionalJustifyContent, OptionalDisplay, OptionalPosition, OptionalOverflow, OptionalFlexDirection, OptionalTextAlign, OptionalWrap, TagTone, ColorScheme, ColorCategory, ThemeShape, ContrastCheck, Colors, GenerationInput } from '@uni-design-system/uni-core';
5
5
  import * as _uni_design_system_uni_angular from '@uni-design-system/uni-angular';
6
6
  import { FormValueControl, FormCheckboxControl } from '@angular/forms/signals';
7
7
  import { CSSObject } from '@emotion/css/create-instance';
@@ -44,6 +44,43 @@ declare const visuallyHidden: {
44
44
  declare function motionSafe<T extends object>(styles: T): {
45
45
  '@media (prefers-reduced-motion: no-preference)': T;
46
46
  };
47
+ interface Announcer {
48
+ /**
49
+ * Current live-region text. Bind it to a visually hidden element that is
50
+ * already in the DOM when the component renders — a region added at the
51
+ * moment it gains text is not reliably announced:
52
+ *
53
+ * ```html
54
+ * <span role="status" aria-live="polite" [class]="srOnly">
55
+ * {{ announcer.message() }}
56
+ * </span>
57
+ * ```
58
+ */
59
+ readonly message: Signal<string>;
60
+ /** Announce `text`, even when it repeats what was just announced. */
61
+ announce(text: string): void;
62
+ }
63
+ /**
64
+ * A polite live region's text, for the running commentary a form control owes
65
+ * a screen reader: commits, clears, refused entries, result counts — changes
66
+ * a sighted user sees but that are otherwise silent.
67
+ *
68
+ * Extracted because five controls (`uni-combobox`, `uni-tag-input`,
69
+ * `uni-time-input`, `uni-date-input`, `uni-calendar`) carried byte-identical
70
+ * copies, including the repeat trick below — the kind of subtlety that is
71
+ * quietly dropped when the sixth control hand-rolls its own.
72
+ *
73
+ * Announcing the same text twice must still be heard: assistive tech reads a
74
+ * live region when its content *changes*, so setting an identical string is a
75
+ * no-op and the second "No match." would be silent. A trailing space breaks
76
+ * the equality without changing a word of what is read. Successive repeats
77
+ * alternate between the padded and unpadded form, so nothing accumulates.
78
+ *
79
+ * Deliberately holds no DOM and no styling: the region belongs to the
80
+ * component's own template, where its placement and visually-hidden class are
81
+ * already the component's business.
82
+ */
83
+ declare function createAnnouncer(): Announcer;
47
84
 
48
85
  /**
49
86
  * Canonical date/time value shapes shared by `uni-calendar`,
@@ -162,6 +199,18 @@ interface ListboxNavigationConfig {
162
199
  * nearest enabled option; an all-disabled list never activates.
163
200
  */
164
201
  disabled?: (index: number) => boolean;
202
+ /**
203
+ * Let Home/End jump to the ends of the list. Default false.
204
+ *
205
+ * In an editable combobox those keys belong to the caret — APG reserves
206
+ * them for text editing, and a control that steals them makes the text
207
+ * un-navigable while its list is open. Opt in only where focus is *not* in
208
+ * a text field (uni-multi-select-dropdown, whose focus rides the option
209
+ * checkboxes). Nothing is lost by leaving it off: opening with ArrowUp
210
+ * already lands on the last option, ArrowDown on the first, and navigation
211
+ * wraps at both ends.
212
+ */
213
+ homeEndNavigates?: boolean;
165
214
  }
166
215
  /**
167
216
  * The keyboard and ARIA bookkeeping shared by every combobox-style popup:
@@ -172,8 +221,9 @@ interface ListboxNavigationConfig {
172
221
  * Extracted because three controls need the identical contract
173
222
  * (`uni-search-input`, `uni-tag-input`, and the multi-select upgrade), and the
174
223
  * parts that silently drift between hand-rolled copies all live here: the
175
- * wrap-around arithmetic, Home/End, and keeping the active id in sync with the
176
- * option list.
224
+ * wrap-around arithmetic and keeping the active id in sync with the option
225
+ * list. Home/End are opt-in (`homeEndNavigates`) because a text field's caret
226
+ * has the better claim on them.
177
227
  *
178
228
  * `Enter` and `Escape` are deliberately *not* handled: what they mean depends
179
229
  * on the control (submit a search, commit a typed token, clear the field), and
@@ -187,6 +237,7 @@ declare class ListboxNavigation {
187
237
  private readonly _activeIndex;
188
238
  private readonly wrap;
189
239
  private readonly isDisabled;
240
+ private readonly homeEndNavigates;
190
241
  /** Whether the popup is showing. Also false when there is nothing to show. */
191
242
  readonly open: Signal<boolean>;
192
243
  /** Index of the highlighted option, or -1 when none is active. */
@@ -201,9 +252,9 @@ declare class ListboxNavigation {
201
252
  hide(): void;
202
253
  setActive(index: number): void;
203
254
  /**
204
- * Handle ArrowDown / ArrowUp / Home / End, opening the popup if needed.
205
- * Returns true when the key was consumed, so a caller can fall through to
206
- * its own handling for everything else.
255
+ * Handle ArrowDown / ArrowUp and Home / End where `homeEndNavigates` is
256
+ * on. Opens the popup if needed. Returns true when the key was consumed, so
257
+ * a caller can fall through to its own handling for everything else.
207
258
  */
208
259
  navigate(event: KeyboardEvent): boolean;
209
260
  private nextIndex;
@@ -322,8 +373,14 @@ declare function isToggleOpen(event: Event): boolean;
322
373
  * top layer: `transition-behavior: allow-discrete` over the `hidden` keys plus
323
374
  * `display`/`overlay`, the shown state under `:popover-open`, and
324
375
  * `@starting-style` so entry transitions run from the hidden state.
376
+ *
377
+ * `display` and `overlay` must ride along or the element cannot animate into
378
+ * and out of the top layer at all — it would simply appear and vanish.
379
+ *
380
+ * `timingFunction` is omitted from the output when not given, leaving the CSS
381
+ * initial value (`ease`), so callers that never asked for one are unaffected.
325
382
  */
326
- declare function discreteOverlayTransition(durationMs: number, hidden: Record<string, string | number>, shown: Record<string, string | number>): Record<string, unknown>;
383
+ declare function discreteOverlayTransition(durationMs: number, hidden: Record<string, string | number>, shown: Record<string, string | number>, timingFunction?: string): Record<string, unknown>;
327
384
  /**
328
385
  * Returns focus to `target` when an overlay closes while focus was inside its
329
386
  * panel (or was dropped on `<body>` by the top layer closing), so keyboard
@@ -562,6 +619,7 @@ declare class ThemeService {
562
619
  borders: Signal<Partial<Record<string, string>>>;
563
620
  shadows: Signal<Partial<Record<string, string>>>;
564
621
  icons: Signal<_uni_design_system_uni_core.Icons>;
622
+ motions: Signal<Partial<Record<string, MotionToken>>>;
565
623
  constructor();
566
624
  /**
567
625
  * Activate a registered theme. Returns false — touching nothing, persisting
@@ -654,6 +712,12 @@ declare class ThemeService {
654
712
  colorPalette: () => Partial<Record<string, string>>;
655
713
  color(color?: ColorKey): NullableStyleExpression;
656
714
  getDashedBorder(color: ColorKey | undefined, radius: Radius | undefined): NullableStyleExpression;
715
+ /**
716
+ * Resolves a named motion primitive. Falls back to `popup` and then to a
717
+ * hard default, so a theme that predates the motion scale — or names a
718
+ * token that isn't there — still animates rather than snapping.
719
+ */
720
+ motion(token: Motion | undefined): MotionToken;
657
721
  radius(size: Radius | undefined): NullableStyleExpression;
658
722
  getRadiusLeft(size: Radius | undefined): NullableStyleExpression;
659
723
  getRadiusRight(size: Radius | undefined): NullableStyleExpression;
@@ -1016,7 +1080,8 @@ declare class UniCalendarComponent extends BaseComponent<UniCalendarOptions> imp
1016
1080
  /** Hover/focus candidate painting the preview band while a range is pending. */
1017
1081
  protected readonly previewDate: _angular_core.WritableSignal<string>;
1018
1082
  /** Live-region text; selections are otherwise silent for a screen reader. */
1019
- protected readonly announcement: _angular_core.WritableSignal<string>;
1083
+ /** Commits, clears and refusals are otherwise silent to a screen reader. */
1084
+ protected readonly announcer: _uni_design_system_uni_angular.Announcer;
1020
1085
  protected readonly resolvedLocale: _angular_core.Signal<string>;
1021
1086
  protected readonly resolvedWeekStart: _angular_core.Signal<number>;
1022
1087
  /**
@@ -1062,7 +1127,6 @@ declare class UniCalendarComponent extends BaseComponent<UniCalendarOptions> imp
1062
1127
  private focusDay;
1063
1128
  private pickFocus;
1064
1129
  private firstEnabledInView;
1065
- private announce;
1066
1130
  private readonly daySize;
1067
1131
  protected readonly className: _angular_core.Signal<string>;
1068
1132
  protected readonly navClass: _angular_core.Signal<string>;
@@ -1118,7 +1182,16 @@ interface UniCalloutOptions {
1118
1182
  spotlightRadius: Radius;
1119
1183
  /** Spotlight ring width, px. */
1120
1184
  ringWidth: number;
1121
- transitionMs: number;
1185
+ /**
1186
+ * Named motion primitive for the open/close fade. Defaults to `panel`.
1187
+ */
1188
+ motion?: Motion;
1189
+ /**
1190
+ * @deprecated Use `motion` and retime the token instead — one edit covers
1191
+ * every panel rather than this one. Still honoured when set, and wins over
1192
+ * `motion` so existing themes are unaffected. Removed next major.
1193
+ */
1194
+ transitionMs?: number;
1122
1195
  }
1123
1196
 
1124
1197
  /**
@@ -1200,6 +1273,12 @@ declare class UniCalloutComponent extends BaseComponent<UniCalloutOptions> {
1200
1273
  /** A stray click shouldn't kill onboarding: nudge the panel instead. */
1201
1274
  protected onBackdropClick(): void;
1202
1275
  private readonly spotlight;
1276
+ /**
1277
+ * Timing for the open/close fade and the teardown that follows it. The
1278
+ * deprecated `transitionMs` wins when a theme still sets it, so existing
1279
+ * themes keep their timing; otherwise the `motion` token decides.
1280
+ */
1281
+ private readonly motion;
1203
1282
  protected readonly scrimClassName: _angular_core.Signal<string>;
1204
1283
  protected readonly windowClassName: _angular_core.Signal<string>;
1205
1284
  protected stripClassName(side: (typeof this.stripSides)[number]): string;
@@ -1243,6 +1322,10 @@ interface UniCardOptions {
1243
1322
  border?: Border;
1244
1323
  /** Optional elevation shadow token; cards are flat by default. */
1245
1324
  elevation?: Elevation;
1325
+ /**
1326
+ * @deprecated Never read by `uni-card` — setting it has no effect and never
1327
+ * had. Removed next major; nothing needs to replace it.
1328
+ */
1246
1329
  transitionSpeed?: number;
1247
1330
  }
1248
1331
 
@@ -1320,7 +1403,9 @@ interface UniComboboxOptions {
1320
1403
  activeColor?: ContainerColorToken;
1321
1404
  /** Scroll height in rows — the list scrolls past this, never truncates. */
1322
1405
  maxVisibleOptions?: number;
1323
- descriptionColor?: ContentColorToken;
1406
+ descriptionColor?: ContentColorToken; /** Named motion primitive for the suggestion popup's open animation.
1407
+ Defaults to `popup` — the token `uni-dropdown` uses. */
1408
+ motion?: Motion;
1324
1409
  }
1325
1410
 
1326
1411
  /**
@@ -1376,9 +1461,14 @@ declare class UniComboboxComponent<T> extends BaseComponent<UniComboboxOptions>
1376
1461
  private readonly listRef;
1377
1462
  /** Cancelled on destroy — a late tick would emit on a destroyed OutputRef. */
1378
1463
  private queryTimer?;
1464
+ /** Ties the popup to the field so the browser tracks it in the top layer. */
1465
+ private readonly anchor;
1466
+ /** `manual` where the top layer is usable, else null — see the popup helper. */
1467
+ protected readonly popupAttr: "manual";
1379
1468
  constructor();
1380
1469
  protected readonly srOnly: string;
1381
- protected readonly announcement: _angular_core.WritableSignal<string>;
1470
+ /** Commits, clears and refusals are otherwise silent to a screen reader. */
1471
+ protected readonly announcer: _uni_design_system_uni_angular.Announcer;
1382
1472
  /** null → the field shows the committed label; a string is an uncommitted draft. */
1383
1473
  protected readonly draft: _angular_core.WritableSignal<string>;
1384
1474
  /**
@@ -1429,7 +1519,6 @@ declare class UniComboboxComponent<T> extends BaseComponent<UniComboboxOptions>
1429
1519
  private closeList;
1430
1520
  private scrollToActive;
1431
1521
  private setFieldText;
1432
- private announce;
1433
1522
  protected readonly className: _angular_core.Signal<string>;
1434
1523
  protected readonly rowClass: _angular_core.Signal<string>;
1435
1524
  protected readonly inputClass: _angular_core.Signal<string>;
@@ -1599,7 +1688,8 @@ declare class UniDateInputComponent extends BaseComponent<UniDateInputOptions> i
1599
1688
  protected readonly srOnly: string;
1600
1689
  /** A refused commit — styles the field and sets aria-invalid until edited. */
1601
1690
  protected readonly draftInvalid: _angular_core.WritableSignal<boolean>;
1602
- protected readonly announcement: _angular_core.WritableSignal<string>;
1691
+ /** Commits, clears and refusals are otherwise silent to a screen reader. */
1692
+ protected readonly announcer: _uni_design_system_uni_angular.Announcer;
1603
1693
  protected readonly toggleElement: _angular_core.Signal<any>;
1604
1694
  protected readonly popupOpen: _angular_core.Signal<boolean>;
1605
1695
  protected readonly resolvedLocale: _angular_core.Signal<string>;
@@ -1625,7 +1715,6 @@ declare class UniDateInputComponent extends BaseComponent<UniDateInputOptions> i
1625
1715
  /** The popup is a focus-holding dialog: Tab cycles inside it (APG pattern). */
1626
1716
  protected onPopupKeydown(event: KeyboardEvent): void;
1627
1717
  private setFieldText;
1628
- private announce;
1629
1718
  protected readonly className: _angular_core.Signal<string>;
1630
1719
  protected readonly rowClass: _angular_core.Signal<string>;
1631
1720
  protected readonly inputClass: _angular_core.Signal<string>;
@@ -1906,12 +1995,13 @@ interface UniDropdownOptions {
1906
1995
  borderRadius: Radius;
1907
1996
  shadow: Shadow;
1908
1997
  color: ContainerColorToken;
1998
+ /** Named motion primitive for the open/close animation. */
1999
+ motion: Motion;
1909
2000
  }
1910
2001
 
1911
2002
  type AriaHasPopup = 'menu' | 'listbox' | 'dialog' | 'grid' | 'tree' | 'true';
1912
2003
  declare class UniDropdownComponent extends BaseComponent<UniDropdownOptions> implements OnInit, OnDestroy {
1913
2004
  private renderer;
1914
- private delay;
1915
2005
  showing: _angular_core.WritableSignal<boolean>;
1916
2006
  trigger: _angular_core.InputSignal<HTMLElement>;
1917
2007
  placement: _angular_core.InputSignal<Placement>;
@@ -1937,7 +2027,6 @@ declare class UniDropdownComponent extends BaseComponent<UniDropdownOptions> imp
1937
2027
  dropdownRef: ElementRef<HTMLDivElement>;
1938
2028
  private get _trigger();
1939
2029
  private get _dropdown();
1940
- private transformOriginMap;
1941
2030
  dropdownClass: _angular_core.Signal<string>;
1942
2031
  /** The element that receives focus and carries the ARIA popup state. */
1943
2032
  private get _focusTarget();
@@ -1945,18 +2034,12 @@ declare class UniDropdownComponent extends BaseComponent<UniDropdownOptions> imp
1945
2034
  /**
1946
2035
  * Scale the open/close animation from the corner touching the trigger,
1947
2036
  * wherever the browser actually placed the panel. The static
1948
- * `transformOriginMap` covers only the *requested* placement; with
2037
+ * `TRANSFORM_ORIGINS` entry covers only the *requested* placement; with
1949
2038
  * `position-try-fallbacks` the panel may have flipped at a viewport edge,
1950
2039
  * and a `bottom-end` picker rendered above its field would otherwise still
1951
2040
  * animate from the top-right corner.
1952
2041
  */
1953
2042
  private syncTransformOrigin;
1954
- /**
1955
- * Returns focus to the trigger when the popover closes while focus was
1956
- * inside it (or was dropped on <body> by the top layer closing), so
1957
- * keyboard users are never stranded (WCAG 2.4.3).
1958
- */
1959
- private restoreFocus;
1960
2043
  toggleDropdown(): void;
1961
2044
  hideDropdown(): void;
1962
2045
  ngOnDestroy(): void;
@@ -1967,13 +2050,20 @@ declare class UniDropdownComponent extends BaseComponent<UniDropdownOptions> imp
1967
2050
  /** Theme-level options for `uni-expand`. */
1968
2051
  interface UniExpandOptions {
1969
2052
  /**
1970
- * Base reveal/collapse duration in seconds (matching alert/card
1971
- * `transitionSpeed`), lives in the `expand` theme options. The default
1972
- * theme uses `0.35`. This is the duration at a 240px-tall region; the
1973
- * actual duration scales with content height (√-of-height, clamped
1974
- * `expandDuration` in uni-core) so short regions stay snappy and tall
1975
- * ones aren't rushed. Also drives `uni-expand-toggle`'s chevron rotation
1976
- * so trigger and region move on the same clock.
2053
+ * Named motion primitive for the reveal. Defaults to `reveal`, whose
2054
+ * duration is the *base* speed at a 240px-tall region — the actual duration
2055
+ * scales with content height (√-of-height, clamped `expandDuration` in
2056
+ * uni-core) so short regions stay snappy and tall ones aren't rushed. Its
2057
+ * easing drives the animation curve, and `uni-expand-toggle`'s chevron
2058
+ * reads the same token so trigger and region move on one clock.
2059
+ */
2060
+ motion?: Motion;
2061
+ /**
2062
+ * Base reveal/collapse duration in seconds.
2063
+ *
2064
+ * @deprecated Use `motion` and retime the `reveal` token instead — one edit
2065
+ * covers the region and its toggle together. Still honoured when set, and
2066
+ * wins over `motion`, so existing themes are unaffected. Removed next major.
1977
2067
  */
1978
2068
  transitionSpeed?: number;
1979
2069
  }
@@ -2017,6 +2107,14 @@ declare class UniExpandComponent extends BaseComponent<UniExpandOptions> {
2017
2107
  * (`[style.transition-duration]="expand.duration() + 's'"`).
2018
2108
  */
2019
2109
  readonly duration: _angular_core.Signal<number>;
2110
+ /**
2111
+ * Base speed in seconds, before the size-aware scaling above. The
2112
+ * deprecated `transitionSpeed` option wins when a theme still sets it;
2113
+ * otherwise the `motion` token's duration (ms) converts to seconds.
2114
+ */
2115
+ private readonly baseSpeed;
2116
+ /** Curve for the reveal, from the same token as the speed. */
2117
+ private readonly easing;
2020
2118
  protected readonly cssDuration: _angular_core.Signal<string>;
2021
2119
  /**
2022
2120
  * A custom element is `display: inline` by default, which would lay the
@@ -2043,8 +2141,8 @@ declare class UniExpandComponent extends BaseComponent<UniExpandOptions> {
2043
2141
  * `duration`, so the classes stay static while timing tracks the theme and
2044
2142
  * the content's size through signals alone.
2045
2143
  */
2046
- expandAnimation: string;
2047
- collapseAnimation: string;
2144
+ expandAnimation: _angular_core.Signal<string>;
2145
+ collapseAnimation: _angular_core.Signal<string>;
2048
2146
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniExpandComponent, never>;
2049
2147
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniExpandComponent, "uni-expand", never, { "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "transitionSpeed": { "alias": "transitionSpeed"; "required": false; "isSignal": true; }; }, { "collapsed": "collapsedChange"; }, never, ["*"], true, never>;
2050
2148
  }
@@ -2073,7 +2171,9 @@ declare class UniExpandToggleComponent {
2073
2171
  * region is size-scaled or overridden per instance.
2074
2172
  */
2075
2173
  transitionSpeed: _angular_core.InputSignal<number>;
2076
- /** Fallback clock when no `transitionSpeed` is bound: the `expand` theme options' `transitionSpeed`. */
2174
+ /** Fallback clock when no `transitionSpeed` is bound: the `expand` entry's
2175
+ motion token — the same one the region itself reads. */
2176
+ private readonly themeService;
2077
2177
  private readonly expandOptions;
2078
2178
  private readonly speed;
2079
2179
  /**
@@ -2176,6 +2276,54 @@ declare class UniDebounceInputComponent {
2176
2276
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDebounceInputComponent, "uni-debounce-input", never, { "inputName": { "alias": "inputName"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "debounceTime": { "alias": "debounceTime"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "role": { "alias": "role"; "required": false; "isSignal": true; }; "ariaExpanded": { "alias": "ariaExpanded"; "required": false; "isSignal": true; }; "ariaControls": { "alias": "ariaControls"; "required": false; "isSignal": true; }; "ariaActivedescendant": { "alias": "ariaActivedescendant"; "required": false; "isSignal": true; }; }, { "change": "change"; }, never, ["[pre-input]", "[post-input]"], true, never>;
2177
2277
  }
2178
2278
 
2279
+ /**
2280
+ * Whether the browser can keep a top-layer popup attached to its field.
2281
+ *
2282
+ * The top layer and anchor positioning must be adopted together, and support
2283
+ * for them does not arrive together: Safari shipped `popover` in 17 but
2284
+ * `position-anchor` only in 26. Promoting the popup without anchor support
2285
+ * would strand it — a top-layer element has no positioned ancestor, so the
2286
+ * fallback's `position: absolute; top: 100%` would resolve against the
2287
+ * viewport and drop the list a full screen height down the page. So the
2288
+ * `popover` attribute is gated on this too, not just the anchored CSS.
2289
+ *
2290
+ * Undefined `CSS` (jsdom) reads as unsupported, which is also what keeps the
2291
+ * popup in the normal flow — and the component specs unchanged — under test.
2292
+ */
2293
+ declare const supportsAnchoredPopup: () => boolean;
2294
+ /** `popover` attribute value for a listbox popup, or null where unsupported.
2295
+ Always `manual`: these controls already own dismissal (focusout, Escape,
2296
+ commit), and `auto`'s light-dismiss fires on pointerdown outside the
2297
+ popup — which includes their own field, closing the list behind the
2298
+ component's back on every click into the input. */
2299
+ declare const listboxPopupAttr: () => "manual" | null;
2300
+ /**
2301
+ * A document-unique `anchor-name`, plus the style fragment that puts it on the
2302
+ * field wrapper. Spread `style` into the wrapper's `css()` and pass `name` to
2303
+ * {@link listboxPopupStyles}.
2304
+ */
2305
+ declare function newListboxAnchor(): {
2306
+ name: string;
2307
+ style: CSSObject;
2308
+ };
2309
+ /**
2310
+ * Shows the popup in the top layer as soon as it renders, and scales its
2311
+ * entry animation out of the edge it actually opened from.
2312
+ *
2313
+ * The popups are `@if`-rendered, and a `popover` element is `display: none`
2314
+ * until `showPopover()` runs — so appearing in the DOM is not enough. Runs on
2315
+ * every render pass; `showPopover()` on an already-open popup throws, which is
2316
+ * the cheapest way to ask "is it open?".
2317
+ *
2318
+ * The origin is measured rather than assumed: `position-try-fallbacks` may
2319
+ * have flipped the popup above its field near the bottom of the viewport, and
2320
+ * the static `top center` would then grow it from the wrong edge. Measuring
2321
+ * forces layout, so it lands before the first frame of the transition.
2322
+ *
2323
+ * Call from an injection context (a field initializer or the constructor);
2324
+ * the component's host element is the anchor.
2325
+ */
2326
+ declare function promoteListboxPopup(ref: Signal<ElementRef<HTMLElement> | undefined>): void;
2179
2327
  /**
2180
2328
  * The theme options every listbox popup shares — the "list trio" plus the
2181
2329
  * active-option fill. Component option interfaces (searchInput, tagInput,
@@ -2192,11 +2340,14 @@ interface UniListboxPopupOptions {
2192
2340
  /** Active/hover option fill; the on-color pair is derived. Must contrast
2193
2341
  with `listColor` or keyboard navigation turns invisible. */
2194
2342
  activeColor?: ColorKey;
2343
+ /** Named motion primitive for the open animation. Defaults to `popup`, the
2344
+ same token `uni-dropdown` uses, so every panel in a form opens alike. */
2345
+ motion?: Motion;
2195
2346
  }
2196
2347
  /**
2197
- * Style block for the popup behind every `ListboxNavigation` consumer: an
2198
- * absolutely-positioned `ul[role="listbox"]` under a `position: relative`
2199
- * field wrapper, with the shared option chrome and active/hover highlight.
2348
+ * Style block for the popup behind every `ListboxNavigation` consumer: a
2349
+ * `ul[role="listbox"]` under its field wrapper, with the shared option chrome
2350
+ * and active/hover highlight.
2200
2351
  *
2201
2352
  * Extracted because four components (`uni-search-input`, `uni-tag-input`,
2202
2353
  * `uni-time-input`, `uni-combobox`) carried hand-rolled copies, and the parts
@@ -2204,12 +2355,19 @@ interface UniListboxPopupOptions {
2204
2355
  * trio, and the `activeColor` pair that themes re-point when their container
2205
2356
  * tokens don't contrast (see the Wellsourced overrides).
2206
2357
  *
2358
+ * Pass `anchor` (from {@link newListboxAnchor}) to get the top-layer
2359
+ * positioning where the browser supports it. Without it — or on a browser that
2360
+ * lacks anchor positioning — the popup stays absolutely positioned under a
2361
+ * `position: relative` wrapper, which clips inside `overflow: hidden`
2362
+ * ancestors but at least stays on its field.
2363
+ *
2207
2364
  * Compose extras with the array form — `css([listboxPopupStyles(…), {…}])` —
2208
2365
  * so a component's own `& [role="option"]` block cascades after this one
2209
2366
  * instead of replacing it (an object spread would overwrite the key).
2210
2367
  */
2211
- declare const listboxPopupStyles: (theme: ThemeService, options: UniListboxPopupOptions, { maxHeight }?: {
2368
+ declare const listboxPopupStyles: (theme: ThemeService, options: UniListboxPopupOptions, { maxHeight, anchor }?: {
2212
2369
  maxHeight?: number;
2370
+ anchor?: string;
2213
2371
  }) => CSSObject;
2214
2372
 
2215
2373
  declare class UniIconComponent {
@@ -2298,7 +2456,11 @@ interface UniInputBoxOptions {
2298
2456
  border: Border;
2299
2457
  errorBorder: Border;
2300
2458
  borderRadius: Radius;
2301
- transitionSpeed: number;
2459
+ /**
2460
+ * @deprecated Never read by `uni-input-box` — setting it has no effect and
2461
+ * never had. Optional now, removed next major.
2462
+ */
2463
+ transitionSpeed?: number;
2302
2464
  shadow?: Shadow;
2303
2465
  errorShadow?: Shadow;
2304
2466
  height?: string | number;
@@ -2514,7 +2676,15 @@ interface UniMenuItemOptions {
2514
2676
  hoverColor?: ContainerColorToken;
2515
2677
  /** Trailing symbol marking the active item; undefined/'' renders none. */
2516
2678
  activeSymbol?: string;
2517
- /** Hover/focus transition in seconds; 0 switches instantly. */
2679
+ /** Named motion primitive for the hover/focus fill. Defaults to `control`;
2680
+ omit both this and `transitionSpeed` for no transition at all. */
2681
+ motion?: Motion;
2682
+ /**
2683
+ * Hover/focus transition in seconds; 0 switches instantly.
2684
+ *
2685
+ * @deprecated Use `motion` and retime the `control` token instead. Still
2686
+ * honoured when set, and wins over `motion`. Removed next major.
2687
+ */
2518
2688
  transitionSpeed?: number;
2519
2689
  }
2520
2690
 
@@ -2577,6 +2747,7 @@ declare class UniMultiSelectComponent<T = unknown> {
2577
2747
  protected readonly optionsWithSelections: _angular_core.Signal<Option<T>[]>;
2578
2748
  protected readonly className: string;
2579
2749
  handleCheck(checked: boolean, value: T): void;
2750
+ /** Selects every *enabled* option — a disabled option is not committable. */
2580
2751
  selectAll(): void;
2581
2752
  deselectAll(): void;
2582
2753
  optionWrapper: string;
@@ -2630,6 +2801,10 @@ declare class UniMultiSelectDropdownComponent<T = unknown> extends BaseComponent
2630
2801
  * arithmetic — wrapping, Home/End, and never pointing past a list the
2631
2802
  * filter has narrowed — the same contract `uni-search-input` and
2632
2803
  * `uni-tag-input` use, so the keys behave identically across all three.
2804
+ *
2805
+ * `disabled` indexes into `filteredOptions`, matching `count`: arrows step
2806
+ * over disabled rows and Home/End land on the nearest enabled one, so the
2807
+ * focus target is always a checkbox that can actually take focus.
2633
2808
  */
2634
2809
  protected readonly list: _uni_design_system_uni_angular.ListboxNavigation;
2635
2810
  /** Announced with the selection so the count is not left to guesswork. */
@@ -2648,6 +2823,11 @@ declare class UniMultiSelectDropdownComponent<T = unknown> extends BaseComponent
2648
2823
  protected onPanelKeydown(event: KeyboardEvent): void;
2649
2824
  /** Keeps the active index in step when focus lands on a row by pointer. */
2650
2825
  protected onOptionFocus(index: number): void;
2826
+ /**
2827
+ * Selects every *enabled* option. A disabled option is not committable, so
2828
+ * "select all" must not commit one on the user's behalf — the same rule
2829
+ * `toggleOption` and the keyboard path follow.
2830
+ */
2651
2831
  selectAll(): void;
2652
2832
  deselectAll(): void;
2653
2833
  protected isOptionSelected(option: Option<T>): _angular_core.Signal<boolean>;
@@ -2686,7 +2866,16 @@ declare class UniNotificationBadgeComponent extends BaseComponent<UniNotificatio
2686
2866
  interface UniAlertOptions {
2687
2867
  defaultVariant: Variant;
2688
2868
  borderRadius: Radius;
2689
- transitionSpeed: number;
2869
+ /** Named motion primitive for the enter/leave transition. Defaults to
2870
+ `notification`. */
2871
+ motion?: Motion;
2872
+ /**
2873
+ * Enter/leave transition in seconds.
2874
+ *
2875
+ * @deprecated Use `motion` and retime the `notification` token instead.
2876
+ * Still honoured when set, and wins over `motion`. Removed next major.
2877
+ */
2878
+ transitionSpeed?: number;
2690
2879
  topPosition: string | number;
2691
2880
  elevation: Elevation;
2692
2881
  }
@@ -2700,6 +2889,11 @@ declare class UniAlertComponent extends BaseComponent<UniAlertOptions> implement
2700
2889
  alertRef?: ElementRef<HTMLDialogElement>;
2701
2890
  private readonly alertState;
2702
2891
  private readonly effectiveVariant;
2892
+ /**
2893
+ * Timing for the enter/leave transition. The deprecated `transitionSpeed`
2894
+ * (seconds) wins when a theme still sets it.
2895
+ */
2896
+ protected readonly motion: _angular_core.Signal<_uni_design_system_uni_core.MotionToken>;
2703
2897
  protected readonly alertClass: _angular_core.Signal<string>;
2704
2898
  private readonly fadeOut;
2705
2899
  constructor();
@@ -2740,7 +2934,16 @@ declare class NotificationsComponent {
2740
2934
 
2741
2935
  interface UniSnackbarOptions {
2742
2936
  bottomPosition: number;
2743
- transitionDelay: string;
2937
+ /** Named motion primitive for the enter/leave transition. Defaults to
2938
+ `notification`. */
2939
+ motion?: Motion;
2940
+ /**
2941
+ * Transition duration as a CSS time, e.g. `'0.35s'`.
2942
+ *
2943
+ * @deprecated Use `motion` and retime the `notification` token instead.
2944
+ * Still honoured when set, and wins over `motion`. Removed next major.
2945
+ */
2946
+ transitionDelay?: string;
2744
2947
  autoCloseDelay: number;
2745
2948
  }
2746
2949
 
@@ -2767,12 +2970,20 @@ declare class UniSnackbarComponent extends BaseComponent<UniSnackbarOptions> imp
2767
2970
  snackbarRef: _angular_core.Signal<ElementRef<any>>;
2768
2971
  private get _snackbar();
2769
2972
  constructor();
2973
+ /**
2974
+ * Timing for the enter/leave transition. The deprecated `transitionDelay`
2975
+ * wins when a theme still sets it — it is a CSS time string, so `0.35s` and
2976
+ * `350ms` both parse back to milliseconds.
2977
+ */
2978
+ protected readonly motion: _angular_core.Signal<_uni_design_system_uni_core.MotionToken>;
2770
2979
  protected readonly snackbarClass: _angular_core.Signal<string>;
2771
2980
  fadeOut: string;
2772
2981
  ngAfterViewInit(): void;
2773
2982
  private get _timeout();
2774
2983
  open(): void;
2775
2984
  close(): void;
2985
+ /** Drops out of the top layer. Called once the closing fade has run. */
2986
+ private hide;
2776
2987
  protected pauseTimer(): void;
2777
2988
  protected resumeTimer(): void;
2778
2989
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniSnackbarComponent, never>;
@@ -2833,7 +3044,8 @@ interface UniPopoverOptions {
2833
3044
  /** Hover open delay in tooltip mode, ms. */
2834
3045
  tooltipOpenDelay: number;
2835
3046
  /** Pointer-leave close delay in tooltip mode, ms. */
2836
- tooltipCloseDelay: number;
3047
+ tooltipCloseDelay: number; /** Named motion primitive for the open/close animation. */
3048
+ motion: Motion;
2837
3049
  }
2838
3050
 
2839
3051
  /**
@@ -2986,9 +3198,14 @@ interface UniRadioOptions {
2986
3198
  ringColor?: ColorKey;
2987
3199
  /** Circle background token. */
2988
3200
  fillColor?: ColorKey;
3201
+ /** Named motion primitive for the dot's grow/retract and the ring's color
3202
+ change. Defaults to `control`; a token with `duration: 0` is instant. */
3203
+ motion?: Motion;
2989
3204
  /**
2990
- * Seconds for the dot's grow/retract and the ring's color change
2991
- * (default 0.3, matching menuItem/expand). 0 switches instantly.
3205
+ * Seconds for the dot's grow/retract and the ring's color change.
3206
+ *
3207
+ * @deprecated Use `motion` and retime the `control` token instead. Still
3208
+ * honoured when set, and wins over `motion`. Removed next major.
2992
3209
  */
2993
3210
  transitionSpeed?: number;
2994
3211
  }
@@ -3085,7 +3302,9 @@ interface UniSearchInputOptions {
3085
3302
  /** Suggestion list radius token. */
3086
3303
  listBorderRadius?: Radius;
3087
3304
  /** Cap on rendered suggestions. */
3088
- maxSuggestions?: number;
3305
+ maxSuggestions?: number; /** Named motion primitive for the suggestion popup's open animation.
3306
+ Defaults to `popup` — the token `uni-dropdown` uses. */
3307
+ motion?: Motion;
3089
3308
  }
3090
3309
 
3091
3310
  /**
@@ -3110,6 +3329,12 @@ declare class UniSearchInputComponent extends BaseComponent<UniSearchInputOption
3110
3329
  search: _angular_core.OutputEmitterRef<string>;
3111
3330
  suggestionSelected: _angular_core.OutputEmitterRef<string>;
3112
3331
  protected readonly field: _angular_core.Signal<UniDebounceInputComponent>;
3332
+ private readonly listRef;
3333
+ /** Ties the popup to the field so the browser tracks it in the top layer. */
3334
+ private readonly anchor;
3335
+ /** `manual` where the top layer is usable, else null — see the popup helper. */
3336
+ protected readonly popupAttr: "manual";
3337
+ constructor();
3113
3338
  protected readonly visibleSuggestions: _angular_core.Signal<string[]>;
3114
3339
  /** Shared combobox bookkeeping: open state, active option, ARIA ids. */
3115
3340
  protected readonly list: _uni_design_system_uni_angular.ListboxNavigation;
@@ -3168,6 +3393,8 @@ declare class UniSelectComponent<T> implements FormValueControl<T | null> {
3168
3393
 
3169
3394
  /** Placeholder geometry: a text line block, a rectangle, or a circle. */
3170
3395
  type SkeletonShape = 'text' | 'rect' | 'circle';
3396
+ /** Direction the shimmer band travels across a block. */
3397
+ type SkeletonSweepDirection = 'ltr' | 'rtl';
3171
3398
  /** Theme-level options for `uni-skeleton`, resolved by token name. */
3172
3399
  interface UniSkeletonOptions {
3173
3400
  /** Base placeholder color. */
@@ -3180,6 +3407,10 @@ interface UniSkeletonOptions {
3180
3407
  animation?: 'shimmer' | 'none';
3181
3408
  /** Shimmer sweep duration in seconds. */
3182
3409
  duration?: number;
3410
+ /** Direction the shimmer band travels. Default: 'ltr'. */
3411
+ direction?: SkeletonSweepDirection;
3412
+ /** Shimmer band width as a percentage of the block. Default: 40. */
3413
+ highlightWidth?: number;
3183
3414
  /** Vertical gap between text lines, as a spacing token. */
3184
3415
  gap?: OptionalSize;
3185
3416
  }
@@ -3189,6 +3420,11 @@ interface UniSkeletonOptions {
3189
3420
  * lines (the last line shortened, as real text would be), `rect` and `circle`
3190
3421
  * render fixed shapes. The shimmer only animates when the user allows motion;
3191
3422
  * it degrades to static blocks under `prefers-reduced-motion`.
3423
+ *
3424
+ * Color and radius are theme options with per-instance overrides, because one
3425
+ * app routinely needs several: skeletons on a card and on the page background
3426
+ * want different tints, and a pill placeholder wants a different corner than
3427
+ * the text bars beside it.
3192
3428
  */
3193
3429
  declare class UniSkeletonComponent extends BaseComponent<UniSkeletonOptions> {
3194
3430
  shape: _angular_core.InputSignal<SkeletonShape>;
@@ -3198,13 +3434,31 @@ declare class UniSkeletonComponent extends BaseComponent<UniSkeletonOptions> {
3198
3434
  height: _angular_core.InputSignal<string | number>;
3199
3435
  /** Number of text lines (text shape only). */
3200
3436
  lines: _angular_core.InputSignal<number>;
3437
+ /** Base color token; overrides the theme option for this skeleton. */
3438
+ color: _angular_core.InputSignal<string>;
3439
+ /** Shimmer highlight token; overrides the theme option for this skeleton. */
3440
+ highlightColor: _angular_core.InputSignal<string>;
3441
+ /** Radius token; overrides the theme option. Circles are always round. */
3442
+ borderRadius: _angular_core.InputSignal<string>;
3443
+ /**
3444
+ * Announces the skeleton to assistive tech as a polite status. Leave unset
3445
+ * when a container already carries `aria-busy` — the skeleton then stays
3446
+ * `aria-hidden`, as a decorative placeholder should.
3447
+ */
3448
+ label: _angular_core.InputSignal<string>;
3449
+ protected readonly srOnly: string;
3201
3450
  private readonly cssSize;
3202
3451
  protected readonly resolvedHeight: _angular_core.Signal<string>;
3203
3452
  protected readonly lineWidths: _angular_core.Signal<string[]>;
3453
+ /**
3454
+ * The band is `bandWidth`% of the block, so it clears the block after
3455
+ * travelling `100 / bandWidth` of its own width — the offsets below are
3456
+ * percentages of the band, not of the block.
3457
+ */
3204
3458
  private readonly sweep;
3205
3459
  protected readonly className: _angular_core.Signal<string>;
3206
3460
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniSkeletonComponent, never>;
3207
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniSkeletonComponent, "uni-skeleton", never, { "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "lines": { "alias": "lines"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3461
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniSkeletonComponent, "uni-skeleton", never, { "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "lines": { "alias": "lines"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "highlightColor": { "alias": "highlightColor"; "required": false; "isSignal": true; }; "borderRadius": { "alias": "borderRadius"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3208
3462
  }
3209
3463
 
3210
3464
  /** Theme-level options for `uni-slider`, resolved by token name. */
@@ -3585,7 +3839,9 @@ interface UniTagInputOptions {
3585
3839
  /** Active/hover suggestion fill; the on-color pair is derived. Must
3586
3840
  contrast with `listColor` or keyboard navigation turns invisible. */
3587
3841
  activeColor?: ContainerColorToken;
3588
- maxSuggestions?: number;
3842
+ maxSuggestions?: number; /** Named motion primitive for the suggestion popup's open animation.
3843
+ Defaults to `popup` — the token `uni-dropdown` uses. */
3844
+ motion?: Motion;
3589
3845
  }
3590
3846
 
3591
3847
  declare class UniTagInputComponent extends BaseComponent<UniTagInputOptions> implements FormValueControl<UniTagItem[]> {
@@ -3619,12 +3875,18 @@ declare class UniTagInputComponent extends BaseComponent<UniTagInputOptions> imp
3619
3875
  rejected: _angular_core.OutputEmitterRef<UniTagRejection>;
3620
3876
  private readonly inputRef;
3621
3877
  private readonly chipRefs;
3878
+ private readonly listRef;
3879
+ /** Ties the popup to the field so the browser tracks it in the top layer. */
3880
+ private readonly anchor;
3881
+ /** `manual` where the top layer is usable, else null — see the popup helper. */
3882
+ protected readonly popupAttr: "manual";
3883
+ constructor();
3622
3884
  /** Uncommitted text in the field. */
3623
3885
  protected readonly draft: _angular_core.WritableSignal<string>;
3624
3886
  /** Index of the focused chip, or -1 when focus is in the text input. */
3625
3887
  protected readonly focusedChip: _angular_core.WritableSignal<number>;
3626
- /** Announcement for the status region; add/remove are otherwise silent. */
3627
- protected readonly announcement: _angular_core.WritableSignal<string>;
3888
+ /** Adds, removes and refusals are otherwise silent to a screen reader. */
3889
+ protected readonly announcer: _uni_design_system_uni_angular.Announcer;
3628
3890
  protected readonly hintId: string;
3629
3891
  protected readonly srOnly: string;
3630
3892
  private queryTimer?;
@@ -3646,7 +3908,6 @@ declare class UniTagInputComponent extends BaseComponent<UniTagInputOptions> imp
3646
3908
  private reject;
3647
3909
  protected removeAt(index: number, focus?: 'left' | 'right' | 'input'): void;
3648
3910
  private countNoun;
3649
- private announce;
3650
3911
  protected focusInput(): void;
3651
3912
  private focusChip;
3652
3913
  protected onInputKeydown(event: KeyboardEvent): void;
@@ -3660,7 +3921,11 @@ declare class UniTagInputComponent extends BaseComponent<UniTagInputOptions> imp
3660
3921
  protected selectSuggestion(suggestion: UniTagSuggestion): void;
3661
3922
  private commitDraft;
3662
3923
  private setDraft;
3924
+ /** The host is the popup's anchor — the box the list mirrors the width of,
3925
+ and the one its entry animation is measured against. The wrapper below
3926
+ has the same geometry but is only the fallback's positioning context. */
3663
3927
  protected readonly className: _angular_core.Signal<string>;
3928
+ protected readonly wrapperClass: _angular_core.Signal<string>;
3664
3929
  protected readonly fieldClass: _angular_core.Signal<string>;
3665
3930
  protected readonly inputClass: _angular_core.Signal<string>;
3666
3931
  protected readonly listClass: _angular_core.Signal<string>;
@@ -3812,7 +4077,9 @@ interface UniTimeInputOptions {
3812
4077
  /** Active/hover option fill; the on-color pair is derived. Must contrast
3813
4078
  with `listColor` or keyboard navigation turns invisible. */
3814
4079
  activeColor?: ContainerColorToken;
3815
- maxVisibleOptions?: number;
4080
+ maxVisibleOptions?: number; /** Named motion primitive for the suggestion popup's open animation.
4081
+ Defaults to `popup` — the token `uni-dropdown` uses. */
4082
+ motion?: Motion;
3816
4083
  }
3817
4084
 
3818
4085
  /**
@@ -3855,10 +4122,16 @@ declare class UniTimeInputComponent extends BaseComponent<UniTimeInputOptions> i
3855
4122
  private readonly host;
3856
4123
  private readonly inputRef;
3857
4124
  private readonly listRef;
4125
+ /** Ties the popup to the field so the browser tracks it in the top layer. */
4126
+ private readonly anchor;
4127
+ /** `manual` where the top layer is usable, else null — see the popup helper. */
4128
+ protected readonly popupAttr: "manual";
4129
+ constructor();
3858
4130
  protected readonly srOnly: string;
3859
4131
  /** A refused commit — styles the field and sets aria-invalid until edited. */
3860
4132
  protected readonly draftInvalid: _angular_core.WritableSignal<boolean>;
3861
- protected readonly announcement: _angular_core.WritableSignal<string>;
4133
+ /** Commits, clears and refusals are otherwise silent to a screen reader. */
4134
+ protected readonly announcer: _uni_design_system_uni_angular.Announcer;
3862
4135
  protected readonly resolvedLocale: _angular_core.Signal<string>;
3863
4136
  protected readonly resolvedHour12: _angular_core.Signal<boolean>;
3864
4137
  /** The listed times: pinned `slots` verbatim, else the generated step grid. */
@@ -3884,7 +4157,6 @@ declare class UniTimeInputComponent extends BaseComponent<UniTimeInputOptions> i
3884
4157
  private scrollToActive;
3885
4158
  private scrollToIndex;
3886
4159
  private setFieldText;
3887
- private announce;
3888
4160
  protected readonly className: _angular_core.Signal<string>;
3889
4161
  protected readonly rowClass: _angular_core.Signal<string>;
3890
4162
  protected readonly inputClass: _angular_core.Signal<string>;
@@ -4049,7 +4321,9 @@ declare class UniTourComponent extends BaseComponent<UniTourOptions> {
4049
4321
  }>;
4050
4322
  protected readonly calloutOpen: _angular_core.WritableSignal<boolean>;
4051
4323
  protected readonly satisfied: _angular_core.WritableSignal<boolean>;
4052
- protected readonly announcement: _angular_core.WritableSignal<string>;
4324
+ /** Repeats must still be heard: the same gate message can come round
4325
+ again on a later step. */
4326
+ protected readonly announcer: _uni_design_system_uni_angular.Announcer;
4053
4327
  protected readonly resolvedTarget: _angular_core.WritableSignal<HTMLElement>;
4054
4328
  private readonly presentedIndex;
4055
4329
  private gateCleanup;
@@ -4103,5 +4377,5 @@ declare class DragAndDropDirective {
4103
4377
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DragAndDropDirective, "[uni-drag-n-drop], [dragAndDrop]", never, {}, { "onFileDropped": "onFileDropped"; }, never, never, true, never>;
4104
4378
  }
4105
4379
 
4106
- export { BodyRenderDirective, ConfirmationDialogComponent, DragAndDropDirective, FOCUSABLE_SELECTOR, ListboxNavigation, LocalStorageService, NotificationService, NotificationsComponent, RippleDirective, TRANSFORM_ORIGINS, ThemeService, UNI_THEMES, UniAlertComponent, UniAppBarComponent, UniAvatarComponent, UniAvatarGroupComponent, UniBackgroundComponent, UniBadgeComponent, UniBaseDatasource, UniBoxComponent, UniBreadcrumbComponent, UniButtonComponent, UniButtonGroupComponent, UniCalendarComponent, UniCalloutComponent, UniCardComponent, UniCardContentComponent, UniCardHeaderComponent, UniCenterComponent, UniCheckboxComponent, UniComboboxComponent, UniDataSearchComponent, UniDataTableComponent, UniDateInputComponent, UniDateTimeInputComponent, UniDebounceInputComponent, UniDialogButtonsComponent, UniDialogComponent, UniDialogHeaderComponent, UniDividerComponent, UniDrawerComponent, UniDropdownComponent, UniExpandAreaComponent, UniExpandComponent, UniExpandToggleComponent, UniFileDropZoneComponent, UniGridAreaComponent, UniGridComponent, UniIconButtonComponent, UniIconComponent, UniInputBoxComponent, UniInputComponent, UniJsonViewComponent, UniMenuComponent, UniMultiSelectComponent, UniMultiSelectDropdownComponent, UniNotificationBadgeComponent, UniPaginatorComponent, UniPopoverComponent, UniProgressBarComponent, UniProgressGaugeComponent, UniRadioComponent, UniRecordDatasource, UniRowComponent, UniScrollAreaComponent, UniSearchInputComponent, UniSelectComponent, UniServerSideDatasource, UniSkeletonComponent, UniSliderComponent, UniSnackbarComponent, UniSortHeaderComponent, UniStackComponent, UniStatComponent, UniSymbolComponent, UniTabComponent, UniTabsComponent, UniTagComponent, UniTagInputComponent, UniTextComponent, UniTextareaComponent, UniThemeBuilderComponent, UniThemeSwitchComponent, UniTimeInputComponent, UniToggleComponent, UniTooltipComponent, UniTourComponent, UniWrapComponent, acceptableFile, addDays, addMonths, anchorArrowStyles, anchorStyles, buildMonthGrid, clearAnchorName, createListboxNavigation, dayOfWeek, daysInMonth, discreteOverlayTransition, focusableElements, formatDate, formatMonthHeading, formatTime, getFileExtension, inclusiveDayCount, isDivider, isToggleOpen, isValidDate, isoDate, joinDateTime, listboxPopupStyles, localeDatePlaceholder, localeDefaultHour12, localeFieldOrder, localeMonthNames, localeWeekStart, monthOf, motionSafe, newAnchorName, parseDateText, parseTimeText, resolveElement, resolveFocusTarget, restoreOverlayFocus, setAnchorName, splitDateTime, spotlightStyles, timeSlots, todayIso, transformOriginFor, uniqueId, useTimer, visuallyHidden, weekdayNames };
4107
- export type { Alert, AnchorOffset, AnchorRect, BrandPaletteConfig, BreadcrumbItem, ButtonGroupConfig, ButtonGroupItem, ColumnDefinition, Confirmation, DataLoader, DrawerMode, DrawerPosition, ImagePosition, ListboxNavigationConfig, MenuDivider, MenuItem, MenuItemWithLabel, MenuItemWithTemplate, Option, Options, PageRequest, PageResponse, Placement, ScrollbarAppearance, SkeletonShape, Snackbar, Sort, SortDirection, SpotlightOptions, SpotlightStyles, UniAppBarOptions, UniAvatarGroupOptions, UniAvatarOptions, UniBreadcrumbOptions, UniCalendarMarker, UniCalendarMode, UniCalendarOptions, UniCalendarValue, UniCalloutDismissal, UniCalloutOptions, UniCheckboxOptions, UniComboboxOptions, UniComboboxRejection, UniDataSearchOptions, UniDataTableOptions, UniDatasource, UniDate, UniDateInputOptions, UniDateInputRejection, UniDateRange, UniDateTime, UniDateTimeInputOptions, UniDrawerOptions, UniExpandOptions, UniInputBoxOptions, UniListboxPopupOptions, UniMenuItemOptions, UniMenuOptions, UniMonthGridCell, UniMultiSelectDropdownOptions, UniNotificationBadgeOptions, UniPaginatorOptions, UniPopoverOptions, UniRadioOption, UniRadioOptions, UniSearchInputOptions, UniSkeletonOptions, UniSliderOptions, UniStatOptions, UniTabsOptions, UniTagInputOptions, UniTagItem, UniTagOptions, UniTagRejection, UniTagSuggestion, UniTagValue, UniTextareaOptions, UniTime, UniTimeInputOptions, UniTimeInputRejection, UniToggleOptions, UniTourAdvance, UniTourOptions, UniTourStep, UniWeekdayName };
4380
+ export { BodyRenderDirective, ConfirmationDialogComponent, DragAndDropDirective, FOCUSABLE_SELECTOR, ListboxNavigation, LocalStorageService, NotificationService, NotificationsComponent, RippleDirective, TRANSFORM_ORIGINS, ThemeService, UNI_THEMES, UniAlertComponent, UniAppBarComponent, UniAvatarComponent, UniAvatarGroupComponent, UniBackgroundComponent, UniBadgeComponent, UniBaseDatasource, UniBoxComponent, UniBreadcrumbComponent, UniButtonComponent, UniButtonGroupComponent, UniCalendarComponent, UniCalloutComponent, UniCardComponent, UniCardContentComponent, UniCardHeaderComponent, UniCenterComponent, UniCheckboxComponent, UniComboboxComponent, UniDataSearchComponent, UniDataTableComponent, UniDateInputComponent, UniDateTimeInputComponent, UniDebounceInputComponent, UniDialogButtonsComponent, UniDialogComponent, UniDialogHeaderComponent, UniDividerComponent, UniDrawerComponent, UniDropdownComponent, UniExpandAreaComponent, UniExpandComponent, UniExpandToggleComponent, UniFileDropZoneComponent, UniGridAreaComponent, UniGridComponent, UniIconButtonComponent, UniIconComponent, UniInputBoxComponent, UniInputComponent, UniJsonViewComponent, UniMenuComponent, UniMultiSelectComponent, UniMultiSelectDropdownComponent, UniNotificationBadgeComponent, UniPaginatorComponent, UniPopoverComponent, UniProgressBarComponent, UniProgressGaugeComponent, UniRadioComponent, UniRecordDatasource, UniRowComponent, UniScrollAreaComponent, UniSearchInputComponent, UniSelectComponent, UniServerSideDatasource, UniSkeletonComponent, UniSliderComponent, UniSnackbarComponent, UniSortHeaderComponent, UniStackComponent, UniStatComponent, UniSymbolComponent, UniTabComponent, UniTabsComponent, UniTagComponent, UniTagInputComponent, UniTextComponent, UniTextareaComponent, UniThemeBuilderComponent, UniThemeSwitchComponent, UniTimeInputComponent, UniToggleComponent, UniTooltipComponent, UniTourComponent, UniWrapComponent, acceptableFile, addDays, addMonths, anchorArrowStyles, anchorStyles, buildMonthGrid, clearAnchorName, createAnnouncer, createListboxNavigation, dayOfWeek, daysInMonth, discreteOverlayTransition, focusableElements, formatDate, formatMonthHeading, formatTime, getFileExtension, inclusiveDayCount, isDivider, isToggleOpen, isValidDate, isoDate, joinDateTime, listboxPopupAttr, listboxPopupStyles, localeDatePlaceholder, localeDefaultHour12, localeFieldOrder, localeMonthNames, localeWeekStart, monthOf, motionSafe, newAnchorName, newListboxAnchor, parseDateText, parseTimeText, promoteListboxPopup, resolveElement, resolveFocusTarget, restoreOverlayFocus, setAnchorName, splitDateTime, spotlightStyles, supportsAnchoredPopup, timeSlots, todayIso, transformOriginFor, uniqueId, useTimer, visuallyHidden, weekdayNames };
4381
+ export type { Alert, AnchorOffset, AnchorRect, Announcer, BrandPaletteConfig, BreadcrumbItem, ButtonGroupConfig, ButtonGroupItem, ColumnDefinition, Confirmation, DataLoader, DrawerMode, DrawerPosition, ImagePosition, ListboxNavigationConfig, MenuDivider, MenuItem, MenuItemWithLabel, MenuItemWithTemplate, Option, Options, PageRequest, PageResponse, Placement, ScrollbarAppearance, SkeletonShape, SkeletonSweepDirection, Snackbar, Sort, SortDirection, SpotlightOptions, SpotlightStyles, UniAppBarOptions, UniAvatarGroupOptions, UniAvatarOptions, UniBreadcrumbOptions, UniCalendarMarker, UniCalendarMode, UniCalendarOptions, UniCalendarValue, UniCalloutDismissal, UniCalloutOptions, UniCheckboxOptions, UniComboboxOptions, UniComboboxRejection, UniDataSearchOptions, UniDataTableOptions, UniDatasource, UniDate, UniDateInputOptions, UniDateInputRejection, UniDateRange, UniDateTime, UniDateTimeInputOptions, UniDrawerOptions, UniExpandOptions, UniInputBoxOptions, UniListboxPopupOptions, UniMenuItemOptions, UniMenuOptions, UniMonthGridCell, UniMultiSelectDropdownOptions, UniNotificationBadgeOptions, UniPaginatorOptions, UniPopoverOptions, UniRadioOption, UniRadioOptions, UniSearchInputOptions, UniSkeletonOptions, UniSliderOptions, UniStatOptions, UniTabsOptions, UniTagInputOptions, UniTagItem, UniTagOptions, UniTagRejection, UniTagSuggestion, UniTagValue, UniTextareaOptions, UniTime, UniTimeInputOptions, UniTimeInputRejection, UniToggleOptions, UniTourAdvance, UniTourOptions, UniTourStep, UniWeekdayName };