@underlayerdev/ui 0.6.5 → 0.7.5

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@underlayerdev/ui",
3
- "version": "0.6.5",
3
+ "version": "0.7.5",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": "^22.0.0",
6
6
  "@angular/common": "^22.0.0",
@@ -401,42 +401,23 @@ a:active {
401
401
  }
402
402
  }
403
403
 
404
- .ul-scrollable::-webkit-scrollbar {
405
- width: 8px;
406
- height: 8px;
407
- }
408
- .ul-scrollable::-webkit-scrollbar-track {
409
- background: transparent;
410
- border-radius: 4px;
411
- }
412
- .ul-scrollable::-webkit-scrollbar-thumb {
413
- background: rgba(255, 255, 255, 0.1);
414
- border-radius: 4px;
415
- transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1);
416
- }
417
- .ul-scrollable::-webkit-scrollbar-thumb:hover {
418
- background: rgba(255, 255, 255, 0.2);
419
- }
420
404
  .ul-scrollable {
421
- scrollbar-width: thin;
422
- scrollbar-color: rgba(255, 255, 255, 0.1) transparent;
423
- overflow: overlay;
405
+ scrollbar-width: none;
424
406
  -webkit-overflow-scrolling: touch;
425
407
  }
426
408
  .ul-scrollable::-webkit-scrollbar {
427
- opacity: 0;
428
- transition: opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
429
- }
430
- .ul-scrollable:hover::-webkit-scrollbar {
431
- opacity: 1;
409
+ width: 0;
410
+ height: 0;
411
+ display: none;
432
412
  }
