@uni-design-system/uni-angular 10.0.0 → 10.2.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.
@@ -25,9 +25,23 @@ declare function resolveFocusTarget(element: HTMLElement): HTMLElement;
25
25
  /**
26
26
  * Visually hides content while keeping it available to screen readers.
27
27
  * Use for text alternatives (e.g. badge counts, icon-only affordances).
28
+ *
29
+ * `fixed`, not `absolute`, and that is load-bearing. An absolutely positioned
30
+ * box resolves its containing block to the nearest *positioned* ancestor —
31
+ * which, since the controls emitting these spans are `position: static`, is
32
+ * whatever positioned box happens to be above them in the consumer's layout,
33
+ * often several scroll containers up. The span then skips every intervening
34
+ * `overflow: auto` and lands in that distant ancestor's scrollable overflow,
35
+ * turning 1x1 of invisible text into real scrollable distance in a box that
36
+ * never opted into scrolling. A fixed box's containing block is the viewport,
37
+ * so it joins no ancestor's scrollable overflow at all.
38
+ *
39
+ * Caveat: inside a `transform`ed (or `filter`ed/`contain`ed) ancestor a fixed
40
+ * box re-anchors to that ancestor. Harmless here — the element is 1x1 and
41
+ * clipped to nothing, so where it lands never matters, only what it overflows.
28
42
  */
