@uni-design-system/uni-angular 8.4.0 → 9.0.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,9 +1,9 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { Signal, WritableSignal, InjectionToken, ElementRef, TemplateRef, OnInit, OnDestroy, AfterViewInit } from '@angular/core';
3
3
  import * as _uni_design_system_uni_core from '@uni-design-system/uni-core';
4
- import { IconName, Variant, ContainerColorToken, PaletteConfig, GenerateColorsConfig, Radii, UniTheme, ComponentName, ComponentTheme, NullableSize, MotionToken, ThemeName, ThemeParseResult, TextRole, ContentColorToken, Size, Thickness, NullableStyleExpression, ColorKey, ColorToken, Typeface, Radius, Motion, OptionalSize, Border, Shadow, ZIndexableElements, Elevation, RadiiSize, TextColor, JustifyContent, StyleExpression, Orientation, CssLength, OptionalAlignSelf, OptionalAlignItems, OptionalAlignContent, OptionalJustifyContent, OptionalDisplay, OptionalPosition, OptionalOverflow, OptionalFlexDirection, OptionalTextAlign, OptionalWrap, TagTone, ColorScheme, ColorCategory, ThemeShape, ContrastCheck, Colors, GenerationInput } from '@uni-design-system/uni-core';
4
+ import { IconName, Variant, ContainerColorToken, PaletteConfig, GenerateColorsConfig, Radii, UniTheme, ComponentName, ComponentTheme, MotionToken, ThemeName, ThemeParseResult, TextRole, ContentColorToken, Size, NullableSize, Thickness, NullableStyleExpression, ColorKey, ColorToken, Typeface, Radius, Motion, OptionalSize, Border, Shadow, ZIndexableElements, OptionalAlignSelf, OptionalAlignItems, OptionalAlignContent, OptionalJustifyContent, OptionalDisplay, OptionalPosition, OptionalOverflow, OptionalFlexDirection, OptionalTextAlign, OptionalWrap, TextColor, TagTone, Elevation, RadiiSize, JustifyContent, StyleExpression, Orientation, CssLength, ColorScheme, ColorCategory, ThemeShape, ContrastCheck, Colors, GenerationInput } from '@uni-design-system/uni-core';
5
+ import { FormCheckboxControl, FormValueControl } from '@angular/forms/signals';
5
6
  import * as _uni_design_system_uni_angular from '@uni-design-system/uni-angular';
6
- import { FormValueControl, FormCheckboxControl } from '@angular/forms/signals';
7
7
  import { CSSObject } from '@emotion/css/create-instance';
8
8
 
9
9
  /**
@@ -613,7 +613,7 @@ declare class ThemeService {
613
613
  component: <T>(componentName: ComponentName) => Signal<ComponentTheme<T>>;
614
614
  colors: Signal<Partial<Record<string, string>>>;
615
615
  typeFaces: Signal<Record<string, _uni_design_system_uni_core.TypeFaceDefinition>>;
616
- spacing: Signal<Partial<Record<NullableSize, string | number>>>;
616
+ spacing: Signal<_uni_design_system_uni_core.Spacing>;
617
617
  thicknesses: Signal<Partial<Record<string, string | number>>>;
618
618
  radii: Signal<Partial<Record<string, string>>>;
619
619
  borders: Signal<Partial<Record<string, string>>>;
@@ -669,7 +669,22 @@ declare class ThemeService {
669
669
  componentStyle: (componentName: ComponentName, variant: Variant, size: Size) => Signal<{
670
670
  [x: string]: string | number | _uni_design_system_uni_core.StyleExpression;
671
671
  }>;
672
+ /**
673
+ * Resolve a spacing token to its CSS value. `'none'` resolves through the
674
+ * scale like any other token — it is `0`, not the string `'none'`, which is
675
+ * not a valid length and was silently dropped wherever it landed.
676
+ */
672
677
  getSpacing: (size: NullableSize) => string | number;
678
+ private readonly warnedSpacing;
679
+ /**
680
+ * Resolve a spacing token against the active theme.
681
+ *
682
+ * The scale is open — a theme may name steps beyond `xxs`…`xxl` — so a
683
+ * mistyped token cannot be a compile error. It would otherwise vanish
684
+ * silently, since an `undefined` CSS value is simply dropped, so say so once
685
+ * per token in dev.
686
+ */
687
+ private resolveSpacing;
673
688
  getThickness: (thickness: Thickness) => string | number;
674
689
  getContentColor: (token: ContainerColorToken, useVariant?: boolean) => string;
675
690
  colorPair: (token?: ContainerColorToken, colorVariant?: boolean) => NullableStyleExpression;
