@uni-design-system/uni-angular 8.3.0 → 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;
@@ -280,6 +331,28 @@ interface SpotlightStyles {
280
331
  * `position: fixed`).
281
332
  */
282
333
  declare function spotlightStyles(anchor: string, options?: SpotlightOptions): SpotlightStyles;
334
+ /** The rect fields the origin computation reads — satisfied by DOMRect. */
335
+ interface AnchorRect {
336
+ top: number;
337
+ right: number;
338
+ bottom: number;
339
+ left: number;
340
+ width: number;
341
+ height: number;
342
+ }
343
+ /**
344
+ * Transform origin for a panel's open/close scale animation, derived from
345
+ * where the panel **actually** rendered relative to its anchor — not from the
346
+ * requested placement. `position-try-fallbacks` lets the browser flip a panel
347
+ * at viewport edges, and a statically mapped origin then animates from the
348
+ * wrong corner (a `bottom-end` picker flipped above its field would still
349
+ * scale from `top right`). Measure after the popover is shown and apply the
350
+ * result as an inline style.
351
+ *
352
+ * Returns keyword pairs like `'top right'` / `'bottom center'`, or `null`
353
+ * when the panel has no box yet (e.g. `display: none`, or jsdom).
354
+ */
355
+ declare function transformOriginFor(panel: AnchorRect, trigger: AnchorRect): string | null;
283
356
 
284
357
  /** Placement → `transform-origin`, so scale animations grow from the anchor. */
285
358
  declare const TRANSFORM_ORIGINS: Record<Placement, string>;
@@ -300,8 +373,14 @@ declare function isToggleOpen(event: Event): boolean;
300
373
  * top layer: `transition-behavior: allow-discrete` over the `hidden` keys plus
301
374
  * `display`/`overlay`, the shown state under `:popover-open`, and
302
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.
303
382
  */
304
- 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>;
305
384
  /**
306
385
  * Returns focus to `target` when an overlay closes while focus was inside its
307
386
  * panel (or was dropped on `<body>` by the top layer closing), so keyboard
@@ -540,6 +619,7 @@ declare class ThemeService {
540
619
  borders: Signal<Partial<Record<string, string>>>;
541
620
  shadows: Signal<Partial<Record<string, string>>>;
542
621
  icons: Signal<_uni_design_system_uni_core.Icons>;
622
+ motions: Signal<Partial<Record<string, MotionToken>>>;
543
623
  constructor();
544
624
  /**
545
625
  * Activate a registered theme. Returns false — touching nothing, persisting
@@ -632,6 +712,12 @@ declare class ThemeService {
632
712
  colorPalette: () => Partial<Record<string, string>>;
633
713
  color(color?: ColorKey): NullableStyleExpression;
634
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;
635
721
  radius(size: Radius | undefined): NullableStyleExpression;
636
722
  getRadiusLeft(size: Radius | undefined): NullableStyleExpression;
637
723
  getRadiusRight(size: Radius | undefined): NullableStyleExpression;
@@ -994,7 +1080,8 @@ declare class UniCalendarComponent extends BaseComponent<UniCalendarOptions> imp
994
1080
  /** Hover/focus candidate painting the preview band while a range is pending. */
995
1081
  protected readonly previewDate: _angular_core.WritableSignal<string>;
996
1082
  /** Live-region text; selections are otherwise silent for a screen reader. */
997
- 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;
998
1085
  protected readonly resolvedLocale: _angular_core.Signal<string>;
999
1086
  protected readonly resolvedWeekStart: _angular_core.Signal<number>;
1000
1087
  /**
@@ -1040,7 +1127,6 @@ declare class UniCalendarComponent extends BaseComponent<UniCalendarOptions> imp
1040
1127
  private focusDay;
1041
1128
  private pickFocus;
1042
1129
  private firstEnabledInView;
1043
- private announce;
1044
1130
  private readonly daySize;
1045
1131
  protected readonly className: _angular_core.Signal<string>;
1046
1132
  protected readonly navClass: _angular_core.Signal<string>;
@@ -1096,7 +1182,16 @@ interface UniCalloutOptions {
1096
1182
  spotlightRadius: Radius;
1097
1183
  /** Spotlight ring width, px. */
