@underlayerdev/ui 0.7.5 → 0.8.1

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.1",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": "^22.0.0",
6
6
  "@angular/common": "^22.0.0",
@@ -1554,6 +1554,80 @@ 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
+ * While selecting, a tap anywhere in the row toggles it — not just on the
1615
+ * checkbox. This applies on every device, not only once the checkbox has
1616
+ * replaced the media (compact): otherwise the row's content on
1617
+ * fine-pointer devices would only be togglable by precisely hitting the
1618
+ * small hover-revealed checkbox, which is inconsistent with how compact
1619
+ * mode behaves and isn't how Gmail/Photos-style bulk-select works even on
1620
+ * desktop web. It's safe to do unconditionally (regardless of what's
1621
+ * projected) because a consumer whose content contains a routerLink is
1622
+ * already expected to have nulled that binding out while
1623
+ * `selectionActive` — so there's no competing navigation to accidentally
1624
+ * trigger.
1625
+ */
1626
+ onHostClick(event: MouseEvent): void;
1627
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectableRowComponent, never>;
1628
+ 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: {}; }]>;
1629
+ }
1630
+
1557
1631
  /**
1558
1632
  * Generates unique IDs for form field elements (control, helper, error).
1559
1633
  * Use this so label `for`, helper `id`, and `aria-describedby` stay in sync.
@@ -1736,5 +1810,5 @@ declare class TextareaComponent implements FormValueControl<string> {
1736
1810
  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
1811
  }
1738
1812
 
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 };
1813
+ 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
1814
  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 };