@uni-design-system/uni-angular 3.0.2 → 5.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,8 +1,78 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { Signal, WritableSignal, InjectionToken, ElementRef, EventEmitter, OnInit, OnDestroy, OnChanges, SimpleChanges, TemplateRef, AfterViewInit } from '@angular/core';
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 { Icons, Variant, ContainerColorToken, UniTheme, ComponentName, ComponentTheme, NullableSize, ThemeName, TextRole, ContentColorToken, Size, Thickness, NullableStyleExpression, ColorKey, Typeface, Radius, OptionalSize, Border, Shadow, ZIndexableElements, ColorToken, RadiiSize, Elevation, JustifyContent, StyleExpression, Orientation, OptionalAlignSelf, OptionalAlignItems, OptionalAlignContent, OptionalJustifyContent, OptionalDisplay, OptionalPosition, OptionalOverflow, OptionalFlexDirection, OptionalTextAlign, OptionalWrap } from '@uni-design-system/uni-core';
5
- import { Placement as Placement$1, OffsetOptions } from '@floating-ui/dom';
4
+ import { Icons, Variant, ContainerColorToken, PaletteConfig, GenerateColorsConfig, UniTheme, ComponentName, ComponentTheme, NullableSize, ThemeName, TextRole, ContentColorToken, Size, Thickness, NullableStyleExpression, ColorKey, ColorToken, Typeface, Radius, OptionalSize, Border, Shadow, ZIndexableElements, RadiiSize, Elevation, TextColor, JustifyContent, StyleExpression, Orientation, OptionalAlignSelf, OptionalAlignItems, OptionalAlignContent, OptionalJustifyContent, OptionalDisplay, OptionalPosition, OptionalOverflow, OptionalFlexDirection, OptionalTextAlign, OptionalWrap, ColorScheme, ColorCategory } from '@uni-design-system/uni-core';
5
+ import { FormCheckboxControl, FormValueControl } from '@angular/forms/signals';
6
+
7
+ /**
8
+ * Returns a document-unique id for wiring ARIA relationships
9
+ * (aria-controls, aria-describedby, aria-labelledby, ...).
10
+ */
11
+ declare function uniqueId(prefix?: string): string;
12
+ /**
13
+ * Selector matching natively focusable elements. Used to locate the
14
+ * interactive element inside a projected trigger so ARIA attributes land
15
+ * on the element that actually receives focus.
16
+ */
17
+ declare const FOCUSABLE_SELECTOR = "button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])";
18
+ /**
19
+ * Resolves the element that should carry ARIA state for a trigger:
20
+ * the element itself when focusable, otherwise its first focusable descendant.
21
+ */
22
+ declare function resolveFocusTarget(element: HTMLElement): HTMLElement;
23
+ /**
24
+ * Visually hides content while keeping it available to screen readers.
25
+ * Use for text alternatives (e.g. badge counts, icon-only affordances).
26
+ */
27
+ declare const visuallyHidden: {
28
+ readonly position: "absolute";
29
+ readonly width: 1;
30
+ readonly height: 1;
31
+ readonly padding: 0;
32
+ readonly margin: -1;
33
+ readonly overflow: "hidden";
34
+ readonly clipPath: "inset(50%)";
35
+ readonly whiteSpace: "nowrap";
36
+ readonly border: 0;
37
+ };
38
+ /**
39
+ * Wraps animation/transition styles so they only apply when the user has
40
+ * not requested reduced motion (WCAG 2.3.3).
41
+ */
42
+ declare function motionSafe<T extends object>(styles: T): {
43
+ '@media (prefers-reduced-motion: no-preference)': T;
44
+ };
45
+
46
+ /**
47
+ * Native CSS Anchor Positioning helpers (Baseline 2026). These replace the
48
+ * former @floating-ui/dom dependency: the browser tracks the anchor natively
49
+ * (no scroll/resize listeners), and `position-try-fallbacks` flips the panel
50
+ * at viewport edges where supported (Chrome 125+, Firefox 147+, Safari 26+;
51
+ * older Baseline browsers still position correctly but do not auto-flip).
52
+ */
53
+ type Placement = 'top' | 'right' | 'bottom' | 'left' | 'top-start' | 'right-start' | 'bottom-start' | 'left-start' | 'top-end' | 'right-end' | 'bottom-end' | 'left-end';
54
+ /** Distances between the anchor and the positioned panel, in px. */
55
+ interface AnchorOffset {
56
+ /** Gap along the placement axis (anchor → panel). */
57
+ mainAxis?: number;
58
+ /** Shift along the cross axis, from the aligned edge. */
59
+ alignmentAxis?: number;
60
+ }
61
+ /** Returns a document-unique dashed-ident usable as a CSS `anchor-name`. */
62
+ declare function newAnchorName(): string;
63
+ /**
64
+ * Emotion style object anchoring a panel to `anchor` at `placement`.
65
+ * Spread into the panel's `css()` styles. The trigger element must carry
66
+ * `anchor-name: <anchor>` (see `newAnchorName`).
67
+ */
68
+ declare function anchorStyles(anchor: string, placement: Placement, offset?: AnchorOffset): Record<string, string | number>;
69
+ /**
70
+ * Absolute positioning for a rotated-square arrow sitting on the panel edge
71
+ * that faces the anchor. Static per placement: if the browser flips the panel
72
+ * via position-try, the arrow stays on the configured side (cosmetic-only
73
+ * degradation, matching the flip-support caveat above).
74
+ */
75
+ declare function anchorArrowStyles(placement: Placement, size?: number): Record<string, string | number>;
6
76
 
7
77
  type SortDirection = 'asc' | 'desc' | 'indet';