1098
1184
  ringWidth: number;
1099
- 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;
1100
1195
  }
1101
1196
 
1102
1197
  /**
@@ -1178,6 +1273,12 @@ declare class UniCalloutComponent extends BaseComponent<UniCalloutOptions> {
1178
1273
  /** A stray click shouldn't kill onboarding: nudge the panel instead. */
1179
1274
  protected onBackdropClick(): void;
1180
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;
1181
1282
  protected readonly scrimClassName: _angular_core.Signal<string>;
1182
1283
  protected readonly windowClassName: _angular_core.Signal<string>;
1183
1284
  protected stripClassName(side: (typeof this.stripSides)[number]): string;
@@ -1221,6 +1322,10 @@ interface UniCardOptions {
1221
1322
  border?: Border;
1222
1323
  /** Optional elevation shadow token; cards are flat by default. */
1223
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
+ */
1224
1329
  transitionSpeed?: number;
1225
1330
  }
1226
1331
 
@@ -1298,7 +1403,9 @@ interface UniComboboxOptions {
1298
1403
  activeColor?: ContainerColorToken;
1299
1404
  /** Scroll height in rows — the list scrolls past this, never truncates. */
1300
1405
  maxVisibleOptions?: number;
1301
- 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;
1302
1409
  }
1303
1410
 
1304
1411
  /**
@@ -1354,9 +1461,14 @@ declare class UniComboboxComponent<T> extends BaseComponent<UniComboboxOptions>
1354
1461
  private readonly listRef;
1355
1462
  /** Cancelled on destroy — a late tick would emit on a destroyed OutputRef. */
1356
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";
1357
1468
  constructor();
1358
1469
  protected readonly srOnly: string;
1359
- 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;
1360
1472
  /** null → the field shows the committed label; a string is an uncommitted draft. */
1361
1473
  protected readonly draft: _angular_core.WritableSignal<string>;
1362
1474
  /**
@@ -1407,7 +1519,6 @@ declare class UniComboboxComponent<T> extends BaseComponent<UniComboboxOptions>
1407
1519
  private closeList;
1408
1520
  private scrollToActive;
1409
1521
  private setFieldText;
1410
- private announce;
1411
1522
  protected readonly className: _angular_core.Signal<string>;
1412
1523
  protected readonly rowClass: _angular_core.Signal<string>;
1413
1524
  protected readonly inputClass: _angular_core.Signal<string>;
@@ -1577,7 +1688,8 @@ declare class UniDateInputComponent extends BaseComponent<UniDateInputOptions> i
1577
1688
  protected readonly srOnly: string;
1578
1689
  /** A refused commit — styles the field and sets aria-invalid until edited. */
1579
1690
  protected readonly draftInvalid: _angular_core.WritableSignal<boolean>;
1580
- 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;
1581
1693
  protected readonly toggleElement: _angular_core.Signal<any>;
1582
1694
  protected readonly popupOpen: _angular_core.Signal<boolean>;
1583
1695
  protected readonly resolvedLocale: _angular_core.Signal<string>;
@@ -1603,7 +1715,6 @@ declare class UniDateInputComponent extends BaseComponent<UniDateInputOptions> i
1603
1715
  /** The popup is a focus-holding dialog: Tab cycles inside it (APG pattern). */
1604
1716
  protected onPopupKeydown(event: KeyboardEvent): void;
1605
1717
  private setFieldText;
1606
- private announce;
1607
1718
  protected readonly className: _angular_core.Signal<string>;
1608
1719
  protected readonly rowClass: _angular_core.Signal<string>;
1609
1720
  protected readonly inputClass: _angular_core.Signal<string>;
