@forgeroute/ui 0.4.66 → 0.4.67

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": "@forgeroute/ui",
3
- "version": "0.4.66",
3
+ "version": "0.4.67",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=22.0.0",
6
6
  "@angular/core": ">=22.0.0",
@@ -1095,7 +1095,7 @@ export declare class SelectComponent implements ControlValueAccessor, Validator,
1095
1095
  readonly error: import("@angular/core").InputSignal<string>;
1096
1096
  /** Reveal the built-in error messages now (e.g. after a failed Save click), without waiting for blur. */
1097
1097
  readonly showErrors: import("@angular/core").InputSignal<boolean>;
1098
- readonly size: import("@angular/core").InputSignal<"default" | "sm">;
1098
+ readonly size: import("@angular/core").InputSignal<"sm" | "default">;
1099
1099
  readonly _disabledInput: import("@angular/core").InputSignal<boolean>;
1100
1100
  private readonly _cvaDisabled;
1101
1101
  protected readonly disabled: import("@angular/core").Signal<boolean>;
@@ -2682,7 +2682,7 @@ export declare class AudioPlayerComponent {
2682
2682
  /** Accessible name of the player. */
2683
2683
  readonly ariaLabel: import("@angular/core").InputSignal<string>;
2684
2684
  /** How much to load before play: 'metadata' (default), 'auto' or 'none'. */
2685
- readonly preload: import("@angular/core").InputSignal<"none" | "auto" | "metadata">;
2685
+ readonly preload: import("@angular/core").InputSignal<"none" | "metadata" | "auto">;
2686
2686
  /** Fires when the browser can't load or decode the source. */
2687
2687
  readonly playbackError: import("@angular/core").OutputEmitterRef<void>;
2688
2688
  protected readonly failed: import("@angular/core").WritableSignal<boolean>;
@@ -2936,7 +2936,7 @@ export declare class CheckboxComponent implements ControlValueAccessor, Validato
2936
2936
  * clicking it still toggles the box - e.g. a product name that is both the heading of its card and the label of its checkbox.
2937
2937
  * Default null: plain label text, exactly as before. Single mode only.
2938
2938
  */
2939
- readonly headingLevel: import("@angular/core").InputSignal<1 | 2 | 3 | 4 | 5 | 6 | null>;
2939
+ readonly headingLevel: import("@angular/core").InputSignal<1 | 2 | 5 | 3 | 6 | 4 | null>;
2940
2940
  readonly indeterminate: import("@angular/core").InputSignal<boolean>;
2941
2941
  readonly checked: import("@angular/core").ModelSignal<boolean>;
2942
2942
  /**
@@ -3963,7 +3963,7 @@ export declare class ButtonComponent {
3963
3963
  * `ghost-start`: a ghost button for list / section toggles - a full-width row with its content aligned to the start, transparent
3964
3964
  * background, hover tint and the normal focus ring. Pair it with `ariaExpanded` / `ariaPressed`; the label may contain a heading element.
3965
3965
  */
3966
- readonly variant: import("@angular/core").InputSignal<"primary" | "secondary" | "danger" | "warning" | "link" | "ghost" | "ghost-start" | "tab" | "icon" | "icon-danger">;
3966
+ readonly variant: import("@angular/core").InputSignal<"link" | "primary" | "secondary" | "danger" | "warning" | "ghost" | "ghost-start" | "tab" | "icon" | "icon-danger">;
3967
3967
  /** Renders an anchor to this route instead of a button (use with `variant="link"` for an inline text link). `['/settings']` or `'/settings'`. While `disabled` or `loading` it renders a non-clickable `<span role="link" aria-disabled>` with no href (like `href`). */
3968
3968
  readonly routerLink: import("@angular/core").InputSignal<string | readonly unknown[] | null>;
3969
3969
  /** Query params of the `routerLink` (e.g. `{ section: 'deal-defaults' }`). */
@@ -4009,7 +4009,7 @@ export declare class ButtonComponent {
4009
4009
  readonly color: import("@angular/core").InputSignal<string | undefined>;
4010
4010
  readonly active: import("@angular/core").InputSignal<boolean>;
4011
4011
  readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg" | "xs">;
4012
- readonly type: import("@angular/core").InputSignal<"reset" | "submit" | "button">;
4012
+ readonly type: import("@angular/core").InputSignal<"button" | "reset" | "submit">;
4013
4013
  readonly disabled: import("@angular/core").InputSignal<boolean>;
4014
4014
  readonly loading: import("@angular/core").InputSignal<boolean>;
4015
4015
  readonly fullWidth: import("@angular/core").InputSignal<boolean>;
@@ -4948,7 +4948,7 @@ export declare class TextInputComponent implements ControlValueAccessor, Validat
4948
4948
  readonly passwordRequirements: import("@angular/core").InputSignal<boolean>;
4949
4949
  /** Rules for `passwordRequirements`; default = the library's five rules (8+ characters, upper, lower, digit, special). */
4950
4950
  readonly passwordRules: import("@angular/core").InputSignal<readonly PasswordRule[] | undefined>;
4951
- readonly type: import("@angular/core").InputSignal<"number" | "text" | "email" | "tel" | "password" | "url">;
4951
+ readonly type: import("@angular/core").InputSignal<"number" | "text" | "tel" | "email" | "password" | "url">;
4952
4952
  readonly maxlength: import("@angular/core").InputSignal<number | undefined>;
4953
4953
  readonly required: import("@angular/core").InputSignal<boolean>;
4954
4954
  readonly autocomplete: import("@angular/core").InputSignal<string>;
@@ -4957,7 +4957,7 @@ export declare class TextInputComponent implements ControlValueAccessor, Validat
4957
4957
  * `search`, `text`, `none`). Empty (default) = the browser's default for the field, except `type="tel"`, which keeps `tel`.
4958
4958
  * It only picks the keyboard; it does not restrict what can be typed or pasted.
4959
4959
  */
4960
- readonly inputmode: import("@angular/core").InputSignal<"" | "none" | "text" | "search" | "email" | "tel" | "url" | "decimal" | "numeric">;
4960
+ readonly inputmode: import("@angular/core").InputSignal<"" | "none" | "text" | "search" | "tel" | "email" | "url" | "decimal" | "numeric">;
4961
4961
  readonly readonly: import("@angular/core").InputSignal<boolean>;
4962
4962
  readonly hint: import("@angular/core").InputSignal<string>;
4963
4963
  /** Id(s) of an external element that also describes this control (e.g. one shared error text for a group of fields). Space separated; MERGED after the control's own hint / error id in `aria-describedby`, never replacing it. Empty = unchanged. */
@@ -5023,7 +5023,7 @@ export declare class TextInputComponent implements ControlValueAccessor, Validat
5023
5023
  protected readonly _stepAttr: import("@angular/core").Signal<string | null>;
5024
5024
  protected readonly _revealable: import("@angular/core").Signal<boolean>;
5025
5025
  protected readonly _shown: import("@angular/core").WritableSignal<boolean>;
5026
- protected readonly _inputType: import("@angular/core").Signal<"number" | "text" | "email" | "tel" | "password" | "url">;
5026
+ protected readonly _inputType: import("@angular/core").Signal<"number" | "text" | "tel" | "email" | "password" | "url">;
5027
5027
  protected readonly _eyePath: string;
5028
5028
  protected readonly _eyeOffPath: string;
5029
5029
  protected readonly _showRequirements: import("@angular/core").Signal<boolean>;
@@ -6526,6 +6526,8 @@ export declare class DropdownComponent {
6526
6526
  private _typeahead;
6527
6527
  private _typeaheadTimer;
6528
6528
  private _destroyed;
6529
+ /** Identifies the current loader request, so a late or stale answer (menu closed / reopened meanwhile) is ignored. */
6530
+ private _loadToken;
6529
6531
  protected readonly triggerId: string;
6530
6532
  protected readonly menuId: string;
6531
6533
  protected readonly _ariaLabel: import("@angular/core").Signal<string | null>;
@@ -6821,7 +6823,7 @@ export declare class FormRowComponent {
6821
6823
  * child simply takes the full width. Keep a numeric span within the row's `cols` (use `all` for the whole row).
6822
6824
  */
6823
6825
  export declare class FormColSpanDirective {
6824
- readonly uiColSpan: import("@angular/core").InputSignal<"" | "2" | "3" | 2 | 3 | "all">;
6826
+ readonly uiColSpan: import("@angular/core").InputSignal<"" | 2 | 3 | "2" | "3" | "all">;
6825
6827
  protected readonly _class: import("@angular/core").Signal<string>;
6826
6828
  static ɵfac: i0.ɵɵFactoryDeclaration<FormColSpanDirective, never>;
6827
6829
  static ɵdir: i0.ɵɵDirectiveDeclaration<FormColSpanDirective, "[uiColSpan]", never, {
@@ -7823,6 +7825,10 @@ export declare class PanelInfoListComponent {
7823
7825
  isWeb(href: string): boolean;
7824
7826
  /** Link text: the value, else the email / phone as written. */
7825
7827
  textOf(item: PanelInfoItem): string;
7828
+ /** Plain value, or the dash for an empty / blank one. */
7829
+ valueOf(item: PanelInfoItem): string;
7830
+ /** A disabled header action never runs, even when the click reaches the host element. */
7831
+ runHeaderAction(ha: NonNullable<PanelInfoSection['headerAction']>): void;
7826
7832
  visibleItems(section: PanelInfoSection): PanelInfoItem[];
7827
7833
  static ɵfac: i0.ɵɵFactoryDeclaration<PanelInfoListComponent, never>;
7828
7834
  static ɵcmp: i0.ɵɵComponentDeclaration<PanelInfoListComponent, "ui-panel-info-list", never, {
@@ -8098,6 +8104,8 @@ export declare class AppShellComponent implements OnInit, OnDestroy {
8098
8104
  readonly logoutClick: import("@angular/core").OutputEmitterRef<void>;
8099
8105
  protected readonly _sidebarOpen: import("@angular/core").WritableSignal<boolean>;
8100
8106
  protected readonly _collapsed: import("@angular/core").WritableSignal<boolean>;
8107
+ /** The rail (icons-only sidebar) only exists on the desktop layout; on the drawer layout (≤1024px) a saved rail choice is ignored. */
8108
+ protected readonly _drawerLayout: import("@angular/core").WritableSignal<boolean>;
8101
8109
  protected readonly _isRail: import("@angular/core").Signal<boolean>;
8102
8110
  private readonly _collapsedGroups;
8103
8111
  protected readonly _visibleGroups: import("@angular/core").Signal<NavGroup[]>;
@@ -8106,6 +8114,8 @@ export declare class AppShellComponent implements OnInit, OnDestroy {
8106
8114
  private readonly _iconCache;
8107
8115
  _safeIcon(svg: string): SafeHtml;
8108
8116
  _visibleLinks(group: NavGroup): NavLink[];
8117
+ /** Groups can only be collapsed when there is more than one: a lone group stays open so the navigation can never be hidden. */
8118
+ protected _canCollapseGroups(): boolean;
8109
8119
  _isCollapsed(key: string): boolean;
8110
8120
  toggleGroup(key: string): void;
8111
8121
  private _readSavedGroups;
@@ -8114,9 +8124,26 @@ export declare class AppShellComponent implements OnInit, OnDestroy {
8114
8124
  toggleCollapsed(): void;
8115
8125
  private static readonly _COLLAPSE_KEY;
8116
8126
  private static _loadCollapsed;
8127
+ private readonly _host;
8128
+ private readonly _injector;
8129
+ private readonly _document;
8130
+ /** The drawer layout is exactly the complement of the desktop layout the CSS rail rules use (min-width: 1025px): no viewport width falls in between. */
8131
+ private static readonly _DRAWER_MQ;
8132
+ private static readonly _FOCUSABLE;
8133
+ private _sidebarFocusables;
8134
+ private _hamburger;
8117
8135
  toggleSidebar(): void;
8118
- closeSidebar(): void;
8136
+ /** Opens the drawer (drawer layout only; a no-op on desktop) and moves keyboard focus into it, so the links behind the backdrop are not reachable until it closes. */
8137
+ openSidebar(): void;
8138
+ /** Closes the drawer; `returnFocus` puts focus back on the hamburger that opened it (keyboard users keep their place). */
8139
+ closeSidebar(returnFocus?: boolean): void;
8140
+ /** Escape closes an open drawer; Tab stays inside it while it is open. */
8141
+ onShellKeydown(e: KeyboardEvent): void;
8142
+ /** Skip link: focuses the main content (`tabindex="-1"`) without changing the URL (the app uses the router). */
8143
+ skipToContent(e: Event): void;
8119
8144
  ngOnInit(): void;
8145
+ private _drawerMq?;
8146
+ private readonly _onDrawerMqChange;
8120
8147
  ngOnDestroy(): void;
8121
8148
  private _expandActiveGroup;
8122
8149
  static ɵfac: i0.ɵɵFactoryDeclaration<AppShellComponent, never>;
@@ -9886,7 +9913,7 @@ export declare class DetailCardComponent {
9886
9913
  /** true (default) = the title is displayed in capitals (CSS only); false = shown as written. The text, aria-label and heading name are never changed. */
9887
9914
  readonly uppercaseTitle: import("@angular/core").InputSignal<boolean>;
9888
9915
  /** 1-6 makes the title a real heading for screen readers (role=heading, aria-level); null keeps it plain text. */
9889
- readonly headingLevel: import("@angular/core").InputSignal<1 | 2 | 3 | 4 | 5 | 6 | null>;
9916
+ readonly headingLevel: import("@angular/core").InputSignal<1 | 2 | 5 | 3 | 6 | 4 | null>;
9890
9917
  /** Optional id for the title text; the card is then labelled by it. Without it the title is the card's aria-label. */
9891
9918
  readonly titleId: import("@angular/core").InputSignal<string>;
9892
9919
  /** Accessible name of the card when the header gives none (no header, or no title). A visible title wins; blank = no name. */