@memberjunction/ng-explorer-core 5.48.0 → 5.50.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.
Files changed (39) hide show
  1. package/dist/generated/lazy-feature-config.d.ts +1 -1
  2. package/dist/generated/lazy-feature-config.d.ts.map +1 -1
  3. package/dist/generated/lazy-feature-config.js +6 -2
  4. package/dist/generated/lazy-feature-config.js.map +1 -1
  5. package/dist/lib/omnibar/omnibar-palette.component.d.ts.map +1 -1
  6. package/dist/lib/omnibar/omnibar-palette.component.js +109 -98
  7. package/dist/lib/omnibar/omnibar-palette.component.js.map +1 -1
  8. package/dist/lib/profile/profile-dialog.component.d.ts +17 -0
  9. package/dist/lib/profile/profile-dialog.component.d.ts.map +1 -1
  10. package/dist/lib/profile/profile-dialog.component.js +141 -5
  11. package/dist/lib/profile/profile-dialog.component.js.map +1 -1
  12. package/dist/lib/resource-wrappers/view-resource.component.d.ts +19 -16
  13. package/dist/lib/resource-wrappers/view-resource.component.d.ts.map +1 -1
  14. package/dist/lib/resource-wrappers/view-resource.component.js +127 -121
  15. package/dist/lib/resource-wrappers/view-resource.component.js.map +1 -1
  16. package/dist/lib/shell/components/header/app-nav.component.d.ts +84 -9
  17. package/dist/lib/shell/components/header/app-nav.component.d.ts.map +1 -1
  18. package/dist/lib/shell/components/header/app-nav.component.js +380 -41
  19. package/dist/lib/shell/components/header/app-nav.component.js.map +1 -1
  20. package/dist/lib/shell/components/header/app-switcher.component.d.ts +159 -29
  21. package/dist/lib/shell/components/header/app-switcher.component.d.ts.map +1 -1
  22. package/dist/lib/shell/components/header/app-switcher.component.js +822 -116
  23. package/dist/lib/shell/components/header/app-switcher.component.js.map +1 -1
  24. package/dist/lib/shell/services/sharing-center-dialog-host.component.d.ts +10 -1
  25. package/dist/lib/shell/services/sharing-center-dialog-host.component.d.ts.map +1 -1
  26. package/dist/lib/shell/services/sharing-center-dialog-host.component.js +30 -4
  27. package/dist/lib/shell/services/sharing-center-dialog-host.component.js.map +1 -1
  28. package/dist/lib/shell/shell.component.d.ts +17 -8
  29. package/dist/lib/shell/shell.component.d.ts.map +1 -1
  30. package/dist/lib/shell/shell.component.js +279 -215
  31. package/dist/lib/shell/shell.component.js.map +1 -1
  32. package/dist/lib/shell/shell.module.d.ts +1 -1
  33. package/dist/lib/shell/shell.module.d.ts.map +1 -1
  34. package/dist/lib/shell/shell.module.js +3 -1
  35. package/dist/lib/shell/shell.module.js.map +1 -1
  36. package/dist/lib/single-list-detail/single-list-detail.component.d.ts.map +1 -1
  37. package/dist/lib/single-list-detail/single-list-detail.component.js +10 -7
  38. package/dist/lib/single-list-detail/single-list-detail.component.js.map +1 -1
  39. package/package.json +52 -50
