@underlayerdev/ui 0.2.0 → 0.4.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.2.0",
3
+ "version": "0.4.0",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": "^22.0.0",
6
6
  "@angular/common": "^22.0.0",
@@ -442,6 +442,68 @@ declare class CollapseComponent implements AfterViewInit {
442
442
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<CollapseComponent, "ul-collapse", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": true; "isSignal": true; }; "expandLabel": { "alias": "expandLabel"; "required": false; "isSignal": true; }; "collapseLabel": { "alias": "collapseLabel"; "required": false; "isSignal": true; }; }, { "collapsed": "collapsedChange"; }, never, ["*"], true, never>;
443
443
  }
444
444
 
445
+ /**
446
+ * Mobile-only bottom navigation bar, styled like an app's tab bar
447
+ * (icon-above-label items, one highlighted as active). Hidden above the
448
+ * 'md' breakpoint (1024px) by the component's own CSS — no wrapper class or
449
+ * media query is needed in the consuming app.
450
+ *
451
+ * Project `ul-dock-item`s directly; there is no data-driven `items` input,
452
+ * since each item typically needs its own `routerLink`.
453
+ *
454
+ * @example
455
+ * <ul-dock>
456
+ * <ul-dock-item icon="home" label="Home" routerLink="/home" routerLinkActive="ul-dock-item--active" />
457
+ * <ul-dock-item icon="search" label="Search" routerLink="/search" routerLinkActive="ul-dock-item--active" />
458
+ * </ul-dock>
459
+ */
460
+ declare class DockComponent {
461
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DockComponent, never>;
462
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DockComponent, "ul-dock", never, {}, {}, never, ["*"], true, never>;
463
+ }
464
+
465
+ /** Place on the element projected into [ul-dock-item-content] so the dock item renders custom content instead of its default icon+label. */
466
+ declare class DockItemContentSlotDirective {
467
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DockItemContentSlotDirective, never>;
468
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DockItemContentSlotDirective, "[ul-dock-item-content]", never, {}, {}, never, never, true, never>;
469
+ }
470
+
471
+ /** Pre-built visual treatments for a dock item. 'accent' raises/highlights the item (e.g. a primary action tab like "New"). */
472
+ type DockItemVariant = 'default' | 'accent';
473
+ /**
474
+ * A single tab in a `ul-dock`. Renders an icon above a label and tints both
475
+ * when `active`. Attach `routerLink`/`routerLinkActive` (or any other
476
+ * directive) directly on `ul-dock-item` for navigation.
477
+ *
478
+ * For the common case, content is data-driven via `icon`/`label`. To fully
479
+ * customize an item's content (e.g. a differently laid-out icon+label pair),
480
+ * project it with `[ul-dock-item-content]` — this replaces the default
481
+ * icon/label rendering entirely. `badge` and `variant` apply regardless of
482
+ * which content path is used.
483
+ *
484
+ * @example
485
+ * <ul-dock-item icon="home" label="Home" routerLink="/home" routerLinkActive="ul-dock-item--active" />
486
+ * <ul-dock-item icon="bell_on" badge="3" routerLink="/notifications" />
487
+ * <ul-dock-item variant="accent" routerLink="/listings/new">
488
+ * <span ul-dock-item-content>
489
+ * <ul-icon icon="plus" size="6" />
490
+ * <span class="ul-dock-item__label">New</span>
491
+ * </span>
492
+ * </ul-dock-item>
493
+ */
494
+ declare class DockItemComponent {
495
+ icon: _angular_core.InputSignal<string | undefined>;
496
+ label: _angular_core.InputSignal<string>;
497
+ active: _angular_core.InputSignal<boolean>;
498
+ disabled: _angular_core.InputSignal<boolean>;
499
+ badge: _angular_core.InputSignal<string | number | undefined>;
500
+ variant: _angular_core.InputSignal<DockItemVariant>;
501
+ readonly contentSlot: _angular_core.Signal<DockItemContentSlotDirective | undefined>;
502
+ readonly hasContentSlot: _angular_core.Signal<boolean>;
503
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DockItemComponent, never>;
504
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DockItemComponent, "ul-dock-item", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, {}, ["contentSlot"], ["[ul-dock-item-content]"], true, never>;
505
+ }
506
+
445
507
  type ListItemTheme = 'ghost-white' | 'transparent-white' | 'outline-white' | 'outline-purple';
