@uni-design-system/uni-angular 10.4.0 → 11.1.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, MotionToken, StyleExpression, ThemeName, ThemeParseResult, TextRole, ContentColorToken, Size, NullableSize, Thickness, NullableStyleExpression, ColorKey, ColorToken, Typeface, Radius, Motion, Backdrop, OptionalSize, Border, Shadow, ZIndexableElements, OptionalAlignSelf, OptionalAlignItems, OptionalAlignContent, OptionalJustifyContent, OptionalDisplay, OptionalPosition, OptionalOverflow, OptionalFlexDirection, OptionalTextAlign, OptionalWrap, TextColor, TagTone, Elevation, RadiiSize, JustifyContent, Orientation, CssLength, ColorScheme, ColorCategory, ThemeShape, ContrastCheck, Colors, GenerationInput } from '@uni-design-system/uni-core';
4
+ import { IconName, Variant, ContainerColorToken, PaletteConfig, GenerateColorsConfig, Radii, UniTheme, ComponentName, ComponentTheme, MotionToken, StyleExpression, ThemeName, ThemeParseResult, TextRole, ContentColorToken, Size, NullableSize, Thickness, NullableStyleExpression, ColorKey, ColorToken, Typeface, Radius, Motion, Backdrop, OptionalSize, Border, Shadow, ZIndexableElements, OptionalColor, OptionalRadius, OptionalBorder, OptionalAlignSelf, OptionalAlignItems, OptionalAlignContent, OptionalJustifyContent, OptionalDisplay, OptionalPosition, OptionalOverflow, OptionalFlexDirection, OptionalTextAlign, OptionalWrap, TextColor, TagTone, Elevation, RadiiSize, JustifyContent, Orientation, CssLength, ColorScheme, ColorCategory, ThemeShape, ContrastCheck, Colors, GenerationInput } from '@uni-design-system/uni-core';
5
5
  import { FormCheckboxControl, FormValueControl } from '@angular/forms/signals';
6
6
  import * as _uni_design_system_uni_angular from '@uni-design-system/uni-angular';
7
7
  import { CSSObject } from '@emotion/css/create-instance';
