@underlayerdev/ui 0.6.6 → 0.8.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,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>;
@@ -924,7 +952,119 @@ declare class InputComponent implements FormValueControl<string> {
924
952
  focus(): void;
925
953
  select(): void;
926
954
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<InputComponent, never>;
927
- 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; }; "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>;
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>;
928
1068
  }
929
1069
 
930
1070
  type ModalVariant = 'default' | 'success' | 'error' | 'custom' | 'bottom-sheet' | 'confirmation';
@@ -1031,7 +1171,7 @@ declare class NavbarComponent {
1031
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>;
1032
1172
  }
1033
1173
 
1034
- type PillSize = 'md' | 'lg';
1174
+ type PillSize = 'sm' | 'md' | 'lg';
1035
1175
  type PillVariant = 'interactive' | 'interactive-rounded' | 'read-only' | 'dismissible' | 'selectable';
1036
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';
1037
1177
  declare class PillComponent {
@@ -1178,6 +1318,7 @@ declare class RadioGroupComponent implements FormValueControl<string | null> {
1178
1318
  readonly error: _angular_core.InputSignal<boolean>;
1179
1319
  readonly disabled: _angular_core.InputSignal<boolean>;
1180
1320
  readonly required: _angular_core.InputSignal<boolean>;
1321
+ readonly showRequiredIndicator: _angular_core.InputSignal<boolean>;
1181
1322
  readonly invalid: _angular_core.InputSignal<boolean>;
1182
1323
  readonly errors: _angular_core.InputSignal<readonly WithOptionalFieldTree<ValidationError>[]>;
1183
1324
  readonly value: _angular_core.ModelSignal<string | null>;
@@ -1189,7 +1330,7 @@ declare class RadioGroupComponent implements FormValueControl<string | null> {
1189
1330
  protected readonly hasError: _angular_core.Signal<boolean>;
1190
1331
  protected readonly describedBy: _angular_core.Signal<string | undefined>;
1191
1332
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RadioGroupComponent, never>;
1192
- 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>;
1193
1334
  }
1194
1335
 
1195
1336
  type RadialSize = 96 | 64 | 48 | 32 | 24 | 20 | 16;
@@ -1330,6 +1471,7 @@ declare class SearchSelectComponent implements FormValueControl<string | null> {
1330
1471
  readonly error: _angular_core.InputSignal<boolean>;
1331
1472
  readonly disabled: _angular_core.InputSignal<boolean>;
1332
1473
  readonly required: _angular_core.InputSignal<boolean>;
1474
+ readonly showRequiredIndicator: _angular_core.InputSignal<boolean>;
1333
1475
  readonly placeholder: _angular_core.InputSignal<string>;
1334
1476
  readonly options: _angular_core.InputSignal<SearchSelectOption[]>;
1335
1477
  readonly minCharsToOpen: _angular_core.InputSignal<number>;
@@ -1364,7 +1506,7 @@ declare class SearchSelectComponent implements FormValueControl<string | null> {
1364
1506
  selectOption(opt: SearchSelectOption): void;
1365
1507
  private cancelBlurClose;
1366
1508
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchSelectComponent, never>;
1367
- 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>;
1368
1510
  }
1369
1511
 
1370
1512
  interface SelectOption extends DropdownItem {
@@ -1387,6 +1529,7 @@ declare class SelectComponent implements FormValueControl<string | null> {
1387
1529
  readonly error: _angular_core.InputSignal<boolean>;
1388
1530
  readonly disabled: _angular_core.InputSignal<boolean>;
1389
1531
  readonly required: _angular_core.InputSignal<boolean>;
1532
+ readonly showRequiredIndicator: _angular_core.InputSignal<boolean>;
1390
1533
  readonly placeholder: _angular_core.InputSignal<string>;
1391
1534
  readonly options: _angular_core.InputSignal<SelectOption[]>;
1392
1535
  readonly invalid: _angular_core.InputSignal<boolean>;
@@ -1400,7 +1543,7 @@ declare class SelectComponent implements FormValueControl<string | null> {
1400
1543
  helperId: string;
1401
1544
  errorId: string;
1402
1545
  };
1403
- protected readonly items: _angular_core.Signal<DropdownItem[]>;
1546
+ protected readonly items: _angular_core.Signal<_underlayerdev_ui.MenuItem[]>;
1404
1547
  protected readonly hasError: _angular_core.Signal<boolean>;
1405
1548
  protected readonly describedBy: _angular_core.Signal<string | undefined>;
1406
1549
  constructor();
@@ -1408,7 +1551,79 @@ declare class SelectComponent implements FormValueControl<string | null> {
1408
1551
  protected onSelectedIndexChange(index: number): void;
1409
1552
  protected onDropdownClosed(): void;
1410
1553
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectComponent, never>;
1411
- 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>;
1555
+ }
1556
+
1557
+ /**
1558
+ * Makes any row of projected content (thumbnail/media + label content, plus
1559
+ * anything else — a status pill, actions) selectable in a bulk-select list,
1560
+ * without the consumer having to hand-roll device detection or gesture
1561
+ * wiring themselves:
1562
+ *
1563
+ * - Fine-pointer/real-hover devices (desktop): a checkbox is always present
1564
+ * but invisible until the row is hovered, keyboard-focused, or already
1565
+ * checked — Gmail-list style.
1566
+ * - Coarse-pointer/no-hover devices (touch): long-press a row to select it;
1567
+ * every row then swaps its projected `[ul-selectable-row-media]` content
1568
+ * for a large checkbox — there's rarely room for both a thumbnail and an
1569
+ * easy-to-hit checkbox on a small card.
1570
+ *
1571
+ * This component only decides what to *show* and detects the long-press
1572
+ * gesture — it doesn't know about routing, so a consumer whose media/content
1573
+ * slots contain a routerLink-driven anchor still needs to null that binding
1574
+ * out itself while `selectionActive` (see ul-selectable-row's own usage in
1575
+ * undermarket's profile-listings for the pattern).
1576
+ *
1577
+ * @example
1578
+ * ```html
1579
+ * <ul-selectable-row
1580
+ * [selected]="isSelected(item.id)"
1581
+ * [selectionActive]="hasSelection()"
1582
+ * [ariaLabel]="'Select ' + item.title"
1583
+ * (selectedChange)="toggleSelect(item.id, $event)"
1584
+ * (longPress)="onRowLongPress(item.id)"
1585
+ * >
1586
+ * <img ul-selectable-row-media [src]="item.imageUrl" alt="" />
1587
+ * <div ul-selectable-row-content>{{ item.title }}</div>
1588
+ * <ul-pill>{{ item.status }}</ul-pill>
1589
+ * </ul-selectable-row>
1590
+ * ```
1591
+ */
1592
+ declare class SelectableRowComponent {
1593
+ /** Whether this row is currently selected. */
1594
+ selected: _angular_core.InputSignal<boolean>;
1595
+ /**
1596
+ * Whether the list is in selection mode (something, anywhere, is
1597
+ * selected) — drives the compact-mode media-for-checkbox swap.
1598
+ */
1599
+ selectionActive: _angular_core.InputSignal<boolean>;
1600
+ /** Accessible label for this row's checkbox(es). */
1601
+ ariaLabel: _angular_core.InputSignal<string | null>;
1602
+ selectedChange: _angular_core.OutputEmitterRef<boolean>;
1603
+ longPress: _angular_core.OutputEmitterRef<void>;
1604
+ /**
1605
+ * Same distinction the hover-reveal CSS relies on — a width breakpoint
1606
+ * alone would misclassify a wide tablet in landscape, which has no real
1607
+ * hover, as "desktop".
1608
+ */
1609
+ private readonly hasFinePointer;
1610
+ readonly isCompact: _angular_core.Signal<boolean>;
1611
+ private justLongPressed;
1612
+ constructor();
1613
+ /**
1614
+ * Once every row shows a checkbox in place of its media (compact +
1615
+ * selecting), the checkbox is the only thing with its own toggle handler
1616
+ * — everything else in the row (the content slot, empty space) does
1617
+ * nothing on tap, which defeats the point of showing a large, easy-to-hit
1618
+ * target. Toggling on any tap in that state fixes it; it's safe to do
1619
+ * unconditionally (regardless of what's projected) because a consumer
1620
+ * whose content contains a routerLink is already expected to have nulled
1621
+ * that binding out while `selectionActive` — so there's no competing
1622
+ * navigation to accidentally trigger.
1623
+ */
1624
+ onHostClick(event: MouseEvent): void;
1625
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectableRowComponent, never>;
1626
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectableRowComponent, "ul-selectable-row", never, { "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "selectionActive": { "alias": "selectionActive"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "selectedChange": "selectedChange"; "longPress": "longPress"; }, never, ["[ul-selectable-row-media]", "[ul-selectable-row-content]", "*"], true, [{ directive: typeof LongPressDirective; inputs: {}; outputs: {}; }]>;
1412
1627
  }
1413
1628
 
1414
1629
  /**
@@ -1434,8 +1649,9 @@ declare class FormFieldLabelComponent {
1434
1649
  readonly required: _angular_core.InputSignal<boolean>;
1435
1650
  readonly for: _angular_core.InputSignal<string>;
1436
1651
  readonly size: _angular_core.InputSignal<UiSize>;
1652
+ readonly showRequiredIndicator: _angular_core.InputSignal<boolean>;
1437
1653
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormFieldLabelComponent, never>;
1438
- 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>;
1654
+ 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>;
1439
1655
  }
1440
1656
 
1441
1657
  /**
@@ -1553,6 +1769,7 @@ declare class TextareaComponent implements FormValueControl<string> {
1553
1769
  readonly disabled: _angular_core.InputSignal<boolean>;
1554
1770
  readonly readOnly: _angular_core.InputSignal<boolean>;
1555
1771
  readonly required: _angular_core.InputSignal<boolean>;
1772
+ readonly showRequiredIndicator: _angular_core.InputSignal<boolean>;
1556
1773
  readonly placeholder: _angular_core.InputSignal<string>;
1557
1774
  readonly label: _angular_core.InputSignal<string | null>;
1558
1775
  readonly helperText: _angular_core.InputSignal<string | null>;
@@ -1588,8 +1805,8 @@ declare class TextareaComponent implements FormValueControl<string> {
1588
1805
  focus(): void;
1589
1806
  select(): void;
1590
1807
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TextareaComponent, never>;
1591
- 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>;
1808
+ 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>;
1592
1809
  }
1593
1810
 
1594
- 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 };
1595
- 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 };
1811
+ 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, SelectableRowComponent, SidebarComponent, SkeletonComponent, StatusComponent, TableComponent, TextareaComponent, TextareaFieldDirective, ToastContainerComponent, ToastService, TooltipComponent, createFormFieldIds, getFormFieldDescribedBy, toastIcon };
1812
+ 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 };