@@ -1,4 +1,4 @@
1
- import { EventEmitter, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
1
+ import { EventEmitter, OnInit, OnDestroy, AfterViewInit, ChangeDetectorRef, ElementRef } from '@angular/core';
2
2
  import { BaseApplication, NavItem, WorkspaceStateManager } from '@memberjunction/ng-base-application';
3
3
  import { SharedService } from '@memberjunction/ng-shared';
4
4
  import * as i0 from "@angular/core";
@@ -12,15 +12,21 @@ export interface NavItemClickEvent {
12
12
  /**
13
13
  * Horizontal navigation items for the current app.
14
14
  * Uses OnPush change detection and reactive state management for optimal performance.
15
+ *
16
+ * Overflow behavior (priority+ pattern): when the header can't fit every nav item,
17
+ * trailing items collapse into a "More" dropdown instead of squeezing the header's
18
+ * action cluster off-screen. Item widths are measured once per nav-items change
19
+ * (all items render for one frame, widths are cached), then every resize recomputes
20
+ * the fit from the cache — no re-measure, no layout thrash.
15
21
  */
16
- export declare class AppNavComponent implements OnInit, OnDestroy {
22
+ export declare class AppNavComponent implements OnInit, OnDestroy, AfterViewInit {
17
23
  private workspaceManager;
18
24
  private sharedService;
19
25
  private cdr;
26
+ private host;
20
27
  private destroy$;
21
28
  private _app;
22
29
  private _cachedNavItems;
23
- private _cachedAppColor;
24
30
  private _servicesInjected;
25
31
  /**
26
32
  * Monotonically increasing counter used to detect and discard stale async results.
@@ -38,20 +44,93 @@ export declare class AppNavComponent implements OnInit, OnDestroy {
38
44
  */
39
45
  private _updateGeneration;
40
46
  private activeStateMap;
47
+ /** Cached natural pixel width of each nav item, parallel to navItems order */
48
+ private itemWidths;
49
+ /** Measured width of the More button (fallback used until first render) */
50
+ private moreBtnWidth;
51
+ /** Left offset (px, relative to host) where the More dropdown anchors */
52
+ MoreDropdownLeft: number;
53
+ /** True when even one item + More can't fit — the lone visible pill
54
+ * shrinks with an ellipsis instead of clipping the More button. */
55
+ Tight: boolean;
56
+ /** Flex gap between nav items — measured from the rendered row (falls back
57
+ * to --mj-space-1's default of 4px until first measurement) */
58
+ private itemGap;
59
+ /** How many leading nav items are currently visible inline */
60
+ VisibleCount: number;
61
+ /** Whether the More dropdown is open */
62
+ MoreOpen: boolean;
63
+ /** True while nav items are being (re)loaded for skeleton display */
64
+ Loading: boolean;
65
+ private resizeObserver;
66
+ private _overflowEnabled;
67
+ private navListRef?;
68
+ private moreBtnRef?;
41
69
  navItemClick: EventEmitter<NavItemClickEvent>;
42
70
  navItemDismiss: EventEmitter<NavItem>;
43
- constructor(workspaceManager: WorkspaceStateManager, sharedService: SharedService, cdr: ChangeDetectorRef);
71
+ /**
72
+ * Disable the priority+ overflow behavior. Used by the mobile drawer instance,
73
+ * where items stack vertically and can never overflow horizontally.
74
+ */
75
+ set OverflowEnabled(value: boolean);
76
+ get OverflowEnabled(): boolean;
77
+ constructor(workspaceManager: WorkspaceStateManager, sharedService: SharedService, cdr: ChangeDetectorRef, host: ElementRef<HTMLElement>);
44
78
  /**
45
79
  * Input setter for app - triggers cache update when app changes
46
80
  */
47
81
  set app(value: BaseApplication | null);
48
82
  get app(): BaseApplication | null;
49
83
  ngOnInit(): void;
84
+ ngAfterViewInit(): void;
50
85
  ngOnDestroy(): void;
51
86
  /**
52
87
  * Update cached nav items and app color when app changes
53
88
  */
54
89
  private updateCachedData;
90
+ /**
91
+ * Cache the natural width of every nav item. Called in the frame after a new
92
+ * item set renders (all items visible, flex-shrink: 0, so widths are natural
93
+ * even if the row is clipped by overflow: hidden).
94
+ */
95
+ private measureItemWidths;
96
+ /**
97
+ * Decide how many items fit in the host's current width; the rest collapse
98
+ * into the More dropdown. Pure arithmetic over cached widths — safe to call
99
+ * on every resize.
100
+ */
101
+ private recomputeFit;
102
+ /**
103
+ * Self-heal for the item-width cache: if it's stale or missing (the
104
+ * measurement frame can race the first render after a reload/app switch),
105
+ * expand to the full item set, re-measure, and retry next frame until it
106
+ * converges. Returns true when the cache matches the current item set.
107
+ */
108
+ private ensureFreshWidthCache;
109
+ /** Pure fit arithmetic: how many leading items fit beside the More button */
110
+ private computeFitCount;
111
+ /** Commit a fit result, closing More if nothing overflows; CD only on change */
112
+ private applyFit;
113
+ /**
114
+ * markForCheck + synchronous detectChanges. In Angular 21 zoneless mode,
115
+ * markForCheck() alone is unreliable when the trigger is an RxJS
116
+ * subscription or rAF callback not tracked by the zoneless scheduler — the
117
+ * dirty flag is set but no follow-up tick is scheduled. detectChanges()
118
+ * throws if invoked re-entrantly during an in-flight CD pass; that's
119
+ * harmless (the in-flight pass picks up our markForCheck), hence the catch.
120
+ */
121
+ private syncChangeDetection;
122
+ /** Items rendered inline in the header row */
123
+ get InlineItems(): NavItem[];
124
+ /** Items collapsed into the More dropdown */
125
+ get OverflowItems(): NavItem[];
126
+ /** True when any overflowed item is the active one (More button shows active tint) */
127
+ get OverflowHasActive(): boolean;
128
+ /** Open/close the More dropdown, anchoring it under the More button and clamping it inside the host */
129
+ ToggleMore(event: MouseEvent): void;
130
+ /** Close the More dropdown on any outside click or Escape */
131
+ onDocumentClick(event: MouseEvent): void;
132
+ /** Close the More dropdown on Escape */
133
+ onEscape(): void;
55
134
  /**
56
135
  * Update active state map based on current workspace configuration
57
136
  */
@@ -73,10 +152,6 @@ export declare class AppNavComponent implements OnInit, OnDestroy {
73
152
  * Get cached navigation items (no computation in getter)
74
153
  */
75
154
  get navItems(): NavItem[];
76
- /**
77
- * Get cached app color (no computation in getter)
78
- */
79
- get appColor(): string;
80
155
  /**
81
156
  * Check if nav item is active (uses cached state from Map)
82
157
  */
@@ -96,6 +171,6 @@ export declare class AppNavComponent implements OnInit, OnDestroy {
96
171
  */
97
172
  onDismiss(item: NavItem, event: MouseEvent): void;
98
173
  static ɵfac: i0.ɵɵFactoryDeclaration<AppNavComponent, never>;
99
- static ɵcmp: i0.ɵɵComponentDeclaration<AppNavComponent, "mj-app-nav", never, { "app": { "alias": "app"; "required": false; }; }, { "navItemClick": "navItemClick"; "navItemDismiss": "navItemDismiss"; }, never, never, false, never>;
174
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppNavComponent, "mj-app-nav", never, { "OverflowEnabled": { "alias": "OverflowEnabled"; "required": false; }; "app": { "alias": "app"; "required": false; }; }, { "navItemClick": "navItemClick"; "navItemDismiss": "navItemDismiss"; }, never, never, false, never>;
100
175
  }
101
176
  //# sourceMappingURL=app-nav.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-nav.component.d.ts","sourceRoot":"","sources":["../../../../../src/lib/shell/components/header/app-nav.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAA2B,MAAM,eAAe,CAAC;AACtI,OAAO,EAAE,eAAe,EAAkB,OAAO,EAAE,qBAAqB,EAA0B,MAAM,qCAAqC,CAAC;AAC9I,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;;AAG1D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,qBAOa,eAAgB,YAAW,MAAM,EAAE,SAAS;IA8BrD,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,GAAG;IA/Bb,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,IAAI,CAAgC;IAC5C,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,iBAAiB,CAAS;IAElC;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,iBAAiB,CAAK;IAG9B,OAAO,CAAC,cAAc,CAA8B;IAE1C,YAAY,kCAAyC;IACrD,cAAc,wBAA+B;gBAG7C,gBAAgB,EAAE,qBAAqB,EACvC,aAAa,EAAE,aAAa,EAC5B,GAAG,EAAE,iBAAiB;IAGhC;;OAEG;IACH,IACI,GAAG,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,EASpC;IAED,IAAI,GAAG,IAAI,eAAe,GAAG,IAAI,CAEhC;IAED,QAAQ,IAAI,IAAI;IAahB,WAAW,IAAI,IAAI;IAKnB;;OAEG;YACW,gBAAgB;IAyD9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoB1B;;;OAGG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;IAIjC;;OAEG;IACH,OAAO,CAAC,eAAe;IA+BvB;;OAEG;IACH,IAAI,QAAQ,IAAI,OAAO,EAAE,CAExB;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;IAKhC;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM;IAIrD;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI;IAOnD;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;yCAxPtC,eAAe;2CAAf,eAAe;CAyQ3B"}
1
+ {"version":3,"file":"app-nav.component.d.ts","sourceRoot":"","sources":["../../../../../src/lib/shell/components/header/app-nav.component.ts"],"names":[],"mappings":"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"}