@underlayerdev/ui 0.7.5 → 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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@underlayerdev/ui",
3
- "version": "0.7.5",
3
+ "version": "0.8.0",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": "^22.0.0",
6
6
  "@angular/common": "^22.0.0",
@@ -1554,6 +1554,78 @@ declare class SelectComponent implements FormValueControl<string | null> {
1554
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
1555
  }
1556
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: {}; }]>;
1627
+ }
1628
+
1557
1629
  /**
1558
1630
  * Generates unique IDs for form field elements (control, helper, error).
1559
1631
  * Use this so label `for`, helper `id`, and `aria-describedby` stay in sync.
@@ -1736,5 +1808,5 @@ declare class TextareaComponent implements FormValueControl<string> {
1736
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>;
1737
1809
  }
1738
1810
 
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 };
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 };
1740
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 };