@uni-design-system/uni-angular 8.2.0 → 8.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,6 +4,7 @@ import * as _uni_design_system_uni_core from '@uni-design-system/uni-core';
4
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';
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
+ import { CSSObject } from '@emotion/css/create-instance';
7
8
 
8
9
  /**
9
10
  * Returns a document-unique id for wiring ARIA relationships
@@ -156,6 +157,11 @@ interface ListboxNavigationConfig {
156
157
  idPrefix?: string;
157
158
  /** Wrap past the ends. Default true. */
158
159
  wrap?: boolean;
160
+ /**
161
+ * Non-navigable options. Arrows step over them; Home/End land on the
162
+ * nearest enabled option; an all-disabled list never activates.
163
+ */
164
+ disabled?: (index: number) => boolean;
159
165
  }
160
166
  /**
161
167
  * The keyboard and ARIA bookkeeping shared by every combobox-style popup:
@@ -180,6 +186,7 @@ declare class ListboxNavigation {
180
186
  private readonly _open;
181
187
  private readonly _activeIndex;
182
188
  private readonly wrap;
189
+ private readonly isDisabled;
183
190
  /** Whether the popup is showing. Also false when there is nothing to show. */
184
191
  readonly open: Signal<boolean>;
185
192
  /** Index of the highlighted option, or -1 when none is active. */