446
508
  declare class ListItemComponent {
447
509
  checkbox: _angular_core.Signal<CheckboxComponent | undefined>;
@@ -910,7 +972,7 @@ declare class NavbarAppNameSlotDirective {
910
972
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NavbarAppNameSlotDirective, "[ul-navbar-app-name]", never, {}, {}, never, never, true, never>;
911
973
  }
912
974
 
913
- /** 'full' shows the sidebar toggle, search, and avatar; 'minimal' shows only the logo — for auth pages and other chromeless flows. */
975
+ /** 'full' shows the sidebar toggle, search, and avatar; 'minimal' shows only the logo — for auth pages and other chromeless flows. See also `searchCollapsible` for whether the search slot collapses to an icon-toggle on mobile. */
914
976
  type NavbarVariant = 'full' | 'minimal';
915
977
  declare class NavbarComponent {
916
978
  /** 'full' (default) shows the sidebar toggle, search, and avatar; 'minimal' shows only the logo. */
@@ -931,6 +993,8 @@ declare class NavbarComponent {
931
993
  sidebarOpen: _angular_core.InputSignal<boolean>;
932
994
  /** When true, show the sidebar toggle button even when a logo slot is projected. */
933
995
  showSidebarToggle: _angular_core.InputSignal<boolean>;
996
+ /** When false, the projected search slot is always rendered expanded (no icon-toggle collapse on mobile) — use for apps that want search visible and full-width at every viewport. */
997
+ searchCollapsible: _angular_core.InputSignal<boolean>;
934
998
  /** Emitted when the user clicks the sidebar toggle. Parent should flip the open state. */
935
999
  sidebarToggle: _angular_core.OutputEmitterRef<void>;
936
1000
  readonly logoSlot: _angular_core.Signal<NavbarLogoSlotDirective | undefined>;
@@ -940,6 +1004,7 @@ declare class NavbarComponent {
940
1004
  readonly isMinimal: _angular_core.Signal<boolean>;
941
1005
  readonly hasLogoSlot: _angular_core.Signal<boolean>;
942
1006
  readonly hasSearchSlot: _angular_core.Signal<boolean>;
1007
+ readonly showSearchToggle: _angular_core.Signal<boolean>;
943
1008
  readonly hasAvatarSlot: _angular_core.Signal<boolean>;
944
1009
  readonly hasAppNameSlot: _angular_core.Signal<boolean>;
945
1010
  readonly showToggle: _angular_core.Signal<boolean>;
@@ -947,7 +1012,7 @@ declare class NavbarComponent {
947
1012
  toggleSearch(): void;
948
1013
  toggleSidebar(): void;
949
1014
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NavbarComponent, never>;
950
- 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; }; }, { "sidebarToggle": "sidebarToggle"; }, ["logoSlot", "searchSlot", "avatarSlot", "appNameSlot"], ["[ul-navbar-logo]", "[ul-navbar-app-name]", "[ul-navbar-search]", "[ul-navbar-avatar]"], true, never>;
1015
+ 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>;
951
1016
  }
952
1017
 
953
1018
  type PillSize = 'md' | 'lg';
@@ -1505,5 +1570,5 @@ declare class TextareaComponent implements FormValueControl<string> {
1505
1570
  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"; "value": "valueChange"; "inputBlur": "inputBlur"; "inputFocus": "inputFocus"; }, ["customField"], ["[ul-textarea-left-elements]", "[ul-textarea-field]", "[ul-textarea-right-elements]"], true, never>;
1506
1571
  }
1507
1572
 
1508
- export { AccordionComponent, AccordionItemComponent, AreaCodeComponent, AvatarComponent, AvatarGroupComponent, BreadcrumbComponent, ButtonComponent, CalendarComponent, CardComponent, CarouselComponent, CarouselItemComponent, CheckboxComponent, CollapseComponent, CustomCurrencyPipe, 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 };
1509
- export type { ActionsDistribution, AvatarData, BreadcrumbItem, BreadcrumbSeparator, CalendarDay, CalendarMode, CardCaptionSize, CardDirection, CheckboxZoneType, CollapseVariant, Currency, 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 };
1573
+ 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 };
1574
+ 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 };