@@ -805,7 +805,7 @@ declare abstract class UniBaseDatasource<T> {
805
805
  abstract recordCount: Signal<number>;
806
806
  selections: WritableSignal<T[]>;
807
807
  sort: WritableSignal<Sort<T>>;
808
- sortColumn: Signal<keyof T>;
808
+ sortColumn: Signal<keyof T | undefined>;
809
809
  sortDirection: Signal<SortDirection>;
810
810
  abstract pageIndex: Signal<number>;
811
811
  abstract pageSize: Signal<number>;
@@ -872,7 +872,7 @@ declare class UniServerSideDatasource<T> extends UniBaseDatasource<T> {
872
872
  private _sortColumn;
873
873
  private _sortDirection;
874
874
  private filter;
875
- sortColumn: _angular_core.Signal<keyof T>;
875
+ sortColumn: _angular_core.Signal<keyof T | undefined>;
876
876
  sortDirection: _angular_core.Signal<SortDirection>;
877
877
  private totalRecords;
878
878
  private dataResource;
@@ -883,7 +883,7 @@ declare class UniServerSideDatasource<T> extends UniBaseDatasource<T> {
883
883
  records: _angular_core.Signal<T[]>;
884
884
  recordCount: _angular_core.Signal<number>;
885
885
  isLoading: _angular_core.Signal<boolean>;
886
- error: _angular_core.Signal<Error>;
886
+ error: _angular_core.Signal<Error | undefined>;
887
887
  hasError: _angular_core.Signal<boolean>;
888
888
  constructor(dataLoader: DataLoader<T>, initialPageSize?: number);
889
889
  sortRecords(sort: Sort<T>): void;
@@ -942,13 +942,13 @@ interface Confirmation {
942
942
  }
943
943
 
944
944
  declare class NotificationService {
945
- alert: _angular_core.WritableSignal<Alert>;
945
+ alert: _angular_core.WritableSignal<Alert | undefined>;
946
946
  showAlert: (alert: Alert) => void;
947
947
  hideAlert: () => void;
948
- snackbar: _angular_core.WritableSignal<Snackbar>;
948
+ snackbar: _angular_core.WritableSignal<Snackbar | undefined>;
949
949
  showSnackbar: (snackbar: Snackbar) => void;
950
950
  hideSnackbar: () => void;
951
- confirmation: _angular_core.WritableSignal<Confirmation>;
951
+ confirmation: _angular_core.WritableSignal<Confirmation | undefined>;
952
952
  showConfirmation: (confirmation: Confirmation) => void;
953
953
  hideConfirmation: () => void;
954
954
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NotificationService, never>;
@@ -1054,7 +1054,7 @@ declare class ThemeService {
1054
1054
  /** Remove a registered theme; falls back to the first remaining theme if it was active. */
1055
1055
  unregisterTheme(id: string): void;
1056
1056
  /** The live brand palette config, when a custom theme is active. */
1057
- customPalette: _angular_core.WritableSignal<BrandPaletteConfig>;
1057
+ customPalette: _angular_core.WritableSignal<BrandPaletteConfig | null>;
1058
1058
  isCustomTheme: Signal<boolean>;
1059
1059
  /**
1060
1060
  * Generate a full theme from a brand palette config and make it active. When
@@ -1068,7 +1068,7 @@ declare class ThemeService {
1068
1068
  selectedThemeKey: _angular_core.WritableSignal<string>;
1069
1069
  textClass: (textRole: TextRole, textColor?: ContentColorToken) => string;
1070
1070
  componentStyle: (componentName: ComponentName, variant: Variant, size: Size) => Signal<{
1071
- [x: string]: string | number | StyleExpression;
1071
+ [x: string]: string | number | StyleExpression | undefined;
1072
1072
  }>;
1073
1073
  /**
1074
1074
  * The active variant's roles from a component's `variantOptions` map — the
@@ -1097,7 +1097,7 @@ declare class ThemeService {
1097
1097
  * scale like any other token — it is `0`, not the string `'none'`, which is
1098
1098
  * not a valid length and was silently dropped wherever it landed.
1099
1099
  */
1100
- getSpacing: (size: NullableSize) => string | number;
1100
+ getSpacing: (size: NullableSize) => string | number | undefined;
1101
1101
  private readonly warnedSpacing;
1102
1102
  /**
1103
1103
  * Resolve a spacing token against the active theme.
@@ -1108,12 +1108,12 @@ declare class ThemeService {
1108
1108
  * per token in dev.
1109
1109
  */
1110
1110
  private resolveSpacing;
1111
- getThickness: (thickness: Thickness) => string | number;
1112
- getContentColor: (token: ContainerColorToken, useVariant?: boolean) => string;
1111
+ getThickness: (thickness: Thickness) => string | number | undefined;
1112
+ getContentColor: (token: ContainerColorToken, useVariant?: boolean) => string | undefined;
1113
1113
  colorPair: (token?: ContainerColorToken, colorVariant?: boolean) => NullableStyleExpression;
1114
1114
  backgroundColor: (token?: ColorKey) => NullableStyleExpression;
1115
1115
  backgroundImage: (url?: string) => NullableStyleExpression;
1116
- getContainerColors: (color: Variant, useVariant?: boolean) => StyleExpression;
1116
+ getContainerColors: (color: Variant, useVariant?: boolean) => NullableStyleExpression;
1117
1117
  /**
1118
1118
  * The shared keyboard-focus indicator's styles (WCAG 2.4.7), without a
1119
1119
  * selector — for controls that key the ring off their own state selector
@@ -1130,7 +1130,7 @@ declare class ThemeService {
1130
1130
  * color or `currentColor`.
1131
1131
  */
1132
1132
  focusRingStyle: (color?: string, gap?: string | number) => {
1133
- boxShadow?: string;
1133
+ boxShadow?: string | undefined;
1134
1134
  outline: string;
1135
1135
  outlineOffset: string | number;
1136
1136
  };
@@ -1141,12 +1141,12 @@ declare class ThemeService {
1141
1141
  */
1142
1142
  focusRing: (token?: ColorToken) => {
1143
1143
  '&:focus-visible': {
1144
- boxShadow?: string;
1144
+ boxShadow?: string | undefined;
1145
1145
  outline: string;
1146
1146
  outlineOffset: string | number;
1147
1147
  };
1148
1148
  };
1149
- typeface: (typeface?: Typeface) => _uni_design_system_uni_core.TypeFaceDefinition;
1149
+ typeface: (typeface?: Typeface) => "" | _uni_design_system_uni_core.TypeFaceDefinition | undefined;
1150
1150
  colorPalette: () => Partial<Record<string, string>>;
1151
1151
  color(color?: ColorKey): NullableStyleExpression;
1152
1152
  getDashedBorder(color: ColorKey | undefined, radius: Radius | undefined): NullableStyleExpression;
@@ -1190,14 +1190,14 @@ declare class ThemeService {
1190
1190
  borderLeft(border: Border | undefined): NullableStyleExpression;
1191
1191
  borderRight(border: Border | undefined): NullableStyleExpression;
1192
1192
  boxShadow(shadow: Shadow | undefined): {
1193
- boxShadow: string;
1194
- };
1193
+ boxShadow: string | undefined;
1194
+ } | undefined;
1195
1195
  gap(gap: OptionalSize): NullableStyleExpression;
1196
1196
  zIndex(element: ZIndexableElements | undefined): NullableStyleExpression;
1197
1197
  borderColor(borderColor: ColorToken): NullableStyleExpression;
1198
1198
  getComponentTheme<T, V = object>(componentName: ComponentName): Signal<ComponentTheme<T, V>>;
1199
1199
  getComponentOptions: <T>(componentName: ComponentName) => _angular_core.WritableSignal<T>;
1200
- componentOptions: (componentName: ComponentName) => Signal<unknown>;
1200
+ componentOptions: (componentName: ComponentName) => Signal<{}>;
1201
1201
  style(prop: string, value: string | number | undefined): NullableStyleExpression;
1202
1202
  /**
1203
1203
  * Like {@link style}, but only `undefined` means "unset" — so a meaningful
@@ -1223,10 +1223,10 @@ declare class BaseComponent<T = unknown, V = unknown> {
1223
1223
  * be expressed as a single applied style. Undefined when the theme does not
1224
1224
  * define this variant — which also raises a dev warning.
1225
1225
  */
1226
- variantRoles: _angular_core.Signal<V>;
1226
+ variantRoles: _angular_core.Signal<V | undefined>;
1227
1227
  componentOptions: _angular_core.Signal<T>;
1228
1228
  style: _angular_core.Signal<{
1229
- [x: string]: string | number | _uni_design_system_uni_core.StyleExpression;
1229
+ [x: string]: string | number | _uni_design_system_uni_core.StyleExpression | undefined;
1230
1230
  }>;
1231
1231
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<BaseComponent<any, any>, never>;
1232
1232
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<BaseComponent<any, any>, "ng-component", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -1250,6 +1250,8 @@ interface UniCheckboxVariant {
1250
1250
  onAccent?: ColorKey;
1251
1251
  }
1252
1252
  interface UniCheckboxOptions {
1253
+ /** Named motion primitive for the box, tick and dash transitions. Defaults to `control`. */
1254
+ motion?: Motion;
1253
1255
  size?: string | number;
1254
1256
  borderRadius?: string | number;
1255
1257
  /** Unchecked box background token. */
@@ -1261,6 +1263,13 @@ declare class UniCheckboxComponent extends BaseComponent<UniCheckboxOptions, Uni
1261
1263
  readonly checked: _angular_core.ModelSignal<boolean>;
1262
1264
  readonly disabled: _angular_core.InputSignal<boolean>;
1263
1265
  readonly touched: _angular_core.ModelSignal<boolean>;
1266
+ /**
1267
+ * Angular 22 marks the bound field touched through this output; the
1268
+ * `touched` model above is bound inward by the directive and no longer
1269
+ * propagates back out. Emitted wherever this control already decided
1270
+ * the user was done with it.
1271
+ */
1272
+ readonly touch: _angular_core.OutputEmitterRef<void>;
1264
1273
  readonly invalid: _angular_core.InputSignal<boolean>;
1265
1274
  readonly dirty: _angular_core.InputSignal<boolean>;
1266
1275
  /** Synced from required() validators by the Signal Forms [formField] directive. */
@@ -1271,13 +1280,13 @@ declare class UniCheckboxComponent extends BaseComponent<UniCheckboxOptions, Uni
1271
1280
  * `variant` defaults to `'primary'`, so the component cannot tell "set to
1272
1281
  * primary" from "not set".
1273
1282
  */
1274
- readonly checkedColor: _angular_core.InputSignal<string>;
1283
+ readonly checkedColor: _angular_core.InputSignal<string | undefined>;
1275
1284
  /**
1276
1285
  * Id(s) of external element(s) describing this control — typically your
1277
1286
  * app-rendered error message — exposed as aria-describedby.
1278
1287
  */
1279
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
1280
- readonly label: _angular_core.InputSignal<string>;
1288
+ readonly ariaDescribedBy: _angular_core.InputSignal<string | undefined>;
1289
+ readonly label: _angular_core.InputSignal<string | undefined>;
1281
1290
  /**
1282
1291
  * Mixed state for "select all"-style parent checkboxes. Cleared
1283
1292
  * automatically on the next user interaction, matching native behavior.
@@ -1286,6 +1295,10 @@ declare class UniCheckboxComponent extends BaseComponent<UniCheckboxOptions, Uni
1286
1295
  protected readonly showError: _angular_core.Signal<boolean>;
1287
1296
  markAsTouched(): void;
1288
1297
  handleChange(event: Event): void;
1298
+ /** Resolved from the component's `motion` option; `control` by default. */
1299
+ private readonly motion;
1300
+ /** The tick is drawn rather than switched, so it trails the box. */
1301
+ private readonly drawMotion;
1289
1302
  protected readonly checkboxLabel: _angular_core.Signal<string>;
1290
1303
  protected readonly checkboxInput: _angular_core.Signal<string>;
1291
1304
  /**
@@ -1301,9 +1314,9 @@ declare class UniCheckboxComponent extends BaseComponent<UniCheckboxOptions, Uni
1301
1314
  * default every component inherits.
1302
1315
  */
1303
1316
  private readonly accent;
1304
- protected readonly boxColor: _angular_core.Signal<string>;
1317
+ protected readonly boxColor: _angular_core.Signal<string | undefined>;
1305
1318
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniCheckboxComponent, never>;
1306
- 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; }; "checkedColor": { "alias": "checkedColor"; "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>;
1319
+ 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; }; "checkedColor": { "alias": "checkedColor"; "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"; "touch": "touch"; "indeterminate": "indeterminateChange"; }, never, never, true, never>;
1307
1320
  }
1308
1321
 
1309
1322
  /** A commit was refused (no match); the field reverted to the committed label. */
@@ -1343,16 +1356,23 @@ interface UniComboboxOptions {
1343
1356
  * value contract is identical, so swapping is a template-only change.
1344
1357
  */
1345
1358
  declare class UniComboboxComponent<T> extends BaseComponent<UniComboboxOptions> implements FormValueControl<T | null> {
1346
- readonly value: _angular_core.ModelSignal<T>;
1359
+ readonly value: _angular_core.ModelSignal<T | null>;
1347
1360
  readonly disabled: _angular_core.InputSignal<boolean>;
1348
1361
  readonly touched: _angular_core.ModelSignal<boolean>;
1362
+ /**
1363
+ * Angular 22 marks the bound field touched through this output; the
1364
+ * `touched` model above is bound inward by the directive and no longer
1365
+ * propagates back out. Emitted wherever this control already decided
1366
+ * the user was done with it.
1367
+ */
1368
+ readonly touch: _angular_core.OutputEmitterRef<void>;
1349
1369
  readonly invalid: _angular_core.InputSignal<boolean>;
1350
1370
  readonly dirty: _angular_core.InputSignal<boolean>;
1351
1371
  readonly required: _angular_core.InputSignal<boolean>;
1352
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
1372
+ readonly ariaDescribedBy: _angular_core.InputSignal<string | undefined>;
1353
1373
  /** Accessible name for the field, e.g. "State"; echoed on the listbox. */
1354
1374
  label: _angular_core.InputSignal<string>;
1355
- placeholder: _angular_core.InputSignal<string>;
1375
+ placeholder: _angular_core.InputSignal<string | undefined>;
1356
1376
  options: _angular_core.InputSignal<Options<T>>;
1357
1377
  /**
1358
1378
  * Equality used to match `value` against option values, called as
@@ -1372,7 +1392,7 @@ declare class UniComboboxComponent<T> extends BaseComponent<UniComboboxOptions>
1372
1392
  /** `false` renders `options` verbatim; narrow them app-side from `query`. */
1373
1393
  filterLocally: _angular_core.InputSignal<boolean>;
1374
1394
  /** Filter predicate; default is locale-lowercased label-contains. */
1375
- filterWith: _angular_core.InputSignal<(option: Option<T>, query: string) => boolean>;
1395
+ filterWith: _angular_core.InputSignal<((option: Option<T>, query: string) => boolean) | undefined>;
1376
1396
  debounceTime: _angular_core.InputSignal<number>;
1377
1397
  /** Debounced draft text, for async option lists. */
1378
1398
  query: _angular_core.OutputEmitterRef<string>;
@@ -1389,13 +1409,13 @@ declare class UniComboboxComponent<T> extends BaseComponent<UniComboboxOptions>
1389
1409
  /** Ties the popup to the field so the browser tracks it in the top layer. */
1390
1410
  private readonly anchor;
1391
1411
  /** `manual` where the top layer is usable, else null — see the popup helper. */
1392
- protected readonly popupAttr: "manual";
1412
+ protected readonly popupAttr: "manual" | null;
1393
1413
  constructor();
1394
1414
  protected readonly srOnly: string;
1395
1415
  /** Commits, clears and refusals are otherwise silent to a screen reader. */
1396
1416
  protected readonly announcer: _uni_design_system_uni_angular.Announcer;
1397
1417
  /** null → the field shows the committed label; a string is an uncommitted draft. */
1398
- protected readonly draft: _angular_core.WritableSignal<string>;
1418
+ protected readonly draft: _angular_core.WritableSignal<string | null>;
1399
1419
  /**
1400
1420
  * Popup visibility. Component-owned rather than `list.open()` — the shared
1401
1421
  * signal gates on `count() > 0`, which would hide the "No matches" row and
@@ -1444,6 +1464,8 @@ declare class UniComboboxComponent<T> extends BaseComponent<UniComboboxOptions>
1444
1464
  private closeList;
1445
1465
  private scrollToActive;
1446
1466
  private setFieldText;
1467
+ /** The chevron turns with the popup it opens, so both read one token. */
1468
+ private readonly chevronMotion;
1447
1469
  protected readonly className: _angular_core.Signal<string>;
1448
1470
  protected readonly rowClass: _angular_core.Signal<string>;
1449
1471
  protected readonly inputClass: _angular_core.Signal<string>;
@@ -1452,7 +1474,7 @@ declare class UniComboboxComponent<T> extends BaseComponent<UniComboboxOptions>
1452
1474
  protected readonly toggleClass: _angular_core.Signal<string>;
1453
1475
  protected readonly listClass: _angular_core.Signal<string>;
1454
1476
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniComboboxComponent<any>, never>;
1455
- 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>;
1477
+ 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"; "touch": "touch"; "query": "query"; "selected": "selected"; "cleared": "cleared"; "rejected": "rejected"; }, never, never, true, never>;
1456
1478
  }
1457
1479
 
1458
1480
  type UniCalendarMode = 'single' | 'range';
@@ -1481,8 +1503,8 @@ interface UniCalendarOptions {
1481
1503
  typeface?: Typeface;
1482
1504
  /** Grid gutter. */
1483
1505
  gap?: NullableSize;
1484
- navPrevSymbol?: string;
1485
- navNextSymbol?: string;
1506
+ navPrevIcon?: IconName;
1507
+ navNextIcon?: IconName;
1486
1508
  /** Intl weekday column format. */
1487
1509
  weekdayFormat?: 'narrow' | 'short';
1488
1510
  /** Show the adjacent months' days, muted and non-interactive. */
@@ -1502,7 +1524,7 @@ interface UniDateInputRejection {
1502
1524
  * affordance and panel only.
1503
1525
  */
1504
1526
  interface UniDateInputOptions {
1505
- toggleSymbol?: string;
1527
+ toggleIcon?: IconName;
1506
1528
  popupShadow?: Shadow;
1507
1529
  popupBorderRadius?: Radius;
1508
1530
  popupColor?: ContainerColorToken;
@@ -1517,31 +1539,38 @@ interface UniDateInputOptions {
1517
1539
  * native popover hosting the same `uni-calendar` an app could render inline.
1518
1540
  */
1519
1541
  declare class UniDateInputComponent extends BaseComponent<UniDateInputOptions> implements FormValueControl<UniDate | undefined> {
1520
- readonly value: _angular_core.ModelSignal<string>;
1542
+ readonly value: _angular_core.ModelSignal<string | undefined>;
1521
1543
  readonly disabled: _angular_core.InputSignal<boolean>;
1522
1544
  readonly touched: _angular_core.ModelSignal<boolean>;
1545
+ /**
1546
+ * Angular 22 marks the bound field touched through this output; the
1547
+ * `touched` model above is bound inward by the directive and no longer
1548
+ * propagates back out. Emitted wherever this control already decided
1549
+ * the user was done with it.
1550
+ */
1551
+ readonly touch: _angular_core.OutputEmitterRef<void>;
1523
1552
  readonly invalid: _angular_core.InputSignal<boolean>;
1524
1553
  readonly dirty: _angular_core.InputSignal<boolean>;
1525
1554
  readonly required: _angular_core.InputSignal<boolean>;
1526
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
1555
+ readonly ariaDescribedBy: _angular_core.InputSignal<string | undefined>;
1527
1556
  /** Accessible name for the field, e.g. "Appointment date". */
1528
1557
  label: _angular_core.InputSignal<string>;
1529
1558
  /** Defaults to the locale's digit pattern, e.g. `MM/DD/YYYY`. */
1530
- placeholder: _angular_core.InputSignal<string>;
1559
+ placeholder: _angular_core.InputSignal<string | undefined>;
1531
1560
  /** How the committed value renders, e.g. `{ dateStyle: 'long' }`. */
1532
1561
  displayFormat: _angular_core.InputSignal<Intl.DateTimeFormatOptions>;
1533
1562
  /** BCP 47 tag; defaults to the document language, then the browser's. */
1534
- locale: _angular_core.InputSignal<string>;
1563
+ locale: _angular_core.InputSignal<string | undefined>;
1535
1564
  commitOnBlur: _angular_core.InputSignal<boolean>;
1536
1565
  /** Custom parser, replacing the built-in ISO/locale/month-name parsing. */
1537
- parse: _angular_core.InputSignal<(raw: string, locale: string) => UniDate | null>;
1566
+ parse: _angular_core.InputSignal<((raw: string, locale: string) => UniDate | null) | undefined>;
1538
1567
  /** Renders without its own input-box chrome, for composers like uni-date-time-input. */
1539
1568
  embedded: _angular_core.InputSignal<boolean>;
1540
- minDate: _angular_core.InputSignal<string>;
1541
- maxDate: _angular_core.InputSignal<string>;
1542
- disabledDates: _angular_core.InputSignal<string[] | ((date: UniDate) => boolean)>;
1569
+ minDate: _angular_core.InputSignal<string | undefined>;
1570
+ maxDate: _angular_core.InputSignal<string | undefined>;
1571
+ disabledDates: _angular_core.InputSignal<string[] | ((date: UniDate) => boolean) | undefined>;
1543
1572
  markers: _angular_core.InputSignal<UniCalendarMarker[]>;
1544
- weekStart: _angular_core.InputSignal<0 | 1 | 2 | 3 | 4 | 5 | 6>;
1573
+ weekStart: _angular_core.InputSignal<0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined>;
1545
1574
  /** Popup shown. */
1546
1575
  opened: _angular_core.OutputEmitterRef<void>;
1547
1576
  /** Popup hidden. */
@@ -1591,7 +1620,7 @@ declare class UniDateInputComponent extends BaseComponent<UniDateInputOptions> i
1591
1620
  /** Embedded mode: the composer owns the box; keep only the flex row. */
1592
1621
  protected readonly embeddedClass: _angular_core.Signal<string>;
1593
1622
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniDateInputComponent, never>;
1594
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDateInputComponent, "uni-date-input, DateInput", 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; }; "displayFormat": { "alias": "displayFormat"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "commitOnBlur": { "alias": "commitOnBlur"; "required": false; "isSignal": true; }; "parse": { "alias": "parse"; "required": false; "isSignal": true; }; "embedded": { "alias": "embedded"; "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; }; "weekStart": { "alias": "weekStart"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "opened": "opened"; "closed": "closed"; "rejected": "rejected"; }, never, never, true, never>;
1623
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDateInputComponent, "uni-date-input, DateInput", 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; }; "displayFormat": { "alias": "displayFormat"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "commitOnBlur": { "alias": "commitOnBlur"; "required": false; "isSignal": true; }; "parse": { "alias": "parse"; "required": false; "isSignal": true; }; "embedded": { "alias": "embedded"; "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; }; "weekStart": { "alias": "weekStart"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "touch": "touch"; "opened": "opened"; "closed": "closed"; "rejected": "rejected"; }, never, never, true, never>;
1595
1624
  }
1596
1625
 
1597
1626
  /**
@@ -1616,29 +1645,36 @@ interface UniDateTimeInputOptions {
1616
1645
  * different arrangement compose the primitives directly.
1617
1646
  */
1618
1647
  declare class UniDateTimeInputComponent extends BaseComponent<UniDateTimeInputOptions> implements FormValueControl<UniDateTime | undefined> {
1619
- readonly value: _angular_core.ModelSignal<string>;
1648
+ readonly value: _angular_core.ModelSignal<string | undefined>;
1620
1649
  readonly disabled: _angular_core.InputSignal<boolean>;
1621
1650
  readonly touched: _angular_core.ModelSignal<boolean>;
1651
+ /**
1652
+ * Angular 22 marks the bound field touched through this output; the
1653
+ * `touched` model above is bound inward by the directive and no longer
1654
+ * propagates back out. Emitted wherever this control already decided
1655
+ * the user was done with it.
1656
+ */
1657
+ readonly touch: _angular_core.OutputEmitterRef<void>;
1622
1658
  readonly invalid: _angular_core.InputSignal<boolean>;
1623
1659
  readonly dirty: _angular_core.InputSignal<boolean>;
1624
1660
  readonly required: _angular_core.InputSignal<boolean>;
1625
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
1661
+ readonly ariaDescribedBy: _angular_core.InputSignal<string | undefined>;
1626
1662
  /** Names the group; the parts are announced as "Date" and "Time" under it. */
1627
1663
  label: _angular_core.InputSignal<string>;
1628
1664
  /** Earliest allowed moment; the date and time fences are split from it. */
1629
- minDateTime: _angular_core.InputSignal<string>;
1665
+ minDateTime: _angular_core.InputSignal<string | undefined>;
1630
1666
  /** Latest allowed moment; the date and time fences are split from it. */
1631
- maxDateTime: _angular_core.InputSignal<string>;
1632
- disabledDates: _angular_core.InputSignal<string[] | ((date: UniDate) => boolean)>;
1667
+ maxDateTime: _angular_core.InputSignal<string | undefined>;
1668
+ disabledDates: _angular_core.InputSignal<string[] | ((date: UniDate) => boolean) | undefined>;
1633
1669
  markers: _angular_core.InputSignal<UniCalendarMarker[]>;
1634
1670
  /** Fixed time choices; superseded per-day by `slotsFor` when that is set. */
1635
- slots: _angular_core.InputSignal<string[]>;
1671
+ slots: _angular_core.InputSignal<string[] | undefined>;
1636
1672
  minuteStep: _angular_core.InputSignal<number>;
1637
- hour12: _angular_core.InputSignal<boolean>;
1638
- weekStart: _angular_core.InputSignal<0 | 1 | 2 | 3 | 4 | 5 | 6>;
1639
- locale: _angular_core.InputSignal<string>;
1673
+ hour12: _angular_core.InputSignal<boolean | undefined>;
1674
+ weekStart: _angular_core.InputSignal<0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined>;
1675
+ locale: _angular_core.InputSignal<string | undefined>;
1640
1676
  /** Scheduling: the day's available times. Gates the time part on a date. */
1641
- slotsFor: _angular_core.InputSignal<(date: UniDate) => UniTime[]>;
1677
+ slotsFor: _angular_core.InputSignal<((date: UniDate) => UniTime[]) | undefined>;
1642
1678
  private readonly host;
1643
1679
  /**
1644
1680
  * The two part-values. An external `value` write re-derives both; an
@@ -1646,17 +1682,17 @@ declare class UniDateTimeInputComponent extends BaseComponent<UniDateTimeInputOp
1646
1682
  * `undefined`) must not be wiped by its own echo.
1647
1683
  */
1648
1684
  private readonly parts;
1649
- protected readonly dateValue: _angular_core.Signal<string>;
1650
- protected readonly timeValue: _angular_core.Signal<string>;
1685
+ protected readonly dateValue: _angular_core.Signal<string | undefined>;
1686
+ protected readonly timeValue: _angular_core.Signal<string | undefined>;
1651
1687
  protected readonly showError: _angular_core.Signal<boolean>;
1652
1688
  private readonly minParts;
1653
1689
  private readonly maxParts;
1654
- protected readonly dateMin: _angular_core.Signal<string>;
1655
- protected readonly dateMax: _angular_core.Signal<string>;
1656
- protected readonly timeMin: _angular_core.Signal<string>;
1657
- protected readonly timeMax: _angular_core.Signal<string>;
1690
+ protected readonly dateMin: _angular_core.Signal<string | undefined>;
1691
+ protected readonly dateMax: _angular_core.Signal<string | undefined>;
1692
+ protected readonly timeMin: _angular_core.Signal<string | undefined>;
1693
+ protected readonly timeMax: _angular_core.Signal<string | undefined>;
1658
1694
  /** The chosen day's slots when `slotsFor` is set, else the fixed list. */
1659
- protected readonly effectiveSlots: _angular_core.Signal<string[]>;
1695
+ protected readonly effectiveSlots: _angular_core.Signal<string[] | undefined>;
1660
1696
  protected readonly timeDisabled: _angular_core.Signal<boolean>;
1661
1697
  protected onDatePartChange(date: UniDate | undefined): void;
1662
1698
  protected onTimePartChange(time: UniTime | undefined): void;
@@ -1668,7 +1704,7 @@ declare class UniDateTimeInputComponent extends BaseComponent<UniDateTimeInputOp
1668
1704
  protected readonly timePartClass: _angular_core.Signal<string>;
1669
1705
  protected readonly dividerClass: _angular_core.Signal<string>;
1670
1706
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniDateTimeInputComponent, never>;
1671
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDateTimeInputComponent, "uni-date-time-input, DateTimeInput", 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; }; "minDateTime": { "alias": "minDateTime"; "required": false; "isSignal": true; }; "maxDateTime": { "alias": "maxDateTime"; "required": false; "isSignal": true; }; "disabledDates": { "alias": "disabledDates"; "required": false; "isSignal": true; }; "markers": { "alias": "markers"; "required": false; "isSignal": true; }; "slots": { "alias": "slots"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; "hour12": { "alias": "hour12"; "required": false; "isSignal": true; }; "weekStart": { "alias": "weekStart"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "slotsFor": { "alias": "slotsFor"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
1707
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDateTimeInputComponent, "uni-date-time-input, DateTimeInput", 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; }; "minDateTime": { "alias": "minDateTime"; "required": false; "isSignal": true; }; "maxDateTime": { "alias": "maxDateTime"; "required": false; "isSignal": true; }; "disabledDates": { "alias": "disabledDates"; "required": false; "isSignal": true; }; "markers": { "alias": "markers"; "required": false; "isSignal": true; }; "slots": { "alias": "slots"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; "hour12": { "alias": "hour12"; "required": false; "isSignal": true; }; "weekStart": { "alias": "weekStart"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "slotsFor": { "alias": "slotsFor"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "touch": "touch"; }, never, never, true, never>;
1672
1708
  }
1673
1709
 
1674
1710
  interface UniInputBoxOptions {
@@ -1701,10 +1737,10 @@ declare class UniInputBoxComponent extends BaseComponent<UniInputBoxOptions> {
1701
1737
  error: _angular_core.InputSignal<boolean>;
1702
1738
  minWidth: _angular_core.InputSignal<string>;
1703
1739
  /** Override the themed field height, e.g. `'auto'` for multi-line fields. */
1704
- height: _angular_core.InputSignal<string | number>;
1705
- width: _angular_core.InputSignal<string | number>;
1740
+ height: _angular_core.InputSignal<string | number | undefined>;
1741
+ width: _angular_core.InputSignal<string | number | undefined>;
1706
1742
  fullWidth: _angular_core.InputSignal<boolean>;
1707
- grow: _angular_core.InputSignal<number>;
1743
+ grow: _angular_core.InputSignal<number | undefined>;
1708
1744
  /**
1709
1745
  * Stop applying the themed leading inset to the inner control, for fields
1710
1746
  * that place it themselves.
@@ -1718,10 +1754,10 @@ declare class UniInputBoxComponent extends BaseComponent<UniInputBoxOptions> {
1718
1754
  managedInset: _angular_core.InputSignal<boolean>;
1719
1755
  /** Auto-height fields (tag input, textarea) still keep the themed height as
1720
1756
  a floor, so a single-line field lines up with every other input. */
1721
- protected readonly minHeight: _angular_core.Signal<string | number>;
1757
+ protected readonly minHeight: _angular_core.Signal<string | number | undefined>;
1722
1758
  protected readonly color: _angular_core.Signal<_uni_design_system_uni_core.ContainerColorToken>;
1723
1759
  protected readonly border: _angular_core.Signal<string>;
1724
- protected readonly shadow: _angular_core.Signal<string>;
1760
+ protected readonly shadow: _angular_core.Signal<string | undefined>;
1725
1761
  protected readonly inputBoxClass: _angular_core.Signal<string>;
1726
1762
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniInputBoxComponent, never>;
1727
1763
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniInputBoxComponent, "uni-input-box", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "minWidth": { "alias": "minWidth"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "grow": { "alias": "grow"; "required": false; "isSignal": true; }; "managedInset": { "alias": "managedInset"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
@@ -1745,6 +1781,13 @@ declare class UniInputComponent implements FormValueControl<string> {
1745
1781
  readonly value: _angular_core.ModelSignal<string>;
1746
1782
  readonly disabled: _angular_core.InputSignal<boolean>;
1747
1783
  readonly touched: _angular_core.ModelSignal<boolean>;
1784
+ /**
1785
+ * Angular 22 marks the bound field touched through this output; the
1786
+ * `touched` model above is bound inward by the directive and no longer
1787
+ * propagates back out. Emitted wherever this control already decided
1788
+ * the user was done with it.
1789
+ */
1790
+ readonly touch: _angular_core.OutputEmitterRef<void>;
1748
1791
  readonly invalid: _angular_core.InputSignal<boolean>;
1749
1792
  readonly dirty: _angular_core.InputSignal<boolean>;
1750
1793
  /** Synced from required() validators by the Signal Forms [formField] directive. */
@@ -1753,7 +1796,7 @@ declare class UniInputComponent implements FormValueControl<string> {
1753
1796
  * Id(s) of external element(s) describing this control — typically your
1754
1797
  * app-rendered error message — exposed as aria-describedby.
1755
1798
  */
1756
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
1799
+ readonly ariaDescribedBy: _angular_core.InputSignal<string | undefined>;
1757
1800
  label: _angular_core.InputSignal<string>;
1758
1801
  placeholder: _angular_core.InputSignal<string>;
1759
1802
  /**
@@ -1763,10 +1806,10 @@ declare class UniInputComponent implements FormValueControl<string> {
1763
1806
  type: _angular_core.InputSignal<UniInputType>;
1764
1807
  readonly readonly: _angular_core.InputSignal<boolean>;
1765
1808
  readonly name: _angular_core.InputSignal<string>;
1766
- readonly min: _angular_core.InputSignal<number>;
1767
- readonly max: _angular_core.InputSignal<number>;
1768
- readonly minLength: _angular_core.InputSignal<number>;
1769
- readonly maxLength: _angular_core.InputSignal<number>;
1809
+ readonly minAttr: _angular_core.InputSignal<number | undefined>;
1810
+ readonly maxAttr: _angular_core.InputSignal<number | undefined>;
1811
+ readonly minLength: _angular_core.InputSignal<number | undefined>;
1812
+ readonly maxLength: _angular_core.InputSignal<number | undefined>;
1770
1813
  /**
1771
1814
  * Patterns the value must match — all of them, per Signal Forms. The native
1772
1815
  * `pattern` attribute can only express one, so it is reflected only when
@@ -1774,25 +1817,25 @@ declare class UniInputComponent implements FormValueControl<string> {
1774
1817
  */
1775
1818
  readonly pattern: _angular_core.InputSignal<readonly RegExp[]>;
1776
1819
  /** Granularity for `type="number"`, e.g. `0.01` or `'any'`. */
1777
- step: _angular_core.InputSignal<string | number>;
1820
+ step: _angular_core.InputSignal<string | number | undefined>;
1778
1821
  /** Autofill hint, e.g. `email`, `current-password`, `off`. */
1779
- autocomplete: _angular_core.InputSignal<string>;
1822
+ autocomplete: _angular_core.InputSignal<string | undefined>;
1780
1823
  /** On-screen keyboard hint; defaults to whatever `type` implies. */
1781
- inputMode: _angular_core.InputSignal<UniInputMode>;
1824
+ inputMode: _angular_core.InputSignal<UniInputMode | undefined>;
1782
1825
  /** Id of a `<datalist>` supplying suggestions. */
1783
- list: _angular_core.InputSignal<string>;
1784
- spellcheck: _angular_core.InputSignal<boolean>;
1826
+ list: _angular_core.InputSignal<string | undefined>;
1827
+ spellcheck: _angular_core.InputSignal<boolean | undefined>;
1785
1828
  /** Reflected only when unambiguous — see `pattern`. */
1786
- protected readonly nativePattern: _angular_core.Signal<string>;
1787
- width: _angular_core.InputSignal<string | number>;
1829
+ protected readonly nativePattern: _angular_core.Signal<string | null>;
1830
+ width: _angular_core.InputSignal<string | number | undefined>;
1788
1831
  fullWidth: _angular_core.InputSignal<boolean>;
1789
- grow: _angular_core.InputSignal<number>;
1832
+ grow: _angular_core.InputSignal<number | undefined>;
1790
1833
  protected readonly showError: _angular_core.Signal<boolean>;
1791
1834
  markAsTouched(): void;
1792
1835
  handleInput(event: Event): void;
1793
1836
  inputClass: string;
1794
1837
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniInputComponent, never>;
1795
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniInputComponent, "uni-input", 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; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "pattern": { "alias": "pattern"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "inputMode": { "alias": "inputMode"; "required": false; "isSignal": true; }; "list": { "alias": "list"; "required": false; "isSignal": true; }; "spellcheck": { "alias": "spellcheck"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "grow": { "alias": "grow"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, ["pre-input, [pre-input]", "post-input, [post-input]"], true, never>;
1838
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniInputComponent, "uni-input", 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; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "minAttr": { "alias": "min"; "required": false; "isSignal": true; }; "maxAttr": { "alias": "max"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "pattern": { "alias": "pattern"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "inputMode": { "alias": "inputMode"; "required": false; "isSignal": true; }; "list": { "alias": "list"; "required": false; "isSignal": true; }; "spellcheck": { "alias": "spellcheck"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "grow": { "alias": "grow"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "touch": "touch"; }, never, ["pre-input, [pre-input]", "post-input, [post-input]"], true, never>;
1796
1839
  }
1797
1840
 
1798
1841
  /**
@@ -1819,13 +1862,13 @@ declare class UniBoxDirective {
1819
1862
  * `color` binding would feed both: the box would paint the surface and the
1820
1863
  * text would take the same token, rendering ink on identical ink.
1821
1864
  */
1822
- containerColor: _angular_core.InputSignal<ContainerColorToken>;
1823
- backgroundColor: _angular_core.InputSignal<string>;
1824
- borderRadius: _angular_core.InputSignal<string>;
1825
- borderRadiusLeft: _angular_core.InputSignal<string>;
1826
- borderRadiusRight: _angular_core.InputSignal<string>;
1827
- borderRadiusTop: _angular_core.InputSignal<string>;
1828
- borderRadiusBottom: _angular_core.InputSignal<string>;
1865
+ containerColor: _angular_core.InputSignal<ContainerColorToken | undefined>;
1866
+ backgroundColor: _angular_core.InputSignal<OptionalColor>;
1867
+ borderRadius: _angular_core.InputSignal<OptionalRadius>;
1868
+ borderRadiusLeft: _angular_core.InputSignal<OptionalRadius>;
1869
+ borderRadiusRight: _angular_core.InputSignal<OptionalRadius>;
1870
+ borderRadiusTop: _angular_core.InputSignal<OptionalRadius>;
1871
+ borderRadiusBottom: _angular_core.InputSignal<OptionalRadius>;
1829
1872
  padding: _angular_core.InputSignal<OptionalSize>;
1830
1873
  paddingHorizontal: _angular_core.InputSignal<OptionalSize>;
1831
1874
  paddingVertical: _angular_core.InputSignal<OptionalSize>;
@@ -1833,56 +1876,56 @@ declare class UniBoxDirective {
1833
1876
  paddingRight: _angular_core.InputSignal<OptionalSize>;
1834
1877
  paddingTop: _angular_core.InputSignal<OptionalSize>;
1835
1878
  paddingBottom: _angular_core.InputSignal<OptionalSize>;
1836
- border: _angular_core.InputSignal<string>;
1837
- borderTop: _angular_core.InputSignal<string>;
1838
- borderBottom: _angular_core.InputSignal<string>;
1839
- borderLeft: _angular_core.InputSignal<string>;
1840
- borderRight: _angular_core.InputSignal<string>;
1879
+ border: _angular_core.InputSignal<OptionalBorder>;
1880
+ borderTop: _angular_core.InputSignal<OptionalBorder>;
1881
+ borderBottom: _angular_core.InputSignal<OptionalBorder>;
1882
+ borderLeft: _angular_core.InputSignal<OptionalBorder>;
1883
+ borderRight: _angular_core.InputSignal<OptionalBorder>;
1841
1884
  dashBorder: _angular_core.InputSignal<boolean>;
1842
1885
  alignSelf: _angular_core.InputSignal<OptionalAlignSelf>;
1843
1886
  alignItems: _angular_core.InputSignal<OptionalAlignItems>;
1844
1887
  alignContent: _angular_core.InputSignal<OptionalAlignContent>;
1845
1888
  justifyContent: _angular_core.InputSignal<OptionalJustifyContent>;
1846
- grow: _angular_core.InputSignal<number>;
1889
+ grow: _angular_core.InputSignal<number | undefined>;
1847
1890
  /**
1848
1891
  * The `flex` shorthand. `[flex]="1"` is `flex: 1` — grow, shrink and a zero
1849
1892
  * basis — which `grow` alone cannot express, since it leaves
1850
1893
  * `flex-basis: auto`. Wins over `grow` when both are set.
1851
1894
  */
1852
- flex: _angular_core.InputSignal<string | number>;
1853
- shrink: _angular_core.InputSignal<number>;
1854
- basis: _angular_core.InputSignal<string | number>;
1895
+ flex: _angular_core.InputSignal<string | number | undefined>;
1896
+ shrink: _angular_core.InputSignal<number | undefined>;
1897
+ basis: _angular_core.InputSignal<string | number | undefined>;
1855
1898
  /**
1856
1899
  * Inline-axis margin. `marginInline="auto"` centers a `maxWidth` container —
1857
1900
  * the one thing flex centering cannot do without an extra wrapper. Only the
1858
1901
  * inline axis is exposed: block margins collapse and fight `gap`, which is
1859
1902
  * why the primitives carry no margin otherwise.
1860
1903
  */
1861
- marginInline: _angular_core.InputSignal<"auto" | NullableSize>;
1904
+ marginInline: _angular_core.InputSignal<"auto" | NullableSize | undefined>;
1862
1905
  display: _angular_core.InputSignal<OptionalDisplay>;
1863
1906
  position: _angular_core.InputSignal<OptionalPosition>;
1864
- inset: _angular_core.InputSignal<string | number>;
1907
+ inset: _angular_core.InputSignal<string | number | undefined>;
1865
1908
  /** Number = px via binding (`[height]="420"`); string = CSS length (`height="420px"`). */
1866
- height: _angular_core.InputSignal<string | number>;
1867
- minHeight: _angular_core.InputSignal<string | number>;
1868
- maxHeight: _angular_core.InputSignal<string | number>;
1909
+ height: _angular_core.InputSignal<string | number | undefined>;
1910
+ minHeight: _angular_core.InputSignal<string | number | undefined>;
1911
+ maxHeight: _angular_core.InputSignal<string | number | undefined>;
1869
1912
  /** Number = px via binding (`[width]="420"`); string = CSS length (`width="50%"`). */
1870
- width: _angular_core.InputSignal<string | number>;
1871
- minWidth: _angular_core.InputSignal<string | number>;
1872
- maxWidth: _angular_core.InputSignal<string | number>;
1913
+ width: _angular_core.InputSignal<string | number | undefined>;
1914
+ minWidth: _angular_core.InputSignal<string | number | undefined>;
1915
+ maxWidth: _angular_core.InputSignal<string | number | undefined>;
1873
1916
  ignoreDir: _angular_core.InputSignal<boolean>;
1874
- gridArea: _angular_core.InputSignal<string>;
1875
- gridColumn: _angular_core.InputSignal<string>;
1876
- gridRow: _angular_core.InputSignal<string>;
1917
+ gridArea: _angular_core.InputSignal<string | undefined>;
1918
+ gridColumn: _angular_core.InputSignal<string | undefined>;
1919
+ gridRow: _angular_core.InputSignal<string | undefined>;
1877
1920
  overflow: _angular_core.InputSignal<OptionalOverflow>;
1878
- shadow: _angular_core.InputSignal<string>;
1921
+ shadow: _angular_core.InputSignal<string | undefined>;
1879
1922
  gap: _angular_core.InputSignal<OptionalSize>;
1880
- fullWidth: _angular_core.InputSignal<boolean>;
1881
- fullHeight: _angular_core.InputSignal<boolean>;
1923
+ fullWidth: _angular_core.InputSignal<boolean | undefined>;
1924
+ fullHeight: _angular_core.InputSignal<boolean | undefined>;
1882
1925
  flexDirection: _angular_core.InputSignal<OptionalFlexDirection>;
1883
1926
  textAlign: _angular_core.InputSignal<OptionalTextAlign>;
1884
1927
  wrapItems: _angular_core.InputSignal<OptionalWrap>;
1885
- zIndex: _angular_core.InputSignal<ZIndexableElements>;
1928
+ zIndex: _angular_core.InputSignal<ZIndexableElements | undefined>;
1886
1929
  protected readonly boxClassName: _angular_core.Signal<string>;
1887
1930
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniBoxDirective, never>;
1888
1931
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UniBoxDirective, "[uni-box-layout], [box-layout]", never, { "containerColor": { "alias": "containerColor"; "required": false; "isSignal": true; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; "isSignal": true; }; "borderRadius": { "alias": "borderRadius"; "required": false; "isSignal": true; }; "borderRadiusLeft": { "alias": "borderRadiusLeft"; "required": false; "isSignal": true; }; "borderRadiusRight": { "alias": "borderRadiusRight"; "required": false; "isSignal": true; }; "borderRadiusTop": { "alias": "borderRadiusTop"; "required": false; "isSignal": true; }; "borderRadiusBottom": { "alias": "borderRadiusBottom"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; "paddingHorizontal": { "alias": "paddingHorizontal"; "required": false; "isSignal": true; }; "paddingVertical": { "alias": "paddingVertical"; "required": false; "isSignal": true; }; "paddingLeft": { "alias": "paddingLeft"; "required": false; "isSignal": true; }; "paddingRight": { "alias": "paddingRight"; "required": false; "isSignal": true; }; "paddingTop": { "alias": "paddingTop"; "required": false; "isSignal": true; }; "paddingBottom": { "alias": "paddingBottom"; "required": false; "isSignal": true; }; "border": { "alias": "border"; "required": false; "isSignal": true; }; "borderTop": { "alias": "borderTop"; "required": false; "isSignal": true; }; "borderBottom": { "alias": "borderBottom"; "required": false; "isSignal": true; }; "borderLeft": { "alias": "borderLeft"; "required": false; "isSignal": true; }; "borderRight": { "alias": "borderRight"; "required": false; "isSignal": true; }; "dashBorder": { "alias": "dashBorder"; "required": false; "isSignal": true; }; "alignSelf": { "alias": "alignSelf"; "required": false; "isSignal": true; }; "alignItems": { "alias": "alignItems"; "required": false; "isSignal": true; }; "alignContent": { "alias": "alignContent"; "required": false; "isSignal": true; }; "justifyContent": { "alias": "justifyContent"; "required": false; "isSignal": true; }; "grow": { "alias": "grow"; "required": false; "isSignal": true; }; "flex": { "alias": "flex"; "required": false; "isSignal": true; }; "shrink": { "alias": "shrink"; "required": false; "isSignal": true; }; "basis": { "alias": "basis"; "required": false; "isSignal": true; }; "marginInline": { "alias": "marginInline"; "required": false; "isSignal": true; }; "display": { "alias": "display"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "inset": { "alias": "inset"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "minHeight": { "alias": "minHeight"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "minWidth": { "alias": "minWidth"; "required": false; "isSignal": true; }; "maxWidth": { "alias": "maxWidth"; "required": false; "isSignal": true; }; "ignoreDir": { "alias": "ignoreDir"; "required": false; "isSignal": true; }; "gridArea": { "alias": "gridArea"; "required": false; "isSignal": true; }; "gridColumn": { "alias": "gridColumn"; "required": false; "isSignal": true; }; "gridRow": { "alias": "gridRow"; "required": false; "isSignal": true; }; "overflow": { "alias": "overflow"; "required": false; "isSignal": true; }; "shadow": { "alias": "shadow"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "fullHeight": { "alias": "fullHeight"; "required": false; "isSignal": true; }; "flexDirection": { "alias": "flexDirection"; "required": false; "isSignal": true; }; "textAlign": { "alias": "textAlign"; "required": false; "isSignal": true; }; "wrapItems": { "alias": "wrapItems"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -1906,11 +1949,11 @@ declare class UniGridAreaDirective {
1906
1949
 
1907
1950
  declare class UniGridDirective extends UniBoxDirective {
1908
1951
  display: _angular_core.InputSignal<OptionalDisplay>;
1909
- templateAreas: _angular_core.InputSignal<string>;
1910
- templateColumns: _angular_core.InputSignal<string>;
1911
- templateRows: _angular_core.InputSignal<string>;
1912
- outline: _angular_core.InputSignal<Thickness>;
1913
- outlineColor: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
1952
+ templateAreas: _angular_core.InputSignal<string | undefined>;
1953
+ templateColumns: _angular_core.InputSignal<string | undefined>;
1954
+ templateRows: _angular_core.InputSignal<string | undefined>;
1955
+ outline: _angular_core.InputSignal<Thickness | undefined>;
1956
+ outlineColor: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry | undefined>;
1914
1957
  protected readonly gridClassName: _angular_core.Signal<string>;
1915
1958
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniGridDirective, never>;
1916
1959
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UniGridDirective, "[uni-grid-layout], [grid-layout]", never, { "display": { "alias": "display"; "required": false; "isSignal": true; }; "templateAreas": { "alias": "templateAreas"; "required": false; "isSignal": true; }; "templateColumns": { "alias": "templateColumns"; "required": false; "isSignal": true; }; "templateRows": { "alias": "templateRows"; "required": false; "isSignal": true; }; "outline": { "alias": "outline"; "required": false; "isSignal": true; }; "outlineColor": { "alias": "outlineColor"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -1924,7 +1967,7 @@ declare class UniRowDirective extends UniBoxDirective {
1924
1967
  * when the row must shrink inside a constrained flex parent (scroll or
1925
1968
  * text truncation containment).
1926
1969
  */
1927
- minWidth: _angular_core.InputSignal<string | number>;
1970
+ minWidth: _angular_core.InputSignal<string | number | undefined>;
1928
1971
  constructor();
1929
1972
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniRowDirective, never>;
1930
1973
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UniRowDirective, "[uni-row-layout], [row-layout]", never, { "display": { "alias": "display"; "required": false; "isSignal": true; }; "flexDirection": { "alias": "flexDirection"; "required": false; "isSignal": true; }; "minWidth": { "alias": "minWidth"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -1938,7 +1981,7 @@ declare class UniStackDirective extends UniBoxDirective {
1938
1981
  * when the stack must shrink inside a constrained flex parent (scroll
1939
1982
  * containment).
1940
1983
  */
1941
- minHeight: _angular_core.InputSignal<string | number>;
1984
+ minHeight: _angular_core.InputSignal<string | number | undefined>;
1942
1985
  constructor();
1943
1986
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniStackDirective, never>;
1944
1987
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UniStackDirective, "[uni-stack-layout], [stack-layout]", never, { "display": { "alias": "display"; "required": false; "isSignal": true; }; "flexDirection": { "alias": "flexDirection"; "required": false; "isSignal": true; }; "minHeight": { "alias": "minHeight"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -1968,6 +2011,13 @@ declare class UniMultiSelectDropdownComponent<T = unknown> extends BaseComponent
1968
2011
  readonly value: _angular_core.ModelSignal<T[]>;
1969
2012
  readonly disabled: _angular_core.InputSignal<boolean>;
1970
2013
  readonly touched: _angular_core.ModelSignal<boolean>;
2014
+ /**
2015
+ * Angular 22 marks the bound field touched through this output; the
2016
+ * `touched` model above is bound inward by the directive and no longer
2017
+ * propagates back out. Emitted wherever this control already decided
2018
+ * the user was done with it.
2019
+ */
2020
+ readonly touch: _angular_core.OutputEmitterRef<void>;
1971
2021
  readonly invalid: _angular_core.InputSignal<boolean>;
1972
2022
  readonly dirty: _angular_core.InputSignal<boolean>;
1973
2023
  /** Synced from required() validators by the Signal Forms [formField] directive. */
@@ -1976,7 +2026,7 @@ declare class UniMultiSelectDropdownComponent<T = unknown> extends BaseComponent
1976
2026
  * Id(s) of external element(s) describing this control — typically your
1977
2027
  * app-rendered error message — exposed as aria-describedby.
1978
2028
  */
1979
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
2029
+ readonly ariaDescribedBy: _angular_core.InputSignal<string | undefined>;
1980
2030
  readonly options: _angular_core.InputSignal<Options<T>>;
1981
2031
  readonly placeholder: _angular_core.InputSignal<string>;
1982
2032
  /**
@@ -1985,7 +2035,7 @@ declare class UniMultiSelectDropdownComponent<T = unknown> extends BaseComponent
1985
2035
  * screen reader announces only the current selection, with no clue which
1986
2036
  * field it belongs to.
1987
2037
  */
1988
- readonly label: _angular_core.InputSignal<string>;
2038
+ readonly label: _angular_core.InputSignal<string | undefined>;
1989
2039
  /** Debounce for the filter box, matching the library's input debounce. */
1990
2040
  readonly debounceTime: _angular_core.InputSignal<number>;
1991
2041
  protected readonly srOnly: string;
@@ -2030,15 +2080,15 @@ declare class UniMultiSelectDropdownComponent<T = unknown> extends BaseComponent
2030
2080
  protected isOptionSelected(option: Option<T>): _angular_core.Signal<boolean>;
2031
2081
  toggleOption(option: Option<T>, checked: boolean): void;
2032
2082
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniMultiSelectDropdownComponent<any>, never>;
2033
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniMultiSelectDropdownComponent<any>, "uni-multi-select-dropdown", 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; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "debounceTime": { "alias": "debounceTime"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
2083
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniMultiSelectDropdownComponent<any>, "uni-multi-select-dropdown", 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; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "debounceTime": { "alias": "debounceTime"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "touch": "touch"; }, never, never, true, never>;
2034
2084
  }
2035
2085
 
2036
2086
  declare class UniMultiSelectComponent<T = unknown> {
2037
2087
  options: _angular_core.InputSignal<Option<T>[]>;
2038
- selections: _angular_core.InputSignal<T[]>;
2039
- updates: _angular_core.OutputEmitterRef<T[]>;
2088
+ selections: _angular_core.InputSignal<T[] | null | undefined>;
2089
+ updates: _angular_core.OutputEmitterRef<T[] | undefined>;
2040
2090
  flexDirection: _angular_core.InputSignal<"column" | "column-reverse" | "row" | "row-reverse">;
2041
- checkboxGap: _angular_core.InputSignal<NullableSize>;
2091
+ checkboxGap: _angular_core.InputSignal<NullableSize | undefined>;
2042
2092
  protected readonly values: _angular_core.Signal<unknown[]>;
2043
2093
  protected readonly optionsWithSelections: _angular_core.Signal<Option<T>[]>;
2044
2094
  protected readonly className: string;
@@ -2091,6 +2141,13 @@ declare class UniRadioComponent extends BaseComponent<UniRadioOptions, UniRadioV
2091
2141
  readonly value: _angular_core.ModelSignal<string>;
2092
2142
  readonly disabled: _angular_core.InputSignal<boolean>;
2093
2143
  readonly touched: _angular_core.ModelSignal<boolean>;
2144
+ /**
2145
+ * Angular 22 marks the bound field touched through this output; the
2146
+ * `touched` model above is bound inward by the directive and no longer
2147
+ * propagates back out. Emitted wherever this control already decided
2148
+ * the user was done with it.
2149
+ */
2150
+ readonly touch: _angular_core.OutputEmitterRef<void>;
2094
2151
  readonly invalid: _angular_core.InputSignal<boolean>;
2095
2152
  readonly dirty: _angular_core.InputSignal<boolean>;
2096
2153
  /** Synced from required() validators by the Signal Forms [formField] directive. */
@@ -2100,14 +2157,14 @@ declare class UniRadioComponent extends BaseComponent<UniRadioOptions, UniRadioV
2100
2157
  * instance. Mirrors the input of the same name on `uni-checkbox` and
2101
2158
  * `uni-toggle`.
2102
2159
  */
2103
- readonly checkedColor: _angular_core.InputSignal<string>;
2160
+ readonly checkedColor: _angular_core.InputSignal<string | undefined>;
2104
2161
  /**
2105
2162
  * Id(s) of external element(s) describing this control — typically your
2106
2163
  * app-rendered error message — exposed as aria-describedby.
2107
2164
  */
2108
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
2165
+ readonly ariaDescribedBy: _angular_core.InputSignal<string | undefined>;
2109
2166
  readonly options: _angular_core.InputSignal<UniRadioOption[]>;
2110
- readonly label: _angular_core.InputSignal<string>;
2167
+ readonly label: _angular_core.InputSignal<string | undefined>;
2111
2168
  readonly name: _angular_core.InputSignal<string>;
2112
2169
  /** Links the group label to the radiogroup container. */
2113
2170
  protected readonly groupLabelId: string;
@@ -2131,7 +2188,7 @@ declare class UniRadioComponent extends BaseComponent<UniRadioOptions, UniRadioV
2131
2188
  private color;
2132
2189
  private readonly accent;
2133
2190
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniRadioComponent, never>;
2134
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniRadioComponent, "uni-radio", 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; }; "checkedColor": { "alias": "checkedColor"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
2191
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniRadioComponent, "uni-radio", 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; }; "checkedColor": { "alias": "checkedColor"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "touch": "touch"; }, never, never, true, never>;
2135
2192
  }
2136
2193
 
2137
2194
  /**
@@ -2143,24 +2200,24 @@ declare class UniRadioComponent extends BaseComponent<UniRadioOptions, UniRadioV
2143
2200
  * element.
2144
2201
  */
2145
2202
  declare class UniDebounceInputComponent {
2146
- inputName: _angular_core.InputSignal<string>;
2147
- inputId: _angular_core.InputSignal<string>;
2203
+ inputName: _angular_core.InputSignal<string | undefined>;
2204
+ inputId: _angular_core.InputSignal<string | undefined>;
2148
2205
  debounceTime: _angular_core.InputSignal<number>;
2149
2206
  /** Accessible name for the input. */
2150
- label: _angular_core.InputSignal<string>;
2207
+ label: _angular_core.InputSignal<string | undefined>;
2151
2208
  placeholder: _angular_core.InputSignal<string>;
2152
2209
  disabled: _angular_core.InputSignal<boolean>;
2153
2210
  /** Native input type; text-like only, matching `uni-input`. */
2154
2211
  type: _angular_core.InputSignal<UniInputType>;
2155
- autocomplete: _angular_core.InputSignal<string>;
2156
- inputMode: _angular_core.InputSignal<UniInputMode>;
2157
- role: _angular_core.InputSignal<string>;
2158
- ariaExpanded: _angular_core.InputSignal<boolean>;
2159
- ariaControls: _angular_core.InputSignal<string>;
2160
- ariaActivedescendant: _angular_core.InputSignal<string>;
2212
+ autocomplete: _angular_core.InputSignal<string | undefined>;
2213
+ inputMode: _angular_core.InputSignal<UniInputMode | undefined>;
2214
+ role: _angular_core.InputSignal<string | undefined>;
2215
+ ariaExpanded: _angular_core.InputSignal<boolean | undefined>;
2216
+ ariaControls: _angular_core.InputSignal<string | undefined>;
2217
+ ariaActivedescendant: _angular_core.InputSignal<string | undefined>;
2161
2218
  /** The debounced value, emitted once the user pauses typing. */
2162
2219
  valueChange: _angular_core.OutputEmitterRef<string>;
2163
- value: _angular_core.WritableSignal<string>;
2220
+ value: _angular_core.WritableSignal<string | undefined>;
2164
2221
  private readonly inputElement;
2165
2222
  private timeoutId;
2166
2223
  private lastEmitted;
@@ -2177,9 +2234,9 @@ declare class UniDebounceInputComponent {
2177
2234
  /** Theme-level options for `uni-search-input`, resolved by token name. */
2178
2235
  interface UniSearchInputOptions {
2179
2236
  /** Leading (decorative) symbol. */
2180
- searchSymbol?: string;
2237
+ searchIcon?: IconName;
2181
2238
  /** Clear-button symbol. */
2182
- clearSymbol?: string;
2239
+ clearIcon?: IconName;
2183
2240
  /** Suggestion list surface color token. */
2184
2241
  listColor?: ColorKey;
2185
2242
  /** Active/hover suggestion fill; the on-color pair is derived. Must
@@ -2205,7 +2262,7 @@ interface UniSearchInputOptions {
2205
2262
  declare class UniSearchInputComponent extends BaseComponent<UniSearchInputOptions> {
2206
2263
  /** Accessible name for the field, also the placeholder fallback. */
2207
2264
  label: _angular_core.InputSignal<string>;
2208
- placeholder: _angular_core.InputSignal<string>;
2265
+ placeholder: _angular_core.InputSignal<string | undefined>;
2209
2266
  width: _angular_core.InputSignal<string | number>;
2210
2267
  debounceTime: _angular_core.InputSignal<number>;
2211
2268
  /**
@@ -2223,7 +2280,7 @@ declare class UniSearchInputComponent extends BaseComponent<UniSearchInputOption
2223
2280
  /** Ties the popup to the field so the browser tracks it in the top layer. */
2224
2281
  private readonly anchor;
2225
2282
  /** `manual` where the top layer is usable, else null — see the popup helper. */
2226
- protected readonly popupAttr: "manual";
2283
+ protected readonly popupAttr: "manual" | null;
2227
2284
  constructor();
2228
2285
  protected readonly visibleSuggestions: _angular_core.Signal<string[]>;
2229
2286
  /** Shared combobox bookkeeping: open state, active option, ARIA ids. */
@@ -2242,8 +2299,25 @@ declare class UniSearchInputComponent extends BaseComponent<UniSearchInputOption
2242
2299
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniSearchInputComponent, "uni-search-input", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "debounceTime": { "alias": "debounceTime"; "required": false; "isSignal": true; }; "suggestions": { "alias": "suggestions"; "required": false; "isSignal": true; }; }, { "searchChange": "searchChange"; "searchSubmit": "searchSubmit"; "suggestionSelected": "suggestionSelected"; }, never, never, true, never>;
2243
2300
  }
2244
2301
 
2302
+ /**
2303
+ * Theme options for `uni-select`. The box itself is `uni-input-box`'s; what
2304
+ * belongs to the select is the dropdown affordance, which until 11.0.0 was
2305
+ * hardcoded — `select` was declared in `ComponentName` with no theme entry
2306
+ * behind it, so a theme could not reach it at all.
2307
+ */
2308
+ interface UniSelectOptions {
2309
+ /** Glyph for the dropdown affordance. Defaults to `chevronDown`. */
2310
+ toggleIcon?: IconName;
2311
+ /** Ink for that glyph. Defaults to `on-background-variant`, as `uni-combobox`. */
2312
+ toggleColor?: ColorKey;
2313
+ /** Square size of the glyph in px. Defaults to 20, matching `uni-combobox`. */
2314
+ toggleSize?: number;
2315
+ }
2316
+
2245
2317
  declare class UniSelectComponent<T> implements FormValueControl<T | null> {
2246
- readonly value: _angular_core.ModelSignal<T>;
2318
+ private readonly theme;
2319
+ protected readonly componentOptions: _angular_core.WritableSignal<UniSelectOptions>;
2320
+ readonly value: _angular_core.ModelSignal<T | null>;
2247
2321
  readonly disabled: _angular_core.InputSignal<boolean>;
2248
2322
  readonly touched: _angular_core.ModelSignal<boolean>;
2249
2323
  readonly invalid: _angular_core.InputSignal<boolean>;
@@ -2254,12 +2328,12 @@ declare class UniSelectComponent<T> implements FormValueControl<T | null> {
2254
2328
  * Id(s) of external element(s) describing this control — typically your
2255
2329
  * app-rendered error message — exposed as aria-describedby.
2256
2330
  */
2257
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
2331
+ readonly ariaDescribedBy: _angular_core.InputSignal<string | undefined>;
2258
2332
  readonly options: _angular_core.InputSignal<Options<T>>;
2259
- readonly placeholder: _angular_core.InputSignal<string>;
2260
- readonly width: _angular_core.InputSignal<string | number>;
2333
+ readonly placeholder: _angular_core.InputSignal<string | undefined>;
2334
+ readonly width: _angular_core.InputSignal<string | number | undefined>;
2261
2335
  readonly fullWidth: _angular_core.InputSignal<boolean>;
2262
- readonly grow: _angular_core.InputSignal<number>;
2336
+ readonly grow: _angular_core.InputSignal<number | undefined>;
2263
2337
  /**
2264
2338
  * Equality used to match `value` against option values, called as
2265
2339
  * `compareWith(optionValue, value)`. Defaults to reference equality, which
@@ -2269,7 +2343,7 @@ declare class UniSelectComponent<T> implements FormValueControl<T | null> {
2269
2343
  */
2270
2344
  readonly compareWith: _angular_core.InputSignal<(optionValue: T, value: T) => boolean>;
2271
2345
  /** Accessible name for the select; a placeholder is not a label. */
2272
- readonly ariaLabel: _angular_core.InputSignal<string>;
2346
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
2273
2347
  protected readonly UNSELECTED = -1;
2274
2348
  /**
2275
2349
  * We use the index as the HTML value to avoid issues with
@@ -2279,7 +2353,7 @@ declare class UniSelectComponent<T> implements FormValueControl<T | null> {
2279
2353
  protected readonly showError: _angular_core.Signal<boolean>;
2280
2354
  protected handleSelectChange(event: Event): void;
2281
2355
  selectClass: string;
2282
- arrowClass: string;
2356
+ protected readonly arrowClass: _angular_core.Signal<string>;
2283
2357
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniSelectComponent<any>, never>;
2284
2358
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniSelectComponent<any>, "uni-select", 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; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "grow": { "alias": "grow"; "required": false; "isSignal": true; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
2285
2359
  }
@@ -2331,11 +2405,11 @@ interface UniSliderOptions {
2331
2405
  tooltipShadow?: Shadow;
2332
2406
  tooltipBorderRadius?: Radius;
2333
2407
  /**
2334
- * Click-to-jump transition in ms. A drag is never animated — a transition on
2335
- * a dragged thumb reads as lag — so this applies to keyboard and track
2336
- * presses only.
2408
+ * Timing for the click-to-jump move, as a `motion` token. A drag is never
2409
+ * animated — a transition on a dragged thumb reads as lag — so this applies
2410
+ * to keyboard and track presses only. Defaults to `snap`.
2337
2411
  */
2338
- transitionMs?: number;
2412
+ motion?: Motion;
2339
2413
  }
2340
2414
 
2341
2415
  /** Index into the thumb pair. `0` is the `start` thumb, `1` the `end` thumb. */
@@ -2356,23 +2430,30 @@ type ThumbIndex = 0 | 1;
2356
2430
  */
2357
2431
  declare class UniSliderComponent extends BaseComponent<UniSliderOptions> implements FormValueControl<number | UniNumberRange | null> {
2358
2432
  /** Shape follows `mode`: a number when `single`, a `UniNumberRange` when `range`. */
2359
- readonly value: _angular_core.ModelSignal<number | UniNumberRange>;
2433
+ readonly value: _angular_core.ModelSignal<number | UniNumberRange | null>;
2360
2434
  readonly disabled: _angular_core.InputSignal<boolean>;
2361
2435
  readonly touched: _angular_core.ModelSignal<boolean>;
2436
+ /**
2437
+ * Angular 22 marks the bound field touched through this output; the
2438
+ * `touched` model above is bound inward by the directive and no longer
2439
+ * propagates back out. Emitted wherever this control already decided
2440
+ * the user was done with it.
2441
+ */
2442
+ readonly touch: _angular_core.OutputEmitterRef<void>;
2362
2443
  readonly invalid: _angular_core.InputSignal<boolean>;
2363
2444
  readonly dirty: _angular_core.InputSignal<boolean>;
2364
2445
  readonly required: _angular_core.InputSignal<boolean>;
2365
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
2446
+ readonly ariaDescribedBy: _angular_core.InputSignal<string | undefined>;
2366
2447
  /** Accessible name, e.g. "Opacity". Names the group in range mode. */
2367
2448
  label: _angular_core.InputSignal<string>;
2368
2449
  mode: _angular_core.InputSignal<"range" | "single">;
2369
- min: _angular_core.InputSignal<number>;
2370
- max: _angular_core.InputSignal<number>;
2450
+ min: _angular_core.InputSignal<number | UniNumberRange | undefined>;
2451
+ max: _angular_core.InputSignal<number | UniNumberRange | undefined>;
2371
2452
  step: _angular_core.InputSignal<number>;
2372
2453
  /** `PageUp`/`PageDown` and `Shift+Arrow`. Default: a tenth of the range. */
2373
- largeStep: _angular_core.InputSignal<number>;
2454
+ largeStep: _angular_core.InputSignal<number | undefined>;
2374
2455
  /** Fill anchor. Defaults to `min`; set `0` for a slider that spans ±. */
2375
- origin: _angular_core.InputSignal<number>;
2456
+ origin: _angular_core.InputSignal<number | undefined>;
2376
2457
  marks: _angular_core.InputSignal<UniSliderMark[]>;
2377
2458
  /** Marks become the only valid stops — t-shirt sizing, Likert scales. */
2378
2459
  snapToMarks: _angular_core.InputSignal<boolean>;
@@ -2388,9 +2469,9 @@ declare class UniSliderComponent extends BaseComponent<UniSliderOptions> impleme
2388
2469
  */
2389
2470
  valueDisplay: _angular_core.InputSignal<"input" | "none" | "tooltip" | "inline">;
2390
2471
  /** Overrides how a value is rendered and spoken. */
2391
- formatValue: _angular_core.InputSignal<(value: number) => string>;
2472
+ formatValue: _angular_core.InputSignal<((value: number) => string) | undefined>;
2392
2473
  /** Enforced distance between the two ends, in range mode. */
2393
- minGap: _angular_core.InputSignal<number>;
2474
+ minGap: _angular_core.InputSignal<number | undefined>;
2394
2475
  variant: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
2395
2476
  /** Continuous, during a drag or a held key. Bind this for a live preview. */
2396
2477
  sliding: _angular_core.OutputEmitterRef<number | UniNumberRange>;
@@ -2411,6 +2492,8 @@ declare class UniSliderComponent extends BaseComponent<UniSliderOptions> impleme
2411
2492
  /** Set by keydown, consumed by keyup, so one commit follows a key run. */
2412
2493
  private keyed;
2413
2494
  protected readonly isRange: _angular_core.Signal<boolean>;
2495
+ /** The contract admits a range here; a slider's own bounds are always scalar. */
2496
+ private static readonly scalar;
2414
2497
  protected readonly resolvedMin: _angular_core.Signal<number>;
2415
2498
  protected readonly resolvedMax: _angular_core.Signal<number>;
2416
2499
  private derivePair;
@@ -2492,6 +2575,11 @@ declare class UniSliderComponent extends BaseComponent<UniSliderOptions> impleme
2492
2575
  protected readonly rootClass: _angular_core.Signal<string>;
2493
2576
  protected readonly rowClass: _angular_core.Signal<string>;
2494
2577
  protected readonly trackClass: _angular_core.Signal<string>;
2578
+ /**
2579
+ * The click-to-jump timing. `snap` by default: a thumb covering distance to
2580
+ * a value the user just chose, which at `control`'s 300ms would read as lag.
2581
+ */
2582
+ private readonly motion;
2495
2583
  protected readonly fillClass: _angular_core.Signal<string>;
2496
2584
  protected readonly markClass: _angular_core.Signal<string>;
2497
2585
  protected readonly thumbClass: _angular_core.Signal<string>;
@@ -2502,7 +2590,7 @@ declare class UniSliderComponent extends BaseComponent<UniSliderOptions> impleme
2502
2590
  protected readonly readoutFieldClass: _angular_core.Signal<string>;
2503
2591
  protected readonly readoutClass: _angular_core.Signal<string>;
2504
2592
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniSliderComponent, never>;
2505
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniSliderComponent, "uni-slider, Slider", 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; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "largeStep": { "alias": "largeStep"; "required": false; "isSignal": true; }; "origin": { "alias": "origin"; "required": false; "isSignal": true; }; "marks": { "alias": "marks"; "required": false; "isSignal": true; }; "snapToMarks": { "alias": "snapToMarks"; "required": false; "isSignal": true; }; "valueDisplay": { "alias": "valueDisplay"; "required": false; "isSignal": true; }; "formatValue": { "alias": "formatValue"; "required": false; "isSignal": true; }; "minGap": { "alias": "minGap"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "sliding": "sliding"; "changed": "changed"; }, never, never, true, never>;
2593
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniSliderComponent, "uni-slider, Slider", 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; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "largeStep": { "alias": "largeStep"; "required": false; "isSignal": true; }; "origin": { "alias": "origin"; "required": false; "isSignal": true; }; "marks": { "alias": "marks"; "required": false; "isSignal": true; }; "snapToMarks": { "alias": "snapToMarks"; "required": false; "isSignal": true; }; "valueDisplay": { "alias": "valueDisplay"; "required": false; "isSignal": true; }; "formatValue": { "alias": "formatValue"; "required": false; "isSignal": true; }; "minGap": { "alias": "minGap"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "touch": "touch"; "sliding": "sliding"; "changed": "changed"; }, never, never, true, never>;
2506
2594
  }
2507
2595
 
2508
2596
  /**
@@ -2585,58 +2673,65 @@ interface UniNumberInputOptions {
2585
2673
  * every other field. All arithmetic runs on the cdk's exact decimal helpers.
2586
2674
  */
2587
2675
  declare class UniNumberInputComponent extends BaseComponent<UniNumberInputOptions> implements FormValueControl<number | null> {
2588
- readonly value: _angular_core.ModelSignal<number>;
2676
+ readonly value: _angular_core.ModelSignal<number | null>;
2589
2677
  readonly disabled: _angular_core.InputSignal<boolean>;
2590
2678
  readonly touched: _angular_core.ModelSignal<boolean>;
2679
+ /**
2680
+ * Angular 22 marks the bound field touched through this output; the
2681
+ * `touched` model above is bound inward by the directive and no longer
2682
+ * propagates back out. Emitted wherever this control already decided
2683
+ * the user was done with it.
2684
+ */
2685
+ readonly touch: _angular_core.OutputEmitterRef<void>;
2591
2686
  readonly invalid: _angular_core.InputSignal<boolean>;
2592
2687
  readonly dirty: _angular_core.InputSignal<boolean>;
2593
2688
  readonly required: _angular_core.InputSignal<boolean>;
2594
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
2689
+ readonly ariaDescribedBy: _angular_core.InputSignal<string | undefined>;
2595
2690
  /**
2596
2691
  * Exact binding, as a canonical decimal string. Bind this instead of `value`
2597
2692
  * where a cent in the fifth decimal place matters; both stay in sync, so it
2598
2693
  * is a one-word change from the ordinary case.
2599
2694
  */
2600
- readonly valueAsString: _angular_core.ModelSignal<string>;
2695
+ readonly valueAsString: _angular_core.ModelSignal<string | null>;
2601
2696
  /** Accessible name, e.g. "Unit price". */
2602
2697
  label: _angular_core.InputSignal<string>;
2603
- placeholder: _angular_core.InputSignal<string>;
2698
+ placeholder: _angular_core.InputSignal<string | undefined>;
2604
2699
  preset: _angular_core.InputSignal<UniNumberPreset>;
2605
2700
  /** ISO 4217 code, e.g. `'USD'`. Implies `preset="currency"`. */
2606
- currency: _angular_core.InputSignal<string>;
2701
+ currency: _angular_core.InputSignal<string | undefined>;
2607
2702
  /** BCP 47 tag. Defaults to the document language, then the browser's. */
2608
- locale: _angular_core.InputSignal<string>;
2703
+ locale: _angular_core.InputSignal<string | undefined>;
2609
2704
  /** Static adornment before the number, e.g. `'$'`. Never parseable input. */
2610
- prefix: _angular_core.InputSignal<string>;
2705
+ prefix: _angular_core.InputSignal<string | undefined>;
2611
2706
  /** Static adornment after the number, e.g. `'kg'`, `'/mo'`. */
2612
- suffix: _angular_core.InputSignal<string>;
2613
- decimals: _angular_core.InputSignal<number | [min: number, max: number]>;
2614
- grouping: _angular_core.InputSignal<false | "auto" | "always" | "min2">;
2707
+ suffix: _angular_core.InputSignal<string | undefined>;
2708
+ decimals: _angular_core.InputSignal<number | [min: number, max: number] | undefined>;
2709
+ grouping: _angular_core.InputSignal<false | "auto" | "always" | "min2" | undefined>;
2615
2710
  /** Escape hatch, merged over the preset. */
2616
- numberFormat: _angular_core.InputSignal<Intl.NumberFormatOptions>;
2711
+ numberFormat: _angular_core.InputSignal<Intl.NumberFormatOptions | undefined>;
2617
2712
  roundingMode: _angular_core.InputSignal<UniRoundingMode>;
2618
- align: _angular_core.InputSignal<"center" | "start" | "end">;
2713
+ align: _angular_core.InputSignal<"center" | "start" | "end" | undefined>;
2619
2714
  /** The model is a fraction: `0.15` displays as `15%`. */
2620
2715
  valueIsFraction: _angular_core.InputSignal<boolean>;
2621
2716
  /** Spoken long form of an abbreviated suffix, e.g. `'kilograms'` for `kg`. */
2622
- unitAnnouncement: _angular_core.InputSignal<string>;
2717
+ unitAnnouncement: _angular_core.InputSignal<string | undefined>;
2623
2718
  readOnly: _angular_core.InputSignal<boolean>;
2624
2719
  /** Renders without its own input-box chrome, for composers like uni-slider. */
2625
2720
  embedded: _angular_core.InputSignal<boolean>;
2626
- min: _angular_core.InputSignal<number>;
2627
- max: _angular_core.InputSignal<number>;
2721
+ min: _angular_core.InputSignal<number | undefined>;
2722
+ max: _angular_core.InputSignal<number | undefined>;
2628
2723
  step: _angular_core.InputSignal<number>;
2629
2724
  /** `PageUp`/`PageDown` and `Shift+Arrow`. Default: `step × 10`. */
2630
- largeStep: _angular_core.InputSignal<number>;
2725
+ largeStep: _angular_core.InputSignal<number | undefined>;
2631
2726
  /** `Alt+Arrow`, Figma's fine-nudge convention. Unset disables it. */
2632
- smallStep: _angular_core.InputSignal<number>;
2727
+ smallStep: _angular_core.InputSignal<number | undefined>;
2633
2728
  stepOrigin: _angular_core.InputSignal<"min" | "zero">;
2634
2729
  /** Cyclic fields only — 23 → 0 hours, 359 → 0 degrees. */
2635
2730
  wrap: _angular_core.InputSignal<boolean>;
2636
2731
  /** `false` refuses an out-of-range commit instead of clamping it. */
2637
2732
  clampOnCommit: _angular_core.InputSignal<boolean>;
2638
2733
  /** What ↑ commits on an empty field. Default: `min ?? 0`. */
2639
- emptyStepValue: _angular_core.InputSignal<number>;
2734
+ emptyStepValue: _angular_core.InputSignal<number | undefined>;
2640
2735
  commitOnBlur: _angular_core.InputSignal<boolean>;
2641
2736
  selectOnFocus: _angular_core.InputSignal<boolean>;
2642
2737
  /** `12*3` → 36. Off by default: a parser in a form field is a real cost. */
@@ -2645,9 +2740,9 @@ declare class UniNumberInputComponent extends BaseComponent<UniNumberInputOption
2645
2740
  wheel: _angular_core.InputSignal<boolean>;
2646
2741
  repeat: _angular_core.InputSignal<boolean>;
2647
2742
  /** Custom parser, replacing the built-in locale parsing. */
2648
- parse: _angular_core.InputSignal<(raw: string, locale: string) => string | null>;
2743
+ parse: _angular_core.InputSignal<((raw: string, locale: string) => string | null) | undefined>;
2649
2744
  /** Overrides the themed layout for this instance. */
2650
- stepperLayout: _angular_core.InputSignal<_uni_design_system_uni_angular.UniStepperLayout>;
2745
+ stepperLayout: _angular_core.InputSignal<_uni_design_system_uni_angular.UniStepperLayout | undefined>;
2651
2746
  stepped: _angular_core.OutputEmitterRef<UniNumberStepped>;
2652
2747
  /** A commit was refused; the raw text stays in the field. */
2653
2748
  rejected: _angular_core.OutputEmitterRef<UniNumberRejection>;
@@ -2697,7 +2792,7 @@ declare class UniNumberInputComponent extends BaseComponent<UniNumberInputOption
2697
2792
  * spinbutton reporting 0 for "nothing yet" is a wrong answer, not a missing
2698
2793
  * one. `aria-valuetext` carries the localized "Empty" instead.
2699
2794
  */
2700
- protected readonly canonicalForAria: _angular_core.Signal<string>;
2795
+ protected readonly canonicalForAria: _angular_core.Signal<string | null>;
2701
2796
  protected readonly describedBy: _angular_core.Signal<string>;
2702
2797
  private atFence;
2703
2798
  protected readonly atMin: _angular_core.Signal<boolean>;
@@ -2773,7 +2868,7 @@ declare class UniNumberInputComponent extends BaseComponent<UniNumberInputOption
2773
2868
  protected readonly stackedButtonClass: _angular_core.Signal<string>;
2774
2869
  protected readonly glyphSize: _angular_core.Signal<12 | 18>;
2775
2870
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniNumberInputComponent, never>;
2776
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniNumberInputComponent, "uni-number-input, NumberInput", 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; }; "valueAsString": { "alias": "valueAsString"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "preset": { "alias": "preset"; "required": false; "isSignal": true; }; "currency": { "alias": "currency"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "suffix": { "alias": "suffix"; "required": false; "isSignal": true; }; "decimals": { "alias": "decimals"; "required": false; "isSignal": true; }; "grouping": { "alias": "grouping"; "required": false; "isSignal": true; }; "numberFormat": { "alias": "numberFormat"; "required": false; "isSignal": true; }; "roundingMode": { "alias": "roundingMode"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "valueIsFraction": { "alias": "valueIsFraction"; "required": false; "isSignal": true; }; "unitAnnouncement": { "alias": "unitAnnouncement"; "required": false; "isSignal": true; }; "readOnly": { "alias": "readOnly"; "required": false; "isSignal": true; }; "embedded": { "alias": "embedded"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "largeStep": { "alias": "largeStep"; "required": false; "isSignal": true; }; "smallStep": { "alias": "smallStep"; "required": false; "isSignal": true; }; "stepOrigin": { "alias": "stepOrigin"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; "clampOnCommit": { "alias": "clampOnCommit"; "required": false; "isSignal": true; }; "emptyStepValue": { "alias": "emptyStepValue"; "required": false; "isSignal": true; }; "commitOnBlur": { "alias": "commitOnBlur"; "required": false; "isSignal": true; }; "selectOnFocus": { "alias": "selectOnFocus"; "required": false; "isSignal": true; }; "allowExpressions": { "alias": "allowExpressions"; "required": false; "isSignal": true; }; "wheel": { "alias": "wheel"; "required": false; "isSignal": true; }; "repeat": { "alias": "repeat"; "required": false; "isSignal": true; }; "parse": { "alias": "parse"; "required": false; "isSignal": true; }; "stepperLayout": { "alias": "stepperLayout"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "valueAsString": "valueAsStringChange"; "stepped": "stepped"; "rejected": "rejected"; }, never, never, true, never>;
2871
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniNumberInputComponent, "uni-number-input, NumberInput", 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; }; "valueAsString": { "alias": "valueAsString"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "preset": { "alias": "preset"; "required": false; "isSignal": true; }; "currency": { "alias": "currency"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "suffix": { "alias": "suffix"; "required": false; "isSignal": true; }; "decimals": { "alias": "decimals"; "required": false; "isSignal": true; }; "grouping": { "alias": "grouping"; "required": false; "isSignal": true; }; "numberFormat": { "alias": "numberFormat"; "required": false; "isSignal": true; }; "roundingMode": { "alias": "roundingMode"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "valueIsFraction": { "alias": "valueIsFraction"; "required": false; "isSignal": true; }; "unitAnnouncement": { "alias": "unitAnnouncement"; "required": false; "isSignal": true; }; "readOnly": { "alias": "readOnly"; "required": false; "isSignal": true; }; "embedded": { "alias": "embedded"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "largeStep": { "alias": "largeStep"; "required": false; "isSignal": true; }; "smallStep": { "alias": "smallStep"; "required": false; "isSignal": true; }; "stepOrigin": { "alias": "stepOrigin"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; "clampOnCommit": { "alias": "clampOnCommit"; "required": false; "isSignal": true; }; "emptyStepValue": { "alias": "emptyStepValue"; "required": false; "isSignal": true; }; "commitOnBlur": { "alias": "commitOnBlur"; "required": false; "isSignal": true; }; "selectOnFocus": { "alias": "selectOnFocus"; "required": false; "isSignal": true; }; "allowExpressions": { "alias": "allowExpressions"; "required": false; "isSignal": true; }; "wheel": { "alias": "wheel"; "required": false; "isSignal": true; }; "repeat": { "alias": "repeat"; "required": false; "isSignal": true; }; "parse": { "alias": "parse"; "required": false; "isSignal": true; }; "stepperLayout": { "alias": "stepperLayout"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "touch": "touch"; "valueAsString": "valueAsStringChange"; "stepped": "stepped"; "rejected": "rejected"; }, never, never, true, never>;
2777
2872
  }
2778
2873
 
2779
2874
  /** Which end of the range a rejection or a change came from. */
@@ -2822,32 +2917,39 @@ interface UniNumberRangeInputOptions {
2822
2917
  * are still the cdk's, shared with every other numeric control.
2823
2918
  */
2824
2919
  declare class UniNumberRangeInputComponent extends BaseComponent<UniNumberRangeInputOptions> implements FormValueControl<UniNumberRange | null> {
2825
- readonly value: _angular_core.ModelSignal<UniNumberRange>;
2920
+ readonly value: _angular_core.ModelSignal<UniNumberRange | null>;
2826
2921
  readonly disabled: _angular_core.InputSignal<boolean>;
2827
2922
  readonly touched: _angular_core.ModelSignal<boolean>;
2923
+ /**
2924
+ * Angular 22 marks the bound field touched through this output; the
2925
+ * `touched` model above is bound inward by the directive and no longer
2926
+ * propagates back out. Emitted wherever this control already decided
2927
+ * the user was done with it.
2928
+ */
2929
+ readonly touch: _angular_core.OutputEmitterRef<void>;
2828
2930
  readonly invalid: _angular_core.InputSignal<boolean>;
2829
2931
  readonly dirty: _angular_core.InputSignal<boolean>;
2830
2932
  readonly required: _angular_core.InputSignal<boolean>;
2831
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
2933
+ readonly ariaDescribedBy: _angular_core.InputSignal<string | undefined>;
2832
2934
  /** Names the group, e.g. "Price range". */
2833
2935
  label: _angular_core.InputSignal<string>;
2834
2936
  startLabel: _angular_core.InputSignal<string>;
2835
2937
  endLabel: _angular_core.InputSignal<string>;
2836
2938
  preset: _angular_core.InputSignal<UniNumberPreset>;
2837
- currency: _angular_core.InputSignal<string>;
2838
- locale: _angular_core.InputSignal<string>;
2839
- prefix: _angular_core.InputSignal<string>;
2840
- suffix: _angular_core.InputSignal<string>;
2841
- decimals: _angular_core.InputSignal<number | [min: number, max: number]>;
2842
- grouping: _angular_core.InputSignal<false | "auto" | "always" | "min2">;
2939
+ currency: _angular_core.InputSignal<string | undefined>;
2940
+ locale: _angular_core.InputSignal<string | undefined>;
2941
+ prefix: _angular_core.InputSignal<string | undefined>;
2942
+ suffix: _angular_core.InputSignal<string | undefined>;
2943
+ decimals: _angular_core.InputSignal<number | [min: number, max: number] | undefined>;
2944
+ grouping: _angular_core.InputSignal<false | "auto" | "always" | "min2" | undefined>;
2843
2945
  roundingMode: _angular_core.InputSignal<UniRoundingMode>;
2844
- placeholderStart: _angular_core.InputSignal<string>;
2845
- placeholderEnd: _angular_core.InputSignal<string>;
2846
- min: _angular_core.InputSignal<number>;
2847
- max: _angular_core.InputSignal<number>;
2946
+ placeholderStart: _angular_core.InputSignal<string | undefined>;
2947
+ placeholderEnd: _angular_core.InputSignal<string | undefined>;
2948
+ minValue: _angular_core.InputSignal<number | undefined>;
2949
+ maxValue: _angular_core.InputSignal<number | undefined>;
2848
2950
  step: _angular_core.InputSignal<number>;
2849
2951
  /** Enforced distance between the two ends. */
2850
- minGap: _angular_core.InputSignal<number>;
2952
+ minGap: _angular_core.InputSignal<number | undefined>;
2851
2953
  /** The ends were entered backwards and have been exchanged. */
2852
2954
  swapped: _angular_core.OutputEmitterRef<UniNumberRange>;
2853
2955
  /** A typed commit on one end could not be read; its text stays in place. */
@@ -2874,7 +2976,7 @@ declare class UniNumberRangeInputComponent extends BaseComponent<UniNumberRangeI
2874
2976
  protected readonly describedBy: _angular_core.Signal<string>;
2875
2977
  /** The committed canonical decimal for a part, or `null` when that end is open. */
2876
2978
  private canonicalOf;
2877
- protected valueOf(part: UniNumberRangePart): number | null;
2979
+ protected partValue(part: UniNumberRangePart): number | null;
2878
2980
  protected displayText(part: UniNumberRangePart): string;
2879
2981
  protected partLabel(part: UniNumberRangePart): string;
2880
2982
  protected valueTextOf(part: UniNumberRangePart): string;
@@ -2923,7 +3025,7 @@ declare class UniNumberRangeInputComponent extends BaseComponent<UniNumberRangeI
2923
3025
  protected readonly dividerClass: _angular_core.Signal<string>;
2924
3026
  protected readonly dividerText: _angular_core.Signal<string>;
2925
3027
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniNumberRangeInputComponent, never>;
2926
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniNumberRangeInputComponent, "uni-number-range-input, NumberRangeInput", 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; }; "startLabel": { "alias": "startLabel"; "required": false; "isSignal": true; }; "endLabel": { "alias": "endLabel"; "required": false; "isSignal": true; }; "preset": { "alias": "preset"; "required": false; "isSignal": true; }; "currency": { "alias": "currency"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "suffix": { "alias": "suffix"; "required": false; "isSignal": true; }; "decimals": { "alias": "decimals"; "required": false; "isSignal": true; }; "grouping": { "alias": "grouping"; "required": false; "isSignal": true; }; "roundingMode": { "alias": "roundingMode"; "required": false; "isSignal": true; }; "placeholderStart": { "alias": "placeholderStart"; "required": false; "isSignal": true; }; "placeholderEnd": { "alias": "placeholderEnd"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "minGap": { "alias": "minGap"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "swapped": "swapped"; "rejected": "rejected"; }, never, never, true, never>;
3028
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniNumberRangeInputComponent, "uni-number-range-input, NumberRangeInput", 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; }; "startLabel": { "alias": "startLabel"; "required": false; "isSignal": true; }; "endLabel": { "alias": "endLabel"; "required": false; "isSignal": true; }; "preset": { "alias": "preset"; "required": false; "isSignal": true; }; "currency": { "alias": "currency"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "suffix": { "alias": "suffix"; "required": false; "isSignal": true; }; "decimals": { "alias": "decimals"; "required": false; "isSignal": true; }; "grouping": { "alias": "grouping"; "required": false; "isSignal": true; }; "roundingMode": { "alias": "roundingMode"; "required": false; "isSignal": true; }; "placeholderStart": { "alias": "placeholderStart"; "required": false; "isSignal": true; }; "placeholderEnd": { "alias": "placeholderEnd"; "required": false; "isSignal": true; }; "minValue": { "alias": "min"; "required": false; "isSignal": true; }; "maxValue": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "minGap": { "alias": "minGap"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "touch": "touch"; "swapped": "swapped"; "rejected": "rejected"; }, never, never, true, never>;
2927
3029
  }
2928
3030
 
2929
3031
  /**
@@ -2985,20 +3087,27 @@ interface UniQuantityStepperOptions {
2985
3087
  * eleven times. `editable=false` is for read-mostly tables.
2986
3088
  */
2987
3089
  declare class UniQuantityStepperComponent extends BaseComponent<UniQuantityStepperOptions> implements FormValueControl<number | null> {
2988
- readonly value: _angular_core.ModelSignal<number>;
3090
+ readonly value: _angular_core.ModelSignal<number | null>;
2989
3091
  readonly disabled: _angular_core.InputSignal<boolean>;
2990
3092
  readonly touched: _angular_core.ModelSignal<boolean>;
3093
+ /**
3094
+ * Angular 22 marks the bound field touched through this output; the
3095
+ * `touched` model above is bound inward by the directive and no longer
3096
+ * propagates back out. Emitted wherever this control already decided
3097
+ * the user was done with it.
3098
+ */
3099
+ readonly touch: _angular_core.OutputEmitterRef<void>;
2991
3100
  readonly invalid: _angular_core.InputSignal<boolean>;
2992
3101
  readonly dirty: _angular_core.InputSignal<boolean>;
2993
3102
  readonly required: _angular_core.InputSignal<boolean>;
2994
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
3103
+ readonly ariaDescribedBy: _angular_core.InputSignal<string | undefined>;
2995
3104
  /**
2996
3105
  * Accessible name. Never visible and always needed — a cart with six of these
2997
3106
  * needs "Quantity, Blue T-shirt (M)", not six controls called "Quantity".
2998
3107
  */
2999
3108
  label: _angular_core.InputSignal<string>;
3000
- min: _angular_core.InputSignal<number>;
3001
- max: _angular_core.InputSignal<number>;
3109
+ min: _angular_core.InputSignal<number | undefined>;
3110
+ max: _angular_core.InputSignal<number | undefined>;
3002
3111
  step: _angular_core.InputSignal<number>;
3003
3112
  size: _angular_core.InputSignal<Size>;
3004
3113
  /** `false` renders the number as text: read-mostly tables. */
@@ -3110,7 +3219,7 @@ declare class UniQuantityStepperComponent extends BaseComponent<UniQuantityStepp
3110
3219
  protected readonly readoutClass: _angular_core.Signal<string>;
3111
3220
  protected readonly glyphSize: _angular_core.Signal<number>;
3112
3221
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniQuantityStepperComponent, never>;
3113
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniQuantityStepperComponent, "uni-quantity-stepper, QuantityStepper", 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; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "deleteAtMin": { "alias": "deleteAtMin"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "removed": "removed"; }, never, never, true, never>;
3222
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniQuantityStepperComponent, "uni-quantity-stepper, QuantityStepper", 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; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "deleteAtMin": { "alias": "deleteAtMin"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "touch": "touch"; "removed": "removed"; }, never, never, true, never>;
3114
3223
  }
3115
3224
 
3116
3225
  /**
@@ -3169,24 +3278,36 @@ declare class UniTagInputComponent extends BaseComponent<UniTagInputOptions> imp
3169
3278
  readonly value: _angular_core.ModelSignal<UniTagItem[]>;
3170
3279
  readonly disabled: _angular_core.InputSignal<boolean>;
3171
3280
  readonly touched: _angular_core.ModelSignal<boolean>;
3281
+ /**
3282
+ * Angular 22 marks the bound field touched through this output; the
3283
+ * `touched` model above is bound inward by the directive and no longer
3284
+ * propagates back out. Emitted wherever this control already decided
3285
+ * the user was done with it.
3286
+ */
3287
+ readonly touch: _angular_core.OutputEmitterRef<void>;
3172
3288
  readonly invalid: _angular_core.InputSignal<boolean>;
3173
3289
  readonly dirty: _angular_core.InputSignal<boolean>;
3174
3290
  readonly required: _angular_core.InputSignal<boolean>;
3175
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
3291
+ readonly ariaDescribedBy: _angular_core.InputSignal<string | undefined>;
3176
3292
  /** Accessible name for the field, e.g. "To". */
3177
3293
  label: _angular_core.InputSignal<string>;
3178
- placeholder: _angular_core.InputSignal<string>;
3294
+ placeholder: _angular_core.InputSignal<string | undefined>;
3179
3295
  /** `email` wires an address validator, paste parser and space separator. */
3180
3296
  preset: _angular_core.InputSignal<"text" | "email">;
3181
3297
  separators: _angular_core.InputSignal<string[]>;
3182
3298
  commitOnBlur: _angular_core.InputSignal<boolean>;
3183
3299
  allowDuplicates: _angular_core.InputSignal<boolean>;
3184
- max: _angular_core.InputSignal<number>;
3185
- validate: _angular_core.InputSignal<(raw: string) => boolean>;
3186
- parse: _angular_core.InputSignal<(pasted: string) => string[]>;
3300
+ /**
3301
+ * Maximum number of tags. Declared as the contract's `maxLength` — for an
3302
+ * array value that is exactly what it means, and Angular 22 types it as a
3303
+ * number — while staying `[max]` in templates.
3304
+ */
3305
+ maxLength: _angular_core.InputSignal<number | undefined>;
3306
+ validate: _angular_core.InputSignal<((raw: string) => boolean) | undefined>;
3307
+ parse: _angular_core.InputSignal<((pasted: string) => string[]) | undefined>;
3187
3308
  tagVariant: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
3188
3309
  tagTone: _angular_core.InputSignal<TagTone>;
3189
- tagSize: _angular_core.InputSignal<Size>;
3310
+ tagSize: _angular_core.InputSignal<Size | undefined>;
3190
3311
  suggestions: _angular_core.InputSignal<UniTagSuggestion[]>;
3191
3312
  /** Debounced text the app should filter `suggestions` from. */
3192
3313
  query: _angular_core.OutputEmitterRef<string>;
@@ -3200,7 +3321,7 @@ declare class UniTagInputComponent extends BaseComponent<UniTagInputOptions> imp
3200
3321
  /** Ties the popup to the field so the browser tracks it in the top layer. */
3201
3322
  private readonly anchor;
3202
3323
  /** `manual` where the top layer is usable, else null — see the popup helper. */
3203
- protected readonly popupAttr: "manual";
3324
+ protected readonly popupAttr: "manual" | null;
3204
3325
  constructor();
3205
3326
  /** Uncommitted text in the field. */
3206
3327
  protected readonly draft: _angular_core.WritableSignal<string>;
@@ -3258,7 +3379,7 @@ declare class UniTagInputComponent extends BaseComponent<UniTagInputOptions> imp
3258
3379
  protected readonly inputClass: _angular_core.Signal<string>;
3259
3380
  protected readonly listClass: _angular_core.Signal<string>;
3260
3381
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniTagInputComponent, never>;
3261
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniTagInputComponent, "uni-tag-input", 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; }; "preset": { "alias": "preset"; "required": false; "isSignal": true; }; "separators": { "alias": "separators"; "required": false; "isSignal": true; }; "commitOnBlur": { "alias": "commitOnBlur"; "required": false; "isSignal": true; }; "allowDuplicates": { "alias": "allowDuplicates"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "validate": { "alias": "validate"; "required": false; "isSignal": true; }; "parse": { "alias": "parse"; "required": false; "isSignal": true; }; "tagVariant": { "alias": "tagVariant"; "required": false; "isSignal": true; }; "tagTone": { "alias": "tagTone"; "required": false; "isSignal": true; }; "tagSize": { "alias": "tagSize"; "required": false; "isSignal": true; }; "suggestions": { "alias": "suggestions"; "required": false; "isSignal": true; }; "debounceTime": { "alias": "debounceTime"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "query": "query"; "added": "added"; "removed": "removed"; "rejected": "rejected"; }, never, never, true, never>;
3382
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniTagInputComponent, "uni-tag-input", 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; }; "preset": { "alias": "preset"; "required": false; "isSignal": true; }; "separators": { "alias": "separators"; "required": false; "isSignal": true; }; "commitOnBlur": { "alias": "commitOnBlur"; "required": false; "isSignal": true; }; "allowDuplicates": { "alias": "allowDuplicates"; "required": false; "isSignal": true; }; "maxLength": { "alias": "max"; "required": false; "isSignal": true; }; "validate": { "alias": "validate"; "required": false; "isSignal": true; }; "parse": { "alias": "parse"; "required": false; "isSignal": true; }; "tagVariant": { "alias": "tagVariant"; "required": false; "isSignal": true; }; "tagTone": { "alias": "tagTone"; "required": false; "isSignal": true; }; "tagSize": { "alias": "tagSize"; "required": false; "isSignal": true; }; "suggestions": { "alias": "suggestions"; "required": false; "isSignal": true; }; "debounceTime": { "alias": "debounceTime"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "touch": "touch"; "query": "query"; "added": "added"; "removed": "removed"; "rejected": "rejected"; }, never, never, true, never>;
3262
3383
  }
3263
3384
 
3264
3385
  /**
@@ -3279,13 +3400,13 @@ declare class UniTextDirective {
3279
3400
  /** Typeface via the selector attribute: `uni-text="headline-large"`. */
3280
3401
  readonly uniText: _angular_core.InputSignal<string>;
3281
3402
  /** Explicit typeface; the attribute value wins when both are set. */
3282
- typeface: _angular_core.InputSignal<string>;
3403
+ typeface: _angular_core.InputSignal<string | undefined>;
3283
3404
  /** The ink, mapping straight to the CSS `color` property. */
3284
- color: _angular_core.InputSignal<string>;
3405
+ color: _angular_core.InputSignal<string | undefined>;
3285
3406
  display: _angular_core.InputSignal<OptionalDisplay>;
3286
3407
  align: _angular_core.InputSignal<OptionalTextAlign>;
3287
- nowrap: _angular_core.InputSignal<boolean>;
3288
- maxWidth: _angular_core.InputSignal<number>;
3408
+ nowrap: _angular_core.InputSignal<boolean | undefined>;
3409
+ maxWidth: _angular_core.InputSignal<number | undefined>;
3289
3410
  ellipsis: _angular_core.InputSignal<boolean>;
3290
3411
  protected readonly resolvedTypeface: _angular_core.Signal<string>;
3291
3412
  protected readonly className: _angular_core.Signal<string>;
@@ -3298,6 +3419,13 @@ declare class UniTextareaComponent implements FormValueControl<string> {
3298
3419
  readonly value: _angular_core.ModelSignal<string>;
3299
3420
  readonly disabled: _angular_core.InputSignal<boolean>;
3300
3421
  readonly touched: _angular_core.ModelSignal<boolean>;
3422
+ /**
3423
+ * Angular 22 marks the bound field touched through this output; the
3424
+ * `touched` model above is bound inward by the directive and no longer
3425
+ * propagates back out. Emitted wherever this control already decided
3426
+ * the user was done with it.
3427
+ */
3428
+ readonly touch: _angular_core.OutputEmitterRef<void>;
3301
3429
  readonly invalid: _angular_core.InputSignal<boolean>;
3302
3430
  readonly dirty: _angular_core.InputSignal<boolean>;
3303
3431
  /** Synced from required() validators by the Signal Forms [formField] directive. */
@@ -3306,20 +3434,20 @@ declare class UniTextareaComponent implements FormValueControl<string> {
3306
3434
  * Id(s) of external element(s) describing this control — typically your
3307
3435
  * app-rendered error message — exposed as aria-describedby.
3308
3436
  */
3309
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
3437
+ readonly ariaDescribedBy: _angular_core.InputSignal<string | undefined>;
3310
3438
  label: _angular_core.InputSignal<string>;
3311
3439
  placeholder: _angular_core.InputSignal<string>;
3312
3440
  /** Visible text rows. Defaults to the theme's `textarea` options. */
3313
- rows: _angular_core.InputSignal<number>;
3441
+ rows: _angular_core.InputSignal<number | undefined>;
3314
3442
  readonly readonly: _angular_core.InputSignal<boolean>;
3315
3443
  readonly name: _angular_core.InputSignal<string>;
3316
- readonly minLength: _angular_core.InputSignal<number>;
3317
- readonly maxLength: _angular_core.InputSignal<number>;
3318
- autocomplete: _angular_core.InputSignal<string>;
3319
- spellcheck: _angular_core.InputSignal<boolean>;
3320
- width: _angular_core.InputSignal<string | number>;
3444
+ readonly minLength: _angular_core.InputSignal<number | undefined>;
3445
+ readonly maxLength: _angular_core.InputSignal<number | undefined>;
3446
+ autocomplete: _angular_core.InputSignal<string | undefined>;
3447
+ spellcheck: _angular_core.InputSignal<boolean | undefined>;
3448
+ width: _angular_core.InputSignal<string | number | undefined>;
3321
3449
  fullWidth: _angular_core.InputSignal<boolean>;
3322
- grow: _angular_core.InputSignal<number>;
3450
+ grow: _angular_core.InputSignal<number | undefined>;
3323
3451
  private options;
3324
3452
  protected readonly resolvedRows: _angular_core.Signal<number>;
3325
3453
  protected readonly showError: _angular_core.Signal<boolean>;
@@ -3327,7 +3455,7 @@ declare class UniTextareaComponent implements FormValueControl<string> {
3327
3455
  markAsTouched(): void;
3328
3456
  handleInput(event: Event): void;
3329
3457
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniTextareaComponent, never>;
3330
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniTextareaComponent, "uni-textarea", 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; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "spellcheck": { "alias": "spellcheck"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "grow": { "alias": "grow"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
3458
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniTextareaComponent, "uni-textarea", 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; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "spellcheck": { "alias": "spellcheck"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "grow": { "alias": "grow"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "touch": "touch"; }, never, never, true, never>;
3331
3459
  }
3332
3460
 
3333
3461
  /** Why typed text did not become a time. The raw text stays in the field. */
@@ -3341,7 +3469,7 @@ interface UniTimeInputRejection {
3341
3469
  * tagInput/searchInput.
3342
3470
  */
3343
3471
  interface UniTimeInputOptions {
3344
- toggleSymbol?: string;
3472
+ toggleIcon?: IconName;
3345
3473
  listColor?: ContainerColorToken;
3346
3474
  listShadow?: Shadow;
3347
3475
  listBorderRadius?: Radius;
@@ -3363,28 +3491,35 @@ interface UniTimeInputOptions {
3363
3491
  * the field, flagged, with a `rejected` event.
3364
3492
  */
3365
3493
  declare class UniTimeInputComponent extends BaseComponent<UniTimeInputOptions> implements FormValueControl<UniTime | undefined> {
3366
- readonly value: _angular_core.ModelSignal<string>;
3494
+ readonly value: _angular_core.ModelSignal<string | undefined>;
3367
3495
  readonly disabled: _angular_core.InputSignal<boolean>;
3368
3496
  readonly touched: _angular_core.ModelSignal<boolean>;
3497
+ /**
3498
+ * Angular 22 marks the bound field touched through this output; the
3499
+ * `touched` model above is bound inward by the directive and no longer
3500
+ * propagates back out. Emitted wherever this control already decided
3501
+ * the user was done with it.
3502
+ */
3503
+ readonly touch: _angular_core.OutputEmitterRef<void>;
3369
3504
  readonly invalid: _angular_core.InputSignal<boolean>;
3370
3505
  readonly dirty: _angular_core.InputSignal<boolean>;
3371
3506
  readonly required: _angular_core.InputSignal<boolean>;
3372
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
3507
+ readonly ariaDescribedBy: _angular_core.InputSignal<string | undefined>;
3373
3508
  /** Accessible name for the field, e.g. "Start time". */
3374
3509
  label: _angular_core.InputSignal<string>;
3375
- placeholder: _angular_core.InputSignal<string>;
3510
+ placeholder: _angular_core.InputSignal<string | undefined>;
3376
3511
  /** Generated list granularity, in minutes. */
3377
3512
  minuteStep: _angular_core.InputSignal<number>;
3378
3513
  /** Earliest allowed time (inclusive), `'09:00'`. */
3379
- minTime: _angular_core.InputSignal<string>;
3514
+ minTime: _angular_core.InputSignal<string | undefined>;
3380
3515
  /** Latest allowed time (inclusive), `'17:00'`. */
3381
- maxTime: _angular_core.InputSignal<string>;
3516
+ maxTime: _angular_core.InputSignal<string | undefined>;
3382
3517
  /** Exact allowed times (scheduling). When set, typed entry must match one. */
3383
- slots: _angular_core.InputSignal<string[]>;
3518
+ slots: _angular_core.InputSignal<string[] | undefined>;
3384
3519
  /** 12-hour display; defaults from the locale. The value stays 24-hour. */
3385
- hour12: _angular_core.InputSignal<boolean>;
3520
+ hour12: _angular_core.InputSignal<boolean | undefined>;
3386
3521
  /** BCP 47 tag for the display format; defaults to the document language. */
3387
- locale: _angular_core.InputSignal<string>;
3522
+ locale: _angular_core.InputSignal<string | undefined>;
3388
3523
  commitOnBlur: _angular_core.InputSignal<boolean>;
3389
3524
  /** Renders without its own input-box chrome, for composers like uni-date-time-input. */
3390
3525
  embedded: _angular_core.InputSignal<boolean>;
@@ -3396,7 +3531,7 @@ declare class UniTimeInputComponent extends BaseComponent<UniTimeInputOptions> i
3396
3531
  /** Ties the popup to the field so the browser tracks it in the top layer. */
3397
3532
  private readonly anchor;
3398
3533
  /** `manual` where the top layer is usable, else null — see the popup helper. */
3399
- protected readonly popupAttr: "manual";
3534
+ protected readonly popupAttr: "manual" | null;
3400
3535
  constructor();
3401
3536
  protected readonly srOnly: string;
3402
3537
  /** A refused commit — styles the field and sets aria-invalid until edited. */
@@ -3436,7 +3571,7 @@ declare class UniTimeInputComponent extends BaseComponent<UniTimeInputOptions> i
3436
3571
  protected readonly embeddedClass: _angular_core.Signal<string>;
3437
3572
  protected readonly listClass: _angular_core.Signal<string>;
3438
3573
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniTimeInputComponent, never>;
3439
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniTimeInputComponent, "uni-time-input, TimeInput", 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; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; "minTime": { "alias": "minTime"; "required": false; "isSignal": true; }; "maxTime": { "alias": "maxTime"; "required": false; "isSignal": true; }; "slots": { "alias": "slots"; "required": false; "isSignal": true; }; "hour12": { "alias": "hour12"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "commitOnBlur": { "alias": "commitOnBlur"; "required": false; "isSignal": true; }; "embedded": { "alias": "embedded"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "rejected": "rejected"; }, never, never, true, never>;
3574
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniTimeInputComponent, "uni-time-input, TimeInput", 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; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; "minTime": { "alias": "minTime"; "required": false; "isSignal": true; }; "maxTime": { "alias": "maxTime"; "required": false; "isSignal": true; }; "slots": { "alias": "slots"; "required": false; "isSignal": true; }; "hour12": { "alias": "hour12"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "commitOnBlur": { "alias": "commitOnBlur"; "required": false; "isSignal": true; }; "embedded": { "alias": "embedded"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "touch": "touch"; "rejected": "rejected"; }, never, never, true, never>;
3440
3575
  }
3441
3576
 
3442
3577
  /**
@@ -3448,15 +3583,6 @@ interface UniToggleVariant {
3448
3583
  accent: ColorKey;
3449
3584
  }
3450
3585
  interface UniToggleOptions {
3451
- /**
3452
- * @deprecated Track height in px, from before the toggle had a `sizes` block.
3453
- * Still honoured — and still wins when set, since a theme carrying it opted
3454
- * into the old derived-ratio geometry (width = 2x, knob = 0.8x) — but it
3455
- * applies to every instance regardless of the `size` input. Prefer the
3456
- * theme's `toggle.sizes` block, which gives each size token its own
3457
- * `width` / `height` / `padding`.
3458
- */
3459
- size?: number;
3460
3586
  /** Off-state track color token. */
3461
3587
  trackColor?: ColorKey;
3462
3588
  /** Knob color token. */
@@ -3475,6 +3601,13 @@ declare class UniToggleComponent extends BaseComponent<UniToggleOptions, UniTogg
3475
3601
  readonly checked: _angular_core.ModelSignal<boolean>;
3476
3602
  readonly disabled: _angular_core.InputSignal<boolean>;
3477
3603
  readonly touched: _angular_core.ModelSignal<boolean>;
3604
+ /**
3605
+ * Angular 22 marks the bound field touched through this output; the
3606
+ * `touched` model above is bound inward by the directive and no longer
3607
+ * propagates back out. Emitted wherever this control already decided
3608
+ * the user was done with it.
3609
+ */
3610
+ readonly touch: _angular_core.OutputEmitterRef<void>;
3478
3611
  readonly invalid: _angular_core.InputSignal<boolean>;
3479
3612
  readonly dirty: _angular_core.InputSignal<boolean>;
3480
3613
  /** Synced from required() validators by the Signal Forms [formField] directive. */
@@ -3483,8 +3616,8 @@ declare class UniToggleComponent extends BaseComponent<UniToggleOptions, UniTogg
3483
3616
  * Id(s) of external element(s) describing this control — typically your
3484
3617
  * app-rendered error message — exposed as aria-describedby.
3485
3618
  */
3486
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
3487
- readonly label: _angular_core.InputSignal<string>;
3619
+ readonly ariaDescribedBy: _angular_core.InputSignal<string | undefined>;
3620
+ readonly label: _angular_core.InputSignal<string | undefined>;
3488
3621
  /**
3489
3622
  * Checked-state track color token, overriding the theme's
3490
3623
  * `toggle.behavior.checkedColor`.
@@ -3494,7 +3627,7 @@ declare class UniToggleComponent extends BaseComponent<UniToggleOptions, UniTogg
3494
3627
  * tell "set to primary" from "not set". Without an input, a theme-level
3495
3628
  * `checkedColor` would silently make per-instance `variant` inert.
3496
3629
  */
3497
- readonly checkedColor: _angular_core.InputSignal<string>;
3630
+ readonly checkedColor: _angular_core.InputSignal<string | undefined>;
3498
3631
  protected readonly showError: _angular_core.Signal<boolean>;
3499
3632
  markAsTouched(): void;
3500
3633
  handleChange(event: Event): void;
@@ -3525,7 +3658,7 @@ declare class UniToggleComponent extends BaseComponent<UniToggleOptions, UniTogg
3525
3658
  /** A chrome colour by token — no silent fallback; see `uni-radio`. */
3526
3659
  private color;
3527
3660
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniToggleComponent, never>;
3528
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniToggleComponent, "uni-toggle", 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; }; "checkedColor": { "alias": "checkedColor"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "touched": "touchedChange"; }, never, never, true, never>;
3661
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniToggleComponent, "uni-toggle", 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; }; "checkedColor": { "alias": "checkedColor"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "touched": "touchedChange"; "touch": "touch"; }, never, never, true, never>;
3529
3662
  }
3530
3663
 
3531
3664
  /**
@@ -3567,7 +3700,7 @@ interface UniAppBarOptions {
3567
3700
  */
3568
3701
  declare class UniAppBarComponent extends BaseComponent<UniAppBarOptions> {
3569
3702
  /** Bar title; alternatively project your own center content. */
3570
- title: _angular_core.InputSignal<string>;
3703
+ title: _angular_core.InputSignal<string | undefined>;
3571
3704
  /** Stick the bar to the top of its scroll container. */
3572
3705
  sticky: _angular_core.InputSignal<boolean>;
3573
3706
  protected readonly className: _angular_core.Signal<string>;
@@ -3582,7 +3715,7 @@ interface UniAvatarOptions {
3582
3715
  /** Typeface token for the initials. */
3583
3716
  typeface?: Typeface;
3584
3717
  /** Symbol shown when there is no image and no name to take initials from. */
3585
- fallbackSymbol?: string;
3718
+ fallbackIcon?: IconName;
3586
3719
  }
3587
3720
  /** Theme-level options for `uni-avatar-group`. */
3588
3721
  interface UniAvatarGroupOptions {
@@ -3601,15 +3734,15 @@ interface UniAvatarGroupOptions {
3601
3734
  */
3602
3735
  declare class UniAvatarComponent extends BaseComponent<UniAvatarOptions> {
3603
3736
  /** Image URL; on load error the avatar falls back to initials/symbol. */
3604
- src: _angular_core.InputSignal<string>;
3737
+ src: _angular_core.InputSignal<string | undefined>;
3605
3738
  /** Person's name: drives the initials and the accessible label. */
3606
- name: _angular_core.InputSignal<string>;
3739
+ name: _angular_core.InputSignal<string | undefined>;
3607
3740
  /** Verbatim text instead of derived initials (e.g. a group's “+3”). */
3608
- text: _angular_core.InputSignal<string>;
3741
+ text: _angular_core.InputSignal<string | undefined>;
3609
3742
  protected readonly imageFailed: _angular_core.WritableSignal<boolean>;
3610
3743
  protected readonly showImage: _angular_core.Signal<boolean>;
3611
3744
  protected readonly initials: _angular_core.Signal<string>;
3612
- protected readonly label: _angular_core.Signal<string>;
3745
+ protected readonly label: _angular_core.Signal<string | undefined>;
3613
3746
  protected readonly className: _angular_core.Signal<string>;
3614
3747
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniAvatarComponent, never>;
3615
3748
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniAvatarComponent, "uni-avatar", never, { "src": { "alias": "src"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "text": { "alias": "text"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -3622,7 +3755,7 @@ declare class UniAvatarComponent extends BaseComponent<UniAvatarOptions> {
3622
3755
  */
3623
3756
  declare class UniAvatarGroupComponent extends BaseComponent<UniAvatarGroupOptions> {
3624
3757
  /** Show at most this many avatars; the rest collapse into a “+N” chip. */
3625
- max: _angular_core.InputSignal<number>;
3758
+ max: _angular_core.InputSignal<number | undefined>;
3626
3759
  private readonly avatars;
3627
3760
  protected readonly surplus: _angular_core.Signal<number>;
3628
3761
  protected readonly className: _angular_core.Signal<string>;
@@ -3633,11 +3766,11 @@ declare class UniAvatarGroupComponent extends BaseComponent<UniAvatarGroupOption
3633
3766
  type ImagePosition = 'top' | 'bottom' | 'left' | 'right' | 'center' | string;
3634
3767
  declare class UniBackgroundComponent {
3635
3768
  theme: ThemeService;
3636
- image: _angular_core.InputSignal<string>;
3637
- imagePosition: _angular_core.InputSignal<string>;
3638
- imageSize: _angular_core.InputSignal<string | number>;
3769
+ image: _angular_core.InputSignal<string | undefined>;
3770
+ imagePosition: _angular_core.InputSignal<string | undefined>;
3771
+ imageSize: _angular_core.InputSignal<string | number | undefined>;
3639
3772
  height: _angular_core.InputSignal<string | number>;
3640
- width: _angular_core.InputSignal<string | number>;
3773
+ width: _angular_core.InputSignal<string | number | undefined>;
3641
3774
  protected readonly className: _angular_core.Signal<string>;
3642
3775
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniBackgroundComponent, never>;
3643
3776
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniBackgroundComponent, "uni-background", never, { "image": { "alias": "image"; "required": false; "isSignal": true; }; "imagePosition": { "alias": "imagePosition"; "required": false; "isSignal": true; }; "imageSize": { "alias": "imageSize"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
@@ -3648,9 +3781,9 @@ interface UniBadgeOptions {
3648
3781
  }
3649
3782
 
3650
3783
  declare class UniBadgeComponent extends BaseComponent<UniBadgeOptions> {
3651
- color: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
3784
+ color: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry | undefined>;
3652
3785
  useVariant: _angular_core.InputSignal<boolean>;
3653
- width: _angular_core.InputSignal<number>;
3786
+ width: _angular_core.InputSignal<number | undefined>;
3654
3787
  protected readonly className: _angular_core.Signal<string>;
3655
3788
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniBadgeComponent, never>;
3656
3789
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniBadgeComponent, "[uni-badge]", never, { "color": { "alias": "color"; "required": false; "isSignal": true; }; "useVariant": { "alias": "useVariant"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
@@ -3671,7 +3804,7 @@ interface UniBreadcrumbOptions {
3671
3804
  /** Color of the current (last) item. */
3672
3805
  currentColor?: ColorKey;
3673
3806
  /** Material symbol drawn between items. */
3674
- separatorSymbol?: string;
3807
+ separatorIcon?: IconName;
3675
3808
  /** Space around separators, as a spacing token. */
3676
3809
  gap?: OptionalSize;
3677
3810
  }
@@ -3717,6 +3850,8 @@ interface UniButtonVariant {
3717
3850
  }
3718
3851
  /** Theme-level options for `uni-text-button`, resolved by token name. */
3719
3852
  interface UniButtonOptions {
3853
+ /** Named motion primitive for the hover and press transition. Defaults to `control`. */
3854
+ motion?: Motion;
3720
3855
  /**
3721
3856
  * Corner radius as a radii token. The default theme uses `max` (pill);
3722
3857
  * because this is a token, the theme's radii scale — including generated
@@ -3746,12 +3881,14 @@ declare class RippleDirective {
3746
3881
  }
3747
3882
 
3748
3883
  declare class UniButtonComponent extends BaseComponent<UniButtonOptions, UniButtonVariant> {
3749
- readonly disable: _angular_core.InputSignal<boolean>;
3750
- readonly loading: _angular_core.InputSignal<boolean>;
3884
+ readonly disable: _angular_core.InputSignal<boolean | undefined>;
3885
+ readonly loading: _angular_core.InputSignal<boolean | undefined>;
3751
3886
  readonly fullWidth: _angular_core.InputSignal<boolean>;
3752
- readonly symbolLeft: _angular_core.InputSignal<string>;
3753
- readonly symbolRight: _angular_core.InputSignal<string>;
3887
+ readonly symbolLeft: _angular_core.InputSignal<string | undefined>;
3888
+ readonly symbolRight: _angular_core.InputSignal<string | undefined>;
3754
3889
  spinnerBox: string;
3890
+ /** Resolved from the component's `motion` option; `control` by default. */
3891
+ private readonly motion;
3755
3892
  protected readonly className: _angular_core.Signal<string>;
3756
3893
  /**
3757
3894
  * The focus ring's colour, from the variant's theme entry.
@@ -3775,13 +3912,6 @@ declare class UniButtonComponent extends BaseComponent<UniButtonOptions, UniButt
3775
3912
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniButtonComponent, "button[uni-text-button], button[text-button]", never, { "disable": { "alias": "disable"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "symbolLeft": { "alias": "symbolLeft"; "required": false; "isSignal": true; }; "symbolRight": { "alias": "symbolRight"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof RippleDirective; inputs: {}; outputs: {}; }]>;
3776
3913
  }
3777
3914
 
3778
- declare class UniButtonGroupComponent {
3779
- private themeService;
3780
- protected readonly className: _angular_core.Signal<string>;
3781
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniButtonGroupComponent, never>;
3782
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniButtonGroupComponent, "uni-button-group", never, {}, {}, never, ["*"], true, never>;
3783
- }
3784
-
3785
3915
  interface ButtonGroupConfig {
3786
3916
  tooltipPlacement?: Placement;
3787
3917
  buttonSize: Size;
@@ -3794,6 +3924,25 @@ interface ButtonGroupItem {
3794
3924
  action?: (selectedState?: boolean) => boolean | void;
3795
3925
  toggle?: WritableSignal<boolean>;
3796
3926
  }
3927
+ /**
3928
+ * Theme options for `uni-button-group`. Declared in `ComponentName` since 8.x
3929
+ * but with no entry behind it until 11.0.0, so the segmented frame's border
3930
+ * and corner radius were hardcoded and unreachable from a theme.
3931
+ */
3932
+ interface UniButtonGroupOptions {
3933
+ /** Border primitive around each segment. Defaults to `quaternary`. */
3934
+ border?: Border;
3935
+ /** Corner radius on the outer ends of the group, in px. Defaults to 4. */
3936
+ borderRadius?: number;
3937
+ }
3938
+
3939
+ declare class UniButtonGroupComponent {
3940
+ private themeService;
3941
+ protected readonly componentOptions: _angular_core.WritableSignal<UniButtonGroupOptions>;
3942
+ protected readonly className: _angular_core.Signal<string>;
3943
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniButtonGroupComponent, never>;
3944
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniButtonGroupComponent, "uni-button-group", never, {}, {}, never, ["*"], true, never>;
3945
+ }
3797
3946
 
3798
3947
  /** One rendered day cell — precomputed so the template stays declarative. */
3799
3948
  interface CalendarCell {
@@ -3823,28 +3972,35 @@ declare class UniCalendarComponent extends BaseComponent<UniCalendarOptions> imp
3823
3972
  readonly value: _angular_core.ModelSignal<UniCalendarValue>;
3824
3973
  readonly disabled: _angular_core.InputSignal<boolean>;
3825
3974
  readonly touched: _angular_core.ModelSignal<boolean>;
3975
+ /**
3976
+ * Angular 22 marks the bound field touched through this output; the
3977
+ * `touched` model above is bound inward by the directive and no longer
3978
+ * propagates back out. Emitted wherever this control already decided
3979
+ * the user was done with it.
3980
+ */
3981
+ readonly touch: _angular_core.OutputEmitterRef<void>;
3826
3982
  readonly invalid: _angular_core.InputSignal<boolean>;
3827
3983
  readonly dirty: _angular_core.InputSignal<boolean>;
3828
3984
  readonly required: _angular_core.InputSignal<boolean>;
3829
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
3985
+ readonly ariaDescribedBy: _angular_core.InputSignal<string | undefined>;
3830
3986
  /** `'single'` reads/writes a `UniDate`; `'range'` a `UniDateRange`. */
3831
3987
  mode: _angular_core.InputSignal<UniCalendarMode>;
3832
3988
  /** Shown month, `'YYYY-MM'` — two-way, so an app can drive "jump to June". */
3833
- month: _angular_core.ModelSignal<string>;
3989
+ month: _angular_core.ModelSignal<string | undefined>;
3834
3990
  /** Earliest selectable date (inclusive). */
3835
- minDate: _angular_core.InputSignal<string>;
3991
+ minDate: _angular_core.InputSignal<string | undefined>;
3836
3992
  /** Latest selectable date (inclusive). */
3837
- maxDate: _angular_core.InputSignal<string>;
3993
+ maxDate: _angular_core.InputSignal<string | undefined>;
3838
3994
  /** Blocked days: a list of dates, or a predicate. */
3839
- disabledDates: _angular_core.InputSignal<string[] | ((date: UniDate) => boolean)>;
3995
+ disabledDates: _angular_core.InputSignal<string[] | ((date: UniDate) => boolean) | undefined>;
3840
3996
  /** Availability dots; `label` extends the day's accessible name. */
3841
3997
  markers: _angular_core.InputSignal<UniCalendarMarker[]>;
3842
3998
  /** BCP 47 tag; defaults to the document language, then the browser's. */
3843
- locale: _angular_core.InputSignal<string>;
3999
+ locale: _angular_core.InputSignal<string | undefined>;
3844
4000
  /** First day of week, 0 = Sunday; defaults from the locale's week info. */
3845
- weekStart: _angular_core.InputSignal<0 | 1 | 2 | 3 | 4 | 5 | 6>;
4001
+ weekStart: _angular_core.InputSignal<0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined>;
3846
4002
  /** Names the grid when it stands alone (otherwise the heading names it). */
3847
- ariaLabel: _angular_core.InputSignal<string>;
4003
+ ariaLabel: _angular_core.InputSignal<string | undefined>;
3848
4004
  /** Day geometry token; `sm`/`md`/`lg` map to the theme's `calendar` sizes. */
3849
4005
  size: _angular_core.InputSignal<Size>;
3850
4006
  /** Each committed day, including both ends of a range. */
@@ -3853,9 +4009,9 @@ declare class UniCalendarComponent extends BaseComponent<UniCalendarOptions> imp
3853
4009
  protected readonly headingId: string;
3854
4010
  protected readonly srOnly: string;
3855
4011
  /** Pending range start — set by the first commit, cleared by the second. */
3856
- protected readonly pendingStart: _angular_core.WritableSignal<string>;
4012
+ protected readonly pendingStart: _angular_core.WritableSignal<string | null>;
3857
4013
  /** Hover/focus candidate painting the preview band while a range is pending. */
3858
- protected readonly previewDate: _angular_core.WritableSignal<string>;
4014
+ protected readonly previewDate: _angular_core.WritableSignal<string | null>;
3859
4015
  /** Live-region text; selections are otherwise silent for a screen reader. */
3860
4016
  /** Commits, clears and refusals are otherwise silent to a screen reader. */
3861
4017
  protected readonly announcer: _uni_design_system_uni_angular.Announcer;
@@ -3927,7 +4083,7 @@ declare class UniCalendarComponent extends BaseComponent<UniCalendarOptions> imp
3927
4083
  protected dotClassFor(variant: Variant | undefined): string;
3928
4084
  protected readonly showOutside: _angular_core.Signal<boolean>;
3929
4085
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniCalendarComponent, never>;
3930
- 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>;
4086
+ 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"; "touch": "touch"; "month": "monthChange"; "selected": "selected"; }, never, never, true, never>;
3931
4087
  }
3932
4088
 
3933
4089
  /** Why a callout closed. `programmatic` = the app drove `open` to false. */
@@ -3948,7 +4104,7 @@ interface UniCalloutOptions {
3948
4104
  padding: string;
3949
4105
  headerTypeface: Typeface;
3950
4106
  typeface: Typeface;
3951
- closeSymbol: IconName;
4107
+ closeIcon: IconName;
3952
4108
  arrowSize: number;
3953
4109
  /** Main-axis gap between the spotlight hole edge and the panel, px. */
3954
4110
  offset: number;
@@ -3985,22 +4141,22 @@ declare class UniCalloutComponent extends BaseComponent<UniCalloutOptions> {
3985
4141
  private destroyRef;
3986
4142
  open: _angular_core.ModelSignal<boolean>;
3987
4143
  /** Identifies this callout in `dismissed` payloads. Empty string = unset. */
3988
- key: _angular_core.InputSignal<string>;
4144
+ key: _angular_core.InputSignal<string | undefined>;
3989
4145
  /** Element (or id, resolved at open time) to spotlight. '' = unset. */
3990
- target: _angular_core.InputSignal<string | HTMLElement>;
4146
+ target: _angular_core.InputSignal<string | HTMLElement | undefined>;
3991
4147
  placement: _angular_core.InputSignal<Placement>;
3992
4148
  /** Defaults to `spotlight` when a target resolves, else `dim`. */
3993
- backdrop: _angular_core.InputSignal<"none" | "spotlight" | "dim">;
4149
+ backdrop: _angular_core.InputSignal<"none" | "spotlight" | "dim" | undefined>;
3994
4150
  /** When false, a transparent cover blocks the spotlit target. */
3995
4151
  targetInteractive: _angular_core.InputSignal<boolean>;
3996
4152
  /** Gates Escape and the close button. */
3997
4153
  dismissible: _angular_core.InputSignal<boolean>;
3998
4154
  /** When true, scrim clicks close (reason `backdrop`); else the panel pulses. */
3999
4155
  dismissOnBackdrop: _angular_core.InputSignal<boolean>;
4000
- header: _angular_core.InputSignal<string>;
4156
+ header: _angular_core.InputSignal<string | undefined>;
4001
4157
  arrow: _angular_core.InputSignal<boolean>;
4002
4158
  /** Wins over the header/body labelling; the tour sets "{title}, step n of N". */
4003
- ariaLabel: _angular_core.InputSignal<string>;
4159
+ ariaLabel: _angular_core.InputSignal<string | undefined>;
4004
4160
  /** Accessible name of the dismiss button (the tour passes its skip label). */
4005
4161
  closeLabel: _angular_core.InputSignal<string>;
4006
4162
  opened: _angular_core.OutputEmitterRef<void>;
@@ -4013,7 +4169,7 @@ declare class UniCalloutComponent extends BaseComponent<UniCalloutOptions> {
4013
4169
  protected readonly bodyId: string;
4014
4170
  private readonly anchorName;
4015
4171
  protected readonly showing: _angular_core.WritableSignal<boolean>;
4016
- protected readonly activeTarget: _angular_core.WritableSignal<HTMLElement>;
4172
+ protected readonly activeTarget: _angular_core.WritableSignal<HTMLElement | null>;
4017
4173
  private readonly scrimShown;
4018
4174
  /**
4019
4175
  * Keeps the spotlight pieces rendered and the panel anchored through the
@@ -4098,7 +4254,7 @@ declare class UniCardComponent extends BaseComponent<UniCardOptions> {
4098
4254
  * older themes keep winning.
4099
4255
  */
4100
4256
  protected readonly cardStyle: _angular_core.Signal<{
4101
- boxShadow: string;
4257
+ boxShadow?: string | undefined;
4102
4258
  }>;
4103
4259
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniCardComponent, never>;
4104
4260
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniCardComponent, "uni-card", never, {}, {}, never, ["*"], true, never>;
@@ -4112,9 +4268,9 @@ interface UniDataSearchOptions {
4112
4268
  }
4113
4269
 
4114
4270
  declare class UniDataSearchComponent<T> extends BaseComponent<UniDataSearchOptions> {
4115
- datasource: _angular_core.InputSignal<UniDatasource<T>>;
4271
+ datasource: _angular_core.InputSignal<UniDatasource<T> | undefined>;
4116
4272
  placeholder: _angular_core.InputSignal<string>;
4117
- fields: _angular_core.InputSignal<string[]>;
4273
+ fields: _angular_core.InputSignal<string[] | undefined>;
4118
4274
  searchValue: _angular_core.WritableSignal<string>;
4119
4275
  inputClassName: string;
4120
4276
  constructor();
@@ -4134,6 +4290,8 @@ interface ColumnDefinition<T> {
4134
4290
  textAlign?: 'left' | 'right' | 'center';
4135
4291
  }
4136
4292
  interface UniDataTableOptions {
4293
+ /** Named motion primitive for the row hover transition. Defaults to `control`. */
4294
+ motion?: Motion;
4137
4295
  border?: Border;
4138
4296
  borderRadius?: Radius;
4139
4297
  color?: ContainerColorToken;
@@ -4166,14 +4324,18 @@ declare class UniDataTableComponent<T> extends BaseComponent<UniDataTableOptions
4166
4324
  detailRowTemplate: _angular_core.InputSignal<TemplateRef<{
4167
4325
  $implicit: T;
4168
4326
  index: number;
4169
- }>>;
4170
- expandedIndex: _angular_core.WritableSignal<number>;
4327
+ }> | undefined>;
4328
+ expandedIndex: _angular_core.WritableSignal<number | null>;
4171
4329
  useMultiSelect: _angular_core.InputSignal<boolean>;
4172
4330
  useRowClick: _angular_core.InputSignal<boolean>;
4173
- highlight?: _angular_core.InputSignal<(row: T) => boolean>;
4174
- height: _angular_core.InputSignal<string>;
4331
+ highlight?: _angular_core.InputSignal<((row: T) => boolean) | undefined> | undefined;
4332
+ height: _angular_core.InputSignal<string | undefined>;
4175
4333
  scrollable: _angular_core.WritableSignal<boolean>;
4176
- loadingOverlayClass: string;
4334
+ /** Row hover answers the pointer; the overlay arrives; a detail row reveals. */
4335
+ private readonly motion;
4336
+ private readonly overlayMotion;
4337
+ private readonly revealMotion;
4338
+ protected readonly loadingOverlayClass: _angular_core.Signal<string>;
4177
4339
  rowSelect: _angular_core.OutputEmitterRef<T>;
4178
4340
  rowClick: _angular_core.OutputEmitterRef<T>;
4179
4341
  protected readonly tableClass: _angular_core.Signal<string>;
@@ -4191,7 +4353,7 @@ declare class UniDataTableComponent<T> extends BaseComponent<UniDataTableOptions
4191
4353
  isHighlighted(row: T): boolean;
4192
4354
  protected readonly String: StringConstructor;
4193
4355
  handleScrollable(scrollable: boolean): void;
4194
- getBorder(name: string | undefined): string;
4356
+ getBorder(name: string | undefined): string | undefined;
4195
4357
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniDataTableComponent<any>, never>;
4196
4358
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDataTableComponent<any>, "uni-data-table", never, { "datasource": { "alias": "datasource"; "required": true; "isSignal": true; }; "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "detailRowTemplate": { "alias": "detailRowTemplate"; "required": false; "isSignal": true; }; "useMultiSelect": { "alias": "useMultiSelect"; "required": false; "isSignal": true; }; "useRowClick": { "alias": "useRowClick"; "required": false; "isSignal": true; }; "highlight": { "alias": "highlight"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; }, { "rowSelect": "rowSelect"; "rowClick": "rowClick"; }, never, ["data-table-header", "data-table-footer"], true, never>;
4197
4359
  }
@@ -4226,14 +4388,14 @@ interface UniDialogButtonsOptions {
4226
4388
 
4227
4389
  declare class UniDialogButtonsComponent extends BaseComponent<UniDialogButtonsOptions> {
4228
4390
  private dialog;
4229
- confirmButtonText: _angular_core.InputSignal<string>;
4230
- confirmButtonVariant: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
4231
- cancelButtonText: _angular_core.InputSignal<string>;
4232
- cancelButtonVariant: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
4233
- disableConfirm: _angular_core.InputSignal<boolean>;
4234
- padding: _angular_core.InputSignal<NullableSize>;
4235
- paddingBottom: _angular_core.InputSignal<NullableSize>;
4236
- justifyContent: _angular_core.InputSignal<JustifyContent>;
4391
+ confirmButtonText: _angular_core.InputSignal<string | undefined>;
4392
+ confirmButtonVariant: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry | undefined>;
4393
+ cancelButtonText: _angular_core.InputSignal<string | undefined>;
4394
+ cancelButtonVariant: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry | undefined>;
4395
+ disableConfirm: _angular_core.InputSignal<boolean | undefined>;
4396
+ padding: _angular_core.InputSignal<NullableSize | undefined>;
4397
+ paddingBottom: _angular_core.InputSignal<NullableSize | undefined>;
4398
+ justifyContent: _angular_core.InputSignal<JustifyContent | undefined>;
4237
4399
  confirmed: _angular_core.OutputEmitterRef<void>;
4238
4400
  protected confirmVariant: _angular_core.Signal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
4239
4401
  protected cancelVariant: _angular_core.Signal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
@@ -4262,14 +4424,13 @@ interface UniDialogHeaderOptions {
4262
4424
  /** Border drawn under the pinned header, separating it from the scrolling body. */
4263
4425
  divider?: Border;
4264
4426
  closeButtonIcon?: IconName;
4265
- closeButtonSymbol?: string;
4266
4427
  closeButtonSize?: Size;
4267
4428
  }
4268
4429
 
4269
4430
  declare class UniDialogHeaderComponent extends BaseComponent<UniDialogHeaderOptions> {
4270
4431
  private dialog;
4271
4432
  /** Attached to the title element so the parent dialog is labelled by it. */
4272
- protected readonly titleId: string;
4433
+ protected readonly titleId: string | null;
4273
4434
  constructor();
4274
4435
  closeDialog(): void;
4275
4436
  /**
@@ -4339,13 +4500,13 @@ declare class UniDialogComponent extends BaseComponent<UniDialogOptions> {
4339
4500
  * Accessible name for dialogs without a DialogHeader. When a DialogHeader
4340
4501
  * is present it labels the dialog automatically via aria-labelledby.
4341
4502
  */
4342
- ariaLabel: _angular_core.InputSignal<string>;
4503
+ ariaLabel: _angular_core.InputSignal<string | undefined>;
4343
4504
  /**
4344
4505
  * CSS selector for the element to focus when the dialog opens. Defaults to
4345
4506
  * the browser's native behavior (first focusable element).
4346
4507
  */
4347
- initialFocus: _angular_core.InputSignal<string>;
4348
- defaultCloseButton: _angular_core.InputSignal<boolean>;
4508
+ initialFocus: _angular_core.InputSignal<string | undefined>;
4509
+ defaultCloseButton: _angular_core.InputSignal<boolean | undefined>;
4349
4510
  /** Id referenced by aria-labelledby; DialogHeader attaches it to the title. */
4350
4511
  readonly titleId: string;
4351
4512
  readonly hasTitle: _angular_core.WritableSignal<boolean>;
@@ -4434,13 +4595,13 @@ interface UniDrawerButtonsOptions {
4434
4595
  */
4435
4596
  declare class UniDrawerButtonsComponent extends BaseComponent<UniDrawerButtonsOptions> {
4436
4597
  private readonly drawer;
4437
- confirmButtonText: _angular_core.InputSignal<string>;
4438
- confirmButtonVariant: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
4439
- cancelButtonText: _angular_core.InputSignal<string>;
4440
- cancelButtonVariant: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
4441
- disableConfirm: _angular_core.InputSignal<boolean>;
4442
- padding: _angular_core.InputSignal<NullableSize>;
4443
- justifyContent: _angular_core.InputSignal<JustifyContent>;
4598
+ confirmButtonText: _angular_core.InputSignal<string | undefined>;
4599
+ confirmButtonVariant: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry | undefined>;
4600
+ cancelButtonText: _angular_core.InputSignal<string | undefined>;
4601
+ cancelButtonVariant: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry | undefined>;
4602
+ disableConfirm: _angular_core.InputSignal<boolean | undefined>;
4603
+ padding: _angular_core.InputSignal<NullableSize | undefined>;
4604
+ justifyContent: _angular_core.InputSignal<JustifyContent | undefined>;
4444
4605
  confirmed: _angular_core.OutputEmitterRef<void>;
4445
4606
  protected confirmVariant: _angular_core.Signal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
4446
4607
  protected cancelVariant: _angular_core.Signal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
@@ -4479,7 +4640,6 @@ interface UniDrawerHeaderOptions {
4479
4640
  /** Rule separating the header from the scrolling body, as a border primitive. */
4480
4641
  divider?: Border;
4481
4642
  closeButtonIcon?: IconName;
4482
- closeButtonSymbol?: string;
4483
4643
  closeButtonSize?: Size;
4484
4644
  }
4485
4645
 
@@ -4494,9 +4654,9 @@ interface UniDrawerHeaderOptions {
4494
4654
  declare class UniDrawerHeaderComponent extends BaseComponent<UniDrawerHeaderOptions> {
4495
4655
  private readonly drawer;
4496
4656
  /** Title text. Falls back to the drawer's `headline`; projected content wins over both. */
4497
- headline: _angular_core.InputSignal<string>;
4657
+ headline: _angular_core.InputSignal<string | undefined>;
4498
4658
  /** Attached to the title so the drawer is labelled by it. */
4499
- protected readonly titleId: string;
4659
+ protected readonly titleId: string | null;
4500
4660
  protected readonly title: _angular_core.Signal<string>;
4501
4661
  protected readonly showClose: _angular_core.Signal<boolean>;
4502
4662
  constructor();
@@ -4612,17 +4772,17 @@ declare class UniDrawerComponent extends BaseComponent<UniDrawerOptions> {
4612
4772
  * is not, and a wrong accessible name is worse than a missing one — the
4613
4773
  * missing one is at least caught by any audit.
4614
4774
  */
4615
- ariaLabel: _angular_core.InputSignal<string>;
4775
+ ariaLabel: _angular_core.InputSignal<string | undefined>;
4616
4776
  /**
4617
4777
  * Title for the drawer's header row. Shorthand for projecting a
4618
4778
  * `[uni-drawer-header]`; project one instead when the header needs more
4619
4779
  * than a title (a record counter, prev/next navigation).
4620
4780
  */
4621
- headline: _angular_core.InputSignal<string>;
4781
+ headline: _angular_core.InputSignal<string | undefined>;
4622
4782
  /** Whether the header row renders a close button. */
4623
4783
  defaultCloseButton: _angular_core.InputSignal<boolean>;
4624
4784
  /** Panel width in px, overriding the theme's `drawer.behavior.width`. */
4625
- width: _angular_core.InputSignal<number>;
4785
+ width: _angular_core.InputSignal<number | undefined>;
4626
4786
  /**
4627
4787
  * Whether the overlay dims the page behind it, overriding the theme's
4628
4788
  * `drawer.behavior.scrim`. False leaves the backdrop transparent so the page
@@ -4632,13 +4792,13 @@ declare class UniDrawerComponent extends BaseComponent<UniDrawerOptions> {
4632
4792
  * This does not make the drawer non-modal: focus is still trapped and the
4633
4793
  * page behind is still inert. It is a visibility choice, not a modality one.
4634
4794
  */
4635
- scrim: _angular_core.InputSignal<boolean>;
4795
+ scrim: _angular_core.InputSignal<boolean | undefined>;
4636
4796
  /**
4637
4797
  * CSS selector for the element to focus when the overlay opens. The native
4638
4798
  * default is the first focusable element, which in an editor panel is
4639
4799
  * usually the close button rather than the first field.
4640
4800
  */
4641
- initialFocus: _angular_core.InputSignal<string>;
4801
+ initialFocus: _angular_core.InputSignal<string | undefined>;
4642
4802
  /**
4643
4803
  * The drawer is *asking* to close — Escape, the backdrop, or a close/cancel
4644
4804
  * button. Pair with `disableAutoClose` to hold the panel open while an async
@@ -4655,7 +4815,7 @@ declare class UniDrawerComponent extends BaseComponent<UniDrawerOptions> {
4655
4815
  readonly hasHeader: _angular_core.WritableSignal<boolean>;
4656
4816
  /** Id referenced by aria-labelledby; the header row attaches it to its title. */
4657
4817
  readonly titleId: string;
4658
- protected readonly labelledBy: _angular_core.Signal<string>;
4818
+ protected readonly labelledBy: _angular_core.Signal<string | null>;
4659
4819
  protected readonly headerTemplate: _angular_core.Signal<TemplateRef<unknown>>;
4660
4820
  protected readonly bodyTemplate: _angular_core.Signal<TemplateRef<unknown>>;
4661
4821
  protected readonly footerTemplate: _angular_core.Signal<TemplateRef<unknown>>;
@@ -4725,16 +4885,16 @@ declare class UniDropdownComponent extends BaseComponent<UniDropdownOptions> imp
4725
4885
  * contains (e.g. 'menu' for Menu, 'dialog' for rich content). When unset,
4726
4886
  * only aria-expanded/aria-controls are managed.
4727
4887
  */
4728
- ariaHasPopup: _angular_core.InputSignal<AriaHasPopup>;
4888
+ ariaHasPopup: _angular_core.InputSignal<AriaHasPopup | null>;
4729
4889
  /** Document-unique id of the popover element, for aria-controls wiring. */
4730
4890
  readonly popoverId: string;
4731
- paddingVertical: _angular_core.InputSignal<NullableSize>;
4732
- paddingHorizontal: _angular_core.InputSignal<NullableSize>;
4733
- border: _angular_core.InputSignal<string>;
4734
- borderRadius: _angular_core.InputSignal<string>;
4735
- shadow: _angular_core.InputSignal<string>;
4891
+ paddingVertical: _angular_core.InputSignal<NullableSize | undefined>;
4892
+ paddingHorizontal: _angular_core.InputSignal<NullableSize | undefined>;
4893
+ border: _angular_core.InputSignal<string | undefined>;
4894
+ borderRadius: _angular_core.InputSignal<string | undefined>;
4895
+ shadow: _angular_core.InputSignal<string | undefined>;
4736
4896
  /** A container color pair; `color` belongs to `uni-text` across the library. */
4737
- containerColor: _angular_core.InputSignal<ContainerColorToken>;
4897
+ containerColor: _angular_core.InputSignal<ContainerColorToken | undefined>;
4738
4898
  dropdownShowing: _angular_core.OutputEmitterRef<boolean>;
4739
4899
  dropdownHiding: _angular_core.OutputEmitterRef<boolean>;
4740
4900
  dropdownRef: ElementRef<HTMLDivElement>;
@@ -4781,7 +4941,7 @@ declare class UniExpandComponent extends BaseComponent<UniExpandOptions> {
4781
4941
  * duration derives from the `expand` theme options' `transitionSpeed`
4782
4942
  * scaled by content height (see `duration`).
4783
4943
  */
4784
- transitionSpeed: _angular_core.InputSignal<number>;
4944
+ transitionSpeed: _angular_core.InputSignal<number | undefined>;
4785
4945
  /** Referenced by the controlling toggle's aria-controls. */
4786
4946
  readonly regionId: string;
4787
4947
  /**
@@ -4864,17 +5024,17 @@ declare class UniExpandComponent extends BaseComponent<UniExpandOptions> {
4864
5024
  declare class UniExpandToggleComponent {
4865
5025
  collapsed: _angular_core.ModelSignal<boolean>;
4866
5026
  /** Id of the Expand region this toggle controls (see UniExpandComponent.regionId). */
4867
- ariaControls: _angular_core.InputSignal<string>;
5027
+ ariaControls: _angular_core.InputSignal<string | undefined>;
4868
5028
  /** Names the region. Setting it switches the toggle to its labelled shape. */
4869
- label: _angular_core.InputSignal<string>;
5029
+ label: _angular_core.InputSignal<string | undefined>;
4870
5030
  /** Muted qualifier beside the label ("for POs & custom orders"). Needs `label`. */
4871
- sublabel: _angular_core.InputSignal<string>;
5031
+ sublabel: _angular_core.InputSignal<string | undefined>;
4872
5032
  /**
4873
5033
  * Rotation duration in seconds. Expand Area binds the region's resolved
4874
5034
  * `duration` here so chevron and reveal share one clock even when the
4875
5035
  * region is size-scaled or overridden per instance.
4876
5036
  */
4877
- transitionSpeed: _angular_core.InputSignal<number>;
5037
+ transitionSpeed: _angular_core.InputSignal<number | undefined>;
4878
5038
  /** Fallback clock when no `transitionSpeed` is bound: the `expand` entry's
4879
5039
  motion token — the same one the region itself reads. */
4880
5040
  private readonly themeService;
@@ -4910,22 +5070,22 @@ declare class UniExpandAreaComponent {
4910
5070
  }
4911
5071
 
4912
5072
  declare class UniFileDropZoneComponent {
4913
- selectedFile: _angular_core.WritableSignal<File>;
4914
- selectedFileName: _angular_core.Signal<string>;
4915
- attachmentState: _angular_core.WritableSignal<"upload">;
5073
+ selectedFile: _angular_core.WritableSignal<File | undefined>;
5074
+ selectedFileName: _angular_core.Signal<string | undefined>;
5075
+ attachmentState: _angular_core.WritableSignal<"upload" | undefined>;
4916
5076
  fileSelectorRef: _angular_core.Signal<ElementRef<HTMLInputElement>>;
4917
5077
  get fileSelectorElement(): HTMLInputElement;
4918
- height: _angular_core.InputSignal<string | number>;
5078
+ height: _angular_core.InputSignal<string | number | undefined>;
4919
5079
  borderRadius: _angular_core.InputSignal<string>;
4920
5080
  border: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
4921
5081
  padding: _angular_core.InputSignal<NullableSize>;
4922
5082
  useBrowseButton: _angular_core.InputSignal<boolean>;
4923
5083
  browseButtonText: _angular_core.InputSignal<string>;
4924
5084
  allowedFileExtensions: _angular_core.InputSignal<string[]>;
4925
- label: _angular_core.InputSignal<string>;
4926
- helpTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
5085
+ label: _angular_core.InputSignal<string | undefined>;
5086
+ helpTemplate: _angular_core.InputSignal<TemplateRef<unknown> | null>;
4927
5087
  helpTemplateContext: _angular_core.InputSignal<unknown>;
4928
- fileAttached: _angular_core.OutputEmitterRef<File>;
5088
+ fileAttached: _angular_core.OutputEmitterRef<File | undefined>;
4929
5089
  fileRemoved: _angular_core.OutputEmitterRef<void>;
4930
5090
  /**
4931
5091
  * The zone acts as the keyboard-reachable file picker only when no browse
@@ -5041,7 +5201,7 @@ declare const listboxPopupStyles: (theme: ThemeService, options: UniListboxPopup
5041
5201
 
5042
5202
  declare class UniIconComponent {
5043
5203
  private themeService;
5044
- color: _angular_core.InputSignal<string>;
5204
+ color: _angular_core.InputSignal<string | undefined>;
5045
5205
  name: _angular_core.InputSignal<IconName>;
5046
5206
  /**
5047
5207
  * Explicit square size. Bare numbers are px; strings pass through, so any CSS
@@ -5052,11 +5212,11 @@ declare class UniIconComponent {
5052
5212
  * padding. Set it at call sites that would otherwise need a width/height
5053
5213
  * rule just to size one icon.
5054
5214
  */
5055
- size: _angular_core.InputSignal<CssLength>;
5215
+ size: _angular_core.InputSignal<CssLength | undefined>;
5056
5216
  /** Resolved from the theme's icon primitives; unknown names render nothing. */
5057
5217
  protected readonly path: _angular_core.Signal<string>;
5058
5218
  /** `null` leaves the styles off entirely, falling back to the stylesheet. */
5059
- protected readonly sizeValue: _angular_core.Signal<string>;
5219
+ protected readonly sizeValue: _angular_core.Signal<string | null>;
5060
5220
  protected readonly className: _angular_core.Signal<string>;
5061
5221
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniIconComponent, never>;
5062
5222
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniIconComponent, "uni-icon", never, { "color": { "alias": "color"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -5075,19 +5235,20 @@ declare class UniIconButtonComponent {
5075
5235
  private theme;
5076
5236
  config: _angular_core.Signal<_uni_design_system_uni_core.ComponentTheme<{
5077
5237
  borderRadius?: RadiiSize;
5238
+ motion?: Motion;
5078
5239
  }, UniIconButtonVariant>>;
5079
5240
  /**
5080
5241
  * Accessible name for the button. Alternative to projecting text content
5081
5242
  * (`<button icon-button>Close</button>`); one of the two is required for
5082
5243
  * an icon-only button to be announced correctly.
5083
5244
  */
5084
- ariaLabel: _angular_core.InputSignal<string>;
5085
- iconName: _angular_core.InputSignal<IconName>;
5086
- symbolName: _angular_core.InputSignal<string>;
5245
+ ariaLabel: _angular_core.InputSignal<string | undefined>;
5246
+ iconName: _angular_core.InputSignal<IconName | undefined>;
5247
+ symbolName: _angular_core.InputSignal<string | undefined>;
5087
5248
  variant: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
5088
5249
  size: _angular_core.InputSignal<Size>;
5089
- disable: _angular_core.InputSignal<boolean>;
5090
- loading: _angular_core.InputSignal<boolean>;
5250
+ disable: _angular_core.InputSignal<boolean | undefined>;
5251
+ loading: _angular_core.InputSignal<boolean | undefined>;
5091
5252
  opticalSize: _angular_core.InputSignal<number>;
5092
5253
  protected readonly srOnlyClass: string;
5093
5254
  /**
@@ -5098,7 +5259,9 @@ declare class UniIconButtonComponent {
5098
5259
  * Themes that do use padding (Carbon) set a matching `fontSize`, so they land
5099
5260
  * on the same glyph either way.
5100
5261
  */
5101
- protected readonly glyphSize: _angular_core.Signal<string | number>;
5262
+ protected readonly glyphSize: _angular_core.Signal<string | number | undefined>;
5263
+ /** Resolved from the component's `motion` option; `control` by default. */
5264
+ private readonly motion;
5102
5265
  protected readonly className: _angular_core.Signal<string>;
5103
5266
  /**
5104
5267
  * The focus ring's colour, from the variant's theme entry — never from the
@@ -5111,6 +5274,81 @@ declare class UniIconButtonComponent {
5111
5274
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniIconButtonComponent, "button[uni-icon-button], button[icon-button]", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "iconName": { "alias": "iconName"; "required": false; "isSignal": true; }; "symbolName": { "alias": "symbolName"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disable": { "alias": "disable"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "opticalSize": { "alias": "opticalSize"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof RippleDirective; inputs: {}; outputs: {}; }]>;
5112
5275
  }
5113
5276
 
5277
+ /**
5278
+ * Theme options for `uni-inline-button` — the `inlineButton` theme entry.
5279
+ *
5280
+ * The control exists because the alternatives distort a sentence: a `ghost`
5281
+ * button brings padding and a hit area that push the surrounding words apart,
5282
+ * and a bare `<a>` gives navigation semantics to something that only acts.
5283
+ */
5284
+ interface UniInlineButtonOptions {
5285
+ /** Ink when `link` is set. Defaults to `primary`. */
5286
+ linkColor?: ColorKey;
5287
+ /** Underline by default, so a theme can make every inline button read as a link. */
5288
+ underline?: boolean;
5289
+ /** Underline on hover even when `underline` is off. Defaults to true. */
5290
+ underlineOnHover?: boolean;
5291
+ /** Distance from the text baseline to the underline. Defaults to `0.15em`. */
5292
+ underlineOffset?: string;
5293
+ /** Space between the glyph and the label, as a spacing token. Defaults to `xxs`. */
5294
+ gap?: NullableSize;
5295
+ /** Focus ring colour. Defaults to the shared focus ring. */
5296
+ focusColor?: ColorKey;
5297
+ }
5298
+
5299
+ /**
5300
+ * A button that lives inside a sentence.
5301
+ *
5302
+ * Every other button in the library owns a box. Even `ghost` is a flex box
5303
+ * with a hit area, horizontal padding and a type scale of its own, so dropping
5304
+ * one into a sentence takes it out of the run of text entirely. This one
5305
+ * inherits that type — family, size, weight, line height and colour — and adds
5306
+ * no padding, so a paragraph reads as one continuous run with an action in the
5307
+ * middle of it.
5308
+ *
5309
+ * It is always a real `<button>`: it can *look* like a link (`underline`,
5310
+ * `link`) without claiming to be navigation, so Enter and Space activate it
5311
+ * and assistive tech announces a button rather than an unfollowable link.
5312
+ *
5313
+ * A glyph may sit alongside the label without disturbing that: it is sized in
5314
+ * `em`, so it scales with the type it lands in rather than pinning a px size
5315
+ * into someone else's paragraph.
5316
+ *
5317
+ * One limit comes from the element itself. Browsers blockify a `<button>` to
5318
+ * `inline-block` whatever `display` it asks for, so the control is an atomic
5319
+ * inline box: its own label wraps inside it, but the run cannot split across a
5320
+ * line break the way the words around it do. `display: contents` would buy
5321
+ * that at the cost of the button being focusable at all, which is not a trade
5322
+ * worth making — keep labels to a few words, which is what an inline action
5323
+ * wants anyway.
5324
+ */
5325
+ declare class UniInlineButtonComponent extends BaseComponent<UniInlineButtonOptions> {
5326
+ /** Theme icon token rendered beside the label. Prefer this over `symbolName`. */
5327
+ readonly iconName: _angular_core.InputSignal<IconName | undefined>;
5328
+ /** Material Symbols ligature, for glyphs the theme's icon set doesn't carry. */
5329
+ readonly symbolName: _angular_core.InputSignal<string | undefined>;
5330
+ /** Which side of the label the glyph sits on. */
5331
+ readonly iconPosition: _angular_core.InputSignal<"start" | "end">;
5332
+ /** Underline the label, overriding the theme's default. */
5333
+ readonly underline: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
5334
+ /** Paint the label with the theme's link colour instead of inheriting the ink. */
5335
+ readonly link: _angular_core.InputSignalWithTransform<boolean, unknown>;
5336
+ readonly disable: _angular_core.InputSignalWithTransform<boolean, unknown>;
5337
+ protected readonly glyphAtStart: _angular_core.Signal<boolean>;
5338
+ /**
5339
+ * `1em` rather than a px size: the control inherits the surrounding type, so
5340
+ * the glyph has to scale with it or it will look wrong in every context but
5341
+ * the one it was measured in.
5342
+ */
5343
+ protected readonly glyphSize: _angular_core.Signal<string>;
5344
+ private readonly showUnderline;
5345
+ protected readonly className: _angular_core.Signal<string>;
5346
+ protected readonly labelClass: _angular_core.Signal<string>;
5347
+ protected readonly glyphClass: _angular_core.Signal<string>;
5348
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniInlineButtonComponent, never>;
5349
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniInlineButtonComponent, "button[uni-inline-button], button[inline-button]", never, { "iconName": { "alias": "iconName"; "required": false; "isSignal": true; }; "symbolName": { "alias": "symbolName"; "required": false; "isSignal": true; }; "iconPosition": { "alias": "iconPosition"; "required": false; "isSignal": true; }; "underline": { "alias": "underline"; "required": false; "isSignal": true; }; "link": { "alias": "link"; "required": false; "isSignal": true; }; "disable": { "alias": "disable"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
5350
+ }
5351
+
5114
5352
  declare class UniJsonViewComponent {
5115
5353
  json: _angular_core.InputSignal<unknown>;
5116
5354
  rows: _angular_core.InputSignal<number>;
@@ -5160,7 +5398,7 @@ interface UniMenuItemOptions {
5160
5398
  textColor?: ColorKey;
5161
5399
  hoverColor?: ContainerColorToken;
5162
5400
  /** Trailing symbol marking the active item; undefined/'' renders none. */
5163
- activeSymbol?: string;
5401
+ activeIcon?: IconName;
5164
5402
  /** Named motion primitive for the hover/focus fill. Defaults to `control`;
5165
5403
  omit both this and `transitionSpeed` for no transition at all. */
5166
5404
  motion?: Motion;
@@ -5189,7 +5427,7 @@ interface UniMenuOptions {
5189
5427
  declare class UniMenuComponent {
5190
5428
  private theme;
5191
5429
  menuItems: _angular_core.InputSignal<MenuItem[]>;
5192
- activeItem: _angular_core.InputSignal<MenuItem>;
5430
+ activeItem: _angular_core.InputSignal<MenuItem | undefined>;
5193
5431
  placement: _angular_core.InputSignal<Placement>;
5194
5432
  menuItemClicked: _angular_core.OutputEmitterRef<MenuItem>;
5195
5433
  TriggerClassName: string;
@@ -5222,17 +5460,17 @@ interface UniNotificationBadgeOptions {
5222
5460
  }
5223
5461
 
5224
5462
  declare class UniNotificationBadgeComponent extends BaseComponent<UniNotificationBadgeOptions> {
5225
- count: _angular_core.InputSignal<number>;
5463
+ count: _angular_core.InputSignal<number | undefined>;
5226
5464
  maxCount: _angular_core.InputSignal<number>;
5227
5465
  badgeVariant: _angular_core.InputSignal<"dot" | "count" | "pill">;
5228
- color: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
5466
+ color: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry | undefined>;
5229
5467
  position: _angular_core.InputSignal<"top-right" | "top-left" | "bottom-right" | "bottom-left">;
5230
5468
  show: _angular_core.InputSignal<boolean>;
5231
5469
  /**
5232
5470
  * Screen-reader text for the badge (e.g. "5 unread messages"). Without it
5233
5471
  * a sensible default is announced; a bare number or dot carries no meaning.
5234
5472
  */
5235
- ariaLabel: _angular_core.InputSignal<string>;
5473
+ ariaLabel: _angular_core.InputSignal<string | undefined>;
5236
5474
  protected readonly srOnlyClass: string;
5237
5475
  protected readonly announcement: _angular_core.Signal<string>;
5238
5476
  displayValue: _angular_core.Signal<string>;
@@ -5253,9 +5491,9 @@ interface UniAlertOptions {
5253
5491
  }
5254
5492
 
5255
5493
  declare class UniAlertComponent extends BaseComponent<UniAlertOptions> implements AfterViewInit {
5256
- show: _angular_core.ModelSignal<boolean>;
5257
- iconName: _angular_core.InputSignal<IconName>;
5258
- symbolName: _angular_core.InputSignal<string>;
5494
+ show: _angular_core.ModelSignal<boolean | undefined>;
5495
+ iconName: _angular_core.InputSignal<IconName | undefined>;
5496
+ symbolName: _angular_core.InputSignal<string | undefined>;
5259
5497
  useVariant: _angular_core.InputSignal<boolean>;
5260
5498
  showing: _angular_core.OutputEmitterRef<boolean>;
5261
5499
  alertRef?: ElementRef<HTMLDialogElement>;
@@ -5269,14 +5507,14 @@ declare class UniAlertComponent extends BaseComponent<UniAlertOptions> implement
5269
5507
  ngAfterViewInit(): void;
5270
5508
  open(): void;
5271
5509
  close(): void;
5272
- protected readonly effectiveIconName: _angular_core.Signal<IconName>;
5510
+ protected readonly effectiveIconName: _angular_core.Signal<IconName | undefined>;
5273
5511
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniAlertComponent, never>;
5274
5512
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniAlertComponent, "uni-alert", never, { "show": { "alias": "show"; "required": false; "isSignal": true; }; "iconName": { "alias": "iconName"; "required": false; "isSignal": true; }; "symbolName": { "alias": "symbolName"; "required": false; "isSignal": true; }; "useVariant": { "alias": "useVariant"; "required": false; "isSignal": true; }; }, { "show": "showChange"; "showing": "showing"; }, never, ["*"], true, never>;
5275
5513
  }
5276
5514
 
5277
5515
  declare class ConfirmationDialogComponent {
5278
5516
  show: _angular_core.InputSignal<boolean>;
5279
- confirmation: _angular_core.InputSignal<Confirmation>;
5517
+ confirmation: _angular_core.InputSignal<Confirmation | undefined>;
5280
5518
  showing: _angular_core.OutputEmitterRef<boolean>;
5281
5519
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ConfirmationDialogComponent, never>;
5282
5520
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ConfirmationDialogComponent, "uni-confirmation-dialog", never, { "show": { "alias": "show"; "required": false; "isSignal": true; }; "confirmation": { "alias": "confirmation"; "required": false; "isSignal": true; }; }, { "showing": "showing"; }, never, never, true, never>;
@@ -5290,9 +5528,9 @@ declare class NotificationsComponent {
5290
5528
  protected readonly showAlert: _angular_core.Signal<boolean>;
5291
5529
  protected readonly showSnackbar: _angular_core.Signal<boolean>;
5292
5530
  protected readonly showConfirmation: _angular_core.Signal<boolean>;
5293
- protected readonly alert: _angular_core.Signal<Alert>;
5294
- protected readonly snackbar: _angular_core.Signal<Snackbar>;
5295
- protected readonly confirmation: _angular_core.Signal<Confirmation>;
5531
+ protected readonly alert: _angular_core.Signal<Alert | undefined>;
5532
+ protected readonly snackbar: _angular_core.Signal<Snackbar | undefined>;
5533
+ protected readonly confirmation: _angular_core.Signal<Confirmation | undefined>;
5296
5534
  constructor();
5297
5535
  handleConfirmationShowingEvent(showing: boolean): void;
5298
5536
  handleSnackbarShowingEvent(showing: boolean): void;
@@ -5321,15 +5559,15 @@ declare class UniSnackbarComponent extends BaseComponent<UniSnackbarOptions> imp
5321
5559
  secondsRemaining: _angular_core.Signal<number>;
5322
5560
  };
5323
5561
  /** Two-way bindable open state: [(show)]. */
5324
- show: _angular_core.ModelSignal<boolean>;
5325
- iconName: _angular_core.InputSignal<IconName>;
5326
- symbolName: _angular_core.InputSignal<string>;
5327
- timeout: _angular_core.InputSignal<string | number>;
5328
- actionLabel: _angular_core.InputSignal<string>;
5562
+ show: _angular_core.ModelSignal<boolean | undefined>;
5563
+ iconName: _angular_core.InputSignal<IconName | undefined>;
5564
+ symbolName: _angular_core.InputSignal<string | undefined>;
5565
+ timeout: _angular_core.InputSignal<string | number | undefined>;
5566
+ actionLabel: _angular_core.InputSignal<string | undefined>;
5329
5567
  useVariant: _angular_core.InputSignal<boolean>;
5330
5568
  action: _angular_core.OutputEmitterRef<void>;
5331
5569
  showing: _angular_core.OutputEmitterRef<boolean>;
5332
- snackbarRef: _angular_core.Signal<ElementRef<any>>;
5570
+ snackbarRef: _angular_core.Signal<ElementRef<any> | undefined>;
5333
5571
  private get _snackbar();
5334
5572
  constructor();
5335
5573
  /** Timing for the enter/leave transition. */
@@ -5360,8 +5598,8 @@ interface UniPaginatorOptions {
5360
5598
  }
5361
5599
 
5362
5600
  declare class UniPaginatorComponent<T> extends BaseComponent<UniPaginatorOptions> {
5363
- datasource: _angular_core.InputSignal<UniDatasource<T>>;
5364
- initPageSize: _angular_core.InputSignal<number>;
5601
+ datasource: _angular_core.InputSignal<UniDatasource<T> | undefined>;
5602
+ initPageSize: _angular_core.InputSignal<number | undefined>;
5365
5603
  showPageSize: _angular_core.InputSignal<boolean>;
5366
5604
  showPageJumper: _angular_core.InputSignal<boolean>;
5367
5605
  showPageNumbers: _angular_core.InputSignal<boolean>;
@@ -5398,7 +5636,7 @@ interface UniPopoverOptions {
5398
5636
  offset: number;
5399
5637
  arrowSize: number;
5400
5638
  /** Icon primitive for the `closable` button. */
5401
- closeSymbol: IconName;
5639
+ closeIcon: IconName;
5402
5640
  /** Hover open delay in tooltip mode, ms. */
5403
5641
  tooltipOpenDelay: number;
5404
5642
  /** Pointer-leave close delay in tooltip mode, ms. */
@@ -5438,18 +5676,18 @@ declare class UniPopoverComponent extends BaseComponent<UniPopoverOptions> {
5438
5676
  * the panel opens) while the projected trigger keeps the disclosure ARIA.
5439
5677
  * Empty string means unset.
5440
5678
  */
5441
- anchor: _angular_core.InputSignal<string | HTMLElement>;
5679
+ anchor: _angular_core.InputSignal<string | HTMLElement | undefined>;
5442
5680
  /** Title rendered in the header row and used as the accessible name. */
5443
- header: _angular_core.InputSignal<string>;
5681
+ header: _angular_core.InputSignal<string | undefined>;
5444
5682
  /** Renders a "Close" icon button in the header row. */
5445
5683
  closable: _angular_core.InputSignal<boolean>;
5446
5684
  arrow: _angular_core.InputSignal<boolean>;
5447
5685
  /** Panel max-width; numbers are px. Defaults to the theme's `maxWidth`. */
5448
- maxWidth: _angular_core.InputSignal<string | number>;
5686
+ maxWidth: _angular_core.InputSignal<string | number | undefined>;
5449
5687
  /** Tooltip-mode hover-open delay, ms; defaults to the theme option. */
5450
- openDelay: _angular_core.InputSignal<number>;
5688
+ openDelay: _angular_core.InputSignal<number | undefined>;
5451
5689
  /** Tooltip-mode pointer-leave close delay, ms; defaults to the theme option. */
5452
- closeDelay: _angular_core.InputSignal<number>;
5690
+ closeDelay: _angular_core.InputSignal<number | undefined>;
5453
5691
  opened: _angular_core.OutputEmitterRef<void>;
5454
5692
  closed: _angular_core.OutputEmitterRef<void>;
5455
5693
  readonly panelId: string;
@@ -5507,15 +5745,41 @@ declare class UniPopoverComponent extends BaseComponent<UniPopoverOptions> {
5507
5745
  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>;
5508
5746
  }
5509
5747
 
5748
+ /**
5749
+ * Theme options for `uni-progress-bar`. Declared in `ComponentName` with no
5750
+ * entry behind it until 11.0.0, so the bar picked its colours straight off the
5751
+ * palette and a theme had no way to re-point them.
5752
+ */
5753
+ interface UniProgressBarOptions {
5754
+ /** Unfilled track. Defaults to `primary-surface`. */
5755
+ trackColor?: ColorKey;
5756
+ /** Fill while in progress. Defaults to `secondary-surface`. */
5757
+ fillColor?: ColorKey;
5758
+ /** Fill once complete. Defaults to `secondary`. */
5759
+ completeColor?: ColorKey;
5760
+ /** Outline on both track and fill. Defaults to `on-background-variant`. */
5761
+ borderColor?: ColorKey;
5762
+ /** Outline width in px. Defaults to 1. */
5763
+ strokeWidth?: number;
5764
+ }
5765
+
5510
5766
  declare class UniProgressBarComponent {
5511
5767
  theme: ThemeService;
5768
+ protected readonly componentOptions: _angular_core.WritableSignal<UniProgressBarOptions>;
5512
5769
  palette: _angular_core.Signal<Partial<Record<string, string>>>;
5770
+ /** Every paint the bar uses, resolved through the theme entry. */
5771
+ protected readonly paint: _angular_core.Signal<{
5772
+ track: string | undefined;
5773
+ fill: string | undefined;
5774
+ complete: string | undefined;
5775
+ border: string | undefined;
5776
+ }>;
5513
5777
  width: _angular_core.InputSignal<number>;
5514
5778
  height: _angular_core.InputSignal<number>;
5515
5779
  percent: _angular_core.InputSignal<number>;
5516
5780
  /** Accessible name describing what is progressing (e.g. "Upload progress"). */
5517
- ariaLabel: _angular_core.InputSignal<string>;
5518
- stroke: number;
5781
+ ariaLabel: _angular_core.InputSignal<string | undefined>;
5782
+ protected readonly stroke: _angular_core.Signal<number>;
5519
5783
  protected readonly className: _angular_core.Signal<string>;
5520
5784
  protected readonly Math: Math;
5521
5785
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniProgressBarComponent, never>;
@@ -5525,8 +5789,8 @@ declare class UniProgressBarComponent {
5525
5789
  declare class UniProgressGaugeComponent extends BaseComponent {
5526
5790
  percent: _angular_core.InputSignal<number>;
5527
5791
  /** Accessible name describing what is progressing. */
5528
- ariaLabel: _angular_core.InputSignal<string>;
5529
- textStyle: _angular_core.Signal<string | number | _uni_design_system_uni_core.StyleExpression>;
5792
+ ariaLabel: _angular_core.InputSignal<string | undefined>;
5793
+ textStyle: _angular_core.Signal<string | number | _uni_design_system_uni_core.StyleExpression | undefined>;
5530
5794
  private progress;
5531
5795
  protected readonly className: _angular_core.Signal<string>;
5532
5796
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniProgressGaugeComponent, never>;
@@ -5561,7 +5825,7 @@ declare class UniScrollAreaComponent {
5561
5825
  * elements with `uni-text`, which owns `color` and maps it to the CSS
5562
5826
  * property. One `color` binding feeding both would render ink on ink.
5563
5827
  */
5564
- containerColor: _angular_core.InputSignal<ContainerColorToken>;
5828
+ containerColor: _angular_core.InputSignal<ContainerColorToken | undefined>;
5565
5829
  borderRadius: _angular_core.InputSignal<string>;
5566
5830
  padding: _angular_core.InputSignal<OptionalSize>;
5567
5831
  paddingHorizontal: _angular_core.InputSignal<OptionalSize>;
@@ -5570,7 +5834,7 @@ declare class UniScrollAreaComponent {
5570
5834
  paddingRight: _angular_core.InputSignal<OptionalSize>;
5571
5835
  paddingTop: _angular_core.InputSignal<OptionalSize>;
5572
5836
  paddingBottom: _angular_core.InputSignal<OptionalSize>;
5573
- border: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
5837
+ border: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry | undefined>;
5574
5838
  height: _angular_core.InputSignal<OptionalValue>;
5575
5839
  width: _angular_core.InputSignal<OptionalValue>;
5576
5840
  appearance: _angular_core.InputSignal<ScrollbarAppearance>;
@@ -5625,23 +5889,23 @@ interface UniSkeletonOptions {
5625
5889
  declare class UniSkeletonComponent extends BaseComponent<UniSkeletonOptions> {
5626
5890
  shape: _angular_core.InputSignal<SkeletonShape>;
5627
5891
  /** CSS width; defaults to 100% for text/rect and `height` for circles. */
5628
- width: _angular_core.InputSignal<string | number>;
5892
+ width: _angular_core.InputSignal<string | number | undefined>;
5629
5893
  /** CSS height per block; defaults to 1em (text), 96px (rect), 40px (circle). */
5630
- height: _angular_core.InputSignal<string | number>;
5894
+ height: _angular_core.InputSignal<string | number | undefined>;
5631
5895
  /** Number of text lines (text shape only). */
5632
5896
  lines: _angular_core.InputSignal<number>;
5633
5897
  /** Base color token; overrides the theme option for this skeleton. */
5634
- color: _angular_core.InputSignal<string>;
5898
+ color: _angular_core.InputSignal<string | undefined>;
5635
5899
  /** Shimmer highlight token; overrides the theme option for this skeleton. */
5636
- highlightColor: _angular_core.InputSignal<string>;
5900
+ highlightColor: _angular_core.InputSignal<string | undefined>;
5637
5901
  /** Radius token; overrides the theme option. Circles are always round. */
5638
- borderRadius: _angular_core.InputSignal<string>;
5902
+ borderRadius: _angular_core.InputSignal<string | undefined>;
5639
5903
  /**
5640
5904
  * Announces the skeleton to assistive tech as a polite status. Leave unset
5641
5905
  * when a container already carries `aria-busy` — the skeleton then stays
5642
5906
  * `aria-hidden`, as a decorative placeholder should.
5643
5907
  */
5644
- label: _angular_core.InputSignal<string>;
5908
+ label: _angular_core.InputSignal<string | undefined>;
5645
5909
  protected readonly srOnly: string;
5646
5910
  private readonly cssSize;
5647
5911
  protected readonly resolvedHeight: _angular_core.Signal<string>;
@@ -5696,13 +5960,13 @@ declare class UniStatComponent extends BaseComponent<UniStatOptions> {
5696
5960
  /** The headline number: strings render verbatim, numbers auto-compact. */
5697
5961
  value: _angular_core.InputSignal<string | number>;
5698
5962
  /** Signed change, e.g. "+12.4%" or "-0.4%". The sign drives the arrow. */
5699
- delta: _angular_core.InputSignal<string>;
5963
+ delta: _angular_core.InputSignal<string | undefined>;
5700
5964
  /** Whether an upward movement is good news. Flip for churn, errors, cost. */
5701
5965
  upIsGood: _angular_core.InputSignal<boolean>;
5702
5966
  /** Names the comparison period, e.g. "vs last month". */
5703
- caption: _angular_core.InputSignal<string>;
5967
+ caption: _angular_core.InputSignal<string | undefined>;
5704
5968
  /** Recent values for the decorative sparkline (12 points reads best). */
5705
- trend: _angular_core.InputSignal<number[]>;
5969
+ trend: _angular_core.InputSignal<number[] | undefined>;
5706
5970
  protected readonly srOnly: string;
5707
5971
  protected readonly displayValue: _angular_core.Signal<string>;
5708
5972
  protected readonly deltaIsUp: _angular_core.Signal<boolean>;
@@ -5714,7 +5978,7 @@ declare class UniStatComponent extends BaseComponent<UniStatOptions> {
5714
5978
  path: string;
5715
5979
  endX: string;
5716
5980
  endY: string;
5717
- }>;
5981
+ } | undefined>;
5718
5982
  protected readonly className: _angular_core.Signal<string>;
5719
5983
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniStatComponent, never>;
5720
5984
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniStatComponent, "uni-stat", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "delta": { "alias": "delta"; "required": false; "isSignal": true; }; "upIsGood": { "alias": "upIsGood"; "required": false; "isSignal": true; }; "caption": { "alias": "caption"; "required": false; "isSignal": true; }; "trend": { "alias": "trend"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -5742,6 +6006,8 @@ declare class UniTabComponent {
5742
6006
  * get pills (`borderRadius: 'max'` + `activeColor`) or any custom treatment.
5743
6007
  */
5744
6008
  interface UniTabsOptions {
6009
+ /** Named motion primitive for a tab's ink and indicator transition. Defaults to `snap`. */
6010
+ motion?: Motion;
5745
6011
  /** Tab label typography. */
5746
6012
  typeface?: Typeface;
5747
6013
  /** Inactive tab label color. */
@@ -5779,6 +6045,8 @@ declare class UniTabsComponent extends BaseComponent<UniTabsOptions> {
5779
6045
  protected readonly activeTab: _angular_core.Signal<UniTabComponent>;
5780
6046
  protected select(index: number): void;
5781
6047
  protected onKeydown(event: KeyboardEvent): void;
6048
+ /** Resolved from the component's `motion` option; `snap` by default. */
6049
+ private readonly motion;
5782
6050
  protected readonly tablistClass: _angular_core.Signal<string>;
5783
6051
  protected readonly tabClass: _angular_core.Signal<string>;
5784
6052
  protected readonly panelClass: _angular_core.Signal<string>;
@@ -5795,8 +6063,15 @@ interface UniTextareaOptions {
5795
6063
  }
5796
6064
 
5797
6065
  declare class UniSortHeaderComponent<T> {
5798
- column: _angular_core.InputSignal<keyof T>;
5799
- datasource: _angular_core.InputSignal<UniDatasource<T>>;
6066
+ private readonly theme;
6067
+ /**
6068
+ * The arrow answers a click, so it rides `control`. This component has no
6069
+ * theme entry of its own, so it names the token directly rather than
6070
+ * exposing an option that would have nowhere to live.
6071
+ */
6072
+ private readonly motion;
6073
+ column: _angular_core.InputSignal<keyof T | undefined>;
6074
+ datasource: _angular_core.InputSignal<UniDatasource<T> | undefined>;
5800
6075
  protected readonly buttonClass: string;
5801
6076
  direction: _angular_core.Signal<SortDirection>;
5802
6077
  protected readonly className: _angular_core.Signal<string>;
@@ -5818,10 +6093,10 @@ interface SymbolOptions {
5818
6093
 
5819
6094
  declare class UniSymbolComponent extends BaseComponent<SymbolOptions> {
5820
6095
  name: _angular_core.InputSignal<string>;
5821
- fill: _angular_core.InputSignal<SymbolFill>;
5822
- weight: _angular_core.InputSignal<SymbolWeight>;
5823
- grade: _angular_core.InputSignal<SymbolGrade>;
5824
- opticalSize: _angular_core.InputSignal<number>;
6096
+ fill: _angular_core.InputSignal<SymbolFill | undefined>;
6097
+ weight: _angular_core.InputSignal<SymbolWeight | undefined>;
6098
+ grade: _angular_core.InputSignal<SymbolGrade | undefined>;
6099
+ opticalSize: _angular_core.InputSignal<number | undefined>;
5825
6100
  protected readonly className: _angular_core.Signal<string>;
5826
6101
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniSymbolComponent, never>;
5827
6102
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniSymbolComponent, "uni-symbol", never, { "name": { "alias": "name"; "required": true; "isSignal": true; }; "fill": { "alias": "fill"; "required": false; "isSignal": true; }; "weight": { "alias": "weight"; "required": false; "isSignal": true; }; "grade": { "alias": "grade"; "required": false; "isSignal": true; }; "opticalSize": { "alias": "opticalSize"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -5829,6 +6104,8 @@ declare class UniSymbolComponent extends BaseComponent<SymbolOptions> {
5829
6104
 
5830
6105
  /** Theme options for the `tag` component entry. */
5831
6106
  interface UniTagOptions {
6107
+ /** Named motion primitive for the fill and ink transition. Defaults to `control`. */
6108
+ motion?: Motion;
5832
6109
  borderRadius?: Radius;
5833
6110
  typeface?: Typeface;
5834
6111
  /** Space between the lead element, label and remove button. */
@@ -5837,36 +6114,83 @@ interface UniTagOptions {
5837
6114
  removeIcon?: IconName;
5838
6115
  /** Icon primitive shown in the lead slot when the chip is selected. */
5839
6116
  selectedIcon?: IconName;
6117
+ /**
6118
+ * How far a lead element or the remove control tucks into the chip's rounded
6119
+ * end, in px. Defaults to `auto`, which derives it from the chip so the lead
6120
+ * sits concentric with the cap — and which declines to tuck at all when the
6121
+ * end is too square to flow into.
6122
+ */
6123
+ endInset?: number | 'auto';
5840
6124
  }
5841
6125
  /** The value a tag echoes back on `removed` / `activated`. */
5842
6126
  type UniTagValue = string | number | undefined;
6127
+ /**
6128
+ * One chip in a {@link UniTagGroupComponent}. The group renders its own chips
6129
+ * rather than projecting them, which is what lets it drive `selected` and the
6130
+ * roving tab index without an app binding per chip.
6131
+ */
6132
+ interface UniTagGroupItem<T extends UniTagValue = UniTagValue> {
6133
+ label: string;
6134
+ value: T;
6135
+ /** Colour role, overriding the group's own. */
6136
+ variant?: Variant;
6137
+ /** Style archetype, overriding the group's own. */
6138
+ tone?: TagTone;
6139
+ iconName?: IconName;
6140
+ symbolName?: string;
6141
+ avatarSrc?: string;
6142
+ /** Initials fallback when `avatarSrc` is absent or fails to load. */
6143
+ avatarName?: string;
6144
+ dot?: boolean;
6145
+ disabled?: boolean;
6146
+ /** Adds a remove control to this chip; the group re-emits it on `removed`. */
6147
+ removable?: boolean;
6148
+ /** Truncation budget, e.g. `'14ch'`. A number is treated as px. */
6149
+ maxWidth?: string | number;
6150
+ }
6151
+ /** Theme options for the `tagGroup` component entry. */
6152
+ interface UniTagGroupOptions {
6153
+ /** Space between chips in a row. Defaults to `xs`. */
6154
+ gap?: NullableSize;
6155
+ /** Space between wrapped rows. Defaults to `xs`. */
6156
+ rowGap?: NullableSize;
6157
+ /** Size every chip takes unless the group's `size` input says otherwise. */
6158
+ chipSize?: Size;
6159
+ /** Resting tone for every chip. */
6160
+ chipTone?: TagTone;
6161
+ /** Colour role for every chip. */
6162
+ chipVariant?: Variant;
6163
+ }
5843
6164
 
5844
6165
  /**
5845
6166
  * Compact chip for categories, states, filters and tokens.
5846
6167
  *
5847
6168
  * Two orthogonal style axes: `variant` picks the colour role and `tone` picks
5848
6169
  * the archetype (soft / solid / outline). Both live in the theme's `tag` entry,
5849
- * so a theme restyles every chip in the app without touching markup.
6170
+ * so a theme restyles every chip in the app without touching markup. Two state
6171
+ * classes ride alongside the tone class for the same reason: `tag-selected` and
6172
+ * `tag-interactive` let the theme paint selection and hover beside the colours
6173
+ * they belong to, instead of an app swapping `tone` by hand on every chip.
5850
6174
  *
5851
6175
  * Structurally a chip is **body + trailing action as siblings**, never nested
5852
6176
  * buttons: an interactive chip whose body is a `<button>` cannot contain the
5853
6177
  * remove `<button>` (invalid HTML, and the inner control becomes unreachable
5854
6178
  * for keyboard users). Both stay independently operable.
5855
6179
  */
5856
- declare class UniTagComponent extends BaseComponent<UniTagOptions> {
6180
+ declare class UniTagComponent<T extends UniTagValue = UniTagValue> extends BaseComponent<UniTagOptions> {
5857
6181
  size: _angular_core.InputSignal<Size>;
5858
6182
  tone: _angular_core.InputSignal<TagTone>;
5859
- label: _angular_core.InputSignal<string>;
5860
- value: _angular_core.InputSignal<string | number>;
6183
+ label: _angular_core.InputSignal<string | undefined>;
6184
+ value: _angular_core.InputSignal<T | undefined>;
5861
6185
  /** Truncation budget, e.g. `'14ch'`. A number is treated as px. */
5862
- maxWidth: _angular_core.InputSignal<string | number>;
5863
- avatarSrc: _angular_core.InputSignal<string>;
6186
+ maxWidth: _angular_core.InputSignal<string | number | undefined>;
6187
+ avatarSrc: _angular_core.InputSignal<string | undefined>;
5864
6188
  /** Initials fallback when `avatarSrc` is absent or fails to load. */
5865
- avatarName: _angular_core.InputSignal<string>;
6189
+ avatarName: _angular_core.InputSignal<string | undefined>;
5866
6190
  /** Theme icon primitive — the preferred glyph path. */
5867
- iconName: _angular_core.InputSignal<IconName>;
6191
+ iconName: _angular_core.InputSignal<IconName | undefined>;
5868
6192
  /** Material Symbols ligature, for glyphs the theme's icon set doesn't carry. */
5869
- symbolName: _angular_core.InputSignal<string>;
6193
+ symbolName: _angular_core.InputSignal<string | undefined>;
5870
6194
  /** Status dot in the current colour. */
5871
6195
  dot: _angular_core.InputSignal<boolean>;
5872
6196
  removable: _angular_core.InputSignal<boolean>;
@@ -5877,40 +6201,165 @@ declare class UniTagComponent extends BaseComponent<UniTagOptions> {
5877
6201
  * focusable so it can be removed), and announcing "not pressed" on a
5878
6202
  * recipient chip is worse than announcing nothing.
5879
6203
  */
5880
- selected: _angular_core.InputSignal<boolean>;
6204
+ selected: _angular_core.InputSignal<boolean | undefined>;
5881
6205
  invalid: _angular_core.InputSignal<boolean>;
5882
6206
  disabled: _angular_core.InputSignal<boolean>;
5883
6207
  /** Accessible-name override for the remove button. */
5884
- removeLabel: _angular_core.InputSignal<string>;
6208
+ removeLabel: _angular_core.InputSignal<string | undefined>;
5885
6209
  /**
5886
6210
  * Tab position of the chip's controls. A composite that owns its own
5887
- * roving focus — `uni-tag-input`, where the whole field is one tab stop —
5888
- * passes `-1` so Tab does not walk through every chip to reach the next
5889
- * control.
6211
+ * roving focus — `uni-tag-input` or `uni-tag-group`, where the whole
6212
+ * thing is one tab stop — passes `-1` so Tab does not walk through every
6213
+ * chip to reach the next control.
5890
6214
  */
5891
6215
  controlTabIndex: _angular_core.InputSignal<number>;
5892
- removed: _angular_core.OutputEmitterRef<UniTagValue>;
5893
- activated: _angular_core.OutputEmitterRef<UniTagValue>;
6216
+ removed: _angular_core.OutputEmitterRef<T | undefined>;
6217
+ activated: _angular_core.OutputEmitterRef<T | undefined>;
5894
6218
  /** A disabled chip wears the theme's `disabled` role, whatever its variant. */
5895
6219
  protected readonly resolvedVariant: _angular_core.Signal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
5896
6220
  protected readonly themeStyle: _angular_core.Signal<{
5897
- [x: string]: string | number | _uni_design_system_uni_core.StyleExpression;
6221
+ [x: string]: string | number | _uni_design_system_uni_core.StyleExpression | undefined;
5898
6222
  }>;
6223
+ protected readonly height: _angular_core.Signal<number>;
5899
6224
  /** Lead elements derive from the chip height, so no second size token. */
5900
6225
  protected readonly leadSize: _angular_core.Signal<number>;
5901
6226
  /** Remove glyph, proportional to the chip rather than to the icon-button. */
5902
6227
  protected readonly removeGlyphSize: _angular_core.Signal<number>;
5903
6228
  protected readonly initials: _angular_core.Signal<string>;
6229
+ /** Glyph the theme shows in the lead slot for a selected chip, if any. */
6230
+ protected readonly selectedIcon: _angular_core.Signal<IconName | undefined>;
6231
+ /**
6232
+ * The chip is a toggle: `selected` was bound, so the chip is one of a set the
6233
+ * user switches on and off — the same tri-state that gates `aria-pressed`.
6234
+ */
6235
+ protected readonly isToggle: _angular_core.Signal<boolean>;
6236
+ /** A lead element the chip renders itself, rather than the projected slot. */
6237
+ protected readonly hasOwnLead: _angular_core.Signal<boolean>;
6238
+ /**
6239
+ * A toggle chip with nothing else in the lead holds the check's place while
6240
+ * unselected. Without it the chip grows by a glyph the moment it is picked
6241
+ * and the whole row reflows — and a row that jumps under the pointer is worse
6242
+ * than one with a little space in front of each label.
6243
+ */
6244
+ protected readonly reservesSlot: _angular_core.Signal<boolean>;
6245
+ /** Whether the chip paints a lead box at all, so the start end tucks. */
6246
+ protected readonly showsLead: _angular_core.Signal<boolean>;
6247
+ /** Status dots are their own size — a lead box would dwarf one. */
6248
+ protected readonly dotSize: _angular_core.Signal<number>;
6249
+ /** Width the lead actually occupies, which a dot changes. */
6250
+ private readonly leadWidth;
6251
+ /**
6252
+ * Whether the ends are round enough to tuck anything into.
6253
+ *
6254
+ * The theme's documented `borderRadius: 'xs'` switch to rectangular labels
6255
+ * leaves no curve to flow into, and a glyph jammed against a corner is worse
6256
+ * than one sitting in a gutter.
6257
+ */
6258
+ private readonly tucks;
6259
+ /**
6260
+ * How far an element of `size` sits from its end of the chip.
6261
+ *
6262
+ * `auto` centres it in the cap: an element `size` tall has `(height - size)/2`
6263
+ * of chip above and below it, so the same inset horizontally makes it
6264
+ * concentric with the curve. A lead box lands 3px in — flowing into the round
6265
+ * end rather than beginning where the radius ends — while a 6px status dot
6266
+ * keeps its distance, because a dot pushed that far in reads as a smudge on
6267
+ * the edge.
6268
+ */
6269
+ private inset;
6270
+ /** The themed `gap` as a number, for the padding arithmetic. */
6271
+ private readonly gapSize;
6272
+ /**
6273
+ * Inline padding: the ends tuck, and a lead is balanced against.
6274
+ *
6275
+ * A lead pushes the label off centre, so the far side grows to match it —
6276
+ * each end asks for the room it needs (its own inset, plus whatever it holds,
6277
+ * plus the gap) and the wider ask wins for both. The tuck costs less than the
6278
+ * old gutter did, so that balance is largely paid for rather than added.
6279
+ *
6280
+ * The remove control is not balanced against on its own. It reads as an
6281
+ * affordance rather than as content, so a chip with nothing but a remove
6282
+ * button keeps the size token's gutter at the start and simply tucks the
6283
+ * glyph into the trailing curve — padding the other side to match would leave
6284
+ * a plain label sitting behind a stretch of empty chip.
6285
+ */
6286
+ protected readonly padding: _angular_core.Signal<{
6287
+ start: number;
6288
+ end: number;
6289
+ }>;
5904
6290
  protected readonly hostClass: _angular_core.Signal<string>;
5905
- /** Truncating label; `title` exposes the full text when a budget is set. */
6291
+ /**
6292
+ * Truncating label. It grows, so a chip stretched to fill a justified row
6293
+ * puts the slack around its text instead of behind it — the tucked ends stay
6294
+ * where they are and the label stays centred. `title` exposes the full text
6295
+ * when a budget is set.
6296
+ */
5906
6297
  protected readonly labelClass: string;
5907
6298
  protected readonly bodyClass: _angular_core.Signal<string>;
5908
6299
  protected readonly leadClass: _angular_core.Signal<string>;
6300
+ /** The held-open check slot: the lead's footprint and nothing in it. */
6301
+ protected readonly slotClass: _angular_core.Signal<string>;
5909
6302
  protected readonly dotClass: _angular_core.Signal<string>;
5910
6303
  protected remove(): void;
5911
6304
  protected activate(): void;
5912
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniTagComponent, never>;
5913
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniTagComponent, "uni-tag", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "maxWidth": { "alias": "maxWidth"; "required": false; "isSignal": true; }; "avatarSrc": { "alias": "avatarSrc"; "required": false; "isSignal": true; }; "avatarName": { "alias": "avatarName"; "required": false; "isSignal": true; }; "iconName": { "alias": "iconName"; "required": false; "isSignal": true; }; "symbolName": { "alias": "symbolName"; "required": false; "isSignal": true; }; "dot": { "alias": "dot"; "required": false; "isSignal": true; }; "removable": { "alias": "removable"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "removeLabel": { "alias": "removeLabel"; "required": false; "isSignal": true; }; "controlTabIndex": { "alias": "controlTabIndex"; "required": false; "isSignal": true; }; }, { "removed": "removed"; "activated": "activated"; }, never, ["[tag-lead]", "*"], true, never>;
6305
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniTagComponent<any>, never>;
6306
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniTagComponent<any>, "uni-tag", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "maxWidth": { "alias": "maxWidth"; "required": false; "isSignal": true; }; "avatarSrc": { "alias": "avatarSrc"; "required": false; "isSignal": true; }; "avatarName": { "alias": "avatarName"; "required": false; "isSignal": true; }; "iconName": { "alias": "iconName"; "required": false; "isSignal": true; }; "symbolName": { "alias": "symbolName"; "required": false; "isSignal": true; }; "dot": { "alias": "dot"; "required": false; "isSignal": true; }; "removable": { "alias": "removable"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "removeLabel": { "alias": "removeLabel"; "required": false; "isSignal": true; }; "controlTabIndex": { "alias": "controlTabIndex"; "required": false; "isSignal": true; }; }, { "removed": "removed"; "activated": "activated"; }, never, ["[tag-lead]", "*"], true, never>;
6307
+ }
6308
+
6309
+ /**
6310
+ * A row of chips the user picks from: filters, facets, a set of labels.
6311
+ *
6312
+ * The group **renders its own chips** from `items` rather than projecting them.
6313
+ * That is what lets it own the things an app was otherwise wiring per chip —
6314
+ * which one is selected, which one holds the tab stop — since a parent cannot
6315
+ * write a projected child's inputs. `uni-tag` is unchanged by this component;
6316
+ * `controlTabIndex` was already its hook for a composite that manages focus.
6317
+ *
6318
+ * Keyboard model is the toolbar pattern: one tab stop for the whole group, and
6319
+ * the arrow keys move within it. Twelve filter chips should cost one Tab to
6320
+ * pass, not twelve.
6321
+ */
6322
+ declare class UniTagGroupComponent<T extends UniTagValue = UniTagValue> extends BaseComponent<UniTagGroupOptions> {
6323
+ items: _angular_core.InputSignal<readonly UniTagGroupItem<T>[]>;
6324
+ /**
6325
+ * `wrap` lets chips keep their natural widths. `justify` stretches each
6326
+ * filled row flush to both edges, leaving the last row ragged; chips put the
6327
+ * extra width around their labels, so tucked leads and remove controls stay
6328
+ * tucked.
6329
+ */
6330
+ layout: _angular_core.InputSignal<"justify" | "wrap">;
6331
+ /** Allow more than one chip at a time. Single select replaces instead. */
6332
+ multiple: _angular_core.InputSignal<boolean>;
6333
+ /**
6334
+ * The selected values — one array in both modes, as `uni-tag-input` keeps one
6335
+ * array for its items. Single select simply never holds more than one, which
6336
+ * spares callers a `T[] | T | null` union at every call site.
6337
+ */
6338
+ value: _angular_core.ModelSignal<T[]>;
6339
+ /** The chip the user just activated, selected or deselected. */
6340
+ activated: _angular_core.OutputEmitterRef<T | undefined>;
6341
+ removed: _angular_core.OutputEmitterRef<T | undefined>;
6342
+ chipTone: _angular_core.InputSignal<TagTone | undefined>;
6343
+ chipSize: _angular_core.InputSignal<Size | undefined>;
6344
+ chipVariant: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry | undefined>;
6345
+ protected readonly resolvedTone: _angular_core.Signal<TagTone>;
6346
+ protected readonly resolvedSize: _angular_core.Signal<Size>;
6347
+ protected readonly resolvedVariant: _angular_core.Signal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
6348
+ /**
6349
+ * Which chip holds the group's tab stop. It moves with the arrow keys and
6350
+ * follows selection, so tabbing back into the group lands where the user
6351
+ * left off rather than at the start.
6352
+ */
6353
+ protected readonly focusedIndex: _angular_core.WritableSignal<number>;
6354
+ private readonly chipRefs;
6355
+ protected readonly fillerClass: string;
6356
+ protected readonly hostClass: _angular_core.Signal<string>;
6357
+ protected isSelected(value: T): boolean;
6358
+ protected toggle(item: UniTagGroupItem<T>): void;
6359
+ protected onKeydown(event: KeyboardEvent): void;
6360
+ private focusChip;
6361
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniTagGroupComponent<any>, never>;
6362
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniTagGroupComponent<any>, "uni-tag-group", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "layout": { "alias": "layout"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "chipTone": { "alias": "chipTone"; "required": false; "isSignal": true; }; "chipSize": { "alias": "chipSize"; "required": false; "isSignal": true; }; "chipVariant": { "alias": "chipVariant"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "activated": "activated"; "removed": "removed"; }, never, never, true, never>;
5914
6363
  }
5915
6364
 
5916
6365
  interface Preset {
@@ -5941,8 +6390,8 @@ declare class UniThemeBuilderComponent {
5941
6390
  protected pinSecondary: _angular_core.WritableSignal<boolean>;
5942
6391
  protected secondaryHex: _angular_core.WritableSignal<string>;
5943
6392
  /** Soft brand targets carried by the active preset (cleared on seed edits). */
5944
- protected targets: _angular_core.WritableSignal<Partial<Record<_uni_design_system_uni_core.BrandRole, string>>>;
5945
- protected copied: _angular_core.WritableSignal<"file" | "ngadd" | "dtcg">;
6393
+ protected targets: _angular_core.WritableSignal<Partial<Record<_uni_design_system_uni_core.BrandRole, string>> | undefined>;
6394
+ protected copied: _angular_core.WritableSignal<"file" | "ngadd" | "dtcg" | null>;
5946
6395
  protected showAllPairs: _angular_core.WritableSignal<boolean>;
5947
6396
  constructor();
5948
6397
  protected config: _angular_core.Signal<BrandPaletteConfig>;
@@ -6006,13 +6455,15 @@ declare class UniThemeSwitchComponent {
6006
6455
  ariaLabel: _angular_core.InputSignal<string>;
6007
6456
  /** Emits the selected theme key after it has been applied. */
6008
6457
  themeChanged: _angular_core.OutputEmitterRef<string>;
6009
- protected selected: _angular_core.Signal<string>;
6458
+ protected selected: _angular_core.Signal<string | null>;
6010
6459
  protected select(themeName: ThemeName | null): void;
6011
6460
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniThemeSwitchComponent, never>;
6012
6461
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniThemeSwitchComponent, "uni-theme-switch", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "themeChanged": "themeChanged"; }, never, never, true, never>;
6013
6462
  }
6014
6463
 
6015
6464
  interface UniTooltipOptions {
6465
+ /** Named motion primitive for the fade in and out. Defaults to `notification`. */
6466
+ motion?: Motion;
6016
6467
  color?: ContainerColorToken;
6017
6468
  border?: Border;
6018
6469
  borderRadius?: Radius;
@@ -6058,6 +6509,8 @@ declare class UniTooltipComponent extends BaseComponent<UniTooltipOptions> {
6058
6509
  showTooltip(): void;
6059
6510
  hideTooltip(): void;
6060
6511
  protected onAnimationEnd(event: AnimationEvent): void;
6512
+ /** Resolved from the component's `motion` option; `notification` by default. */
6513
+ private readonly motion;
6061
6514
  protected readonly className: _angular_core.Signal<string>;
6062
6515
  private tooltipFadeIn;
6063
6516
  private tooltipFadeOut;
@@ -6110,7 +6563,7 @@ declare class UniTourComponent extends BaseComponent<UniTourOptions> {
6110
6563
  private destroyRef;
6111
6564
  steps: _angular_core.InputSignal<UniTourStep[]>;
6112
6565
  /** The presented step index, or null when the tour is not running. */
6113
- active: _angular_core.ModelSignal<number>;
6566
+ active: _angular_core.ModelSignal<number | null>;
6114
6567
  nextLabel: _angular_core.InputSignal<string>;
6115
6568
  backLabel: _angular_core.InputSignal<string>;
6116
6569
  skipLabel: _angular_core.InputSignal<string>;
@@ -6130,11 +6583,11 @@ declare class UniTourComponent extends BaseComponent<UniTourOptions> {
6130
6583
  /** Repeats must still be heard: the same gate message can come round
6131
6584
  again on a later step. */
6132
6585
  protected readonly announcer: _uni_design_system_uni_angular.Announcer;
6133
- protected readonly resolvedTarget: _angular_core.WritableSignal<HTMLElement>;
6586
+ protected readonly resolvedTarget: _angular_core.WritableSignal<HTMLElement | undefined>;
6134
6587
  private readonly presentedIndex;
6135
6588
  private gateCleanup;
6136
6589
  protected readonly index: _angular_core.Signal<number>;
6137
- protected readonly currentStep: _angular_core.Signal<UniTourStep>;
6590
+ protected readonly currentStep: _angular_core.Signal<UniTourStep | undefined>;
6138
6591
  protected readonly isLast: _angular_core.Signal<boolean>;
6139
6592
  protected readonly clickGate: _angular_core.Signal<boolean>;
6140
6593
  /** Gated steps force an interactive target — the gate needs the gesture. */
@@ -6184,5 +6637,6 @@ declare class DragAndDropDirective {
6184
6637
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DragAndDropDirective, "[uni-drag-n-drop], [dragAndDrop]", never, {}, { "fileDropped": "fileDropped"; }, never, never, true, never>;
6185
6638
  }
6186
6639
 
6187
- export { BodyRenderDirective, ConfirmationDialogComponent, DRAWER_PANEL, DragAndDropDirective, FOCUSABLE_SELECTOR, ListboxNavigation, LocalStorageService, NotificationService, NotificationsComponent, RippleDirective, TRANSFORM_ORIGINS, ThemeService, UNI_FORMS, UNI_LAYOUT, UNI_THEMES, UniAlertComponent, UniAppBarComponent, UniAvatarComponent, UniAvatarGroupComponent, UniBackgroundComponent, UniBadgeComponent, UniBaseDatasource, UniBoxDirective, UniBreadcrumbComponent, UniButtonComponent, UniButtonGroupComponent, UniCalendarComponent, UniCalloutComponent, UniCardComponent, UniCardContentComponent, UniCardHeaderComponent, UniCenterDirective, UniCheckboxComponent, UniComboboxComponent, UniDataSearchComponent, UniDataTableComponent, UniDateInputComponent, UniDateTimeInputComponent, UniDebounceInputComponent, UniDialogButtonsComponent, UniDialogComponent, UniDialogHeaderComponent, UniDividerComponent, UniDrawerButtonsComponent, UniDrawerComponent, UniDrawerHeaderComponent, UniDropdownComponent, UniExpandAreaComponent, UniExpandComponent, UniExpandToggleComponent, UniFileDropZoneComponent, UniGridAreaDirective, UniGridDirective, UniIconButtonComponent, UniIconComponent, UniInputBoxComponent, UniInputComponent, UniJsonViewComponent, UniMenuComponent, UniMultiSelectComponent, UniMultiSelectDropdownComponent, UniNotificationBadgeComponent, UniNumberInputComponent, UniNumberRangeInputComponent, UniPaginatorComponent, UniPopoverComponent, UniProgressBarComponent, UniProgressGaugeComponent, UniQuantityStepperComponent, UniRadioComponent, UniRecordDatasource, UniRowDirective, UniScrollAreaComponent, UniSearchInputComponent, UniSelectComponent, UniServerSideDatasource, UniSkeletonComponent, UniSliderComponent, UniSnackbarComponent, UniSortHeaderComponent, UniStackDirective, UniStatComponent, UniSymbolComponent, UniTabComponent, UniTabsComponent, UniTagComponent, UniTagInputComponent, UniTextDirective, UniTextareaComponent, UniThemeBuilderComponent, UniThemeSwitchComponent, UniTimeInputComponent, UniToggleComponent, UniTooltipComponent, UniTourComponent, UniWrapDirective, acceptableFile, addDays, addMonths, anchorArrowStyles, anchorStyles, buildMonthGrid, clampDecimal, clearAnchorName, compareDecimal, createAnnouncer, createListboxNavigation, createPressRepeat, dayOfWeek, daysInMonth, decimalScale, discreteOverlayTransition, evaluateExpression, focusableElements, formatDate, formatMonthHeading, formatNumber, formatTime, fromScaled, getFileExtension, inclusiveDayCount, isCanonicalDecimal, isDivider, isToggleOpen, isValidDate, isoDate, joinDateTime, listboxPopupAttr, listboxPopupStyles, localeDatePlaceholder, localeDefaultHour12, localeFieldOrder, localeMonthNames, localeNumberParts, localeWeekStart, losesPrecision, monthOf, motionSafe, newAnchorName, newListboxAnchor, normalizeDecimal, parseDateText, parseNumber, parseTimeText, promoteListboxPopup, rawNumberText, resolveElement, resolveFocusTarget, resolveNumberFormat, restoreOverlayFocus, roundDecimal, setAnchorName, settleNumber, shiftDecimal, speakNumber, splitDateTime, spotlightStyles, stepDecimal, supportsAnchoredPopup, timeSlots, toAsciiDigits, toDecimal, toNumber, toScaled, todayIso, transformOriginFor, uniqueId, useTimer, visuallyHidden, weekdayNames };
6188
- export type { Alert, AnchorOffset, AnchorRect, Announcer, BrandPaletteConfig, BreadcrumbItem, ButtonGroupConfig, ButtonGroupItem, ColumnDefinition, Confirmation, DataLoader, DrawerBackground, DrawerCloseReason, DrawerMode, DrawerPosition, ImagePosition, ListboxNavigationConfig, MenuDivider, MenuItem, MenuItemWithLabel, MenuItemWithTemplate, Option, Options, PageRequest, PageResponse, Placement, PressRepeat, PressRepeatConfig, PressRepeatTiming, ScrollbarAppearance, SkeletonShape, SkeletonSweepDirection, Snackbar, Sort, SortDirection, SpotlightOptions, SpotlightStyles, UniAppBarOptions, UniAvatarGroupOptions, UniAvatarOptions, UniBreadcrumbOptions, UniCalendarMarker, UniCalendarMode, UniCalendarOptions, UniCalendarValue, UniCalloutDismissal, UniCalloutOptions, UniCheckboxOptions, UniCheckboxVariant, UniComboboxOptions, UniComboboxRejection, UniDataSearchOptions, UniDataTableOptions, UniDatasource, UniDate, UniDateInputOptions, UniDateInputRejection, UniDateRange, UniDateTime, UniDateTimeInputOptions, UniDrawerButtonsOptions, UniDrawerCloseRequest, UniDrawerHeaderOptions, UniDrawerOptions, UniDrawerPanel, UniExpandOptions, UniInputBoxOptions, UniInputMode, UniInputType, UniListboxPopupOptions, UniLocaleNumberParts, UniMenuItemOptions, UniMenuOptions, UniMonthGridCell, UniMultiSelectDropdownOptions, UniNotificationBadgeOptions, UniNumberClamp, UniNumberFormatConfig, UniNumberGrouping, UniNumberInputOptions, UniNumberParseResult, UniNumberPreset, UniNumberRange, UniNumberRangeInputOptions, UniNumberRangePart, UniNumberRangeRejection, UniNumberRejectReason, UniNumberRejection, UniNumberStepConfig, UniNumberStepped, UniPaginatorOptions, UniPopoverOptions, UniQuantityStepperOptions, UniRadioOption, UniRadioOptions, UniRadioVariant, UniResolvedNumberFormat, UniRoundingMode, UniSearchInputOptions, UniSkeletonOptions, UniSliderMark, UniSliderOptions, UniSliderThumb, UniStatOptions, UniStepperLayout, UniTabsOptions, UniTagInputOptions, UniTagItem, UniTagOptions, UniTagRejection, UniTagSuggestion, UniTagValue, UniTextareaOptions, UniTime, UniTimeInputOptions, UniTimeInputRejection, UniToggleOptions, UniToggleVariant, UniTourAdvance, UniTourOptions, UniTourStep, UniWeekdayName };
6640
+ export { BodyRenderDirective, ConfirmationDialogComponent, DRAWER_PANEL, DragAndDropDirective, FOCUSABLE_SELECTOR, ListboxNavigation, LocalStorageService, NotificationService, NotificationsComponent, RippleDirective, TRANSFORM_ORIGINS, ThemeService, UNI_FORMS, UNI_LAYOUT, UNI_THEMES, UniAlertComponent, UniAppBarComponent, UniAvatarComponent, UniAvatarGroupComponent, UniBackgroundComponent, UniBadgeComponent, UniBaseDatasource, UniBoxDirective, UniBreadcrumbComponent, UniButtonComponent, UniButtonGroupComponent, UniCalendarComponent, UniCalloutComponent, UniCardComponent, UniCardContentComponent, UniCardHeaderComponent, UniCenterDirective, UniCheckboxComponent, UniComboboxComponent, UniDataSearchComponent, UniDataTableComponent, UniDateInputComponent, UniDateTimeInputComponent, UniDebounceInputComponent, UniDialogButtonsComponent, UniDialogComponent, UniDialogHeaderComponent, UniDividerComponent, UniDrawerButtonsComponent, UniDrawerComponent, UniDrawerHeaderComponent, UniDropdownComponent, UniExpandAreaComponent, UniExpandComponent, UniExpandToggleComponent, UniFileDropZoneComponent, UniGridAreaDirective, UniGridDirective, UniIconButtonComponent, UniIconComponent, UniInlineButtonComponent, UniInputBoxComponent, UniInputComponent, UniJsonViewComponent, UniMenuComponent, UniMultiSelectComponent, UniMultiSelectDropdownComponent, UniNotificationBadgeComponent, UniNumberInputComponent, UniNumberRangeInputComponent, UniPaginatorComponent, UniPopoverComponent, UniProgressBarComponent, UniProgressGaugeComponent, UniQuantityStepperComponent, UniRadioComponent, UniRecordDatasource, UniRowDirective, UniScrollAreaComponent, UniSearchInputComponent, UniSelectComponent, UniServerSideDatasource, UniSkeletonComponent, UniSliderComponent, UniSnackbarComponent, UniSortHeaderComponent, UniStackDirective, UniStatComponent, UniSymbolComponent, UniTabComponent, UniTabsComponent, UniTagComponent, UniTagGroupComponent, UniTagInputComponent, UniTextDirective, UniTextareaComponent, UniThemeBuilderComponent, UniThemeSwitchComponent, UniTimeInputComponent, UniToggleComponent, UniTooltipComponent, UniTourComponent, UniWrapDirective, acceptableFile, addDays, addMonths, anchorArrowStyles, anchorStyles, buildMonthGrid, clampDecimal, clearAnchorName, compareDecimal, createAnnouncer, createListboxNavigation, createPressRepeat, dayOfWeek, daysInMonth, decimalScale, discreteOverlayTransition, evaluateExpression, focusableElements, formatDate, formatMonthHeading, formatNumber, formatTime, fromScaled, getFileExtension, inclusiveDayCount, isCanonicalDecimal, isDivider, isToggleOpen, isValidDate, isoDate, joinDateTime, listboxPopupAttr, listboxPopupStyles, localeDatePlaceholder, localeDefaultHour12, localeFieldOrder, localeMonthNames, localeNumberParts, localeWeekStart, losesPrecision, monthOf, motionSafe, newAnchorName, newListboxAnchor, normalizeDecimal, parseDateText, parseNumber, parseTimeText, promoteListboxPopup, rawNumberText, resolveElement, resolveFocusTarget, resolveNumberFormat, restoreOverlayFocus, roundDecimal, setAnchorName, settleNumber, shiftDecimal, speakNumber, splitDateTime, spotlightStyles, stepDecimal, supportsAnchoredPopup, timeSlots, toAsciiDigits, toDecimal, toNumber, toScaled, todayIso, transformOriginFor, uniqueId, useTimer, visuallyHidden, weekdayNames };
6641
+ export type { Alert, AnchorOffset, AnchorRect, Announcer, BrandPaletteConfig, BreadcrumbItem, ButtonGroupConfig, ButtonGroupItem, ColumnDefinition, Confirmation, DataLoader, DrawerBackground, DrawerCloseReason, DrawerMode, DrawerPosition, ImagePosition, ListboxNavigationConfig, MenuDivider, MenuItem, MenuItemWithLabel, MenuItemWithTemplate, Option, Options, PageRequest, PageResponse, Placement, PressRepeat, PressRepeatConfig, PressRepeatTiming, ScrollbarAppearance, SkeletonShape, SkeletonSweepDirection, Snackbar, Sort, SortDirection, SpotlightOptions, SpotlightStyles, UniAppBarOptions, UniAvatarGroupOptions, UniAvatarOptions, UniBreadcrumbOptions, UniCalendarMarker, UniCalendarMode, UniCalendarOptions, UniCalendarValue, UniCalloutDismissal, UniCalloutOptions, UniCheckboxOptions, UniCheckboxVariant, UniComboboxOptions, UniComboboxRejection, UniDataSearchOptions, UniDataTableOptions, UniDatasource, UniDate, UniDateInputOptions, UniDateInputRejection, UniDateRange, UniDateTime, UniDateTimeInputOptions, UniDrawerButtonsOptions, UniDrawerCloseRequest, UniDrawerHeaderOptions, UniDrawerOptions, UniDrawerPanel, UniExpandOptions, UniInlineButtonOptions, UniInputBoxOptions, UniInputMode, UniInputType, UniListboxPopupOptions, UniLocaleNumberParts, UniMenuItemOptions, UniMenuOptions, UniMonthGridCell, UniMultiSelectDropdownOptions, UniNotificationBadgeOptions, UniNumberClamp, UniNumberFormatConfig, UniNumberGrouping, UniNumberInputOptions, UniNumberParseResult, UniNumberPreset, UniNumberRange, UniNumberRangeInputOptions, UniNumberRangePart, UniNumberRangeRejection, UniNumberRejectReason, UniNumberRejection, UniNumberStepConfig, UniNumberStepped, UniPaginatorOptions, UniPopoverOptions, UniQuantityStepperOptions, UniRadioOption, UniRadioOptions, UniRadioVariant, UniResolvedNumberFormat, UniRoundingMode, UniSearchInputOptions, UniSelectOptions, UniSkeletonOptions, UniSliderMark, UniSliderOptions, UniSliderThumb, UniStatOptions, UniStepperLayout, UniTabsOptions, UniTagGroupItem, UniTagGroupOptions, UniTagInputOptions, UniTagItem, UniTagOptions, UniTagRejection, UniTagSuggestion, UniTagValue, UniTextareaOptions, UniTime, UniTimeInputOptions, UniTimeInputRejection, UniToggleOptions, UniToggleVariant, UniTourAdvance, UniTourOptions, UniTourStep, UniWeekdayName };
6642
+ //# sourceMappingURL=uni-design-system-uni-angular.d.ts.map