@@ -200,6 +207,9 @@ declare class ListboxNavigation {
200
207
  */
201
208
  navigate(event: KeyboardEvent): boolean;
202
209
  private nextIndex;
210
+ /** Nearest enabled index at or after `start`, walking by `delta` with wrap;
211
+ null when every option is disabled. */
212
+ private seek;
203
213
  private step;
204
214
  /** Close when focus leaves the control entirely (not on internal moves). */
205
215
  closeOnFocusOut(event: FocusEvent): void;
@@ -235,8 +245,77 @@ declare function anchorStyles(anchor: string, placement: Placement, offset?: Anc
235
245
  * that faces the anchor. Static per placement: if the browser flips the panel
236
246
  * via position-try, the arrow stays on the configured side (cosmetic-only
237
247
  * degradation, matching the flip-support caveat above).
248
+ *
249
+ * `overlap` (default 0 — cut exactly on the panel edge) extends the kept half
250
+ * into the panel; see {@link ARROW_CLIP} for when that is ever wanted.
251
+ */
252
+ declare function anchorArrowStyles(placement: Placement, size?: number, overlap?: number): Record<string, string | number>;
253
+ interface SpotlightOptions {
254
+ /** Gap between the target's box and the hole edge, px. */
255
+ pad?: number;
256
+ /** Ring border width, px — border-color and radius come from the caller. */
257
+ ringWidth?: number;
258
+ /** Scrim paint; scheme-invariant by convention, like `::backdrop`. */
259
+ scrimColor?: string;
260
+ }
261
+ interface SpotlightStyles {
262
+ /** Paints the scrim + ring. `pointer-events: none` — purely visual. */
263
+ window: Record<string, string | number>;
264
+ /** Click-blockers surrounding the hole; the hole itself is genuinely empty. */
265
+ strips: Record<'top' | 'bottom' | 'left' | 'right', Record<string, string | number>>;
266
+ /** Hole-sized click-blocker, shown when the target must not be interactive. */
267
+ cover: Record<string, string | number>;
268
+ }
269
+ /**
270
+ * Scrim pieces that cut a spotlight hole around the element carrying
271
+ * `anchor-name: <anchor>`. Every inset is `calc(anchor(<side>) ± px)`, so the
272
+ * browser tracks the target through scroll/resize/layout with zero listeners.
273
+ *
274
+ * The window paints everything: its `border` is the focus ring and its huge
275
+ * spread shadow is the scrim (an outer shadow of a rounded rect covers the
276
+ * whole viewport except the rect, rounded corners included). It is
277
+ * click-through; the four strips do the click-blocking, and the optional
278
+ * cover blocks the hole itself. Callers append these to a fixed, transparent,
279
+ * `pointer-events: none` full-viewport container (each piece is
280
+ * `position: fixed`).
281
+ */
282
+ declare function spotlightStyles(anchor: string, options?: SpotlightOptions): SpotlightStyles;
283
+
284
+ /** Placement → `transform-origin`, so scale animations grow from the anchor. */
285
+ declare const TRANSFORM_ORIGINS: Record<Placement, string>;
286
+ /** Write a CSS `anchor-name` onto an element (detached anchors and targets). */
287
+ declare function setAnchorName(el: HTMLElement, name: string): void;
288
+ declare function clearAnchorName(el: HTMLElement): void;
289
+ /**
290
+ * Resolve an element-or-id reference. Id strings are looked up at call time —
291
+ * never cache the result across opens, the element may have been re-rendered.
292
+ * `''` and null-ish mean "unset" (falsy guard: an empty string is the only
293
+ * typeable empty for a string-typed input).
294
+ */
295
+ declare function resolveElement(ref: HTMLElement | string | null | undefined): HTMLElement | null;
296
+ /** True when a native `toggle` event reports the overlay opening. */
297
+ declare function isToggleOpen(event: Event): boolean;
298
+ /**
299
+ * The discrete-transition block that animates an element into and out of the
300
+ * top layer: `transition-behavior: allow-discrete` over the `hidden` keys plus
301
+ * `display`/`overlay`, the shown state under `:popover-open`, and
302
+ * `@starting-style` so entry transitions run from the hidden state.
303
+ */
304
+ declare function discreteOverlayTransition(durationMs: number, hidden: Record<string, string | number>, shown: Record<string, string | number>): Record<string, unknown>;
305
+ /**
306
+ * Returns focus to `target` when an overlay closes while focus was inside its
307
+ * panel (or was dropped on `<body>` by the top layer closing), so keyboard
308
+ * users are never stranded (WCAG 2.4.3). Focus resting anywhere else is left
309
+ * alone.
310
+ */
311
+ declare function restoreOverlayFocus(panel: HTMLElement, target: HTMLElement | null): void;
312
+ /**
313
+ * The focusable elements inside `root`, in DOM order. Filters disabled
314
+ * controls, and hidden ones where the environment can tell: jsdom reports
315
+ * `offsetParent` as null for every element, so the visibility filter applies
316
+ * only when the document actually lays out (some element has an offsetParent).
238
317
  */
239
- declare function anchorArrowStyles(placement: Placement, size?: number): Record<string, string | number>;
318
+ declare function focusableElements(root: HTMLElement): HTMLElement[];
240
319
 
241
320
  type SortDirection = 'asc' | 'desc' | 'indet';
242
321
  interface Sort<T> {
@@ -401,6 +480,10 @@ declare class NotificationService {
401
480
  interface Option<T = unknown> {
402
481
  label: string;
403
482
  value: T;
483
+ /** Secondary line, e.g. an email under a name. Read as part of the option's name. */
484
+ description?: string;
485
+ /** Visible and announced, but not committable; listbox navigation skips it. */
486
+ disabled?: boolean;
404
487
  }
405
488
  type Options<T = unknown> = Option<T>[];
406
489
 
@@ -896,7 +979,7 @@ declare class UniCalendarComponent extends BaseComponent<UniCalendarOptions> imp
896
979
  /** BCP 47 tag; defaults to the document language, then the browser's. */
897
980
  locale: _angular_core.InputSignal<string>;
898
981
  /** First day of week, 0 = Sunday; defaults from the locale's week info. */
899
- weekStart: _angular_core.InputSignal<0 | 1 | 2 | 3 | 4 | 5 | 6>;
982
+ weekStart: _angular_core.InputSignal<0 | 1 | 2 | 3 | 4 | 6 | 5>;
900
983
  /** Names the grid when it stands alone (otherwise the heading names it). */
901
984
  ariaLabel: _angular_core.InputSignal<string>;
902
985
  /** Day geometry token; `sm`/`md`/`lg` map to the theme's `calendar` sizes. */
@@ -984,6 +1067,132 @@ declare class UniCalendarComponent extends BaseComponent<UniCalendarOptions> imp
984
1067
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniCalendarComponent, "uni-calendar, Calendar", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "month": { "alias": "month"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "disabledDates": { "alias": "disabledDates"; "required": false; "isSignal": true; }; "markers": { "alias": "markers"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "weekStart": { "alias": "weekStart"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "month": "monthChange"; "selected": "selected"; }, never, never, true, never>;
985
1068
  }
986
1069
 
1070
+ /** Why a callout closed. `programmatic` = the app drove `open` to false. */
1071
+ interface UniCalloutDismissal {
1072
+ /** The callout's `key`, when one was set — the "don't show again" hook. */
1073
+ key?: string;
1074
+ reason: 'close-button' | 'escape' | 'backdrop' | 'programmatic';
1075
+ }
1076
+ /**
1077
+ * Theme options for the `callout` component entry. The spotlight ring color
1078
+ * is deliberately not an option — it is the callout's `variant` role.
1079
+ */
1080
+ interface UniCalloutOptions {
1081
+ color: ContainerColorToken;
1082
+ borderRadius: Radius;
1083
+ shadow: Shadow;
1084
+ width: string;
1085
+ padding: string;
1086
+ headerTypeface: Typeface;
1087
+ typeface: Typeface;
1088
+ closeSymbol: IconName;
1089
+ arrowSize: number;
1090
+ /** Main-axis gap between the spotlight hole edge and the panel, px. */
1091
+ offset: number;
1092
+ /** Scrim paint; scheme-invariant by convention, like `::backdrop`. */
1093
+ scrimColor: string;
1094
+ /** Gap between the target's box and the hole edge, px. */
1095
+ spotlightPadding: number;
1096
+ spotlightRadius: Radius;
1097
+ /** Spotlight ring width, px. */
1098
+ ringWidth: number;
1099
+ transitionMs: number;
1100
+ }
1101
+
1102
+ /**
1103
+ * Anchored coach-mark panel that dims the page and cuts a spotlight hole
1104
+ * around its target. Both the scrim and the panel are `popover="manual"`
1105
+ * elements shown in order, so they stack deterministically in the top layer
1106
+ * above every app z-index, and every scrim piece is CSS-anchor-positioned to
1107
+ * the target — the hole tracks scroll/resize/layout with zero listeners.
1108
+ *
1109
+ * The panel is a non-modal `role="dialog"` (deliberately no `aria-modal`):
1110
+ * focus moves into it on open, Tab runs a "duet loop" over the panel's
1111
+ * focusables plus the spotlit target while it stays interactive, and on close
1112
+ * focus returns to the pre-open element — unless the user moved into the
1113
+ * target, where it stays.
1114
+ *
1115
+ * Storage-free by rule: `key` and the `dismissed` output are the "don't show
1116
+ * again" hooks; persistence is the app's business (e.g. cdk local-storage).
1117
+ */
1118
+ declare class UniCalloutComponent extends BaseComponent<UniCalloutOptions> {
1119
+ private destroyRef;
1120
+ open: _angular_core.ModelSignal<boolean>;
1121
+ /** Identifies this callout in `dismissed` payloads. Empty string = unset. */
1122
+ key: _angular_core.InputSignal<string>;
1123
+ /** Element (or id, resolved at open time) to spotlight. '' = unset. */
1124
+ target: _angular_core.InputSignal<string | HTMLElement>;
1125
+ placement: _angular_core.InputSignal<Placement>;
1126
+ /** Defaults to `spotlight` when a target resolves, else `dim`. */
1127
+ backdrop: _angular_core.InputSignal<"none" | "spotlight" | "dim">;
1128
+ /** When false, a transparent cover blocks the spotlit target. */
1129
+ targetInteractive: _angular_core.InputSignal<boolean>;
1130
+ /** Gates Escape and the close button. */
1131
+ dismissible: _angular_core.InputSignal<boolean>;
1132
+ /** When true, scrim clicks close (reason `backdrop`); else the panel pulses. */
1133
+ dismissOnBackdrop: _angular_core.InputSignal<boolean>;
1134
+ header: _angular_core.InputSignal<string>;
1135
+ arrow: _angular_core.InputSignal<boolean>;
1136
+ /** Wins over the header/body labelling; the tour sets "{title}, step n of N". */
1137
+ ariaLabel: _angular_core.InputSignal<string>;
1138
+ /** Accessible name of the dismiss button (the tour passes its skip label). */
1139
+ closeLabel: _angular_core.InputSignal<string>;
1140
+ opened: _angular_core.OutputEmitterRef<void>;
1141
+ closed: _angular_core.OutputEmitterRef<void>;
1142
+ dismissed: _angular_core.OutputEmitterRef<UniCalloutDismissal>;
1143
+ /** Keys pressed while focus is inside the panel (the tour's arrow-key hook). */
1144
+ panelKeydown: _angular_core.OutputEmitterRef<KeyboardEvent>;
1145
+ readonly panelId: string;
1146
+ protected readonly headerId: string;
1147
+ protected readonly bodyId: string;
1148
+ private readonly anchorName;
1149
+ protected readonly showing: _angular_core.WritableSignal<boolean>;
1150
+ protected readonly activeTarget: _angular_core.WritableSignal<HTMLElement>;
1151
+ private readonly scrimShown;
1152
+ /**
1153
+ * Keeps the spotlight pieces rendered and the panel anchored through the
1154
+ * close fade — tearing the anchor down at close time made the panel jump
1155
+ * and the scrim vanish mid-transition.
1156
+ */
1157
+ protected readonly scrimContent: _angular_core.WritableSignal<boolean>;
1158
+ private pendingTeardown;
1159
+ private prevFocus;
1160
+ private detachKeydown;
1161
+ protected readonly stripSides: readonly ["top", "bottom", "left", "right"];
1162
+ private scrimRef;
1163
+ private panelRef;
1164
+ private actionsRef;
1165
+ constructor();
1166
+ protected readonly effectiveBackdrop: _angular_core.Signal<"none" | "spotlight" | "dim">;
1167
+ private show;
1168
+ protected close(reason: UniCalloutDismissal['reason']): void;
1169
+ /** Move an open callout to a new target without a close/open round trip. */
1170
+ private retarget;
1171
+ /** `[autofocus]` → first action → first panel focusable → the panel itself. */
1172
+ private focusInitial;
1173
+ /**
1174
+ * Capture phase so Escape works from inside the spotlit target and the tab
1175
+ * loop preempts the page. Non-Tab keys surface through `panelKeydown`.
1176
+ */
1177
+ private onKeydown;
1178
+ /** A stray click shouldn't kill onboarding: nudge the panel instead. */
1179
+ protected onBackdropClick(): void;
1180
+ private readonly spotlight;
1181
+ protected readonly scrimClassName: _angular_core.Signal<string>;
1182
+ protected readonly windowClassName: _angular_core.Signal<string>;
1183
+ protected stripClassName(side: (typeof this.stripSides)[number]): string;
1184
+ protected readonly coverClassName: _angular_core.Signal<string>;
1185
+ protected readonly fullCoverClassName: _angular_core.Signal<string>;
1186
+ protected readonly panelClassName: _angular_core.Signal<string>;
1187
+ protected readonly headRowClassName: _angular_core.Signal<string>;
1188
+ protected readonly titleClassName: _angular_core.Signal<string>;
1189
+ protected readonly bodyClassName: _angular_core.Signal<string>;
1190
+ protected readonly actionsRowClassName: _angular_core.Signal<string>;
1191
+ protected readonly arrowClassName: _angular_core.Signal<string>;
1192
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniCalloutComponent, never>;
1193
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniCalloutComponent, "uni-callout", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "key": { "alias": "key"; "required": false; "isSignal": true; }; "target": { "alias": "target"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "backdrop": { "alias": "backdrop"; "required": false; "isSignal": true; }; "targetInteractive": { "alias": "targetInteractive"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "dismissOnBackdrop": { "alias": "dismissOnBackdrop"; "required": false; "isSignal": true; }; "header": { "alias": "header"; "required": false; "isSignal": true; }; "arrow": { "alias": "arrow"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "closeLabel": { "alias": "closeLabel"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "opened": "opened"; "closed": "closed"; "dismissed": "dismissed"; "panelKeydown": "panelKeydown"; }, never, ["[callout-media]", "[callout-header]", "*", "[callout-actions]"], true, never>;
1194
+ }
1195
+
987
1196
  declare class UniCardContentComponent extends BaseComponent {
988
1197
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniCardContentComponent, never>;
989
1198
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniCardContentComponent, "uni-card-content", never, {}, {}, never, ["*"], true, never>;
@@ -1067,6 +1276,149 @@ declare class UniCheckboxComponent extends BaseComponent<UniCheckboxOptions> imp
1067
1276
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniCheckboxComponent, "uni-checkbox", never, { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "touched": "touchedChange"; "indeterminate": "indeterminateChange"; }, never, never, true, never>;
1068
1277
  }
1069
1278
 
1279
+ /** A commit was refused (no match); the field reverted to the committed label. */
1280
+ interface UniComboboxRejection {
1281
+ query: string;
1282
+ }
1283
+ /**
1284
+ * Theme options for the `combobox` entry. Field chrome is not duplicated
1285
+ * here — it comes from `input` via uni-input-box; the list trio matches
1286
+ * tagInput/searchInput/timeInput. Glyphs are theme icon primitives rendered
1287
+ * by `uni-icon`, so they restyle with the theme's iconography.
1288
+ */
1289
+ interface UniComboboxOptions {
1290
+ toggleIcon?: IconName;
1291
+ clearIcon?: IconName;
1292
+ selectedIcon?: IconName;
1293
+ listColor?: ContainerColorToken;
1294
+ listShadow?: Shadow;
1295
+ listBorderRadius?: Radius;
1296
+ /** Active/hover option fill; the on-color pair is derived. Must contrast
1297
+ with `listColor` or keyboard navigation turns invisible. */
1298
+ activeColor?: ContainerColorToken;
1299
+ /** Scroll height in rows — the list scrolls past this, never truncates. */
1300
+ maxVisibleOptions?: number;
1301
+ descriptionColor?: ContentColorToken;
1302
+ }
1303
+
1304
+ /**
1305
+ * Form-bound, closed-set, single-select autocomplete: `FormValueControl<T | null>`
1306
+ * over object `Options<T>`, type-to-filter, commit-on-select. Typing produces a
1307
+ * draft — a filter, never a value; the value changes only when an option
1308
+ * commits, `clear()` runs, or the model is written from outside. Select
1309
+ * semantics, not search: a real label, a chevron, no magnifier, nothing
1310
+ * submits. For short lists with no need to type, prefer `uni-select` — the
1311
+ * value contract is identical, so swapping is a template-only change.
1312
+ */
1313
+ declare class UniComboboxComponent<T> extends BaseComponent<UniComboboxOptions> implements FormValueControl<T | null> {
1314
+ readonly value: _angular_core.ModelSignal<T>;
1315
+ readonly disabled: _angular_core.InputSignal<boolean>;
1316
+ readonly touched: _angular_core.ModelSignal<boolean>;
1317
+ readonly invalid: _angular_core.InputSignal<boolean>;
1318
+ readonly dirty: _angular_core.InputSignal<boolean>;
1319
+ readonly required: _angular_core.InputSignal<boolean>;
1320
+ readonly ariaDescribedBy: _angular_core.InputSignal<string>;
1321
+ /** Accessible name for the field, e.g. "State"; echoed on the listbox. */
1322
+ label: _angular_core.InputSignal<string>;
1323
+ placeholder: _angular_core.InputSignal<string>;
1324
+ options: _angular_core.InputSignal<Options<T>>;
1325
+ /**
1326
+ * Equality used to match `value` against option values, called as
1327
+ * `compareWith(optionValue, value)`. Defaults to reference equality, which
1328
+ * never matches an object value rebuilt from elsewhere (e.g. a saved record
1329
+ * against options from a fresh fetch) — pass a key comparison like
1330
+ * `(a, b) => a?.id === b?.id` for object values.
1331
+ */
1332
+ compareWith: _angular_core.InputSignal<(optionValue: T, value: T) => boolean>;
1333
+ width: _angular_core.InputSignal<string | number>;
1334
+ /** Show a ✕ while a value is set; an emptied field on blur also clears. */
1335
+ clearable: _angular_core.InputSignal<boolean>;
1336
+ /** Blur commits an exact-match draft; a non-matching draft reverts. */
1337
+ commitOnBlur: _angular_core.InputSignal<boolean>;
1338
+ /** i18n-able empty row, also announced when a filter matches nothing. */
1339
+ emptyText: _angular_core.InputSignal<string>;
1340
+ /** `false` renders `options` verbatim; narrow them app-side from `query`. */
1341
+ filterLocally: _angular_core.InputSignal<boolean>;
1342
+ /** Filter predicate; default is locale-lowercased label-contains. */
1343
+ filterWith: _angular_core.InputSignal<(option: Option<T>, query: string) => boolean>;
1344
+ debounceTime: _angular_core.InputSignal<number>;
1345
+ /** Debounced draft text, for async option lists. */
1346
+ query: _angular_core.OutputEmitterRef<string>;
1347
+ /** An option committed. */
1348
+ selected: _angular_core.OutputEmitterRef<Option<T>>;
1349
+ cleared: _angular_core.OutputEmitterRef<void>;
1350
+ /** A commit was refused (no match); the field reverted. */
1351
+ rejected: _angular_core.OutputEmitterRef<UniComboboxRejection>;
1352
+ private readonly host;
1353
+ private readonly inputRef;
1354
+ private readonly listRef;
1355
+ /** Cancelled on destroy — a late tick would emit on a destroyed OutputRef. */
1356
+ private queryTimer?;
1357
+ constructor();
1358
+ protected readonly srOnly: string;
1359
+ protected readonly announcement: _angular_core.WritableSignal<string>;
1360
+ /** null → the field shows the committed label; a string is an uncommitted draft. */
1361
+ protected readonly draft: _angular_core.WritableSignal<string>;
1362
+ /**
1363
+ * Popup visibility. Component-owned rather than `list.open()` — the shared
1364
+ * signal gates on `count() > 0`, which would hide the "No matches" row and
1365
+ * misreport `aria-expanded` over an empty filter.
1366
+ */
1367
+ protected readonly popupOpen: _angular_core.WritableSignal<boolean>;
1368
+ /** Index in options() of the option matching value(), else -1. */
1369
+ protected readonly committedIndex: _angular_core.Signal<number>;
1370
+ /** A value with no matching option renders '' but is preserved — options may
1371
+ still be loading; the field self-heals when they arrive. */
1372
+ protected readonly committedLabel: _angular_core.Signal<string>;
1373
+ protected readonly displayValue: _angular_core.Signal<string>;
1374
+ /** Indices into options() surviving the filter. The draft filters; the
1375
+ committed label does not — reopening always shows the full set. */
1376
+ protected readonly filteredIndices: _angular_core.Signal<number[]>;
1377
+ /** Shared combobox bookkeeping, in filtered-list positions — the fourth
1378
+ consumer of the contract behind search-input, tag-input and time-input. */
1379
+ protected readonly list: _uni_design_system_uni_angular.ListboxNavigation;
1380
+ protected readonly showError: _angular_core.Signal<boolean>;
1381
+ private commit;
1382
+ protected clear(): void;
1383
+ /**
1384
+ * Draft resolution, used by Enter, Tab and blur:
1385
+ * 1. an active option in the list → commit it;
1386
+ * 2. else a unique exact label match (locale-case-insensitive) → commit it;
1387
+ * 3. Enter only: the filter narrowed to exactly one enabled option → commit it
1388
+ * (on Enter the user can see the single candidate; on blur they're gone,
1389
+ * and committing a value they never saw confirmed is how forms grow
1390
+ * mystery data);
1391
+ * 4. else the caller keeps the list open (Enter) or reverts (Tab/blur).
1392
+ */
1393
+ private resolveDraft;
1394
+ private revertDraft;
1395
+ private reject;
1396
+ protected onKeydown(event: KeyboardEvent): void;
1397
+ protected onInput(): void;
1398
+ /** Click-to-browse: pointer users get the select affordance. Focus alone
1399
+ never opens — Tab-through forms must not spray popups. */
1400
+ protected onFieldClick(): void;
1401
+ protected onToggleMousedown(event: MouseEvent): void;
1402
+ protected onOptionClick(optIndex: number): void;
1403
+ protected onFocusOut(event: FocusEvent): void;
1404
+ /** Filtered position of the committed option when visible and enabled, else -1. */
1405
+ private committedFilteredPos;
1406
+ private openList;
1407
+ private closeList;
1408
+ private scrollToActive;
1409
+ private setFieldText;
1410
+ private announce;
1411
+ protected readonly className: _angular_core.Signal<string>;
1412
+ protected readonly rowClass: _angular_core.Signal<string>;
1413
+ protected readonly inputClass: _angular_core.Signal<string>;
1414
+ /** Pointer-only affordance: keyboard already has ArrowDown, and the input
1415
+ itself announces expanded state. */
1416
+ protected readonly toggleClass: _angular_core.Signal<string>;
1417
+ protected readonly listClass: _angular_core.Signal<string>;
1418
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniComboboxComponent<any>, never>;
1419
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniComboboxComponent<any>, "uni-combobox, Combobox", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "commitOnBlur": { "alias": "commitOnBlur"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "filterLocally": { "alias": "filterLocally"; "required": false; "isSignal": true; }; "filterWith": { "alias": "filterWith"; "required": false; "isSignal": true; }; "debounceTime": { "alias": "debounceTime"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "query": "query"; "selected": "selected"; "cleared": "cleared"; "rejected": "rejected"; }, never, never, true, never>;
1420
+ }
1421
+
1070
1422
  interface UniDataSearchOptions {
1071
1423
  border: Border;
1072
1424
  borderRadius: Radius;
@@ -1209,7 +1561,7 @@ declare class UniDateInputComponent extends BaseComponent<UniDateInputOptions> i
1209
1561
  maxDate: _angular_core.InputSignal<string>;
1210
1562
  disabledDates: _angular_core.InputSignal<string[] | ((date: UniDate) => boolean)>;
1211
1563
  markers: _angular_core.InputSignal<UniCalendarMarker[]>;
1212
- weekStart: _angular_core.InputSignal<0 | 1 | 2 | 3 | 4 | 5 | 6>;
1564
+ weekStart: _angular_core.InputSignal<0 | 1 | 2 | 3 | 4 | 6 | 5>;
1213
1565
  /** Popup shown. */
1214
1566
  opened: _angular_core.OutputEmitterRef<void>;
1215
1567
  /** Popup hidden. */
@@ -1303,7 +1655,7 @@ declare class UniDateTimeInputComponent extends BaseComponent<UniDateTimeInputOp
1303
1655
  slots: _angular_core.InputSignal<string[]>;
1304
1656
  minuteStep: _angular_core.InputSignal<number>;
1305
1657
  hour12: _angular_core.InputSignal<boolean>;
1306
- weekStart: _angular_core.InputSignal<0 | 1 | 2 | 3 | 4 | 5 | 6>;
1658
+ weekStart: _angular_core.InputSignal<0 | 1 | 2 | 3 | 4 | 6 | 5>;
1307
1659
  locale: _angular_core.InputSignal<string>;
1308
1660
  /** Scheduling: the day's available times. Gates the time part on a date. */
1309
1661
  slotsFor: _angular_core.InputSignal<(date: UniDate) => UniTime[]>;
@@ -1793,6 +2145,42 @@ declare class UniDebounceInputComponent {
1793
2145
  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>;
1794
2146
  }
1795
2147
 
2148
+ /**
2149
+ * The theme options every listbox popup shares — the "list trio" plus the
2150
+ * active-option fill. Component option interfaces (searchInput, tagInput,
2151
+ * timeInput, combobox) satisfy this structurally; their extra options ride
2152
+ * alongside. `ColorKey`-typed so the wider `searchInput` contract (custom
2153
+ * theme color tokens) stays satisfiable; `colorPair` resolves any registered
2154
+ * token at runtime.
2155
+ */
2156
+ interface UniListboxPopupOptions {
2157
+ /** Popup surface; its on-color pair is derived and cascades to options. */
2158
+ listColor?: ColorKey;
2159
+ listShadow?: Shadow;
2160
+ listBorderRadius?: Radius;
2161
+ /** Active/hover option fill; the on-color pair is derived. Must contrast
2162
+ with `listColor` or keyboard navigation turns invisible. */
2163
+ activeColor?: ColorKey;
2164
+ }
2165
+ /**
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.
2169
+ *
2170
+ * Extracted because four components (`uni-search-input`, `uni-tag-input`,
2171
+ * `uni-time-input`, `uni-combobox`) carried hand-rolled copies, and the parts
2172
+ * that silently drift between copies all live here: the surface/elevation
2173
+ * trio, and the `activeColor` pair that themes re-point when their container
2174
+ * tokens don't contrast (see the Wellsourced overrides).
2175
+ *
2176
+ * Compose extras with the array form — `css([listboxPopupStyles(…), {…}])` —
2177
+ * so a component's own `& [role="option"]` block cascades after this one
2178
+ * instead of replacing it (an object spread would overwrite the key).
2179
+ */
2180
+ declare const listboxPopupStyles: (theme: ThemeService, options: UniListboxPopupOptions, { maxHeight }?: {
2181
+ maxHeight?: number;
2182
+ }) => CSSObject;
2183
+
1796
2184
  declare class UniIconComponent {
1797
2185
  private themeService;
1798
2186
  color: _angular_core.InputSignal<string>;
@@ -2387,27 +2775,135 @@ declare class UniPaginatorComponent<T> extends BaseComponent<UniPaginatorOptions
2387
2775
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniPaginatorComponent<any>, "uni-paginator", never, { "datasource": { "alias": "datasource"; "required": false; "isSignal": true; }; "initPageSize": { "alias": "initPageSize"; "required": false; "isSignal": true; }; "showPageSize": { "alias": "showPageSize"; "required": false; "isSignal": true; }; "showPageJumper": { "alias": "showPageJumper"; "required": false; "isSignal": true; }; "showPageNumbers": { "alias": "showPageNumbers"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2388
2776
  }
2389
2777
 
2390
- declare class UniPopoverComponent {
2778
+ /**
2779
+ * Theme options for the `popover` component entry. Defaults reproduce the
2780
+ * pre-theme hardcoded look; the `tooltip*` options apply only in
2781
+ * `mode="tooltip"`.
2782
+ */
2783
+ interface UniPopoverOptions {
2784
+ color: ContainerColorToken;
2785
+ border: Border;
2786
+ borderRadius: Radius;
2787
+ shadow: Shadow;
2788
+ typeface: Typeface;
2789
+ /** Typeface for the `header` title row. */
2790
+ headerTypeface: Typeface;
2791
+ /** Body padding in rich mode. */
2792
+ padding: string;
2793
+ /** Body padding in tooltip mode (tighter). */
2794
+ tooltipPadding: string;
2795
+ /** Default panel max-width; an instance `maxWidth` input overrides. */
2796
+ maxWidth: string;
2797
+ /** Main-axis gap between anchor and panel, px. */
2798
+ offset: number;
2799
+ arrowSize: number;
2800
+ /** Icon primitive for the `closable` button. */
2801
+ closeSymbol: IconName;
2802
+ /** Hover open delay in tooltip mode, ms. */
2803
+ tooltipOpenDelay: number;
2804
+ /** Pointer-leave close delay in tooltip mode, ms. */
2805
+ tooltipCloseDelay: number;
2806
+ }
2807
+
2808
+ /**
2809
+ * Anchored, top-layer panel on the native `popover` element — the browser owns
2810
+ * positioning (CSS anchor positioning), stacking, and, in rich mode, light
2811
+ * dismissal. Two modes share one implementation:
2812
+ *
2813
+ * - `rich` (default): a click-toggled disclosure. The projected `[trigger]`
2814
+ * carries `aria-expanded`/`aria-controls`; with no trigger content the app
2815
+ * drives `open` and no element claims controller ARIA. Focus stays on the
2816
+ * trigger (APG disclosure) unless the panel marks an `[autofocus]` field,
2817
+ * and returns to the trigger on close.
2818
+ * - `tooltip`: hover/focus-triggered, `role="tooltip"` + `aria-describedby`,
2819
+ * WCAG 1.4.13 dismissable/hoverable/persistent. Content must not contain
2820
+ * focusable elements.
2821
+ *
2822
+ * Anchoring and control are separate: `anchor` re-anchors the panel to any
2823
+ * element (or id) while the trigger keeps the disclosure semantics.
2824
+ */
2825
+ declare class UniPopoverComponent extends BaseComponent<UniPopoverOptions> {
2391
2826
  private renderer;
2392
- private theme;
2827
+ private destroyRef;
2393
2828
  placement: _angular_core.InputSignal<Placement>;
2394
2829
  /** Light-dismiss on outside click / Escape (native popover="auto"). */
2395
2830
  autoClose: _angular_core.InputSignal<boolean>;
2831
+ /** Two-way open state; light dismissal and hover timers sync back into it. */
2832
+ open: _angular_core.ModelSignal<boolean>;
2833
+ /** `rich` = click-toggled disclosure; `tooltip` = hover/focus description. */
2834
+ mode: _angular_core.InputSignal<"tooltip" | "rich">;
2835
+ /**
2836
+ * Anchor the panel to another element (or element id, resolved each time
2837
+ * the panel opens) while the projected trigger keeps the disclosure ARIA.
2838
+ * Empty string means unset.
2839
+ */
2840
+ anchor: _angular_core.InputSignal<string | HTMLElement>;
2841
+ /** Title rendered in the header row and used as the accessible name. */
2842
+ header: _angular_core.InputSignal<string>;
2843
+ /** Renders a "Close" icon button in the header row. */
2844
+ closable: _angular_core.InputSignal<boolean>;
2845
+ arrow: _angular_core.InputSignal<boolean>;
2846
+ /** Panel max-width; numbers are px. Defaults to the theme's `maxWidth`. */
2847
+ maxWidth: _angular_core.InputSignal<string | number>;
2848
+ /** Tooltip-mode hover-open delay, ms; defaults to the theme option. */
2849
+ openDelay: _angular_core.InputSignal<number>;
2850
+ /** Tooltip-mode pointer-leave close delay, ms; defaults to the theme option. */
2851
+ closeDelay: _angular_core.InputSignal<number>;
2852
+ opened: _angular_core.OutputEmitterRef<void>;
2853
+ closed: _angular_core.OutputEmitterRef<void>;
2396
2854
  readonly panelId: string;
2855
+ protected readonly headerId: string;
2397
2856
  private readonly anchorName;
2398
2857
  private readonly showing;
2858
+ /** Whether the `[trigger]` slot projected any element content. */
2859
+ private readonly hasTrigger;
2399
2860
  private triggerRef;
2400
2861
  private panelRef;
2862
+ private openTimer;
2863
+ private closeTimer;
2864
+ /** The element currently carrying our anchor-name. */
2865
+ private anchoredEl;
2866
+ private detachEscape;
2401
2867
  constructor();
2402
- protected onToggle(event: Event): void;
2868
+ /** Tooltip mode is always `manual` — its lifecycle belongs to the timers. */
2869
+ protected readonly popoverKind: _angular_core.Signal<"auto" | "manual">;
2403
2870
  showPopover(): void;
2404
2871
  hidePopover(): void;
2405
- togglePopover(event: MouseEvent): void;
2872
+ togglePopover(event?: MouseEvent): void;
2873
+ /**
2874
+ * The panel anchors to the detached `anchor` when one resolves (id strings
2875
+ * are looked up now, at open time), else to the trigger span.
2876
+ */
2877
+ private applyAnchor;
2878
+ protected onToggle(event: Event): void;
2879
+ protected closeFromButton(): void;
2880
+ protected onTriggerClick(event: MouseEvent): void;
2881
+ private readonly openDelayMs;
2882
+ private readonly closeDelayMs;
2883
+ protected onTriggerEnter(): void;
2884
+ protected onTriggerLeave(): void;
2885
+ protected onTriggerFocusIn(): void;
2886
+ protected onTriggerFocusOut(): void;
2887
+ /** Resting the pointer inside the panel must not dismiss it (hoverable). */
2888
+ protected onPanelEnter(): void;
2889
+ protected onPanelLeave(): void;
2890
+ /**
2891
+ * Tooltip panels are `manual`, so Escape is ours: dismiss without moving
2892
+ * focus, and stop propagation so an enclosing dialog stays open. Capture
2893
+ * phase, document-level — the pointer may be nowhere near the trigger.
2894
+ */
2895
+ private attachTooltipEscape;
2406
2896
  protected readonly triggerClassName: string;
2897
+ private readonly resolvedMaxWidth;
2407
2898
  protected readonly popoverClassName: _angular_core.Signal<string>;
2899
+ /** Empty regions collapse, so bare content renders v1's single-region look. */
2900
+ protected readonly headerRowClassName: _angular_core.Signal<string>;
2901
+ protected readonly titleClassName: _angular_core.Signal<string>;
2902
+ protected readonly bodyClassName: _angular_core.Signal<string>;
2903
+ protected readonly footerRowClassName: _angular_core.Signal<string>;
2408
2904
  protected readonly arrowClassName: _angular_core.Signal<string>;
2409
2905
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniPopoverComponent, never>;
2410
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniPopoverComponent, "uni-popover", never, { "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "autoClose": { "alias": "autoClose"; "required": false; "isSignal": true; }; }, {}, never, ["[trigger]", "*"], true, never>;
2906
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniPopoverComponent, "uni-popover", never, { "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "autoClose": { "alias": "autoClose"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "anchor": { "alias": "anchor"; "required": false; "isSignal": true; }; "header": { "alias": "header"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; "arrow": { "alias": "arrow"; "required": false; "isSignal": true; }; "maxWidth": { "alias": "maxWidth"; "required": false; "isSignal": true; }; "openDelay": { "alias": "openDelay"; "required": false; "isSignal": true; }; "closeDelay": { "alias": "closeDelay"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "opened": "opened"; "closed": "closed"; }, never, ["[trigger]", "[popover-header]", "*", "[popover-footer]"], true, never>;
2411
2907
  }
2412
2908
 
2413
2909
  declare class UniProgressBarComponent {
@@ -2550,6 +3046,9 @@ interface UniSearchInputOptions {
2550
3046
  clearSymbol?: string;
2551
3047
  /** Suggestion list surface color token. */
2552
3048
  listColor?: ColorKey;
3049
+ /** Active/hover suggestion fill; the on-color pair is derived. Must
3050
+ contrast with `listColor` or keyboard navigation turns invisible. */
3051
+ activeColor?: ContainerColorToken;
2553
3052
  /** Suggestion list elevation token. */
2554
3053
  listShadow?: Shadow;
2555
3054
  /** Suggestion list radius token. */
@@ -3052,6 +3551,9 @@ interface UniTagInputOptions {
3052
3551
  listColor?: ContainerColorToken;
3053
3552
  listShadow?: Shadow;
3054
3553
  listBorderRadius?: Radius;
3554
+ /** Active/hover suggestion fill; the on-color pair is derived. Must
3555
+ contrast with `listColor` or keyboard navigation turns invisible. */
3556
+ activeColor?: ContainerColorToken;
3055
3557
  maxSuggestions?: number;
3056
3558
  }
3057
3559
 
@@ -3276,6 +3778,9 @@ interface UniTimeInputOptions {
3276
3778
  listColor?: ContainerColorToken;
3277
3779
  listShadow?: Shadow;
3278
3780
  listBorderRadius?: Radius;
3781
+ /** Active/hover option fill; the on-color pair is derived. Must contrast
3782
+ with `listColor` or keyboard navigation turns invisible. */
3783
+ activeColor?: ContainerColorToken;
3279
3784
  maxVisibleOptions?: number;
3280
3785
  }
3281
3786
 
@@ -3453,6 +3958,102 @@ declare class UniTooltipComponent extends BaseComponent<UniTooltipOptions> {
3453
3958
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniTooltipComponent, "uni-tooltip", never, { "hoverDelay": { "alias": "hoverDelay"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "inlineText": { "alias": "inlineText"; "required": false; "isSignal": true; }; "appendToBody": { "alias": "appendToBody"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
3454
3959
  }
3455
3960
 
3961
+ /**
3962
+ * Advances a step from an interaction on its target instead of the Next
3963
+ * button. `auto` advances the moment the event fires; it defaults to true for
3964
+ * `click` (the gesture is complete) and false otherwise (mid-typing must not
3965
+ * yank the user forward — Next unlocks instead).
3966
+ */
3967
+ interface UniTourAdvance {
3968
+ event: string;
3969
+ auto?: boolean;
3970
+ }
3971
+ interface UniTourStep {
3972
+ key: string;
3973
+ /** Element or id to spotlight; omit for a centered, page-dimming step. */
3974
+ target?: HTMLElement | string;
3975
+ title: string;
3976
+ body: string;
3977
+ placement?: Placement;
3978
+ backdrop?: 'spotlight' | 'dim' | 'none';
3979
+ targetInteractive?: boolean;
3980
+ advanceOn?: UniTourAdvance;
3981
+ }
3982
+ /** Theme options for the `tour` component entry. */
3983
+ interface UniTourOptions {
3984
+ progressStyle: 'dots' | 'fraction';
3985
+ footerGap: Size;
3986
+ }
3987
+
3988
+ /**
3989
+ * A thin sequencer over one `uni-callout`: steps spotlight their targets, a
3990
+ * footer walks Next/Back with dots-or-fraction progress, and `advanceOn`
3991
+ * gates a step behind an interaction with its target (auto-advancing for
3992
+ * clicks, unlocking Next otherwise — announced through one `role="status"`
3993
+ * region). Escape or the close button skips the tour and reports the step.
3994
+ *
3995
+ * `active` is a two-way model, so a tour is deep-linkable and inspectable;
3996
+ * steps whose declared target cannot be resolved are skipped (with a dev
3997
+ * warning) in the direction of travel rather than erroring.
3998
+ */
3999
+ declare class UniTourComponent extends BaseComponent<UniTourOptions> {
4000
+ private renderer;
4001
+ private destroyRef;
4002
+ steps: _angular_core.InputSignal<UniTourStep[]>;
4003
+ /** The presented step index, or null when the tour is not running. */
4004
+ active: _angular_core.ModelSignal<number>;
4005
+ nextLabel: _angular_core.InputSignal<string>;
4006
+ backLabel: _angular_core.InputSignal<string>;
4007
+ skipLabel: _angular_core.InputSignal<string>;
4008
+ doneLabel: _angular_core.InputSignal<string>;
4009
+ started: _angular_core.OutputEmitterRef<void>;
4010
+ stepChanged: _angular_core.OutputEmitterRef<{
4011
+ key: string;
4012
+ index: number;
4013
+ }>;
4014
+ finished: _angular_core.OutputEmitterRef<void>;
4015
+ skipped: _angular_core.OutputEmitterRef<{
4016
+ key: string;
4017
+ index: number;
4018
+ }>;
4019
+ protected readonly calloutOpen: _angular_core.WritableSignal<boolean>;
4020
+ protected readonly satisfied: _angular_core.WritableSignal<boolean>;
4021
+ protected readonly announcement: _angular_core.WritableSignal<string>;
4022
+ protected readonly resolvedTarget: _angular_core.WritableSignal<HTMLElement>;
4023
+ private readonly presentedIndex;
4024
+ private gateCleanup;
4025
+ protected readonly index: _angular_core.Signal<number>;
4026
+ protected readonly currentStep: _angular_core.Signal<UniTourStep>;
4027
+ protected readonly isLast: _angular_core.Signal<boolean>;
4028
+ protected readonly clickGate: _angular_core.Signal<boolean>;
4029
+ /** Gated steps force an interactive target — the gate needs the gesture. */
4030
+ protected readonly targetInteractive: _angular_core.Signal<boolean>;
4031
+ protected readonly stepAriaLabel: _angular_core.Signal<string>;
4032
+ constructor();
4033
+ start(at?: number): void;
4034
+ next(): void;
4035
+ back(): void;
4036
+ skip(): void;
4037
+ protected advance(): void;
4038
+ /**
4039
+ * Present step `index`, skipping (in the direction of travel) steps whose
4040
+ * declared target cannot be resolved right now.
4041
+ */
4042
+ private present;
4043
+ private setupGate;
4044
+ protected onDismissed(dismissal: UniCalloutDismissal): void;
4045
+ /** Arrow keys navigate only while focus is inside the panel. */
4046
+ protected onPanelKeydown(event: KeyboardEvent): void;
4047
+ private finishTour;
4048
+ private stopTour;
4049
+ protected readonly statusClassName: string;
4050
+ protected readonly footerClassName: _angular_core.Signal<string>;
4051
+ protected readonly dotsClassName: _angular_core.Signal<string>;
4052
+ protected readonly fractionClassName: string;
4053
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniTourComponent, never>;
4054
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniTourComponent, "uni-tour", never, { "steps": { "alias": "steps"; "required": true; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; "backLabel": { "alias": "backLabel"; "required": false; "isSignal": true; }; "skipLabel": { "alias": "skipLabel"; "required": false; "isSignal": true; }; "doneLabel": { "alias": "doneLabel"; "required": false; "isSignal": true; }; }, { "active": "activeChange"; "started": "started"; "stepChanged": "stepChanged"; "finished": "finished"; "skipped": "skipped"; }, never, never, true, never>;
4055
+ }
4056
+
3456
4057
  declare class BodyRenderDirective implements OnInit {
3457
4058
  private el;
3458
4059
  private renderer;
@@ -3471,5 +4072,5 @@ declare class DragAndDropDirective {
3471
4072
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DragAndDropDirective, "[uni-drag-n-drop], [dragAndDrop]", never, {}, { "onFileDropped": "onFileDropped"; }, never, never, true, never>;
3472
4073
  }
3473
4074
 
3474
- export { BodyRenderDirective, ConfirmationDialogComponent, DragAndDropDirective, FOCUSABLE_SELECTOR, ListboxNavigation, LocalStorageService, NotificationService, NotificationsComponent, RippleDirective, ThemeService, UNI_THEMES, UniAlertComponent, UniAppBarComponent, UniAvatarComponent, UniAvatarGroupComponent, UniBackgroundComponent, UniBadgeComponent, UniBaseDatasource, UniBoxComponent, UniBreadcrumbComponent, UniButtonComponent, UniButtonGroupComponent, UniCalendarComponent, UniCardComponent, UniCardContentComponent, UniCardHeaderComponent, UniCenterComponent, UniCheckboxComponent, 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, UniWrapComponent, acceptableFile, addDays, addMonths, anchorArrowStyles, anchorStyles, buildMonthGrid, createListboxNavigation, dayOfWeek, daysInMonth, formatDate, formatMonthHeading, formatTime, getFileExtension, inclusiveDayCount, isDivider, isValidDate, isoDate, joinDateTime, localeDatePlaceholder, localeDefaultHour12, localeFieldOrder, localeMonthNames, localeWeekStart, monthOf, motionSafe, newAnchorName, parseDateText, parseTimeText, resolveFocusTarget, splitDateTime, timeSlots, todayIso, uniqueId, useTimer, visuallyHidden, weekdayNames };
3475
- 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, UniAppBarOptions, UniAvatarGroupOptions, UniAvatarOptions, UniBreadcrumbOptions, UniCalendarMarker, UniCalendarMode, UniCalendarOptions, UniCalendarValue, UniCheckboxOptions, UniDataSearchOptions, UniDataTableOptions, UniDatasource, UniDate, UniDateInputOptions, UniDateInputRejection, UniDateRange, UniDateTime, UniDateTimeInputOptions, UniDrawerOptions, UniExpandOptions, UniInputBoxOptions, UniMenuItemOptions, UniMenuOptions, UniMonthGridCell, UniMultiSelectDropdownOptions, UniNotificationBadgeOptions, UniPaginatorOptions, UniRadioOption, UniRadioOptions, UniSearchInputOptions, UniSkeletonOptions, UniSliderOptions, UniStatOptions, UniTabsOptions, UniTagInputOptions, UniTagItem, UniTagOptions, UniTagRejection, UniTagSuggestion, UniTagValue, UniTextareaOptions, UniTime, UniTimeInputOptions, UniTimeInputRejection, UniToggleOptions, UniWeekdayName };
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 };