@@ -1884,12 +1995,13 @@ interface UniDropdownOptions {
1884
1995
  borderRadius: Radius;
1885
1996
  shadow: Shadow;
1886
1997
  color: ContainerColorToken;
1998
+ /** Named motion primitive for the open/close animation. */
1999
+ motion: Motion;
1887
2000
  }
1888
2001
 
1889
2002
  type AriaHasPopup = 'menu' | 'listbox' | 'dialog' | 'grid' | 'tree' | 'true';
1890
2003
  declare class UniDropdownComponent extends BaseComponent<UniDropdownOptions> implements OnInit, OnDestroy {
1891
2004
  private renderer;
1892
- private delay;
1893
2005
  showing: _angular_core.WritableSignal<boolean>;
1894
2006
  trigger: _angular_core.InputSignal<HTMLElement>;
1895
2007
  placement: _angular_core.InputSignal<Placement>;
@@ -1915,17 +2027,19 @@ declare class UniDropdownComponent extends BaseComponent<UniDropdownOptions> imp
1915
2027
  dropdownRef: ElementRef<HTMLDivElement>;
1916
2028
  private get _trigger();
1917
2029
  private get _dropdown();
1918
- private transformOriginMap;
1919
2030
  dropdownClass: _angular_core.Signal<string>;
1920
2031
  /** The element that receives focus and carries the ARIA popup state. */
1921
2032
  private get _focusTarget();
1922
2033
  ngOnInit(): void;
1923
2034
  /**
1924
- * Returns focus to the trigger when the popover closes while focus was
1925
- * inside it (or was dropped on <body> by the top layer closing), so
1926
- * keyboard users are never stranded (WCAG 2.4.3).
2035
+ * Scale the open/close animation from the corner touching the trigger,
2036
+ * wherever the browser actually placed the panel. The static
2037
+ * `TRANSFORM_ORIGINS` entry covers only the *requested* placement; with
2038
+ * `position-try-fallbacks` the panel may have flipped at a viewport edge,
2039
+ * and a `bottom-end` picker rendered above its field would otherwise still
2040
+ * animate from the top-right corner.
1927
2041
  */
1928
- private restoreFocus;
2042
+ private syncTransformOrigin;
1929
2043
  toggleDropdown(): void;
1930
2044
  hideDropdown(): void;
1931
2045
  ngOnDestroy(): void;
@@ -1936,13 +2050,20 @@ declare class UniDropdownComponent extends BaseComponent<UniDropdownOptions> imp
1936
2050
  /** Theme-level options for `uni-expand`. */
1937
2051
  interface UniExpandOptions {
1938
2052
  /**
1939
- * Base reveal/collapse duration in seconds (matching alert/card
1940
- * `transitionSpeed`), lives in the `expand` theme options. The default
1941
- * theme uses `0.35`. This is the duration at a 240px-tall region; the
1942
- * actual duration scales with content height (√-of-height, clamped
1943
- * `expandDuration` in uni-core) so short regions stay snappy and tall
1944
- * ones aren't rushed. Also drives `uni-expand-toggle`'s chevron rotation
1945
- * 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.
1946
2067
  */
1947
2068
  transitionSpeed?: number;
1948
2069
  }
@@ -1986,6 +2107,14 @@ declare class UniExpandComponent extends BaseComponent<UniExpandOptions> {
1986
2107
  * (`[style.transition-duration]="expand.duration() + 's'"`).
1987
2108
  */
1988
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;
1989
2118
  protected readonly cssDuration: _angular_core.Signal<string>;
1990
2119
  /**
1991
2120
  * A custom element is `display: inline` by default, which would lay the
@@ -2012,8 +2141,8 @@ declare class UniExpandComponent extends BaseComponent<UniExpandOptions> {
2012
2141
  * `duration`, so the classes stay static while timing tracks the theme and
2013
2142
  * the content's size through signals alone.
2014
2143
  */
2015
- expandAnimation: string;
2016
- collapseAnimation: string;
2144
+ expandAnimation: _angular_core.Signal<string>;
2145
+ collapseAnimation: _angular_core.Signal<string>;
2017
2146
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniExpandComponent, never>;
2018
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>;
2019
2148
  }
@@ -2042,7 +2171,9 @@ declare class UniExpandToggleComponent {
2042
2171
  * region is size-scaled or overridden per instance.
2043
2172
  */
2044
2173
  transitionSpeed: _angular_core.InputSignal<number>;
2045
- /** 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;
2046
2177
  private readonly expandOptions;
2047
2178
  private readonly speed;
2048
2179
  /**
@@ -2145,6 +2276,54 @@ declare class UniDebounceInputComponent {
2145
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>;
2146
2277
  }
2147
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;
2148
2327
  /**
2149
2328
  * The theme options every listbox popup shares — the "list trio" plus the
2150
2329
  * active-option fill. Component option interfaces (searchInput, tagInput,
@@ -2161,11 +2340,14 @@ interface UniListboxPopupOptions {
2161
2340
  /** Active/hover option fill; the on-color pair is derived. Must contrast
2162
2341
  with `listColor` or keyboard navigation turns invisible. */
2163
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;
2164
2346
  }
2165
2347
  /**
2166
- * Style block for the popup behind every `ListboxNavigation` consumer: an
2167
- * absolutely-positioned `ul[role="listbox"]` under a `position: relative`
2168
- * 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.
2169
2351
  *
2170
2352
  * Extracted because four components (`uni-search-input`, `uni-tag-input`,
2171
2353
  * `uni-time-input`, `uni-combobox`) carried hand-rolled copies, and the parts
@@ -2173,12 +2355,19 @@ interface UniListboxPopupOptions {
2173
2355
  * trio, and the `activeColor` pair that themes re-point when their container
2174
2356
  * tokens don't contrast (see the Wellsourced overrides).
2175
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
+ *
2176
2364
  * Compose extras with the array form — `css([listboxPopupStyles(…), {…}])` —
2177
2365
  * so a component's own `& [role="option"]` block cascades after this one
2178
2366
  * instead of replacing it (an object spread would overwrite the key).
2179
2367
  */
2180
- declare const listboxPopupStyles: (theme: ThemeService, options: UniListboxPopupOptions, { maxHeight }?: {
2368
+ declare const listboxPopupStyles: (theme: ThemeService, options: UniListboxPopupOptions, { maxHeight, anchor }?: {
2181
2369
  maxHeight?: number;
2370
+ anchor?: string;
2182
2371
  }) => CSSObject;
2183
2372
 
2184
2373
  declare class UniIconComponent {
@@ -2267,7 +2456,11 @@ interface UniInputBoxOptions {
2267
2456
  border: Border;
2268
2457
  errorBorder: Border;
2269
2458
  borderRadius: Radius;
2270
- 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;
2271
2464
  shadow?: Shadow;
2272
2465
  errorShadow?: Shadow;
2273
2466
  height?: string | number;
@@ -2483,7 +2676,15 @@ interface UniMenuItemOptions {
2483
2676
  hoverColor?: ContainerColorToken;
2484
2677
  /** Trailing symbol marking the active item; undefined/'' renders none. */
2485
2678
  activeSymbol?: string;
2486
- /** 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
+ */
2487
2688
  transitionSpeed?: number;
2488
2689
  }
2489
2690
 
@@ -2546,6 +2747,7 @@ declare class UniMultiSelectComponent<T = unknown> {
2546
2747
  protected readonly optionsWithSelections: _angular_core.Signal<Option<T>[]>;
2547
2748
  protected readonly className: string;
2548
2749
  handleCheck(checked: boolean, value: T): void;
2750
+ /** Selects every *enabled* option — a disabled option is not committable. */
2549
2751
  selectAll(): void;
2550
2752
  deselectAll(): void;
2551
2753
  optionWrapper: string;
@@ -2599,6 +2801,10 @@ declare class UniMultiSelectDropdownComponent<T = unknown> extends BaseComponent
2599
2801
  * arithmetic — wrapping, Home/End, and never pointing past a list the
2600
2802
  * filter has narrowed — the same contract `uni-search-input` and
2601
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.
2602
2808
  */
2603
2809
  protected readonly list: _uni_design_system_uni_angular.ListboxNavigation;
2604
2810
  /** Announced with the selection so the count is not left to guesswork. */
@@ -2617,6 +2823,11 @@ declare class UniMultiSelectDropdownComponent<T = unknown> extends BaseComponent
2617
2823
  protected onPanelKeydown(event: KeyboardEvent): void;
2618
2824
  /** Keeps the active index in step when focus lands on a row by pointer. */
2619
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
+ */
2620
2831
  selectAll(): void;
2621
2832
  deselectAll(): void;
2622
2833
  protected isOptionSelected(option: Option<T>): _angular_core.Signal<boolean>;
@@ -2655,7 +2866,16 @@ declare class UniNotificationBadgeComponent extends BaseComponent<UniNotificatio
2655
2866
  interface UniAlertOptions {
2656
2867
  defaultVariant: Variant;
2657
2868
  borderRadius: Radius;
2658
- 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;
2659
2879
  topPosition: string | number;
2660
2880
  elevation: Elevation;
2661
2881
  }
@@ -2669,6 +2889,11 @@ declare class UniAlertComponent extends BaseComponent<UniAlertOptions> implement
2669
2889
  alertRef?: ElementRef<HTMLDialogElement>;
2670
2890
  private readonly alertState;
2671
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>;
2672
2897
  protected readonly alertClass: _angular_core.Signal<string>;
2673
2898
  private readonly fadeOut;
2674
2899
  constructor();
@@ -2709,7 +2934,16 @@ declare class NotificationsComponent {
2709
2934
 
2710
2935
  interface UniSnackbarOptions {
2711
2936
  bottomPosition: number;
2712
- 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;
2713
2947
  autoCloseDelay: number;
2714
2948
  }
2715
2949
 
@@ -2736,12 +2970,20 @@ declare class UniSnackbarComponent extends BaseComponent<UniSnackbarOptions> imp
2736
2970
  snackbarRef: _angular_core.Signal<ElementRef<any>>;
2737
2971
  private get _snackbar();
2738
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>;
2739
2979
  protected readonly snackbarClass: _angular_core.Signal<string>;
2740
2980
  fadeOut: string;
2741
2981
  ngAfterViewInit(): void;
2742
2982
  private get _timeout();
2743
2983
  open(): void;
2744
2984
  close(): void;
2985
+ /** Drops out of the top layer. Called once the closing fade has run. */
2986
+ private hide;
2745
2987
  protected pauseTimer(): void;
2746
2988
  protected resumeTimer(): void;
2747
2989
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniSnackbarComponent, never>;
@@ -2802,7 +3044,8 @@ interface UniPopoverOptions {
2802
3044
  /** Hover open delay in tooltip mode, ms. */
2803
3045
  tooltipOpenDelay: number;
2804
3046
  /** Pointer-leave close delay in tooltip mode, ms. */
2805
- tooltipCloseDelay: number;
3047
+ tooltipCloseDelay: number; /** Named motion primitive for the open/close animation. */
3048
+ motion: Motion;
2806
3049
  }
2807
3050
 
2808
3051
  /**
@@ -2955,9 +3198,14 @@ interface UniRadioOptions {
2955
3198
  ringColor?: ColorKey;
2956
3199
  /** Circle background token. */
2957
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;
2958
3204
  /**
2959
- * Seconds for the dot's grow/retract and the ring's color change
2960
- * (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.
2961
3209
  */
2962
3210
  transitionSpeed?: number;
2963
3211
  }
@@ -3054,7 +3302,9 @@ interface UniSearchInputOptions {
3054
3302
  /** Suggestion list radius token. */
3055
3303
  listBorderRadius?: Radius;
3056
3304
  /** Cap on rendered suggestions. */
3057
- 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;
3058
3308
  }
3059
3309
 
3060
3310
  /**
@@ -3079,6 +3329,12 @@ declare class UniSearchInputComponent extends BaseComponent<UniSearchInputOption
3079
3329
  search: _angular_core.OutputEmitterRef<string>;
3080
3330
  suggestionSelected: _angular_core.OutputEmitterRef<string>;
3081
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();
3082
3338
  protected readonly visibleSuggestions: _angular_core.Signal<string[]>;
3083
3339
  /** Shared combobox bookkeeping: open state, active option, ARIA ids. */
3084
3340
  protected readonly list: _uni_design_system_uni_angular.ListboxNavigation;
@@ -3137,6 +3393,8 @@ declare class UniSelectComponent<T> implements FormValueControl<T | null> {
3137
3393
 
3138
3394
  /** Placeholder geometry: a text line block, a rectangle, or a circle. */
3139
3395
  type SkeletonShape = 'text' | 'rect' | 'circle';
3396
+ /** Direction the shimmer band travels across a block. */
3397
+ type SkeletonSweepDirection = 'ltr' | 'rtl';
3140
3398
  /** Theme-level options for `uni-skeleton`, resolved by token name. */
3141
3399
  interface UniSkeletonOptions {
3142
3400
  /** Base placeholder color. */
@@ -3149,6 +3407,10 @@ interface UniSkeletonOptions {
3149
3407
  animation?: 'shimmer' | 'none';
3150
3408
  /** Shimmer sweep duration in seconds. */
3151
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;
3152
3414
  /** Vertical gap between text lines, as a spacing token. */
3153
3415
  gap?: OptionalSize;
3154
3416
  }
@@ -3158,6 +3420,11 @@ interface UniSkeletonOptions {
3158
3420
  * lines (the last line shortened, as real text would be), `rect` and `circle`
3159
3421
  * render fixed shapes. The shimmer only animates when the user allows motion;
3160
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.
3161
3428
  */
3162
3429
  declare class UniSkeletonComponent extends BaseComponent<UniSkeletonOptions> {
3163
3430
  shape: _angular_core.InputSignal<SkeletonShape>;
@@ -3167,13 +3434,31 @@ declare class UniSkeletonComponent extends BaseComponent<UniSkeletonOptions> {
3167
3434
  height: _angular_core.InputSignal<string | number>;
3168
3435
  /** Number of text lines (text shape only). */
3169
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;
3170
3450
  private readonly cssSize;
3171
3451
  protected readonly resolvedHeight: _angular_core.Signal<string>;
3172
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
+ */
3173
3458
  private readonly sweep;
3174
3459
  protected readonly className: _angular_core.Signal<string>;
3175
3460
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniSkeletonComponent, never>;
3176
- 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>;
3177
3462
  }
3178
3463
 
3179
3464
  /** Theme-level options for `uni-slider`, resolved by token name. */
@@ -3554,7 +3839,9 @@ interface UniTagInputOptions {
3554
3839
  /** Active/hover suggestion fill; the on-color pair is derived. Must
3555
3840
  contrast with `listColor` or keyboard navigation turns invisible. */
3556
3841
  activeColor?: ContainerColorToken;
3557
- 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;
3558
3845
  }
3559
3846
 
3560
3847
  declare class UniTagInputComponent extends BaseComponent<UniTagInputOptions> implements FormValueControl<UniTagItem[]> {
@@ -3588,12 +3875,18 @@ declare class UniTagInputComponent extends BaseComponent<UniTagInputOptions> imp
3588
3875
  rejected: _angular_core.OutputEmitterRef<UniTagRejection>;
3589
3876
  private readonly inputRef;
3590
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();
3591
3884
  /** Uncommitted text in the field. */
3592
3885
  protected readonly draft: _angular_core.WritableSignal<string>;
3593
3886
  /** Index of the focused chip, or -1 when focus is in the text input. */
3594
3887
  protected readonly focusedChip: _angular_core.WritableSignal<number>;
3595
- /** Announcement for the status region; add/remove are otherwise silent. */
3596
- 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;
3597
3890
  protected readonly hintId: string;
3598
3891
  protected readonly srOnly: string;
3599
3892
  private queryTimer?;
@@ -3615,7 +3908,6 @@ declare class UniTagInputComponent extends BaseComponent<UniTagInputOptions> imp
3615
3908
  private reject;
3616
3909
  protected removeAt(index: number, focus?: 'left' | 'right' | 'input'): void;
3617
3910
  private countNoun;
3618
- private announce;
3619
3911
  protected focusInput(): void;
3620
3912
  private focusChip;
3621
3913
  protected onInputKeydown(event: KeyboardEvent): void;
@@ -3629,7 +3921,11 @@ declare class UniTagInputComponent extends BaseComponent<UniTagInputOptions> imp
3629
3921
  protected selectSuggestion(suggestion: UniTagSuggestion): void;
3630
3922
  private commitDraft;
3631
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. */
3632
3927
  protected readonly className: _angular_core.Signal<string>;
3928
+ protected readonly wrapperClass: _angular_core.Signal<string>;
3633
3929
  protected readonly fieldClass: _angular_core.Signal<string>;
3634
3930
  protected readonly inputClass: _angular_core.Signal<string>;
3635
3931
  protected readonly listClass: _angular_core.Signal<string>;
@@ -3781,7 +4077,9 @@ interface UniTimeInputOptions {
3781
4077
  /** Active/hover option fill; the on-color pair is derived. Must contrast
3782
4078
  with `listColor` or keyboard navigation turns invisible. */
3783
4079
  activeColor?: ContainerColorToken;
3784
- 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;
3785
4083
  }
3786
4084
 
3787
4085
  /**
@@ -3824,10 +4122,16 @@ declare class UniTimeInputComponent extends BaseComponent<UniTimeInputOptions> i
3824
4122
  private readonly host;
3825
4123
  private readonly inputRef;
3826
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();
3827
4130
  protected readonly srOnly: string;
3828
4131
  /** A refused commit — styles the field and sets aria-invalid until edited. */
3829
4132
  protected readonly draftInvalid: _angular_core.WritableSignal<boolean>;
3830
- 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;
3831
4135
  protected readonly resolvedLocale: _angular_core.Signal<string>;
3832
4136
  protected readonly resolvedHour12: _angular_core.Signal<boolean>;
3833
4137
  /** The listed times: pinned `slots` verbatim, else the generated step grid. */
@@ -3853,7 +4157,6 @@ declare class UniTimeInputComponent extends BaseComponent<UniTimeInputOptions> i
3853
4157
  private scrollToActive;
3854
4158
  private scrollToIndex;
3855
4159
  private setFieldText;
3856
- private announce;
3857
4160
  protected readonly className: _angular_core.Signal<string>;
3858
4161
  protected readonly rowClass: _angular_core.Signal<string>;
3859
4162
  protected readonly inputClass: _angular_core.Signal<string>;
@@ -4018,7 +4321,9 @@ declare class UniTourComponent extends BaseComponent<UniTourOptions> {
4018
4321
  }>;
4019
4322
  protected readonly calloutOpen: _angular_core.WritableSignal<boolean>;
4020
4323
  protected readonly satisfied: _angular_core.WritableSignal<boolean>;
4021
- 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;
4022
4327
  protected readonly resolvedTarget: _angular_core.WritableSignal<HTMLElement>;
4023
4328
  private readonly presentedIndex;
4024
4329
  private gateCleanup;
@@ -4072,5 +4377,5 @@ declare class DragAndDropDirective {
4072
4377
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DragAndDropDirective, "[uni-drag-n-drop], [dragAndDrop]", never, {}, { "onFileDropped": "onFileDropped"; }, never, never, true, never>;
4073
4378
  }
4074
4379
 
4075
- 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, uniqueId, useTimer, visuallyHidden, weekdayNames };
4076
- export type { Alert, AnchorOffset, 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 };