8
78
  interface Sort<T> {
@@ -183,7 +253,22 @@ declare function useTimer(): {
183
253
  secondsRemaining: _angular_core.Signal<number>;
184
254
  };
185
255
 
256
+ declare const acceptableFile: (file: File, acceptedFileExtensions: string[] | undefined) => boolean;
257
+ declare const getFileExtension: (file: File) => string;
258
+
259
+ /**
260
+ * The editable shape a theme builder manipulates: a seed + scheme + category
261
+ * (plus optional saturation floor, brand colors, and light/dark mode).
262
+ * Everything else in a theme is derived from this. Brand colors come in two
263
+ * strengths: `brand` pins are emitted verbatim (may fail contrast), `targets`
264
+ * are brand-faithful but the WCAG guard-rail may adjust their lightness.
265
+ */
266
+ type BrandPaletteConfig = Required<Pick<PaletteConfig, 'seed' | 'scheme' | 'category'>> & Pick<GenerateColorsConfig, 'mode' | 'accentSaturationFloor' | 'brand' | 'targets'>;
186
267
  declare class ThemeService {
268
+ /** localStorage key marking the custom brand theme as active. */
269
+ static readonly CUSTOM_KEY = "CustomTheme";
270
+ /** localStorage key holding the serialized brand palette config. */
271
+ static readonly PALETTE_KEY = "uni-custom-palette";
187
272
  private themes;
188
273
  private localStorage;
189
274
  theme: _angular_core.WritableSignal<UniTheme>;
@@ -191,7 +276,7 @@ declare class ThemeService {
191
276
  components: Signal<Partial<Record<ComponentName, ComponentTheme<object>>>>;
192
277
  component: <T>(componentName: ComponentName) => Signal<ComponentTheme<T>>;
193
278
  colors: Signal<Partial<Record<string, string>>>;
194
- typeFaces: Signal<Partial<Record<string, _uni_design_system_uni_core.TypeFaceDefinition>>>;
279
+ typeFaces: Signal<Record<string, _uni_design_system_uni_core.TypeFaceDefinition>>;
195
280
  spacing: Signal<Partial<Record<NullableSize, string | number>>>;
196
281
  thicknesses: Signal<_uni_design_system_uni_core.Thicknesses>;
197
282
  radii: Signal<Partial<Record<string, string>>>;
@@ -200,11 +285,22 @@ declare class ThemeService {
200
285
  icons: Signal<_uni_design_system_uni_core.Icons>;
201
286
  constructor();
202
287
  selectTheme(themeName: ThemeName): void;
288
+ /** The live brand palette config, when a custom theme is active. */
289
+ customPalette: _angular_core.WritableSignal<BrandPaletteConfig>;
290
+ isCustomTheme: Signal<boolean>;
291
+ /**
292
+ * Generate a full theme from a brand palette config and make it active. When
293
+ * `persist` is true the config is saved so every subsequent story (and
294
+ * reload) renders with the same brand.
295
+ */
296
+ applyPalette(config: BrandPaletteConfig, persist?: boolean): void;
297
+ /** Drop the custom brand theme and fall back to the first built-in theme. */
298
+ clearCustomPalette(): void;
203
299
  selectedThemeName: Signal<string>;
204
300
  selectedThemeKey: _angular_core.WritableSignal<string>;
205
301
  textClass: (textRole: TextRole, textColor?: ContentColorToken) => string;
206
302
  componentStyle: (componentName: ComponentName, variant: Variant, size: Size) => Signal<{
207
- [x: string]: string | number;
303
+ [x: string]: string | number | _uni_design_system_uni_core.StyleExpression;
208
304
  }>;
209
305
  getSpacing: (size: NullableSize) => string | number;
210
306
  getThickness: (thickness: Thickness) => string | number;
@@ -213,6 +309,16 @@ declare class ThemeService {
213
309
  backgroundColor: (token?: ColorKey) => NullableStyleExpression;
214
310
  backgroundImage: (url?: string) => NullableStyleExpression;
215
311
  getContainerColors: (color: Variant, useVariant?: boolean) => _uni_design_system_uni_core.StyleExpression;
312
+ /**
313
+ * Shared keyboard-focus indicator (WCAG 2.4.7). Spread into a component's
314
+ * Emotion styles: `...this.theme.focusRing()` or `focusRing('primary')`.
315
+ */
316
+ focusRing: (token?: ColorToken) => {
317
+ '&:focus-visible': {
318
+ outline: string;
319
+ outlineOffset: string;
320
+ };
321
+ };
216
322
  typeface: (typeface?: Typeface) => _uni_design_system_uni_core.TypeFaceDefinition;
217
323
  colorPalette: () => Partial<Record<string, string>>;
218
324
  color(color?: ColorKey): NullableStyleExpression;
@@ -250,6 +356,19 @@ declare class ThemeService {
250
356
 
251
357
  declare const UNI_THEMES: InjectionToken<Record<string, UniTheme>>;
252
358
 
359
+ type ImagePosition = 'top' | 'bottom' | 'left' | 'right' | 'center' | string;
360
+ declare class UniBackgroundComponent {
361
+ theme: ThemeService;
362
+ image: _angular_core.InputSignal<string>;
363
+ imagePosition: _angular_core.InputSignal<string>;
364
+ imageSize: _angular_core.InputSignal<string | number>;
365
+ height: _angular_core.InputSignal<string | number>;
366
+ width: _angular_core.InputSignal<string | number>;
367
+ protected readonly className: _angular_core.Signal<string>;
368
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniBackgroundComponent, never>;
369
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniBackgroundComponent, "uni-background, 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>;
370
+ }
371
+
253
372
  declare class BaseComponent<T = unknown> {
254
373
  protected componentName: ComponentName;
255
374
  theme: ThemeService;
@@ -258,7 +377,7 @@ declare class BaseComponent<T = unknown> {
258
377
  componentTheme: _angular_core.Signal<_uni_design_system_uni_core.ComponentTheme<T>>;
259
378
  componentOptions: _angular_core.Signal<T>;
260
379
  style: _angular_core.Signal<{
261
- [x: string]: string | number;
380
+ [x: string]: string | number | _uni_design_system_uni_core.StyleExpression;
262
381
  }>;
263
382
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<BaseComponent<any>, never>;
264
383
  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>;
@@ -271,10 +390,10 @@ interface UniBadgeOptions {
271
390
  declare class UniBadgeComponent extends BaseComponent<UniBadgeOptions> {
272
391
  color: _angular_core.InputSignal<Variant>;
273
392
  useVariant: _angular_core.InputSignal<boolean>;
274
- width?: number;
275
- get className(): string;
393
+ width: _angular_core.InputSignal<number>;
394
+ protected readonly className: _angular_core.Signal<string>;
276
395
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniBadgeComponent, never>;
277
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniBadgeComponent, "div[uni-badge], Badge", never, { "color": { "alias": "color"; "required": false; "isSignal": true; }; "useVariant": { "alias": "useVariant"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; }; }, {}, never, ["*"], true, never>;
396
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniBadgeComponent, "div[uni-badge], 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>;
278
397
  }
279
398
 
280
399
  declare class RippleDirective {
@@ -293,13 +412,33 @@ declare class UniButtonComponent extends BaseComponent {
293
412
  readonly disable: _angular_core.InputSignal<boolean>;
294
413
  readonly loading: _angular_core.InputSignal<boolean>;
295
414
  readonly fullWidth: _angular_core.InputSignal<boolean>;
296
- symbolLeft?: string;
297
- symbolRight?: string;
415
+ readonly symbolLeft: _angular_core.InputSignal<string>;
416
+ readonly symbolRight: _angular_core.InputSignal<string>;
298
417
  spinnerBox: string;
299
- get className(): string;
418
+ protected readonly className: _angular_core.Signal<string>;
300
419
  symbolSize: _angular_core.Signal<number>;
301
420
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniButtonComponent, never>;
302
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniButtonComponent, "button[uni-text-button], 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; }; "symbolRight": { "alias": "symbolRight"; "required": false; }; }, {}, never, ["*"], true, [{ directive: typeof RippleDirective; inputs: {}; outputs: {}; }]>;
421
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniButtonComponent, "button[uni-text-button], 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: {}; }]>;
422
+ }
423
+
424
+ declare class UniButtonGroupComponent {
425
+ private themeService;
426
+ protected readonly className: _angular_core.Signal<string>;
427
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniButtonGroupComponent, never>;
428
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniButtonGroupComponent, "uni-button-group, ButtonGroup", never, {}, {}, never, ["*"], true, never>;
429
+ }
430
+
431
+ interface ButtonGroupConfig {
432
+ tooltipPlacement?: Placement;
433
+ buttonSize: Size;
434
+ buttons: ButtonGroupItem[];
435
+ }
436
+ interface ButtonGroupItem {
437
+ symbolName: string;
438
+ selected?: boolean;
439
+ tooltip?: string;
440
+ action?: (selectedState?: boolean) => boolean | void;
441
+ toggle?: WritableSignal<boolean>;
303
442
  }
304
443
 
305
444
  declare class UniCardContentComponent extends BaseComponent {
@@ -329,19 +468,145 @@ declare class UniCardComponent extends BaseComponent<UniCardOptions> {
329
468
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniCardComponent, "uni-card, Card", never, {}, {}, never, ["*"], true, never>;
330
469
  }
331
470
 
471
+ interface UniCheckboxOptions {
472
+ size?: string | number;
473
+ borderRadius?: string | number;
474
+ }
475
+
476
+ declare class UniCheckboxComponent extends BaseComponent<UniCheckboxOptions> implements FormCheckboxControl {
477
+ readonly checked: _angular_core.ModelSignal<boolean>;
478
+ readonly disabled: _angular_core.InputSignal<boolean>;
479
+ readonly touched: _angular_core.ModelSignal<boolean>;
480
+ readonly invalid: _angular_core.InputSignal<boolean>;
481
+ readonly dirty: _angular_core.InputSignal<boolean>;
482
+ /** Synced from required() validators by the Signal Forms [field] directive. */
483
+ readonly required: _angular_core.InputSignal<boolean>;
484
+ /**
485
+ * Id(s) of external element(s) describing this control — typically your
486
+ * app-rendered error message — exposed as aria-describedby.
487
+ */
488
+ readonly ariaDescribedBy: _angular_core.InputSignal<string>;
489
+ readonly label: _angular_core.InputSignal<string>;
490
+ /**
491
+ * Mixed state for "select all"-style parent checkboxes. Cleared
492
+ * automatically on the next user interaction, matching native behavior.
493
+ */
494
+ readonly indeterminate: _angular_core.ModelSignal<boolean>;
495
+ protected readonly showError: _angular_core.Signal<boolean>;
496
+ markAsTouched(): void;
497
+ handleChange(event: Event): void;
498
+ protected readonly checkboxLabel: _angular_core.Signal<string>;
499
+ protected readonly checkboxInput: _angular_core.Signal<string>;
500
+ getThemeColor(token: ColorToken): string;
501
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniCheckboxComponent, never>;
502
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniCheckboxComponent, "uni-checkbox, 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>;
503
+ }
504
+
505
+ interface UniDataSearchOptions {
506
+ border: Border;
507
+ borderRadius: Radius;
508
+ color: ContainerColorToken;
509
+ placeholderColor: TextColor;
510
+ }
511
+
512
+ declare class UniDataSearchComponent<T> extends BaseComponent<UniDataSearchOptions> {
513
+ datasource: _angular_core.InputSignal<UniDatasource<T>>;
514
+ placeholder: _angular_core.InputSignal<string>;
515
+ fields: _angular_core.InputSignal<string[]>;
516
+ searchValue: _angular_core.WritableSignal<string>;
517
+ inputClassName: string;
518
+ constructor();
519
+ onInput(event: Event): void;
520
+ filterData(value: string): void;
521
+ clearFilter(): void;
522
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniDataSearchComponent<any>, never>;
523
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDataSearchComponent<any>, "uni-data-search", never, { "datasource": { "alias": "datasource"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "fields": { "alias": "fields"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
524
+ }
525
+
526
+ interface ColumnDefinition<T> {
527
+ columnDef: keyof T;
528
+ header: string;
529
+ cell?: (element: T) => string;
530
+ isSticky?: boolean;
531
+ template?: TemplateRef<T>;
532
+ textAlign?: 'left' | 'right' | 'center';
533
+ }
534
+ interface UniDataTableOptions {
535
+ border?: Border;
536
+ borderRadius?: Radius;
537
+ color?: ContainerColorToken;
538
+ elevation?: Elevation;
539
+ headerPadding?: NullableSize;
540
+ footerPadding?: NullableSize;
541
+ headerColor?: ContainerColorToken;
542
+ footerColor?: ContainerColorToken;
543
+ cellPadding?: NullableSize;
544
+ rowHoverColor?: ContainerColorToken;
545
+ thTextRole: TextRole;
546
+ thColor?: ContainerColorToken;
547
+ thPadding?: NullableSize;
548
+ thHorizontalBorder?: Border;
549
+ thVerticalBorder?: Border;
550
+ tdTextRole: TextRole;
551
+ tdColor?: ContainerColorToken;
552
+ tdStickyColor?: ContainerColorToken;
553
+ tdPadding?: NullableSize;
554
+ tdHorizontalBorder?: Border;
555
+ tdVerticalBorder?: Border;
556
+ loadingOverlayColor?: ColorKey;
557
+ loadingSpinnerColor?: ColorKey;
558
+ loadingSpinnerSize?: string | number;
559
+ }
560
+
561
+ declare class UniDataTableComponent<T> extends BaseComponent<UniDataTableOptions> {
562
+ datasource: _angular_core.InputSignal<UniDatasource<T>>;
563
+ columns: _angular_core.InputSignal<ColumnDefinition<T>[]>;
564
+ detailRowTemplate: _angular_core.InputSignal<TemplateRef<{
565
+ $implicit: T;
566
+ index: number;
567
+ }>>;
568
+ expandedIndex: _angular_core.WritableSignal<number>;
569
+ useMultiSelect: _angular_core.InputSignal<boolean>;
570
+ useRowClick: _angular_core.InputSignal<boolean>;
571
+ highlight?: _angular_core.InputSignal<(row: T) => boolean>;
572
+ height: _angular_core.InputSignal<string>;
573
+ scrollable: _angular_core.WritableSignal<boolean>;
574
+ loadingOverlayClass: string;
575
+ rowSelect: _angular_core.OutputEmitterRef<T>;
576
+ rowClick: _angular_core.OutputEmitterRef<T>;
577
+ protected readonly tableClass: _angular_core.Signal<string>;
578
+ protected readonly headerClass: _angular_core.Signal<string>;
579
+ protected readonly footerClass: _angular_core.Signal<string>;
580
+ protected readonly thClass: _angular_core.Signal<string>;
581
+ protected readonly tdClass: _angular_core.Signal<string>;
582
+ protected readonly trClass: _angular_core.Signal<string>;
583
+ protected readonly detailRowClass: _angular_core.Signal<string>;
584
+ isLoading: _angular_core.WritableSignal<boolean>;
585
+ toggleRow(index: number): void;
586
+ handleRowClick(row: T, index: number): void;
587
+ /** aria-sort value for a column header, or null when the column is unsorted. */
588
+ protected ariaSort(column: ColumnDefinition<T>): 'ascending' | 'descending' | null;
589
+ isHighlighted(row: T): boolean;
590
+ protected readonly String: StringConstructor;
591
+ handleScrollable(scrollable: boolean): void;
592
+ getBorder(name: string | undefined): string;
593
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniDataTableComponent<any>, never>;
594
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDataTableComponent<any>, "uni-data-table, DataTable", 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>;
595
+ }
596
+
332
597
  declare class UniDialogButtonsComponent {
333
598
  private dialog;
334
- confirmButtonText?: string;
335
- confirmButtonVariant: Variant;
336
- cancelButtonText?: string;
337
- disableConfirm?: boolean;
338
- padding?: NullableSize;
339
- paddingBottom?: NullableSize;
340
- justifyContent?: JustifyContent;
341
- confirmed: EventEmitter<any>;
599
+ confirmButtonText: _angular_core.InputSignal<string>;
600
+ confirmButtonVariant: _angular_core.InputSignal<Variant>;
601
+ cancelButtonText: _angular_core.InputSignal<string>;
602
+ disableConfirm: _angular_core.InputSignal<boolean>;
603
+ padding: _angular_core.InputSignal<NullableSize>;
604
+ paddingBottom: _angular_core.InputSignal<NullableSize>;
605
+ justifyContent: _angular_core.InputSignal<JustifyContent>;
606
+ confirmed: _angular_core.OutputEmitterRef<void>;
342
607
  closeDialog(): void;
343
608
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniDialogButtonsComponent, never>;
344
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDialogButtonsComponent, "uni-dialog-buttons, DialogButtons, div[dialog-buttons]", never, { "confirmButtonText": { "alias": "confirmButtonText"; "required": false; }; "confirmButtonVariant": { "alias": "confirmButtonVariant"; "required": false; }; "cancelButtonText": { "alias": "cancelButtonText"; "required": false; }; "disableConfirm": { "alias": "disableConfirm"; "required": false; }; "padding": { "alias": "padding"; "required": false; }; "paddingBottom": { "alias": "paddingBottom"; "required": false; }; "justifyContent": { "alias": "justifyContent"; "required": false; }; }, { "confirmed": "confirmed"; }, never, never, true, never>;
609
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDialogButtonsComponent, "uni-dialog-buttons, DialogButtons, div[dialog-buttons]", never, { "confirmButtonText": { "alias": "confirmButtonText"; "required": false; "isSignal": true; }; "confirmButtonVariant": { "alias": "confirmButtonVariant"; "required": false; "isSignal": true; }; "cancelButtonText": { "alias": "cancelButtonText"; "required": false; "isSignal": true; }; "disableConfirm": { "alias": "disableConfirm"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; "paddingBottom": { "alias": "paddingBottom"; "required": false; "isSignal": true; }; "justifyContent": { "alias": "justifyContent"; "required": false; "isSignal": true; }; }, { "confirmed": "confirmed"; }, never, never, true, never>;
345
610
  }
346
611
 
347
612
  interface UniDialogHeaderOptions {
@@ -358,6 +623,9 @@ interface UniDialogHeaderOptions {
358
623
 
359
624
  declare class UniDialogHeaderComponent extends BaseComponent<UniDialogHeaderOptions> {
360
625
  private dialog;
626
+ /** Attached to the title element so the parent dialog is labelled by it. */
627
+ protected readonly titleId: string;
628
+ constructor();
361
629
  closeDialog(): void;
362
630
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniDialogHeaderComponent, never>;
363
631
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDialogHeaderComponent, "div[uni-dialog-header], DialogHeader", never, {}, {}, never, ["*"], true, never>;
@@ -374,29 +642,49 @@ interface UniDialogOptions {
374
642
 
375
643
  declare class UniDialogComponent extends BaseComponent<UniDialogOptions> {
376
644
  private elem;
377
- show: _angular_core.InputSignal<boolean>;
378
- private readonly _show;
379
- defaultCloseButton?: boolean;
380
- showing: EventEmitter<any>;
645
+ /** Two-way bindable open state: [(show)]. */
646
+ show: _angular_core.ModelSignal<boolean>;
647
+ /**
648
+ * Accessible name for dialogs without a DialogHeader. When a DialogHeader
649
+ * is present it labels the dialog automatically via aria-labelledby.
650
+ */
651
+ ariaLabel: _angular_core.InputSignal<string>;
652
+ /**
653
+ * CSS selector for the element to focus when the dialog opens. Defaults to
654
+ * the browser's native behavior (first focusable element).
655
+ */
656
+ initialFocus: _angular_core.InputSignal<string>;
657
+ defaultCloseButton: _angular_core.InputSignal<boolean>;
658
+ /** Id referenced by aria-labelledby; DialogHeader attaches it to the title. */
659
+ readonly titleId: string;
660
+ readonly hasTitle: _angular_core.WritableSignal<boolean>;
661
+ /** Emits true once opened and false once the closing animation finishes. */
662
+ showing: _angular_core.OutputEmitterRef<boolean>;
381
663
  constructor();
382
664
  private get _dialog();
383
- get className(): string;
384
- BackdropClick(event: Event): void;
385
- ClosingAnimation(e: AnimationEvent): void;
665
+ protected readonly className: _angular_core.Signal<string>;
666
+ protected backdropClick(event: Event): void;
667
+ /**
668
+ * Escape fires the native 'cancel' event, which would close the dialog
669
+ * instantly and leave our show-state out of sync. Route it through the
670
+ * animated close() instead.
671
+ */
672
+ protected escapeCancel(event: Event): void;
673
+ protected closingAnimation(e: AnimationEvent): void;
386
674
  closeButton: string;
387
675
  private dialogFadeIn;
388
676
  private dialogFadeOut;
389
677
  open(): void;
390
678
  close(): void;
391
679
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniDialogComponent, never>;
392
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDialogComponent, "dialog[uni-dialog], Dialog", never, { "show": { "alias": "show"; "required": false; "isSignal": true; }; "defaultCloseButton": { "alias": "defaultCloseButton"; "required": false; }; }, { "showing": "showing"; }, never, ["*"], true, never>;
680
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDialogComponent, "dialog[uni-dialog], Dialog", never, { "show": { "alias": "show"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "initialFocus": { "alias": "initialFocus"; "required": false; "isSignal": true; }; "defaultCloseButton": { "alias": "defaultCloseButton"; "required": false; "isSignal": true; }; }, { "show": "showChange"; "showing": "showing"; }, never, ["*"], true, never>;
393
681
  }
394
682
 
395
683
  declare class UniDividerComponent {
396
684
  themeService: ThemeService;
397
685
  orientation: _angular_core.InputSignal<Orientation>;
398
686
  border: _angular_core.InputSignal<string>;
399
- get className(): string;
687
+ protected readonly className: _angular_core.Signal<string>;
400
688
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniDividerComponent, never>;
401
689
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDividerComponent, "uni-divider, Divider", never, { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "border": { "alias": "border"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
402
690
  }
@@ -408,14 +696,24 @@ interface UniDropdownOptions {
408
696
  color: ContainerColorToken;
409
697
  }
410
698
 
699
+ type AriaHasPopup = 'menu' | 'listbox' | 'dialog' | 'grid' | 'tree' | 'true';
411
700
  declare class UniDropdownComponent extends BaseComponent<UniDropdownOptions> implements OnInit, OnDestroy {
412
701
  private renderer;
413
- private cleanupAutoUpdate?;
414
702
  private delay;
415
703
  showing: _angular_core.WritableSignal<boolean>;
416
704
  trigger: _angular_core.InputSignal<HTMLElement>;
417
- placement: _angular_core.InputSignal<Placement$1>;
418
- offset: _angular_core.InputSignal<OffsetOptions>;
705
+ placement: _angular_core.InputSignal<Placement>;
706
+ offset: _angular_core.InputSignal<AnchorOffset>;
707
+ /** CSS anchor-name linking the trigger to the popover panel. */
708
+ private readonly anchorName;
709
+ /**
710
+ * Value for aria-haspopup on the trigger, describing what the popover
711
+ * contains (e.g. 'menu' for Menu, 'dialog' for rich content). When unset,
712
+ * only aria-expanded/aria-controls are managed.
713
+ */
714
+ ariaHasPopup: _angular_core.InputSignal<AriaHasPopup>;
715
+ /** Document-unique id of the popover element, for aria-controls wiring. */
716
+ readonly popoverId: string;
419
717
  paddingVertical: _angular_core.InputSignal<NullableSize>;
420
718
  paddingHorizontal: _angular_core.InputSignal<NullableSize>;
421
719
  dropdownShowing: _angular_core.OutputEmitterRef<boolean>;
@@ -425,39 +723,207 @@ declare class UniDropdownComponent extends BaseComponent<UniDropdownOptions> imp
425
723
  private get _dropdown();
426
724
  private transformOriginMap;
427
725
  dropdownClass: _angular_core.Signal<string>;
726
+ /** The element that receives focus and carries the ARIA popup state. */
727
+ private get _focusTarget();
428
728
  ngOnInit(): void;
729
+ /**
730
+ * Returns focus to the trigger when the popover closes while focus was
731
+ * inside it (or was dropped on <body> by the top layer closing), so
732
+ * keyboard users are never stranded (WCAG 2.4.3).
733
+ */
734
+ private restoreFocus;
429
735
  toggleDropdown(): void;
430
736
  hideDropdown(): void;
431
- private updatePosition;
432
737
  ngOnDestroy(): void;
433
738
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniDropdownComponent, never>;
434
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDropdownComponent, "uni-dropdown, Dropdown", never, { "trigger": { "alias": "trigger"; "required": true; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "offset": { "alias": "offset"; "required": false; "isSignal": true; }; "paddingVertical": { "alias": "paddingVertical"; "required": false; "isSignal": true; }; "paddingHorizontal": { "alias": "paddingHorizontal"; "required": false; "isSignal": true; }; }, { "dropdownShowing": "dropdownShowing"; "dropdownHiding": "dropdownHiding"; }, never, ["*"], true, never>;
739
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDropdownComponent, "uni-dropdown, 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; }; }, { "dropdownShowing": "dropdownShowing"; "dropdownHiding": "dropdownHiding"; }, never, ["*"], true, never>;
740
+ }
741
+
742
+ declare class UniExpandComponent {
743
+ collapsed: _angular_core.ModelSignal<boolean>;
744
+ /** Referenced by the controlling toggle's aria-controls. */
745
+ readonly regionId: string;
746
+ toggle(): void;
747
+ expandClassName: string;
748
+ contentClassName: string;
749
+ private expand;
750
+ private collapse;
751
+ expandAnimation: string;
752
+ collapseAnimation: string;
753
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniExpandComponent, never>;
754
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniExpandComponent, "uni-expand, Expand", never, { "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; }, { "collapsed": "collapsedChange"; }, never, ["*"], true, never>;
755
+ }
756
+
757
+ declare class UniExpandToggleComponent {
758
+ collapsed: _angular_core.ModelSignal<boolean>;
759
+ /** Id of the Expand region this toggle controls (see UniExpandComponent.regionId). */
760
+ ariaControls: _angular_core.InputSignal<string>;
761
+ protected readonly className: _angular_core.Signal<string>;
762
+ toggle(): void;
763
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniExpandToggleComponent, never>;
764
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniExpandToggleComponent, "uni-expand-toggle, ExpandToggle", never, { "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "ariaControls": { "alias": "ariaControls"; "required": false; "isSignal": true; }; }, { "collapsed": "collapsedChange"; }, never, never, true, never>;
765
+ }
766
+
767
+ declare class UniExpandAreaComponent {
768
+ title: _angular_core.InputSignal<string>;
769
+ initCollapsed: _angular_core.InputSignal<boolean>;
770
+ padding: _angular_core.InputSignal<NullableSize>;
771
+ collapsed: _angular_core.OutputEmitterRef<boolean>;
772
+ toggleRef: _angular_core.Signal<UniExpandToggleComponent>;
773
+ toggleExpand(): void;
774
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniExpandAreaComponent, never>;
775
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniExpandAreaComponent, "uni-expand-area, ExpandArea", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "initCollapsed": { "alias": "initCollapsed"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; }, { "collapsed": "collapsed"; }, never, ["*"], true, never>;
776
+ }
777
+
778
+ declare class UniFileDropZoneComponent {
779
+ selectedFile: _angular_core.WritableSignal<File>;
780
+ selectedFileName: _angular_core.Signal<string>;
781
+ attachmentState: _angular_core.WritableSignal<"upload">;
782
+ fileSelectorRef: _angular_core.Signal<ElementRef<HTMLInputElement>>;
783
+ get fileSelectorElement(): HTMLInputElement;
784
+ height: _angular_core.InputSignal<string | number>;
785
+ borderRadius: _angular_core.InputSignal<string>;
786
+ border: _angular_core.InputSignal<Variant>;
787
+ padding: _angular_core.InputSignal<NullableSize>;
788
+ useBrowseButton: _angular_core.InputSignal<boolean>;
789
+ browseButtonText: _angular_core.InputSignal<string>;
790
+ allowedFileExtensions: _angular_core.InputSignal<string[]>;
791
+ label: _angular_core.InputSignal<string>;
792
+ helpTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
793
+ helpTemplateContext: _angular_core.InputSignal<unknown>;
794
+ fileAttached: _angular_core.OutputEmitterRef<File>;
795
+ fileRemoved: _angular_core.OutputEmitterRef<void>;
796
+ /**
797
+ * The zone acts as the keyboard-reachable file picker only when no browse
798
+ * button is rendered (nesting a button inside a button-role zone would be
799
+ * invalid ARIA) and no file is attached yet.
800
+ */
801
+ zoneIsInteractive: _angular_core.Signal<boolean>;
802
+ sanitizedFileExtensions: _angular_core.Signal<string[]>;
803
+ helpText: _angular_core.Signal<string>;
804
+ constructor();
805
+ openFileSelector(): void;
806
+ selectFiles(fileList: FileList | null): void;
807
+ onFileInputChange(): void;
808
+ cancelUpload(): void;
809
+ removeAttachment(): void;
810
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniFileDropZoneComponent, never>;
811
+ 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>;
812
+ }
813
+
814
+ declare class UniDebounceInputComponent {
815
+ inputName: _angular_core.InputSignal<string>;
816
+ inputId: _angular_core.InputSignal<string>;
817
+ debounceTime: _angular_core.InputSignal<number>;
818
+ change: _angular_core.OutputEmitterRef<string>;
819
+ value: _angular_core.WritableSignal<string>;
820
+ private timeoutId;
821
+ private lastEmitted;
822
+ constructor();
823
+ handleInput(event: Event): void;
824
+ inputClass: string;
825
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniDebounceInputComponent, never>;
826
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDebounceInputComponent, "DebounceInput, 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; }; }, { "change": "change"; }, never, never, true, never>;
435
827
  }
436
828
 
437
829
  declare class UniIconComponent {
438
830
  private themeService;
439
831
  color: _angular_core.InputSignal<string>;
440
- protected _path: string;
441
- get className(): string;
442
- set name(iconName: keyof Icons);
832
+ name: _angular_core.InputSignal<string>;
833
+ protected readonly path: _angular_core.Signal<string>;
834
+ protected readonly className: _angular_core.Signal<string>;
443
835
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniIconComponent, never>;
444
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniIconComponent, "uni-icon, Icon", never, { "color": { "alias": "color"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; }; }, {}, never, never, true, never>;
836
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniIconComponent, "uni-icon, Icon", never, { "color": { "alias": "color"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
445
837
  }
446
838
 
447
- declare class UniIconButtonComponent implements OnChanges {
839
+ declare class UniIconButtonComponent {
448
840
  private theme;
449
841
  config: _angular_core.Signal<_uni_design_system_uni_core.ComponentTheme<unknown>>;
450
- iconName?: IconName;
451
- symbolName?: string;
452
- variant: Variant;
453
- size: Size;
454
- disable?: boolean;
455
- loading?: boolean;
456
- opticalSize: number;
457
- get className(): string;
458
- ngOnChanges(changes: SimpleChanges): void;
842
+ /**
843
+ * Accessible name for the button. Alternative to projecting text content
844
+ * (`<button icon-button>Close</button>`); one of the two is required for
845
+ * an icon-only button to be announced correctly.
846
+ */
847
+ ariaLabel: _angular_core.InputSignal<string>;
848
+ iconName: _angular_core.InputSignal<string>;
849
+ symbolName: _angular_core.InputSignal<string>;
850
+ variant: _angular_core.InputSignal<Variant>;
851
+ size: _angular_core.InputSignal<Size>;
852
+ disable: _angular_core.InputSignal<boolean>;
853
+ loading: _angular_core.InputSignal<boolean>;
854
+ opticalSize: _angular_core.InputSignal<number>;
855
+ protected readonly srOnlyClass: string;
856
+ protected readonly className: _angular_core.Signal<string>;
459
857
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniIconButtonComponent, never>;
460
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniIconButtonComponent, "button[uni-icon-button], button[icon-button]", never, { "iconName": { "alias": "iconName"; "required": false; }; "symbolName": { "alias": "symbolName"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "size": { "alias": "size"; "required": false; }; "disable": { "alias": "disable"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "opticalSize": { "alias": "opticalSize"; "required": false; }; }, {}, never, never, true, [{ directive: typeof RippleDirective; inputs: {}; outputs: {}; }]>;
858
+ 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: {}; }]>;
859
+ }
860
+
861
+ declare class UniInputComponent implements FormValueControl<string> {
862
+ readonly value: _angular_core.ModelSignal<string>;
863
+ readonly disabled: _angular_core.InputSignal<boolean>;
864
+ readonly touched: _angular_core.ModelSignal<boolean>;
865
+ readonly invalid: _angular_core.InputSignal<boolean>;
866
+ readonly dirty: _angular_core.InputSignal<boolean>;
867
+ /** Synced from required() validators by the Signal Forms [field] directive. */
868
+ readonly required: _angular_core.InputSignal<boolean>;
869
+ /**
870
+ * Id(s) of external element(s) describing this control — typically your
871
+ * app-rendered error message — exposed as aria-describedby.
872
+ */
873
+ readonly ariaDescribedBy: _angular_core.InputSignal<string>;
874
+ label: _angular_core.InputSignal<string>;
875
+ placeholder: _angular_core.InputSignal<string>;
876
+ protected readonly showError: _angular_core.Signal<boolean>;
877
+ markAsTouched(): void;
878
+ handleInput(event: Event): void;
879
+ inputClass: string;
880
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniInputComponent, never>;
881
+ 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>;
882
+ }
883
+
884
+ interface UniInputBoxOptions {
885
+ color: ContainerColorToken;
886
+ disabledColor: ContainerColorToken;
887
+ errorColor: ContainerColorToken;
888
+ border: Border;
889
+ errorBorder: Border;
890
+ borderRadius: Radius;
891
+ transitionSpeed: number;
892
+ shadow?: Shadow;
893
+ errorShadow?: Shadow;
894
+ height?: string | number;
895
+ paddingLeft: OptionalSize;
896
+ typeFace: Typeface;
897
+ textColor: ColorKey;
898
+ disabledTextColor: ColorKey;
899
+ focusOutline: string;
900
+ focusOutlineOffset: number;
901
+ }
902
+
903
+ declare class UniInputBoxComponent extends BaseComponent<UniInputBoxOptions> {
904
+ protected readonly className: string;
905
+ disabled: _angular_core.InputSignal<boolean>;
906
+ error: _angular_core.InputSignal<boolean>;
907
+ minWidth: _angular_core.InputSignal<string>;
908
+ protected readonly color: _angular_core.Signal<_uni_design_system_uni_core.ContainerColorToken>;
909
+ protected readonly border: _angular_core.Signal<string>;
910
+ protected readonly shadow: _angular_core.Signal<string>;
911
+ protected readonly inputBoxClass: _angular_core.Signal<string>;
912
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniInputBoxComponent, never>;
913
+ 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; }; }, {}, never, ["*"], true, never>;
914
+ }
915
+
916
+ declare class UniJsonViewComponent {
917
+ json: _angular_core.InputSignal<unknown>;
918
+ rows: _angular_core.InputSignal<number>;
919
+ fontSize: _angular_core.InputSignal<string>;
920
+ width: _angular_core.InputSignal<string | number>;
921
+ selectOnClick: _angular_core.InputSignal<boolean>;
922
+ jsonString: _angular_core.Signal<string>;
923
+ className: _angular_core.Signal<string>;
924
+ selectContents(jsonArea: HTMLTextAreaElement): void;
925
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniJsonViewComponent, never>;
926
+ 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>;
461
927
  }
462
928
 
463
929
  declare class UniBoxComponent {
@@ -510,7 +976,7 @@ declare class UniBoxComponent {
510
976
  textAlign: _angular_core.InputSignal<OptionalTextAlign>;
511
977
  wrapItems: _angular_core.InputSignal<OptionalWrap>;
512
978
  zIndex: _angular_core.InputSignal<ZIndexableElements>;
513
- get boxClassName(): string;
979
+ protected readonly boxClassName: _angular_core.Signal<string>;
514
980
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniBoxComponent, never>;
515
981
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniBoxComponent, "div[uni-box-layout], Box, div[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>;
516
982
  }
@@ -525,23 +991,22 @@ declare class UniCenterComponent extends UniBoxComponent {
525
991
  }
526
992
 
527
993
  declare class UniGridAreaComponent {
528
- area: string;
529
- get className(): string;
994
+ area: _angular_core.InputSignal<string>;
995
+ protected readonly className: _angular_core.Signal<string>;
530
996
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniGridAreaComponent, never>;
531
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniGridAreaComponent, "GridArea", never, { "area": { "alias": "area"; "required": false; }; }, {}, never, ["*"], true, never>;
997
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniGridAreaComponent, "GridArea", never, { "area": { "alias": "area"; "required": true; "isSignal": true; }; }, {}, never, ["*"], true, never>;
532
998
  }
533
999
 
534
1000
  declare class UniGridComponent extends UniBoxComponent {
535
1001
  display: _angular_core.InputSignal<OptionalDisplay>;
536
- constructor();
537
- templateAreas?: string;
538
- templateColumns?: string;
539
- templateRows?: string;
540
- outline?: Thickness;
541
- outlineColor?: Variant;
542
- get className(): string;
1002
+ templateAreas: _angular_core.InputSignal<string>;
1003
+ templateColumns: _angular_core.InputSignal<string>;
1004
+ templateRows: _angular_core.InputSignal<string>;
1005
+ outline: _angular_core.InputSignal<Thickness>;
1006
+ outlineColor: _angular_core.InputSignal<Variant>;
1007
+ protected readonly gridClassName: _angular_core.Signal<string>;
543
1008
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniGridComponent, never>;
544
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniGridComponent, "div[uni-grid-layout], Grid, div[grid-layout]", never, { "display": { "alias": "display"; "required": false; "isSignal": true; }; "templateAreas": { "alias": "templateAreas"; "required": false; }; "templateColumns": { "alias": "templateColumns"; "required": false; }; "templateRows": { "alias": "templateRows"; "required": false; }; "outline": { "alias": "outline"; "required": false; }; "outlineColor": { "alias": "outlineColor"; "required": false; }; }, {}, never, ["*"], true, never>;
1009
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniGridComponent, "div[uni-grid-layout], Grid, div[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>;
545
1010
  }
546
1011
 
547
1012
  declare class UniRowComponent extends UniBoxComponent {
@@ -587,18 +1052,115 @@ interface MenuItemWithTemplate<T = any> extends BaseMenuItem {
587
1052
  type MenuItem<T = any> = MenuItemWithLabel | MenuItemWithTemplate<T>;
588
1053
 
589
1054
  declare class UniMenuComponent {
590
- private cdr;
591
1055
  menuItems: _angular_core.InputSignal<MenuItem[]>;
592
1056
  activeItem: _angular_core.InputSignal<MenuItem>;
593
- placement: _angular_core.InputSignal<Placement$1>;
1057
+ placement: _angular_core.InputSignal<Placement>;
594
1058
  menuItemClicked: _angular_core.OutputEmitterRef<MenuItem>;
595
1059
  TriggerClassName: string;
596
- get className(): string;
1060
+ private itemComponents;
1061
+ private dropdownComponent;
1062
+ /** Which item receives focus when the menu opens (ArrowUp opens onto the last item). */
1063
+ private pendingFocus;
1064
+ protected readonly className: _angular_core.Signal<string>;
597
1065
  handleMenuItemClick(item: MenuItem, dropdown: UniDropdownComponent): void;
1066
+ /** Enabled items participating in keyboard navigation. */
1067
+ private get navigableItems();
1068
+ onOpened(): void;
1069
+ onTriggerKeydown(event: KeyboardEvent): void;
1070
+ onMenuKeydown(event: KeyboardEvent, dropdown: UniDropdownComponent): void;
1071
+ /** First-character matching, starting after the focused item and wrapping. */
1072
+ private typeahead;
598
1073
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniMenuComponent, never>;
599
1074
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniMenuComponent, "Menu, 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>;
600
1075
  }
601
1076
 
1077
+ declare class UniMultiSelectComponent<T = unknown> {
1078
+ options: _angular_core.InputSignal<Option<T>[]>;
1079
+ selections: _angular_core.InputSignal<T[]>;
1080
+ updates: _angular_core.OutputEmitterRef<T[]>;
1081
+ flexDirection: _angular_core.InputSignal<"column" | "row" | "column-reverse" | "row-reverse">;
1082
+ checkboxGap: _angular_core.InputSignal<NullableSize>;
1083
+ protected readonly values: _angular_core.Signal<unknown[]>;
1084
+ protected readonly optionsWithSelections: _angular_core.Signal<Option<T>[]>;
1085
+ protected readonly className: string;
1086
+ handleCheck(checked: boolean, value: T): void;
1087
+ selectAll(): void;
1088
+ deselectAll(): void;
1089
+ optionWrapper: string;
1090
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniMultiSelectComponent<any>, never>;
1091
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniMultiSelectComponent<any>, "uni-multi-select, MultiSelect", 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>;
1092
+ }
1093
+
1094
+ interface UniMultiSelectDropdownOptions {
1095
+ textRole: Typeface;
1096
+ textColor: TextColor;
1097
+ placeholderTextColor: TextColor;
1098
+ dividerBorder: Border;
1099
+ searchInputBorder: Border;
1100
+ searchInputBorderRadius: Radius;
1101
+ focusOutline: string;
1102
+ focusOutlineOffset: number;
1103
+ }
1104
+
1105
+ declare class UniMultiSelectDropdownComponent<T = unknown> extends BaseComponent<UniMultiSelectDropdownOptions> implements FormValueControl<T[]> {
1106
+ protected readonly className: string;
1107
+ readonly value: _angular_core.ModelSignal<T[]>;
1108
+ readonly disabled: _angular_core.InputSignal<boolean>;
1109
+ readonly touched: _angular_core.ModelSignal<boolean>;
1110
+ readonly invalid: _angular_core.InputSignal<boolean>;
1111
+ readonly dirty: _angular_core.InputSignal<boolean>;
1112
+ /** Synced from required() validators by the Signal Forms [field] directive. */
1113
+ readonly required: _angular_core.InputSignal<boolean>;
1114
+ /**
1115
+ * Id(s) of external element(s) describing this control — typically your
1116
+ * app-rendered error message — exposed as aria-describedby.
1117
+ */
1118
+ readonly ariaDescribedBy: _angular_core.InputSignal<string>;
1119
+ readonly options: _angular_core.InputSignal<Options<T>>;
1120
+ readonly placeholder: _angular_core.InputSignal<string>;
1121
+ protected readonly query: _angular_core.WritableSignal<string>;
1122
+ protected readonly filteredOptions: _angular_core.Signal<Options<T>>;
1123
+ readonly selectedLabelsText: _angular_core.Signal<string>;
1124
+ protected readonly showError: _angular_core.Signal<boolean>;
1125
+ protected readonly textColor: _angular_core.Signal<_uni_design_system_uni_core.TextColor>;
1126
+ triggerClass: string;
1127
+ protected readonly searchInputClass: _angular_core.Signal<string>;
1128
+ protected handleQueryInput(event: Event): void;
1129
+ selectAll(): void;
1130
+ deselectAll(): void;
1131
+ protected isOptionSelected(option: Option<T>): _angular_core.Signal<boolean>;
1132
+ toggleOption(option: Option<T>, checked: boolean): void;
1133
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniMultiSelectDropdownComponent<any>, never>;
1134
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniMultiSelectDropdownComponent<any>, "uni-multi-select-dropdown, MultiSelectDropdown", 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; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
1135
+ }
1136
+
1137
+ interface UniNotificationBadgeOptions {
1138
+ borderRadius?: RadiiSize;
1139
+ offset?: number;
1140
+ typeface: Typeface;
1141
+ }
1142
+
1143
+ declare class UniNotificationBadgeComponent extends BaseComponent<UniNotificationBadgeOptions> {
1144
+ count: _angular_core.InputSignal<number>;
1145
+ maxCount: _angular_core.InputSignal<number>;
1146
+ badgeVariant: _angular_core.InputSignal<"dot" | "count" | "pill">;
1147
+ color: _angular_core.InputSignal<Variant>;
1148
+ position: _angular_core.InputSignal<"top-right" | "top-left" | "bottom-right" | "bottom-left">;
1149
+ show: _angular_core.InputSignal<boolean>;
1150
+ /**
1151
+ * Screen-reader text for the badge (e.g. "5 unread messages"). Without it
1152
+ * a sensible default is announced; a bare number or dot carries no meaning.
1153
+ */
1154
+ ariaLabel: _angular_core.InputSignal<string>;
1155
+ protected readonly srOnlyClass: string;
1156
+ protected readonly announcement: _angular_core.Signal<string>;
1157
+ displayValue: _angular_core.Signal<string>;
1158
+ shouldShow: _angular_core.Signal<boolean>;
1159
+ protected readonly className: _angular_core.Signal<string>;
1160
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniNotificationBadgeComponent, never>;
1161
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniNotificationBadgeComponent, "uni-notification-badge", never, { "count": { "alias": "count"; "required": false; "isSignal": true; }; "maxCount": { "alias": "maxCount"; "required": false; "isSignal": true; }; "badgeVariant": { "alias": "badgeVariant"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "show": { "alias": "show"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1162
+ }
1163
+
602
1164
  interface UniAlertOptions {
603
1165
  defaultVariant: Variant;
604
1166
  borderRadius: Radius;
@@ -612,7 +1174,7 @@ declare class UniAlertComponent extends BaseComponent<UniAlertOptions> implement
612
1174
  iconName: _angular_core.InputSignal<string>;
613
1175
  symbolName: _angular_core.InputSignal<string>;
614
1176
  useVariant: _angular_core.InputSignal<boolean>;
615
- showing: EventEmitter<boolean>;
1177
+ showing: _angular_core.OutputEmitterRef<boolean>;
616
1178
  alertRef?: ElementRef<HTMLDialogElement>;
617
1179
  private readonly alertState;
618
1180
  private readonly effectiveVariant;
@@ -629,10 +1191,10 @@ declare class UniAlertComponent extends BaseComponent<UniAlertOptions> implement
629
1191
 
630
1192
  declare class ConfirmationDialogComponent {
631
1193
  show: _angular_core.InputSignal<boolean>;
632
- confirmation?: Confirmation;
633
- showing: EventEmitter<any>;
1194
+ confirmation: _angular_core.InputSignal<Confirmation>;
1195
+ showing: _angular_core.OutputEmitterRef<boolean>;
634
1196
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ConfirmationDialogComponent, never>;
635
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ConfirmationDialogComponent, "uni-confirmation-dialog, Confirmation", never, { "show": { "alias": "show"; "required": false; "isSignal": true; }; "confirmation": { "alias": "confirmation"; "required": false; }; }, { "showing": "showing"; }, never, never, true, never>;
1197
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ConfirmationDialogComponent, "uni-confirmation-dialog, Confirmation", never, { "show": { "alias": "show"; "required": false; "isSignal": true; }; "confirmation": { "alias": "confirmation"; "required": false; "isSignal": true; }; }, { "showing": "showing"; }, never, never, true, never>;
636
1198
  }
637
1199
 
638
1200
  declare class NotificationsComponent {
@@ -660,7 +1222,7 @@ interface UniSnackbarOptions {
660
1222
  autoCloseDelay: number;
661
1223
  }
662
1224
 
663
- declare class UniSnackbarComponent extends BaseComponent<UniSnackbarOptions> implements AfterViewInit, OnChanges {
1225
+ declare class UniSnackbarComponent extends BaseComponent<UniSnackbarOptions> implements AfterViewInit {
664
1226
  timer: {
665
1227
  start: (durationMs: number, onComplete?: () => void) => void;
666
1228
  pause: () => void;
@@ -671,20 +1233,20 @@ declare class UniSnackbarComponent extends BaseComponent<UniSnackbarOptions> imp
671
1233
  isActive: _angular_core.Signal<boolean>;
672
1234
  secondsRemaining: _angular_core.Signal<number>;
673
1235
  };
674
- snackbarClass?: string;
675
- show?: boolean;
1236
+ /** Two-way bindable open state: [(show)]. */
1237
+ show: _angular_core.ModelSignal<boolean>;
676
1238
  iconName: _angular_core.InputSignal<string>;
677
1239
  symbolName: _angular_core.InputSignal<string>;
678
1240
  timeout: _angular_core.InputSignal<string | number>;
679
1241
  actionLabel: _angular_core.InputSignal<string>;
680
1242
  useVariant: _angular_core.InputSignal<boolean>;
681
- action: EventEmitter<any>;
682
- showing: EventEmitter<any>;
683
- snackbarRef?: ElementRef;
1243
+ action: _angular_core.OutputEmitterRef<void>;
1244
+ showing: _angular_core.OutputEmitterRef<boolean>;
1245
+ snackbarRef: _angular_core.Signal<ElementRef<any>>;
684
1246
  private get _snackbar();
685
1247
  constructor();
1248
+ protected readonly snackbarClass: _angular_core.Signal<string>;
686
1249
  fadeOut: string;
687
- ngOnChanges(changes: SimpleChanges): void;
688
1250
  ngAfterViewInit(): void;
689
1251
  private get _timeout();
690
1252
  open(): void;
@@ -692,7 +1254,235 @@ declare class UniSnackbarComponent extends BaseComponent<UniSnackbarOptions> imp
692
1254
  protected pauseTimer(): void;
693
1255
  protected resumeTimer(): void;
694
1256
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniSnackbarComponent, never>;
695
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniSnackbarComponent, "uni-snackbar, Snackbar", never, { "show": { "alias": "show"; "required": false; }; "iconName": { "alias": "iconName"; "required": false; "isSignal": true; }; "symbolName": { "alias": "symbolName"; "required": false; "isSignal": true; }; "timeout": { "alias": "timeout"; "required": false; "isSignal": true; }; "actionLabel": { "alias": "actionLabel"; "required": false; "isSignal": true; }; "useVariant": { "alias": "useVariant"; "required": false; "isSignal": true; }; }, { "action": "action"; "showing": "showing"; }, never, ["*"], true, never>;
1257
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniSnackbarComponent, "uni-snackbar, Snackbar", never, { "show": { "alias": "show"; "required": false; "isSignal": true; }; "iconName": { "alias": "iconName"; "required": false; "isSignal": true; }; "symbolName": { "alias": "symbolName"; "required": false; "isSignal": true; }; "timeout": { "alias": "timeout"; "required": false; "isSignal": true; }; "actionLabel": { "alias": "actionLabel"; "required": false; "isSignal": true; }; "useVariant": { "alias": "useVariant"; "required": false; "isSignal": true; }; }, { "show": "showChange"; "action": "action"; "showing": "showing"; }, never, ["*"], true, never>;
1258
+ }
1259
+
1260
+ interface UniPaginatorOptions {
1261
+ gap: NullableSize;
1262
+ textRole: TextRole;
1263
+ inputBorder: Border;
1264
+ inputBorderRadius: Radius;
1265
+ pageBorder: Border;
1266
+ pageBorderRadius: Radius;
1267
+ currentPageBorder: Border;
1268
+ currentPageBorderRadius: Radius;
1269
+ }
1270
+
1271
+ declare class UniPaginatorComponent<T> extends BaseComponent<UniPaginatorOptions> {
1272
+ datasource: _angular_core.InputSignal<UniDatasource<T>>;
1273
+ initPageSize: _angular_core.InputSignal<number>;
1274
+ showPageSize: _angular_core.InputSignal<boolean>;
1275
+ showPageJumper: _angular_core.InputSignal<boolean>;
1276
+ showPageNumbers: _angular_core.InputSignal<boolean>;
1277
+ constructor();
1278
+ protected readonly inputClass: _angular_core.Signal<string>;
1279
+ protected readonly pageClass: _angular_core.Signal<string>;
1280
+ updatePageSize(event: Event): void;
1281
+ jumpToPage(event: Event): void;
1282
+ isNumber(page: unknown): page is number;
1283
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniPaginatorComponent<any>, never>;
1284
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniPaginatorComponent<any>, "uni-paginator, Paginator", never, { "datasource": { "alias": "datasource"; "required": false; "isSignal": true; }; "initPageSize": { "alias": "initPageSize"; "required": false; "isSignal": true; }; "showPageSize": { "alias": "showPageSize"; "required": false; "isSignal": true; }; "showPageJumper": { "alias": "showPageJumper"; "required": false; "isSignal": true; }; "showPageNumbers": { "alias": "showPageNumbers"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1285
+ }
1286
+
1287
+ declare class UniPopoverComponent {
1288
+ private renderer;
1289
+ private theme;
1290
+ placement: _angular_core.InputSignal<Placement>;
1291
+ /** Light-dismiss on outside click / Escape (native popover="auto"). */
1292
+ autoClose: _angular_core.InputSignal<boolean>;
1293
+ readonly panelId: string;
1294
+ private readonly anchorName;
1295
+ private readonly showing;
1296
+ private triggerRef;
1297
+ private panelRef;
1298
+ constructor();
1299
+ protected onToggle(event: Event): void;
1300
+ showPopover(): void;
1301
+ hidePopover(): void;
1302
+ togglePopover(event: MouseEvent): void;
1303
+ protected readonly triggerClassName: string;
1304
+ protected readonly popoverClassName: _angular_core.Signal<string>;
1305
+ protected readonly arrowClassName: _angular_core.Signal<string>;
1306
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniPopoverComponent, never>;
1307
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniPopoverComponent, "uni-popover, Popover", never, { "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "autoClose": { "alias": "autoClose"; "required": false; "isSignal": true; }; }, {}, never, ["[trigger]", "*"], true, never>;
1308
+ }
1309
+
1310
+ declare class UniProgressBarComponent {
1311
+ theme: ThemeService;
1312
+ palette: _angular_core.Signal<Partial<Record<string, string>>>;
1313
+ width: _angular_core.InputSignal<number>;
1314
+ height: _angular_core.InputSignal<number>;
1315
+ percent: _angular_core.InputSignal<number>;
1316
+ /** Accessible name describing what is progressing (e.g. "Upload progress"). */
1317
+ ariaLabel: _angular_core.InputSignal<string>;
1318
+ stroke: number;
1319
+ protected readonly className: _angular_core.Signal<string>;
1320
+ protected readonly Math: Math;
1321
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniProgressBarComponent, never>;
1322
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniProgressBarComponent, "uni-progress-bar, ProgressBar", never, { "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "percent": { "alias": "percent"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1323
+ }
1324
+
1325
+ declare class UniProgressGaugeComponent extends BaseComponent {
1326
+ percent: _angular_core.InputSignal<number>;
1327
+ /** Accessible name describing what is progressing. */
1328
+ ariaLabel: _angular_core.InputSignal<string>;
1329
+ textStyle: _angular_core.Signal<string | number | _uni_design_system_uni_core.StyleExpression>;
1330
+ private progress;
1331
+ protected readonly className: _angular_core.Signal<string>;
1332
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniProgressGaugeComponent, never>;
1333
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniProgressGaugeComponent, "uni-progress-gauge, ProgressGauge", never, { "percent": { "alias": "percent"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1334
+ }
1335
+
1336
+ interface UniRadioOption {
1337
+ /**
1338
+ * The label displayed for this radio option
1339
+ */
1340
+ label: string;
1341
+ /**
1342
+ * The value associated with this radio option
1343
+ */
1344
+ value: string;
1345
+ /**
1346
+ * Whether this option is disabled
1347
+ */
1348
+ disabled?: boolean;
1349
+ }
1350
+ interface UniRadioOptions {
1351
+ /**
1352
+ * The size of the radio buttons
1353
+ */
1354
+ size: number;
1355
+ }
1356
+
1357
+ declare class UniRadioComponent extends BaseComponent<UniRadioOptions> implements FormValueControl<string> {
1358
+ readonly value: _angular_core.ModelSignal<string>;
1359
+ readonly disabled: _angular_core.InputSignal<boolean>;
1360
+ readonly touched: _angular_core.ModelSignal<boolean>;
1361
+ readonly invalid: _angular_core.InputSignal<boolean>;
1362
+ readonly dirty: _angular_core.InputSignal<boolean>;
1363
+ /** Synced from required() validators by the Signal Forms [field] directive. */
1364
+ readonly required: _angular_core.InputSignal<boolean>;
1365
+ /**
1366
+ * Id(s) of external element(s) describing this control — typically your
1367
+ * app-rendered error message — exposed as aria-describedby.
1368
+ */
1369
+ readonly ariaDescribedBy: _angular_core.InputSignal<string>;
1370
+ readonly options: _angular_core.InputSignal<UniRadioOption[]>;
1371
+ readonly label: _angular_core.InputSignal<string>;
1372
+ readonly name: _angular_core.InputSignal<string>;
1373
+ /** Links the group label to the radiogroup container. */
1374
+ protected readonly groupLabelId: string;
1375
+ protected readonly showError: _angular_core.Signal<boolean>;
1376
+ markAsTouched(): void;
1377
+ private readonly metrics;
1378
+ protected readonly radioGroupClass: string;
1379
+ protected readonly radioOptionClass: _angular_core.Signal<string>;
1380
+ protected readonly radioInputClass: _angular_core.Signal<string>;
1381
+ handleRadioChange(optionValue: string): void;
1382
+ getThemeColor(token: ColorToken): string;
1383
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniRadioComponent, never>;
1384
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniRadioComponent, "uni-radio, 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>;
1385
+ }
1386
+
1387
+ /**
1388
+ * Visual style of the scrollbar.
1389
+ * - `compact`: thin overlay-style scrollbar.
1390
+ * - `standard`: full-size scrollbar with a bordered track gutter.
1391
+ */
1392
+ type ScrollbarAppearance = 'standard' | 'compact';
1393
+
1394
+ type OptionalValue = string | number | undefined;
1395
+ /**
1396
+ * Native scroll area with theme-driven scrollbar styling.
1397
+ *
1398
+ * Scrollbars are styled entirely through Emotion-generated CSS:
1399
+ * `::-webkit-scrollbar` rules cover Chromium/Safari, with a
1400
+ * `scrollbar-width`/`scrollbar-color` fallback for Firefox.
1401
+ */
1402
+ declare class UniScrollAreaComponent {
1403
+ theme: ThemeService;
1404
+ isVerticallyScrollable: _angular_core.WritableSignal<boolean>;
1405
+ viewport: _angular_core.Signal<ElementRef<HTMLDivElement>>;
1406
+ content: _angular_core.Signal<ElementRef<HTMLDivElement>>;
1407
+ color: _angular_core.InputSignal<ContainerColorToken>;
1408
+ borderRadius: _angular_core.InputSignal<string>;
1409
+ padding: _angular_core.InputSignal<OptionalSize>;
1410
+ paddingHorizontal: _angular_core.InputSignal<OptionalSize>;
1411
+ paddingVertical: _angular_core.InputSignal<OptionalSize>;
1412
+ paddingLeft: _angular_core.InputSignal<OptionalSize>;
1413
+ paddingRight: _angular_core.InputSignal<OptionalSize>;
1414
+ paddingTop: _angular_core.InputSignal<OptionalSize>;
1415
+ paddingBottom: _angular_core.InputSignal<OptionalSize>;
1416
+ border: _angular_core.InputSignal<Variant>;
1417
+ height: _angular_core.InputSignal<OptionalValue>;
1418
+ width: _angular_core.InputSignal<OptionalValue>;
1419
+ appearance: _angular_core.InputSignal<ScrollbarAppearance>;
1420
+ autoHeightDisabled: _angular_core.InputSignal<boolean>;
1421
+ verticalScrollPadding: _angular_core.InputSignal<number>;
1422
+ scrollable: _angular_core.OutputEmitterRef<boolean>;
1423
+ scrollToBottom(): void;
1424
+ scrollToTop(): void;
1425
+ protected readonly className: _angular_core.Signal<string>;
1426
+ protected viewportClassName: _angular_core.Signal<string>;
1427
+ protected contentClassName: _angular_core.Signal<string>;
1428
+ constructor();
1429
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniScrollAreaComponent, never>;
1430
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniScrollAreaComponent, "div[uni-scroll-area], ScrollArea, div[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>;
1431
+ }
1432
+
1433
+ declare class UniSearchInputComponent {
1434
+ label: _angular_core.InputSignal<string>;
1435
+ width: _angular_core.InputSignal<string | number>;
1436
+ change: _angular_core.OutputEmitterRef<string>;
1437
+ search: _angular_core.OutputEmitterRef<string>;
1438
+ protected readonly className: _angular_core.Signal<string>;
1439
+ handleSearchInput(searchInput: string): void;
1440
+ handleSearch(searchInput: string | undefined): void;
1441
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniSearchInputComponent, never>;
1442
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniSearchInputComponent, "SearchInput, uni-search-input", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; }, { "change": "change"; "search": "search"; }, never, never, true, never>;
1443
+ }
1444
+
1445
+ declare class UniSelectComponent<T> implements FormValueControl<T | null> {
1446
+ readonly value: _angular_core.ModelSignal<T>;
1447
+ readonly disabled: _angular_core.InputSignal<boolean>;
1448
+ readonly touched: _angular_core.ModelSignal<boolean>;
1449
+ readonly invalid: _angular_core.InputSignal<boolean>;
1450
+ readonly dirty: _angular_core.InputSignal<boolean>;
1451
+ /** Synced from required() validators by the Signal Forms [field] directive. */
1452
+ readonly required: _angular_core.InputSignal<boolean>;
1453
+ /**
1454
+ * Id(s) of external element(s) describing this control — typically your
1455
+ * app-rendered error message — exposed as aria-describedby.
1456
+ */
1457
+ readonly ariaDescribedBy: _angular_core.InputSignal<string>;
1458
+ readonly options: _angular_core.InputSignal<Options<T>>;
1459
+ readonly placeholder: _angular_core.InputSignal<string>;
1460
+ /** Accessible name for the select; a placeholder is not a label. */
1461
+ readonly ariaLabel: _angular_core.InputSignal<string>;
1462
+ protected readonly UNSELECTED = -1;
1463
+ /**
1464
+ * We use the index as the HTML value to avoid issues with
1465
+ * stringifying complex objects or duplicate labels.
1466
+ */
1467
+ protected readonly currentSelectedIndex: _angular_core.Signal<string | -1>;
1468
+ protected readonly showError: _angular_core.Signal<boolean>;
1469
+ protected handleSelectChange(event: Event): void;
1470
+ selectClass: string;
1471
+ arrowClass: string;
1472
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniSelectComponent<any>, never>;
1473
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniSelectComponent<any>, "uni-select, SelectInput", 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; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
1474
+ }
1475
+
1476
+ declare class UniSortHeaderComponent<T> {
1477
+ column: _angular_core.InputSignal<keyof T>;
1478
+ datasource: _angular_core.InputSignal<UniDatasource<T>>;
1479
+ protected readonly buttonClass: string;
1480
+ direction: _angular_core.Signal<SortDirection>;
1481
+ protected readonly className: _angular_core.Signal<string>;
1482
+ cycleSort(): void;
1483
+ sortDatasource(direction: SortDirection): void;
1484
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniSortHeaderComponent<any>, never>;
1485
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniSortHeaderComponent<any>, "uni-sort-header", never, { "column": { "alias": "column"; "required": false; "isSignal": true; }; "datasource": { "alias": "datasource"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
696
1486
  }
697
1487
 
698
1488
  type SymbolFill = 1 | 0;
@@ -711,11 +1501,20 @@ declare class UniSymbolComponent extends BaseComponent<SymbolOptions> {
711
1501
  weight: _angular_core.InputSignal<SymbolWeight>;
712
1502
  grade: _angular_core.InputSignal<SymbolGrade>;
713
1503
  opticalSize: _angular_core.InputSignal<number>;
714
- get className(): string;
1504
+ protected readonly className: _angular_core.Signal<string>;
715
1505
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniSymbolComponent, never>;
716
1506
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniSymbolComponent, "uni-symbol, 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>;
717
1507
  }
718
1508
 
1509
+ declare class UniTagComponent {
1510
+ label: _angular_core.InputSignal<string>;
1511
+ value: _angular_core.InputSignal<string | number>;
1512
+ close: _angular_core.OutputEmitterRef<string | number>;
1513
+ handleClose(): void;
1514
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniTagComponent, never>;
1515
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniTagComponent, "Tag, uni-tag", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "close": "close"; }, never, never, true, never>;
1516
+ }
1517
+
719
1518
  declare class UniTextComponent {
720
1519
  theme: ThemeService;
721
1520
  typeface: _angular_core.InputSignal<string>;
@@ -725,11 +1524,94 @@ declare class UniTextComponent {
725
1524
  nowrap: _angular_core.InputSignal<boolean>;
726
1525
  maxWidth: _angular_core.InputSignal<number>;
727
1526
  ellipsis: _angular_core.InputSignal<boolean>;
728
- get className(): string;
1527
+ protected readonly className: _angular_core.Signal<string>;
729
1528
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniTextComponent, never>;
730
1529
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniTextComponent, "uni-text, Text", never, { "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>;
731
1530
  }
732
1531
 
1532
+ interface Preset {
1533
+ label: string;
1534
+ config: BrandPaletteConfig;
1535
+ }
1536
+ declare class UniThemeBuilderComponent {
1537
+ protected theme: ThemeService;
1538
+ protected readonly schemes: ColorScheme[];
1539
+ protected readonly categories: ColorCategory[];
1540
+ protected readonly variants: Variant[];
1541
+ protected readonly sizes: readonly ["sm", "md", "lg", "xl"];
1542
+ protected readonly swatches: {
1543
+ label: string;
1544
+ token: ColorToken;
1545
+ on: ColorToken;
1546
+ }[];
1547
+ protected readonly presets: Preset[];
1548
+ protected seed: _angular_core.WritableSignal<string>;
1549
+ protected scheme: _angular_core.WritableSignal<ColorScheme>;
1550
+ protected category: _angular_core.WritableSignal<ColorCategory>;
1551
+ protected floor: _angular_core.WritableSignal<number>;
1552
+ protected mode: _angular_core.WritableSignal<"light" | "dark">;
1553
+ protected pinPrimary: _angular_core.WritableSignal<boolean>;
1554
+ protected primaryHex: _angular_core.WritableSignal<string>;
1555
+ protected pinSecondary: _angular_core.WritableSignal<boolean>;
1556
+ protected secondaryHex: _angular_core.WritableSignal<string>;
1557
+ /** Soft brand targets carried by the active preset (cleared on seed edits). */
1558
+ protected targets: _angular_core.WritableSignal<Partial<Record<_uni_design_system_uni_core.BrandRole, string>>>;
1559
+ constructor();
1560
+ protected config: _angular_core.Signal<BrandPaletteConfig>;
1561
+ protected snippet: _angular_core.Signal<string>;
1562
+ protected color(token: ColorToken): string;
1563
+ private apply;
1564
+ protected setSeed(v: string): void;
1565
+ protected setScheme(v: ColorScheme): void;
1566
+ protected setCategory(v: ColorCategory): void;
1567
+ protected setFloor(v: string): void;
1568
+ protected setMode(v: 'light' | 'dark'): void;
1569
+ protected setPinPrimary(v: boolean): void;
1570
+ protected setPrimaryHex(v: string): void;
1571
+ protected setPinSecondary(v: boolean): void;
1572
+ protected setSecondaryHex(v: string): void;
1573
+ protected applyPreset(config: BrandPaletteConfig): void;
1574
+ protected reset(): void;
1575
+ private c;
1576
+ protected shell: _angular_core.Signal<string>;
1577
+ protected controls: _angular_core.Signal<string>;
1578
+ protected preview: _angular_core.Signal<string>;
1579
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniThemeBuilderComponent, never>;
1580
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniThemeBuilderComponent, "uni-theme-builder", never, {}, {}, never, never, true, never>;
1581
+ }
1582
+
1583
+ interface UniToggleOptions {
1584
+ /**
1585
+ * The size of the toggle switch
1586
+ */
1587
+ size: number;
1588
+ }
1589
+
1590
+ declare class UniToggleComponent extends BaseComponent<UniToggleOptions> implements FormCheckboxControl {
1591
+ readonly checked: _angular_core.ModelSignal<boolean>;
1592
+ readonly disabled: _angular_core.InputSignal<boolean>;
1593
+ readonly touched: _angular_core.ModelSignal<boolean>;
1594
+ readonly invalid: _angular_core.InputSignal<boolean>;
1595
+ readonly dirty: _angular_core.InputSignal<boolean>;
1596
+ /** Synced from required() validators by the Signal Forms [field] directive. */
1597
+ readonly required: _angular_core.InputSignal<boolean>;
1598
+ /**
1599
+ * Id(s) of external element(s) describing this control — typically your
1600
+ * app-rendered error message — exposed as aria-describedby.
1601
+ */
1602
+ readonly ariaDescribedBy: _angular_core.InputSignal<string>;
1603
+ readonly label: _angular_core.InputSignal<string>;
1604
+ protected readonly showError: _angular_core.Signal<boolean>;
1605
+ markAsTouched(): void;
1606
+ handleChange(event: Event): void;
1607
+ private readonly metrics;
1608
+ protected readonly toggleLabel: _angular_core.Signal<string>;
1609
+ protected readonly toggleInput: _angular_core.Signal<string>;
1610
+ getThemeColor(token: ColorToken): string;
1611
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniToggleComponent, never>;
1612
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniToggleComponent, "uni-toggle, 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>;
1613
+ }
1614
+
733
1615
  interface UniTooltipOptions {
734
1616
  color?: ContainerColorToken;
735
1617
  border?: Border;
@@ -738,41 +1620,58 @@ interface UniTooltipOptions {
738
1620
  typeface: TextRole;
739
1621
  }
740
1622
 
741
- type Placement = 'top' | 'right' | 'bottom' | 'left' | 'top-start' | 'right-start' | 'bottom-start' | 'left-start' | 'top-end' | 'right-end' | 'bottom-end' | 'left-end';
742
-
743
- declare class UniTooltipComponent extends BaseComponent<UniTooltipOptions> implements OnDestroy {
1623
+ declare class UniTooltipComponent extends BaseComponent<UniTooltipOptions> {
744
1624
  private elRef;
745
1625
  private renderer;
746
1626
  private timer;
747
- hoverDelayMs: _angular_core.WritableSignal<number>;
748
1627
  isMouseInside: _angular_core.WritableSignal<boolean>;
749
- private tooltip;
750
- private arrow;
1628
+ /** Whether the bubble is currently shown (or fading out). */
1629
+ private readonly visible;
1630
+ readonly tooltipId: string;
1631
+ private readonly anchorName;
751
1632
  hoverDelay: _angular_core.InputSignal<number>;
752
1633
  label: _angular_core.InputSignal<string>;
753
1634
  placement: _angular_core.InputSignal<Placement>;
754
1635
  inlineText: _angular_core.InputSignal<boolean>;
755
- appendToBody?: boolean;
1636
+ /** @deprecated The tooltip renders in the native top layer; ignored. */
1637
+ appendToBody: _angular_core.InputSignal<boolean>;
1638
+ private tipRef;
756
1639
  constructor();
1640
+ onFocusIn(event: FocusEvent): void;
1641
+ onFocusOut(): void;
1642
+ onEscape(event: Event): void;
757
1643
  toggleTooltip(): void;
758
1644
  mouseenter(): void;
759
1645
  mouseleave(): void;
760
1646
  showTooltip(): void;
761
1647
  hideTooltip(): void;
762
- get className(): string;
1648
+ protected onAnimationEnd(event: AnimationEvent): void;
1649
+ protected readonly className: _angular_core.Signal<string>;
763
1650
  private tooltipFadeIn;
764
1651
  private tooltipFadeOut;
765
- private tooltipClassName;
766
- private arrowClassName;
767
- private createTooltip;
768
- private createArrow;
769
- private setPosition;
770
- private initializeTooltip;
771
- private destroyTooltip;
772
- ngOnDestroy(): void;
1652
+ protected readonly tooltipClassName: _angular_core.Signal<string>;
1653
+ protected readonly arrowClassName: _angular_core.Signal<string>;
773
1654
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniTooltipComponent, never>;
774
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniTooltipComponent, "uni-tooltip, 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; }; }, {}, never, ["*"], true, never>;
1655
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniTooltipComponent, "uni-tooltip, 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>;
1656
+ }
1657
+
1658
+ declare class BodyRenderDirective implements OnInit {
1659
+ private el;
1660
+ private renderer;
1661
+ ngOnInit(): void;
1662
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BodyRenderDirective, never>;
1663
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BodyRenderDirective, "[uniBodyRender]", never, {}, {}, never, never, true, never>;
1664
+ }
1665
+
1666
+ declare class DragAndDropDirective {
1667
+ onFileDropped: _angular_core.OutputEmitterRef<FileList>;
1668
+ protected workspaceOpacity: _angular_core.WritableSignal<string>;
1669
+ onDragOver(event: DragEvent): void;
1670
+ onDragLeave(event: DragEvent): void;
1671
+ onDrop(event: DragEvent): void;
1672
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DragAndDropDirective, never>;
1673
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DragAndDropDirective, "[uni-drag-n-drop], [dragAndDrop]", never, {}, { "onFileDropped": "onFileDropped"; }, never, never, true, never>;
775
1674
  }
776
1675
 
777
- export { ConfirmationDialogComponent, LocalStorageService, NotificationService, NotificationsComponent, RippleDirective, ThemeService, UNI_THEMES, UniAlertComponent, UniBadgeComponent, UniBaseDatasource, UniBoxComponent, UniButtonComponent, UniCardComponent, UniCardContentComponent, UniCardHeaderComponent, UniCenterComponent, UniDialogButtonsComponent, UniDialogComponent, UniDialogHeaderComponent, UniDividerComponent, UniDropdownComponent, UniGridAreaComponent, UniGridComponent, UniIconButtonComponent, UniIconComponent, UniMenuComponent, UniRecordDatasource, UniRowComponent, UniServerSideDatasource, UniSnackbarComponent, UniStackComponent, UniSymbolComponent, UniTextComponent, UniTooltipComponent, UniWrapComponent, useTimer };
778
- export type { Alert, Confirmation, DataLoader, MenuItem, MenuItemWithLabel, MenuItemWithTemplate, Option, Options, PageRequest, PageResponse, Snackbar, Sort, SortDirection, UniDatasource };
1676
+ export { BodyRenderDirective, ConfirmationDialogComponent, DragAndDropDirective, FOCUSABLE_SELECTOR, LocalStorageService, NotificationService, NotificationsComponent, RippleDirective, ThemeService, UNI_THEMES, UniAlertComponent, UniBackgroundComponent, UniBadgeComponent, UniBaseDatasource, UniBoxComponent, UniButtonComponent, UniButtonGroupComponent, UniCardComponent, UniCardContentComponent, UniCardHeaderComponent, UniCenterComponent, UniCheckboxComponent, UniDataSearchComponent, UniDataTableComponent, UniDebounceInputComponent, UniDialogButtonsComponent, UniDialogComponent, UniDialogHeaderComponent, UniDividerComponent, 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, UniSnackbarComponent, UniSortHeaderComponent, UniStackComponent, UniSymbolComponent, UniTagComponent, UniTextComponent, UniThemeBuilderComponent, UniToggleComponent, UniTooltipComponent, UniWrapComponent, acceptableFile, anchorArrowStyles, anchorStyles, getFileExtension, motionSafe, newAnchorName, resolveFocusTarget, uniqueId, useTimer, visuallyHidden };
1677
+ export type { Alert, AnchorOffset, BrandPaletteConfig, ButtonGroupConfig, ButtonGroupItem, ColumnDefinition, Confirmation, DataLoader, ImagePosition, MenuItem, MenuItemWithLabel, MenuItemWithTemplate, Option, Options, PageRequest, PageResponse, Placement, ScrollbarAppearance, Snackbar, Sort, SortDirection, UniCheckboxOptions, UniDataSearchOptions, UniDataTableOptions, UniDatasource, UniInputBoxOptions, UniMultiSelectDropdownOptions, UniNotificationBadgeOptions, UniPaginatorOptions, UniRadioOption, UniRadioOptions, UniToggleOptions };