29
43
  declare const visuallyHidden: {
30
- readonly position: "absolute";
44
+ readonly position: "fixed";
31
45
  readonly width: 1;
32
46
  readonly height: 1;
33
47
  readonly padding: 0;
@@ -539,6 +553,15 @@ interface PressRepeatConfig {
539
553
  onRelease?: (repeated: boolean) => void;
540
554
  /** Consulted on press; a disabled button must not start a run. */
541
555
  disabled?: () => boolean;
556
+ /**
557
+ * Put focus where it belongs for this control — normally its text field, the
558
+ * way a native spinner does. Called on press, because taking pointer capture
559
+ * means preventing the default, which would otherwise leave focus nowhere.
560
+ *
561
+ * Receives the pressed button, as a fallback for controls with no field to
562
+ * focus.
563
+ */
564
+ focus?: (button: HTMLElement | null) => void;
542
565
  /**
543
566
  * When this returns `false`, a press steps exactly once and the repeat timer
544
567
  * is never armed — `onRelease` still fires, with `repeated: false`. Lets a
@@ -985,8 +1008,8 @@ declare class ThemeService {
985
1008
  readonly theme: Signal<UniTheme>;
986
1009
  /** Selectable themes, derived from the registry — reactive to registration. */
987
1010
  readonly themeOptions: Signal<Options<string>>;
988
- components: Signal<Partial<Record<ComponentName, ComponentTheme<object>>>>;
989
- component: <T>(componentName: ComponentName) => Signal<ComponentTheme<T>>;
1011
+ components: Signal<Partial<Record<ComponentName, ComponentTheme<object, object>>>>;
1012
+ component: <T, V = object>(componentName: ComponentName) => Signal<ComponentTheme<T, V>>;
990
1013
  colors: Signal<Partial<Record<string, string>>>;
991
1014
  typeFaces: Signal<Record<string, _uni_design_system_uni_core.TypeFaceDefinition>>;
992
1015
  spacing: Signal<_uni_design_system_uni_core.Spacing>;
@@ -1045,6 +1068,28 @@ declare class ThemeService {
1045
1068
  componentStyle: (componentName: ComponentName, variant: Variant, size: Size) => Signal<{
1046
1069
  [x: string]: string | number | _uni_design_system_uni_core.StyleExpression;
1047
1070
  }>;
1071
+ /**
1072
+ * The active variant's roles from a component's `variantOptions` map — the
1073
+ * per-variant data a component *reads* rather than CSS it applies. See
1074
+ * `ComponentTheme.variantOptions`.
1075
+ */
1076
+ variantRoles: <V>(componentName: ComponentName, variant: Variant) => Signal<V | undefined>;
1077
+ private readonly warnedVariants;
1078
+ /**
1079
+ * Say something when a component is asked for a variant its theme does not
1080
+ * define, once per component/variant pair.
1081
+ *
1082
+ * `Variant` is an open registry, so a name the theme never styled cannot be a
1083
+ * compile error — and the miss is silent by construction, because an absent
1084
+ * style spreads to nothing and an absent role falls back. That is exactly the
1085
+ * ordinary state of a work in progress: a designer registers `destructive`,
1086
+ * uses it, and has not written its theme block yet. Same reasoning as
1087
+ * {@link resolveSpacing}, whose open scale has the same problem.
1088
+ *
1089
+ * A component that themes no variants at all is not missing anything — most
1090
+ * of the library never varies by intent — so silence there is correct.
1091
+ */
1092
+ private warnUnthemedVariant;
1048
1093
  /**
1049
1094
  * Resolve a spacing token to its CSS value. `'none'` resolves through the
1050
1095
  * scale like any other token — it is `0`, not the string `'none'`, which is
@@ -1138,7 +1183,7 @@ declare class ThemeService {
1138
1183
  gap(gap: OptionalSize): NullableStyleExpression;
1139
1184
  zIndex(element: ZIndexableElements | undefined): NullableStyleExpression;
1140
1185
  borderColor(borderColor: ColorToken): NullableStyleExpression;
1141
- getComponentTheme<T>(componentName: ComponentName): Signal<ComponentTheme<T>>;
1186
+ getComponentTheme<T, V = object>(componentName: ComponentName): Signal<ComponentTheme<T, V>>;
1142
1187
  getComponentOptions: <T>(componentName: ComponentName) => _angular_core.WritableSignal<T>;
1143
1188
  componentOptions: (componentName: ComponentName) => Signal<unknown>;
1144
1189
  style(prop: string, value: string | number | undefined): NullableStyleExpression;
@@ -1154,20 +1199,44 @@ declare class ThemeService {
1154
1199
 
1155
1200
  declare const UNI_THEMES: InjectionToken<Record<string, UniTheme>>;
1156
1201
 
1157
- declare class BaseComponent<T = unknown> {
1202
+ declare class BaseComponent<T = unknown, V = unknown> {
1158
1203
  protected componentName: ComponentName;
1159
1204
  theme: ThemeService;
1160
- variant: _angular_core.InputSignal<Variant>;
1205
+ variant: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
1161
1206
  size: _angular_core.InputSignal<Size>;
1162
- componentTheme: _angular_core.Signal<_uni_design_system_uni_core.ComponentTheme<T>>;
1207
+ componentTheme: _angular_core.Signal<_uni_design_system_uni_core.ComponentTheme<T, V>>;
1208
+ /**
1209
+ * The active variant's roles from the theme's `variantOptions` map, for
1210
+ * components whose accent lands on several interior elements and so cannot
1211
+ * be expressed as a single applied style. Undefined when the theme does not
1212
+ * define this variant — which also raises a dev warning.
1213
+ */
1214
+ variantRoles: _angular_core.Signal<V>;
1163
1215
  componentOptions: _angular_core.Signal<T>;
1164
1216
  style: _angular_core.Signal<{
1165
1217
  [x: string]: string | number | _uni_design_system_uni_core.StyleExpression;
1166
1218
  }>;
1167
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<BaseComponent<any>, never>;
1168
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<BaseComponent<any>, "ng-component", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1219
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BaseComponent<any, any>, never>;
1220
+ 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>;
1169
1221
  }
1170
1222
 
1223
+ /**
1224
+ * What a variant means for a checkbox, as theme data the component reads.
1225
+ *
1226
+ * The accent lands in five places — the box outline, the checked border, the
1227
+ * checked and indeterminate fills, and the focus ring — so it cannot be a
1228
+ * single applied style without naming interior classes in the theme. Naming
1229
+ * the role instead keeps `.checkbox-box` and `.checkbox-check` private.
1230
+ */
1231
+ interface UniCheckboxVariant {
1232
+ /** Box outline, checked fill and focus ring. */
1233
+ accent: ColorKey;
1234
+ /**
1235
+ * The tick and dash, which draw on top of the accent fill. Defaults to the
1236
+ * accent's paired `on-` token; set it where no such pair exists.
1237
+ */
1238
+ onAccent?: ColorKey;
1239
+ }
1171
1240
  interface UniCheckboxOptions {
1172
1241
  size?: string | number;
1173
1242
  borderRadius?: string | number;
@@ -1176,14 +1245,21 @@ interface UniCheckboxOptions {
1176
1245
  focusRingGap?: string | number;
1177
1246
  }
1178
1247
 
1179
- declare class UniCheckboxComponent extends BaseComponent<UniCheckboxOptions> implements FormCheckboxControl {
1248
+ declare class UniCheckboxComponent extends BaseComponent<UniCheckboxOptions, UniCheckboxVariant> implements FormCheckboxControl {
1180
1249
  readonly checked: _angular_core.ModelSignal<boolean>;
1181
1250
  readonly disabled: _angular_core.InputSignal<boolean>;
1182
1251
  readonly touched: _angular_core.ModelSignal<boolean>;
1183
1252
  readonly invalid: _angular_core.InputSignal<boolean>;
1184
1253
  readonly dirty: _angular_core.InputSignal<boolean>;
1185
- /** Synced from required() validators by the Signal Forms [field] directive. */
1254
+ /** Synced from required() validators by the Signal Forms [formField] directive. */
1186
1255
  readonly required: _angular_core.InputSignal<boolean>;
1256
+ /**
1257
+ * Accent colour token, overriding the variant's themed accent for one
1258
+ * instance. Mirrors `uni-toggle`'s input of the same name — it exists because
1259
+ * `variant` defaults to `'primary'`, so the component cannot tell "set to
1260
+ * primary" from "not set".
1261
+ */
1262
+ readonly checkedColor: _angular_core.InputSignal<string>;
1187
1263
  /**
1188
1264
  * Id(s) of external element(s) describing this control — typically your
1189
1265
  * app-rendered error message — exposed as aria-describedby.
@@ -1200,11 +1276,22 @@ declare class UniCheckboxComponent extends BaseComponent<UniCheckboxOptions> imp
1200
1276
  handleChange(event: Event): void;
1201
1277
  protected readonly checkboxLabel: _angular_core.Signal<string>;
1202
1278
  protected readonly checkboxInput: _angular_core.Signal<string>;
1203
- getThemeColor(token: ColorToken): string;
1204
- /** The content color paired with a variant fill (on-primary, on-warn, …). */
1205
- getOnColor(variant: ColorToken): string;
1279
+ /**
1280
+ * The accent and its paired content colour, from the theme's variant roles.
1281
+ *
1282
+ * Previously the variant *name* was looked up as a colour token, which held
1283
+ * together only because every variant happened to also be a colour. With the
1284
+ * registry open that coincidence ends by design: `variant="destructive"`
1285
+ * would have missed and silently rendered primary. The theme now says which
1286
+ * colour draws the intent, and an unthemed variant warns rather than lying.
1287
+ *
1288
+ * `primary` is the last resort because it is a reserved variant name — the
1289
+ * default every component inherits.
1290
+ */
1291
+ private readonly accent;
1292
+ protected readonly boxColor: _angular_core.Signal<string>;
1206
1293
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniCheckboxComponent, never>;
1207
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniCheckboxComponent, "uni-checkbox", never, { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "touched": "touchedChange"; "indeterminate": "indeterminateChange"; }, never, never, true, never>;
1294
+ 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>;
1208
1295
  }
1209
1296
 
1210
1297
  /** A commit was refused (no match); the field reverted to the committed label. */
@@ -1648,7 +1735,7 @@ declare class UniInputComponent implements FormValueControl<string> {
1648
1735
  readonly touched: _angular_core.ModelSignal<boolean>;
1649
1736
  readonly invalid: _angular_core.InputSignal<boolean>;
1650
1737
  readonly dirty: _angular_core.InputSignal<boolean>;
1651
- /** Synced from required() validators by the Signal Forms [field] directive. */
1738
+ /** Synced from required() validators by the Signal Forms [formField] directive. */
1652
1739
  readonly required: _angular_core.InputSignal<boolean>;
1653
1740
  /**
1654
1741
  * Id(s) of external element(s) describing this control — typically your
@@ -1811,7 +1898,7 @@ declare class UniGridDirective extends UniBoxDirective {
1811
1898
  templateColumns: _angular_core.InputSignal<string>;
1812
1899
  templateRows: _angular_core.InputSignal<string>;
1813
1900
  outline: _angular_core.InputSignal<Thickness>;
1814
- outlineColor: _angular_core.InputSignal<Variant>;
1901
+ outlineColor: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
1815
1902
  protected readonly gridClassName: _angular_core.Signal<string>;
1816
1903
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniGridDirective, never>;
1817
1904
  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>;
@@ -1871,7 +1958,7 @@ declare class UniMultiSelectDropdownComponent<T = unknown> extends BaseComponent
1871
1958
  readonly touched: _angular_core.ModelSignal<boolean>;
1872
1959
  readonly invalid: _angular_core.InputSignal<boolean>;
1873
1960
  readonly dirty: _angular_core.InputSignal<boolean>;
1874
- /** Synced from required() validators by the Signal Forms [field] directive. */
1961
+ /** Synced from required() validators by the Signal Forms [formField] directive. */
1875
1962
  readonly required: _angular_core.InputSignal<boolean>;
1876
1963
  /**
1877
1964
  * Id(s) of external element(s) describing this control — typically your
@@ -1966,6 +2053,14 @@ interface UniRadioOption {
1966
2053
  */
1967
2054
  disabled?: boolean;
1968
2055
  }
2056
+ /**
2057
+ * What a variant means for a radio, as theme data the component reads. The
2058
+ * accent lands on the dot, the hover and checked rings, and the focus ring.
2059
+ */
2060
+ interface UniRadioVariant {
2061
+ /** Dot fill, checked/hover ring and focus ring. */
2062
+ accent: ColorKey;
2063
+ }
1969
2064
  interface UniRadioOptions {
1970
2065
  /**
1971
2066
  * The size of the radio buttons
@@ -1980,14 +2075,20 @@ interface UniRadioOptions {
1980
2075
  motion?: Motion;
1981
2076
  }
1982
2077
 
1983
- declare class UniRadioComponent extends BaseComponent<UniRadioOptions> implements FormValueControl<string> {
2078
+ declare class UniRadioComponent extends BaseComponent<UniRadioOptions, UniRadioVariant> implements FormValueControl<string> {
1984
2079
  readonly value: _angular_core.ModelSignal<string>;
1985
2080
  readonly disabled: _angular_core.InputSignal<boolean>;
1986
2081
  readonly touched: _angular_core.ModelSignal<boolean>;
1987
2082
  readonly invalid: _angular_core.InputSignal<boolean>;
1988
2083
  readonly dirty: _angular_core.InputSignal<boolean>;
1989
- /** Synced from required() validators by the Signal Forms [field] directive. */
2084
+ /** Synced from required() validators by the Signal Forms [formField] directive. */
1990
2085
  readonly required: _angular_core.InputSignal<boolean>;
2086
+ /**
2087
+ * Accent colour token, overriding the variant's themed accent for one
2088
+ * instance. Mirrors the input of the same name on `uni-checkbox` and
2089
+ * `uni-toggle`.
2090
+ */
2091
+ readonly checkedColor: _angular_core.InputSignal<string>;
1991
2092
  /**
1992
2093
  * Id(s) of external element(s) describing this control — typically your
1993
2094
  * app-rendered error message — exposed as aria-describedby.
@@ -2005,9 +2106,20 @@ declare class UniRadioComponent extends BaseComponent<UniRadioOptions> implement
2005
2106
  protected readonly radioOptionClass: _angular_core.Signal<string>;
2006
2107
  protected readonly radioInputClass: _angular_core.Signal<string>;
2007
2108
  handleRadioChange(optionValue: string): void;
2008
- getThemeColor(token: ColorToken): string;
2109
+ /**
2110
+ * The accent colour, from the theme's variant roles rather than by treating
2111
+ * the variant name as a colour token — see `uni-checkbox` for why that had
2112
+ * to stop. `primary` is the last resort: a reserved variant name.
2113
+ */
2114
+ /**
2115
+ * A chrome colour by token. Unlike the `getThemeColor` this replaces, there
2116
+ * is no silent fallback to primary: these are tokens the theme is required
2117
+ * to define, so a miss should be visible rather than disguised.
2118
+ */
2119
+ private color;
2120
+ private readonly accent;
2009
2121
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniRadioComponent, never>;
2010
- 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; }; "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>;
2122
+ 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>;
2011
2123
  }
2012
2124
 
2013
2125
  /**
@@ -2124,7 +2236,7 @@ declare class UniSelectComponent<T> implements FormValueControl<T | null> {
2124
2236
  readonly touched: _angular_core.ModelSignal<boolean>;
2125
2237
  readonly invalid: _angular_core.InputSignal<boolean>;
2126
2238
  readonly dirty: _angular_core.InputSignal<boolean>;
2127
- /** Synced from required() validators by the Signal Forms [field] directive. */
2239
+ /** Synced from required() validators by the Signal Forms [formField] directive. */
2128
2240
  readonly required: _angular_core.InputSignal<boolean>;
2129
2241
  /**
2130
2242
  * Id(s) of external element(s) describing this control — typically your
@@ -2267,7 +2379,7 @@ declare class UniSliderComponent extends BaseComponent<UniSliderOptions> impleme
2267
2379
  formatValue: _angular_core.InputSignal<(value: number) => string>;
2268
2380
  /** Enforced distance between the two ends, in range mode. */
2269
2381
  minGap: _angular_core.InputSignal<number>;
2270
- variant: _angular_core.InputSignal<Variant>;
2382
+ variant: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
2271
2383
  /** Continuous, during a drag or a held key. Bind this for a live preview. */
2272
2384
  sliding: _angular_core.OutputEmitterRef<number | UniNumberRange>;
2273
2385
  /**
@@ -2805,11 +2917,11 @@ declare class UniNumberRangeInputComponent extends BaseComponent<UniNumberRangeI
2805
2917
  /**
2806
2918
  * Theme-level options for `uni-quantity-stepper`.
2807
2919
  *
2808
- * Unlike the other numeric controls this does **not** inherit the shared
2809
- * `input` chrome it is not a field, has no label and no error border — so it
2810
- * carries its own container tokens. They default to the same values `input`
2811
- * uses, so a cart stepper and a form field look related out of the box, and a
2812
- * theme can part them without editing every field.
2920
+ * It is not a field no label, no error border, no `uni-input-box` — but it
2921
+ * sits beside fields in carts and table rows, so its container **defaults to
2922
+ * the shared `input` chrome**: colour, border, radius and the focus indicator
2923
+ * all follow whatever a theme does to its fields. The options below are
2924
+ * per-component overrides, for parting them deliberately.
2813
2925
  *
2814
2926
  * Height comes from the `sizes` block (`sm` 24 / `md` 32 / `lg` 40) rather than
2815
2927
  * an option, and it is the *outer* height, so an `md` stepper lines up with a
@@ -2818,8 +2930,11 @@ declare class UniNumberRangeInputComponent extends BaseComponent<UniNumberRangeI
2818
2930
  * and is therefore the dense desktop option.
2819
2931
  */
2820
2932
  interface UniQuantityStepperOptions {
2933
+ /** Container fill. Unset — the default — takes `input`'s. */
2821
2934
  color?: ContainerColorToken;
2935
+ /** Frame, and the rules either side of the value. Unset takes `input`'s. */
2822
2936
  border?: Border;
2937
+ /** Corner radius. Unset takes `input`'s. */
2823
2938
  borderRadius?: Radius;
2824
2939
  /**
2825
2940
  * Colour override for the rules between the buttons and the value. Unset —
@@ -2834,7 +2949,12 @@ interface UniQuantityStepperOptions {
2834
2949
  deleteIcon?: IconName;
2835
2950
  /** `font-variant-numeric: tabular-nums`, so held stepping does not jitter. */
2836
2951
  tabularNumerals?: boolean;
2837
- /** Minimum width of the value, e.g. `'3ch'`. Stops a step reflowing the row. */
2952
+ /**
2953
+ * Floor for the value cell, e.g. `'3ch'` — headroom so stepping 9 → 10 does
2954
+ * not reflow the row. Beyond it the cell grows with the digits, because the
2955
+ * input is sized from its content rather than the browser's 20-character
2956
+ * default.
2957
+ */
2838
2958
  valueWidth?: string | number;
2839
2959
  }
2840
2960
 
@@ -2929,7 +3049,12 @@ declare class UniQuantityStepperComponent extends BaseComponent<UniQuantityStepp
2929
3049
  protected readonly decrement: _uni_design_system_uni_angular.PressRepeat;
2930
3050
  protected onKeydown(event: KeyboardEvent): void;
2931
3051
  protected onBlur(): void;
2932
- protected focusField(): void;
3052
+ /**
3053
+ * Focus the field a stepper press should land in. With `editable=false` there
3054
+ * is no field and the buttons are the tab stops, so the pressed button takes
3055
+ * it instead.
3056
+ */
3057
+ protected focusField(fallback?: HTMLElement | null): void;
2933
3058
  protected readonly className: _angular_core.Signal<string>;
2934
3059
  /** Overall height, from the theme's `sizes` block. */
2935
3060
  private readonly height;
@@ -2943,8 +3068,30 @@ declare class UniQuantityStepperComponent extends BaseComponent<UniQuantityStepp
2943
3068
  protected readonly rootClass: _angular_core.Signal<string>;
2944
3069
  /** Square at the field height, so the pointer target is legal at every size. */
2945
3070
  protected readonly buttonClass: _angular_core.Signal<string>;
3071
+ /**
3072
+ * Container chrome, defaulting to the shared `input` entry rather than to
3073
+ * hardcoded tokens. It is not a field, but it sits beside them in carts and
3074
+ * table rows, so a theme that restyles `input` must carry it along — the
3075
+ * options below stay as per-component overrides for a deliberately different
3076
+ * look.
3077
+ */
3078
+ private readonly containerColor;
3079
+ private readonly containerBorder;
3080
+ private readonly containerRadius;
2946
3081
  /** The rules either side of the value, matching the frame around it. */
2947
3082
  private readonly dividerBorder;
3083
+ /**
3084
+ * Characters the value cell asks the browser to size itself for.
3085
+ *
3086
+ * Load-bearing: a bare `<input>` defaults to `size="20"`, and `flex-basis:
3087
+ * auto` resolves to that intrinsic width — so the control claimed ~230px
3088
+ * instead of the ~100px its buttons and `valueWidth` need, and stole track
3089
+ * width from anything beside it in a grid (`1fr` is `minmax(auto, 1fr)`, and
3090
+ * the `auto` floor includes this). Tracking the content keeps the cell honest
3091
+ * while still letting it grow with the digits, which a fixed `width` would
3092
+ * not. `valueWidth` remains the floor, via `min-width`.
3093
+ */
3094
+ protected readonly valueSize: _angular_core.Signal<number>;
2948
3095
  private valueBase;
2949
3096
  protected readonly inputClass: _angular_core.Signal<string>;
2950
3097
  /** Read-only presentation: centred text on the same grid as the input. */
@@ -3025,7 +3172,7 @@ declare class UniTagInputComponent extends BaseComponent<UniTagInputOptions> imp
3025
3172
  max: _angular_core.InputSignal<number>;
3026
3173
  validate: _angular_core.InputSignal<(raw: string) => boolean>;
3027
3174
  parse: _angular_core.InputSignal<(pasted: string) => string[]>;
3028
- tagVariant: _angular_core.InputSignal<Variant>;
3175
+ tagVariant: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
3029
3176
  tagTone: _angular_core.InputSignal<TagTone>;
3030
3177
  tagSize: _angular_core.InputSignal<Size>;
3031
3178
  suggestions: _angular_core.InputSignal<UniTagSuggestion[]>;
@@ -3141,7 +3288,7 @@ declare class UniTextareaComponent implements FormValueControl<string> {
3141
3288
  readonly touched: _angular_core.ModelSignal<boolean>;
3142
3289
  readonly invalid: _angular_core.InputSignal<boolean>;
3143
3290
  readonly dirty: _angular_core.InputSignal<boolean>;
3144
- /** Synced from required() validators by the Signal Forms [field] directive. */
3291
+ /** Synced from required() validators by the Signal Forms [formField] directive. */
3145
3292
  readonly required: _angular_core.InputSignal<boolean>;
3146
3293
  /**
3147
3294
  * Id(s) of external element(s) describing this control — typically your
@@ -3280,24 +3427,45 @@ declare class UniTimeInputComponent extends BaseComponent<UniTimeInputOptions> i
3280
3427
  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>;
3281
3428
  }
3282
3429
 
3430
+ /**
3431
+ * What a variant means for a toggle, as theme data the component reads. The
3432
+ * accent fills the checked track and colours the focus ring.
3433
+ */
3434
+ interface UniToggleVariant {
3435
+ /** Checked track fill and focus ring. */
3436
+ accent: ColorKey;
3437
+ }
3283
3438
  interface UniToggleOptions {
3284
3439
  /**
3285
- * The size of the toggle switch
3440
+ * @deprecated Track height in px, from before the toggle had a `sizes` block.
3441
+ * Still honoured — and still wins when set, since a theme carrying it opted
3442
+ * into the old derived-ratio geometry (width = 2x, knob = 0.8x) — but it
3443
+ * applies to every instance regardless of the `size` input. Prefer the
3444
+ * theme's `toggle.sizes` block, which gives each size token its own
3445
+ * `width` / `height` / `padding`.
3286
3446
  */
3287
3447
  size?: number;
3288
3448
  /** Off-state track color token. */
3289
3449
  trackColor?: ColorKey;
3290
3450
  /** Knob color token. */
3291
3451
  knobColor?: ColorKey;
3452
+ /**
3453
+ * Checked-state track color token. Falls back to the instance's `variant`,
3454
+ * which is where this color lived before it had a theme home. The matching
3455
+ * `checkedColor` input overrides it per instance.
3456
+ */
3457
+ checkedColor?: ColorKey;
3458
+ /** Motion token for the knob slide and track color change. */
3459
+ motion?: Motion;
3292
3460
  }
3293
3461
 
3294
- declare class UniToggleComponent extends BaseComponent<UniToggleOptions> implements FormCheckboxControl {
3462
+ declare class UniToggleComponent extends BaseComponent<UniToggleOptions, UniToggleVariant> implements FormCheckboxControl {
3295
3463
  readonly checked: _angular_core.ModelSignal<boolean>;
3296
3464
  readonly disabled: _angular_core.InputSignal<boolean>;
3297
3465
  readonly touched: _angular_core.ModelSignal<boolean>;
3298
3466
  readonly invalid: _angular_core.InputSignal<boolean>;
3299
3467
  readonly dirty: _angular_core.InputSignal<boolean>;
3300
- /** Synced from required() validators by the Signal Forms [field] directive. */
3468
+ /** Synced from required() validators by the Signal Forms [formField] directive. */
3301
3469
  readonly required: _angular_core.InputSignal<boolean>;
3302
3470
  /**
3303
3471
  * Id(s) of external element(s) describing this control — typically your
@@ -3305,15 +3473,47 @@ declare class UniToggleComponent extends BaseComponent<UniToggleOptions> impleme
3305
3473
  */
3306
3474
  readonly ariaDescribedBy: _angular_core.InputSignal<string>;
3307
3475
  readonly label: _angular_core.InputSignal<string>;
3476
+ /**
3477
+ * Checked-state track color token, overriding the theme's
3478
+ * `toggle.behavior.checkedColor`.
3479
+ *
3480
+ * This exists alongside the theme option because `variant` — where this color
3481
+ * used to live exclusively — defaults to `'primary'`, so the component cannot
3482
+ * tell "set to primary" from "not set". Without an input, a theme-level
3483
+ * `checkedColor` would silently make per-instance `variant` inert.
3484
+ */
3485
+ readonly checkedColor: _angular_core.InputSignal<string>;
3308
3486
  protected readonly showError: _angular_core.Signal<boolean>;
3309
3487
  markAsTouched(): void;
3310
3488
  handleChange(event: Event): void;
3489
+ /**
3490
+ * Track and knob geometry for the active `size`, read out of the theme's
3491
+ * `sizes` block as data — `width`, `height` and the knob's inset `padding`.
3492
+ *
3493
+ * Read rather than spread: `padding` must not reach the track as real CSS or
3494
+ * it would double up with the knob's own `top`/`left` offsets. `uni-calendar`
3495
+ * treats its size block the same way.
3496
+ */
3311
3497
  private readonly metrics;
3498
+ /**
3499
+ * The resolved checked/accent color: the per-instance input, then the
3500
+ * variant's themed accent, then the theme option.
3501
+ *
3502
+ * The last link used to be `this.variant()` — the variant *name* resolved as
3503
+ * a colour token. That only ever worked because every variant happened to
3504
+ * also be a colour; with the registry open, `variant="destructive"` would
3505
+ * have missed and silently rendered primary. `primary` is the last resort
3506
+ * because it is a reserved variant name.
3507
+ */
3508
+ private readonly accent;
3509
+ /** Knob slide and track color change, as a motion token — never `all`. */
3510
+ private readonly transitions;
3312
3511
  protected readonly toggleLabel: _angular_core.Signal<string>;
3313
3512
  protected readonly toggleInput: _angular_core.Signal<string>;
3314
- getThemeColor(token: ColorToken): string;
3513
+ /** A chrome colour by token no silent fallback; see `uni-radio`. */
3514
+ private color;
3315
3515
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniToggleComponent, never>;
3316
- 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; }; }, { "checked": "checkedChange"; "touched": "touchedChange"; }, never, never, true, never>;
3516
+ 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>;
3317
3517
  }
3318
3518
 
3319
3519
  /**
@@ -3436,7 +3636,7 @@ interface UniBadgeOptions {
3436
3636
  }
3437
3637
 
3438
3638
  declare class UniBadgeComponent extends BaseComponent<UniBadgeOptions> {
3439
- color: _angular_core.InputSignal<Variant>;
3639
+ color: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
3440
3640
  useVariant: _angular_core.InputSignal<boolean>;
3441
3641
  width: _angular_core.InputSignal<number>;
3442
3642
  protected readonly className: _angular_core.Signal<string>;
@@ -3673,7 +3873,7 @@ declare class UniCalendarComponent extends BaseComponent<UniCalendarOptions> imp
3673
3873
  protected readonly outsideDayClass: _angular_core.Signal<string>;
3674
3874
  protected readonly dotsClass: _angular_core.Signal<string>;
3675
3875
  /** One dot class per marker variant present, resolved from the palette. */
3676
- protected readonly dotClasses: _angular_core.Signal<Map<Variant, string>>;
3876
+ protected readonly dotClasses: _angular_core.Signal<Map<keyof _uni_design_system_uni_core.UniVariantRegistry, string>>;
3677
3877
  protected dotClassFor(variant: Variant | undefined): string;
3678
3878
  protected readonly showOutside: _angular_core.Signal<boolean>;
3679
3879
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniCalendarComponent, never>;
@@ -3975,16 +4175,16 @@ interface UniDialogButtonsOptions {
3975
4175
  declare class UniDialogButtonsComponent extends BaseComponent<UniDialogButtonsOptions> {
3976
4176
  private dialog;
3977
4177
  confirmButtonText: _angular_core.InputSignal<string>;
3978
- confirmButtonVariant: _angular_core.InputSignal<Variant>;
4178
+ confirmButtonVariant: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
3979
4179
  cancelButtonText: _angular_core.InputSignal<string>;
3980
- cancelButtonVariant: _angular_core.InputSignal<Variant>;
4180
+ cancelButtonVariant: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
3981
4181
  disableConfirm: _angular_core.InputSignal<boolean>;
3982
4182
  padding: _angular_core.InputSignal<NullableSize>;
3983
4183
  paddingBottom: _angular_core.InputSignal<NullableSize>;
3984
4184
  justifyContent: _angular_core.InputSignal<JustifyContent>;
3985
4185
  confirmed: _angular_core.OutputEmitterRef<void>;
3986
- protected confirmVariant: _angular_core.Signal<Variant>;
3987
- protected cancelVariant: _angular_core.Signal<Variant>;
4186
+ protected confirmVariant: _angular_core.Signal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
4187
+ protected cancelVariant: _angular_core.Signal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
3988
4188
  protected paddingValue: _angular_core.Signal<NullableSize>;
3989
4189
  protected paddingBottomValue: _angular_core.Signal<NullableSize>;
3990
4190
  protected justifyContentValue: _angular_core.Signal<JustifyContent>;
@@ -4078,10 +4278,147 @@ declare class UniDividerComponent {
4078
4278
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDividerComponent, "uni-divider", never, { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "border": { "alias": "border"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4079
4279
  }
4080
4280
 
4281
+ /**
4282
+ * Theme-level options for the drawer's pinned footer action row. Inputs on the
4283
+ * component override these per instance; the theme sets the default posture.
4284
+ *
4285
+ * Mirrors `UniDialogButtonsOptions` knob for knob, with a panel's posture
4286
+ * rather than a dialog's: trailing actions instead of centered ones, and a
4287
+ * divider against the scrolling body above.
4288
+ */
4289
+ interface UniDrawerButtonsOptions {
4290
+ /** Space between the action buttons, as a spacing token. */
4291
+ gap?: NullableSize;
4292
+ /** Padding around the row, as a spacing token. */
4293
+ padding?: NullableSize;
4294
+ justifyContent?: JustifyContent;
4295
+ confirmButtonVariant?: Variant;
4296
+ cancelButtonVariant?: Variant;
4297
+ /** Size passed to both buttons. */
4298
+ buttonSize?: Size;
4299
+ /** Rule separating the footer from the scrolling body, as a border primitive. */
4300
+ divider?: Border;
4301
+ /** When true the two actions share the full row width as equal halves. */
4302
+ stretch?: boolean;
4303
+ /** Render cancel before confirm (confirm ends up on the trailing edge). */
4304
+ reverseOrder?: boolean;
4305
+ }
4306
+
4307
+ /**
4308
+ * The drawer's pinned footer action row — the save bar of an editor panel.
4309
+ *
4310
+ * Sits outside the scrolling body, so the actions stay reachable however long
4311
+ * the form is. Mirrors `[dialog-buttons]`; the difference is posture, which
4312
+ * lives in the `drawerButtons` theme options rather than here.
4313
+ */
4314
+ declare class UniDrawerButtonsComponent extends BaseComponent<UniDrawerButtonsOptions> {
4315
+ private readonly drawer;
4316
+ confirmButtonText: _angular_core.InputSignal<string>;
4317
+ confirmButtonVariant: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
4318
+ cancelButtonText: _angular_core.InputSignal<string>;
4319
+ cancelButtonVariant: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
4320
+ disableConfirm: _angular_core.InputSignal<boolean>;
4321
+ padding: _angular_core.InputSignal<NullableSize>;
4322
+ justifyContent: _angular_core.InputSignal<JustifyContent>;
4323
+ confirmed: _angular_core.OutputEmitterRef<void>;
4324
+ protected confirmVariant: _angular_core.Signal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
4325
+ protected cancelVariant: _angular_core.Signal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
4326
+ protected paddingValue: _angular_core.Signal<NullableSize>;
4327
+ protected justifyContentValue: _angular_core.Signal<JustifyContent>;
4328
+ protected gapValue: _angular_core.Signal<NullableSize>;
4329
+ protected buttonSize: _angular_core.Signal<Size>;
4330
+ /** A pinned row, sized by its content rather than by the body beside it. */
4331
+ protected readonly hostClass: _angular_core.Signal<string>;
4332
+ protected readonly className: _angular_core.Signal<string>;
4333
+ /**
4334
+ * Cancel routes through the drawer's own close decision, so a panel with
4335
+ * unsaved changes can veto it exactly as it vetoes Escape.
4336
+ */
4337
+ protected closeDrawer(): void;
4338
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniDrawerButtonsComponent, never>;
4339
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDrawerButtonsComponent, "[uni-drawer-buttons], [drawer-buttons]", never, { "confirmButtonText": { "alias": "confirmButtonText"; "required": false; "isSignal": true; }; "confirmButtonVariant": { "alias": "confirmButtonVariant"; "required": false; "isSignal": true; }; "cancelButtonText": { "alias": "cancelButtonText"; "required": false; "isSignal": true; }; "cancelButtonVariant": { "alias": "cancelButtonVariant"; "required": false; "isSignal": true; }; "disableConfirm": { "alias": "disableConfirm"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; "justifyContent": { "alias": "justifyContent"; "required": false; "isSignal": true; }; }, { "confirmed": "confirmed"; }, never, never, true, never>;
4340
+ }
4341
+
4342
+ /**
4343
+ * Theme-level options for the drawer's pinned header row. Deliberately a
4344
+ * separate entry from `dialogHeader`: the two rows look alike but read
4345
+ * differently — a panel headline labels a region beside the page, where a
4346
+ * dialog's titles an interruption — so they want different defaults.
4347
+ */
4348
+ interface UniDrawerHeaderOptions {
4349
+ /** Row surface. Undefined inherits the drawer's own surface. */
4350
+ color?: ContainerColorToken;
4351
+ /** Fixed row height in px. */
4352
+ height?: number;
4353
+ /** Padding around the row, as a spacing token. */
4354
+ padding?: NullableSize;
4355
+ textRole?: TextRole;
4356
+ textColor?: ContentColorToken;
4357
+ textAlign?: 'left' | 'center' | 'right';
4358
+ /** Rule separating the header from the scrolling body, as a border primitive. */
4359
+ divider?: Border;
4360
+ closeButtonIcon?: IconName;
4361
+ closeButtonSymbol?: string;
4362
+ closeButtonSize?: Size;
4363
+ }
4364
+
4365
+ /**
4366
+ * The drawer's pinned header row: a title, and optionally a close button.
4367
+ *
4368
+ * Sits outside the scrolling body, so it stays put while the form beneath it
4369
+ * moves. Reached either by projecting it — `<div uni-drawer-header>` — or
4370
+ * implicitly, by giving `uni-drawer` a `headline`, in which case the drawer
4371
+ * renders one of these itself.
4372
+ */
4373
+ declare class UniDrawerHeaderComponent extends BaseComponent<UniDrawerHeaderOptions> {
4374
+ private readonly drawer;
4375
+ /** Title text. Falls back to the drawer's `headline`; projected content wins over both. */
4376
+ headline: _angular_core.InputSignal<string>;
4377
+ /** Attached to the title so the drawer is labelled by it. */
4378
+ protected readonly titleId: string;
4379
+ protected readonly title: _angular_core.Signal<string>;
4380
+ protected readonly showClose: _angular_core.Signal<boolean>;
4381
+ constructor();
4382
+ /** Never a bare close: the drawer decides, so a veto is honoured here too. */
4383
+ protected closeDrawer(): void;
4384
+ protected readonly className: _angular_core.Signal<string>;
4385
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniDrawerHeaderComponent, never>;
4386
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDrawerHeaderComponent, "[uni-drawer-header]", never, { "headline": { "alias": "headline"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
4387
+ }
4388
+
4081
4389
  /** How the drawer coexists with page content. */
4082
4390
  type DrawerMode = 'side' | 'over';
4083
4391
  /** Which edge the drawer attaches to (logical: start = left in LTR). */
4084
4392
  type DrawerPosition = 'start' | 'end';
4393
+ /** Surface treatment of the panel behind its content. */
4394
+ type DrawerBackground = 'solid' | 'glass' | 'gradient';
4395
+ /** Why the drawer is asking to close. */
4396
+ type DrawerCloseReason = 'close-button' | 'escape' | 'backdrop';
4397
+ /**
4398
+ * Emitted by `closeRequest` before the drawer closes. The drawer is *asking*;
4399
+ * with `disableAutoClose` set it will not act on its own, leaving the consumer
4400
+ * free to run an async confirmation and set `open` when it resolves.
4401
+ */
4402
+ interface UniDrawerCloseRequest {
4403
+ reason: DrawerCloseReason;
4404
+ }
4405
+ /**
4406
+ * The slice of the drawer its header and footer rows need.
4407
+ *
4408
+ * A token rather than the component class on purpose: the drawer renders a
4409
+ * `[uni-drawer-header]` itself when given a `headline`, so importing the
4410
+ * component class in both directions would be a cycle.
4411
+ */
4412
+ interface UniDrawerPanel {
4413
+ readonly headline: Signal<string | undefined>;
4414
+ readonly defaultCloseButton: Signal<boolean>;
4415
+ readonly titleId: string;
4416
+ readonly hasHeader: {
4417
+ set(value: boolean): void;
4418
+ };
4419
+ requestClose(reason: DrawerCloseReason): void;
4420
+ }
4421
+ declare const DRAWER_PANEL: InjectionToken<UniDrawerPanel>;
4085
4422
  /** Theme-level options for `uni-drawer`, resolved by token name. */
4086
4423
  interface UniDrawerOptions {
4087
4424
  /** Panel surface color token (with its paired on-color). */
@@ -4090,16 +4427,27 @@ interface UniDrawerOptions {
4090
4427
  width?: number;
4091
4428
  /** Edge rule separating a side drawer from content, as a border primitive. */
4092
4429
  divider?: Border;
4093
- /** Elevation shadow token for the overlay mode. */
4430
+ /** Elevation shadow token. Overlay mode only see `background`. */
4094
4431
  elevation?: Elevation;
4095
- /** Inner padding, as a spacing token. */
4432
+ /**
4433
+ * Inner padding of the *body* row, as a spacing token. The panel itself is
4434
+ * unpadded so that header and footer rows can pin flush to its edges.
4435
+ */
4096
4436
  padding?: OptionalSize;
4097
- /** Backdrop styling for the overlay mode. */
4437
+ /** Backdrop styling for the overlay mode. Ignored when `scrim` is false. */
4098
4438
  backdrop?: StyleExpression;
4439
+ /**
4440
+ * Whether the overlay mode dims the page behind it. False leaves
4441
+ * `::backdrop` transparent — the drawer still traps focus and is still
4442
+ * modal, it simply does not darken what it covers.
4443
+ */
4444
+ scrim?: boolean;
4445
+ /** Surface treatment of the panel. */
4446
+ background?: DrawerBackground;
4099
4447
  }
4100
4448
 
4101
4449
  /**
4102
- * Navigation drawer with two modes sharing one content slot:
4450
+ * Drawer with two modes sharing one three-row layout:
4103
4451
  *
4104
4452
  * - `side` — an in-flow `<aside>` that pushes content (dashboard sidenav);
4105
4453
  * opening/closing animates its width, and the divider border primitive
@@ -4108,19 +4456,86 @@ interface UniDrawerOptions {
4108
4456
  * scrim backdrop come from the platform (same machinery as `uni-dialog`),
4109
4457
  * sliding in from its edge.
4110
4458
  *
4111
- * Surface, width, divider, elevation, padding and backdrop all resolve from
4112
- * `drawer` theme tokens.
4459
+ * **The panel is never the scroll container.** It is a flex column of three
4460
+ * rows — an optional `[uni-drawer-header]`, the projected body, an optional
4461
+ * `[uni-drawer-buttons]` — and only the body scrolls. The panel itself is
4462
+ * `overflow: clip` on both axes. That is what lets a header and a save bar pin
4463
+ * while a long form scrolls between them, and it is why the theme's `padding`
4464
+ * option lands on the body row rather than the panel: padding on a scrolling
4465
+ * box scrolls away with its content.
4466
+ *
4467
+ * Surface, width, divider, elevation, padding, backdrop, scrim and background
4468
+ * all resolve from `drawer` theme tokens.
4113
4469
  */
4114
4470
  declare class UniDrawerComponent extends BaseComponent<UniDrawerOptions> {
4115
4471
  /** Two-way bindable open state: [(open)]. */
4116
4472
  readonly open: _angular_core.ModelSignal<boolean>;
4117
4473
  mode: _angular_core.InputSignal<DrawerMode>;
4118
4474
  position: _angular_core.InputSignal<DrawerPosition>;
4119
- /** Accessible name for the overlay mode's dialog. */
4475
+ /**
4476
+ * Accessible name for the overlay mode. Only consulted when the drawer has
4477
+ * no header to be labelled by.
4478
+ *
4479
+ * There is deliberately no default. A drawer used as an editor panel that
4480
+ * inherited the literal "Navigation" would announce itself as something it
4481
+ * is not, and a wrong accessible name is worse than a missing one — the
4482
+ * missing one is at least caught by any audit.
4483
+ */
4120
4484
  ariaLabel: _angular_core.InputSignal<string>;
4121
- protected readonly contentTemplate: _angular_core.Signal<TemplateRef<unknown>>;
4485
+ /**
4486
+ * Title for the drawer's header row. Shorthand for projecting a
4487
+ * `[uni-drawer-header]`; project one instead when the header needs more
4488
+ * than a title (a record counter, prev/next navigation).
4489
+ */
4490
+ headline: _angular_core.InputSignal<string>;
4491
+ /** Whether the header row renders a close button. */
4492
+ defaultCloseButton: _angular_core.InputSignal<boolean>;
4493
+ /** Panel width in px, overriding the theme's `drawer.behavior.width`. */
4494
+ width: _angular_core.InputSignal<number>;
4495
+ /**
4496
+ * Whether the overlay dims the page behind it, overriding the theme's
4497
+ * `drawer.behavior.scrim`. False leaves the backdrop transparent so the page
4498
+ * stays legible while the panel is open — an editor panel beside a board the
4499
+ * user is still reading.
4500
+ *
4501
+ * This does not make the drawer non-modal: focus is still trapped and the
4502
+ * page behind is still inert. It is a visibility choice, not a modality one.
4503
+ */
4504
+ scrim: _angular_core.InputSignal<boolean>;
4505
+ /**
4506
+ * CSS selector for the element to focus when the overlay opens. The native
4507
+ * default is the first focusable element, which in an editor panel is
4508
+ * usually the close button rather than the first field.
4509
+ */
4510
+ initialFocus: _angular_core.InputSignal<string>;
4511
+ /**
4512
+ * The drawer is *asking* to close — Escape, the backdrop, or a close/cancel
4513
+ * button. Pair with `disableAutoClose` to hold the panel open while an async
4514
+ * confirmation runs.
4515
+ */
4516
+ closeRequest: _angular_core.OutputEmitterRef<UniDrawerCloseRequest>;
4517
+ /**
4518
+ * When true the drawer never closes itself; it only emits `closeRequest` and
4519
+ * waits for the consumer to set `open`. Off by default, so a drawer that
4520
+ * ignores `closeRequest` behaves exactly as it always has.
4521
+ */
4522
+ disableAutoClose: _angular_core.InputSignal<boolean>;
4523
+ /** Set by a projected `[uni-drawer-header]` so it can pin flush to the top. */
4524
+ readonly hasHeader: _angular_core.WritableSignal<boolean>;
4525
+ /** Id referenced by aria-labelledby; the header row attaches it to its title. */
4526
+ readonly titleId: string;
4527
+ protected readonly labelledBy: _angular_core.Signal<string>;
4528
+ protected readonly headerTemplate: _angular_core.Signal<TemplateRef<unknown>>;
4529
+ protected readonly bodyTemplate: _angular_core.Signal<TemplateRef<unknown>>;
4530
+ protected readonly footerTemplate: _angular_core.Signal<TemplateRef<unknown>>;
4122
4531
  private readonly overlay;
4123
4532
  constructor();
4533
+ /**
4534
+ * The one place a close is decided, so every route in — Escape, the
4535
+ * backdrop, the header's close button, the footer's cancel — behaves
4536
+ * identically and is equally vetoable.
4537
+ */
4538
+ requestClose(reason: DrawerCloseReason): void;
4124
4539
  protected onBackdropClick(event: Event): void;
4125
4540
  /** Route Escape through the animated close, keeping `open` in sync. */
4126
4541
  protected onCancel(event: Event): void;
@@ -4128,10 +4543,23 @@ declare class UniDrawerComponent extends BaseComponent<UniDrawerOptions> {
4128
4543
  private readonly edge;
4129
4544
  private readonly slideIn;
4130
4545
  private readonly slideOut;
4546
+ /** Input wins over the theme option; the literal is the last-resort default. */
4547
+ private readonly panelWidth;
4548
+ private readonly showScrim;
4549
+ /**
4550
+ * The panel's surface. `solid` is the plain color pair; `glass` and
4551
+ * `gradient` derive from it, so a theme swaps treatment without restating
4552
+ * the color.
4553
+ */
4554
+ private readonly surface;
4555
+ /** The shared flex column: three rows, and never a scroll container itself. */
4556
+ private readonly shell;
4131
4557
  protected readonly sideClass: _angular_core.Signal<string>;
4132
4558
  protected readonly overClass: _angular_core.Signal<string>;
4559
+ /** The only scrolling row, and the only padded one. */
4560
+ protected readonly bodyClass: _angular_core.Signal<string>;
4133
4561
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniDrawerComponent, never>;
4134
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDrawerComponent, "uni-drawer", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "open": "openChange"; }, never, ["*"], true, never>;
4562
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDrawerComponent, "uni-drawer", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "headline": { "alias": "headline"; "required": false; "isSignal": true; }; "defaultCloseButton": { "alias": "defaultCloseButton"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "scrim": { "alias": "scrim"; "required": false; "isSignal": true; }; "initialFocus": { "alias": "initialFocus"; "required": false; "isSignal": true; }; "disableAutoClose": { "alias": "disableAutoClose"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "closeRequest": "closeRequest"; }, never, ["[uni-drawer-header]", "[uni-drawer-buttons], [drawer-buttons]", "*"], true, never>;
4135
4563
  }
4136
4564
 
4137
4565
  interface UniDropdownOptions {
@@ -4349,7 +4777,7 @@ declare class UniFileDropZoneComponent {
4349
4777
  get fileSelectorElement(): HTMLInputElement;
4350
4778
  height: _angular_core.InputSignal<string | number>;
4351
4779
  borderRadius: _angular_core.InputSignal<string>;
4352
- border: _angular_core.InputSignal<Variant>;
4780
+ border: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
4353
4781
  padding: _angular_core.InputSignal<NullableSize>;
4354
4782
  useBrowseButton: _angular_core.InputSignal<boolean>;
4355
4783
  browseButtonText: _angular_core.InputSignal<string>;
@@ -4498,7 +4926,7 @@ declare class UniIconButtonComponent {
4498
4926
  private theme;
4499
4927
  config: _angular_core.Signal<_uni_design_system_uni_core.ComponentTheme<{
4500
4928
  borderRadius?: RadiiSize;
4501
- }>>;
4929
+ }, object>>;
4502
4930
  /**
4503
4931
  * Accessible name for the button. Alternative to projecting text content
4504
4932
  * (`<button icon-button>Close</button>`); one of the two is required for
@@ -4507,7 +4935,7 @@ declare class UniIconButtonComponent {
4507
4935
  ariaLabel: _angular_core.InputSignal<string>;
4508
4936
  iconName: _angular_core.InputSignal<IconName>;
4509
4937
  symbolName: _angular_core.InputSignal<string>;
4510
- variant: _angular_core.InputSignal<Variant>;
4938
+ variant: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
4511
4939
  size: _angular_core.InputSignal<Size>;
4512
4940
  disable: _angular_core.InputSignal<boolean>;
4513
4941
  loading: _angular_core.InputSignal<boolean>;
@@ -4641,7 +5069,7 @@ declare class UniNotificationBadgeComponent extends BaseComponent<UniNotificatio
4641
5069
  count: _angular_core.InputSignal<number>;
4642
5070
  maxCount: _angular_core.InputSignal<number>;
4643
5071
  badgeVariant: _angular_core.InputSignal<"dot" | "count" | "pill">;
4644
- color: _angular_core.InputSignal<Variant>;
5072
+ color: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
4645
5073
  position: _angular_core.InputSignal<"top-right" | "top-left" | "bottom-right" | "bottom-left">;
4646
5074
  show: _angular_core.InputSignal<boolean>;
4647
5075
  /**
@@ -4986,7 +5414,7 @@ declare class UniScrollAreaComponent {
4986
5414
  paddingRight: _angular_core.InputSignal<OptionalSize>;
4987
5415
  paddingTop: _angular_core.InputSignal<OptionalSize>;
4988
5416
  paddingBottom: _angular_core.InputSignal<OptionalSize>;
4989
- border: _angular_core.InputSignal<Variant>;
5417
+ border: _angular_core.InputSignal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
4990
5418
  height: _angular_core.InputSignal<OptionalValue>;
4991
5419
  width: _angular_core.InputSignal<OptionalValue>;
4992
5420
  appearance: _angular_core.InputSignal<ScrollbarAppearance>;
@@ -5308,7 +5736,7 @@ declare class UniTagComponent extends BaseComponent<UniTagOptions> {
5308
5736
  removed: _angular_core.OutputEmitterRef<UniTagValue>;
5309
5737
  activated: _angular_core.OutputEmitterRef<UniTagValue>;
5310
5738
  /** A disabled chip wears the theme's `disabled` role, whatever its variant. */
5311
- protected readonly resolvedVariant: _angular_core.Signal<_uni_design_system_uni_core.Variant>;
5739
+ protected readonly resolvedVariant: _angular_core.Signal<keyof _uni_design_system_uni_core.UniVariantRegistry>;
5312
5740
  protected readonly themeStyle: _angular_core.Signal<{
5313
5741
  [x: string]: string | number | _uni_design_system_uni_core.StyleExpression;
5314
5742
  }>;
@@ -5338,7 +5766,7 @@ declare class UniThemeBuilderComponent {
5338
5766
  protected readonly schemes: ColorScheme[];
5339
5767
  protected readonly categories: ColorCategory[];
5340
5768
  protected readonly shapes: ThemeShape[];
5341
- protected readonly variants: Variant[];
5769
+ protected readonly variants: (keyof _uni_design_system_uni_core.UniVariantRegistry)[];
5342
5770
  protected readonly sizes: readonly ["sm", "md", "lg", "xl"];
5343
5771
  protected readonly swatches: {
5344
5772
  label: string;
@@ -5600,5 +6028,5 @@ declare class DragAndDropDirective {
5600
6028
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DragAndDropDirective, "[uni-drag-n-drop], [dragAndDrop]", never, {}, { "fileDropped": "fileDropped"; }, never, never, true, never>;
5601
6029
  }
5602
6030
 
5603
- export { BodyRenderDirective, ConfirmationDialogComponent, 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, UniDrawerComponent, 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 };
5604
- export type { Alert, AnchorOffset, AnchorRect, Announcer, BrandPaletteConfig, BreadcrumbItem, ButtonGroupConfig, ButtonGroupItem, ColumnDefinition, Confirmation, DataLoader, DrawerMode, DrawerPosition, ImagePosition, ListboxNavigationConfig, MenuDivider, MenuItem, MenuItemWithLabel, MenuItemWithTemplate, Option, Options, PageRequest, PageResponse, Placement, PressRepeat, PressRepeatConfig, PressRepeatTiming, ScrollbarAppearance, SkeletonShape, SkeletonSweepDirection, Snackbar, Sort, SortDirection, SpotlightOptions, SpotlightStyles, UniAppBarOptions, UniAvatarGroupOptions, UniAvatarOptions, UniBreadcrumbOptions, UniCalendarMarker, UniCalendarMode, UniCalendarOptions, UniCalendarValue, UniCalloutDismissal, UniCalloutOptions, UniCheckboxOptions, UniComboboxOptions, UniComboboxRejection, UniDataSearchOptions, UniDataTableOptions, UniDatasource, UniDate, UniDateInputOptions, UniDateInputRejection, UniDateRange, UniDateTime, UniDateTimeInputOptions, UniDrawerOptions, UniExpandOptions, UniInputBoxOptions, 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, UniResolvedNumberFormat, UniRoundingMode, UniSearchInputOptions, UniSkeletonOptions, UniSliderMark, UniSliderOptions, UniSliderThumb, UniStatOptions, UniStepperLayout, UniTabsOptions, UniTagInputOptions, UniTagItem, UniTagOptions, UniTagRejection, UniTagSuggestion, UniTagValue, UniTextareaOptions, UniTime, UniTimeInputOptions, UniTimeInputRejection, UniToggleOptions, UniTourAdvance, UniTourOptions, UniTourStep, UniWeekdayName };
6031
+ 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 };
6032
+ 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 };