433
- .ul-scrollable {
434
- scrollbar-width: thin;
435
- scrollbar-color: transparent transparent;
436
- transition: scrollbar-color 250ms cubic-bezier(0.4, 0, 0.2, 1);
413
+
414
+ .ul-selectable-row {
415
+ border: 2px solid rgba(255, 255, 255, 0.3);
416
+ background-color: transparent;
417
+ transition: border-color 250ms cubic-bezier(0.4, 0, 0.2, 1);
437
418
  }
438
- .ul-scrollable:hover {
439
- scrollbar-color: rgba(255, 255, 255, 0.1) transparent;
419
+ .ul-selectable-row .ul-list-item--selected {
420
+ background-color: transparent;
440
421
  }
441
422
 
442
423
  .ul-row {
@@ -1,10 +1,11 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { AfterViewInit, OnDestroy, ElementRef, PipeTransform } from '@angular/core';
2
+ import { AfterViewInit, OnDestroy, ElementRef, TemplateRef, PipeTransform } from '@angular/core';
3
3
  import * as i1 from '@angular/cdk/accordion';
4
4
  import { CdkAccordionItem } from '@angular/cdk/accordion';
5
5
  import { FormValueControl, WithOptionalFieldTree, ValidationError, FormCheckboxControl } from '@angular/forms/signals';
6
6
  import Splide, { Options } from '@splidejs/splide';
7
7
  import { CurrencyPipe } from '@angular/common';
8
+ import * as _underlayerdev_ui from '@underlayerdev/ui';
8
9
 
9
10
  /**
10
11
  * AccordionItemComponent is a standalone Angular component that extends CdkAccordionItem.
@@ -77,7 +78,7 @@ declare class AreaCodeComponent {
77
78
  }
78
79
 
79
80
  type UiSize = 'sm' | 'md' | 'lg' | 'xl';
80
- type UiCheckboxSize = 'default' | 'sm';
81
+ type UiCheckboxSize = 'default' | 'sm' | 'lg';
81
82
  type UiTheme = 'fill-purple' | 'fill-white' | 'fill-yellow' | 'fill-red' | 'transparent-purple' | 'transparent-white' | 'transparent-red' | 'transparent-black' | 'ghost-purple' | 'ghost-white' | 'ghost-red' | 'ghost-green' | 'outline-white' | 'outline-purple' | 'outline-red' | 'outline-green';
82
83
 
83
84
  type IconSize$1 = '5' | '6' | '7' | '8';
@@ -246,6 +247,7 @@ declare class CalendarComponent implements FormValueControl<Date | null> {
246
247
  readonly disabled: _angular_core.InputSignal<boolean>;
247
248
  readonly readOnly: _angular_core.InputSignal<boolean>;
248
249
  readonly required: _angular_core.InputSignal<boolean>;
250
+ readonly showRequiredIndicator: _angular_core.InputSignal<boolean>;
249
251
  readonly placeholder: _angular_core.InputSignal<string>;
250
252
  readonly label: _angular_core.InputSignal<string | null>;
251
253
  readonly helperText: _angular_core.InputSignal<string | null>;
@@ -301,7 +303,7 @@ declare class CalendarComponent implements FormValueControl<Date | null> {
301
303
  onMenuClosed(): void;
302
304
  focus(): void;
303
305
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CalendarComponent, never>;
304
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CalendarComponent, "ul-calendar", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readOnly": { "alias": "readOnly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "minTime": { "alias": "minTime"; "required": false; "isSignal": true; }; "maxTime": { "alias": "maxTime"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "showCalendarIcon": { "alias": "showCalendarIcon"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
306
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CalendarComponent, "ul-calendar", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readOnly": { "alias": "readOnly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "showRequiredIndicator": { "alias": "showRequiredIndicator"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "minTime": { "alias": "minTime"; "required": false; "isSignal": true; }; "maxTime": { "alias": "maxTime"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "showCalendarIcon": { "alias": "showCalendarIcon"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
305
307
  }
306
308
 
307
309
  type CardDirection = 'horizontal' | 'vertical';
@@ -359,18 +361,19 @@ type CheckboxZoneType = 'none' | 'accessible' | 'visible' | 'checked-visible';
359
361
  * Uses shared form field label and helper for alignment with input, textarea, radio-group.
360
362
  */
361
363
  declare class CheckboxComponent implements FormCheckboxControl {
362
- checked: _angular_core.ModelSignal<boolean>;
363
- disabled: _angular_core.ModelSignal<boolean>;
364
- indeterminate: _angular_core.ModelSignal<boolean>;
365
- zone: _angular_core.InputSignal<CheckboxZoneType>;
366
- size: _angular_core.InputSignal<UiCheckboxSize>;
367
- label: _angular_core.InputSignal<string | null>;
368
- helperText: _angular_core.InputSignal<string | null>;
369
- required: _angular_core.InputSignal<boolean>;
370
- error: _angular_core.InputSignal<boolean>;
371
- errorText: _angular_core.InputSignal<string | null>;
372
- invalid: _angular_core.InputSignal<boolean>;
373
- errors: _angular_core.InputSignal<readonly WithOptionalFieldTree<ValidationError>[]>;
364
+ readonly checked: _angular_core.ModelSignal<boolean>;
365
+ readonly disabled: _angular_core.ModelSignal<boolean>;
366
+ readonly indeterminate: _angular_core.ModelSignal<boolean>;
367
+ readonly zone: _angular_core.InputSignal<CheckboxZoneType>;
368
+ readonly size: _angular_core.InputSignal<UiCheckboxSize>;
369
+ readonly label: _angular_core.InputSignal<string | null>;
370
+ readonly helperText: _angular_core.InputSignal<string | null>;
371
+ readonly required: _angular_core.InputSignal<boolean>;
372
+ readonly showRequiredIndicator: _angular_core.InputSignal<boolean>;
373
+ readonly error: _angular_core.InputSignal<boolean>;
374
+ readonly errorText: _angular_core.InputSignal<string | null>;
375
+ readonly invalid: _angular_core.InputSignal<boolean>;
376
+ readonly errors: _angular_core.InputSignal<readonly WithOptionalFieldTree<ValidationError>[]>;
374
377
  protected readonly ids: {
375
378
  controlId: string;
376
379
  helperId: string;
@@ -381,7 +384,7 @@ declare class CheckboxComponent implements FormCheckboxControl {
381
384
  protected readonly describedBy: _angular_core.Signal<string | undefined>;
382
385
  onChange(event: Event): void;
383
386
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CheckboxComponent, never>;
384
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CheckboxComponent, "ul-checkbox", never, { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "zone": { "alias": "zone"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "disabled": "disabledChange"; "indeterminate": "indeterminateChange"; }, never, ["*"], true, never>;
387
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CheckboxComponent, "ul-checkbox", never, { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "zone": { "alias": "zone"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "showRequiredIndicator": { "alias": "showRequiredIndicator"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "disabled": "disabledChange"; "indeterminate": "indeterminateChange"; }, never, ["*"], true, never>;
385
388
  }
386
389
 
387
390
  type CollapseVariant = 'text' | 'icon';
@@ -517,21 +520,41 @@ declare class ListItemComponent {
517
520
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ListItemComponent, "ul-list-item", never, { "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "hideFocusOutline": { "alias": "hideFocusOutline"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; }, {}, ["checkbox"], ["[ul-list-item-before-label]", "[ul-list-item-label]", "[ul-list-item-after-label]"], true, never>;
518
521
  }
519
522
 
520
- /**
521
- * Represents a single item in the dropdown menu.
522
- */
523
- type DropdownItem = {
524
- /** Display text for the dropdown item */
523
+ /** A single row in a `ul-menu` or `ul-dropdown` menu panel. */
524
+ type MenuItem = {
525
+ /** Display text for the item. */
525
526
  label: string;
526
- /** Optional value associated with the item */
527
+ /** Optional value associated with the item. */
527
528
  value?: string;
528
- /** Icons to display on the left side of the item */
529
+ /** Icons to display on the left side of the item. */
529
530
  leftIcons?: IconName[];
530
- /** Icons to display on the right side of the item */
531
+ /** Icons to display on the right side of the item. */
531
532
  rightIcons?: IconName[];
532
- /** Whether the item is disabled and cannot be selected */
533
+ /** Whether the item is disabled and cannot be triggered. */
533
534
  disabled?: boolean;
534
535
  };
536
+ /**
537
+ * Renders `items` as `ul-list-item` + `cdkMenuItem` rows inside an
538
+ * already-open `cdkMenu` panel. Shared by `ul-dropdown` (which passes
539
+ * `selectedIndex` so the current choice renders with a checkmark) and
540
+ * `ul-menu` (which leaves `selectedIndex` as `null` — every item there is a
541
+ * one-off action, never a persisted "current selection").
542
+ */
543
+ declare class MenuItemsComponent {
544
+ items: _angular_core.InputSignal<MenuItem[]>;
545
+ theme: _angular_core.InputSignal<ListItemTheme>;
546
+ /**
547
+ * Index of the item to render as checked/selected.
548
+ * @default null - no item is ever shown as checked (the action-menu case).
549
+ */
550
+ selectedIndex: _angular_core.InputSignal<number | null>;
551
+ itemTriggered: _angular_core.OutputEmitterRef<number>;
552
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MenuItemsComponent, never>;
553
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MenuItemsComponent, "ul-menu-items", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "selectedIndex": { "alias": "selectedIndex"; "required": false; "isSignal": true; }; }, { "itemTriggered": "itemTriggered"; }, never, never, true, never>;
554
+ }
555
+
556
+ /** @deprecated Import from `../menu/menu-items` instead — kept here so existing `DropdownItem` imports keep working. */
557
+ type DropdownItem = MenuItem;
535
558
  /**
536
559
  * A customizable dropdown component that displays a list of selectable items.
537
560
  *
@@ -568,7 +591,7 @@ declare class DropdownComponent {
568
591
  * Array of items to display in the dropdown menu.
569
592
  * @default []
570
593
  */
571
- items: _angular_core.InputSignal<DropdownItem[]>;
594
+ items: _angular_core.InputSignal<MenuItem[]>;
572
595
  /**
573
596
  * Whether the dropdown is disabled.
574
597
  * @default false
@@ -577,7 +600,7 @@ declare class DropdownComponent {
577
600
  /**
578
601
  * Overrides the icons of the selected item in the trigger button.
579
602
  * Can override leftIcons, rightIcons, or both.
580
- * @default {}
603
+ * @default { rightIcons: ['chevron_down'] }
581
604
  *
582
605
  * @example
583
606
  * ```typescript
@@ -586,7 +609,7 @@ declare class DropdownComponent {
586
609
  * }
587
610
  * ```
588
611
  */
589
- menuTriggerIcons: _angular_core.InputSignal<Pick<DropdownItem, "leftIcons" | "rightIcons">>;
612
+ menuTriggerIcons: _angular_core.InputSignal<Pick<MenuItem, "leftIcons" | "rightIcons"> | undefined>;
590
613
  /**
591
614
  * Shows only a single icon in the trigger button, hiding the selected item's label and icons.
592
615
  * Commonly used with 'more_options' for action menus.
@@ -615,11 +638,8 @@ declare class DropdownComponent {
615
638
  selectedItem: _angular_core.Signal<{
616
639
  leftIcons?: IconName[];
617
640
  rightIcons?: IconName[];
618
- /** Display text for the dropdown item */
619
641
  label: string;
620
- /** Optional value associated with the item */
621
642
  value?: string;
622
- /** Whether the item is disabled and cannot be selected */
623
643
  disabled?: boolean;
624
644
  }>;
625
645
  /**
@@ -638,18 +658,24 @@ declare class DropdownComponent {
638
658
  /**
639
659
  * Emitted when a new item is selected from the dropdown.
640
660
  */
641
- selectedItemChange: _angular_core.OutputEmitterRef<DropdownItem>;
661
+ selectedItemChange: _angular_core.OutputEmitterRef<MenuItem>;
642
662
  /**
643
663
  * Emitted when the menu closes, whether or not a selection was made —
644
664
  * the closest thing this component has to a "blur" for form controls
645
665
  * built on top of it (see ul-select's touch output).
646
666
  */
647
667
  closed: _angular_core.OutputEmitterRef<void>;
668
+ private readonly trigger;
648
669
  /**
649
670
  * Handles the selection of a dropdown item.
650
671
  * @param index - The index of the selected item
651
672
  */
652
673
  handleItemTriggered(index: number): void;
674
+ /**
675
+ * Closes the panel. CDK auto-closes on a `cdkMenuItem` trigger already —
676
+ * this is for the mobile backdrop tap, which isn't one.
677
+ */
678
+ closeMenu(): void;
653
679
  onMenuOpened(): void;
654
680
  onMenuClosed(): void;
655
681
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DropdownComponent, never>;
@@ -672,6 +698,7 @@ declare class FileInputComponent implements FormValueControl<FileList | null> {
672
698
  readonly multiple: _angular_core.InputSignal<boolean>;
673
699
  readonly disabled: _angular_core.InputSignal<boolean>;
674
700
  readonly required: _angular_core.InputSignal<boolean>;
701
+ readonly showRequiredIndicator: _angular_core.InputSignal<boolean>;
675
702
  readonly label: _angular_core.InputSignal<string | null>;
676
703
  readonly helperText: _angular_core.InputSignal<string | null>;
677
704
  readonly errorText: _angular_core.InputSignal<string | null>;
@@ -708,7 +735,7 @@ declare class FileInputComponent implements FormValueControl<FileList | null> {
708
735
  triggerClick(): void;
709
736
  focus(): void;
710
737
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FileInputComponent, never>;
711
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FileInputComponent, "ul-file-input", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "placeholderText": { "alias": "placeholderText"; "required": false; "isSignal": true; }; "controlId": { "alias": "controlId"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "touched": "touchedChange"; "touch": "touch"; "value": "valueChange"; "inputBlur": "inputBlur"; "inputFocus": "inputFocus"; }, never, ["[ul-file-input-left-elements]", "[ul-file-input-right-elements]"], true, never>;
738
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FileInputComponent, "ul-file-input", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "showRequiredIndicator": { "alias": "showRequiredIndicator"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "placeholderText": { "alias": "placeholderText"; "required": false; "isSignal": true; }; "controlId": { "alias": "controlId"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "touched": "touchedChange"; "touch": "touch"; "value": "valueChange"; "inputBlur": "inputBlur"; "inputFocus": "inputFocus"; }, never, ["[ul-file-input-left-elements]", "[ul-file-input-right-elements]"], true, never>;
712
739
  }
713
740
 
714
741
  declare class FooterComponent {
@@ -864,6 +891,7 @@ declare class InputComponent implements FormValueControl<string> {
864
891
  readonly disabled: _angular_core.InputSignal<boolean>;
865
892
  readonly readOnly: _angular_core.InputSignal<boolean>;
866
893
  readonly required: _angular_core.InputSignal<boolean>;
894
+ readonly showRequiredIndicator: _angular_core.InputSignal<boolean>;
867
895
  readonly placeholder: _angular_core.InputSignal<string>;
868
896
  readonly label: _angular_core.InputSignal<string | null>;
869
897
  readonly helperText: _angular_core.InputSignal<string | null>;
@@ -871,6 +899,10 @@ declare class InputComponent implements FormValueControl<string> {
871
899
  readonly maxLength: _angular_core.InputSignal<number | undefined>;
872
900
  readonly minLength: _angular_core.InputSignal<number | undefined>;
873
901
  readonly pattern: _angular_core.InputSignal<readonly RegExp[]>;
902
+ /** Native step for type="number". Defaults to 'any' (decimals allowed) rather than the
903
+ * browser's own default of 1, which would silently reject e.g. "19.99" — pass an explicit
904
+ * step (e.g. 1) to restrict to whole numbers. */
905
+ readonly step: _angular_core.InputSignal<number | "any" | undefined>;
874
906
  readonly autocomplete: _angular_core.InputSignal<string>;
875
907
  /** When provided (e.g. by a parent form field), the input element uses this id instead of the internal one. */
876
908
  readonly controlId: _angular_core.InputSignal<string | undefined>;
@@ -898,6 +930,7 @@ declare class InputComponent implements FormValueControl<string> {
898
930
  protected readonly isFocused: _angular_core.WritableSignal<boolean>;
899
931
  protected readonly hasError: _angular_core.Signal<boolean>;
900
932
  protected readonly nativePattern: _angular_core.Signal<string | null>;
933
+ protected readonly nativeStep: _angular_core.Signal<number | "any" | null>;
901
934
  protected readonly isPasswordType: _angular_core.Signal<boolean>;
902
935
  protected readonly passwordRevealed: _angular_core.WritableSignal<boolean>;
903
936
  protected readonly effectiveType: _angular_core.Signal<InputType>;
@@ -919,7 +952,119 @@ declare class InputComponent implements FormValueControl<string> {
919
952
  focus(): void;
920
953
  select(): void;
921
954
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<InputComponent, never>;
922
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<InputComponent, "ul-input", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readOnly": { "alias": "readOnly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "pattern": { "alias": "pattern"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "controlId": { "alias": "controlId"; "required": false; "isSignal": true; }; "showPasswordLabel": { "alias": "showPasswordLabel"; "required": false; "isSignal": true; }; "hidePasswordLabel": { "alias": "hidePasswordLabel"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "touched": "touchedChange"; "touch": "touch"; "value": "valueChange"; "inputBlur": "inputBlur"; "inputFocus": "inputFocus"; "inputEnter": "inputEnter"; }, never, ["[ul-input-left-elements]", "[ul-input-right-elements]"], true, never>;
955
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<InputComponent, "ul-input", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readOnly": { "alias": "readOnly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "showRequiredIndicator": { "alias": "showRequiredIndicator"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "pattern": { "alias": "pattern"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "controlId": { "alias": "controlId"; "required": false; "isSignal": true; }; "showPasswordLabel": { "alias": "showPasswordLabel"; "required": false; "isSignal": true; }; "hidePasswordLabel": { "alias": "hidePasswordLabel"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "touched": "touchedChange"; "touch": "touch"; "value": "valueChange"; "inputBlur": "inputBlur"; "inputFocus": "inputFocus"; "inputEnter": "inputEnter"; }, never, ["[ul-input-left-elements]", "[ul-input-right-elements]"], true, never>;
956
+ }
957
+
958
+ /**
959
+ * Emits `ulLongPress` when the pointer (mouse, touch, or pen) is held down
960
+ * on the host element for `ulLongPressDuration` without moving more than a
961
+ * few pixels. Also suppresses the `click` that follows the triggering
962
+ * press's release, so long-press-to-select gestures don't also activate a
963
+ * link/button underneath.
964
+ */
965
+ declare class LongPressDirective {
966
+ ulLongPressDuration: _angular_core.InputSignal<number>;
967
+ ulLongPress: _angular_core.OutputEmitterRef<void>;
968
+ private timeoutId;
969
+ private startX;
970
+ private startY;
971
+ private triggered;
972
+ handlePointerDown(event: PointerEvent): void;
973
+ handlePointerMove(event: PointerEvent): void;
974
+ handlePointerEnd(): void;
975
+ handleClick(event: MouseEvent): void;
976
+ private cancelTimer;
977
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LongPressDirective, never>;
978
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LongPressDirective, "[ulLongPress]", never, { "ulLongPressDuration": { "alias": "ulLongPressDuration"; "required": false; "isSignal": true; }; }, { "ulLongPress": "ulLongPress"; }, never, never, true, never>;
979
+ }
980
+
981
+ /**
982
+ * A trigger + panel for an action menu (edit, delete, share, ...). Unlike
983
+ * `ul-dropdown`, there is no notion of a "currently selected" item — every
984
+ * item is a one-off action, so nothing is ever shown as checked.
985
+ *
986
+ * Pass `items` for the common label+icon action-list case, and/or project
987
+ * custom content (e.g. a `ul-list-item cdkMenuItem routerLink="...">` for a
988
+ * navigation item) — both can be combined, or you can skip `items`
989
+ * entirely and compose the panel purely from projected content.
990
+ *
991
+ * Below the 'md' breakpoint the panel renders as a bottom sheet (full
992
+ * width, pinned to the viewport, tap-outside-to-dismiss) instead of a
993
+ * small anchored popover — the same behavior `ul-dropdown` gets.
994
+ *
995
+ * @example
996
+ * ```html
997
+ * <ul-menu
998
+ * [items]="[{ label: 'Edit', value: 'edit', leftIcons: ['edit'] },
999
+ * { label: 'Delete', value: 'delete', leftIcons: ['trash'] }]"
1000
+ * triggerIconOnly="more_options"
1001
+ * (itemSelected)="onAction($event)">
1002
+ * </ul-menu>
1003
+ * ```
1004
+ */
1005
+ declare class MenuComponent {
1006
+ /** Visual theme, passed through to the trigger and to any items rendered via `items`. */
1007
+ theme: _angular_core.InputSignal<ListItemTheme>;
1008
+ /** Simple label+icon action items. Optional — content projection covers everything else. */
1009
+ items: _angular_core.InputSignal<MenuItem[]>;
1010
+ disabled: _angular_core.InputSignal<boolean>;
1011
+ /**
1012
+ * Shows only a single icon in the trigger, hiding any label. Commonly
1013
+ * `'more_options'` for a row-level "⋮" action menu.
1014
+ */
1015
+ triggerIconOnly: _angular_core.InputSignal<string | undefined>;
1016
+ /** Accessible label for the icon-only trigger. */
1017
+ iconOnlyLabel: _angular_core.InputSignal<string>;
1018
+ /** Static label for a non-icon-only trigger (there is no "current selection" to show instead). */
1019
+ triggerLabel: _angular_core.InputSignal<string>;
1020
+ triggerLeftIcons: _angular_core.InputSignal<string[]>;
1021
+ triggerRightIcons: _angular_core.InputSignal<string[]>;
1022
+ /** Emitted when an `items`-provided entry is triggered. */
1023
+ itemSelected: _angular_core.OutputEmitterRef<MenuItem>;
1024
+ /** Emitted when the menu closes, whether or not a selection was made. */
1025
+ closed: _angular_core.OutputEmitterRef<void>;
1026
+ readonly isOpen: _angular_core.WritableSignal<boolean>;
1027
+ readonly menuId: string;
1028
+ private readonly trigger;
1029
+ handleItemTriggered(index: number): void;
1030
+ /**
1031
+ * Closes the panel. CDK auto-closes on a `cdkMenuItem` trigger already —
1032
+ * this is for the mobile backdrop tap, which isn't one.
1033
+ */
1034
+ closeMenu(): void;
1035
+ onMenuOpened(): void;
1036
+ onMenuClosed(): void;
1037
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MenuComponent, never>;
1038
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MenuComponent, "ul-menu", never, { "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "triggerIconOnly": { "alias": "triggerIconOnly"; "required": false; "isSignal": true; }; "iconOnlyLabel": { "alias": "iconOnlyLabel"; "required": false; "isSignal": true; }; "triggerLabel": { "alias": "triggerLabel"; "required": false; "isSignal": true; }; "triggerLeftIcons": { "alias": "triggerLeftIcons"; "required": false; "isSignal": true; }; "triggerRightIcons": { "alias": "triggerRightIcons"; "required": false; "isSignal": true; }; }, { "itemSelected": "itemSelected"; "closed": "closed"; }, never, ["*"], true, never>;
1039
+ }
1040
+
1041
+ /**
1042
+ * The trigger button shared by `ul-dropdown` and `ul-menu`: either an
1043
+ * icon-only button (`iconOnly`, e.g. a "more options" `⋮`) or a
1044
+ * `ul-list-item`-styled button showing a label with optional icons on
1045
+ * either side. Wires `cdkMenuTriggerFor` plus the ARIA attributes a menu
1046
+ * trigger needs, and exposes `close()` so the panel it opens can be
1047
+ * dismissed programmatically (e.g. a tap on a mobile bottom-sheet backdrop,
1048
+ * which CDK's own outside-click handling won't catch since the backdrop
1049
+ * lives inside the same overlay pane).
1050
+ */
1051
+ declare class MenuTriggerComponent {
1052
+ theme: _angular_core.InputSignal<ListItemTheme>;
1053
+ disabled: _angular_core.InputSignal<boolean>;
1054
+ iconOnly: _angular_core.InputSignal<string | undefined>;
1055
+ iconOnlyLabel: _angular_core.InputSignal<string>;
1056
+ label: _angular_core.InputSignal<string>;
1057
+ leftIcons: _angular_core.InputSignal<string[]>;
1058
+ rightIcons: _angular_core.InputSignal<string[]>;
1059
+ menuTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
1060
+ menuId: _angular_core.InputSignal<string>;
1061
+ isOpen: _angular_core.InputSignal<boolean>;
1062
+ opened: _angular_core.OutputEmitterRef<void>;
1063
+ closed: _angular_core.OutputEmitterRef<void>;
1064
+ private readonly trigger;
1065
+ close(): void;
1066
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MenuTriggerComponent, never>;
1067
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MenuTriggerComponent, "ul-menu-trigger", never, { "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "iconOnly": { "alias": "iconOnly"; "required": false; "isSignal": true; }; "iconOnlyLabel": { "alias": "iconOnlyLabel"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "leftIcons": { "alias": "leftIcons"; "required": false; "isSignal": true; }; "rightIcons": { "alias": "rightIcons"; "required": false; "isSignal": true; }; "menuTemplate": { "alias": "menuTemplate"; "required": true; "isSignal": true; }; "menuId": { "alias": "menuId"; "required": true; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; }, { "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
923
1068
  }
924
1069
 
925
1070
  type ModalVariant = 'default' | 'success' | 'error' | 'custom' | 'bottom-sheet' | 'confirmation';
@@ -1026,7 +1171,7 @@ declare class NavbarComponent {
1026
1171
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<NavbarComponent, "ul-navbar", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "logoHref": { "alias": "logoHref"; "required": false; "isSignal": true; }; "logoSrc": { "alias": "logoSrc"; "required": false; "isSignal": true; }; "logoAlt": { "alias": "logoAlt"; "required": false; "isSignal": true; }; "avatarSrc": { "alias": "avatarSrc"; "required": false; "isSignal": true; }; "avatarInitials": { "alias": "avatarInitials"; "required": false; "isSignal": true; }; "avatarAlt": { "alias": "avatarAlt"; "required": false; "isSignal": true; }; "sidebarOpen": { "alias": "sidebarOpen"; "required": false; "isSignal": true; }; "showSidebarToggle": { "alias": "showSidebarToggle"; "required": false; "isSignal": true; }; "searchCollapsible": { "alias": "searchCollapsible"; "required": false; "isSignal": true; }; }, { "sidebarToggle": "sidebarToggle"; }, ["logoSlot", "searchSlot", "avatarSlot", "appNameSlot"], ["[ul-navbar-logo]", "[ul-navbar-app-name]", "[ul-navbar-search]", "[ul-navbar-avatar]"], true, never>;
1027
1172
  }
1028
1173
 
1029
- type PillSize = 'md' | 'lg';
1174
+ type PillSize = 'sm' | 'md' | 'lg';
1030
1175
  type PillVariant = 'interactive' | 'interactive-rounded' | 'read-only' | 'dismissible' | 'selectable';
1031
1176
  type PillTheme = 'fill-white' | 'fill-black' | 'fill-purple' | 'fill-red' | 'fill-green' | 'transparent-white' | 'transparent-purple' | 'transparent-red' | 'transparent-green' | 'stroke-white' | 'outline-white' | 'outline-purple' | 'outline-red' | 'outline-green';
1032
1177
  declare class PillComponent {
@@ -1173,6 +1318,7 @@ declare class RadioGroupComponent implements FormValueControl<string | null> {
1173
1318
  readonly error: _angular_core.InputSignal<boolean>;
1174
1319
  readonly disabled: _angular_core.InputSignal<boolean>;
1175
1320
  readonly required: _angular_core.InputSignal<boolean>;
1321
+ readonly showRequiredIndicator: _angular_core.InputSignal<boolean>;
1176
1322
  readonly invalid: _angular_core.InputSignal<boolean>;
1177
1323
  readonly errors: _angular_core.InputSignal<readonly WithOptionalFieldTree<ValidationError>[]>;
1178
1324
  readonly value: _angular_core.ModelSignal<string | null>;
@@ -1184,7 +1330,7 @@ declare class RadioGroupComponent implements FormValueControl<string | null> {
1184
1330
  protected readonly hasError: _angular_core.Signal<boolean>;
1185
1331
  protected readonly describedBy: _angular_core.Signal<string | undefined>;
1186
1332
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RadioGroupComponent, never>;
1187
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<RadioGroupComponent, "ul-radio-group", never, { "name": { "alias": "name"; "required": true; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
1333
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RadioGroupComponent, "ul-radio-group", never, { "name": { "alias": "name"; "required": true; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "showRequiredIndicator": { "alias": "showRequiredIndicator"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
1188
1334
  }
1189
1335
 
1190
1336
  type RadialSize = 96 | 64 | 48 | 32 | 24 | 20 | 16;
@@ -1325,6 +1471,7 @@ declare class SearchSelectComponent implements FormValueControl<string | null> {
1325
1471
  readonly error: _angular_core.InputSignal<boolean>;
1326
1472
  readonly disabled: _angular_core.InputSignal<boolean>;
1327
1473
  readonly required: _angular_core.InputSignal<boolean>;
1474
+ readonly showRequiredIndicator: _angular_core.InputSignal<boolean>;
1328
1475
  readonly placeholder: _angular_core.InputSignal<string>;
1329
1476
  readonly options: _angular_core.InputSignal<SearchSelectOption[]>;
1330
1477
  readonly minCharsToOpen: _angular_core.InputSignal<number>;
@@ -1359,7 +1506,7 @@ declare class SearchSelectComponent implements FormValueControl<string | null> {
1359
1506
  selectOption(opt: SearchSelectOption): void;
1360
1507
  private cancelBlurClose;
1361
1508
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchSelectComponent, never>;
1362
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchSelectComponent, "ul-search-select", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "minCharsToOpen": { "alias": "minCharsToOpen"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
1509
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchSelectComponent, "ul-search-select", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "showRequiredIndicator": { "alias": "showRequiredIndicator"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "minCharsToOpen": { "alias": "minCharsToOpen"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
1363
1510
  }
1364
1511
 
1365
1512
  interface SelectOption extends DropdownItem {
@@ -1382,6 +1529,7 @@ declare class SelectComponent implements FormValueControl<string | null> {
1382
1529
  readonly error: _angular_core.InputSignal<boolean>;
1383
1530
  readonly disabled: _angular_core.InputSignal<boolean>;
1384
1531
  readonly required: _angular_core.InputSignal<boolean>;
1532
+ readonly showRequiredIndicator: _angular_core.InputSignal<boolean>;
1385
1533
  readonly placeholder: _angular_core.InputSignal<string>;
1386
1534
  readonly options: _angular_core.InputSignal<SelectOption[]>;
1387
1535
  readonly invalid: _angular_core.InputSignal<boolean>;
@@ -1395,7 +1543,7 @@ declare class SelectComponent implements FormValueControl<string | null> {
1395
1543
  helperId: string;
1396
1544
  errorId: string;
1397
1545
  };
1398
- protected readonly items: _angular_core.Signal<DropdownItem[]>;
1546
+ protected readonly items: _angular_core.Signal<_underlayerdev_ui.MenuItem[]>;
1399
1547
  protected readonly hasError: _angular_core.Signal<boolean>;
1400
1548
  protected readonly describedBy: _angular_core.Signal<string | undefined>;
1401
1549
  constructor();
@@ -1403,7 +1551,7 @@ declare class SelectComponent implements FormValueControl<string | null> {
1403
1551
  protected onSelectedIndexChange(index: number): void;
1404
1552
  protected onDropdownClosed(): void;
1405
1553
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectComponent, never>;
1406
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectComponent, "ul-select", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "selectedIndex": { "alias": "selectedIndex"; "required": false; "isSignal": true; }; }, { "touch": "touch"; "value": "valueChange"; "selectedIndex": "selectedIndexChange"; }, never, never, true, never>;
1554
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectComponent, "ul-select", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "showRequiredIndicator": { "alias": "showRequiredIndicator"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "selectedIndex": { "alias": "selectedIndex"; "required": false; "isSignal": true; }; }, { "touch": "touch"; "value": "valueChange"; "selectedIndex": "selectedIndexChange"; }, never, never, true, never>;
1407
1555
  }
1408
1556
 
1409
1557
  /**
@@ -1429,8 +1577,9 @@ declare class FormFieldLabelComponent {
1429
1577
  readonly required: _angular_core.InputSignal<boolean>;
1430
1578
  readonly for: _angular_core.InputSignal<string>;
1431
1579
  readonly size: _angular_core.InputSignal<UiSize>;
1580
+ readonly showRequiredIndicator: _angular_core.InputSignal<boolean>;
1432
1581
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormFieldLabelComponent, never>;
1433
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormFieldLabelComponent, "ul-form-field-label", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "for": { "alias": "for"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1582
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormFieldLabelComponent, "ul-form-field-label", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "for": { "alias": "for"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "showRequiredIndicator": { "alias": "showRequiredIndicator"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1434
1583
  }
1435
1584
 
1436
1585
  /**
@@ -1548,6 +1697,7 @@ declare class TextareaComponent implements FormValueControl<string> {
1548
1697
  readonly disabled: _angular_core.InputSignal<boolean>;
1549
1698
  readonly readOnly: _angular_core.InputSignal<boolean>;
1550
1699
  readonly required: _angular_core.InputSignal<boolean>;
1700
+ readonly showRequiredIndicator: _angular_core.InputSignal<boolean>;
1551
1701
  readonly placeholder: _angular_core.InputSignal<string>;
1552
1702
  readonly label: _angular_core.InputSignal<string | null>;
1553
1703
  readonly helperText: _angular_core.InputSignal<string | null>;
@@ -1583,8 +1733,8 @@ declare class TextareaComponent implements FormValueControl<string> {
1583
1733
  focus(): void;
1584
1734
  select(): void;
1585
1735
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TextareaComponent, never>;
1586
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextareaComponent, "ul-textarea", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readOnly": { "alias": "readOnly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "resize": { "alias": "resize"; "required": false; "isSignal": true; }; "groupFocused": { "alias": "groupFocused"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "touched": "touchedChange"; "touch": "touch"; "value": "valueChange"; "inputBlur": "inputBlur"; "inputFocus": "inputFocus"; }, ["customField"], ["[ul-textarea-left-elements]", "[ul-textarea-field]", "[ul-textarea-right-elements]"], true, never>;
1736
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextareaComponent, "ul-textarea", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readOnly": { "alias": "readOnly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "showRequiredIndicator": { "alias": "showRequiredIndicator"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "resize": { "alias": "resize"; "required": false; "isSignal": true; }; "groupFocused": { "alias": "groupFocused"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "touched": "touchedChange"; "touch": "touch"; "value": "valueChange"; "inputBlur": "inputBlur"; "inputFocus": "inputFocus"; }, ["customField"], ["[ul-textarea-left-elements]", "[ul-textarea-field]", "[ul-textarea-right-elements]"], true, never>;
1587
1737
  }
1588
1738
 
1589
- export { AccordionComponent, AccordionItemComponent, AreaCodeComponent, AvatarComponent, AvatarGroupComponent, BreadcrumbComponent, ButtonComponent, CalendarComponent, CardComponent, CarouselComponent, CarouselItemComponent, CheckboxComponent, CollapseComponent, CustomCurrencyPipe, DockComponent, DockItemComponent, DockItemContentSlotDirective, DropdownComponent, FileInputComponent, FooterComponent, FormFieldHelperComponent, FormFieldLabelComponent, HeroComponent, IconComponent, ImageNotFoundDirective, InputComponent, ListItemComponent, ModalComponent, NavbarAppNameSlotDirective, NavbarAvatarSlotDirective, NavbarComponent, NavbarLogoSlotDirective, NavbarSearchSlotDirective, PeHeroActionsSlotDirective, PeHeroBadgesSlotDirective, PeHeroContentSlotDirective, PeHeroSubtitleSlotDirective, PeHeroTitleSlotDirective, PillComponent, PriceButtonComponent, RadialComponent, RadioComponent, RadioGroupComponent, RichTextComponent, SearchSelectComponent, SelectComponent, SidebarComponent, SkeletonComponent, StatusComponent, TableComponent, TextareaComponent, TextareaFieldDirective, ToastContainerComponent, ToastService, TooltipComponent, createFormFieldIds, getFormFieldDescribedBy, toastIcon };
1590
- export type { ActionsDistribution, AvatarData, BreadcrumbItem, BreadcrumbSeparator, CalendarDay, CalendarMode, CardCaptionSize, CardDirection, CheckboxZoneType, CollapseVariant, Currency, DockItemVariant, DropdownItem, FileInputAppearance, HeroAction, HeroAlignment, HeroSize, IconName, IconSize, IconWeight, InputAppearance, InputType, ListItemTheme, MediaAspectRatio, ModalVariant, PillSize, PillTheme, PillVariant, RadioGroupOption, RichTextSize, RichTextTone, SalePosition, SearchSelectOption, SelectOption, SidebarItem, SkeletonBorderRadius, SkeletonVariant, SortDirection, Status, TableColumn, TextareaResize, TimeSelection, ToastConfig, ToastKind, ToastWithRole, TooltipPosition };
1739
+ export { AccordionComponent, AccordionItemComponent, AreaCodeComponent, AvatarComponent, AvatarGroupComponent, BreadcrumbComponent, ButtonComponent, CalendarComponent, CardComponent, CarouselComponent, CarouselItemComponent, CheckboxComponent, CollapseComponent, CustomCurrencyPipe, DockComponent, DockItemComponent, DockItemContentSlotDirective, DropdownComponent, FileInputComponent, FooterComponent, FormFieldHelperComponent, FormFieldLabelComponent, HeroComponent, IconComponent, ImageNotFoundDirective, InputComponent, ListItemComponent, LongPressDirective, MenuComponent, MenuItemsComponent, MenuTriggerComponent, ModalComponent, NavbarAppNameSlotDirective, NavbarAvatarSlotDirective, NavbarComponent, NavbarLogoSlotDirective, NavbarSearchSlotDirective, PeHeroActionsSlotDirective, PeHeroBadgesSlotDirective, PeHeroContentSlotDirective, PeHeroSubtitleSlotDirective, PeHeroTitleSlotDirective, PillComponent, PriceButtonComponent, RadialComponent, RadioComponent, RadioGroupComponent, RichTextComponent, SearchSelectComponent, SelectComponent, SidebarComponent, SkeletonComponent, StatusComponent, TableComponent, TextareaComponent, TextareaFieldDirective, ToastContainerComponent, ToastService, TooltipComponent, createFormFieldIds, getFormFieldDescribedBy, toastIcon };
1740
+ export type { ActionsDistribution, AvatarData, BreadcrumbItem, BreadcrumbSeparator, CalendarDay, CalendarMode, CardCaptionSize, CardDirection, CheckboxZoneType, CollapseVariant, Currency, DockItemVariant, DropdownItem, FileInputAppearance, HeroAction, HeroAlignment, HeroSize, IconName, IconSize, IconWeight, InputAppearance, InputType, ListItemTheme, MediaAspectRatio, MenuItem, ModalVariant, PillSize, PillTheme, PillVariant, RadioGroupOption, RichTextSize, RichTextTone, SalePosition, SearchSelectOption, SelectOption, SidebarItem, SkeletonBorderRadius, SkeletonVariant, SortDirection, Status, TableColumn, TextareaResize, TimeSelection, ToastConfig, ToastKind, ToastWithRole, TooltipPosition };