@uni-design-system/uni-angular 5.0.0 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { Signal, WritableSignal, InjectionToken, ElementRef, TemplateRef, OnInit, OnDestroy, AfterViewInit } from '@angular/core';
3
3
  import * as _uni_design_system_uni_core from '@uni-design-system/uni-core';
4
- import { 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';
4
+ import { Icons, Variant, ContainerColorToken, PaletteConfig, GenerateColorsConfig, Radii, UniTheme, ComponentName, ComponentTheme, NullableSize, ThemeName, TextRole, ContentColorToken, Size, Thickness, NullableStyleExpression, ColorKey, ColorToken, Typeface, Radius, OptionalSize, Border, Shadow, ZIndexableElements, Elevation, RadiiSize, TextColor, JustifyContent, StyleExpression, Orientation, OptionalAlignSelf, OptionalAlignItems, OptionalAlignContent, OptionalJustifyContent, OptionalDisplay, OptionalPosition, OptionalOverflow, OptionalFlexDirection, OptionalTextAlign, OptionalWrap, ColorScheme, ColorCategory, ThemeShape, ContrastCheck, Colors, GenerationInput } from '@uni-design-system/uni-core';
5
5
  import { FormCheckboxControl, FormValueControl } from '@angular/forms/signals';
6
6
 
7
7
  /**
@@ -263,7 +263,10 @@ declare const getFileExtension: (file: File) => string;
263
263
  * strengths: `brand` pins are emitted verbatim (may fail contrast), `targets`
264
264
  * are brand-faithful but the WCAG guard-rail may adjust their lightness.
265
265
  */
266
- type BrandPaletteConfig = Required<Pick<PaletteConfig, 'seed' | 'scheme' | 'category'>> & Pick<GenerateColorsConfig, 'mode' | 'accentSaturationFloor' | 'brand' | 'targets'>;
266
+ type BrandPaletteConfig = Required<Pick<PaletteConfig, 'seed' | 'scheme' | 'category'>> & Pick<GenerateColorsConfig, 'mode' | 'accentSaturationFloor' | 'brand' | 'targets'> & {
267
+ /** Radii override (e.g. a `ShapeRadii` shape-language preset). */
268
+ radii?: Radii;
269
+ };
267
270
  declare class ThemeService {
268
271
  /** localStorage key marking the custom brand theme as active. */
269
272
  static readonly CUSTOM_KEY = "CustomTheme";
@@ -356,19 +359,6 @@ declare class ThemeService {
356
359
 
357
360
  declare const UNI_THEMES: InjectionToken<Record<string, UniTheme>>;
358
361
 
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
-
372
362
  declare class BaseComponent<T = unknown> {
373
363
  protected componentName: ComponentName;
374
364
  theme: ThemeService;
@@ -383,6 +373,109 @@ declare class BaseComponent<T = unknown> {
383
373
  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>;
384
374
  }
385
375
 
376
+ /** Theme-level options for `uni-app-bar`, resolved by token name. */
377
+ interface UniAppBarOptions {
378
+ /** Bar surface color token (with its paired on-color). */
379
+ color?: ContainerColorToken;
380
+ /** Bar height in px. */
381
+ height?: number;
382
+ /** Rule under the bar, as a border primitive token. */
383
+ divider?: Border;
384
+ /** Title typography token. */
385
+ typeface?: Typeface;
386
+ /** Horizontal padding, as a spacing token. */
387
+ padding?: OptionalSize;
388
+ /** Space between bar children, as a spacing token. */
389
+ gap?: OptionalSize;
390
+ /** Optional elevation shadow token (e.g. 'raised'). */
391
+ elevation?: Elevation;
392
+ }
393
+
394
+ /**
395
+ * Horizontal application bar: project leading controls (menu button, logo)
396
+ * with the `leading` attribute, actions with `trailing` (pushed to the far
397
+ * edge), and either pass `title` or project custom center content. Surface,
398
+ * divider, height, typography and spacing all resolve from `appBar` tokens.
399
+ * Place it inside your page's `<header>` landmark.
400
+ */
401
+ declare class UniAppBarComponent extends BaseComponent<UniAppBarOptions> {
402
+ /** Bar title; alternatively project your own center content. */
403
+ title: _angular_core.InputSignal<string>;
404
+ /** Stick the bar to the top of its scroll container. */
405
+ sticky: _angular_core.InputSignal<boolean>;
406
+ protected readonly className: _angular_core.Signal<string>;
407
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniAppBarComponent, never>;
408
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniAppBarComponent, "uni-app-bar, AppBar", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; }, {}, never, ["[leading]", "*", "[trailing]"], true, never>;
409
+ }
410
+
411
+ /** Theme-level options for `uni-avatar`, resolved by token name. */
412
+ interface UniAvatarOptions {
413
+ /** Corner radius token — `max` renders circles; `sharp` themes get squares. */
414
+ borderRadius?: Radius;
415
+ /** Typeface token for the initials. */
416
+ typeface?: Typeface;
417
+ /** Symbol shown when there is no image and no name to take initials from. */
418
+ fallbackSymbol?: string;
419
+ }
420
+ /** Theme-level options for `uni-avatar-group`. */
421
+ interface UniAvatarGroupOptions {
422
+ /** How far stacked avatars overlap, as a spacing token. */
423
+ overlap?: OptionalSize;
424
+ /** Ring color separating stacked avatars from each other. */
425
+ ringColor?: ColorKey;
426
+ /** Ring width in px. */
427
+ ringWidth?: number;
428
+ }
429
+
430
+ /**
431
+ * Identity avatar with a graceful fallback chain: image → initials from
432
+ * `name` → themed symbol. Coloring, radius, typeface and sizes all resolve
433
+ * from `avatar` theme tokens; `variant` picks the container palette.
434
+ */
435
+ declare class UniAvatarComponent extends BaseComponent<UniAvatarOptions> {
436
+ /** Image URL; on load error the avatar falls back to initials/symbol. */
437
+ src: _angular_core.InputSignal<string>;
438
+ /** Person's name: drives the initials and the accessible label. */
439
+ name: _angular_core.InputSignal<string>;
440
+ /** Verbatim text instead of derived initials (e.g. a group's “+3”). */
441
+ text: _angular_core.InputSignal<string>;
442
+ protected readonly imageFailed: _angular_core.WritableSignal<boolean>;
443
+ protected readonly showImage: _angular_core.Signal<boolean>;
444
+ protected readonly initials: _angular_core.Signal<string>;
445
+ protected readonly label: _angular_core.Signal<string>;
446
+ protected readonly className: _angular_core.Signal<string>;
447
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniAvatarComponent, never>;
448
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniAvatarComponent, "uni-avatar, Avatar", never, { "src": { "alias": "src"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "text": { "alias": "text"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
449
+ }
450
+
451
+ /**
452
+ * Overlapping stack of avatars. `max` collapses the overflow into a themed
453
+ * “+N” chip (itself a `uni-avatar`). Overlap and separator ring resolve from
454
+ * `avatarGroup` theme tokens.
455
+ */
456
+ declare class UniAvatarGroupComponent extends BaseComponent<UniAvatarGroupOptions> {
457
+ /** Show at most this many avatars; the rest collapse into a “+N” chip. */
458
+ max: _angular_core.InputSignal<number>;
459
+ private readonly avatars;
460
+ protected readonly surplus: _angular_core.Signal<number>;
461
+ protected readonly className: _angular_core.Signal<string>;
462
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniAvatarGroupComponent, never>;
463
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniAvatarGroupComponent, "uni-avatar-group, AvatarGroup", never, { "max": { "alias": "max"; "required": false; "isSignal": true; }; }, {}, ["avatars"], ["*"], true, never>;
464
+ }
465
+
466
+ type ImagePosition = 'top' | 'bottom' | 'left' | 'right' | 'center' | string;
467
+ declare class UniBackgroundComponent {
468
+ theme: ThemeService;
469
+ image: _angular_core.InputSignal<string>;
470
+ imagePosition: _angular_core.InputSignal<string>;
471
+ imageSize: _angular_core.InputSignal<string | number>;
472
+ height: _angular_core.InputSignal<string | number>;
473
+ width: _angular_core.InputSignal<string | number>;
474
+ protected readonly className: _angular_core.Signal<string>;
475
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniBackgroundComponent, never>;
476
+ 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>;
477
+ }
478
+
386
479
  interface UniBadgeOptions {
387
480
  borderRadius?: RadiiSize;
388
481
  }
@@ -396,6 +489,62 @@ declare class UniBadgeComponent extends BaseComponent<UniBadgeOptions> {
396
489
  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>;
397
490
  }
398
491
 
492
+ /** One step in the trail. The last item is treated as the current page. */
493
+ interface BreadcrumbItem {
494
+ label: string;
495
+ /** Link target. Omit for SPA routing and handle `itemClicked` instead. */
496
+ href?: string;
497
+ }
498
+ /** Theme-level options for `uni-breadcrumb`, resolved by token name. */
499
+ interface UniBreadcrumbOptions {
500
+ /** Trail typography token. */
501
+ typeface?: Typeface;
502
+ /** Link color for ancestor items. */
503
+ color?: ColorKey;
504
+ /** Color of the current (last) item. */
505
+ currentColor?: ColorKey;
506
+ /** Material symbol drawn between items. */
507
+ separatorSymbol?: string;
508
+ /** Space around separators, as a spacing token. */
509
+ gap?: OptionalSize;
510
+ }
511
+
512
+ /**
513
+ * WAI-ARIA breadcrumb: a `nav` landmark wrapping an ordered list; the last
514
+ * item is the current page (`aria-current="page"`), separators are decorative.
515
+ * Items with `href` render as real links; without one they render as
516
+ * link-styled buttons emitting `itemClicked` — wire that to your router.
517
+ */
518
+ declare class UniBreadcrumbComponent extends BaseComponent<UniBreadcrumbOptions> {
519
+ /** The trail, root first; the last item is the current page. */
520
+ items: _angular_core.InputSignal<BreadcrumbItem[]>;
521
+ /** Landmark label distinguishing this nav from others on the page. */
522
+ ariaLabel: _angular_core.InputSignal<string>;
523
+ /** Emits the clicked ancestor item (also fires for `href` links). */
524
+ itemClicked: _angular_core.OutputEmitterRef<BreadcrumbItem>;
525
+ protected readonly className: _angular_core.Signal<string>;
526
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniBreadcrumbComponent, never>;
527
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniBreadcrumbComponent, "uni-breadcrumb, Breadcrumb", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "itemClicked": "itemClicked"; }, never, never, true, never>;
528
+ }
529
+
530
+ /** Theme-level options for `uni-text-button`, resolved by token name. */
531
+ interface UniButtonOptions {
532
+ /**
533
+ * Corner radius as a radii token. The default theme uses `max` (pill);
534
+ * because this is a token, the theme's radii scale — including generated
535
+ * shape languages (`sharp`/`modern`/`playful`) and custom primitives —
536
+ * restyles every button without touching component code.
537
+ */
538
+ borderRadius?: RadiiSize;
539
+ /**
540
+ * Label typography as a typeface token. Defaults to the type scale's
541
+ * `button` role (family/weight/transform); per-size `fontSize` overrides
542
+ * from the theme's `sizes` still apply on top. Point it at any typeface —
543
+ * including custom primitives added to the theme's typography.
544
+ */
545
+ typeface?: Typeface;
546
+ }
547
+
399
548
  declare class RippleDirective {
400
549
  private renderer;
401
550
  el: ElementRef<any>;
@@ -408,7 +557,7 @@ declare class RippleDirective {
408
557
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RippleDirective, "[uniRipple]", never, {}, {}, never, never, true, never>;
409
558
  }
410
559
 
411
- declare class UniButtonComponent extends BaseComponent {
560
+ declare class UniButtonComponent extends BaseComponent<UniButtonOptions> {
412
561
  readonly disable: _angular_core.InputSignal<boolean>;
413
562
  readonly loading: _angular_core.InputSignal<boolean>;
414
563
  readonly fullWidth: _angular_core.InputSignal<boolean>;
@@ -456,14 +605,31 @@ declare class UniCardHeaderComponent extends BaseComponent {
456
605
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniCardHeaderComponent, "uni-card-header, CardHeader", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "titleTextRole": { "alias": "titleTextRole"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
457
606
  }
458
607
 
608
+ /** Theme-level options for `uni-card`, resolved by token name. */
459
609
  interface UniCardOptions {
460
- defaultVariant: Variant;
461
- borderRadius: Radius;
462
- transitionSpeed: number;
610
+ defaultVariant?: Variant;
611
+ /** Corner radius as a radii token. The default theme uses `xs`. */
612
+ borderRadius?: Radius;
613
+ /**
614
+ * Frame as a border primitive token. When unset, the card follows its
615
+ * variant — `borders.primary`, `borders.warn`, … — so redefining a border
616
+ * primitive restyles every card (and every other component) sharing it.
617
+ */
618
+ border?: Border;
619
+ /** Optional elevation shadow token; cards are flat by default. */
463
620
  elevation?: Elevation;
621
+ transitionSpeed?: number;
464
622
  }
465
623
 
466
624
  declare class UniCardComponent extends BaseComponent<UniCardOptions> {
625
+ /**
626
+ * Token-resolved frame (variant-named border primitive, radii, elevation)
627
+ * under the merged theme style, so hand-authored fixed/variant styles from
628
+ * older themes keep winning.
629
+ */
630
+ protected readonly cardStyle: _angular_core.Signal<{
631
+ boxShadow: string;
632
+ }>;
467
633
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniCardComponent, never>;
468
634
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniCardComponent, "uni-card, Card", never, {}, {}, never, ["*"], true, never>;
469
635
  }
@@ -689,6 +855,62 @@ declare class UniDividerComponent {
689
855
  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>;
690
856
  }
691
857
 
858
+ /** How the drawer coexists with page content. */
859
+ type DrawerMode = 'side' | 'over';
860
+ /** Which edge the drawer attaches to (logical: start = left in LTR). */
861
+ type DrawerPosition = 'start' | 'end';
862
+ /** Theme-level options for `uni-drawer`, resolved by token name. */
863
+ interface UniDrawerOptions {
864
+ /** Panel surface color token (with its paired on-color). */
865
+ color?: ContainerColorToken;
866
+ /** Panel width in px. */
867
+ width?: number;
868
+ /** Edge rule separating a side drawer from content, as a border primitive. */
869
+ divider?: Border;
870
+ /** Elevation shadow token for the overlay mode. */
871
+ elevation?: Elevation;
872
+ /** Inner padding, as a spacing token. */
873
+ padding?: OptionalSize;
874
+ /** Backdrop styling for the overlay mode. */
875
+ backdrop?: StyleExpression;
876
+ }
877
+
878
+ /**
879
+ * Navigation drawer with two modes sharing one content slot:
880
+ *
881
+ * - `side` — an in-flow `<aside>` that pushes content (dashboard sidenav);
882
+ * opening/closing animates its width, and the divider border primitive
883
+ * separates it from the page.
884
+ * - `over` — a native `<dialog>` in the top layer: focus trap, Escape and
885
+ * scrim backdrop come from the platform (same machinery as `uni-dialog`),
886
+ * sliding in from its edge.
887
+ *
888
+ * Surface, width, divider, elevation, padding and backdrop all resolve from
889
+ * `drawer` theme tokens.
890
+ */
891
+ declare class UniDrawerComponent extends BaseComponent<UniDrawerOptions> {
892
+ /** Two-way bindable open state: [(open)]. */
893
+ readonly open: _angular_core.ModelSignal<boolean>;
894
+ mode: _angular_core.InputSignal<DrawerMode>;
895
+ position: _angular_core.InputSignal<DrawerPosition>;
896
+ /** Accessible name for the overlay mode's dialog. */
897
+ ariaLabel: _angular_core.InputSignal<string>;
898
+ protected readonly contentTemplate: _angular_core.Signal<TemplateRef<unknown>>;
899
+ private readonly overlay;
900
+ constructor();
901
+ protected onBackdropClick(event: Event): void;
902
+ /** Route Escape through the animated close, keeping `open` in sync. */
903
+ protected onCancel(event: Event): void;
904
+ protected onAnimationEnd(event: AnimationEvent): void;
905
+ private readonly edge;
906
+ private readonly slideIn;
907
+ private readonly slideOut;
908
+ protected readonly sideClass: _angular_core.Signal<string>;
909
+ protected readonly overClass: _angular_core.Signal<string>;
910
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniDrawerComponent, never>;
911
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniDrawerComponent, "uni-drawer, Drawer", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "open": "openChange"; }, never, ["*"], true, never>;
912
+ }
913
+
692
914
  interface UniDropdownOptions {
693
915
  border: Border;
694
916
  borderRadius: Radius;
@@ -838,7 +1060,9 @@ declare class UniIconComponent {
838
1060
 
839
1061
  declare class UniIconButtonComponent {
840
1062
  private theme;
841
- config: _angular_core.Signal<_uni_design_system_uni_core.ComponentTheme<unknown>>;
1063
+ config: _angular_core.Signal<_uni_design_system_uni_core.ComponentTheme<{
1064
+ borderRadius?: RadiiSize;
1065
+ }>>;
842
1066
  /**
843
1067
  * Accessible name for the button. Alternative to projecting text content
844
1068
  * (`<button icon-button>Close</button>`); one of the two is required for
@@ -905,12 +1129,14 @@ declare class UniInputBoxComponent extends BaseComponent<UniInputBoxOptions> {
905
1129
  disabled: _angular_core.InputSignal<boolean>;
906
1130
  error: _angular_core.InputSignal<boolean>;
907
1131
  minWidth: _angular_core.InputSignal<string>;
1132
+ /** Override the themed field height, e.g. `'auto'` for multi-line fields. */
1133
+ height: _angular_core.InputSignal<string | number>;
908
1134
  protected readonly color: _angular_core.Signal<_uni_design_system_uni_core.ContainerColorToken>;
909
1135
  protected readonly border: _angular_core.Signal<string>;
910
1136
  protected readonly shadow: _angular_core.Signal<string>;
911
1137
  protected readonly inputBoxClass: _angular_core.Signal<string>;
912
1138
  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>;
1139
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniInputBoxComponent, "uni-input-box", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "minWidth": { "alias": "minWidth"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
914
1140
  }
915
1141
 
916
1142
  declare class UniJsonViewComponent {
@@ -1473,6 +1699,196 @@ declare class UniSelectComponent<T> implements FormValueControl<T | null> {
1473
1699
  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
1700
  }
1475
1701
 
1702
+ /** Placeholder geometry: a text line block, a rectangle, or a circle. */
1703
+ type SkeletonShape = 'text' | 'rect' | 'circle';
1704
+ /** Theme-level options for `uni-skeleton`, resolved by token name. */
1705
+ interface UniSkeletonOptions {
1706
+ /** Base placeholder color. */
1707
+ color?: ColorKey;
1708
+ /** Sweep highlight color for the shimmer. */
1709
+ highlightColor?: ColorKey;
1710
+ /** Corner radius token for text/rect shapes (circles are always round). */
1711
+ borderRadius?: Radius;
1712
+ /** 'shimmer' animates a highlight sweep; 'none' renders static blocks. */
1713
+ animation?: 'shimmer' | 'none';
1714
+ /** Shimmer sweep duration in seconds. */
1715
+ duration?: number;
1716
+ /** Vertical gap between text lines, as a spacing token. */
1717
+ gap?: OptionalSize;
1718
+ }
1719
+
1720
+ /**
1721
+ * Loading placeholder painted with surface tokens. `text` renders one or more
1722
+ * lines (the last line shortened, as real text would be), `rect` and `circle`
1723
+ * render fixed shapes. The shimmer only animates when the user allows motion;
1724
+ * it degrades to static blocks under `prefers-reduced-motion`.
1725
+ */
1726
+ declare class UniSkeletonComponent extends BaseComponent<UniSkeletonOptions> {
1727
+ shape: _angular_core.InputSignal<SkeletonShape>;
1728
+ /** CSS width; defaults to 100% for text/rect and `height` for circles. */
1729
+ width: _angular_core.InputSignal<string | number>;
1730
+ /** CSS height per block; defaults to 1em (text), 96px (rect), 40px (circle). */
1731
+ height: _angular_core.InputSignal<string | number>;
1732
+ /** Number of text lines (text shape only). */
1733
+ lines: _angular_core.InputSignal<number>;
1734
+ private readonly cssSize;
1735
+ protected readonly resolvedHeight: _angular_core.Signal<string>;
1736
+ protected readonly lineWidths: _angular_core.Signal<string[]>;
1737
+ private readonly sweep;
1738
+ protected readonly className: _angular_core.Signal<string>;
1739
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniSkeletonComponent, never>;
1740
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniSkeletonComponent, "uni-skeleton, Skeleton", never, { "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "lines": { "alias": "lines"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1741
+ }
1742
+
1743
+ /** Theme-level options for `uni-slider`, resolved by token name. */
1744
+ interface UniSliderOptions {
1745
+ /** Fill and thumb color. */
1746
+ color?: ColorKey;
1747
+ /** Unfilled track color. */
1748
+ trackColor?: ColorKey;
1749
+ /** Track and thumb radius token. */
1750
+ borderRadius?: Radius;
1751
+ /** Track height in px. */
1752
+ trackHeight?: number;
1753
+ /** Thumb diameter in px. */
1754
+ thumbSize?: number;
1755
+ }
1756
+
1757
+ /**
1758
+ * Range slider on a native `<input type="range">` — keyboard interaction and
1759
+ * the ARIA slider contract come from the platform. Fill, track, thumb and
1760
+ * radii resolve from `slider` theme tokens; the fill percentage rides a CSS
1761
+ * custom property so dragging never regenerates styles.
1762
+ */
1763
+ declare class UniSliderComponent extends BaseComponent<UniSliderOptions> implements FormValueControl<number> {
1764
+ readonly value: _angular_core.ModelSignal<number>;
1765
+ readonly disabled: _angular_core.InputSignal<boolean>;
1766
+ readonly touched: _angular_core.ModelSignal<boolean>;
1767
+ readonly invalid: _angular_core.InputSignal<boolean>;
1768
+ readonly dirty: _angular_core.InputSignal<boolean>;
1769
+ /** Synced from required() validators by the Signal Forms [field] directive. */
1770
+ readonly required: _angular_core.InputSignal<boolean>;
1771
+ /**
1772
+ * Id(s) of external element(s) describing this control — typically your
1773
+ * app-rendered value or error text — exposed as aria-describedby.
1774
+ */
1775
+ readonly ariaDescribedBy: _angular_core.InputSignal<string>;
1776
+ label: _angular_core.InputSignal<string>;
1777
+ min: _angular_core.InputSignal<number>;
1778
+ max: _angular_core.InputSignal<number>;
1779
+ step: _angular_core.InputSignal<number>;
1780
+ protected readonly resolvedMin: _angular_core.Signal<number>;
1781
+ protected readonly resolvedMax: _angular_core.Signal<number>;
1782
+ markAsTouched(): void;
1783
+ handleInput(event: Event): void;
1784
+ protected readonly fillPercent: _angular_core.Signal<string>;
1785
+ protected readonly inputClass: _angular_core.Signal<string>;
1786
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniSliderComponent, never>;
1787
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniSliderComponent, "uni-slider, Slider", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
1788
+ }
1789
+
1790
+ /**
1791
+ * One tab inside `uni-tabs`: a label for the tablist plus projected panel
1792
+ * content. Content is captured in a template and only instantiated while the
1793
+ * tab is selected, so inactive panels cost nothing.
1794
+ */
1795
+ declare class UniTabComponent {
1796
+ label: _angular_core.InputSignal<string>;
1797
+ disabled: _angular_core.InputSignal<boolean>;
1798
+ /** Stable ids wiring tab ↔ panel ARIA relationships. */
1799
+ readonly id: string;
1800
+ readonly panelId: string;
1801
+ readonly content: _angular_core.Signal<TemplateRef<unknown>>;
1802
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniTabComponent, never>;
1803
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniTabComponent, "uni-tab, Tab", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1804
+ }
1805
+
1806
+ /**
1807
+ * Theme-level options for `uni-tabs`, resolved by token name. The defaults
1808
+ * render Material-style underline tabs; a theme can re-point the tokens to
1809
+ * get pills (`borderRadius: 'max'` + `activeColor`) or any custom treatment.
1810
+ */
1811
+ interface UniTabsOptions {
1812
+ /** Tab label typography. */
1813
+ typeface?: Typeface;
1814
+ /** Inactive tab label color. */
1815
+ textColor?: ColorKey;
1816
+ /** Active tab label color. */
1817
+ activeTextColor?: ColorKey;
1818
+ /** Active indicator (underline) color. */
1819
+ indicatorColor?: ColorKey;
1820
+ /** Active indicator height as a thickness token. */
1821
+ indicatorThickness?: Thickness;
1822
+ /** Rule under the whole tablist, as a border primitive token. */
1823
+ divider?: Border;
1824
+ /** Space between tabs, as a spacing token. */
1825
+ gap?: OptionalSize;
1826
+ /** Tab corner radius — 'max' plus `activeColor` gives segmented pills. */
1827
+ borderRadius?: Radius;
1828
+ /** Horizontal padding inside each tab, as a spacing token. */
1829
+ padding?: OptionalSize;
1830
+ /** Optional active tab background color (pill styles). */
1831
+ activeColor?: ColorKey;
1832
+ }
1833
+
1834
+ /**
1835
+ * WAI-ARIA tabs: roving tabindex, automatic activation (arrow keys move focus
1836
+ * and select), Home/End, disabled tabs skipped. Only the selected panel is
1837
+ * instantiated. All styling resolves from `tabs` theme option tokens.
1838
+ */
1839
+ declare class UniTabsComponent extends BaseComponent<UniTabsOptions> {
1840
+ /** Index of the selected tab; two-way bindable. */
1841
+ readonly selectedIndex: _angular_core.ModelSignal<number>;
1842
+ protected readonly tabs: _angular_core.Signal<readonly UniTabComponent[]>;
1843
+ private readonly tabButtons;
1844
+ /** The selection, snapped to the nearest enabled tab. */
1845
+ protected readonly activeIndex: _angular_core.Signal<number>;
1846
+ protected readonly activeTab: _angular_core.Signal<UniTabComponent>;
1847
+ protected select(index: number): void;
1848
+ protected onKeydown(event: KeyboardEvent): void;
1849
+ protected readonly tablistClass: _angular_core.Signal<string>;
1850
+ protected readonly tabClass: _angular_core.Signal<string>;
1851
+ protected readonly panelClass: _angular_core.Signal<string>;
1852
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniTabsComponent, never>;
1853
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniTabsComponent, "uni-tabs, Tabs", never, { "selectedIndex": { "alias": "selectedIndex"; "required": false; "isSignal": true; }; }, { "selectedIndex": "selectedIndexChange"; }, ["tabs"], never, true, never>;
1854
+ }
1855
+
1856
+ declare class UniTextareaComponent implements FormValueControl<string> {
1857
+ private theme;
1858
+ readonly value: _angular_core.ModelSignal<string>;
1859
+ readonly disabled: _angular_core.InputSignal<boolean>;
1860
+ readonly touched: _angular_core.ModelSignal<boolean>;
1861
+ readonly invalid: _angular_core.InputSignal<boolean>;
1862
+ readonly dirty: _angular_core.InputSignal<boolean>;
1863
+ /** Synced from required() validators by the Signal Forms [field] directive. */
1864
+ readonly required: _angular_core.InputSignal<boolean>;
1865
+ /**
1866
+ * Id(s) of external element(s) describing this control — typically your
1867
+ * app-rendered error message — exposed as aria-describedby.
1868
+ */
1869
+ readonly ariaDescribedBy: _angular_core.InputSignal<string>;
1870
+ label: _angular_core.InputSignal<string>;
1871
+ placeholder: _angular_core.InputSignal<string>;
1872
+ /** Visible text rows. Defaults to the theme's `textarea` options. */
1873
+ rows: _angular_core.InputSignal<number>;
1874
+ private options;
1875
+ protected readonly resolvedRows: _angular_core.Signal<number>;
1876
+ protected readonly showError: _angular_core.Signal<boolean>;
1877
+ protected readonly textareaClass: _angular_core.Signal<string>;
1878
+ markAsTouched(): void;
1879
+ handleInput(event: Event): void;
1880
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniTextareaComponent, never>;
1881
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniTextareaComponent, "uni-textarea", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
1882
+ }
1883
+
1884
+ /** Theme-level options for `uni-textarea`. */
1885
+ interface UniTextareaOptions {
1886
+ /** Default visible text rows when the component doesn't set `rows`. */
1887
+ rows?: number;
1888
+ /** CSS resize behavior of the field. */
1889
+ resize?: 'none' | 'vertical' | 'horizontal' | 'both';
1890
+ }
1891
+
1476
1892
  declare class UniSortHeaderComponent<T> {
1477
1893
  column: _angular_core.InputSignal<keyof T>;
1478
1894
  datasource: _angular_core.InputSignal<UniDatasource<T>>;
@@ -1537,6 +1953,7 @@ declare class UniThemeBuilderComponent {
1537
1953
  protected theme: ThemeService;
1538
1954
  protected readonly schemes: ColorScheme[];
1539
1955
  protected readonly categories: ColorCategory[];
1956
+ protected readonly shapes: ThemeShape[];
1540
1957
  protected readonly variants: Variant[];
1541
1958
  protected readonly sizes: readonly ["sm", "md", "lg", "xl"];
1542
1959
  protected readonly swatches: {
@@ -1548,6 +1965,7 @@ declare class UniThemeBuilderComponent {
1548
1965
  protected seed: _angular_core.WritableSignal<string>;
1549
1966
  protected scheme: _angular_core.WritableSignal<ColorScheme>;
1550
1967
  protected category: _angular_core.WritableSignal<ColorCategory>;
1968
+ protected shape: _angular_core.WritableSignal<ThemeShape>;
1551
1969
  protected floor: _angular_core.WritableSignal<number>;
1552
1970
  protected mode: _angular_core.WritableSignal<"light" | "dark">;
1553
1971
  protected pinPrimary: _angular_core.WritableSignal<boolean>;
@@ -1556,14 +1974,43 @@ declare class UniThemeBuilderComponent {
1556
1974
  protected secondaryHex: _angular_core.WritableSignal<string>;
1557
1975
  /** Soft brand targets carried by the active preset (cleared on seed edits). */
1558
1976
  protected targets: _angular_core.WritableSignal<Partial<Record<_uni_design_system_uni_core.BrandRole, string>>>;
1977
+ protected copied: _angular_core.WritableSignal<"file" | "ngadd" | "dtcg">;
1978
+ protected showAllPairs: _angular_core.WritableSignal<boolean>;
1559
1979
  constructor();
1560
1980
  protected config: _angular_core.Signal<BrandPaletteConfig>;
1981
+ /**
1982
+ * Both modes generated on every input change (< 15 ms each), independent of
1983
+ * the storybook-wide theme — the side-by-side preview and the contrast
1984
+ * report always show the full light+dark picture.
1985
+ */
1986
+ protected palettes: _angular_core.Signal<{
1987
+ light: Partial<Record<string, string>>;
1988
+ dark: Partial<Record<string, string>>;
1989
+ checks: ContrastCheck[];
1990
+ }>;
1991
+ protected modePanels: _angular_core.Signal<{
1992
+ label: "light" | "dark";
1993
+ colors: Colors;
1994
+ }[]>;
1995
+ protected report: _angular_core.Signal<{
1996
+ checks: ContrastCheck[];
1997
+ failing: ContrastCheck[];
1998
+ worst: number;
1999
+ }>;
2000
+ protected visibleChecks: _angular_core.Signal<ContrastCheck[]>;
1561
2001
  protected snippet: _angular_core.Signal<string>;
2002
+ /** The builder state expressed as engine input — drives all three exports. */
2003
+ protected generationInput: _angular_core.Signal<GenerationInput>;
1562
2004
  protected color(token: ColorToken): string;
1563
2005
  private apply;
2006
+ private copyToClipboard;
2007
+ protected copyThemeFile(): void;
2008
+ protected copyNgAdd(): void;
2009
+ protected copyDtcg(): void;
1564
2010
  protected setSeed(v: string): void;
1565
2011
  protected setScheme(v: ColorScheme): void;
1566
2012
  protected setCategory(v: ColorCategory): void;
2013
+ protected setShape(v: ThemeShape): void;
1567
2014
  protected setFloor(v: string): void;
1568
2015
  protected setMode(v: 'light' | 'dark'): void;
1569
2016
  protected setPinPrimary(v: boolean): void;
@@ -1673,5 +2120,5 @@ declare class DragAndDropDirective {
1673
2120
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DragAndDropDirective, "[uni-drag-n-drop], [dragAndDrop]", never, {}, { "onFileDropped": "onFileDropped"; }, never, never, true, never>;
1674
2121
  }
1675
2122
 
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 };
2123
+ export { BodyRenderDirective, ConfirmationDialogComponent, DragAndDropDirective, FOCUSABLE_SELECTOR, LocalStorageService, NotificationService, NotificationsComponent, RippleDirective, ThemeService, UNI_THEMES, UniAlertComponent, UniAppBarComponent, UniAvatarComponent, UniAvatarGroupComponent, UniBackgroundComponent, UniBadgeComponent, UniBaseDatasource, UniBoxComponent, UniBreadcrumbComponent, UniButtonComponent, UniButtonGroupComponent, UniCardComponent, UniCardContentComponent, UniCardHeaderComponent, UniCenterComponent, UniCheckboxComponent, UniDataSearchComponent, UniDataTableComponent, UniDebounceInputComponent, UniDialogButtonsComponent, UniDialogComponent, UniDialogHeaderComponent, UniDividerComponent, UniDrawerComponent, UniDropdownComponent, UniExpandAreaComponent, UniExpandComponent, UniExpandToggleComponent, UniFileDropZoneComponent, UniGridAreaComponent, UniGridComponent, UniIconButtonComponent, UniIconComponent, UniInputBoxComponent, UniInputComponent, UniJsonViewComponent, UniMenuComponent, UniMultiSelectComponent, UniMultiSelectDropdownComponent, UniNotificationBadgeComponent, UniPaginatorComponent, UniPopoverComponent, UniProgressBarComponent, UniProgressGaugeComponent, UniRadioComponent, UniRecordDatasource, UniRowComponent, UniScrollAreaComponent, UniSearchInputComponent, UniSelectComponent, UniServerSideDatasource, UniSkeletonComponent, UniSliderComponent, UniSnackbarComponent, UniSortHeaderComponent, UniStackComponent, UniSymbolComponent, UniTabComponent, UniTabsComponent, UniTagComponent, UniTextComponent, UniTextareaComponent, UniThemeBuilderComponent, UniToggleComponent, UniTooltipComponent, UniWrapComponent, acceptableFile, anchorArrowStyles, anchorStyles, getFileExtension, motionSafe, newAnchorName, resolveFocusTarget, uniqueId, useTimer, visuallyHidden };
2124
+ export type { Alert, AnchorOffset, BrandPaletteConfig, BreadcrumbItem, ButtonGroupConfig, ButtonGroupItem, ColumnDefinition, Confirmation, DataLoader, DrawerMode, DrawerPosition, ImagePosition, MenuItem, MenuItemWithLabel, MenuItemWithTemplate, Option, Options, PageRequest, PageResponse, Placement, ScrollbarAppearance, SkeletonShape, Snackbar, Sort, SortDirection, UniAppBarOptions, UniAvatarGroupOptions, UniAvatarOptions, UniBreadcrumbOptions, UniCheckboxOptions, UniDataSearchOptions, UniDataTableOptions, UniDatasource, UniDrawerOptions, UniInputBoxOptions, UniMultiSelectDropdownOptions, UniNotificationBadgeOptions, UniPaginatorOptions, UniRadioOption, UniRadioOptions, UniSkeletonOptions, UniSliderOptions, UniTabsOptions, UniTextareaOptions, UniToggleOptions };