@@ -730,6 +745,12 @@ declare class ThemeService {
730
745
  paddingRight(size: OptionalSize): NullableStyleExpression;
731
746
  paddingTop(size: OptionalSize): NullableStyleExpression;
732
747
  paddingBottom(size: OptionalSize): NullableStyleExpression;
748
+ /**
749
+ * Inline-axis margin only — `'auto'` passes through for centering, anything
750
+ * else resolves as a spacing token. Block margins are deliberately absent
751
+ * (they collapse and fight `gap`).
752
+ */
753
+ marginInline(margin: 'auto' | OptionalSize): NullableStyleExpression;
733
754
  border(border: Border | undefined): NullableStyleExpression;
734
755
  borderTop(border: Border | undefined): NullableStyleExpression;
735
756
  borderBottom(border: Border | undefined): NullableStyleExpression;
@@ -745,6 +766,12 @@ declare class ThemeService {
745
766
  getComponentOptions: <T>(componentName: ComponentName) => _angular_core.WritableSignal<T>;
746
767
  componentOptions: (componentName: ComponentName) => Signal<unknown>;
747
768
  style(prop: string, value: string | number | undefined): NullableStyleExpression;
769
+ /**
770
+ * Like {@link style}, but only `undefined` means "unset" — so a meaningful
771
+ * `0` survives. `flex-shrink: 0` is the whole point of the input, and
772
+ * {@link style}'s truthiness check would drop it.
773
+ */
774
+ styleIfSet(prop: string, value: string | number | undefined): NullableStyleExpression;
748
775
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThemeService, never>;
749
776
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<ThemeService>;
750
777
  }
@@ -765,221 +792,192 @@ declare class BaseComponent<T = unknown> {
765
792
  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>;
766
793
  }
767
794
 
768
- /** Theme-level options for `uni-app-bar`, resolved by token name. */
769
- interface UniAppBarOptions {
770
- /** Bar surface color token (with its paired on-color). */
771
- color?: ContainerColorToken;
772
- /** Bar height in px. */
773
- height?: number;
774
- /** Rule under the bar, as a border primitive token. */
775
- divider?: Border;
776
- /** Title typography token. */
777
- typeface?: Typeface;
778
- /** Horizontal padding, as a spacing token. */
779
- padding?: OptionalSize;
780
- /** Space between bar children, as a spacing token. */
781
- gap?: OptionalSize;
782
- /** Optional elevation shadow token (e.g. 'raised'). */
783
- elevation?: Elevation;
784
- }
785
-
786
- /**
787
- * Horizontal application bar: project leading controls (menu button, logo)
788
- * with the `leading` attribute, actions with `trailing` (pushed to the far
789
- * edge), and either pass `title` or project custom center content. Surface,
790
- * divider, height, typography and spacing all resolve from `appBar` tokens.
791
- * Place it inside your page's `<header>` landmark.
792
- */
793
- declare class UniAppBarComponent extends BaseComponent<UniAppBarOptions> {
794
- /** Bar title; alternatively project your own center content. */
795
- title: _angular_core.InputSignal<string>;
796
- /** Stick the bar to the top of its scroll container. */
797
- sticky: _angular_core.InputSignal<boolean>;
798
- protected readonly className: _angular_core.Signal<string>;
799
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniAppBarComponent, never>;
800
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniAppBarComponent, "uni-app-bar", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; }, {}, never, ["[leading]", "*", "[trailing]"], true, never>;
795
+ interface UniCheckboxOptions {
796
+ size?: string | number;
797
+ borderRadius?: string | number;
798
+ /** Unchecked box background token. */
799
+ boxColor?: ColorKey;
800
+ focusRingGap?: string | number;
801
801
  }
802
802
 
803
- /** Theme-level options for `uni-avatar`, resolved by token name. */
804
- interface UniAvatarOptions {
805
- /** Corner radius token — `max` renders circles; `sharp` themes get squares. */
806
- borderRadius?: Radius;
807
- /** Typeface token for the initials. */
808
- typeface?: Typeface;
809
- /** Symbol shown when there is no image and no name to take initials from. */
810
- fallbackSymbol?: string;
811
- }
812
- /** Theme-level options for `uni-avatar-group`. */
813
- interface UniAvatarGroupOptions {
814
- /** How far stacked avatars overlap, as a spacing token. */
815
- overlap?: OptionalSize;
816
- /** Ring color separating stacked avatars from each other. */
817
- ringColor?: ColorKey;
818
- /** Ring width in px. */
819
- ringWidth?: number;
803
+ declare class UniCheckboxComponent extends BaseComponent<UniCheckboxOptions> implements FormCheckboxControl {
804
+ readonly checked: _angular_core.ModelSignal<boolean>;
805
+ readonly disabled: _angular_core.InputSignal<boolean>;
806
+ readonly touched: _angular_core.ModelSignal<boolean>;
807
+ readonly invalid: _angular_core.InputSignal<boolean>;
808
+ readonly dirty: _angular_core.InputSignal<boolean>;
809
+ /** Synced from required() validators by the Signal Forms [field] directive. */
810
+ readonly required: _angular_core.InputSignal<boolean>;
811
+ /**
812
+ * Id(s) of external element(s) describing this control — typically your
813
+ * app-rendered error message — exposed as aria-describedby.
814
+ */
815
+ readonly ariaDescribedBy: _angular_core.InputSignal<string>;
816
+ readonly label: _angular_core.InputSignal<string>;
817
+ /**
818
+ * Mixed state for "select all"-style parent checkboxes. Cleared
819
+ * automatically on the next user interaction, matching native behavior.
820
+ */
821
+ readonly indeterminate: _angular_core.ModelSignal<boolean>;
822
+ protected readonly showError: _angular_core.Signal<boolean>;
823
+ markAsTouched(): void;
824
+ handleChange(event: Event): void;
825
+ protected readonly checkboxLabel: _angular_core.Signal<string>;
826
+ protected readonly checkboxInput: _angular_core.Signal<string>;
827
+ getThemeColor(token: ColorToken): string;
828
+ /** The content color paired with a variant fill (on-primary, on-warn, …). */
829
+ getOnColor(variant: ColorToken): string;
830
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniCheckboxComponent, never>;
831
+ 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>;
820
832
  }
821
833
 
822
- /**
823
- * Identity avatar with a graceful fallback chain: image → initials from
824
- * `name` → themed symbol. Coloring, radius, typeface and sizes all resolve
825
- * from `avatar` theme tokens; `variant` picks the container palette.
826
- */
827
- declare class UniAvatarComponent extends BaseComponent<UniAvatarOptions> {
828
- /** Image URL; on load error the avatar falls back to initials/symbol. */
829
- src: _angular_core.InputSignal<string>;
830
- /** Person's name: drives the initials and the accessible label. */
831
- name: _angular_core.InputSignal<string>;
832
- /** Verbatim text instead of derived initials (e.g. a group's “+3”). */
833
- text: _angular_core.InputSignal<string>;
834
- protected readonly imageFailed: _angular_core.WritableSignal<boolean>;
835
- protected readonly showImage: _angular_core.Signal<boolean>;
836
- protected readonly initials: _angular_core.Signal<string>;
837
- protected readonly label: _angular_core.Signal<string>;
838
- protected readonly className: _angular_core.Signal<string>;
839
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniAvatarComponent, never>;
840
- 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>;
834
+ /** A commit was refused (no match); the field reverted to the committed label. */
835
+ interface UniComboboxRejection {
836
+ query: string;
841
837
  }
842
-
843
838
  /**
844
- * Overlapping stack of avatars. `max` collapses the overflow into a themed
845
- * “+N” chip (itself a `uni-avatar`). Overlap and separator ring resolve from
846
- * `avatarGroup` theme tokens.
839
+ * Theme options for the `combobox` entry. Field chrome is not duplicated
840
+ * here it comes from `input` via uni-input-box; the list trio matches
841
+ * tagInput/searchInput/timeInput. Glyphs are theme icon primitives rendered
842
+ * by `uni-icon`, so they restyle with the theme's iconography.
847
843
  */
848
- declare class UniAvatarGroupComponent extends BaseComponent<UniAvatarGroupOptions> {
849
- /** Show at most this many avatars; the rest collapse into a “+N” chip. */
850
- max: _angular_core.InputSignal<number>;
851
- private readonly avatars;
852
- protected readonly surplus: _angular_core.Signal<number>;
853
- protected readonly className: _angular_core.Signal<string>;
854
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniAvatarGroupComponent, never>;
855
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniAvatarGroupComponent, "uni-avatar-group", never, { "max": { "alias": "max"; "required": false; "isSignal": true; }; }, {}, ["avatars"], ["*"], true, never>;
856
- }
857
-
858
- type ImagePosition = 'top' | 'bottom' | 'left' | 'right' | 'center' | string;
859
- declare class UniBackgroundComponent {
860
- theme: ThemeService;
861
- image: _angular_core.InputSignal<string>;
862
- imagePosition: _angular_core.InputSignal<string>;
863
- imageSize: _angular_core.InputSignal<string | number>;
864
- height: _angular_core.InputSignal<string | number>;
865
- width: _angular_core.InputSignal<string | number>;
866
- protected readonly className: _angular_core.Signal<string>;
867
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniBackgroundComponent, never>;
868
- 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>;
869
- }
870
-
871
- interface UniBadgeOptions {
872
- borderRadius?: RadiiSize;
873
- }
874
-
875
- declare class UniBadgeComponent extends BaseComponent<UniBadgeOptions> {
876
- color: _angular_core.InputSignal<Variant>;
877
- useVariant: _angular_core.InputSignal<boolean>;
878
- width: _angular_core.InputSignal<number>;
879
- protected readonly className: _angular_core.Signal<string>;
880
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniBadgeComponent, never>;
881
- 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>;
882
- }
883
-
884
- /** One step in the trail. The last item is treated as the current page. */
885
- interface BreadcrumbItem {
886
- label: string;
887
- /** Link target. Omit for SPA routing and handle `itemClicked` instead. */
888
- href?: string;
889
- }
890
- /** Theme-level options for `uni-breadcrumb`, resolved by token name. */
891
- interface UniBreadcrumbOptions {
892
- /** Trail typography token. */
893
- typeface?: Typeface;
894
- /** Link color for ancestor items. */
895
- color?: ColorKey;
896
- /** Color of the current (last) item. */
897
- currentColor?: ColorKey;
898
- /** Material symbol drawn between items. */
899
- separatorSymbol?: string;
900
- /** Space around separators, as a spacing token. */
901
- gap?: OptionalSize;
844
+ interface UniComboboxOptions {
845
+ toggleIcon?: IconName;
846
+ clearIcon?: IconName;
847
+ selectedIcon?: IconName;
848
+ listColor?: ContainerColorToken;
849
+ listShadow?: Shadow;
850
+ listBorderRadius?: Radius;
851
+ /** Active/hover option fill; the on-color pair is derived. Must contrast
852
+ with `listColor` or keyboard navigation turns invisible. */
853
+ activeColor?: ContainerColorToken;
854
+ /** Scroll height in rows the list scrolls past this, never truncates. */
855
+ maxVisibleOptions?: number;
856
+ descriptionColor?: ContentColorToken; /** Named motion primitive for the suggestion popup's open animation.
857
+ Defaults to `popup` — the token `uni-dropdown` uses. */
858
+ motion?: Motion;
902
859
  }
903
860
 
904
861
  /**
905
- * WAI-ARIA breadcrumb: a `nav` landmark wrapping an ordered list; the last
906
- * item is the current page (`aria-current="page"`), separators are decorative.
907
- * Items with `href` render as real links; without one they render as
908
- * link-styled buttons emitting `itemClicked` wire that to your router.
862
+ * Form-bound, closed-set, single-select autocomplete: `FormValueControl<T | null>`
863
+ * over object `Options<T>`, type-to-filter, commit-on-select. Typing produces a
864
+ * draft a filter, never a value; the value changes only when an option
865
+ * commits, `clear()` runs, or the model is written from outside. Select
866
+ * semantics, not search: a real label, a chevron, no magnifier, nothing
867
+ * submits. For short lists with no need to type, prefer `uni-select` — the
868
+ * value contract is identical, so swapping is a template-only change.
909
869
  */
910
- declare class UniBreadcrumbComponent extends BaseComponent<UniBreadcrumbOptions> {
911
- /** The trail, root first; the last item is the current page. */
912
- items: _angular_core.InputSignal<BreadcrumbItem[]>;
913
- /** Landmark label distinguishing this nav from others on the page. */
914
- ariaLabel: _angular_core.InputSignal<string>;
915
- /** Emits the clicked ancestor item (also fires for `href` links). */
916
- itemClicked: _angular_core.OutputEmitterRef<BreadcrumbItem>;
917
- protected readonly className: _angular_core.Signal<string>;
918
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniBreadcrumbComponent, never>;
919
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniBreadcrumbComponent, "uni-breadcrumb", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "itemClicked": "itemClicked"; }, never, never, true, never>;
920
- }
921
-
922
- /** Theme-level options for `uni-text-button`, resolved by token name. */
923
- interface UniButtonOptions {
924
- /**
925
- * Corner radius as a radii token. The default theme uses `max` (pill);
926
- * because this is a token, the theme's radii scale — including generated
927
- * shape languages (`sharp`/`modern`/`playful`) and custom primitives —
928
- * restyles every button without touching component code.
929
- */
930
- borderRadius?: RadiiSize;
870
+ declare class UniComboboxComponent<T> extends BaseComponent<UniComboboxOptions> implements FormValueControl<T | null> {
871
+ readonly value: _angular_core.ModelSignal<T>;
872
+ readonly disabled: _angular_core.InputSignal<boolean>;
873
+ readonly touched: _angular_core.ModelSignal<boolean>;
874
+ readonly invalid: _angular_core.InputSignal<boolean>;
875
+ readonly dirty: _angular_core.InputSignal<boolean>;
876
+ readonly required: _angular_core.InputSignal<boolean>;
877
+ readonly ariaDescribedBy: _angular_core.InputSignal<string>;
878
+ /** Accessible name for the field, e.g. "State"; echoed on the listbox. */
879
+ label: _angular_core.InputSignal<string>;
880
+ placeholder: _angular_core.InputSignal<string>;
881
+ options: _angular_core.InputSignal<Options<T>>;
931
882
  /**
932
- * Label typography as a typeface token. Defaults to the type scale's
933
- * `button` role (family/weight/transform); per-size `fontSize` overrides
934
- * from the theme's `sizes` still apply on top. Point it at any typeface —
935
- * including custom primitives added to the theme's typography.
883
+ * Equality used to match `value` against option values, called as
884
+ * `compareWith(optionValue, value)`. Defaults to reference equality, which
885
+ * never matches an object value rebuilt from elsewhere (e.g. a saved record
886
+ * against options from a fresh fetch) pass a key comparison like
887
+ * `(a, b) => a?.id === b?.id` for object values.
936
888
  */
937
- typeface?: Typeface;
938
- }
939
-
940
- declare class RippleDirective {
941
- private renderer;
942
- el: ElementRef<any>;
943
- hostEl: any;
944
- constructor();
945
- onClick(e: MouseEvent): void;
946
- rippleClass: string;
947
- animateClass: string;
948
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<RippleDirective, never>;
949
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RippleDirective, "[uniRipple]", never, {}, {}, never, never, true, never>;
950
- }
951
-
952
- declare class UniButtonComponent extends BaseComponent<UniButtonOptions> {
953
- readonly disable: _angular_core.InputSignal<boolean>;
954
- readonly loading: _angular_core.InputSignal<boolean>;
955
- readonly fullWidth: _angular_core.InputSignal<boolean>;
956
- readonly symbolLeft: _angular_core.InputSignal<string>;
957
- readonly symbolRight: _angular_core.InputSignal<string>;
958
- spinnerBox: string;
959
- protected readonly className: _angular_core.Signal<string>;
960
- symbolSize: _angular_core.Signal<number>;
961
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniButtonComponent, never>;
962
- 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: {}; }]>;
963
- }
964
-
965
- declare class UniButtonGroupComponent {
966
- private themeService;
889
+ compareWith: _angular_core.InputSignal<(optionValue: T, value: T) => boolean>;
890
+ width: _angular_core.InputSignal<string | number>;
891
+ /** Show a ✕ while a value is set; an emptied field on blur also clears. */
892
+ clearable: _angular_core.InputSignal<boolean>;
893
+ /** Blur commits an exact-match draft; a non-matching draft reverts. */
894
+ commitOnBlur: _angular_core.InputSignal<boolean>;
895
+ /** i18n-able empty row, also announced when a filter matches nothing. */
896
+ emptyText: _angular_core.InputSignal<string>;
897
+ /** `false` renders `options` verbatim; narrow them app-side from `query`. */
898
+ filterLocally: _angular_core.InputSignal<boolean>;
899
+ /** Filter predicate; default is locale-lowercased label-contains. */
900
+ filterWith: _angular_core.InputSignal<(option: Option<T>, query: string) => boolean>;
901
+ debounceTime: _angular_core.InputSignal<number>;
902
+ /** Debounced draft text, for async option lists. */
903
+ query: _angular_core.OutputEmitterRef<string>;
904
+ /** An option committed. */
905
+ selected: _angular_core.OutputEmitterRef<Option<T>>;
906
+ cleared: _angular_core.OutputEmitterRef<void>;
907
+ /** A commit was refused (no match); the field reverted. */
908
+ rejected: _angular_core.OutputEmitterRef<UniComboboxRejection>;
909
+ private readonly host;
910
+ private readonly inputRef;
911
+ private readonly listRef;
912
+ /** Cancelled on destroy — a late tick would emit on a destroyed OutputRef. */
913
+ private queryTimer?;
914
+ /** Ties the popup to the field so the browser tracks it in the top layer. */
915
+ private readonly anchor;
916
+ /** `manual` where the top layer is usable, else null — see the popup helper. */
917
+ protected readonly popupAttr: "manual";
918
+ constructor();
919
+ protected readonly srOnly: string;
920
+ /** Commits, clears and refusals are otherwise silent to a screen reader. */
921
+ protected readonly announcer: _uni_design_system_uni_angular.Announcer;
922
+ /** null → the field shows the committed label; a string is an uncommitted draft. */
923
+ protected readonly draft: _angular_core.WritableSignal<string>;
924
+ /**
925
+ * Popup visibility. Component-owned rather than `list.open()` — the shared
926
+ * signal gates on `count() > 0`, which would hide the "No matches" row and
927
+ * misreport `aria-expanded` over an empty filter.
928
+ */
929
+ protected readonly popupOpen: _angular_core.WritableSignal<boolean>;
930
+ /** Index in options() of the option matching value(), else -1. */
931
+ protected readonly committedIndex: _angular_core.Signal<number>;
932
+ /** A value with no matching option renders '' but is preserved — options may
933
+ still be loading; the field self-heals when they arrive. */
934
+ protected readonly committedLabel: _angular_core.Signal<string>;
935
+ protected readonly displayValue: _angular_core.Signal<string>;
936
+ /** Indices into options() surviving the filter. The draft filters; the
937
+ committed label does not — reopening always shows the full set. */
938
+ protected readonly filteredIndices: _angular_core.Signal<number[]>;
939
+ /** Shared combobox bookkeeping, in filtered-list positions — the fourth
940
+ consumer of the contract behind search-input, tag-input and time-input. */
941
+ protected readonly list: _uni_design_system_uni_angular.ListboxNavigation;
942
+ protected readonly showError: _angular_core.Signal<boolean>;
943
+ private commit;
944
+ protected clear(): void;
945
+ /**
946
+ * Draft resolution, used by Enter, Tab and blur:
947
+ * 1. an active option in the list → commit it;
948
+ * 2. else a unique exact label match (locale-case-insensitive) → commit it;
949
+ * 3. Enter only: the filter narrowed to exactly one enabled option → commit it
950
+ * (on Enter the user can see the single candidate; on blur they're gone,
951
+ * and committing a value they never saw confirmed is how forms grow
952
+ * mystery data);
953
+ * 4. else the caller keeps the list open (Enter) or reverts (Tab/blur).
954
+ */
955
+ private resolveDraft;
956
+ private revertDraft;
957
+ private reject;
958
+ protected onKeydown(event: KeyboardEvent): void;
959
+ protected onInput(): void;
960
+ /** Click-to-browse: pointer users get the select affordance. Focus alone
961
+ never opens — Tab-through forms must not spray popups. */
962
+ protected onFieldClick(): void;
963
+ protected onToggleMousedown(event: MouseEvent): void;
964
+ protected onOptionClick(optIndex: number): void;
965
+ protected onFocusOut(event: FocusEvent): void;
966
+ /** Filtered position of the committed option when visible and enabled, else -1. */
967
+ private committedFilteredPos;
968
+ private openList;
969
+ private closeList;
970
+ private scrollToActive;
971
+ private setFieldText;
967
972
  protected readonly className: _angular_core.Signal<string>;
968
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniButtonGroupComponent, never>;
969
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniButtonGroupComponent, "uni-button-group", never, {}, {}, never, ["*"], true, never>;
970
- }
971
-
972
- interface ButtonGroupConfig {
973
- tooltipPlacement?: Placement;
974
- buttonSize: Size;
975
- buttons: ButtonGroupItem[];
976
- }
977
- interface ButtonGroupItem {
978
- symbolName: string;
979
- selected?: boolean;
980
- tooltip?: string;
981
- action?: (selectedState?: boolean) => boolean | void;
982
- toggle?: WritableSignal<boolean>;
973
+ protected readonly rowClass: _angular_core.Signal<string>;
974
+ protected readonly inputClass: _angular_core.Signal<string>;
975
+ /** Pointer-only affordance: keyboard already has ArrowDown, and the input
976
+ itself announces expanded state. */
977
+ protected readonly toggleClass: _angular_core.Signal<string>;
978
+ protected readonly listClass: _angular_core.Signal<string>;
979
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniComboboxComponent<any>, never>;
980
+ 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>;
983
981
  }
984
982
 
985
983
  type UniCalendarMode = 'single' | 'range';
@@ -1018,102 +1016,1487 @@ interface UniCalendarOptions {
1018
1016
  todayStyle?: 'outline' | 'dot';
1019
1017
  }
1020
1018
 
1021
- /** One rendered day cell precomputed so the template stays declarative. */
1022
- interface CalendarCell {
1023
- date: UniDate;
1024
- day: number;
1025
- outside: boolean;
1026
- disabled: boolean;
1027
- today: boolean;
1028
- selected: boolean;
1029
- inBand: boolean;
1030
- tabIndex: number;
1031
- ariaLabel: string;
1032
- markers: UniCalendarMarker[];
1033
- cellClass: string;
1034
- dayClass: string;
1019
+ /** Why typed text did not become a date. The raw text stays in the field. */
1020
+ interface UniDateInputRejection {
1021
+ raw: string;
1022
+ reason: 'unparseable' | 'out-of-range' | 'disabled';
1035
1023
  }
1036
1024
  /**
1037
- * Inline month calendar: single-date or start–end range selection, day
1038
- * markers (availability dots), min/max fences and disabled dates. One tab
1039
- * stop with a roving-tabindex `role="grid"`; every day is a real button
1040
- * named with its full date. Values are plain ISO strings (`'YYYY-MM-DD'`),
1041
- * never `Date` objects, so bindings are timezone-free and serializable.
1042
- * Selection and today colours come from the theme's `primary` role pair;
1043
- * geometry and glyphs come from the `calendar` theme entry.
1025
+ * Theme options for the `dateInput` entry. Field chrome is not duplicated
1026
+ * here it comes from `input` via uni-input-box; these style the popup
1027
+ * affordance and panel only.
1044
1028
  */
1045
- declare class UniCalendarComponent extends BaseComponent<UniCalendarOptions> implements FormValueControl<UniCalendarValue> {
1046
- readonly value: _angular_core.ModelSignal<UniCalendarValue>;
1029
+ interface UniDateInputOptions {
1030
+ toggleSymbol?: string;
1031
+ popupShadow?: Shadow;
1032
+ popupBorderRadius?: Radius;
1033
+ popupColor?: ContainerColorToken;
1034
+ }
1035
+
1036
+ /**
1037
+ * Date field with free-typed parsing and a popup calendar. Type `aug 20`,
1038
+ * `8/20/2026` or `2026-08-20`, or pick from the grid — the form gets the
1039
+ * same canonical `'YYYY-MM-DD'` string either way. Parsing is `Intl`-driven
1040
+ * (locale digit order and month names, never hardcoded); unreadable text
1041
+ * stays in the field, flagged, with a `rejected` event. The popup is a
1042
+ * native popover hosting the same `uni-calendar` an app could render inline.
1043
+ */
1044
+ declare class UniDateInputComponent extends BaseComponent<UniDateInputOptions> implements FormValueControl<UniDate | undefined> {
1045
+ readonly value: _angular_core.ModelSignal<string>;
1047
1046
  readonly disabled: _angular_core.InputSignal<boolean>;
1048
1047
  readonly touched: _angular_core.ModelSignal<boolean>;
1049
1048
  readonly invalid: _angular_core.InputSignal<boolean>;
1050
1049
  readonly dirty: _angular_core.InputSignal<boolean>;
1051
1050
  readonly required: _angular_core.InputSignal<boolean>;
1052
1051
  readonly ariaDescribedBy: _angular_core.InputSignal<string>;
1053
- /** `'single'` reads/writes a `UniDate`; `'range'` a `UniDateRange`. */
1054
- mode: _angular_core.InputSignal<UniCalendarMode>;
1055
- /** Shown month, `'YYYY-MM'` two-way, so an app can drive "jump to June". */
1056
- month: _angular_core.ModelSignal<string>;
1057
- /** Earliest selectable date (inclusive). */
1052
+ /** Accessible name for the field, e.g. "Appointment date". */
1053
+ label: _angular_core.InputSignal<string>;
1054
+ /** Defaults to the locale's digit pattern, e.g. `MM/DD/YYYY`. */
1055
+ placeholder: _angular_core.InputSignal<string>;
1056
+ /** How the committed value renders, e.g. `{ dateStyle: 'long' }`. */
1057
+ displayFormat: _angular_core.InputSignal<Intl.DateTimeFormatOptions>;
1058
+ /** BCP 47 tag; defaults to the document language, then the browser's. */
1059
+ locale: _angular_core.InputSignal<string>;
1060
+ commitOnBlur: _angular_core.InputSignal<boolean>;
1061
+ /** Custom parser, replacing the built-in ISO/locale/month-name parsing. */
1062
+ parse: _angular_core.InputSignal<(raw: string, locale: string) => UniDate | null>;
1063
+ /** Renders without its own input-box chrome, for composers like uni-date-time-input. */
1064
+ embedded: _angular_core.InputSignal<boolean>;
1058
1065
  minDate: _angular_core.InputSignal<string>;
1059
- /** Latest selectable date (inclusive). */
1060
1066
  maxDate: _angular_core.InputSignal<string>;
1061
- /** Blocked days: a list of dates, or a predicate. */
1062
1067
  disabledDates: _angular_core.InputSignal<string[] | ((date: UniDate) => boolean)>;
1063
- /** Availability dots; `label` extends the day's accessible name. */
1064
1068
  markers: _angular_core.InputSignal<UniCalendarMarker[]>;
1065
- /** BCP 47 tag; defaults to the document language, then the browser's. */
1066
- locale: _angular_core.InputSignal<string>;
1067
- /** First day of week, 0 = Sunday; defaults from the locale's week info. */
1068
1069
  weekStart: _angular_core.InputSignal<0 | 1 | 2 | 3 | 4 | 6 | 5>;
1069
- /** Names the grid when it stands alone (otherwise the heading names it). */
1070
- ariaLabel: _angular_core.InputSignal<string>;
1071
- /** Day geometry token; `sm`/`md`/`lg` map to the theme's `calendar` sizes. */
1072
- size: _angular_core.InputSignal<Size>;
1073
- /** Each committed day, including both ends of a range. */
1074
- selected: _angular_core.OutputEmitterRef<string>;
1070
+ /** Popup shown. */
1071
+ opened: _angular_core.OutputEmitterRef<void>;
1072
+ /** Popup hidden. */
1073
+ closed: _angular_core.OutputEmitterRef<void>;
1074
+ /** A typed commit was refused; the raw text stays in the field. */
1075
+ rejected: _angular_core.OutputEmitterRef<UniDateInputRejection>;
1075
1076
  private readonly host;
1076
- protected readonly headingId: string;
1077
+ private readonly inputRef;
1078
+ private readonly toggleRef;
1079
+ private readonly popupRef;
1080
+ private readonly dropdown;
1081
+ private readonly calendar;
1077
1082
  protected readonly srOnly: string;
1078
- /** Pending range startset by the first commit, cleared by the second. */
1079
- protected readonly pendingStart: _angular_core.WritableSignal<string>;
1080
- /** Hover/focus candidate painting the preview band while a range is pending. */
1081
- protected readonly previewDate: _angular_core.WritableSignal<string>;
1082
- /** Live-region text; selections are otherwise silent for a screen reader. */
1083
+ /** A refused commitstyles the field and sets aria-invalid until edited. */
1084
+ protected readonly draftInvalid: _angular_core.WritableSignal<boolean>;
1083
1085
  /** Commits, clears and refusals are otherwise silent to a screen reader. */
1084
1086
  protected readonly announcer: _uni_design_system_uni_angular.Announcer;
1087
+ protected readonly toggleElement: _angular_core.Signal<any>;
1088
+ protected readonly popupOpen: _angular_core.Signal<boolean>;
1085
1089
  protected readonly resolvedLocale: _angular_core.Signal<string>;
1086
- protected readonly resolvedWeekStart: _angular_core.Signal<number>;
1087
- /**
1088
- * The month on screen: the `month` model, else the value's month, else
1089
- * today's. Falsy guards on purpose: `''` — the only typeable empty for a
1090
- * string-typed model — counts as unset, or it would reach the month math
1091
- * and blow up the grid and heading.
1092
- */
1093
- protected readonly viewMonth: _angular_core.Signal<string>;
1094
- private readonly anchorDate;
1095
- /**
1096
- * The roving-tabindex day. Re-derives when the view or value changes
1097
- * (selected day in view → today in view → first enabled day); keyboard
1098
- * navigation writes it directly.
1099
- */
1100
- protected readonly focusedDate: _angular_core.WritableSignal<string>;
1090
+ protected readonly displayText: _angular_core.Signal<string>;
1091
+ protected readonly resolvedPlaceholder: _angular_core.Signal<string>;
1101
1092
  protected readonly showError: _angular_core.Signal<boolean>;
1102
- protected readonly heading: _angular_core.Signal<string>;
1103
- protected readonly weekdays: _angular_core.Signal<_uni_design_system_uni_angular.UniWeekdayName[]>;
1104
- private readonly disabledDateSet;
1105
- private readonly markersByDate;
1106
- /** The committed range, or the pending preview band. */
1107
- private readonly rangeBand;
1108
- protected isDayDisabled(date: UniDate): boolean;
1109
- private isSelected;
1110
- /** The full render model: one precomputed cell per grid position. */
1111
- protected readonly gridWeeks: _angular_core.Signal<CalendarCell[][]>;
1112
- protected select(date: UniDate): void;
1113
- private cancelPending;
1114
- protected onNav(direction: 1 | -1): void;
1115
- private setViewMonth;
1116
- /**
1093
+ protected readonly toggleLabel: _angular_core.Signal<string>;
1094
+ private fullDate;
1095
+ private isDayBlocked;
1096
+ protected setValue(date: UniDate | undefined, silent?: boolean): void;
1097
+ private refuse;
1098
+ protected commit(raw: string): boolean;
1099
+ /** Step a committed value ±1 day, skipping blocked days, stopping at fences. */
1100
+ private step;
1101
+ protected onInputKeydown(event: KeyboardEvent): void;
1102
+ protected onInput(): void;
1103
+ protected onFocusOut(event: FocusEvent): void;
1104
+ protected openPopup(): void;
1105
+ protected closePopup(): void;
1106
+ protected onPopupShowing(): void;
1107
+ protected onPopupHiding(): void;
1108
+ protected onCalendarPick(date: UniDate): void;
1109
+ /** The popup is a focus-holding dialog: Tab cycles inside it (APG pattern). */
1110
+ protected onPopupKeydown(event: KeyboardEvent): void;
1111
+ private setFieldText;
1112
+ protected readonly className: _angular_core.Signal<string>;
1113
+ protected readonly rowClass: _angular_core.Signal<string>;
1114
+ protected readonly inputClass: _angular_core.Signal<string>;
1115
+ protected readonly toggleWrapClass: _angular_core.Signal<string>;
1116
+ /** Embedded mode: the composer owns the box; keep only the flex row. */
1117
+ protected readonly embeddedClass: _angular_core.Signal<string>;
1118
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniDateInputComponent, never>;
1119
+ 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>;
1120
+ }
1121
+
1122
+ /**
1123
+ * Theme options for the `dateTimeInput` entry. Field chrome comes from
1124
+ * `input` via the single shared uni-input-box; these style the seam between
1125
+ * the two parts.
1126
+ */
1127
+ interface UniDateTimeInputOptions {
1128
+ /** Space between the date part, the divider, and the time part. */
1129
+ partGap?: NullableSize;
1130
+ dividerColor?: ColorToken;
1131
+ }
1132
+
1133
+ /**
1134
+ * One field for a date and a time: a thin composer seating a uni-date-input
1135
+ * and a uni-time-input in one input-box chrome under one label, yielding one
1136
+ * combined `'YYYY-MM-DDTHH:mm'` value. The value emits only when both parts
1137
+ * are set — a time without a day is not an answer — and clearing the date
1138
+ * clears it. With `slotsFor`, the time part stays disabled until a day is
1139
+ * chosen and offers exactly that day's slots: the scheduling flow in one
1140
+ * attribute. Two honest tab stops (it is two questions); apps needing a
1141
+ * different arrangement compose the primitives directly.
1142
+ */
1143
+ declare class UniDateTimeInputComponent extends BaseComponent<UniDateTimeInputOptions> implements FormValueControl<UniDateTime | undefined> {
1144
+ readonly value: _angular_core.ModelSignal<string>;
1145
+ readonly disabled: _angular_core.InputSignal<boolean>;
1146
+ readonly touched: _angular_core.ModelSignal<boolean>;
1147
+ readonly invalid: _angular_core.InputSignal<boolean>;
1148
+ readonly dirty: _angular_core.InputSignal<boolean>;
1149
+ readonly required: _angular_core.InputSignal<boolean>;
1150
+ readonly ariaDescribedBy: _angular_core.InputSignal<string>;
1151
+ /** Names the group; the parts are announced as "Date" and "Time" under it. */
1152
+ label: _angular_core.InputSignal<string>;
1153
+ /** Earliest allowed moment; the date and time fences are split from it. */
1154
+ minDateTime: _angular_core.InputSignal<string>;
1155
+ /** Latest allowed moment; the date and time fences are split from it. */
1156
+ maxDateTime: _angular_core.InputSignal<string>;
1157
+ disabledDates: _angular_core.InputSignal<string[] | ((date: UniDate) => boolean)>;
1158
+ markers: _angular_core.InputSignal<UniCalendarMarker[]>;
1159
+ /** Fixed time choices; superseded per-day by `slotsFor` when that is set. */
1160
+ slots: _angular_core.InputSignal<string[]>;
1161
+ minuteStep: _angular_core.InputSignal<number>;
1162
+ hour12: _angular_core.InputSignal<boolean>;
1163
+ weekStart: _angular_core.InputSignal<0 | 1 | 2 | 3 | 4 | 6 | 5>;
1164
+ locale: _angular_core.InputSignal<string>;
1165
+ /** Scheduling: the day's available times. Gates the time part on a date. */
1166
+ slotsFor: _angular_core.InputSignal<(date: UniDate) => UniTime[]>;
1167
+ private readonly host;
1168
+ /**
1169
+ * The two part-values. An external `value` write re-derives both; an
1170
+ * internal partial state (a date without a time round-trips through
1171
+ * `undefined`) must not be wiped by its own echo.
1172
+ */
1173
+ private readonly parts;
1174
+ protected readonly dateValue: _angular_core.Signal<string>;
1175
+ protected readonly timeValue: _angular_core.Signal<string>;
1176
+ protected readonly showError: _angular_core.Signal<boolean>;
1177
+ private readonly minParts;
1178
+ private readonly maxParts;
1179
+ protected readonly dateMin: _angular_core.Signal<string>;
1180
+ protected readonly dateMax: _angular_core.Signal<string>;
1181
+ protected readonly timeMin: _angular_core.Signal<string>;
1182
+ protected readonly timeMax: _angular_core.Signal<string>;
1183
+ /** The chosen day's slots when `slotsFor` is set, else the fixed list. */
1184
+ protected readonly effectiveSlots: _angular_core.Signal<string[]>;
1185
+ protected readonly timeDisabled: _angular_core.Signal<boolean>;
1186
+ protected onDatePartChange(date: UniDate | undefined): void;
1187
+ protected onTimePartChange(time: UniTime | undefined): void;
1188
+ private setParts;
1189
+ protected onHostFocusOut(event: FocusEvent): void;
1190
+ protected readonly className: _angular_core.Signal<string>;
1191
+ protected readonly groupClass: _angular_core.Signal<string>;
1192
+ protected readonly datePartClass: _angular_core.Signal<string>;
1193
+ protected readonly timePartClass: _angular_core.Signal<string>;
1194
+ protected readonly dividerClass: _angular_core.Signal<string>;
1195
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniDateTimeInputComponent, never>;
1196
+ 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>;
1197
+ }
1198
+
1199
+ interface UniInputBoxOptions {
1200
+ color: ContainerColorToken;
1201
+ disabledColor: ContainerColorToken;
1202
+ errorColor: ContainerColorToken;
1203
+ border: Border;
1204
+ errorBorder: Border;
1205
+ borderRadius: Radius;
1206
+ shadow?: Shadow;
1207
+ errorShadow?: Shadow;
1208
+ height?: string | number;
1209
+ paddingLeft: OptionalSize;
1210
+ typeface?: Typeface;
1211
+ textColor: ColorKey;
1212
+ disabledTextColor: ColorKey;
1213
+ focusOutline: string;
1214
+ focusOutlineOffset: number;
1215
+ /** Border swapped in while an inner control has focus (default: keep `border`). */
1216
+ focusBorder?: Border;
1217
+ /** Ring shown while focused, e.g. a soft `0 0 0 3px` spread shadow. */
1218
+ focusShadow?: Shadow;
1219
+ /** Background swapped in while focused (default: keep `color`). */
1220
+ focusColor?: ContainerColorToken;
1221
+ }
1222
+
1223
+ declare class UniInputBoxComponent extends BaseComponent<UniInputBoxOptions> {
1224
+ protected readonly className: string;
1225
+ disabled: _angular_core.InputSignal<boolean>;
1226
+ error: _angular_core.InputSignal<boolean>;
1227
+ minWidth: _angular_core.InputSignal<string>;
1228
+ /** Override the themed field height, e.g. `'auto'` for multi-line fields. */
1229
+ height: _angular_core.InputSignal<string | number>;
1230
+ width: _angular_core.InputSignal<string | number>;
1231
+ fullWidth: _angular_core.InputSignal<boolean>;
1232
+ grow: _angular_core.InputSignal<number>;
1233
+ protected readonly color: _angular_core.Signal<_uni_design_system_uni_core.ContainerColorToken>;
1234
+ protected readonly border: _angular_core.Signal<string>;
1235
+ protected readonly shadow: _angular_core.Signal<string>;
1236
+ protected readonly inputBoxClass: _angular_core.Signal<string>;
1237
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniInputBoxComponent, never>;
1238
+ 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; }; }, {}, never, ["*"], true, never>;
1239
+ }
1240
+
1241
+ /**
1242
+ * The text-like native input types `uni-input` supports.
1243
+ *
1244
+ * Deliberately not the full native list: `checkbox`, `radio`, `file`, `range`,
1245
+ * `color`, `submit` and `hidden` are not text-like — they break both the
1246
+ * `uni-input-box` chrome and the `FormValueControl<string>` value contract —
1247
+ * and `date` / `time` / `datetime-local` have dedicated components
1248
+ * (`uni-date-input`, `uni-time-input`, `uni-date-time-input`) that handle
1249
+ * locale parsing and keyboard interaction properly.
1250
+ */
1251
+ type UniInputType = 'text' | 'email' | 'password' | 'search' | 'tel' | 'url' | 'number';
1252
+ /** Values for the native `inputmode` hint, which picks the on-screen keyboard. */
1253
+ type UniInputMode = 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url';
1254
+
1255
+ declare class UniInputComponent implements FormValueControl<string> {
1256
+ readonly value: _angular_core.ModelSignal<string>;
1257
+ readonly disabled: _angular_core.InputSignal<boolean>;
1258
+ readonly touched: _angular_core.ModelSignal<boolean>;
1259
+ readonly invalid: _angular_core.InputSignal<boolean>;
1260
+ readonly dirty: _angular_core.InputSignal<boolean>;
1261
+ /** Synced from required() validators by the Signal Forms [field] directive. */
1262
+ readonly required: _angular_core.InputSignal<boolean>;
1263
+ /**
1264
+ * Id(s) of external element(s) describing this control — typically your
1265
+ * app-rendered error message — exposed as aria-describedby.
1266
+ */
1267
+ readonly ariaDescribedBy: _angular_core.InputSignal<string>;
1268
+ label: _angular_core.InputSignal<string>;
1269
+ placeholder: _angular_core.InputSignal<string>;
1270
+ /**
1271
+ * Native input type. Text-like types only — `date`/`time` have dedicated
1272
+ * components, and non-text types break the input chrome and the string value.
1273
+ */
1274
+ type: _angular_core.InputSignal<UniInputType>;
1275
+ readonly readonly: _angular_core.InputSignal<boolean>;
1276
+ readonly name: _angular_core.InputSignal<string>;
1277
+ readonly min: _angular_core.InputSignal<number>;
1278
+ readonly max: _angular_core.InputSignal<number>;
1279
+ readonly minLength: _angular_core.InputSignal<number>;
1280
+ readonly maxLength: _angular_core.InputSignal<number>;
1281
+ /**
1282
+ * Patterns the value must match — all of them, per Signal Forms. The native
1283
+ * `pattern` attribute can only express one, so it is reflected only when
1284
+ * there is exactly one; Signal Forms validates the rest either way.
1285
+ */
1286
+ readonly pattern: _angular_core.InputSignal<readonly RegExp[]>;
1287
+ /** Granularity for `type="number"`, e.g. `0.01` or `'any'`. */
1288
+ step: _angular_core.InputSignal<string | number>;
1289
+ /** Autofill hint, e.g. `email`, `current-password`, `off`. */
1290
+ autocomplete: _angular_core.InputSignal<string>;
1291
+ /** On-screen keyboard hint; defaults to whatever `type` implies. */
1292
+ inputMode: _angular_core.InputSignal<UniInputMode>;
1293
+ /** Id of a `<datalist>` supplying suggestions. */
1294
+ list: _angular_core.InputSignal<string>;
1295
+ spellcheck: _angular_core.InputSignal<boolean>;
1296
+ /** Reflected only when unambiguous — see `pattern`. */
1297
+ protected readonly nativePattern: _angular_core.Signal<string>;
1298
+ width: _angular_core.InputSignal<string | number>;
1299
+ fullWidth: _angular_core.InputSignal<boolean>;
1300
+ grow: _angular_core.InputSignal<number>;
1301
+ protected readonly showError: _angular_core.Signal<boolean>;
1302
+ markAsTouched(): void;
1303
+ handleInput(event: Event): void;
1304
+ inputClass: string;
1305
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniInputComponent, never>;
1306
+ 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>;
1307
+ }
1308
+
1309
+ /**
1310
+ * The base layout primitive, applied as an attribute to any element so
1311
+ * semantics stay yours: `<main box-layout [grow]="1" padding="md">`. It is a
1312
+ * directive, so it composes freely — with another layout attribute
1313
+ * (`<div stack-layout uni-text="body-1-long">`) and with a component's own host
1314
+ * element (`<uni-card box-layout padding="lg">`); Angular merges the host
1315
+ * `class` bindings rather than letting one win.
1316
+ *
1317
+ * Sizing convention (height/width/min/max/inset): a **number is px and needs
1318
+ * a binding** — `[height]="420"`; a **plain attribute is a CSS length
1319
+ * string** — `height="420px"`. Spacing/radius/color inputs take theme tokens.
1320
+ */
1321
+ declare class UniBoxDirective {
1322
+ theme: ThemeService;
1323
+ /**
1324
+ * A container color *pair*: the named surface plus its paired on-color, so a
1325
+ * box and its contents stay legible together.
1326
+ *
1327
+ * Named `containerColor`, not `color`, because it is not the CSS `color`
1328
+ * property — `uni-text` owns that name, and it maps to it directly. The two
1329
+ * directives share elements routinely (`<div row-layout uni-text>`), and one
1330
+ * `color` binding would feed both: the box would paint the surface and the
1331
+ * text would take the same token, rendering ink on identical ink.
1332
+ */
1333
+ containerColor: _angular_core.InputSignal<ContainerColorToken>;
1334
+ backgroundColor: _angular_core.InputSignal<string>;
1335
+ borderRadius: _angular_core.InputSignal<string>;
1336
+ borderRadiusLeft: _angular_core.InputSignal<string>;
1337
+ borderRadiusRight: _angular_core.InputSignal<string>;
1338
+ borderRadiusTop: _angular_core.InputSignal<string>;
1339
+ borderRadiusBottom: _angular_core.InputSignal<string>;
1340
+ padding: _angular_core.InputSignal<OptionalSize>;
1341
+ paddingHorizontal: _angular_core.InputSignal<OptionalSize>;
1342
+ paddingVertical: _angular_core.InputSignal<OptionalSize>;
1343
+ paddingLeft: _angular_core.InputSignal<OptionalSize>;
1344
+ paddingRight: _angular_core.InputSignal<OptionalSize>;
1345
+ paddingTop: _angular_core.InputSignal<OptionalSize>;
1346
+ paddingBottom: _angular_core.InputSignal<OptionalSize>;
1347
+ border: _angular_core.InputSignal<string>;
1348
+ borderTop: _angular_core.InputSignal<string>;
1349
+ borderBottom: _angular_core.InputSignal<string>;
1350
+ borderLeft: _angular_core.InputSignal<string>;
1351
+ borderRight: _angular_core.InputSignal<string>;
1352
+ dashBorder: _angular_core.InputSignal<boolean>;
1353
+ alignSelf: _angular_core.InputSignal<OptionalAlignSelf>;
1354
+ alignItems: _angular_core.InputSignal<OptionalAlignItems>;
1355
+ alignContent: _angular_core.InputSignal<OptionalAlignContent>;
1356
+ justifyContent: _angular_core.InputSignal<OptionalJustifyContent>;
1357
+ grow: _angular_core.InputSignal<number>;
1358
+ /**
1359
+ * The `flex` shorthand. `[flex]="1"` is `flex: 1` — grow, shrink and a zero
1360
+ * basis — which `grow` alone cannot express, since it leaves
1361
+ * `flex-basis: auto`. Wins over `grow` when both are set.
1362
+ */
1363
+ flex: _angular_core.InputSignal<string | number>;
1364
+ shrink: _angular_core.InputSignal<number>;
1365
+ basis: _angular_core.InputSignal<string | number>;
1366
+ /**
1367
+ * Inline-axis margin. `marginInline="auto"` centers a `maxWidth` container —
1368
+ * the one thing flex centering cannot do without an extra wrapper. Only the
1369
+ * inline axis is exposed: block margins collapse and fight `gap`, which is
1370
+ * why the primitives carry no margin otherwise.
1371
+ */
1372
+ marginInline: _angular_core.InputSignal<"auto" | NullableSize>;
1373
+ display: _angular_core.InputSignal<OptionalDisplay>;
1374
+ position: _angular_core.InputSignal<OptionalPosition>;
1375
+ inset: _angular_core.InputSignal<string | number>;
1376
+ /** Number = px via binding (`[height]="420"`); string = CSS length (`height="420px"`). */
1377
+ height: _angular_core.InputSignal<string | number>;
1378
+ minHeight: _angular_core.InputSignal<string | number>;
1379
+ maxHeight: _angular_core.InputSignal<string | number>;
1380
+ /** Number = px via binding (`[width]="420"`); string = CSS length (`width="50%"`). */
1381
+ width: _angular_core.InputSignal<string | number>;
1382
+ minWidth: _angular_core.InputSignal<string | number>;
1383
+ maxWidth: _angular_core.InputSignal<string | number>;
1384
+ ignoreDir: _angular_core.InputSignal<boolean>;
1385
+ gridArea: _angular_core.InputSignal<string>;
1386
+ gridColumn: _angular_core.InputSignal<string>;
1387
+ gridRow: _angular_core.InputSignal<string>;
1388
+ overflow: _angular_core.InputSignal<OptionalOverflow>;
1389
+ shadow: _angular_core.InputSignal<string>;
1390
+ gap: _angular_core.InputSignal<OptionalSize>;
1391
+ fullWidth: _angular_core.InputSignal<boolean>;
1392
+ fullHeight: _angular_core.InputSignal<boolean>;
1393
+ flexDirection: _angular_core.InputSignal<OptionalFlexDirection>;
1394
+ textAlign: _angular_core.InputSignal<OptionalTextAlign>;
1395
+ wrapItems: _angular_core.InputSignal<OptionalWrap>;
1396
+ zIndex: _angular_core.InputSignal<ZIndexableElements>;
1397
+ protected readonly boxClassName: _angular_core.Signal<string>;
1398
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniBoxDirective, never>;
1399
+ 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>;
1400
+ }
1401
+
1402
+ declare class UniCenterDirective extends UniBoxDirective {
1403
+ display: _angular_core.InputSignal<OptionalDisplay>;
1404
+ justifyContent: _angular_core.InputSignal<OptionalJustifyContent>;
1405
+ alignItems: _angular_core.InputSignal<OptionalAlignItems>;
1406
+ constructor();
1407
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniCenterDirective, never>;
1408
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UniCenterDirective, "[uni-center-layout], [center-layout]", never, { "display": { "alias": "display"; "required": false; "isSignal": true; }; "justifyContent": { "alias": "justifyContent"; "required": false; "isSignal": true; }; "alignItems": { "alias": "alignItems"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1409
+ }
1410
+
1411
+ declare class UniGridAreaDirective {
1412
+ area: _angular_core.InputSignal<string>;
1413
+ protected readonly className: _angular_core.Signal<string>;
1414
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniGridAreaDirective, never>;
1415
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UniGridAreaDirective, "[uni-grid-area-layout], [grid-area-layout]", never, { "area": { "alias": "area"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
1416
+ }
1417
+
1418
+ declare class UniGridDirective extends UniBoxDirective {
1419
+ display: _angular_core.InputSignal<OptionalDisplay>;
1420
+ templateAreas: _angular_core.InputSignal<string>;
1421
+ templateColumns: _angular_core.InputSignal<string>;
1422
+ templateRows: _angular_core.InputSignal<string>;
1423
+ outline: _angular_core.InputSignal<Thickness>;
1424
+ outlineColor: _angular_core.InputSignal<Variant>;
1425
+ protected readonly gridClassName: _angular_core.Signal<string>;
1426
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniGridDirective, never>;
1427
+ 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>;
1428
+ }
1429
+
1430
+ declare class UniRowDirective extends UniBoxDirective {
1431
+ display: _angular_core.InputSignal<OptionalDisplay>;
1432
+ flexDirection: _angular_core.InputSignal<OptionalFlexDirection>;
1433
+ /**
1434
+ * Defaults to `fit-content` (guards content collapse). Set `[minWidth]="0"`
1435
+ * when the row must shrink inside a constrained flex parent (scroll or
1436
+ * text truncation containment).
1437
+ */
1438
+ minWidth: _angular_core.InputSignal<string | number>;
1439
+ constructor();
1440
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniRowDirective, never>;
1441
+ 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>;
1442
+ }
1443
+
1444
+ declare class UniStackDirective extends UniBoxDirective {
1445
+ display: _angular_core.InputSignal<OptionalDisplay>;
1446
+ flexDirection: _angular_core.InputSignal<OptionalFlexDirection>;
1447
+ /**
1448
+ * Defaults to `fit-content` (guards content collapse). Set `[minHeight]="0"`
1449
+ * when the stack must shrink inside a constrained flex parent (scroll
1450
+ * containment).
1451
+ */
1452
+ minHeight: _angular_core.InputSignal<string | number>;
1453
+ constructor();
1454
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniStackDirective, never>;
1455
+ 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>;
1456
+ }
1457
+
1458
+ declare class UniWrapDirective extends UniBoxDirective {
1459
+ display: _angular_core.InputSignal<OptionalDisplay>;
1460
+ wrapItems: _angular_core.InputSignal<OptionalWrap>;
1461
+ constructor();
1462
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniWrapDirective, never>;
1463
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UniWrapDirective, "[uni-wrap-layout], [wrap-layout]", never, { "display": { "alias": "display"; "required": false; "isSignal": true; }; "wrapItems": { "alias": "wrapItems"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1464
+ }
1465
+
1466
+ interface UniMultiSelectDropdownOptions {
1467
+ textRole: Typeface;
1468
+ textColor: TextColor;
1469
+ placeholderTextColor: TextColor;
1470
+ dividerBorder: Border;
1471
+ searchInputBorder: Border;
1472
+ searchInputBorderRadius: Radius;
1473
+ focusOutline: string;
1474
+ focusOutlineOffset: number;
1475
+ }
1476
+
1477
+ declare class UniMultiSelectDropdownComponent<T = unknown> extends BaseComponent<UniMultiSelectDropdownOptions> implements FormValueControl<T[]> {
1478
+ protected readonly className: string;
1479
+ readonly value: _angular_core.ModelSignal<T[]>;
1480
+ readonly disabled: _angular_core.InputSignal<boolean>;
1481
+ readonly touched: _angular_core.ModelSignal<boolean>;
1482
+ readonly invalid: _angular_core.InputSignal<boolean>;
1483
+ readonly dirty: _angular_core.InputSignal<boolean>;
1484
+ /** Synced from required() validators by the Signal Forms [field] directive. */
1485
+ readonly required: _angular_core.InputSignal<boolean>;
1486
+ /**
1487
+ * Id(s) of external element(s) describing this control — typically your
1488
+ * app-rendered error message — exposed as aria-describedby.
1489
+ */
1490
+ readonly ariaDescribedBy: _angular_core.InputSignal<string>;
1491
+ readonly options: _angular_core.InputSignal<Options<T>>;
1492
+ readonly placeholder: _angular_core.InputSignal<string>;
1493
+ /**
1494
+ * What the field is for, e.g. "Fruits". Rendered visually hidden inside the
1495
+ * trigger so its accessible name reads "Fruits, Apple, Pear" — without it a
1496
+ * screen reader announces only the current selection, with no clue which
1497
+ * field it belongs to.
1498
+ */
1499
+ readonly label: _angular_core.InputSignal<string>;
1500
+ /** Debounce for the filter box, matching the library's input debounce. */
1501
+ readonly debounceTime: _angular_core.InputSignal<number>;
1502
+ protected readonly srOnly: string;
1503
+ protected readonly query: _angular_core.WritableSignal<string>;
1504
+ private queryTimer?;
1505
+ protected readonly filteredOptions: _angular_core.Signal<Options<T>>;
1506
+ private readonly optionRefs;
1507
+ /**
1508
+ * Roving focus over the options. The shared helper owns the index
1509
+ * arithmetic — wrapping, Home/End, and never pointing past a list the
1510
+ * filter has narrowed — the same contract `uni-search-input` and
1511
+ * `uni-tag-input` use, so the keys behave identically across all three.
1512
+ *
1513
+ * `disabled` indexes into `filteredOptions`, matching `count`: arrows step
1514
+ * over disabled rows and Home/End land on the nearest enabled one, so the
1515
+ * focus target is always a checkbox that can actually take focus.
1516
+ */
1517
+ protected readonly list: _uni_design_system_uni_angular.ListboxNavigation;
1518
+ /** Announced with the selection so the count is not left to guesswork. */
1519
+ readonly selectionSummary: _angular_core.Signal<string>;
1520
+ readonly selectedLabelsText: _angular_core.Signal<string>;
1521
+ protected readonly showError: _angular_core.Signal<boolean>;
1522
+ protected readonly textColor: _angular_core.Signal<_uni_design_system_uni_core.TextColor>;
1523
+ triggerClass: string;
1524
+ protected readonly searchInputClass: _angular_core.Signal<string>;
1525
+ protected handleQueryInput(event: Event): void;
1526
+ /**
1527
+ * Arrow keys walk the options from anywhere in the panel, including the
1528
+ * filter box — previously the only way in was to Tab through every
1529
+ * checkbox.
1530
+ */
1531
+ protected onPanelKeydown(event: KeyboardEvent): void;
1532
+ /** Keeps the active index in step when focus lands on a row by pointer. */
1533
+ protected onOptionFocus(index: number): void;
1534
+ /**
1535
+ * Selects every *enabled* option. A disabled option is not committable, so
1536
+ * "select all" must not commit one on the user's behalf — the same rule
1537
+ * `toggleOption` and the keyboard path follow.
1538
+ */
1539
+ selectAll(): void;
1540
+ deselectAll(): void;
1541
+ protected isOptionSelected(option: Option<T>): _angular_core.Signal<boolean>;
1542
+ toggleOption(option: Option<T>, checked: boolean): void;
1543
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniMultiSelectDropdownComponent<any>, never>;
1544
+ 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>;
1545
+ }
1546
+
1547
+ declare class UniMultiSelectComponent<T = unknown> {
1548
+ options: _angular_core.InputSignal<Option<T>[]>;
1549
+ selections: _angular_core.InputSignal<T[]>;
1550
+ updates: _angular_core.OutputEmitterRef<T[]>;
1551
+ flexDirection: _angular_core.InputSignal<"column" | "column-reverse" | "row" | "row-reverse">;
1552
+ checkboxGap: _angular_core.InputSignal<NullableSize>;
1553
+ protected readonly values: _angular_core.Signal<unknown[]>;
1554
+ protected readonly optionsWithSelections: _angular_core.Signal<Option<T>[]>;
1555
+ protected readonly className: string;
1556
+ handleCheck(checked: boolean, value: T): void;
1557
+ /** Selects every *enabled* option — a disabled option is not committable. */
1558
+ selectAll(): void;
1559
+ deselectAll(): void;
1560
+ optionWrapper: string;
1561
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniMultiSelectComponent<any>, never>;
1562
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniMultiSelectComponent<any>, "uni-multi-select", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "selections": { "alias": "selections"; "required": false; "isSignal": true; }; "flexDirection": { "alias": "flexDirection"; "required": false; "isSignal": true; }; "checkboxGap": { "alias": "checkboxGap"; "required": false; "isSignal": true; }; }, { "updates": "updates"; }, never, never, true, never>;
1563
+ }
1564
+
1565
+ interface UniRadioOption {
1566
+ /**
1567
+ * The label displayed for this radio option
1568
+ */
1569
+ label: string;
1570
+ /**
1571
+ * The value associated with this radio option
1572
+ */
1573
+ value: string;
1574
+ /**
1575
+ * Whether this option is disabled
1576
+ */
1577
+ disabled?: boolean;
1578
+ }
1579
+ interface UniRadioOptions {
1580
+ /**
1581
+ * The size of the radio buttons
1582
+ */
1583
+ size?: number;
1584
+ /** Unselected ring color token. */
1585
+ ringColor?: ColorKey;
1586
+ /** Circle background token. */
1587
+ fillColor?: ColorKey;
1588
+ /** Named motion primitive for the dot's grow/retract and the ring's color
1589
+ change. Defaults to `control`; a token with `duration: 0` is instant. */
1590
+ motion?: Motion;
1591
+ }
1592
+
1593
+ declare class UniRadioComponent extends BaseComponent<UniRadioOptions> implements FormValueControl<string> {
1594
+ readonly value: _angular_core.ModelSignal<string>;
1595
+ readonly disabled: _angular_core.InputSignal<boolean>;
1596
+ readonly touched: _angular_core.ModelSignal<boolean>;
1597
+ readonly invalid: _angular_core.InputSignal<boolean>;
1598
+ readonly dirty: _angular_core.InputSignal<boolean>;
1599
+ /** Synced from required() validators by the Signal Forms [field] directive. */
1600
+ readonly required: _angular_core.InputSignal<boolean>;
1601
+ /**
1602
+ * Id(s) of external element(s) describing this control — typically your
1603
+ * app-rendered error message — exposed as aria-describedby.
1604
+ */
1605
+ readonly ariaDescribedBy: _angular_core.InputSignal<string>;
1606
+ readonly options: _angular_core.InputSignal<UniRadioOption[]>;
1607
+ readonly label: _angular_core.InputSignal<string>;
1608
+ readonly name: _angular_core.InputSignal<string>;
1609
+ /** Links the group label to the radiogroup container. */
1610
+ protected readonly groupLabelId: string;
1611
+ protected readonly showError: _angular_core.Signal<boolean>;
1612
+ markAsTouched(): void;
1613
+ private readonly metrics;
1614
+ protected readonly radioGroupClass: string;
1615
+ protected readonly radioOptionClass: _angular_core.Signal<string>;
1616
+ protected readonly radioInputClass: _angular_core.Signal<string>;
1617
+ handleRadioChange(optionValue: string): void;
1618
+ getThemeColor(token: ColorToken): string;
1619
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniRadioComponent, never>;
1620
+ 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>;
1621
+ }
1622
+
1623
+ /**
1624
+ * Text input that emits `change` only after the user pauses typing. Wears the
1625
+ * shared input chrome (themed color, border, typeface, focus ring) via
1626
+ * `uni-input-box`; project adornments with the `pre-input` / `post-input`
1627
+ * slots, matching `uni-input`'s convention. The ARIA passthrough inputs let a
1628
+ * wrapping composite (e.g. SearchInput's combobox) annotate the real input
1629
+ * element.
1630
+ */
1631
+ declare class UniDebounceInputComponent {
1632
+ inputName: _angular_core.InputSignal<string>;
1633
+ inputId: _angular_core.InputSignal<string>;
1634
+ debounceTime: _angular_core.InputSignal<number>;
1635
+ /** Accessible name for the input. */
1636
+ label: _angular_core.InputSignal<string>;
1637
+ placeholder: _angular_core.InputSignal<string>;
1638
+ disabled: _angular_core.InputSignal<boolean>;
1639
+ /** Native input type; text-like only, matching `uni-input`. */
1640
+ type: _angular_core.InputSignal<UniInputType>;
1641
+ autocomplete: _angular_core.InputSignal<string>;
1642
+ inputMode: _angular_core.InputSignal<UniInputMode>;
1643
+ role: _angular_core.InputSignal<string>;
1644
+ ariaExpanded: _angular_core.InputSignal<boolean>;
1645
+ ariaControls: _angular_core.InputSignal<string>;
1646
+ ariaActivedescendant: _angular_core.InputSignal<string>;
1647
+ /** The debounced value, emitted once the user pauses typing. */
1648
+ valueChange: _angular_core.OutputEmitterRef<string>;
1649
+ value: _angular_core.WritableSignal<string>;
1650
+ private readonly inputElement;
1651
+ private timeoutId;
1652
+ private lastEmitted;
1653
+ constructor();
1654
+ handleInput(event: Event): void;
1655
+ /** Empty the field immediately, cancelling any pending emit. */
1656
+ clear(): void;
1657
+ focus(): void;
1658
+ inputClass: string;
1659
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniDebounceInputComponent, never>;
1660
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDebounceInputComponent, "uni-debounce-input", never, { "inputName": { "alias": "inputName"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "debounceTime": { "alias": "debounceTime"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "inputMode": { "alias": "inputMode"; "required": false; "isSignal": true; }; "role": { "alias": "role"; "required": false; "isSignal": true; }; "ariaExpanded": { "alias": "ariaExpanded"; "required": false; "isSignal": true; }; "ariaControls": { "alias": "ariaControls"; "required": false; "isSignal": true; }; "ariaActivedescendant": { "alias": "ariaActivedescendant"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, ["[pre-input]", "[post-input]"], true, never>;
1661
+ }
1662
+
1663
+ /** Theme-level options for `uni-search-input`, resolved by token name. */
1664
+ interface UniSearchInputOptions {
1665
+ /** Leading (decorative) symbol. */
1666
+ searchSymbol?: string;
1667
+ /** Clear-button symbol. */
1668
+ clearSymbol?: string;
1669
+ /** Suggestion list surface color token. */
1670
+ listColor?: ColorKey;
1671
+ /** Active/hover suggestion fill; the on-color pair is derived. Must
1672
+ contrast with `listColor` or keyboard navigation turns invisible. */
1673
+ activeColor?: ContainerColorToken;
1674
+ /** Suggestion list elevation token. */
1675
+ listShadow?: Shadow;
1676
+ /** Suggestion list radius token. */
1677
+ listBorderRadius?: Radius;
1678
+ /** Cap on rendered suggestions. */
1679
+ maxSuggestions?: number; /** Named motion primitive for the suggestion popup's open animation.
1680
+ Defaults to `popup` — the token `uni-dropdown` uses. */
1681
+ motion?: Motion;
1682
+ }
1683
+
1684
+ /**
1685
+ * Generic search field: shared input chrome with a leading magnifier, a clear
1686
+ * button while there's a query, Enter to submit, and optional type-ahead —
1687
+ * pass `suggestions` (refresh them from `change`) and the field becomes an
1688
+ * ARIA combobox with a keyboard-navigable listbox. Escape closes the list
1689
+ * first, then clears the query.
1690
+ */
1691
+ declare class UniSearchInputComponent extends BaseComponent<UniSearchInputOptions> {
1692
+ /** Accessible name for the field, also the placeholder fallback. */
1693
+ label: _angular_core.InputSignal<string>;
1694
+ placeholder: _angular_core.InputSignal<string>;
1695
+ width: _angular_core.InputSignal<string | number>;
1696
+ debounceTime: _angular_core.InputSignal<number>;
1697
+ /**
1698
+ * Type-ahead entries. Keep them fresh from `change` emissions; the list
1699
+ * shows while the field has focus and entries exist.
1700
+ */
1701
+ suggestions: _angular_core.InputSignal<string[]>;
1702
+ /** The debounced query, emitted as the user types. */
1703
+ searchChange: _angular_core.OutputEmitterRef<string>;
1704
+ /** A committed search: Enter, or a suggestion chosen from the list. */
1705
+ searchSubmit: _angular_core.OutputEmitterRef<string>;
1706
+ suggestionSelected: _angular_core.OutputEmitterRef<string>;
1707
+ protected readonly field: _angular_core.Signal<UniDebounceInputComponent>;
1708
+ private readonly listRef;
1709
+ /** Ties the popup to the field so the browser tracks it in the top layer. */
1710
+ private readonly anchor;
1711
+ /** `manual` where the top layer is usable, else null — see the popup helper. */
1712
+ protected readonly popupAttr: "manual";
1713
+ constructor();
1714
+ protected readonly visibleSuggestions: _angular_core.Signal<string[]>;
1715
+ /** Shared combobox bookkeeping: open state, active option, ARIA ids. */
1716
+ protected readonly list: _uni_design_system_uni_angular.ListboxNavigation;
1717
+ readonly listboxId: string;
1718
+ protected readonly hasQuery: _angular_core.Signal<boolean>;
1719
+ protected handleChange(value: string): void;
1720
+ protected submit(): void;
1721
+ protected select(suggestion: string): void;
1722
+ protected clear(): void;
1723
+ protected onKeydown(event: KeyboardEvent): void;
1724
+ protected onFocusOut(event: FocusEvent): void;
1725
+ protected readonly className: _angular_core.Signal<string>;
1726
+ protected readonly listClass: _angular_core.Signal<string>;
1727
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniSearchInputComponent, never>;
1728
+ 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>;
1729
+ }
1730
+
1731
+ declare class UniSelectComponent<T> implements FormValueControl<T | null> {
1732
+ readonly value: _angular_core.ModelSignal<T>;
1733
+ readonly disabled: _angular_core.InputSignal<boolean>;
1734
+ readonly touched: _angular_core.ModelSignal<boolean>;
1735
+ readonly invalid: _angular_core.InputSignal<boolean>;
1736
+ readonly dirty: _angular_core.InputSignal<boolean>;
1737
+ /** Synced from required() validators by the Signal Forms [field] directive. */
1738
+ readonly required: _angular_core.InputSignal<boolean>;
1739
+ /**
1740
+ * Id(s) of external element(s) describing this control — typically your
1741
+ * app-rendered error message — exposed as aria-describedby.
1742
+ */
1743
+ readonly ariaDescribedBy: _angular_core.InputSignal<string>;
1744
+ readonly options: _angular_core.InputSignal<Options<T>>;
1745
+ readonly placeholder: _angular_core.InputSignal<string>;
1746
+ readonly width: _angular_core.InputSignal<string | number>;
1747
+ readonly fullWidth: _angular_core.InputSignal<boolean>;
1748
+ readonly grow: _angular_core.InputSignal<number>;
1749
+ /**
1750
+ * Equality used to match `value` against option values, called as
1751
+ * `compareWith(optionValue, value)`. Defaults to reference equality, which
1752
+ * never matches an object value rebuilt from elsewhere (e.g. a saved record
1753
+ * against options from a fresh fetch) — pass a key comparison like
1754
+ * `(a, b) => a?.id === b?.id` for object values.
1755
+ */
1756
+ readonly compareWith: _angular_core.InputSignal<(optionValue: T, value: T) => boolean>;
1757
+ /** Accessible name for the select; a placeholder is not a label. */
1758
+ readonly ariaLabel: _angular_core.InputSignal<string>;
1759
+ protected readonly UNSELECTED = -1;
1760
+ /**
1761
+ * We use the index as the HTML value to avoid issues with
1762
+ * stringifying complex objects or duplicate labels.
1763
+ */
1764
+ protected readonly currentSelectedIndex: _angular_core.Signal<string | -1>;
1765
+ protected readonly showError: _angular_core.Signal<boolean>;
1766
+ protected handleSelectChange(event: Event): void;
1767
+ selectClass: string;
1768
+ arrowClass: string;
1769
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniSelectComponent<any>, never>;
1770
+ 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>;
1771
+ }
1772
+
1773
+ /** Theme-level options for `uni-slider`, resolved by token name. */
1774
+ interface UniSliderOptions {
1775
+ /** Fill and thumb color. */
1776
+ color?: ColorKey;
1777
+ /** Unfilled track color. */
1778
+ trackColor?: ColorKey;
1779
+ /** Track and thumb radius token. */
1780
+ borderRadius?: Radius;
1781
+ /** Track height in px. */
1782
+ trackHeight?: number;
1783
+ /** Thumb diameter in px. */
1784
+ thumbSize?: number;
1785
+ }
1786
+
1787
+ /**
1788
+ * Range slider on a native `<input type="range">` — keyboard interaction and
1789
+ * the ARIA slider contract come from the platform. Fill, track, thumb and
1790
+ * radii resolve from `slider` theme tokens; the fill percentage rides a CSS
1791
+ * custom property so dragging never regenerates styles.
1792
+ */
1793
+ declare class UniSliderComponent extends BaseComponent<UniSliderOptions> implements FormValueControl<number> {
1794
+ readonly value: _angular_core.ModelSignal<number>;
1795
+ readonly disabled: _angular_core.InputSignal<boolean>;
1796
+ readonly touched: _angular_core.ModelSignal<boolean>;
1797
+ readonly invalid: _angular_core.InputSignal<boolean>;
1798
+ readonly dirty: _angular_core.InputSignal<boolean>;
1799
+ /** Synced from required() validators by the Signal Forms [field] directive. */
1800
+ readonly required: _angular_core.InputSignal<boolean>;
1801
+ /**
1802
+ * Id(s) of external element(s) describing this control — typically your
1803
+ * app-rendered value or error text — exposed as aria-describedby.
1804
+ */
1805
+ readonly ariaDescribedBy: _angular_core.InputSignal<string>;
1806
+ label: _angular_core.InputSignal<string>;
1807
+ min: _angular_core.InputSignal<number>;
1808
+ max: _angular_core.InputSignal<number>;
1809
+ step: _angular_core.InputSignal<number>;
1810
+ protected readonly resolvedMin: _angular_core.Signal<number>;
1811
+ protected readonly resolvedMax: _angular_core.Signal<number>;
1812
+ markAsTouched(): void;
1813
+ handleInput(event: Event): void;
1814
+ protected readonly fillPercent: _angular_core.Signal<string>;
1815
+ protected readonly inputClass: _angular_core.Signal<string>;
1816
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniSliderComponent, never>;
1817
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniSliderComponent, "uni-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; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
1818
+ }
1819
+
1820
+ /**
1821
+ * One committed token. `value` is canonical — what a form submits — and
1822
+ * everything else is presentation the field may enrich from a suggestion.
1823
+ *
1824
+ * `{ value: 'a@b.com' }` is a complete item, so the least a caller has to write
1825
+ * is `[value]="[{ value: 'a@b.com' }]"`.
1826
+ */
1827
+ interface UniTagItem {
1828
+ /** Canonical value, e.g. an email address. */
1829
+ value: string;
1830
+ /** Display text; falls back to `value`. */
1831
+ label?: string;
1832
+ avatarSrc?: string;
1833
+ /**
1834
+ * Failed `validate()`. The item stays **in** the value rather than being
1835
+ * rejected — a field that silently swallows a typo'd address is worse than
1836
+ * one that shows it in red, and the user can click in to fix it.
1837
+ */
1838
+ invalid?: boolean;
1839
+ /** Locked token (e.g. a thread owner): rendered without a remove control. */
1840
+ disabled?: boolean;
1841
+ }
1842
+ /** A type-ahead entry. Same contract as `uni-search-input`: the app filters. */
1843
+ interface UniTagSuggestion {
1844
+ value: string;
1845
+ label?: string;
1846
+ description?: string;
1847
+ avatarSrc?: string;
1848
+ }
1849
+ /** Why a typed token did not become a chip. */
1850
+ interface UniTagRejection {
1851
+ raw: string;
1852
+ reason: 'duplicate' | 'max' | 'invalid';
1853
+ }
1854
+ /** Theme options for the `tagInput` component entry. */
1855
+ interface UniTagInputOptions {
1856
+ /** Space between chips. */
1857
+ chipGap?: NullableSize;
1858
+ chipSize?: Size;
1859
+ /** Keeps the text input usable when chips have wrapped. */
1860
+ minInputWidth?: string | number;
1861
+ listColor?: ContainerColorToken;
1862
+ listShadow?: Shadow;
1863
+ listBorderRadius?: Radius;
1864
+ /** Active/hover suggestion fill; the on-color pair is derived. Must
1865
+ contrast with `listColor` or keyboard navigation turns invisible. */
1866
+ activeColor?: ContainerColorToken;
1867
+ maxSuggestions?: number; /** Named motion primitive for the suggestion popup's open animation.
1868
+ Defaults to `popup` — the token `uni-dropdown` uses. */
1869
+ motion?: Motion;
1870
+ }
1871
+
1872
+ declare class UniTagInputComponent extends BaseComponent<UniTagInputOptions> implements FormValueControl<UniTagItem[]> {
1873
+ readonly value: _angular_core.ModelSignal<UniTagItem[]>;
1874
+ readonly disabled: _angular_core.InputSignal<boolean>;
1875
+ readonly touched: _angular_core.ModelSignal<boolean>;
1876
+ readonly invalid: _angular_core.InputSignal<boolean>;
1877
+ readonly dirty: _angular_core.InputSignal<boolean>;
1878
+ readonly required: _angular_core.InputSignal<boolean>;
1879
+ readonly ariaDescribedBy: _angular_core.InputSignal<string>;
1880
+ /** Accessible name for the field, e.g. "To". */
1881
+ label: _angular_core.InputSignal<string>;
1882
+ placeholder: _angular_core.InputSignal<string>;
1883
+ /** `email` wires an address validator, paste parser and space separator. */
1884
+ preset: _angular_core.InputSignal<"text" | "email">;
1885
+ separators: _angular_core.InputSignal<string[]>;
1886
+ commitOnBlur: _angular_core.InputSignal<boolean>;
1887
+ allowDuplicates: _angular_core.InputSignal<boolean>;
1888
+ max: _angular_core.InputSignal<number>;
1889
+ validate: _angular_core.InputSignal<(raw: string) => boolean>;
1890
+ parse: _angular_core.InputSignal<(pasted: string) => string[]>;
1891
+ tagVariant: _angular_core.InputSignal<Variant>;
1892
+ tagTone: _angular_core.InputSignal<TagTone>;
1893
+ tagSize: _angular_core.InputSignal<Size>;
1894
+ suggestions: _angular_core.InputSignal<UniTagSuggestion[]>;
1895
+ /** Debounced text the app should filter `suggestions` from. */
1896
+ query: _angular_core.OutputEmitterRef<string>;
1897
+ debounceTime: _angular_core.InputSignal<number>;
1898
+ added: _angular_core.OutputEmitterRef<UniTagItem>;
1899
+ removed: _angular_core.OutputEmitterRef<UniTagItem>;
1900
+ rejected: _angular_core.OutputEmitterRef<UniTagRejection>;
1901
+ private readonly inputRef;
1902
+ private readonly chipRefs;
1903
+ private readonly listRef;
1904
+ /** Ties the popup to the field so the browser tracks it in the top layer. */
1905
+ private readonly anchor;
1906
+ /** `manual` where the top layer is usable, else null — see the popup helper. */
1907
+ protected readonly popupAttr: "manual";
1908
+ constructor();
1909
+ /** Uncommitted text in the field. */
1910
+ protected readonly draft: _angular_core.WritableSignal<string>;
1911
+ /** Index of the focused chip, or -1 when focus is in the text input. */
1912
+ protected readonly focusedChip: _angular_core.WritableSignal<number>;
1913
+ /** Adds, removes and refusals are otherwise silent to a screen reader. */
1914
+ protected readonly announcer: _uni_design_system_uni_angular.Announcer;
1915
+ protected readonly hintId: string;
1916
+ protected readonly srOnly: string;
1917
+ private queryTimer?;
1918
+ protected readonly visibleSuggestions: _angular_core.Signal<UniTagSuggestion[]>;
1919
+ /** Shared combobox bookkeeping — identical contract to uni-search-input. */
1920
+ protected readonly list: _uni_design_system_uni_angular.ListboxNavigation;
1921
+ protected readonly showError: _angular_core.Signal<boolean>;
1922
+ protected readonly separatorKeys: _angular_core.Signal<string[]>;
1923
+ protected readonly describedBy: _angular_core.Signal<string>;
1924
+ protected labelOf(item: UniTagItem | UniTagSuggestion): string;
1925
+ /** Split pasted text into candidate tokens. */
1926
+ private parseRaw;
1927
+ private isValid;
1928
+ /**
1929
+ * Turn typed text into a chip. Invalid entries are kept and flagged rather
1930
+ * than dropped; duplicates and over-max are refused with a reason.
1931
+ */
1932
+ protected commit(raw: string): boolean;
1933
+ private reject;
1934
+ protected removeAt(index: number, focus?: 'left' | 'right' | 'input'): void;
1935
+ private countNoun;
1936
+ protected focusInput(): void;
1937
+ private focusChip;
1938
+ protected onInputKeydown(event: KeyboardEvent): void;
1939
+ protected onInput(value: string): void;
1940
+ protected onPaste(event: ClipboardEvent): void;
1941
+ protected onBlur(): void;
1942
+ protected onFocusOut(event: FocusEvent): void;
1943
+ protected onChipKeydown(event: KeyboardEvent, index: number): void;
1944
+ /** Lift a chip back into the input for correction. */
1945
+ protected editChip(index: number): void;
1946
+ protected selectSuggestion(suggestion: UniTagSuggestion): void;
1947
+ private commitDraft;
1948
+ private setDraft;
1949
+ /** The host is the popup's anchor — the box the list mirrors the width of,
1950
+ and the one its entry animation is measured against. The wrapper below
1951
+ has the same geometry but is only the fallback's positioning context. */
1952
+ protected readonly className: _angular_core.Signal<string>;
1953
+ protected readonly wrapperClass: _angular_core.Signal<string>;
1954
+ protected readonly fieldClass: _angular_core.Signal<string>;
1955
+ protected readonly inputClass: _angular_core.Signal<string>;
1956
+ protected readonly listClass: _angular_core.Signal<string>;
1957
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniTagInputComponent, never>;
1958
+ 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>;
1959
+ }
1960
+
1961
+ /**
1962
+ * The typography primitive, applied as an attribute to any element so
1963
+ * semantics stay yours. The attribute value is the typeface:
1964
+ * `<h1 uni-text="display-small">`, `<span uni-text="caption">`, dynamic via
1965
+ * `[uni-text]="role()"`. With no value, the typeface is inferred from the
1966
+ * host element (h1 → headline-large, p → body-1-long, …), falling back to
1967
+ * `title-small`; the `typeface` input remains as an explicit override.
1968
+ *
1969
+ * It is a directive, so it stacks with anything else on the element — a layout
1970
+ * attribute (`<div stack-layout uni-text="title-small">`) or a component's own
1971
+ * host — rather than colliding with it.
1972
+ */
1973
+ declare class UniTextDirective {
1974
+ theme: ThemeService;
1975
+ private readonly tag;
1976
+ /** Typeface via the selector attribute: `uni-text="headline-large"`. */
1977
+ readonly uniText: _angular_core.InputSignal<string>;
1978
+ /** Explicit typeface; the attribute value wins when both are set. */
1979
+ typeface: _angular_core.InputSignal<string>;
1980
+ /** The ink, mapping straight to the CSS `color` property. */
1981
+ color: _angular_core.InputSignal<string>;
1982
+ display: _angular_core.InputSignal<OptionalDisplay>;
1983
+ align: _angular_core.InputSignal<OptionalTextAlign>;
1984
+ nowrap: _angular_core.InputSignal<boolean>;
1985
+ maxWidth: _angular_core.InputSignal<number>;
1986
+ ellipsis: _angular_core.InputSignal<boolean>;
1987
+ protected readonly resolvedTypeface: _angular_core.Signal<string>;
1988
+ protected readonly className: _angular_core.Signal<string>;
1989
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniTextDirective, never>;
1990
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UniTextDirective, "[uni-text]", never, { "uniText": { "alias": "uni-text"; "required": false; "isSignal": true; }; "typeface": { "alias": "typeface"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "display": { "alias": "display"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "nowrap": { "alias": "nowrap"; "required": false; "isSignal": true; }; "maxWidth": { "alias": "maxWidth"; "required": false; "isSignal": true; }; "ellipsis": { "alias": "ellipsis"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1991
+ }
1992
+
1993
+ declare class UniTextareaComponent implements FormValueControl<string> {
1994
+ private theme;
1995
+ readonly value: _angular_core.ModelSignal<string>;
1996
+ readonly disabled: _angular_core.InputSignal<boolean>;
1997
+ readonly touched: _angular_core.ModelSignal<boolean>;
1998
+ readonly invalid: _angular_core.InputSignal<boolean>;
1999
+ readonly dirty: _angular_core.InputSignal<boolean>;
2000
+ /** Synced from required() validators by the Signal Forms [field] directive. */
2001
+ readonly required: _angular_core.InputSignal<boolean>;
2002
+ /**
2003
+ * Id(s) of external element(s) describing this control — typically your
2004
+ * app-rendered error message — exposed as aria-describedby.
2005
+ */
2006
+ readonly ariaDescribedBy: _angular_core.InputSignal<string>;
2007
+ label: _angular_core.InputSignal<string>;
2008
+ placeholder: _angular_core.InputSignal<string>;
2009
+ /** Visible text rows. Defaults to the theme's `textarea` options. */
2010
+ rows: _angular_core.InputSignal<number>;
2011
+ readonly readonly: _angular_core.InputSignal<boolean>;
2012
+ readonly name: _angular_core.InputSignal<string>;
2013
+ readonly minLength: _angular_core.InputSignal<number>;
2014
+ readonly maxLength: _angular_core.InputSignal<number>;
2015
+ autocomplete: _angular_core.InputSignal<string>;
2016
+ spellcheck: _angular_core.InputSignal<boolean>;
2017
+ width: _angular_core.InputSignal<string | number>;
2018
+ fullWidth: _angular_core.InputSignal<boolean>;
2019
+ grow: _angular_core.InputSignal<number>;
2020
+ private options;
2021
+ protected readonly resolvedRows: _angular_core.Signal<number>;
2022
+ protected readonly showError: _angular_core.Signal<boolean>;
2023
+ protected readonly textareaClass: _angular_core.Signal<string>;
2024
+ markAsTouched(): void;
2025
+ handleInput(event: Event): void;
2026
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniTextareaComponent, never>;
2027
+ 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>;
2028
+ }
2029
+
2030
+ /** Why typed text did not become a time. The raw text stays in the field. */
2031
+ interface UniTimeInputRejection {
2032
+ raw: string;
2033
+ reason: 'unparseable' | 'out-of-range' | 'unavailable';
2034
+ }
2035
+ /**
2036
+ * Theme options for the `timeInput` entry. Field chrome is not duplicated
2037
+ * here — it comes from `input` via uni-input-box; the list trio matches
2038
+ * tagInput/searchInput.
2039
+ */
2040
+ interface UniTimeInputOptions {
2041
+ toggleSymbol?: string;
2042
+ listColor?: ContainerColorToken;
2043
+ listShadow?: Shadow;
2044
+ listBorderRadius?: Radius;
2045
+ /** Active/hover option fill; the on-color pair is derived. Must contrast
2046
+ with `listColor` or keyboard navigation turns invisible. */
2047
+ activeColor?: ContainerColorToken;
2048
+ maxVisibleOptions?: number; /** Named motion primitive for the suggestion popup's open animation.
2049
+ Defaults to `popup` — the token `uni-dropdown` uses. */
2050
+ motion?: Motion;
2051
+ }
2052
+
2053
+ /**
2054
+ * Time field: a combobox over time options — the same listbox contract as
2055
+ * uni-search-input and uni-tag-input. Type `3p`, `930` or `15:00`, or pick
2056
+ * `3:00 PM` from the list; the form always gets 24-hour `'HH:mm'` (`hour12`
2057
+ * affects display only). The list is assistive, not exhaustive: any
2058
+ * parseable time commits, unless `slots` pins the choices (a slot picker) —
2059
+ * then a typed time must match one. Unreadable or unavailable text stays in
2060
+ * the field, flagged, with a `rejected` event.
2061
+ */
2062
+ declare class UniTimeInputComponent extends BaseComponent<UniTimeInputOptions> implements FormValueControl<UniTime | undefined> {
2063
+ readonly value: _angular_core.ModelSignal<string>;
2064
+ readonly disabled: _angular_core.InputSignal<boolean>;
2065
+ readonly touched: _angular_core.ModelSignal<boolean>;
2066
+ readonly invalid: _angular_core.InputSignal<boolean>;
2067
+ readonly dirty: _angular_core.InputSignal<boolean>;
2068
+ readonly required: _angular_core.InputSignal<boolean>;
2069
+ readonly ariaDescribedBy: _angular_core.InputSignal<string>;
2070
+ /** Accessible name for the field, e.g. "Start time". */
2071
+ label: _angular_core.InputSignal<string>;
2072
+ placeholder: _angular_core.InputSignal<string>;
2073
+ /** Generated list granularity, in minutes. */
2074
+ minuteStep: _angular_core.InputSignal<number>;
2075
+ /** Earliest allowed time (inclusive), `'09:00'`. */
2076
+ minTime: _angular_core.InputSignal<string>;
2077
+ /** Latest allowed time (inclusive), `'17:00'`. */
2078
+ maxTime: _angular_core.InputSignal<string>;
2079
+ /** Exact allowed times (scheduling). When set, typed entry must match one. */
2080
+ slots: _angular_core.InputSignal<string[]>;
2081
+ /** 12-hour display; defaults from the locale. The value stays 24-hour. */
2082
+ hour12: _angular_core.InputSignal<boolean>;
2083
+ /** BCP 47 tag for the display format; defaults to the document language. */
2084
+ locale: _angular_core.InputSignal<string>;
2085
+ commitOnBlur: _angular_core.InputSignal<boolean>;
2086
+ /** Renders without its own input-box chrome, for composers like uni-date-time-input. */
2087
+ embedded: _angular_core.InputSignal<boolean>;
2088
+ /** A typed commit was refused; the raw text stays in the field. */
2089
+ rejected: _angular_core.OutputEmitterRef<UniTimeInputRejection>;
2090
+ private readonly host;
2091
+ private readonly inputRef;
2092
+ private readonly listRef;
2093
+ /** Ties the popup to the field so the browser tracks it in the top layer. */
2094
+ private readonly anchor;
2095
+ /** `manual` where the top layer is usable, else null — see the popup helper. */
2096
+ protected readonly popupAttr: "manual";
2097
+ constructor();
2098
+ protected readonly srOnly: string;
2099
+ /** A refused commit — styles the field and sets aria-invalid until edited. */
2100
+ protected readonly draftInvalid: _angular_core.WritableSignal<boolean>;
2101
+ /** Commits, clears and refusals are otherwise silent to a screen reader. */
2102
+ protected readonly announcer: _uni_design_system_uni_angular.Announcer;
2103
+ protected readonly resolvedLocale: _angular_core.Signal<string>;
2104
+ protected readonly resolvedHour12: _angular_core.Signal<boolean>;
2105
+ /** The listed times: pinned `slots` verbatim, else the generated step grid. */
2106
+ protected readonly options: _angular_core.Signal<string[]>;
2107
+ protected readonly optionLabels: _angular_core.Signal<string[]>;
2108
+ /** Shared combobox bookkeeping — identical contract to uni-search-input. */
2109
+ protected readonly list: _uni_design_system_uni_angular.ListboxNavigation;
2110
+ protected readonly displayText: _angular_core.Signal<string>;
2111
+ protected readonly resolvedPlaceholder: _angular_core.Signal<string>;
2112
+ protected readonly showError: _angular_core.Signal<boolean>;
2113
+ protected formatValue(time: UniTime): string;
2114
+ protected setValue(time: UniTime | undefined, silent?: boolean): void;
2115
+ private refuse;
2116
+ protected commit(raw: string): boolean;
2117
+ /** Step a committed value ±minuteStep (±1 slot when pinned), clamped. */
2118
+ private stepValue;
2119
+ protected onInputKeydown(event: KeyboardEvent): void;
2120
+ protected onInput(): void;
2121
+ protected onToggle(): void;
2122
+ protected selectOption(time: UniTime): void;
2123
+ protected onFocusOut(event: FocusEvent): void;
2124
+ private openList;
2125
+ private scrollToActive;
2126
+ private scrollToIndex;
2127
+ private setFieldText;
2128
+ protected readonly className: _angular_core.Signal<string>;
2129
+ protected readonly rowClass: _angular_core.Signal<string>;
2130
+ protected readonly inputClass: _angular_core.Signal<string>;
2131
+ protected readonly toggleWrapClass: _angular_core.Signal<string>;
2132
+ /** Embedded mode: the composer owns the box; keep only the flex row. */
2133
+ protected readonly embeddedClass: _angular_core.Signal<string>;
2134
+ protected readonly listClass: _angular_core.Signal<string>;
2135
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniTimeInputComponent, never>;
2136
+ 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>;
2137
+ }
2138
+
2139
+ interface UniToggleOptions {
2140
+ /**
2141
+ * The size of the toggle switch
2142
+ */
2143
+ size?: number;
2144
+ /** Off-state track color token. */
2145
+ trackColor?: ColorKey;
2146
+ /** Knob color token. */
2147
+ knobColor?: ColorKey;
2148
+ }
2149
+
2150
+ declare class UniToggleComponent extends BaseComponent<UniToggleOptions> implements FormCheckboxControl {
2151
+ readonly checked: _angular_core.ModelSignal<boolean>;
2152
+ readonly disabled: _angular_core.InputSignal<boolean>;
2153
+ readonly touched: _angular_core.ModelSignal<boolean>;
2154
+ readonly invalid: _angular_core.InputSignal<boolean>;
2155
+ readonly dirty: _angular_core.InputSignal<boolean>;
2156
+ /** Synced from required() validators by the Signal Forms [field] directive. */
2157
+ readonly required: _angular_core.InputSignal<boolean>;
2158
+ /**
2159
+ * Id(s) of external element(s) describing this control — typically your
2160
+ * app-rendered error message — exposed as aria-describedby.
2161
+ */
2162
+ readonly ariaDescribedBy: _angular_core.InputSignal<string>;
2163
+ readonly label: _angular_core.InputSignal<string>;
2164
+ protected readonly showError: _angular_core.Signal<boolean>;
2165
+ markAsTouched(): void;
2166
+ handleChange(event: Event): void;
2167
+ private readonly metrics;
2168
+ protected readonly toggleLabel: _angular_core.Signal<string>;
2169
+ protected readonly toggleInput: _angular_core.Signal<string>;
2170
+ getThemeColor(token: ColorToken): string;
2171
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniToggleComponent, never>;
2172
+ 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>;
2173
+ }
2174
+
2175
+ /**
2176
+ * Every layout and typography attribute directive, for
2177
+ * `imports: [...UNI_LAYOUT]`.
2178
+ *
2179
+ * These are attribute selectors, so an element carrying one that was never
2180
+ * imported compiles cleanly and silently does nothing. Spreading the family is
2181
+ * the cheapest way not to hit that.
2182
+ */
2183
+ declare const UNI_LAYOUT: readonly [typeof UniBoxDirective, typeof UniRowDirective, typeof UniStackDirective, typeof UniCenterDirective, typeof UniWrapDirective, typeof UniGridDirective, typeof UniGridAreaDirective, typeof UniTextDirective];
2184
+ /** Every form control, for `imports: [...UNI_FORMS]`. */
2185
+ declare const UNI_FORMS: readonly [typeof UniInputComponent, typeof UniInputBoxComponent, typeof UniTextareaComponent, typeof UniSelectComponent, typeof UniCheckboxComponent, typeof UniRadioComponent, typeof UniToggleComponent, typeof UniComboboxComponent, typeof UniMultiSelectComponent, typeof UniMultiSelectDropdownComponent, typeof UniSearchInputComponent, typeof UniTagInputComponent, typeof UniSliderComponent, typeof UniDateInputComponent, typeof UniTimeInputComponent, typeof UniDateTimeInputComponent];
2186
+
2187
+ /** Theme-level options for `uni-app-bar`, resolved by token name. */
2188
+ interface UniAppBarOptions {
2189
+ /** Bar surface color token (with its paired on-color). */
2190
+ color?: ContainerColorToken;
2191
+ /** Bar height in px. */
2192
+ height?: number;
2193
+ /** Rule under the bar, as a border primitive token. */
2194
+ divider?: Border;
2195
+ /** Title typography token. */
2196
+ typeface?: Typeface;
2197
+ /** Horizontal padding, as a spacing token. */
2198
+ padding?: OptionalSize;
2199
+ /** Space between bar children, as a spacing token. */
2200
+ gap?: OptionalSize;
2201
+ /** Optional elevation shadow token (e.g. 'raised'). */
2202
+ elevation?: Elevation;
2203
+ }
2204
+
2205
+ /**
2206
+ * Horizontal application bar: project leading controls (menu button, logo)
2207
+ * with the `leading` attribute, actions with `trailing` (pushed to the far
2208
+ * edge), and either pass `title` or project custom center content. Surface,
2209
+ * divider, height, typography and spacing all resolve from `appBar` tokens.
2210
+ * Place it inside your page's `<header>` landmark.
2211
+ */
2212
+ declare class UniAppBarComponent extends BaseComponent<UniAppBarOptions> {
2213
+ /** Bar title; alternatively project your own center content. */
2214
+ title: _angular_core.InputSignal<string>;
2215
+ /** Stick the bar to the top of its scroll container. */
2216
+ sticky: _angular_core.InputSignal<boolean>;
2217
+ protected readonly className: _angular_core.Signal<string>;
2218
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniAppBarComponent, never>;
2219
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniAppBarComponent, "uni-app-bar", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; }, {}, never, ["[leading]", "*", "[trailing]"], true, never>;
2220
+ }
2221
+
2222
+ /** Theme-level options for `uni-avatar`, resolved by token name. */
2223
+ interface UniAvatarOptions {
2224
+ /** Corner radius token — `max` renders circles; `sharp` themes get squares. */
2225
+ borderRadius?: Radius;
2226
+ /** Typeface token for the initials. */
2227
+ typeface?: Typeface;
2228
+ /** Symbol shown when there is no image and no name to take initials from. */
2229
+ fallbackSymbol?: string;
2230
+ }
2231
+ /** Theme-level options for `uni-avatar-group`. */
2232
+ interface UniAvatarGroupOptions {
2233
+ /** How far stacked avatars overlap, as a spacing token. */
2234
+ overlap?: OptionalSize;
2235
+ /** Ring color separating stacked avatars from each other. */
2236
+ ringColor?: ColorKey;
2237
+ /** Ring width in px. */
2238
+ ringWidth?: number;
2239
+ }
2240
+
2241
+ /**
2242
+ * Identity avatar with a graceful fallback chain: image → initials from
2243
+ * `name` → themed symbol. Coloring, radius, typeface and sizes all resolve
2244
+ * from `avatar` theme tokens; `variant` picks the container palette.
2245
+ */
2246
+ declare class UniAvatarComponent extends BaseComponent<UniAvatarOptions> {
2247
+ /** Image URL; on load error the avatar falls back to initials/symbol. */
2248
+ src: _angular_core.InputSignal<string>;
2249
+ /** Person's name: drives the initials and the accessible label. */
2250
+ name: _angular_core.InputSignal<string>;
2251
+ /** Verbatim text instead of derived initials (e.g. a group's “+3”). */
2252
+ text: _angular_core.InputSignal<string>;
2253
+ protected readonly imageFailed: _angular_core.WritableSignal<boolean>;
2254
+ protected readonly showImage: _angular_core.Signal<boolean>;
2255
+ protected readonly initials: _angular_core.Signal<string>;
2256
+ protected readonly label: _angular_core.Signal<string>;
2257
+ protected readonly className: _angular_core.Signal<string>;
2258
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniAvatarComponent, never>;
2259
+ 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>;
2260
+ }
2261
+
2262
+ /**
2263
+ * Overlapping stack of avatars. `max` collapses the overflow into a themed
2264
+ * “+N” chip (itself a `uni-avatar`). Overlap and separator ring resolve from
2265
+ * `avatarGroup` theme tokens.
2266
+ */
2267
+ declare class UniAvatarGroupComponent extends BaseComponent<UniAvatarGroupOptions> {
2268
+ /** Show at most this many avatars; the rest collapse into a “+N” chip. */
2269
+ max: _angular_core.InputSignal<number>;
2270
+ private readonly avatars;
2271
+ protected readonly surplus: _angular_core.Signal<number>;
2272
+ protected readonly className: _angular_core.Signal<string>;
2273
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniAvatarGroupComponent, never>;
2274
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniAvatarGroupComponent, "uni-avatar-group", never, { "max": { "alias": "max"; "required": false; "isSignal": true; }; }, {}, ["avatars"], ["*"], true, never>;
2275
+ }
2276
+
2277
+ type ImagePosition = 'top' | 'bottom' | 'left' | 'right' | 'center' | string;
2278
+ declare class UniBackgroundComponent {
2279
+ theme: ThemeService;
2280
+ image: _angular_core.InputSignal<string>;
2281
+ imagePosition: _angular_core.InputSignal<string>;
2282
+ imageSize: _angular_core.InputSignal<string | number>;
2283
+ height: _angular_core.InputSignal<string | number>;
2284
+ width: _angular_core.InputSignal<string | number>;
2285
+ protected readonly className: _angular_core.Signal<string>;
2286
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniBackgroundComponent, never>;
2287
+ 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>;
2288
+ }
2289
+
2290
+ interface UniBadgeOptions {
2291
+ borderRadius?: RadiiSize;
2292
+ }
2293
+
2294
+ declare class UniBadgeComponent extends BaseComponent<UniBadgeOptions> {
2295
+ color: _angular_core.InputSignal<Variant>;
2296
+ useVariant: _angular_core.InputSignal<boolean>;
2297
+ width: _angular_core.InputSignal<number>;
2298
+ protected readonly className: _angular_core.Signal<string>;
2299
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniBadgeComponent, never>;
2300
+ 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>;
2301
+ }
2302
+
2303
+ /** One step in the trail. The last item is treated as the current page. */
2304
+ interface BreadcrumbItem {
2305
+ label: string;
2306
+ /** Link target. Omit for SPA routing and handle `itemClicked` instead. */
2307
+ href?: string;
2308
+ }
2309
+ /** Theme-level options for `uni-breadcrumb`, resolved by token name. */
2310
+ interface UniBreadcrumbOptions {
2311
+ /** Trail typography token. */
2312
+ typeface?: Typeface;
2313
+ /** Link color for ancestor items. */
2314
+ color?: ColorKey;
2315
+ /** Color of the current (last) item. */
2316
+ currentColor?: ColorKey;
2317
+ /** Material symbol drawn between items. */
2318
+ separatorSymbol?: string;
2319
+ /** Space around separators, as a spacing token. */
2320
+ gap?: OptionalSize;
2321
+ }
2322
+
2323
+ /**
2324
+ * WAI-ARIA breadcrumb: a `nav` landmark wrapping an ordered list; the last
2325
+ * item is the current page (`aria-current="page"`), separators are decorative.
2326
+ * Items with `href` render as real links; without one they render as
2327
+ * link-styled buttons emitting `itemClicked` — wire that to your router.
2328
+ */
2329
+ declare class UniBreadcrumbComponent extends BaseComponent<UniBreadcrumbOptions> {
2330
+ /** The trail, root first; the last item is the current page. */
2331
+ items: _angular_core.InputSignal<BreadcrumbItem[]>;
2332
+ /** Landmark label distinguishing this nav from others on the page. */
2333
+ ariaLabel: _angular_core.InputSignal<string>;
2334
+ /** Emits the clicked ancestor item (also fires for `href` links). */
2335
+ itemClicked: _angular_core.OutputEmitterRef<BreadcrumbItem>;
2336
+ protected readonly className: _angular_core.Signal<string>;
2337
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniBreadcrumbComponent, never>;
2338
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniBreadcrumbComponent, "uni-breadcrumb", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "itemClicked": "itemClicked"; }, never, never, true, never>;
2339
+ }
2340
+
2341
+ /** Theme-level options for `uni-text-button`, resolved by token name. */
2342
+ interface UniButtonOptions {
2343
+ /**
2344
+ * Corner radius as a radii token. The default theme uses `max` (pill);
2345
+ * because this is a token, the theme's radii scale — including generated
2346
+ * shape languages (`sharp`/`modern`/`playful`) and custom primitives —
2347
+ * restyles every button without touching component code.
2348
+ */
2349
+ borderRadius?: RadiiSize;
2350
+ /**
2351
+ * Label typography as a typeface token. Defaults to the type scale's
2352
+ * `button` role (family/weight/transform); per-size `fontSize` overrides
2353
+ * from the theme's `sizes` still apply on top. Point it at any typeface —
2354
+ * including custom primitives added to the theme's typography.
2355
+ */
2356
+ typeface?: Typeface;
2357
+ }
2358
+
2359
+ declare class RippleDirective {
2360
+ private renderer;
2361
+ el: ElementRef<any>;
2362
+ hostEl: any;
2363
+ constructor();
2364
+ onClick(e: MouseEvent): void;
2365
+ rippleClass: string;
2366
+ animateClass: string;
2367
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RippleDirective, never>;
2368
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RippleDirective, "[uniRipple]", never, {}, {}, never, never, true, never>;
2369
+ }
2370
+
2371
+ declare class UniButtonComponent extends BaseComponent<UniButtonOptions> {
2372
+ readonly disable: _angular_core.InputSignal<boolean>;
2373
+ readonly loading: _angular_core.InputSignal<boolean>;
2374
+ readonly fullWidth: _angular_core.InputSignal<boolean>;
2375
+ readonly symbolLeft: _angular_core.InputSignal<string>;
2376
+ readonly symbolRight: _angular_core.InputSignal<string>;
2377
+ spinnerBox: string;
2378
+ protected readonly className: _angular_core.Signal<string>;
2379
+ symbolSize: _angular_core.Signal<number>;
2380
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniButtonComponent, never>;
2381
+ 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: {}; }]>;
2382
+ }
2383
+
2384
+ declare class UniButtonGroupComponent {
2385
+ private themeService;
2386
+ protected readonly className: _angular_core.Signal<string>;
2387
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniButtonGroupComponent, never>;
2388
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniButtonGroupComponent, "uni-button-group", never, {}, {}, never, ["*"], true, never>;
2389
+ }
2390
+
2391
+ interface ButtonGroupConfig {
2392
+ tooltipPlacement?: Placement;
2393
+ buttonSize: Size;
2394
+ buttons: ButtonGroupItem[];
2395
+ }
2396
+ interface ButtonGroupItem {
2397
+ symbolName: string;
2398
+ selected?: boolean;
2399
+ tooltip?: string;
2400
+ action?: (selectedState?: boolean) => boolean | void;
2401
+ toggle?: WritableSignal<boolean>;
2402
+ }
2403
+
2404
+ /** One rendered day cell — precomputed so the template stays declarative. */
2405
+ interface CalendarCell {
2406
+ date: UniDate;
2407
+ day: number;
2408
+ outside: boolean;
2409
+ disabled: boolean;
2410
+ today: boolean;
2411
+ selected: boolean;
2412
+ inBand: boolean;
2413
+ tabIndex: number;
2414
+ ariaLabel: string;
2415
+ markers: UniCalendarMarker[];
2416
+ cellClass: string;
2417
+ dayClass: string;
2418
+ }
2419
+ /**
2420
+ * Inline month calendar: single-date or start–end range selection, day
2421
+ * markers (availability dots), min/max fences and disabled dates. One tab
2422
+ * stop with a roving-tabindex `role="grid"`; every day is a real button
2423
+ * named with its full date. Values are plain ISO strings (`'YYYY-MM-DD'`),
2424
+ * never `Date` objects, so bindings are timezone-free and serializable.
2425
+ * Selection and today colours come from the theme's `primary` role pair;
2426
+ * geometry and glyphs come from the `calendar` theme entry.
2427
+ */
2428
+ declare class UniCalendarComponent extends BaseComponent<UniCalendarOptions> implements FormValueControl<UniCalendarValue> {
2429
+ readonly value: _angular_core.ModelSignal<UniCalendarValue>;
2430
+ readonly disabled: _angular_core.InputSignal<boolean>;
2431
+ readonly touched: _angular_core.ModelSignal<boolean>;
2432
+ readonly invalid: _angular_core.InputSignal<boolean>;
2433
+ readonly dirty: _angular_core.InputSignal<boolean>;
2434
+ readonly required: _angular_core.InputSignal<boolean>;
2435
+ readonly ariaDescribedBy: _angular_core.InputSignal<string>;
2436
+ /** `'single'` reads/writes a `UniDate`; `'range'` a `UniDateRange`. */
2437
+ mode: _angular_core.InputSignal<UniCalendarMode>;
2438
+ /** Shown month, `'YYYY-MM'` — two-way, so an app can drive "jump to June". */
2439
+ month: _angular_core.ModelSignal<string>;
2440
+ /** Earliest selectable date (inclusive). */
2441
+ minDate: _angular_core.InputSignal<string>;
2442
+ /** Latest selectable date (inclusive). */
2443
+ maxDate: _angular_core.InputSignal<string>;
2444
+ /** Blocked days: a list of dates, or a predicate. */
2445
+ disabledDates: _angular_core.InputSignal<string[] | ((date: UniDate) => boolean)>;
2446
+ /** Availability dots; `label` extends the day's accessible name. */
2447
+ markers: _angular_core.InputSignal<UniCalendarMarker[]>;
2448
+ /** BCP 47 tag; defaults to the document language, then the browser's. */
2449
+ locale: _angular_core.InputSignal<string>;
2450
+ /** First day of week, 0 = Sunday; defaults from the locale's week info. */
2451
+ weekStart: _angular_core.InputSignal<0 | 1 | 2 | 3 | 4 | 6 | 5>;
2452
+ /** Names the grid when it stands alone (otherwise the heading names it). */
2453
+ ariaLabel: _angular_core.InputSignal<string>;
2454
+ /** Day geometry token; `sm`/`md`/`lg` map to the theme's `calendar` sizes. */
2455
+ size: _angular_core.InputSignal<Size>;
2456
+ /** Each committed day, including both ends of a range. */
2457
+ selected: _angular_core.OutputEmitterRef<string>;
2458
+ private readonly host;
2459
+ protected readonly headingId: string;
2460
+ protected readonly srOnly: string;
2461
+ /** Pending range start — set by the first commit, cleared by the second. */
2462
+ protected readonly pendingStart: _angular_core.WritableSignal<string>;
2463
+ /** Hover/focus candidate painting the preview band while a range is pending. */
2464
+ protected readonly previewDate: _angular_core.WritableSignal<string>;
2465
+ /** Live-region text; selections are otherwise silent for a screen reader. */
2466
+ /** Commits, clears and refusals are otherwise silent to a screen reader. */
2467
+ protected readonly announcer: _uni_design_system_uni_angular.Announcer;
2468
+ protected readonly resolvedLocale: _angular_core.Signal<string>;
2469
+ protected readonly resolvedWeekStart: _angular_core.Signal<number>;
2470
+ /**
2471
+ * The month on screen: the `month` model, else the value's month, else
2472
+ * today's. Falsy guards on purpose: `''` — the only typeable empty for a
2473
+ * string-typed model — counts as unset, or it would reach the month math
2474
+ * and blow up the grid and heading.
2475
+ */
2476
+ protected readonly viewMonth: _angular_core.Signal<string>;
2477
+ private readonly anchorDate;
2478
+ /**
2479
+ * The roving-tabindex day. Re-derives when the view or value changes
2480
+ * (selected day in view → today in view → first enabled day); keyboard
2481
+ * navigation writes it directly.
2482
+ */
2483
+ protected readonly focusedDate: _angular_core.WritableSignal<string>;
2484
+ protected readonly showError: _angular_core.Signal<boolean>;
2485
+ protected readonly heading: _angular_core.Signal<string>;
2486
+ protected readonly weekdays: _angular_core.Signal<_uni_design_system_uni_angular.UniWeekdayName[]>;
2487
+ private readonly disabledDateSet;
2488
+ private readonly markersByDate;
2489
+ /** The committed range, or the pending preview band. */
2490
+ private readonly rangeBand;
2491
+ protected isDayDisabled(date: UniDate): boolean;
2492
+ private isSelected;
2493
+ /** The full render model: one precomputed cell per grid position. */
2494
+ protected readonly gridWeeks: _angular_core.Signal<CalendarCell[][]>;
2495
+ protected select(date: UniDate): void;
2496
+ private cancelPending;
2497
+ protected onNav(direction: 1 | -1): void;
2498
+ private setViewMonth;
2499
+ /**
1117
2500
  * Move the roving focus. A landing on a disabled day keeps going in the
1118
2501
  * same direction until an enabled day; the min/max fence stops the caret,
1119
2502
  * it never wraps. Month edges never block — the grid follows.
@@ -1186,12 +2569,6 @@ interface UniCalloutOptions {
1186
2569
  * Named motion primitive for the open/close fade. Defaults to `panel`.
1187
2570
  */
1188
2571
  motion?: Motion;
1189
- /**
1190
- * @deprecated Use `motion` and retime the token instead — one edit covers
1191
- * every panel rather than this one. Still honoured when set, and wins over
1192
- * `motion` so existing themes are unaffected. Removed next major.
1193
- */
1194
- transitionMs?: number;
1195
2572
  }
1196
2573
 
1197
2574
  /**
@@ -1273,11 +2650,7 @@ declare class UniCalloutComponent extends BaseComponent<UniCalloutOptions> {
1273
2650
  /** A stray click shouldn't kill onboarding: nudge the panel instead. */
1274
2651
  protected onBackdropClick(): void;
1275
2652
  private readonly spotlight;
1276
- /**
1277
- * Timing for the open/close fade and the teardown that follows it. The
1278
- * deprecated `transitionMs` wins when a theme still sets it, so existing
1279
- * themes keep their timing; otherwise the `motion` token decides.
1280
- */
2653
+ /** Timing for the open/close fade and the teardown that follows it. */
1281
2654
  private readonly motion;
1282
2655
  protected readonly scrimClassName: _angular_core.Signal<string>;
1283
2656
  protected readonly windowClassName: _angular_core.Signal<string>;
@@ -1301,233 +2674,40 @@ declare class UniCardContentComponent extends BaseComponent {
1301
2674
 
1302
2675
  declare class UniCardHeaderComponent extends BaseComponent {
1303
2676
  private card;
1304
- title: _angular_core.InputSignal<string>;
1305
- titleTextRole: _angular_core.InputSignal<string>;
1306
- constructor();
1307
- className: string;
1308
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniCardHeaderComponent, never>;
1309
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniCardHeaderComponent, "uni-card-header", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "titleTextRole": { "alias": "titleTextRole"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1310
- }
1311
-
1312
- /** Theme-level options for `uni-card`, resolved by token name. */
1313
- interface UniCardOptions {
1314
- defaultVariant?: Variant;
1315
- /** Corner radius as a radii token. The default theme uses `xs`. */
1316
- borderRadius?: Radius;
1317
- /**
1318
- * Frame as a border primitive token. When unset, the card follows its
1319
- * variant — `borders.primary`, `borders.warn`, … — so redefining a border
1320
- * primitive restyles every card (and every other component) sharing it.
1321
- */
1322
- border?: Border;
1323
- /** Optional elevation shadow token; cards are flat by default. */
1324
- elevation?: Elevation;
1325
- /**
1326
- * @deprecated Never read by `uni-card` — setting it has no effect and never
1327
- * had. Removed next major; nothing needs to replace it.
1328
- */
1329
- transitionSpeed?: number;
1330
- }
1331
-
1332
- declare class UniCardComponent extends BaseComponent<UniCardOptions> {
1333
- /**
1334
- * Token-resolved frame (variant-named border primitive, radii, elevation)
1335
- * under the merged theme style, so hand-authored fixed/variant styles from
1336
- * older themes keep winning.
1337
- */
1338
- protected readonly cardStyle: _angular_core.Signal<{
1339
- boxShadow: string;
1340
- }>;
1341
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniCardComponent, never>;
1342
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniCardComponent, "uni-card", never, {}, {}, never, ["*"], true, never>;
1343
- }
1344
-
1345
- interface UniCheckboxOptions {
1346
- size?: string | number;
1347
- borderRadius?: string | number;
1348
- /** Unchecked box background token. */
1349
- boxColor?: ColorKey;
1350
- focusRingGap?: string | number;
1351
- }
1352
-
1353
- declare class UniCheckboxComponent extends BaseComponent<UniCheckboxOptions> implements FormCheckboxControl {
1354
- readonly checked: _angular_core.ModelSignal<boolean>;
1355
- readonly disabled: _angular_core.InputSignal<boolean>;
1356
- readonly touched: _angular_core.ModelSignal<boolean>;
1357
- readonly invalid: _angular_core.InputSignal<boolean>;
1358
- readonly dirty: _angular_core.InputSignal<boolean>;
1359
- /** Synced from required() validators by the Signal Forms [field] directive. */
1360
- readonly required: _angular_core.InputSignal<boolean>;
1361
- /**
1362
- * Id(s) of external element(s) describing this control — typically your
1363
- * app-rendered error message — exposed as aria-describedby.
1364
- */
1365
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
1366
- readonly label: _angular_core.InputSignal<string>;
1367
- /**
1368
- * Mixed state for "select all"-style parent checkboxes. Cleared
1369
- * automatically on the next user interaction, matching native behavior.
1370
- */
1371
- readonly indeterminate: _angular_core.ModelSignal<boolean>;
1372
- protected readonly showError: _angular_core.Signal<boolean>;
1373
- markAsTouched(): void;
1374
- handleChange(event: Event): void;
1375
- protected readonly checkboxLabel: _angular_core.Signal<string>;
1376
- protected readonly checkboxInput: _angular_core.Signal<string>;
1377
- getThemeColor(token: ColorToken): string;
1378
- /** The content color paired with a variant fill (on-primary, on-warn, …). */
1379
- getOnColor(variant: ColorToken): string;
1380
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniCheckboxComponent, never>;
1381
- 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>;
1382
- }
1383
-
1384
- /** A commit was refused (no match); the field reverted to the committed label. */
1385
- interface UniComboboxRejection {
1386
- query: string;
1387
- }
1388
- /**
1389
- * Theme options for the `combobox` entry. Field chrome is not duplicated
1390
- * here — it comes from `input` via uni-input-box; the list trio matches
1391
- * tagInput/searchInput/timeInput. Glyphs are theme icon primitives rendered
1392
- * by `uni-icon`, so they restyle with the theme's iconography.
1393
- */
1394
- interface UniComboboxOptions {
1395
- toggleIcon?: IconName;
1396
- clearIcon?: IconName;
1397
- selectedIcon?: IconName;
1398
- listColor?: ContainerColorToken;
1399
- listShadow?: Shadow;
1400
- listBorderRadius?: Radius;
1401
- /** Active/hover option fill; the on-color pair is derived. Must contrast
1402
- with `listColor` or keyboard navigation turns invisible. */
1403
- activeColor?: ContainerColorToken;
1404
- /** Scroll height in rows — the list scrolls past this, never truncates. */
1405
- maxVisibleOptions?: number;
1406
- descriptionColor?: ContentColorToken; /** Named motion primitive for the suggestion popup's open animation.
1407
- Defaults to `popup` — the token `uni-dropdown` uses. */
1408
- motion?: Motion;
1409
- }
1410
-
1411
- /**
1412
- * Form-bound, closed-set, single-select autocomplete: `FormValueControl<T | null>`
1413
- * over object `Options<T>`, type-to-filter, commit-on-select. Typing produces a
1414
- * draft — a filter, never a value; the value changes only when an option
1415
- * commits, `clear()` runs, or the model is written from outside. Select
1416
- * semantics, not search: a real label, a chevron, no magnifier, nothing
1417
- * submits. For short lists with no need to type, prefer `uni-select` — the
1418
- * value contract is identical, so swapping is a template-only change.
1419
- */
1420
- declare class UniComboboxComponent<T> extends BaseComponent<UniComboboxOptions> implements FormValueControl<T | null> {
1421
- readonly value: _angular_core.ModelSignal<T>;
1422
- readonly disabled: _angular_core.InputSignal<boolean>;
1423
- readonly touched: _angular_core.ModelSignal<boolean>;
1424
- readonly invalid: _angular_core.InputSignal<boolean>;
1425
- readonly dirty: _angular_core.InputSignal<boolean>;
1426
- readonly required: _angular_core.InputSignal<boolean>;
1427
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
1428
- /** Accessible name for the field, e.g. "State"; echoed on the listbox. */
1429
- label: _angular_core.InputSignal<string>;
1430
- placeholder: _angular_core.InputSignal<string>;
1431
- options: _angular_core.InputSignal<Options<T>>;
1432
- /**
1433
- * Equality used to match `value` against option values, called as
1434
- * `compareWith(optionValue, value)`. Defaults to reference equality, which
1435
- * never matches an object value rebuilt from elsewhere (e.g. a saved record
1436
- * against options from a fresh fetch) — pass a key comparison like
1437
- * `(a, b) => a?.id === b?.id` for object values.
1438
- */
1439
- compareWith: _angular_core.InputSignal<(optionValue: T, value: T) => boolean>;
1440
- width: _angular_core.InputSignal<string | number>;
1441
- /** Show a ✕ while a value is set; an emptied field on blur also clears. */
1442
- clearable: _angular_core.InputSignal<boolean>;
1443
- /** Blur commits an exact-match draft; a non-matching draft reverts. */
1444
- commitOnBlur: _angular_core.InputSignal<boolean>;
1445
- /** i18n-able empty row, also announced when a filter matches nothing. */
1446
- emptyText: _angular_core.InputSignal<string>;
1447
- /** `false` renders `options` verbatim; narrow them app-side from `query`. */
1448
- filterLocally: _angular_core.InputSignal<boolean>;
1449
- /** Filter predicate; default is locale-lowercased label-contains. */
1450
- filterWith: _angular_core.InputSignal<(option: Option<T>, query: string) => boolean>;
1451
- debounceTime: _angular_core.InputSignal<number>;
1452
- /** Debounced draft text, for async option lists. */
1453
- query: _angular_core.OutputEmitterRef<string>;
1454
- /** An option committed. */
1455
- selected: _angular_core.OutputEmitterRef<Option<T>>;
1456
- cleared: _angular_core.OutputEmitterRef<void>;
1457
- /** A commit was refused (no match); the field reverted. */
1458
- rejected: _angular_core.OutputEmitterRef<UniComboboxRejection>;
1459
- private readonly host;
1460
- private readonly inputRef;
1461
- private readonly listRef;
1462
- /** Cancelled on destroy — a late tick would emit on a destroyed OutputRef. */
1463
- private queryTimer?;
1464
- /** Ties the popup to the field so the browser tracks it in the top layer. */
1465
- private readonly anchor;
1466
- /** `manual` where the top layer is usable, else null — see the popup helper. */
1467
- protected readonly popupAttr: "manual";
2677
+ title: _angular_core.InputSignal<string>;
2678
+ titleTextRole: _angular_core.InputSignal<string>;
1468
2679
  constructor();
1469
- protected readonly srOnly: string;
1470
- /** Commits, clears and refusals are otherwise silent to a screen reader. */
1471
- protected readonly announcer: _uni_design_system_uni_angular.Announcer;
1472
- /** null → the field shows the committed label; a string is an uncommitted draft. */
1473
- protected readonly draft: _angular_core.WritableSignal<string>;
2680
+ className: string;
2681
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniCardHeaderComponent, never>;
2682
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniCardHeaderComponent, "uni-card-header", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "titleTextRole": { "alias": "titleTextRole"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2683
+ }
2684
+
2685
+ /** Theme-level options for `uni-card`, resolved by token name. */
2686
+ interface UniCardOptions {
2687
+ defaultVariant?: Variant;
2688
+ /** Corner radius as a radii token. The default theme uses `xs`. */
2689
+ borderRadius?: Radius;
1474
2690
  /**
1475
- * Popup visibility. Component-owned rather than `list.open()` the shared
1476
- * signal gates on `count() > 0`, which would hide the "No matches" row and
1477
- * misreport `aria-expanded` over an empty filter.
2691
+ * Frame as a border primitive token. When unset, the card follows its
2692
+ * variant `borders.primary`, `borders.warn`, so redefining a border
2693
+ * primitive restyles every card (and every other component) sharing it.
1478
2694
  */
1479
- protected readonly popupOpen: _angular_core.WritableSignal<boolean>;
1480
- /** Index in options() of the option matching value(), else -1. */
1481
- protected readonly committedIndex: _angular_core.Signal<number>;
1482
- /** A value with no matching option renders '' but is preserved — options may
1483
- still be loading; the field self-heals when they arrive. */
1484
- protected readonly committedLabel: _angular_core.Signal<string>;
1485
- protected readonly displayValue: _angular_core.Signal<string>;
1486
- /** Indices into options() surviving the filter. The draft filters; the
1487
- committed label does not — reopening always shows the full set. */
1488
- protected readonly filteredIndices: _angular_core.Signal<number[]>;
1489
- /** Shared combobox bookkeeping, in filtered-list positions — the fourth
1490
- consumer of the contract behind search-input, tag-input and time-input. */
1491
- protected readonly list: _uni_design_system_uni_angular.ListboxNavigation;
1492
- protected readonly showError: _angular_core.Signal<boolean>;
1493
- private commit;
1494
- protected clear(): void;
2695
+ border?: Border;
2696
+ /** Optional elevation shadow token; cards are flat by default. */
2697
+ elevation?: Elevation;
2698
+ }
2699
+
2700
+ declare class UniCardComponent extends BaseComponent<UniCardOptions> {
1495
2701
  /**
1496
- * Draft resolution, used by Enter, Tab and blur:
1497
- * 1. an active option in the list commit it;
1498
- * 2. else a unique exact label match (locale-case-insensitive) → commit it;
1499
- * 3. Enter only: the filter narrowed to exactly one enabled option → commit it
1500
- * (on Enter the user can see the single candidate; on blur they're gone,
1501
- * and committing a value they never saw confirmed is how forms grow
1502
- * mystery data);
1503
- * 4. else the caller keeps the list open (Enter) or reverts (Tab/blur).
2702
+ * Token-resolved frame (variant-named border primitive, radii, elevation)
2703
+ * under the merged theme style, so hand-authored fixed/variant styles from
2704
+ * older themes keep winning.
1504
2705
  */
1505
- private resolveDraft;
1506
- private revertDraft;
1507
- private reject;
1508
- protected onKeydown(event: KeyboardEvent): void;
1509
- protected onInput(): void;
1510
- /** Click-to-browse: pointer users get the select affordance. Focus alone
1511
- never opens — Tab-through forms must not spray popups. */
1512
- protected onFieldClick(): void;
1513
- protected onToggleMousedown(event: MouseEvent): void;
1514
- protected onOptionClick(optIndex: number): void;
1515
- protected onFocusOut(event: FocusEvent): void;
1516
- /** Filtered position of the committed option when visible and enabled, else -1. */
1517
- private committedFilteredPos;
1518
- private openList;
1519
- private closeList;
1520
- private scrollToActive;
1521
- private setFieldText;
1522
- protected readonly className: _angular_core.Signal<string>;
1523
- protected readonly rowClass: _angular_core.Signal<string>;
1524
- protected readonly inputClass: _angular_core.Signal<string>;
1525
- /** Pointer-only affordance: keyboard already has ArrowDown, and the input
1526
- itself announces expanded state. */
1527
- protected readonly toggleClass: _angular_core.Signal<string>;
1528
- protected readonly listClass: _angular_core.Signal<string>;
1529
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniComboboxComponent<any>, never>;
1530
- 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>;
2706
+ protected readonly cardStyle: _angular_core.Signal<{
2707
+ boxShadow: string;
2708
+ }>;
2709
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniCardComponent, never>;
2710
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniCardComponent, "uni-card", never, {}, {}, never, ["*"], true, never>;
1531
2711
  }
1532
2712
 
1533
2713
  interface UniDataSearchOptions {
@@ -1554,252 +2734,72 @@ declare class UniDataSearchComponent<T> extends BaseComponent<UniDataSearchOptio
1554
2734
  interface ColumnDefinition<T> {
1555
2735
  columnDef: keyof T;
1556
2736
  header: string;
1557
- cell?: (element: T) => string;
1558
- isSticky?: boolean;
1559
- template?: TemplateRef<T>;
1560
- textAlign?: 'left' | 'right' | 'center';
1561
- }
1562
- interface UniDataTableOptions {
1563
- border?: Border;
1564
- borderRadius?: Radius;
1565
- color?: ContainerColorToken;
1566
- elevation?: Elevation;
1567
- headerPadding?: NullableSize;
1568
- footerPadding?: NullableSize;
1569
- headerColor?: ContainerColorToken;
1570
- footerColor?: ContainerColorToken;
1571
- cellPadding?: NullableSize;
1572
- rowHoverColor?: ContainerColorToken;
1573
- thTextRole: TextRole;
1574
- thColor?: ContainerColorToken;
1575
- thPadding?: NullableSize;
1576
- thHorizontalBorder?: Border;
1577
- thVerticalBorder?: Border;
1578
- tdTextRole: TextRole;
1579
- tdColor?: ContainerColorToken;
1580
- tdStickyColor?: ContainerColorToken;
1581
- tdPadding?: NullableSize;
1582
- tdHorizontalBorder?: Border;
1583
- tdVerticalBorder?: Border;
1584
- loadingOverlayColor?: ColorKey;
1585
- loadingSpinnerColor?: ColorKey;
1586
- loadingSpinnerSize?: string | number;
1587
- }
1588
-
1589
- declare class UniDataTableComponent<T> extends BaseComponent<UniDataTableOptions> {
1590
- datasource: _angular_core.InputSignal<UniDatasource<T>>;
1591
- columns: _angular_core.InputSignal<ColumnDefinition<T>[]>;
1592
- detailRowTemplate: _angular_core.InputSignal<TemplateRef<{
1593
- $implicit: T;
1594
- index: number;
1595
- }>>;
1596
- expandedIndex: _angular_core.WritableSignal<number>;
1597
- useMultiSelect: _angular_core.InputSignal<boolean>;
1598
- useRowClick: _angular_core.InputSignal<boolean>;
1599
- highlight?: _angular_core.InputSignal<(row: T) => boolean>;
1600
- height: _angular_core.InputSignal<string>;
1601
- scrollable: _angular_core.WritableSignal<boolean>;
1602
- loadingOverlayClass: string;
1603
- rowSelect: _angular_core.OutputEmitterRef<T>;
1604
- rowClick: _angular_core.OutputEmitterRef<T>;
1605
- protected readonly tableClass: _angular_core.Signal<string>;
1606
- protected readonly headerClass: _angular_core.Signal<string>;
1607
- protected readonly footerClass: _angular_core.Signal<string>;
1608
- protected readonly thClass: _angular_core.Signal<string>;
1609
- protected readonly tdClass: _angular_core.Signal<string>;
1610
- protected readonly trClass: _angular_core.Signal<string>;
1611
- protected readonly detailRowClass: _angular_core.Signal<string>;
1612
- isLoading: _angular_core.WritableSignal<boolean>;
1613
- toggleRow(index: number): void;
1614
- handleRowClick(row: T, index: number): void;
1615
- /** aria-sort value for a column header, or null when the column is unsorted. */
1616
- protected ariaSort(column: ColumnDefinition<T>): 'ascending' | 'descending' | null;
1617
- isHighlighted(row: T): boolean;
1618
- protected readonly String: StringConstructor;
1619
- handleScrollable(scrollable: boolean): void;
1620
- getBorder(name: string | undefined): string;
1621
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniDataTableComponent<any>, never>;
1622
- 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>;
1623
- }
1624
-
1625
- /** Why typed text did not become a date. The raw text stays in the field. */
1626
- interface UniDateInputRejection {
1627
- raw: string;
1628
- reason: 'unparseable' | 'out-of-range' | 'disabled';
1629
- }
1630
- /**
1631
- * Theme options for the `dateInput` entry. Field chrome is not duplicated
1632
- * here — it comes from `input` via uni-input-box; these style the popup
1633
- * affordance and panel only.
1634
- */
1635
- interface UniDateInputOptions {
1636
- toggleSymbol?: string;
1637
- popupShadow?: Shadow;
1638
- popupBorderRadius?: Radius;
1639
- popupColor?: ContainerColorToken;
1640
- }
1641
-
1642
- /**
1643
- * Date field with free-typed parsing and a popup calendar. Type `aug 20`,
1644
- * `8/20/2026` or `2026-08-20`, or pick from the grid — the form gets the
1645
- * same canonical `'YYYY-MM-DD'` string either way. Parsing is `Intl`-driven
1646
- * (locale digit order and month names, never hardcoded); unreadable text
1647
- * stays in the field, flagged, with a `rejected` event. The popup is a
1648
- * native popover hosting the same `uni-calendar` an app could render inline.
1649
- */
1650
- declare class UniDateInputComponent extends BaseComponent<UniDateInputOptions> implements FormValueControl<UniDate | undefined> {
1651
- readonly value: _angular_core.ModelSignal<string>;
1652
- readonly disabled: _angular_core.InputSignal<boolean>;
1653
- readonly touched: _angular_core.ModelSignal<boolean>;
1654
- readonly invalid: _angular_core.InputSignal<boolean>;
1655
- readonly dirty: _angular_core.InputSignal<boolean>;
1656
- readonly required: _angular_core.InputSignal<boolean>;
1657
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
1658
- /** Accessible name for the field, e.g. "Appointment date". */
1659
- label: _angular_core.InputSignal<string>;
1660
- /** Defaults to the locale's digit pattern, e.g. `MM/DD/YYYY`. */
1661
- placeholder: _angular_core.InputSignal<string>;
1662
- /** How the committed value renders, e.g. `{ dateStyle: 'long' }`. */
1663
- displayFormat: _angular_core.InputSignal<Intl.DateTimeFormatOptions>;
1664
- /** BCP 47 tag; defaults to the document language, then the browser's. */
1665
- locale: _angular_core.InputSignal<string>;
1666
- commitOnBlur: _angular_core.InputSignal<boolean>;
1667
- /** Custom parser, replacing the built-in ISO/locale/month-name parsing. */
1668
- parse: _angular_core.InputSignal<(raw: string, locale: string) => UniDate | null>;
1669
- /** Renders without its own input-box chrome, for composers like uni-date-time-input. */
1670
- embedded: _angular_core.InputSignal<boolean>;
1671
- minDate: _angular_core.InputSignal<string>;
1672
- maxDate: _angular_core.InputSignal<string>;
1673
- disabledDates: _angular_core.InputSignal<string[] | ((date: UniDate) => boolean)>;
1674
- markers: _angular_core.InputSignal<UniCalendarMarker[]>;
1675
- weekStart: _angular_core.InputSignal<0 | 1 | 2 | 3 | 4 | 6 | 5>;
1676
- /** Popup shown. */
1677
- opened: _angular_core.OutputEmitterRef<void>;
1678
- /** Popup hidden. */
1679
- closed: _angular_core.OutputEmitterRef<void>;
1680
- /** A typed commit was refused; the raw text stays in the field. */
1681
- rejected: _angular_core.OutputEmitterRef<UniDateInputRejection>;
1682
- private readonly host;
1683
- private readonly inputRef;
1684
- private readonly toggleRef;
1685
- private readonly popupRef;
1686
- private readonly dropdown;
1687
- private readonly calendar;
1688
- protected readonly srOnly: string;
1689
- /** A refused commit — styles the field and sets aria-invalid until edited. */
1690
- protected readonly draftInvalid: _angular_core.WritableSignal<boolean>;
1691
- /** Commits, clears and refusals are otherwise silent to a screen reader. */
1692
- protected readonly announcer: _uni_design_system_uni_angular.Announcer;
1693
- protected readonly toggleElement: _angular_core.Signal<any>;
1694
- protected readonly popupOpen: _angular_core.Signal<boolean>;
1695
- protected readonly resolvedLocale: _angular_core.Signal<string>;
1696
- protected readonly displayText: _angular_core.Signal<string>;
1697
- protected readonly resolvedPlaceholder: _angular_core.Signal<string>;
1698
- protected readonly showError: _angular_core.Signal<boolean>;
1699
- protected readonly toggleLabel: _angular_core.Signal<string>;
1700
- private fullDate;
1701
- private isDayBlocked;
1702
- protected setValue(date: UniDate | undefined, silent?: boolean): void;
1703
- private refuse;
1704
- protected commit(raw: string): boolean;
1705
- /** Step a committed value ±1 day, skipping blocked days, stopping at fences. */
1706
- private step;
1707
- protected onInputKeydown(event: KeyboardEvent): void;
1708
- protected onInput(): void;
1709
- protected onFocusOut(event: FocusEvent): void;
1710
- protected openPopup(): void;
1711
- protected closePopup(): void;
1712
- protected onPopupShowing(): void;
1713
- protected onPopupHiding(): void;
1714
- protected onCalendarPick(date: UniDate): void;
1715
- /** The popup is a focus-holding dialog: Tab cycles inside it (APG pattern). */
1716
- protected onPopupKeydown(event: KeyboardEvent): void;
1717
- private setFieldText;
1718
- protected readonly className: _angular_core.Signal<string>;
1719
- protected readonly rowClass: _angular_core.Signal<string>;
1720
- protected readonly inputClass: _angular_core.Signal<string>;
1721
- protected readonly toggleWrapClass: _angular_core.Signal<string>;
1722
- /** Embedded mode: the composer owns the box; keep only the flex row. */
1723
- protected readonly embeddedClass: _angular_core.Signal<string>;
1724
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniDateInputComponent, never>;
1725
- 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>;
2737
+ cell?: (element: T) => string;
2738
+ isSticky?: boolean;
2739
+ template?: TemplateRef<T>;
2740
+ textAlign?: 'left' | 'right' | 'center';
1726
2741
  }
1727
-
1728
- /**
1729
- * Theme options for the `dateTimeInput` entry. Field chrome comes from
1730
- * `input` via the single shared uni-input-box; these style the seam between
1731
- * the two parts.
1732
- */
1733
- interface UniDateTimeInputOptions {
1734
- /** Space between the date part, the divider, and the time part. */
1735
- partGap?: NullableSize;
1736
- dividerColor?: ColorToken;
2742
+ interface UniDataTableOptions {
2743
+ border?: Border;
2744
+ borderRadius?: Radius;
2745
+ color?: ContainerColorToken;
2746
+ elevation?: Elevation;
2747
+ headerPadding?: NullableSize;
2748
+ footerPadding?: NullableSize;
2749
+ headerColor?: ContainerColorToken;
2750
+ footerColor?: ContainerColorToken;
2751
+ cellPadding?: NullableSize;
2752
+ rowHoverColor?: ContainerColorToken;
2753
+ thTextRole: TextRole;
2754
+ thColor?: ContainerColorToken;
2755
+ thPadding?: NullableSize;
2756
+ thHorizontalBorder?: Border;
2757
+ thVerticalBorder?: Border;
2758
+ tdTextRole: TextRole;
2759
+ tdColor?: ContainerColorToken;
2760
+ tdStickyColor?: ContainerColorToken;
2761
+ tdPadding?: NullableSize;
2762
+ tdHorizontalBorder?: Border;
2763
+ tdVerticalBorder?: Border;
2764
+ loadingOverlayColor?: ColorKey;
2765
+ loadingSpinnerColor?: ColorKey;
2766
+ loadingSpinnerSize?: string | number;
1737
2767
  }
1738
2768
 
1739
- /**
1740
- * One field for a date and a time: a thin composer seating a uni-date-input
1741
- * and a uni-time-input in one input-box chrome under one label, yielding one
1742
- * combined `'YYYY-MM-DDTHH:mm'` value. The value emits only when both parts
1743
- * are set — a time without a day is not an answer — and clearing the date
1744
- * clears it. With `slotsFor`, the time part stays disabled until a day is
1745
- * chosen and offers exactly that day's slots: the scheduling flow in one
1746
- * attribute. Two honest tab stops (it is two questions); apps needing a
1747
- * different arrangement compose the primitives directly.
1748
- */
1749
- declare class UniDateTimeInputComponent extends BaseComponent<UniDateTimeInputOptions> implements FormValueControl<UniDateTime | undefined> {
1750
- readonly value: _angular_core.ModelSignal<string>;
1751
- readonly disabled: _angular_core.InputSignal<boolean>;
1752
- readonly touched: _angular_core.ModelSignal<boolean>;
1753
- readonly invalid: _angular_core.InputSignal<boolean>;
1754
- readonly dirty: _angular_core.InputSignal<boolean>;
1755
- readonly required: _angular_core.InputSignal<boolean>;
1756
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
1757
- /** Names the group; the parts are announced as "Date" and "Time" under it. */
1758
- label: _angular_core.InputSignal<string>;
1759
- /** Earliest allowed moment; the date and time fences are split from it. */
1760
- minDateTime: _angular_core.InputSignal<string>;
1761
- /** Latest allowed moment; the date and time fences are split from it. */
1762
- maxDateTime: _angular_core.InputSignal<string>;
1763
- disabledDates: _angular_core.InputSignal<string[] | ((date: UniDate) => boolean)>;
1764
- markers: _angular_core.InputSignal<UniCalendarMarker[]>;
1765
- /** Fixed time choices; superseded per-day by `slotsFor` when that is set. */
1766
- slots: _angular_core.InputSignal<string[]>;
1767
- minuteStep: _angular_core.InputSignal<number>;
1768
- hour12: _angular_core.InputSignal<boolean>;
1769
- weekStart: _angular_core.InputSignal<0 | 1 | 2 | 3 | 4 | 6 | 5>;
1770
- locale: _angular_core.InputSignal<string>;
1771
- /** Scheduling: the day's available times. Gates the time part on a date. */
1772
- slotsFor: _angular_core.InputSignal<(date: UniDate) => UniTime[]>;
1773
- private readonly host;
1774
- /**
1775
- * The two part-values. An external `value` write re-derives both; an
1776
- * internal partial state (a date without a time round-trips through
1777
- * `undefined`) must not be wiped by its own echo.
1778
- */
1779
- private readonly parts;
1780
- protected readonly dateValue: _angular_core.Signal<string>;
1781
- protected readonly timeValue: _angular_core.Signal<string>;
1782
- protected readonly showError: _angular_core.Signal<boolean>;
1783
- private readonly minParts;
1784
- private readonly maxParts;
1785
- protected readonly dateMin: _angular_core.Signal<string>;
1786
- protected readonly dateMax: _angular_core.Signal<string>;
1787
- protected readonly timeMin: _angular_core.Signal<string>;
1788
- protected readonly timeMax: _angular_core.Signal<string>;
1789
- /** The chosen day's slots when `slotsFor` is set, else the fixed list. */
1790
- protected readonly effectiveSlots: _angular_core.Signal<string[]>;
1791
- protected readonly timeDisabled: _angular_core.Signal<boolean>;
1792
- protected onDatePartChange(date: UniDate | undefined): void;
1793
- protected onTimePartChange(time: UniTime | undefined): void;
1794
- private setParts;
1795
- protected onHostFocusOut(event: FocusEvent): void;
1796
- protected readonly className: _angular_core.Signal<string>;
1797
- protected readonly groupClass: _angular_core.Signal<string>;
1798
- protected readonly datePartClass: _angular_core.Signal<string>;
1799
- protected readonly timePartClass: _angular_core.Signal<string>;
1800
- protected readonly dividerClass: _angular_core.Signal<string>;
1801
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniDateTimeInputComponent, never>;
1802
- 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>;
2769
+ declare class UniDataTableComponent<T> extends BaseComponent<UniDataTableOptions> {
2770
+ datasource: _angular_core.InputSignal<UniDatasource<T>>;
2771
+ columns: _angular_core.InputSignal<ColumnDefinition<T>[]>;
2772
+ detailRowTemplate: _angular_core.InputSignal<TemplateRef<{
2773
+ $implicit: T;
2774
+ index: number;
2775
+ }>>;
2776
+ expandedIndex: _angular_core.WritableSignal<number>;
2777
+ useMultiSelect: _angular_core.InputSignal<boolean>;
2778
+ useRowClick: _angular_core.InputSignal<boolean>;
2779
+ highlight?: _angular_core.InputSignal<(row: T) => boolean>;
2780
+ height: _angular_core.InputSignal<string>;
2781
+ scrollable: _angular_core.WritableSignal<boolean>;
2782
+ loadingOverlayClass: string;
2783
+ rowSelect: _angular_core.OutputEmitterRef<T>;
2784
+ rowClick: _angular_core.OutputEmitterRef<T>;
2785
+ protected readonly tableClass: _angular_core.Signal<string>;
2786
+ protected readonly headerClass: _angular_core.Signal<string>;
2787
+ protected readonly footerClass: _angular_core.Signal<string>;
2788
+ protected readonly thClass: _angular_core.Signal<string>;
2789
+ protected readonly tdClass: _angular_core.Signal<string>;
2790
+ protected readonly trClass: _angular_core.Signal<string>;
2791
+ protected readonly detailRowClass: _angular_core.Signal<string>;
2792
+ isLoading: _angular_core.WritableSignal<boolean>;
2793
+ toggleRow(index: number): void;
2794
+ handleRowClick(row: T, index: number): void;
2795
+ /** aria-sort value for a column header, or null when the column is unsorted. */
2796
+ protected ariaSort(column: ColumnDefinition<T>): 'ascending' | 'descending' | null;
2797
+ isHighlighted(row: T): boolean;
2798
+ protected readonly String: StringConstructor;
2799
+ handleScrollable(scrollable: boolean): void;
2800
+ getBorder(name: string | undefined): string;
2801
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniDataTableComponent<any>, never>;
2802
+ 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>;
1803
2803
  }
1804
2804
 
1805
2805
  /**
@@ -2021,7 +3021,8 @@ declare class UniDropdownComponent extends BaseComponent<UniDropdownOptions> imp
2021
3021
  border: _angular_core.InputSignal<string>;
2022
3022
  borderRadius: _angular_core.InputSignal<string>;
2023
3023
  shadow: _angular_core.InputSignal<string>;
2024
- color: _angular_core.InputSignal<ContainerColorToken>;
3024
+ /** A container color pair; `color` belongs to `uni-text` across the library. */
3025
+ containerColor: _angular_core.InputSignal<ContainerColorToken>;
2025
3026
  dropdownShowing: _angular_core.OutputEmitterRef<boolean>;
2026
3027
  dropdownHiding: _angular_core.OutputEmitterRef<boolean>;
2027
3028
  dropdownRef: ElementRef<HTMLDivElement>;
@@ -2044,7 +3045,7 @@ declare class UniDropdownComponent extends BaseComponent<UniDropdownOptions> imp
2044
3045
  hideDropdown(): void;
2045
3046
  ngOnDestroy(): void;
2046
3047
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniDropdownComponent, never>;
2047
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDropdownComponent, "uni-dropdown", never, { "trigger": { "alias": "trigger"; "required": true; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "offset": { "alias": "offset"; "required": false; "isSignal": true; }; "ariaHasPopup": { "alias": "ariaHasPopup"; "required": false; "isSignal": true; }; "paddingVertical": { "alias": "paddingVertical"; "required": false; "isSignal": true; }; "paddingHorizontal": { "alias": "paddingHorizontal"; "required": false; "isSignal": true; }; "border": { "alias": "border"; "required": false; "isSignal": true; }; "borderRadius": { "alias": "borderRadius"; "required": false; "isSignal": true; }; "shadow": { "alias": "shadow"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; }, { "dropdownShowing": "dropdownShowing"; "dropdownHiding": "dropdownHiding"; }, never, ["*"], true, never>;
3048
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDropdownComponent, "uni-dropdown", never, { "trigger": { "alias": "trigger"; "required": true; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "offset": { "alias": "offset"; "required": false; "isSignal": true; }; "ariaHasPopup": { "alias": "ariaHasPopup"; "required": false; "isSignal": true; }; "paddingVertical": { "alias": "paddingVertical"; "required": false; "isSignal": true; }; "paddingHorizontal": { "alias": "paddingHorizontal"; "required": false; "isSignal": true; }; "border": { "alias": "border"; "required": false; "isSignal": true; }; "borderRadius": { "alias": "borderRadius"; "required": false; "isSignal": true; }; "shadow": { "alias": "shadow"; "required": false; "isSignal": true; }; "containerColor": { "alias": "containerColor"; "required": false; "isSignal": true; }; }, { "dropdownShowing": "dropdownShowing"; "dropdownHiding": "dropdownHiding"; }, never, ["*"], true, never>;
2048
3049
  }
2049
3050
 
2050
3051
  /** Theme-level options for `uni-expand`. */
@@ -2058,14 +3059,6 @@ interface UniExpandOptions {
2058
3059
  * reads the same token so trigger and region move on one clock.
2059
3060
  */
2060
3061
  motion?: Motion;
2061
- /**
2062
- * Base reveal/collapse duration in seconds.
2063
- *
2064
- * @deprecated Use `motion` and retime the `reveal` token instead — one edit
2065
- * covers the region and its toggle together. Still honoured when set, and
2066
- * wins over `motion`, so existing themes are unaffected. Removed next major.
2067
- */
2068
- transitionSpeed?: number;
2069
3062
  }
2070
3063
 
2071
3064
  declare class UniExpandComponent extends BaseComponent<UniExpandOptions> {
@@ -2108,9 +3101,8 @@ declare class UniExpandComponent extends BaseComponent<UniExpandOptions> {
2108
3101
  */
2109
3102
  readonly duration: _angular_core.Signal<number>;
2110
3103
  /**
2111
- * Base speed in seconds, before the size-aware scaling above. The
2112
- * deprecated `transitionSpeed` option wins when a theme still sets it;
2113
- * otherwise the `motion` token's duration (ms) converts to seconds.
3104
+ * Base speed in seconds, before the size-aware scaling above: the `motion`
3105
+ * token's duration (ms) converted to seconds.
2114
3106
  */
2115
3107
  private readonly baseSpeed;
2116
3108
  /** Curve for the reveal, from the same token as the speed. */
@@ -2241,41 +3233,6 @@ declare class UniFileDropZoneComponent {
2241
3233
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniFileDropZoneComponent, "uni-file-drop-zone", never, { "height": { "alias": "height"; "required": false; "isSignal": true; }; "borderRadius": { "alias": "borderRadius"; "required": false; "isSignal": true; }; "border": { "alias": "border"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; "useBrowseButton": { "alias": "useBrowseButton"; "required": false; "isSignal": true; }; "browseButtonText": { "alias": "browseButtonText"; "required": false; "isSignal": true; }; "allowedFileExtensions": { "alias": "allowedFileExtensions"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helpTemplate": { "alias": "helpTemplate"; "required": false; "isSignal": true; }; "helpTemplateContext": { "alias": "helpTemplateContext"; "required": false; "isSignal": true; }; }, { "fileAttached": "fileAttached"; "fileRemoved": "fileRemoved"; }, never, never, true, never>;
2242
3234
  }
2243
3235
 
2244
- /**
2245
- * Text input that emits `change` only after the user pauses typing. Wears the
2246
- * shared input chrome (themed color, border, typeface, focus ring) via
2247
- * `uni-input-box`; project adornments with the `pre-input` / `post-input`
2248
- * slots, matching `uni-input`'s convention. The ARIA passthrough inputs let a
2249
- * wrapping composite (e.g. SearchInput's combobox) annotate the real input
2250
- * element.
2251
- */
2252
- declare class UniDebounceInputComponent {
2253
- inputName: _angular_core.InputSignal<string>;
2254
- inputId: _angular_core.InputSignal<string>;
2255
- debounceTime: _angular_core.InputSignal<number>;
2256
- /** Accessible name for the input. */
2257
- label: _angular_core.InputSignal<string>;
2258
- placeholder: _angular_core.InputSignal<string>;
2259
- disabled: _angular_core.InputSignal<boolean>;
2260
- role: _angular_core.InputSignal<string>;
2261
- ariaExpanded: _angular_core.InputSignal<boolean>;
2262
- ariaControls: _angular_core.InputSignal<string>;
2263
- ariaActivedescendant: _angular_core.InputSignal<string>;
2264
- change: _angular_core.OutputEmitterRef<string>;
2265
- value: _angular_core.WritableSignal<string>;
2266
- private readonly inputElement;
2267
- private timeoutId;
2268
- private lastEmitted;
2269
- constructor();
2270
- handleInput(event: Event): void;
2271
- /** Empty the field immediately, cancelling any pending emit. */
2272
- clear(): void;
2273
- focus(): void;
2274
- inputClass: string;
2275
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniDebounceInputComponent, never>;
2276
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDebounceInputComponent, "uni-debounce-input", never, { "inputName": { "alias": "inputName"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "debounceTime": { "alias": "debounceTime"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "role": { "alias": "role"; "required": false; "isSignal": true; }; "ariaExpanded": { "alias": "ariaExpanded"; "required": false; "isSignal": true; }; "ariaControls": { "alias": "ariaControls"; "required": false; "isSignal": true; }; "ariaActivedescendant": { "alias": "ariaActivedescendant"; "required": false; "isSignal": true; }; }, { "change": "change"; }, never, ["[pre-input]", "[post-input]"], true, never>;
2277
- }
2278
-
2279
3236
  /**
2280
3237
  * Whether the browser can keep a top-layer popup attached to its field.
2281
3238
  *
@@ -2403,96 +3360,27 @@ declare class UniIconButtonComponent {
2403
3360
  * (`<button icon-button>Close</button>`); one of the two is required for
2404
3361
  * an icon-only button to be announced correctly.
2405
3362
  */
2406
- ariaLabel: _angular_core.InputSignal<string>;
2407
- iconName: _angular_core.InputSignal<IconName>;
2408
- symbolName: _angular_core.InputSignal<string>;
2409
- variant: _angular_core.InputSignal<Variant>;
2410
- size: _angular_core.InputSignal<Size>;
2411
- disable: _angular_core.InputSignal<boolean>;
2412
- loading: _angular_core.InputSignal<boolean>;
2413
- opticalSize: _angular_core.InputSignal<number>;
2414
- protected readonly srOnlyClass: string;
2415
- /**
2416
- * Sizes `iconName` from the size token's `fontSize`, the same value that sizes
2417
- * a `symbolName` ligature — so the two paths render the same glyph size and
2418
- * `symbolName` → `iconName` is a like-for-like swap. Without it a masked icon
2419
- * fills the whole button box, since the base size tokens carry no padding.
2420
- * Themes that do use padding (Carbon) set a matching `fontSize`, so they land
2421
- * on the same glyph either way.
2422
- */
2423
- protected readonly glyphSize: _angular_core.Signal<string | number>;
2424
- protected readonly className: _angular_core.Signal<string>;
2425
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniIconButtonComponent, never>;
2426
- 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: {}; }]>;
2427
- }
2428
-
2429
- declare class UniInputComponent implements FormValueControl<string> {
2430
- readonly value: _angular_core.ModelSignal<string>;
2431
- readonly disabled: _angular_core.InputSignal<boolean>;
2432
- readonly touched: _angular_core.ModelSignal<boolean>;
2433
- readonly invalid: _angular_core.InputSignal<boolean>;
2434
- readonly dirty: _angular_core.InputSignal<boolean>;
2435
- /** Synced from required() validators by the Signal Forms [field] directive. */
2436
- readonly required: _angular_core.InputSignal<boolean>;
2437
- /**
2438
- * Id(s) of external element(s) describing this control — typically your
2439
- * app-rendered error message — exposed as aria-describedby.
2440
- */
2441
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
2442
- label: _angular_core.InputSignal<string>;
2443
- placeholder: _angular_core.InputSignal<string>;
2444
- protected readonly showError: _angular_core.Signal<boolean>;
2445
- markAsTouched(): void;
2446
- handleInput(event: Event): void;
2447
- inputClass: string;
2448
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniInputComponent, never>;
2449
- 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; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, ["pre-input", "post-input"], true, never>;
2450
- }
2451
-
2452
- interface UniInputBoxOptions {
2453
- color: ContainerColorToken;
2454
- disabledColor: ContainerColorToken;
2455
- errorColor: ContainerColorToken;
2456
- border: Border;
2457
- errorBorder: Border;
2458
- borderRadius: Radius;
2459
- /**
2460
- * @deprecated Never read by `uni-input-box` — setting it has no effect and
2461
- * never had. Optional now, removed next major.
2462
- */
2463
- transitionSpeed?: number;
2464
- shadow?: Shadow;
2465
- errorShadow?: Shadow;
2466
- height?: string | number;
2467
- paddingLeft: OptionalSize;
2468
- typeface?: Typeface;
2469
- /** @deprecated Use `typeface` (matching tooltip/button/tabs casing). */
2470
- typeFace?: Typeface;
2471
- textColor: ColorKey;
2472
- disabledTextColor: ColorKey;
2473
- focusOutline: string;
2474
- focusOutlineOffset: number;
2475
- /** Border swapped in while an inner control has focus (default: keep `border`). */
2476
- focusBorder?: Border;
2477
- /** Ring shown while focused, e.g. a soft `0 0 0 3px` spread shadow. */
2478
- focusShadow?: Shadow;
2479
- /** Background swapped in while focused (default: keep `color`). */
2480
- focusColor?: ContainerColorToken;
2481
- }
2482
-
2483
- declare class UniInputBoxComponent extends BaseComponent<UniInputBoxOptions> {
2484
- protected readonly className: string;
2485
- disabled: _angular_core.InputSignal<boolean>;
2486
- error: _angular_core.InputSignal<boolean>;
2487
- minWidth: _angular_core.InputSignal<string>;
2488
- /** Override the themed field height, e.g. `'auto'` for multi-line fields. */
2489
- height: _angular_core.InputSignal<string | number>;
2490
- protected readonly color: _angular_core.Signal<_uni_design_system_uni_core.ContainerColorToken>;
2491
- protected readonly border: _angular_core.Signal<string>;
2492
- protected readonly shadow: _angular_core.Signal<string>;
2493
- protected readonly inputBoxClass: _angular_core.Signal<string>;
2494
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniInputBoxComponent, never>;
2495
- 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; }; }, {}, never, ["*"], true, never>;
3363
+ ariaLabel: _angular_core.InputSignal<string>;
3364
+ iconName: _angular_core.InputSignal<IconName>;
3365
+ symbolName: _angular_core.InputSignal<string>;
3366
+ variant: _angular_core.InputSignal<Variant>;
3367
+ size: _angular_core.InputSignal<Size>;
3368
+ disable: _angular_core.InputSignal<boolean>;
3369
+ loading: _angular_core.InputSignal<boolean>;
3370
+ opticalSize: _angular_core.InputSignal<number>;
3371
+ protected readonly srOnlyClass: string;
3372
+ /**
3373
+ * Sizes `iconName` from the size token's `fontSize`, the same value that sizes
3374
+ * a `symbolName` ligature — so the two paths render the same glyph size and
3375
+ * `symbolName` → `iconName` is a like-for-like swap. Without it a masked icon
3376
+ * fills the whole button box, since the base size tokens carry no padding.
3377
+ * Themes that do use padding (Carbon) set a matching `fontSize`, so they land
3378
+ * on the same glyph either way.
3379
+ */
3380
+ protected readonly glyphSize: _angular_core.Signal<string | number>;
3381
+ protected readonly className: _angular_core.Signal<string>;
3382
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniIconButtonComponent, never>;
3383
+ 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: {}; }]>;
2496
3384
  }
2497
3385
 
2498
3386
  declare class UniJsonViewComponent {
@@ -2508,137 +3396,6 @@ declare class UniJsonViewComponent {
2508
3396
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniJsonViewComponent, "uni-json-view", never, { "json": { "alias": "json"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "fontSize": { "alias": "fontSize"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "selectOnClick": { "alias": "selectOnClick"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2509
3397
  }
2510
3398
 
2511
- /**
2512
- * The base layout primitive, applied as an attribute to any element so
2513
- * semantics stay yours: `<main box-layout [grow]="1" padding="md">`.
2514
- * Exception: other components' host elements (`<uni-card box-layout>` would
2515
- * put two components on one element) — wrap those in a `<div box-layout>`.
2516
- *
2517
- * Sizing convention (height/width/min/max/inset): a **number is px and needs
2518
- * a binding** — `[height]="420"`; a **plain attribute is a CSS length
2519
- * string** — `height="420px"`. Spacing/radius/color inputs take theme tokens.
2520
- */
2521
- declare class UniBoxComponent {
2522
- theme: ThemeService;
2523
- color: _angular_core.InputSignal<ContainerColorToken>;
2524
- backgroundColor: _angular_core.InputSignal<string>;
2525
- borderRadius: _angular_core.InputSignal<string>;
2526
- borderRadiusLeft: _angular_core.InputSignal<string>;
2527
- borderRadiusRight: _angular_core.InputSignal<string>;
2528
- borderRadiusTop: _angular_core.InputSignal<string>;
2529
- borderRadiusBottom: _angular_core.InputSignal<string>;
2530
- padding: _angular_core.InputSignal<OptionalSize>;
2531
- paddingHorizontal: _angular_core.InputSignal<OptionalSize>;
2532
- paddingVertical: _angular_core.InputSignal<OptionalSize>;
2533
- paddingLeft: _angular_core.InputSignal<OptionalSize>;
2534
- paddingRight: _angular_core.InputSignal<OptionalSize>;
2535
- paddingTop: _angular_core.InputSignal<OptionalSize>;
2536
- paddingBottom: _angular_core.InputSignal<OptionalSize>;
2537
- border: _angular_core.InputSignal<string>;
2538
- borderTop: _angular_core.InputSignal<string>;
2539
- borderBottom: _angular_core.InputSignal<string>;
2540
- borderLeft: _angular_core.InputSignal<string>;
2541
- borderRight: _angular_core.InputSignal<string>;
2542
- dashBorder: _angular_core.InputSignal<boolean>;
2543
- alignSelf: _angular_core.InputSignal<OptionalAlignSelf>;
2544
- alignItems: _angular_core.InputSignal<OptionalAlignItems>;
2545
- alignContent: _angular_core.InputSignal<OptionalAlignContent>;
2546
- justifyContent: _angular_core.InputSignal<OptionalJustifyContent>;
2547
- grow: _angular_core.InputSignal<number>;
2548
- display: _angular_core.InputSignal<OptionalDisplay>;
2549
- position: _angular_core.InputSignal<OptionalPosition>;
2550
- inset: _angular_core.InputSignal<string | number>;
2551
- /** Number = px via binding (`[height]="420"`); string = CSS length (`height="420px"`). */
2552
- height: _angular_core.InputSignal<string | number>;
2553
- minHeight: _angular_core.InputSignal<string | number>;
2554
- maxHeight: _angular_core.InputSignal<string | number>;
2555
- /** Number = px via binding (`[width]="420"`); string = CSS length (`width="50%"`). */
2556
- width: _angular_core.InputSignal<string | number>;
2557
- minWidth: _angular_core.InputSignal<string | number>;
2558
- maxWidth: _angular_core.InputSignal<string | number>;
2559
- ignoreDir: _angular_core.InputSignal<boolean>;
2560
- gridArea: _angular_core.InputSignal<string>;
2561
- gridColumn: _angular_core.InputSignal<string>;
2562
- gridRow: _angular_core.InputSignal<string>;
2563
- overflow: _angular_core.InputSignal<OptionalOverflow>;
2564
- elevation: _angular_core.InputSignal<string>;
2565
- shadow: _angular_core.InputSignal<string>;
2566
- gap: _angular_core.InputSignal<OptionalSize>;
2567
- fullWidth: _angular_core.InputSignal<boolean>;
2568
- fullHeight: _angular_core.InputSignal<boolean>;
2569
- flexDirection: _angular_core.InputSignal<OptionalFlexDirection>;
2570
- textAlign: _angular_core.InputSignal<OptionalTextAlign>;
2571
- wrapItems: _angular_core.InputSignal<OptionalWrap>;
2572
- zIndex: _angular_core.InputSignal<ZIndexableElements>;
2573
- protected readonly boxClassName: _angular_core.Signal<string>;
2574
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniBoxComponent, never>;
2575
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniBoxComponent, "[uni-box-layout], [box-layout]", never, { "color": { "alias": "color"; "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; }; "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; }; "elevation": { "alias": "elevation"; "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, ["*"], true, never>;
2576
- }
2577
-
2578
- declare class UniCenterComponent extends UniBoxComponent {
2579
- display: _angular_core.InputSignal<OptionalDisplay>;
2580
- justifyContent: _angular_core.InputSignal<OptionalJustifyContent>;
2581
- alignItems: _angular_core.InputSignal<OptionalAlignItems>;
2582
- constructor();
2583
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniCenterComponent, never>;
2584
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniCenterComponent, "[uni-center-layout], [center-layout]", never, { "display": { "alias": "display"; "required": false; "isSignal": true; }; "justifyContent": { "alias": "justifyContent"; "required": false; "isSignal": true; }; "alignItems": { "alias": "alignItems"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2585
- }
2586
-
2587
- declare class UniGridAreaComponent {
2588
- area: _angular_core.InputSignal<string>;
2589
- protected readonly className: _angular_core.Signal<string>;
2590
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniGridAreaComponent, never>;
2591
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniGridAreaComponent, "[uni-grid-area-layout], [grid-area-layout]", never, { "area": { "alias": "area"; "required": true; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2592
- }
2593
-
2594
- declare class UniGridComponent extends UniBoxComponent {
2595
- display: _angular_core.InputSignal<OptionalDisplay>;
2596
- templateAreas: _angular_core.InputSignal<string>;
2597
- templateColumns: _angular_core.InputSignal<string>;
2598
- templateRows: _angular_core.InputSignal<string>;
2599
- outline: _angular_core.InputSignal<Thickness>;
2600
- outlineColor: _angular_core.InputSignal<Variant>;
2601
- protected readonly gridClassName: _angular_core.Signal<string>;
2602
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniGridComponent, never>;
2603
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniGridComponent, "[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, ["*"], true, never>;
2604
- }
2605
-
2606
- declare class UniRowComponent extends UniBoxComponent {
2607
- display: _angular_core.InputSignal<OptionalDisplay>;
2608
- flexDirection: _angular_core.InputSignal<OptionalFlexDirection>;
2609
- /**
2610
- * Defaults to `fit-content` (guards content collapse). Set `[minWidth]="0"`
2611
- * when the row must shrink inside a constrained flex parent (scroll or
2612
- * text truncation containment).
2613
- */
2614
- minWidth: _angular_core.InputSignal<string | number>;
2615
- constructor();
2616
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniRowComponent, never>;
2617
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniRowComponent, "[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, ["*"], true, never>;
2618
- }
2619
-
2620
- declare class UniStackComponent extends UniBoxComponent {
2621
- display: _angular_core.InputSignal<OptionalDisplay>;
2622
- flexDirection: _angular_core.InputSignal<OptionalFlexDirection>;
2623
- /**
2624
- * Defaults to `fit-content` (guards content collapse). Set `[minHeight]="0"`
2625
- * when the stack must shrink inside a constrained flex parent (scroll
2626
- * containment).
2627
- */
2628
- minHeight: _angular_core.InputSignal<string | number>;
2629
- constructor();
2630
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniStackComponent, never>;
2631
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniStackComponent, "[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, ["*"], true, never>;
2632
- }
2633
-
2634
- declare class UniWrapComponent extends UniBoxComponent {
2635
- display: _angular_core.InputSignal<OptionalDisplay>;
2636
- wrapItems: _angular_core.InputSignal<OptionalWrap>;
2637
- constructor();
2638
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniWrapComponent, never>;
2639
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniWrapComponent, "[uni-wrap-layout], [wrap-layout]", never, { "display": { "alias": "display"; "required": false; "isSignal": true; }; "wrapItems": { "alias": "wrapItems"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2640
- }
2641
-
2642
3399
  interface BaseMenuItem {
2643
3400
  symbolName?: string;
2644
3401
  action?: () => void;
@@ -2679,13 +3436,6 @@ interface UniMenuItemOptions {
2679
3436
  /** Named motion primitive for the hover/focus fill. Defaults to `control`;
2680
3437
  omit both this and `transitionSpeed` for no transition at all. */
2681
3438
  motion?: Motion;
2682
- /**
2683
- * Hover/focus transition in seconds; 0 switches instantly.
2684
- *
2685
- * @deprecated Use `motion` and retime the `control` token instead. Still
2686
- * honoured when set, and wins over `motion`. Removed next major.
2687
- */
2688
- transitionSpeed?: number;
2689
3439
  }
2690
3440
 
2691
3441
  /**
@@ -2708,134 +3458,35 @@ interface UniMenuOptions {
2708
3458
  dividerSpacing?: NullableSize;
2709
3459
  }
2710
3460
 
2711
- declare class UniMenuComponent {
2712
- private theme;
2713
- menuItems: _angular_core.InputSignal<MenuItem[]>;
2714
- activeItem: _angular_core.InputSignal<MenuItem>;
2715
- placement: _angular_core.InputSignal<Placement>;
2716
- menuItemClicked: _angular_core.OutputEmitterRef<MenuItem>;
2717
- TriggerClassName: string;
2718
- /** Type guard for the template: dividers render as separators, not items. */
2719
- protected readonly isDivider: (item: MenuItem) => item is _uni_design_system_uni_angular.MenuDivider;
2720
- protected readonly menuOptions: _angular_core.Signal<UniMenuOptions>;
2721
- protected readonly menuClassName: _angular_core.Signal<string>;
2722
- protected readonly dividerClassName: _angular_core.Signal<string>;
2723
- private itemComponents;
2724
- private dropdownComponent;
2725
- /** Which item receives focus when the menu opens (ArrowUp opens onto the last item). */
2726
- private pendingFocus;
2727
- protected readonly className: _angular_core.Signal<string>;
2728
- handleMenuItemClick(item: MenuItem, dropdown: UniDropdownComponent): void;
2729
- /** Enabled items participating in keyboard navigation. */
2730
- private get navigableItems();
2731
- onOpened(): void;
2732
- onTriggerKeydown(event: KeyboardEvent): void;
2733
- onMenuKeydown(event: KeyboardEvent, dropdown: UniDropdownComponent): void;
2734
- /** First-character matching, starting after the focused item and wrapping. */
2735
- private typeahead;
2736
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniMenuComponent, never>;
2737
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniMenuComponent, "uni-menu", never, { "menuItems": { "alias": "menuItems"; "required": true; "isSignal": true; }; "activeItem": { "alias": "activeItem"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; }, { "menuItemClicked": "menuItemClicked"; }, never, ["*"], true, never>;
2738
- }
2739
-
2740
- declare class UniMultiSelectComponent<T = unknown> {
2741
- options: _angular_core.InputSignal<Option<T>[]>;
2742
- selections: _angular_core.InputSignal<T[]>;
2743
- updates: _angular_core.OutputEmitterRef<T[]>;
2744
- flexDirection: _angular_core.InputSignal<"column" | "row" | "column-reverse" | "row-reverse">;
2745
- checkboxGap: _angular_core.InputSignal<NullableSize>;
2746
- protected readonly values: _angular_core.Signal<unknown[]>;
2747
- protected readonly optionsWithSelections: _angular_core.Signal<Option<T>[]>;
2748
- protected readonly className: string;
2749
- handleCheck(checked: boolean, value: T): void;
2750
- /** Selects every *enabled* option — a disabled option is not committable. */
2751
- selectAll(): void;
2752
- deselectAll(): void;
2753
- optionWrapper: string;
2754
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniMultiSelectComponent<any>, never>;
2755
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniMultiSelectComponent<any>, "uni-multi-select", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "selections": { "alias": "selections"; "required": false; "isSignal": true; }; "flexDirection": { "alias": "flexDirection"; "required": false; "isSignal": true; }; "checkboxGap": { "alias": "checkboxGap"; "required": false; "isSignal": true; }; }, { "updates": "updates"; }, never, never, true, never>;
2756
- }
2757
-
2758
- interface UniMultiSelectDropdownOptions {
2759
- textRole: Typeface;
2760
- textColor: TextColor;
2761
- placeholderTextColor: TextColor;
2762
- dividerBorder: Border;
2763
- searchInputBorder: Border;
2764
- searchInputBorderRadius: Radius;
2765
- focusOutline: string;
2766
- focusOutlineOffset: number;
2767
- }
2768
-
2769
- declare class UniMultiSelectDropdownComponent<T = unknown> extends BaseComponent<UniMultiSelectDropdownOptions> implements FormValueControl<T[]> {
2770
- protected readonly className: string;
2771
- readonly value: _angular_core.ModelSignal<T[]>;
2772
- readonly disabled: _angular_core.InputSignal<boolean>;
2773
- readonly touched: _angular_core.ModelSignal<boolean>;
2774
- readonly invalid: _angular_core.InputSignal<boolean>;
2775
- readonly dirty: _angular_core.InputSignal<boolean>;
2776
- /** Synced from required() validators by the Signal Forms [field] directive. */
2777
- readonly required: _angular_core.InputSignal<boolean>;
2778
- /**
2779
- * Id(s) of external element(s) describing this control — typically your
2780
- * app-rendered error message — exposed as aria-describedby.
2781
- */
2782
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
2783
- readonly options: _angular_core.InputSignal<Options<T>>;
2784
- readonly placeholder: _angular_core.InputSignal<string>;
2785
- /**
2786
- * What the field is for, e.g. "Fruits". Rendered visually hidden inside the
2787
- * trigger so its accessible name reads "Fruits, Apple, Pear" — without it a
2788
- * screen reader announces only the current selection, with no clue which
2789
- * field it belongs to.
2790
- */
2791
- readonly label: _angular_core.InputSignal<string>;
2792
- /** Debounce for the filter box, matching the library's input debounce. */
2793
- readonly debounceTime: _angular_core.InputSignal<number>;
2794
- protected readonly srOnly: string;
2795
- protected readonly query: _angular_core.WritableSignal<string>;
2796
- private queryTimer?;
2797
- protected readonly filteredOptions: _angular_core.Signal<Options<T>>;
2798
- private readonly optionRefs;
2799
- /**
2800
- * Roving focus over the options. The shared helper owns the index
2801
- * arithmetic — wrapping, Home/End, and never pointing past a list the
2802
- * filter has narrowed — the same contract `uni-search-input` and
2803
- * `uni-tag-input` use, so the keys behave identically across all three.
2804
- *
2805
- * `disabled` indexes into `filteredOptions`, matching `count`: arrows step
2806
- * over disabled rows and Home/End land on the nearest enabled one, so the
2807
- * focus target is always a checkbox that can actually take focus.
2808
- */
2809
- protected readonly list: _uni_design_system_uni_angular.ListboxNavigation;
2810
- /** Announced with the selection so the count is not left to guesswork. */
2811
- readonly selectionSummary: _angular_core.Signal<string>;
2812
- readonly selectedLabelsText: _angular_core.Signal<string>;
2813
- protected readonly showError: _angular_core.Signal<boolean>;
2814
- protected readonly textColor: _angular_core.Signal<_uni_design_system_uni_core.TextColor>;
2815
- triggerClass: string;
2816
- protected readonly searchInputClass: _angular_core.Signal<string>;
2817
- protected handleQueryInput(event: Event): void;
2818
- /**
2819
- * Arrow keys walk the options from anywhere in the panel, including the
2820
- * filter box — previously the only way in was to Tab through every
2821
- * checkbox.
2822
- */
2823
- protected onPanelKeydown(event: KeyboardEvent): void;
2824
- /** Keeps the active index in step when focus lands on a row by pointer. */
2825
- protected onOptionFocus(index: number): void;
2826
- /**
2827
- * Selects every *enabled* option. A disabled option is not committable, so
2828
- * "select all" must not commit one on the user's behalf — the same rule
2829
- * `toggleOption` and the keyboard path follow.
2830
- */
2831
- selectAll(): void;
2832
- deselectAll(): void;
2833
- protected isOptionSelected(option: Option<T>): _angular_core.Signal<boolean>;
2834
- toggleOption(option: Option<T>, checked: boolean): void;
2835
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniMultiSelectDropdownComponent<any>, never>;
2836
- 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>;
2837
- }
2838
-
3461
+ declare class UniMenuComponent {
3462
+ private theme;
3463
+ menuItems: _angular_core.InputSignal<MenuItem[]>;
3464
+ activeItem: _angular_core.InputSignal<MenuItem>;
3465
+ placement: _angular_core.InputSignal<Placement>;
3466
+ menuItemClicked: _angular_core.OutputEmitterRef<MenuItem>;
3467
+ TriggerClassName: string;
3468
+ /** Type guard for the template: dividers render as separators, not items. */
3469
+ protected readonly isDivider: (item: MenuItem) => item is _uni_design_system_uni_angular.MenuDivider;
3470
+ protected readonly menuOptions: _angular_core.Signal<UniMenuOptions>;
3471
+ protected readonly menuClassName: _angular_core.Signal<string>;
3472
+ protected readonly dividerClassName: _angular_core.Signal<string>;
3473
+ private itemComponents;
3474
+ private dropdownComponent;
3475
+ /** Which item receives focus when the menu opens (ArrowUp opens onto the last item). */
3476
+ private pendingFocus;
3477
+ protected readonly className: _angular_core.Signal<string>;
3478
+ handleMenuItemClick(item: MenuItem, dropdown: UniDropdownComponent): void;
3479
+ /** Enabled items participating in keyboard navigation. */
3480
+ private get navigableItems();
3481
+ onOpened(): void;
3482
+ onTriggerKeydown(event: KeyboardEvent): void;
3483
+ onMenuKeydown(event: KeyboardEvent, dropdown: UniDropdownComponent): void;
3484
+ /** First-character matching, starting after the focused item and wrapping. */
3485
+ private typeahead;
3486
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniMenuComponent, never>;
3487
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniMenuComponent, "uni-menu", never, { "menuItems": { "alias": "menuItems"; "required": true; "isSignal": true; }; "activeItem": { "alias": "activeItem"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; }, { "menuItemClicked": "menuItemClicked"; }, never, ["*"], true, never>;
3488
+ }
3489
+
2839
3490
  interface UniNotificationBadgeOptions {
2840
3491
  borderRadius?: RadiiSize;
2841
3492
  offset?: number;
@@ -2869,13 +3520,6 @@ interface UniAlertOptions {
2869
3520
  /** Named motion primitive for the enter/leave transition. Defaults to
2870
3521
  `notification`. */
2871
3522
  motion?: Motion;
2872
- /**
2873
- * Enter/leave transition in seconds.
2874
- *
2875
- * @deprecated Use `motion` and retime the `notification` token instead.
2876
- * Still honoured when set, and wins over `motion`. Removed next major.
2877
- */
2878
- transitionSpeed?: number;
2879
3523
  topPosition: string | number;
2880
3524
  elevation: Elevation;
2881
3525
  }
@@ -2889,10 +3533,7 @@ declare class UniAlertComponent extends BaseComponent<UniAlertOptions> implement
2889
3533
  alertRef?: ElementRef<HTMLDialogElement>;
2890
3534
  private readonly alertState;
2891
3535
  private readonly effectiveVariant;
2892
- /**
2893
- * Timing for the enter/leave transition. The deprecated `transitionSpeed`
2894
- * (seconds) wins when a theme still sets it.
2895
- */
3536
+ /** Timing for the enter/leave transition. */
2896
3537
  protected readonly motion: _angular_core.Signal<_uni_design_system_uni_core.MotionToken>;
2897
3538
  protected readonly alertClass: _angular_core.Signal<string>;
2898
3539
  private readonly fadeOut;
@@ -2937,13 +3578,6 @@ interface UniSnackbarOptions {
2937
3578
  /** Named motion primitive for the enter/leave transition. Defaults to
2938
3579
  `notification`. */
2939
3580
  motion?: Motion;
2940
- /**
2941
- * Transition duration as a CSS time, e.g. `'0.35s'`.
2942
- *
2943
- * @deprecated Use `motion` and retime the `notification` token instead.
2944
- * Still honoured when set, and wins over `motion`. Removed next major.
2945
- */
2946
- transitionDelay?: string;
2947
3581
  autoCloseDelay: number;
2948
3582
  }
2949
3583
 
@@ -2970,11 +3604,7 @@ declare class UniSnackbarComponent extends BaseComponent<UniSnackbarOptions> imp
2970
3604
  snackbarRef: _angular_core.Signal<ElementRef<any>>;
2971
3605
  private get _snackbar();
2972
3606
  constructor();
2973
- /**
2974
- * Timing for the enter/leave transition. The deprecated `transitionDelay`
2975
- * wins when a theme still sets it — it is a CSS time string, so `0.35s` and
2976
- * `350ms` both parse back to milliseconds.
2977
- */
3607
+ /** Timing for the enter/leave transition. */
2978
3608
  protected readonly motion: _angular_core.Signal<_uni_design_system_uni_core.MotionToken>;
2979
3609
  protected readonly snackbarClass: _angular_core.Signal<string>;
2980
3610
  fadeOut: string;
@@ -3175,71 +3805,6 @@ declare class UniProgressGaugeComponent extends BaseComponent {
3175
3805
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniProgressGaugeComponent, "uni-progress-gauge", never, { "percent": { "alias": "percent"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3176
3806
  }
3177
3807
 
3178
- interface UniRadioOption {
3179
- /**
3180
- * The label displayed for this radio option
3181
- */
3182
- label: string;
3183
- /**
3184
- * The value associated with this radio option
3185
- */
3186
- value: string;
3187
- /**
3188
- * Whether this option is disabled
3189
- */
3190
- disabled?: boolean;
3191
- }
3192
- interface UniRadioOptions {
3193
- /**
3194
- * The size of the radio buttons
3195
- */
3196
- size?: number;
3197
- /** Unselected ring color token. */
3198
- ringColor?: ColorKey;
3199
- /** Circle background token. */
3200
- fillColor?: ColorKey;
3201
- /** Named motion primitive for the dot's grow/retract and the ring's color
3202
- change. Defaults to `control`; a token with `duration: 0` is instant. */
3203
- motion?: Motion;
3204
- /**
3205
- * Seconds for the dot's grow/retract and the ring's color change.
3206
- *
3207
- * @deprecated Use `motion` and retime the `control` token instead. Still
3208
- * honoured when set, and wins over `motion`. Removed next major.
3209
- */
3210
- transitionSpeed?: number;
3211
- }
3212
-
3213
- declare class UniRadioComponent extends BaseComponent<UniRadioOptions> implements FormValueControl<string> {
3214
- readonly value: _angular_core.ModelSignal<string>;
3215
- readonly disabled: _angular_core.InputSignal<boolean>;
3216
- readonly touched: _angular_core.ModelSignal<boolean>;
3217
- readonly invalid: _angular_core.InputSignal<boolean>;
3218
- readonly dirty: _angular_core.InputSignal<boolean>;
3219
- /** Synced from required() validators by the Signal Forms [field] directive. */
3220
- readonly required: _angular_core.InputSignal<boolean>;
3221
- /**
3222
- * Id(s) of external element(s) describing this control — typically your
3223
- * app-rendered error message — exposed as aria-describedby.
3224
- */
3225
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
3226
- readonly options: _angular_core.InputSignal<UniRadioOption[]>;
3227
- readonly label: _angular_core.InputSignal<string>;
3228
- readonly name: _angular_core.InputSignal<string>;
3229
- /** Links the group label to the radiogroup container. */
3230
- protected readonly groupLabelId: string;
3231
- protected readonly showError: _angular_core.Signal<boolean>;
3232
- markAsTouched(): void;
3233
- private readonly metrics;
3234
- protected readonly radioGroupClass: string;
3235
- protected readonly radioOptionClass: _angular_core.Signal<string>;
3236
- protected readonly radioInputClass: _angular_core.Signal<string>;
3237
- handleRadioChange(optionValue: string): void;
3238
- getThemeColor(token: ColorToken): string;
3239
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniRadioComponent, never>;
3240
- 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>;
3241
- }
3242
-
3243
3808
  /**
3244
3809
  * Visual style of the scrollbar.
3245
3810
  * - `compact`: thin overlay-style scrollbar.
@@ -3260,7 +3825,15 @@ declare class UniScrollAreaComponent {
3260
3825
  isVerticallyScrollable: _angular_core.WritableSignal<boolean>;
3261
3826
  viewport: _angular_core.Signal<ElementRef<HTMLDivElement>>;
3262
3827
  content: _angular_core.Signal<ElementRef<HTMLDivElement>>;
3263
- color: _angular_core.InputSignal<ContainerColorToken>;
3828
+ /**
3829
+ * A container color *pair*: the named surface plus its paired on-color.
3830
+ *
3831
+ * Named `containerColor`, not `color`, for the same reason as the layout
3832
+ * primitives: this is an attribute directive-style selector that shares
3833
+ * elements with `uni-text`, which owns `color` and maps it to the CSS
3834
+ * property. One `color` binding feeding both would render ink on ink.
3835
+ */
3836
+ containerColor: _angular_core.InputSignal<ContainerColorToken>;
3264
3837
  borderRadius: _angular_core.InputSignal<string>;
3265
3838
  padding: _angular_core.InputSignal<OptionalSize>;
3266
3839
  paddingHorizontal: _angular_core.InputSignal<OptionalSize>;
@@ -3283,112 +3856,7 @@ declare class UniScrollAreaComponent {
3283
3856
  protected contentClassName: _angular_core.Signal<string>;
3284
3857
  constructor();
3285
3858
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniScrollAreaComponent, never>;
3286
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniScrollAreaComponent, "[uni-scroll-area], [scroll-area]", never, { "color": { "alias": "color"; "required": false; "isSignal": true; }; "borderRadius": { "alias": "borderRadius"; "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; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "autoHeightDisabled": { "alias": "autoHeightDisabled"; "required": false; "isSignal": true; }; "verticalScrollPadding": { "alias": "verticalScrollPadding"; "required": false; "isSignal": true; }; }, { "scrollable": "scrollable"; }, never, ["*"], true, never>;
3287
- }
3288
-
3289
- /** Theme-level options for `uni-search-input`, resolved by token name. */
3290
- interface UniSearchInputOptions {
3291
- /** Leading (decorative) symbol. */
3292
- searchSymbol?: string;
3293
- /** Clear-button symbol. */
3294
- clearSymbol?: string;
3295
- /** Suggestion list surface color token. */
3296
- listColor?: ColorKey;
3297
- /** Active/hover suggestion fill; the on-color pair is derived. Must
3298
- contrast with `listColor` or keyboard navigation turns invisible. */
3299
- activeColor?: ContainerColorToken;
3300
- /** Suggestion list elevation token. */
3301
- listShadow?: Shadow;
3302
- /** Suggestion list radius token. */
3303
- listBorderRadius?: Radius;
3304
- /** Cap on rendered suggestions. */
3305
- maxSuggestions?: number; /** Named motion primitive for the suggestion popup's open animation.
3306
- Defaults to `popup` — the token `uni-dropdown` uses. */
3307
- motion?: Motion;
3308
- }
3309
-
3310
- /**
3311
- * Generic search field: shared input chrome with a leading magnifier, a clear
3312
- * button while there's a query, Enter to submit, and optional type-ahead —
3313
- * pass `suggestions` (refresh them from `change`) and the field becomes an
3314
- * ARIA combobox with a keyboard-navigable listbox. Escape closes the list
3315
- * first, then clears the query.
3316
- */
3317
- declare class UniSearchInputComponent extends BaseComponent<UniSearchInputOptions> {
3318
- /** Accessible name for the field, also the placeholder fallback. */
3319
- label: _angular_core.InputSignal<string>;
3320
- placeholder: _angular_core.InputSignal<string>;
3321
- width: _angular_core.InputSignal<string | number>;
3322
- debounceTime: _angular_core.InputSignal<number>;
3323
- /**
3324
- * Type-ahead entries. Keep them fresh from `change` emissions; the list
3325
- * shows while the field has focus and entries exist.
3326
- */
3327
- suggestions: _angular_core.InputSignal<string[]>;
3328
- change: _angular_core.OutputEmitterRef<string>;
3329
- search: _angular_core.OutputEmitterRef<string>;
3330
- suggestionSelected: _angular_core.OutputEmitterRef<string>;
3331
- protected readonly field: _angular_core.Signal<UniDebounceInputComponent>;
3332
- private readonly listRef;
3333
- /** Ties the popup to the field so the browser tracks it in the top layer. */
3334
- private readonly anchor;
3335
- /** `manual` where the top layer is usable, else null — see the popup helper. */
3336
- protected readonly popupAttr: "manual";
3337
- constructor();
3338
- protected readonly visibleSuggestions: _angular_core.Signal<string[]>;
3339
- /** Shared combobox bookkeeping: open state, active option, ARIA ids. */
3340
- protected readonly list: _uni_design_system_uni_angular.ListboxNavigation;
3341
- readonly listboxId: string;
3342
- protected readonly hasQuery: _angular_core.Signal<boolean>;
3343
- protected handleChange(value: string): void;
3344
- protected submit(): void;
3345
- protected select(suggestion: string): void;
3346
- protected clear(): void;
3347
- protected onKeydown(event: KeyboardEvent): void;
3348
- protected onFocusOut(event: FocusEvent): void;
3349
- protected readonly className: _angular_core.Signal<string>;
3350
- protected readonly listClass: _angular_core.Signal<string>;
3351
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniSearchInputComponent, never>;
3352
- 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; }; }, { "change": "change"; "search": "search"; "suggestionSelected": "suggestionSelected"; }, never, never, true, never>;
3353
- }
3354
-
3355
- declare class UniSelectComponent<T> implements FormValueControl<T | null> {
3356
- readonly value: _angular_core.ModelSignal<T>;
3357
- readonly disabled: _angular_core.InputSignal<boolean>;
3358
- readonly touched: _angular_core.ModelSignal<boolean>;
3359
- readonly invalid: _angular_core.InputSignal<boolean>;
3360
- readonly dirty: _angular_core.InputSignal<boolean>;
3361
- /** Synced from required() validators by the Signal Forms [field] directive. */
3362
- readonly required: _angular_core.InputSignal<boolean>;
3363
- /**
3364
- * Id(s) of external element(s) describing this control — typically your
3365
- * app-rendered error message — exposed as aria-describedby.
3366
- */
3367
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
3368
- readonly options: _angular_core.InputSignal<Options<T>>;
3369
- readonly placeholder: _angular_core.InputSignal<string>;
3370
- /**
3371
- * Equality used to match `value` against option values, called as
3372
- * `compareWith(optionValue, value)`. Defaults to reference equality, which
3373
- * never matches an object value rebuilt from elsewhere (e.g. a saved record
3374
- * against options from a fresh fetch) — pass a key comparison like
3375
- * `(a, b) => a?.id === b?.id` for object values.
3376
- */
3377
- readonly compareWith: _angular_core.InputSignal<(optionValue: T, value: T) => boolean>;
3378
- /** Accessible name for the select; a placeholder is not a label. */
3379
- readonly ariaLabel: _angular_core.InputSignal<string>;
3380
- protected readonly UNSELECTED = -1;
3381
- /**
3382
- * We use the index as the HTML value to avoid issues with
3383
- * stringifying complex objects or duplicate labels.
3384
- */
3385
- protected readonly currentSelectedIndex: _angular_core.Signal<string | -1>;
3386
- protected readonly showError: _angular_core.Signal<boolean>;
3387
- protected handleSelectChange(event: Event): void;
3388
- selectClass: string;
3389
- arrowClass: string;
3390
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniSelectComponent<any>, never>;
3391
- 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; }; "compareWith": { "alias": "compareWith"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
3859
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniScrollAreaComponent, "[uni-scroll-area], [scroll-area]", never, { "containerColor": { "alias": "containerColor"; "required": false; "isSignal": true; }; "borderRadius": { "alias": "borderRadius"; "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; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "autoHeightDisabled": { "alias": "autoHeightDisabled"; "required": false; "isSignal": true; }; "verticalScrollPadding": { "alias": "verticalScrollPadding"; "required": false; "isSignal": true; }; }, { "scrollable": "scrollable"; }, never, ["*"], true, never>;
3392
3860
  }
3393
3861
 
3394
3862
  /** Placeholder geometry: a text line block, a rectangle, or a circle. */
@@ -3454,58 +3922,11 @@ declare class UniSkeletonComponent extends BaseComponent<UniSkeletonOptions> {
3454
3922
  * The band is `bandWidth`% of the block, so it clears the block after
3455
3923
  * travelling `100 / bandWidth` of its own width — the offsets below are
3456
3924
  * percentages of the band, not of the block.
3457
- */
3458
- private readonly sweep;
3459
- protected readonly className: _angular_core.Signal<string>;
3460
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniSkeletonComponent, never>;
3461
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniSkeletonComponent, "uni-skeleton", never, { "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "lines": { "alias": "lines"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "highlightColor": { "alias": "highlightColor"; "required": false; "isSignal": true; }; "borderRadius": { "alias": "borderRadius"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3462
- }
3463
-
3464
- /** Theme-level options for `uni-slider`, resolved by token name. */
3465
- interface UniSliderOptions {
3466
- /** Fill and thumb color. */
3467
- color?: ColorKey;
3468
- /** Unfilled track color. */
3469
- trackColor?: ColorKey;
3470
- /** Track and thumb radius token. */
3471
- borderRadius?: Radius;
3472
- /** Track height in px. */
3473
- trackHeight?: number;
3474
- /** Thumb diameter in px. */
3475
- thumbSize?: number;
3476
- }
3477
-
3478
- /**
3479
- * Range slider on a native `<input type="range">` — keyboard interaction and
3480
- * the ARIA slider contract come from the platform. Fill, track, thumb and
3481
- * radii resolve from `slider` theme tokens; the fill percentage rides a CSS
3482
- * custom property so dragging never regenerates styles.
3483
- */
3484
- declare class UniSliderComponent extends BaseComponent<UniSliderOptions> implements FormValueControl<number> {
3485
- readonly value: _angular_core.ModelSignal<number>;
3486
- readonly disabled: _angular_core.InputSignal<boolean>;
3487
- readonly touched: _angular_core.ModelSignal<boolean>;
3488
- readonly invalid: _angular_core.InputSignal<boolean>;
3489
- readonly dirty: _angular_core.InputSignal<boolean>;
3490
- /** Synced from required() validators by the Signal Forms [field] directive. */
3491
- readonly required: _angular_core.InputSignal<boolean>;
3492
- /**
3493
- * Id(s) of external element(s) describing this control — typically your
3494
- * app-rendered value or error text — exposed as aria-describedby.
3495
- */
3496
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
3497
- label: _angular_core.InputSignal<string>;
3498
- min: _angular_core.InputSignal<number>;
3499
- max: _angular_core.InputSignal<number>;
3500
- step: _angular_core.InputSignal<number>;
3501
- protected readonly resolvedMin: _angular_core.Signal<number>;
3502
- protected readonly resolvedMax: _angular_core.Signal<number>;
3503
- markAsTouched(): void;
3504
- handleInput(event: Event): void;
3505
- protected readonly fillPercent: _angular_core.Signal<string>;
3506
- protected readonly inputClass: _angular_core.Signal<string>;
3507
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniSliderComponent, never>;
3508
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniSliderComponent, "uni-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; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
3925
+ */
3926
+ private readonly sweep;
3927
+ protected readonly className: _angular_core.Signal<string>;
3928
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniSkeletonComponent, never>;
3929
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniSkeletonComponent, "uni-skeleton", never, { "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "lines": { "alias": "lines"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "highlightColor": { "alias": "highlightColor"; "required": false; "isSignal": true; }; "borderRadius": { "alias": "borderRadius"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3509
3930
  }
3510
3931
 
3511
3932
  /** Theme-level options for `uni-stat`, resolved by token name. */
@@ -3637,34 +4058,6 @@ declare class UniTabsComponent extends BaseComponent<UniTabsOptions> {
3637
4058
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniTabsComponent, "uni-tabs", never, { "selectedIndex": { "alias": "selectedIndex"; "required": false; "isSignal": true; }; }, { "selectedIndex": "selectedIndexChange"; }, ["tabs"], never, true, never>;
3638
4059
  }
3639
4060
 
3640
- declare class UniTextareaComponent implements FormValueControl<string> {
3641
- private theme;
3642
- readonly value: _angular_core.ModelSignal<string>;
3643
- readonly disabled: _angular_core.InputSignal<boolean>;
3644
- readonly touched: _angular_core.ModelSignal<boolean>;
3645
- readonly invalid: _angular_core.InputSignal<boolean>;
3646
- readonly dirty: _angular_core.InputSignal<boolean>;
3647
- /** Synced from required() validators by the Signal Forms [field] directive. */
3648
- readonly required: _angular_core.InputSignal<boolean>;
3649
- /**
3650
- * Id(s) of external element(s) describing this control — typically your
3651
- * app-rendered error message — exposed as aria-describedby.
3652
- */
3653
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
3654
- label: _angular_core.InputSignal<string>;
3655
- placeholder: _angular_core.InputSignal<string>;
3656
- /** Visible text rows. Defaults to the theme's `textarea` options. */
3657
- rows: _angular_core.InputSignal<number>;
3658
- private options;
3659
- protected readonly resolvedRows: _angular_core.Signal<number>;
3660
- protected readonly showError: _angular_core.Signal<boolean>;
3661
- protected readonly textareaClass: _angular_core.Signal<string>;
3662
- markAsTouched(): void;
3663
- handleInput(event: Event): void;
3664
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniTextareaComponent, never>;
3665
- 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; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
3666
- }
3667
-
3668
4061
  /** Theme-level options for `uni-textarea`. */
3669
4062
  interface UniTextareaOptions {
3670
4063
  /** Default visible text rows when the component doesn't set `rows`. */
@@ -3700,264 +4093,96 @@ declare class UniSymbolComponent extends BaseComponent<SymbolOptions> {
3700
4093
  fill: _angular_core.InputSignal<SymbolFill>;
3701
4094
  weight: _angular_core.InputSignal<SymbolWeight>;
3702
4095
  grade: _angular_core.InputSignal<SymbolGrade>;
3703
- opticalSize: _angular_core.InputSignal<number>;
3704
- protected readonly className: _angular_core.Signal<string>;
3705
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniSymbolComponent, never>;
3706
- 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>;
3707
- }
3708
-
3709
- /** Theme options for the `tag` component entry. */
3710
- interface UniTagOptions {
3711
- borderRadius?: Radius;
3712
- typeface?: Typeface;
3713
- /** Space between the lead element, label and remove button. */
3714
- gap?: NullableSize;
3715
- /** Icon primitive for the remove affordance. */
3716
- removeIcon?: IconName;
3717
- /** Icon primitive shown in the lead slot when the chip is selected. */
3718
- selectedIcon?: IconName;
3719
- }
3720
- /** The value a tag echoes back on `removed` / `activated`. */
3721
- type UniTagValue = string | number | undefined;
3722
-
3723
- /**
3724
- * Compact chip for categories, states, filters and tokens.
3725
- *
3726
- * Two orthogonal style axes: `variant` picks the colour role and `tone` picks
3727
- * the archetype (soft / solid / outline). Both live in the theme's `tag` entry,
3728
- * so a theme restyles every chip in the app without touching markup.
3729
- *
3730
- * Structurally a chip is **body + trailing action as siblings**, never nested
3731
- * buttons: an interactive chip whose body is a `<button>` cannot contain the
3732
- * remove `<button>` (invalid HTML, and the inner control becomes unreachable
3733
- * for keyboard users). Both stay independently operable.
3734
- */
3735
- declare class UniTagComponent extends BaseComponent<UniTagOptions> {
3736
- size: _angular_core.InputSignal<Size>;
3737
- tone: _angular_core.InputSignal<TagTone>;
3738
- label: _angular_core.InputSignal<string>;
3739
- value: _angular_core.InputSignal<string | number>;
3740
- /** Truncation budget, e.g. `'14ch'`. A number is treated as px. */
3741
- maxWidth: _angular_core.InputSignal<string | number>;
3742
- avatarSrc: _angular_core.InputSignal<string>;
3743
- /** Initials fallback when `avatarSrc` is absent or fails to load. */
3744
- avatarName: _angular_core.InputSignal<string>;
3745
- /** Theme icon primitive — the preferred glyph path. */
3746
- iconName: _angular_core.InputSignal<IconName>;
3747
- /** Material Symbols ligature, for glyphs the theme's icon set doesn't carry. */
3748
- symbolName: _angular_core.InputSignal<string>;
3749
- /** Status dot in the current colour. */
3750
- dot: _angular_core.InputSignal<boolean>;
3751
- removable: _angular_core.InputSignal<boolean>;
3752
- interactive: _angular_core.InputSignal<boolean>;
3753
- /**
3754
- * Toggle state. Left undefined the chip carries no `aria-pressed` at all —
3755
- * an interactive chip is not always a toggle (inside a tag input it is
3756
- * focusable so it can be removed), and announcing "not pressed" on a
3757
- * recipient chip is worse than announcing nothing.
3758
- */
3759
- selected: _angular_core.InputSignal<boolean>;
3760
- invalid: _angular_core.InputSignal<boolean>;
3761
- disabled: _angular_core.InputSignal<boolean>;
3762
- /** Accessible-name override for the remove button. */
3763
- removeLabel: _angular_core.InputSignal<string>;
3764
- /**
3765
- * Tab position of the chip's controls. A composite that owns its own
3766
- * roving focus — `uni-tag-input`, where the whole field is one tab stop —
3767
- * passes `-1` so Tab does not walk through every chip to reach the next
3768
- * control.
3769
- */
3770
- controlTabIndex: _angular_core.InputSignal<number>;
3771
- removed: _angular_core.OutputEmitterRef<UniTagValue>;
3772
- activated: _angular_core.OutputEmitterRef<UniTagValue>;
3773
- /** A disabled chip wears the theme's `disabled` role, whatever its variant. */
3774
- protected readonly resolvedVariant: _angular_core.Signal<_uni_design_system_uni_core.Variant>;
3775
- protected readonly themeStyle: _angular_core.Signal<{
3776
- [x: string]: string | number | _uni_design_system_uni_core.StyleExpression;
3777
- }>;
3778
- /** Lead elements derive from the chip height, so no second size token. */
3779
- protected readonly leadSize: _angular_core.Signal<number>;
3780
- /** Remove glyph, proportional to the chip rather than to the icon-button. */
3781
- protected readonly removeGlyphSize: _angular_core.Signal<number>;
3782
- protected readonly initials: _angular_core.Signal<string>;
3783
- protected readonly hostClass: _angular_core.Signal<string>;
3784
- /** Truncating label; `title` exposes the full text when a budget is set. */
3785
- protected readonly labelClass: string;
3786
- protected readonly bodyClass: _angular_core.Signal<string>;
3787
- protected readonly leadClass: _angular_core.Signal<string>;
3788
- protected readonly dotClass: _angular_core.Signal<string>;
3789
- protected remove(): void;
3790
- protected activate(): void;
3791
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniTagComponent, never>;
3792
- 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>;
3793
- }
3794
-
3795
- /**
3796
- * One committed token. `value` is canonical — what a form submits — and
3797
- * everything else is presentation the field may enrich from a suggestion.
3798
- *
3799
- * `{ value: 'a@b.com' }` is a complete item, so the least a caller has to write
3800
- * is `[value]="[{ value: 'a@b.com' }]"`.
3801
- */
3802
- interface UniTagItem {
3803
- /** Canonical value, e.g. an email address. */
3804
- value: string;
3805
- /** Display text; falls back to `value`. */
3806
- label?: string;
3807
- avatarSrc?: string;
3808
- /**
3809
- * Failed `validate()`. The item stays **in** the value rather than being
3810
- * rejected — a field that silently swallows a typo'd address is worse than
3811
- * one that shows it in red, and the user can click in to fix it.
3812
- */
3813
- invalid?: boolean;
3814
- /** Locked token (e.g. a thread owner): rendered without a remove control. */
3815
- disabled?: boolean;
3816
- }
3817
- /** A type-ahead entry. Same contract as `uni-search-input`: the app filters. */
3818
- interface UniTagSuggestion {
3819
- value: string;
3820
- label?: string;
3821
- description?: string;
3822
- avatarSrc?: string;
3823
- }
3824
- /** Why a typed token did not become a chip. */
3825
- interface UniTagRejection {
3826
- raw: string;
3827
- reason: 'duplicate' | 'max' | 'invalid';
3828
- }
3829
- /** Theme options for the `tagInput` component entry. */
3830
- interface UniTagInputOptions {
3831
- /** Space between chips. */
3832
- chipGap?: NullableSize;
3833
- chipSize?: Size;
3834
- /** Keeps the text input usable when chips have wrapped. */
3835
- minInputWidth?: string | number;
3836
- listColor?: ContainerColorToken;
3837
- listShadow?: Shadow;
3838
- listBorderRadius?: Radius;
3839
- /** Active/hover suggestion fill; the on-color pair is derived. Must
3840
- contrast with `listColor` or keyboard navigation turns invisible. */
3841
- activeColor?: ContainerColorToken;
3842
- maxSuggestions?: number; /** Named motion primitive for the suggestion popup's open animation.
3843
- Defaults to `popup` — the token `uni-dropdown` uses. */
3844
- motion?: Motion;
3845
- }
3846
-
3847
- declare class UniTagInputComponent extends BaseComponent<UniTagInputOptions> implements FormValueControl<UniTagItem[]> {
3848
- readonly value: _angular_core.ModelSignal<UniTagItem[]>;
3849
- readonly disabled: _angular_core.InputSignal<boolean>;
3850
- readonly touched: _angular_core.ModelSignal<boolean>;
3851
- readonly invalid: _angular_core.InputSignal<boolean>;
3852
- readonly dirty: _angular_core.InputSignal<boolean>;
3853
- readonly required: _angular_core.InputSignal<boolean>;
3854
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
3855
- /** Accessible name for the field, e.g. "To". */
3856
- label: _angular_core.InputSignal<string>;
3857
- placeholder: _angular_core.InputSignal<string>;
3858
- /** `email` wires an address validator, paste parser and space separator. */
3859
- preset: _angular_core.InputSignal<"text" | "email">;
3860
- separators: _angular_core.InputSignal<string[]>;
3861
- commitOnBlur: _angular_core.InputSignal<boolean>;
3862
- allowDuplicates: _angular_core.InputSignal<boolean>;
3863
- max: _angular_core.InputSignal<number>;
3864
- validate: _angular_core.InputSignal<(raw: string) => boolean>;
3865
- parse: _angular_core.InputSignal<(pasted: string) => string[]>;
3866
- tagVariant: _angular_core.InputSignal<Variant>;
3867
- tagTone: _angular_core.InputSignal<TagTone>;
3868
- tagSize: _angular_core.InputSignal<Size>;
3869
- suggestions: _angular_core.InputSignal<UniTagSuggestion[]>;
3870
- /** Debounced text the app should filter `suggestions` from. */
3871
- query: _angular_core.OutputEmitterRef<string>;
3872
- debounceTime: _angular_core.InputSignal<number>;
3873
- added: _angular_core.OutputEmitterRef<UniTagItem>;
3874
- removed: _angular_core.OutputEmitterRef<UniTagItem>;
3875
- rejected: _angular_core.OutputEmitterRef<UniTagRejection>;
3876
- private readonly inputRef;
3877
- private readonly chipRefs;
3878
- private readonly listRef;
3879
- /** Ties the popup to the field so the browser tracks it in the top layer. */
3880
- private readonly anchor;
3881
- /** `manual` where the top layer is usable, else null — see the popup helper. */
3882
- protected readonly popupAttr: "manual";
3883
- constructor();
3884
- /** Uncommitted text in the field. */
3885
- protected readonly draft: _angular_core.WritableSignal<string>;
3886
- /** Index of the focused chip, or -1 when focus is in the text input. */
3887
- protected readonly focusedChip: _angular_core.WritableSignal<number>;
3888
- /** Adds, removes and refusals are otherwise silent to a screen reader. */
3889
- protected readonly announcer: _uni_design_system_uni_angular.Announcer;
3890
- protected readonly hintId: string;
3891
- protected readonly srOnly: string;
3892
- private queryTimer?;
3893
- protected readonly visibleSuggestions: _angular_core.Signal<UniTagSuggestion[]>;
3894
- /** Shared combobox bookkeeping — identical contract to uni-search-input. */
3895
- protected readonly list: _uni_design_system_uni_angular.ListboxNavigation;
3896
- protected readonly showError: _angular_core.Signal<boolean>;
3897
- protected readonly separatorKeys: _angular_core.Signal<string[]>;
3898
- protected readonly describedBy: _angular_core.Signal<string>;
3899
- protected labelOf(item: UniTagItem | UniTagSuggestion): string;
3900
- /** Split pasted text into candidate tokens. */
3901
- private parseRaw;
3902
- private isValid;
3903
- /**
3904
- * Turn typed text into a chip. Invalid entries are kept and flagged rather
3905
- * than dropped; duplicates and over-max are refused with a reason.
3906
- */
3907
- protected commit(raw: string): boolean;
3908
- private reject;
3909
- protected removeAt(index: number, focus?: 'left' | 'right' | 'input'): void;
3910
- private countNoun;
3911
- protected focusInput(): void;
3912
- private focusChip;
3913
- protected onInputKeydown(event: KeyboardEvent): void;
3914
- protected onInput(value: string): void;
3915
- protected onPaste(event: ClipboardEvent): void;
3916
- protected onBlur(): void;
3917
- protected onFocusOut(event: FocusEvent): void;
3918
- protected onChipKeydown(event: KeyboardEvent, index: number): void;
3919
- /** Lift a chip back into the input for correction. */
3920
- protected editChip(index: number): void;
3921
- protected selectSuggestion(suggestion: UniTagSuggestion): void;
3922
- private commitDraft;
3923
- private setDraft;
3924
- /** The host is the popup's anchor — the box the list mirrors the width of,
3925
- and the one its entry animation is measured against. The wrapper below
3926
- has the same geometry but is only the fallback's positioning context. */
4096
+ opticalSize: _angular_core.InputSignal<number>;
3927
4097
  protected readonly className: _angular_core.Signal<string>;
3928
- protected readonly wrapperClass: _angular_core.Signal<string>;
3929
- protected readonly fieldClass: _angular_core.Signal<string>;
3930
- protected readonly inputClass: _angular_core.Signal<string>;
3931
- protected readonly listClass: _angular_core.Signal<string>;
3932
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniTagInputComponent, never>;
3933
- 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>;
4098
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniSymbolComponent, never>;
4099
+ 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>;
4100
+ }
4101
+
4102
+ /** Theme options for the `tag` component entry. */
4103
+ interface UniTagOptions {
4104
+ borderRadius?: Radius;
4105
+ typeface?: Typeface;
4106
+ /** Space between the lead element, label and remove button. */
4107
+ gap?: NullableSize;
4108
+ /** Icon primitive for the remove affordance. */
4109
+ removeIcon?: IconName;
4110
+ /** Icon primitive shown in the lead slot when the chip is selected. */
4111
+ selectedIcon?: IconName;
3934
4112
  }
4113
+ /** The value a tag echoes back on `removed` / `activated`. */
4114
+ type UniTagValue = string | number | undefined;
3935
4115
 
3936
4116
  /**
3937
- * The typography primitive, applied as an attribute to any element so
3938
- * semantics stay yours. The attribute value is the typeface:
3939
- * `<h1 uni-text="display-small">`, `<span uni-text="caption">`, dynamic via
3940
- * `[uni-text]="role()"`. With no value, the typeface is inferred from the
3941
- * host element (h1 headline-large, p body-1-long, …), falling back to
3942
- * `title-small`; the `typeface` input remains as an explicit override.
4117
+ * Compact chip for categories, states, filters and tokens.
4118
+ *
4119
+ * Two orthogonal style axes: `variant` picks the colour role and `tone` picks
4120
+ * the archetype (soft / solid / outline). Both live in the theme's `tag` entry,
4121
+ * so a theme restyles every chip in the app without touching markup.
4122
+ *
4123
+ * Structurally a chip is **body + trailing action as siblings**, never nested
4124
+ * buttons: an interactive chip whose body is a `<button>` cannot contain the
4125
+ * remove `<button>` (invalid HTML, and the inner control becomes unreachable
4126
+ * for keyboard users). Both stay independently operable.
3943
4127
  */
3944
- declare class UniTextComponent {
3945
- theme: ThemeService;
3946
- private readonly tag;
3947
- /** Typeface via the selector attribute: `uni-text="headline-large"`. */
3948
- readonly uniText: _angular_core.InputSignal<string>;
3949
- /** Explicit typeface; the attribute value wins when both are set. */
3950
- typeface: _angular_core.InputSignal<string>;
3951
- color: _angular_core.InputSignal<string>;
3952
- display: _angular_core.InputSignal<OptionalDisplay>;
3953
- align: _angular_core.InputSignal<OptionalTextAlign>;
3954
- nowrap: _angular_core.InputSignal<boolean>;
3955
- maxWidth: _angular_core.InputSignal<number>;
3956
- ellipsis: _angular_core.InputSignal<boolean>;
3957
- protected readonly resolvedTypeface: _angular_core.Signal<string>;
3958
- protected readonly className: _angular_core.Signal<string>;
3959
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniTextComponent, never>;
3960
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniTextComponent, "[uni-text]", never, { "uniText": { "alias": "uni-text"; "required": false; "isSignal": true; }; "typeface": { "alias": "typeface"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "display": { "alias": "display"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "nowrap": { "alias": "nowrap"; "required": false; "isSignal": true; }; "maxWidth": { "alias": "maxWidth"; "required": false; "isSignal": true; }; "ellipsis": { "alias": "ellipsis"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
4128
+ declare class UniTagComponent extends BaseComponent<UniTagOptions> {
4129
+ size: _angular_core.InputSignal<Size>;
4130
+ tone: _angular_core.InputSignal<TagTone>;
4131
+ label: _angular_core.InputSignal<string>;
4132
+ value: _angular_core.InputSignal<string | number>;
4133
+ /** Truncation budget, e.g. `'14ch'`. A number is treated as px. */
4134
+ maxWidth: _angular_core.InputSignal<string | number>;
4135
+ avatarSrc: _angular_core.InputSignal<string>;
4136
+ /** Initials fallback when `avatarSrc` is absent or fails to load. */
4137
+ avatarName: _angular_core.InputSignal<string>;
4138
+ /** Theme icon primitive — the preferred glyph path. */
4139
+ iconName: _angular_core.InputSignal<IconName>;
4140
+ /** Material Symbols ligature, for glyphs the theme's icon set doesn't carry. */
4141
+ symbolName: _angular_core.InputSignal<string>;
4142
+ /** Status dot in the current colour. */
4143
+ dot: _angular_core.InputSignal<boolean>;
4144
+ removable: _angular_core.InputSignal<boolean>;
4145
+ interactive: _angular_core.InputSignal<boolean>;
4146
+ /**
4147
+ * Toggle state. Left undefined the chip carries no `aria-pressed` at all —
4148
+ * an interactive chip is not always a toggle (inside a tag input it is
4149
+ * focusable so it can be removed), and announcing "not pressed" on a
4150
+ * recipient chip is worse than announcing nothing.
4151
+ */
4152
+ selected: _angular_core.InputSignal<boolean>;
4153
+ invalid: _angular_core.InputSignal<boolean>;
4154
+ disabled: _angular_core.InputSignal<boolean>;
4155
+ /** Accessible-name override for the remove button. */
4156
+ removeLabel: _angular_core.InputSignal<string>;
4157
+ /**
4158
+ * Tab position of the chip's controls. A composite that owns its own
4159
+ * roving focus — `uni-tag-input`, where the whole field is one tab stop —
4160
+ * passes `-1` so Tab does not walk through every chip to reach the next
4161
+ * control.
4162
+ */
4163
+ controlTabIndex: _angular_core.InputSignal<number>;
4164
+ removed: _angular_core.OutputEmitterRef<UniTagValue>;
4165
+ activated: _angular_core.OutputEmitterRef<UniTagValue>;
4166
+ /** A disabled chip wears the theme's `disabled` role, whatever its variant. */
4167
+ protected readonly resolvedVariant: _angular_core.Signal<_uni_design_system_uni_core.Variant>;
4168
+ protected readonly themeStyle: _angular_core.Signal<{
4169
+ [x: string]: string | number | _uni_design_system_uni_core.StyleExpression;
4170
+ }>;
4171
+ /** Lead elements derive from the chip height, so no second size token. */
4172
+ protected readonly leadSize: _angular_core.Signal<number>;
4173
+ /** Remove glyph, proportional to the chip rather than to the icon-button. */
4174
+ protected readonly removeGlyphSize: _angular_core.Signal<number>;
4175
+ protected readonly initials: _angular_core.Signal<string>;
4176
+ protected readonly hostClass: _angular_core.Signal<string>;
4177
+ /** Truncating label; `title` exposes the full text when a budget is set. */
4178
+ protected readonly labelClass: string;
4179
+ protected readonly bodyClass: _angular_core.Signal<string>;
4180
+ protected readonly leadClass: _angular_core.Signal<string>;
4181
+ protected readonly dotClass: _angular_core.Signal<string>;
4182
+ protected remove(): void;
4183
+ protected activate(): void;
4184
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniTagComponent, never>;
4185
+ 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>;
3961
4186
  }
3962
4187
 
3963
4188
  interface Preset {
@@ -4059,151 +4284,6 @@ declare class UniThemeSwitchComponent {
4059
4284
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniThemeSwitchComponent, "uni-theme-switch", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "themeChanged": "themeChanged"; }, never, never, true, never>;
4060
4285
  }
4061
4286
 
4062
- /** Why typed text did not become a time. The raw text stays in the field. */
4063
- interface UniTimeInputRejection {
4064
- raw: string;
4065
- reason: 'unparseable' | 'out-of-range' | 'unavailable';
4066
- }
4067
- /**
4068
- * Theme options for the `timeInput` entry. Field chrome is not duplicated
4069
- * here — it comes from `input` via uni-input-box; the list trio matches
4070
- * tagInput/searchInput.
4071
- */
4072
- interface UniTimeInputOptions {
4073
- toggleSymbol?: string;
4074
- listColor?: ContainerColorToken;
4075
- listShadow?: Shadow;
4076
- listBorderRadius?: Radius;
4077
- /** Active/hover option fill; the on-color pair is derived. Must contrast
4078
- with `listColor` or keyboard navigation turns invisible. */
4079
- activeColor?: ContainerColorToken;
4080
- maxVisibleOptions?: number; /** Named motion primitive for the suggestion popup's open animation.
4081
- Defaults to `popup` — the token `uni-dropdown` uses. */
4082
- motion?: Motion;
4083
- }
4084
-
4085
- /**
4086
- * Time field: a combobox over time options — the same listbox contract as
4087
- * uni-search-input and uni-tag-input. Type `3p`, `930` or `15:00`, or pick
4088
- * `3:00 PM` from the list; the form always gets 24-hour `'HH:mm'` (`hour12`
4089
- * affects display only). The list is assistive, not exhaustive: any
4090
- * parseable time commits, unless `slots` pins the choices (a slot picker) —
4091
- * then a typed time must match one. Unreadable or unavailable text stays in
4092
- * the field, flagged, with a `rejected` event.
4093
- */
4094
- declare class UniTimeInputComponent extends BaseComponent<UniTimeInputOptions> implements FormValueControl<UniTime | undefined> {
4095
- readonly value: _angular_core.ModelSignal<string>;
4096
- readonly disabled: _angular_core.InputSignal<boolean>;
4097
- readonly touched: _angular_core.ModelSignal<boolean>;
4098
- readonly invalid: _angular_core.InputSignal<boolean>;
4099
- readonly dirty: _angular_core.InputSignal<boolean>;
4100
- readonly required: _angular_core.InputSignal<boolean>;
4101
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
4102
- /** Accessible name for the field, e.g. "Start time". */
4103
- label: _angular_core.InputSignal<string>;
4104
- placeholder: _angular_core.InputSignal<string>;
4105
- /** Generated list granularity, in minutes. */
4106
- minuteStep: _angular_core.InputSignal<number>;
4107
- /** Earliest allowed time (inclusive), `'09:00'`. */
4108
- minTime: _angular_core.InputSignal<string>;
4109
- /** Latest allowed time (inclusive), `'17:00'`. */
4110
- maxTime: _angular_core.InputSignal<string>;
4111
- /** Exact allowed times (scheduling). When set, typed entry must match one. */
4112
- slots: _angular_core.InputSignal<string[]>;
4113
- /** 12-hour display; defaults from the locale. The value stays 24-hour. */
4114
- hour12: _angular_core.InputSignal<boolean>;
4115
- /** BCP 47 tag for the display format; defaults to the document language. */
4116
- locale: _angular_core.InputSignal<string>;
4117
- commitOnBlur: _angular_core.InputSignal<boolean>;
4118
- /** Renders without its own input-box chrome, for composers like uni-date-time-input. */
4119
- embedded: _angular_core.InputSignal<boolean>;
4120
- /** A typed commit was refused; the raw text stays in the field. */
4121
- rejected: _angular_core.OutputEmitterRef<UniTimeInputRejection>;
4122
- private readonly host;
4123
- private readonly inputRef;
4124
- private readonly listRef;
4125
- /** Ties the popup to the field so the browser tracks it in the top layer. */
4126
- private readonly anchor;
4127
- /** `manual` where the top layer is usable, else null — see the popup helper. */
4128
- protected readonly popupAttr: "manual";
4129
- constructor();
4130
- protected readonly srOnly: string;
4131
- /** A refused commit — styles the field and sets aria-invalid until edited. */
4132
- protected readonly draftInvalid: _angular_core.WritableSignal<boolean>;
4133
- /** Commits, clears and refusals are otherwise silent to a screen reader. */
4134
- protected readonly announcer: _uni_design_system_uni_angular.Announcer;
4135
- protected readonly resolvedLocale: _angular_core.Signal<string>;
4136
- protected readonly resolvedHour12: _angular_core.Signal<boolean>;
4137
- /** The listed times: pinned `slots` verbatim, else the generated step grid. */
4138
- protected readonly options: _angular_core.Signal<string[]>;
4139
- protected readonly optionLabels: _angular_core.Signal<string[]>;
4140
- /** Shared combobox bookkeeping — identical contract to uni-search-input. */
4141
- protected readonly list: _uni_design_system_uni_angular.ListboxNavigation;
4142
- protected readonly displayText: _angular_core.Signal<string>;
4143
- protected readonly resolvedPlaceholder: _angular_core.Signal<string>;
4144
- protected readonly showError: _angular_core.Signal<boolean>;
4145
- protected formatValue(time: UniTime): string;
4146
- protected setValue(time: UniTime | undefined, silent?: boolean): void;
4147
- private refuse;
4148
- protected commit(raw: string): boolean;
4149
- /** Step a committed value ±minuteStep (±1 slot when pinned), clamped. */
4150
- private stepValue;
4151
- protected onInputKeydown(event: KeyboardEvent): void;
4152
- protected onInput(): void;
4153
- protected onToggle(): void;
4154
- protected selectOption(time: UniTime): void;
4155
- protected onFocusOut(event: FocusEvent): void;
4156
- private openList;
4157
- private scrollToActive;
4158
- private scrollToIndex;
4159
- private setFieldText;
4160
- protected readonly className: _angular_core.Signal<string>;
4161
- protected readonly rowClass: _angular_core.Signal<string>;
4162
- protected readonly inputClass: _angular_core.Signal<string>;
4163
- protected readonly toggleWrapClass: _angular_core.Signal<string>;
4164
- /** Embedded mode: the composer owns the box; keep only the flex row. */
4165
- protected readonly embeddedClass: _angular_core.Signal<string>;
4166
- protected readonly listClass: _angular_core.Signal<string>;
4167
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniTimeInputComponent, never>;
4168
- 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>;
4169
- }
4170
-
4171
- interface UniToggleOptions {
4172
- /**
4173
- * The size of the toggle switch
4174
- */
4175
- size?: number;
4176
- /** Off-state track color token. */
4177
- trackColor?: ColorKey;
4178
- /** Knob color token. */
4179
- knobColor?: ColorKey;
4180
- }
4181
-
4182
- declare class UniToggleComponent extends BaseComponent<UniToggleOptions> implements FormCheckboxControl {
4183
- readonly checked: _angular_core.ModelSignal<boolean>;
4184
- readonly disabled: _angular_core.InputSignal<boolean>;
4185
- readonly touched: _angular_core.ModelSignal<boolean>;
4186
- readonly invalid: _angular_core.InputSignal<boolean>;
4187
- readonly dirty: _angular_core.InputSignal<boolean>;
4188
- /** Synced from required() validators by the Signal Forms [field] directive. */
4189
- readonly required: _angular_core.InputSignal<boolean>;
4190
- /**
4191
- * Id(s) of external element(s) describing this control — typically your
4192
- * app-rendered error message — exposed as aria-describedby.
4193
- */
4194
- readonly ariaDescribedBy: _angular_core.InputSignal<string>;
4195
- readonly label: _angular_core.InputSignal<string>;
4196
- protected readonly showError: _angular_core.Signal<boolean>;
4197
- markAsTouched(): void;
4198
- handleChange(event: Event): void;
4199
- private readonly metrics;
4200
- protected readonly toggleLabel: _angular_core.Signal<string>;
4201
- protected readonly toggleInput: _angular_core.Signal<string>;
4202
- getThemeColor(token: ColorToken): string;
4203
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniToggleComponent, never>;
4204
- 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>;
4205
- }
4206
-
4207
4287
  interface UniTooltipOptions {
4208
4288
  color?: ContainerColorToken;
4209
4289
  border?: Border;
@@ -4232,8 +4312,6 @@ declare class UniTooltipComponent extends BaseComponent<UniTooltipOptions> {
4232
4312
  label: _angular_core.InputSignal<string>;
4233
4313
  placement: _angular_core.InputSignal<Placement>;
4234
4314
  inlineText: _angular_core.InputSignal<boolean>;
4235
- /** @deprecated The tooltip renders in the native top layer; ignored. */
4236
- appendToBody: _angular_core.InputSignal<boolean>;
4237
4315
  private tipRef;
4238
4316
  constructor();
4239
4317
  onFocusIn(event: FocusEvent): void;
@@ -4258,7 +4336,7 @@ declare class UniTooltipComponent extends BaseComponent<UniTooltipOptions> {
4258
4336
  protected readonly tooltipClassName: _angular_core.Signal<string>;
4259
4337
  protected readonly arrowClassName: _angular_core.Signal<string>;
4260
4338
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniTooltipComponent, never>;
4261
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniTooltipComponent, "uni-tooltip", never, { "hoverDelay": { "alias": "hoverDelay"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "inlineText": { "alias": "inlineText"; "required": false; "isSignal": true; }; "appendToBody": { "alias": "appendToBody"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
4339
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniTooltipComponent, "uni-tooltip", never, { "hoverDelay": { "alias": "hoverDelay"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "inlineText": { "alias": "inlineText"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
4262
4340
  }
4263
4341
 
4264
4342
  /**
@@ -4368,14 +4446,15 @@ declare class BodyRenderDirective implements OnInit {
4368
4446
  }
4369
4447
 
4370
4448
  declare class DragAndDropDirective {
4371
- onFileDropped: _angular_core.OutputEmitterRef<FileList>;
4449
+ /** The dropped files. */
4450
+ fileDropped: _angular_core.OutputEmitterRef<FileList>;
4372
4451
  protected workspaceOpacity: _angular_core.WritableSignal<string>;
4373
4452
  onDragOver(event: DragEvent): void;
4374
4453
  onDragLeave(event: DragEvent): void;
4375
4454
  onDrop(event: DragEvent): void;
4376
4455
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DragAndDropDirective, never>;
4377
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DragAndDropDirective, "[uni-drag-n-drop], [dragAndDrop]", never, {}, { "onFileDropped": "onFileDropped"; }, never, never, true, never>;
4456
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DragAndDropDirective, "[uni-drag-n-drop], [dragAndDrop]", never, {}, { "fileDropped": "fileDropped"; }, never, never, true, never>;
4378
4457
  }
4379
4458
 
4380
- export { BodyRenderDirective, ConfirmationDialogComponent, DragAndDropDirective, FOCUSABLE_SELECTOR, ListboxNavigation, LocalStorageService, NotificationService, NotificationsComponent, RippleDirective, TRANSFORM_ORIGINS, ThemeService, UNI_THEMES, UniAlertComponent, UniAppBarComponent, UniAvatarComponent, UniAvatarGroupComponent, UniBackgroundComponent, UniBadgeComponent, UniBaseDatasource, UniBoxComponent, UniBreadcrumbComponent, UniButtonComponent, UniButtonGroupComponent, UniCalendarComponent, UniCalloutComponent, UniCardComponent, UniCardContentComponent, UniCardHeaderComponent, UniCenterComponent, UniCheckboxComponent, UniComboboxComponent, UniDataSearchComponent, UniDataTableComponent, UniDateInputComponent, UniDateTimeInputComponent, UniDebounceInputComponent, UniDialogButtonsComponent, UniDialogComponent, UniDialogHeaderComponent, UniDividerComponent, UniDrawerComponent, UniDropdownComponent, UniExpandAreaComponent, UniExpandComponent, UniExpandToggleComponent, UniFileDropZoneComponent, UniGridAreaComponent, UniGridComponent, UniIconButtonComponent, UniIconComponent, UniInputBoxComponent, UniInputComponent, UniJsonViewComponent, UniMenuComponent, UniMultiSelectComponent, UniMultiSelectDropdownComponent, UniNotificationBadgeComponent, UniPaginatorComponent, UniPopoverComponent, UniProgressBarComponent, UniProgressGaugeComponent, UniRadioComponent, UniRecordDatasource, UniRowComponent, UniScrollAreaComponent, UniSearchInputComponent, UniSelectComponent, UniServerSideDatasource, UniSkeletonComponent, UniSliderComponent, UniSnackbarComponent, UniSortHeaderComponent, UniStackComponent, UniStatComponent, UniSymbolComponent, UniTabComponent, UniTabsComponent, UniTagComponent, UniTagInputComponent, UniTextComponent, UniTextareaComponent, UniThemeBuilderComponent, UniThemeSwitchComponent, UniTimeInputComponent, UniToggleComponent, UniTooltipComponent, UniTourComponent, UniWrapComponent, acceptableFile, addDays, addMonths, anchorArrowStyles, anchorStyles, buildMonthGrid, clearAnchorName, createAnnouncer, createListboxNavigation, dayOfWeek, daysInMonth, discreteOverlayTransition, focusableElements, formatDate, formatMonthHeading, formatTime, getFileExtension, inclusiveDayCount, isDivider, isToggleOpen, isValidDate, isoDate, joinDateTime, listboxPopupAttr, listboxPopupStyles, localeDatePlaceholder, localeDefaultHour12, localeFieldOrder, localeMonthNames, localeWeekStart, monthOf, motionSafe, newAnchorName, newListboxAnchor, parseDateText, parseTimeText, promoteListboxPopup, resolveElement, resolveFocusTarget, restoreOverlayFocus, setAnchorName, splitDateTime, spotlightStyles, supportsAnchoredPopup, timeSlots, todayIso, transformOriginFor, uniqueId, useTimer, visuallyHidden, weekdayNames };
4381
- export type { Alert, AnchorOffset, AnchorRect, Announcer, BrandPaletteConfig, BreadcrumbItem, ButtonGroupConfig, ButtonGroupItem, ColumnDefinition, Confirmation, DataLoader, DrawerMode, DrawerPosition, ImagePosition, ListboxNavigationConfig, MenuDivider, MenuItem, MenuItemWithLabel, MenuItemWithTemplate, Option, Options, PageRequest, PageResponse, Placement, ScrollbarAppearance, SkeletonShape, SkeletonSweepDirection, Snackbar, Sort, SortDirection, SpotlightOptions, SpotlightStyles, UniAppBarOptions, UniAvatarGroupOptions, UniAvatarOptions, UniBreadcrumbOptions, UniCalendarMarker, UniCalendarMode, UniCalendarOptions, UniCalendarValue, UniCalloutDismissal, UniCalloutOptions, UniCheckboxOptions, UniComboboxOptions, UniComboboxRejection, UniDataSearchOptions, UniDataTableOptions, UniDatasource, UniDate, UniDateInputOptions, UniDateInputRejection, UniDateRange, UniDateTime, UniDateTimeInputOptions, UniDrawerOptions, UniExpandOptions, UniInputBoxOptions, UniListboxPopupOptions, UniMenuItemOptions, UniMenuOptions, UniMonthGridCell, UniMultiSelectDropdownOptions, UniNotificationBadgeOptions, UniPaginatorOptions, UniPopoverOptions, UniRadioOption, UniRadioOptions, UniSearchInputOptions, UniSkeletonOptions, UniSliderOptions, UniStatOptions, UniTabsOptions, UniTagInputOptions, UniTagItem, UniTagOptions, UniTagRejection, UniTagSuggestion, UniTagValue, UniTextareaOptions, UniTime, UniTimeInputOptions, UniTimeInputRejection, UniToggleOptions, UniTourAdvance, UniTourOptions, UniTourStep, UniWeekdayName };
4459
+ 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, UniPaginatorComponent, UniPopoverComponent, UniProgressBarComponent, UniProgressGaugeComponent, 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, clearAnchorName, createAnnouncer, createListboxNavigation, dayOfWeek, daysInMonth, discreteOverlayTransition, focusableElements, formatDate, formatMonthHeading, formatTime, getFileExtension, inclusiveDayCount, isDivider, isToggleOpen, isValidDate, isoDate, joinDateTime, listboxPopupAttr, listboxPopupStyles, localeDatePlaceholder, localeDefaultHour12, localeFieldOrder, localeMonthNames, localeWeekStart, monthOf, motionSafe, newAnchorName, newListboxAnchor, parseDateText, parseTimeText, promoteListboxPopup, resolveElement, resolveFocusTarget, restoreOverlayFocus, setAnchorName, splitDateTime, spotlightStyles, supportsAnchoredPopup, timeSlots, todayIso, transformOriginFor, uniqueId, useTimer, visuallyHidden, weekdayNames };
4460
+ export type { Alert, AnchorOffset, AnchorRect, Announcer, BrandPaletteConfig, BreadcrumbItem, ButtonGroupConfig, ButtonGroupItem, ColumnDefinition, Confirmation, DataLoader, DrawerMode, DrawerPosition, ImagePosition, ListboxNavigationConfig, MenuDivider, MenuItem, MenuItemWithLabel, MenuItemWithTemplate, Option, Options, PageRequest, PageResponse, Placement, ScrollbarAppearance, SkeletonShape, SkeletonSweepDirection, Snackbar, Sort, SortDirection, SpotlightOptions, SpotlightStyles, UniAppBarOptions, UniAvatarGroupOptions, UniAvatarOptions, UniBreadcrumbOptions, UniCalendarMarker, UniCalendarMode, UniCalendarOptions, UniCalendarValue, UniCalloutDismissal, UniCalloutOptions, UniCheckboxOptions, UniComboboxOptions, UniComboboxRejection, UniDataSearchOptions, UniDataTableOptions, UniDatasource, UniDate, UniDateInputOptions, UniDateInputRejection, UniDateRange, UniDateTime, UniDateTimeInputOptions, UniDrawerOptions, UniExpandOptions, UniInputBoxOptions, UniInputMode, UniInputType, UniListboxPopupOptions, UniMenuItemOptions, UniMenuOptions, UniMonthGridCell, UniMultiSelectDropdownOptions, UniNotificationBadgeOptions, UniPaginatorOptions, UniPopoverOptions, UniRadioOption, UniRadioOptions, UniSearchInputOptions, UniSkeletonOptions, UniSliderOptions, UniStatOptions, UniTabsOptions, UniTagInputOptions, UniTagItem, UniTagOptions, UniTagRejection, UniTagSuggestion, UniTagValue, UniTextareaOptions, UniTime, UniTimeInputOptions, UniTimeInputRejection, UniToggleOptions, UniTourAdvance, UniTourOptions, UniTourStep, UniWeekdayName };