Nav Bar apps positioned to the left of the app switcher. Backing field recomputed only when the active app or nav-app list changes (see recomputeNavBarApps) — NOT on every change-detection cycle, since this is bound directly in the shell nav template's @for/@if. Filters out apps that have HideNavBarIconWhenActive=true and are currently active.
Nav Bar apps positioned to the left of the user menu. Backing field recomputed only when the active app or nav-app list changes (see recomputeNavBarApps). Filters out apps that have HideNavBarIconWhenActive=true and are currently active.
ReadonlyMJMemberJunction framework version, shown in the loading screen and About dialog.
OptionalMobileMobile drawer + its toggle — used to return focus to the toggle when the drawer closes.
OptionalMobileOptionalOmnibarReadonlyOmnibarPromo copy shown in the legacy search surfaces.
If specified, this provider will be used for communication and for all metadata purposes. By default, if not provided, the Metadata and RunView classes are used for this and the default GraphQLDataProvider is used which is connected to the same back-end MJAPI instance as the Metadata and RunView classes. If you want to have this component connect to a different MJAPI back-end, create an instance of a ProviderBase sub-class like GraphQLDataProvider/etc, and configure it as appropriate to connect to the MJAPI back-end you want to use, and then pass it in here.
Legacy inline search composite (omnibar-off desktop). Structural typing keeps the shell decoupled from the ng-search component class.
StaticɵdirStaticɵfacUse ActiveApp.
Use ActivityItems.
Use ActivityOpen.
Use ActivityRunningCount.
Use AppAccessDialog.
Instance Config presentation style for the app switcher (launcher/compact/auto).
Use AppSwitchingLocked.
True when the auth session is locked to a single application (e.g. a magic-link session). The header hides app-switching chrome so the external user stays within their scoped app. Data access is still enforced server-side by the user's role; this is the UI-confinement layer.
Use AvatarAriaLabel.
Accessible name for the avatar button. The name must never depend on the avatar image rendering — a Gravatar CORS failure drops to the icon fallback, and an icon carries no name of its own — so it is set on the BUTTON and falls back to a generic label before the user record has loaded.
Use CurrentLoadingColor.
Use CurrentLoadingText.
Use DeveloperModeService.
Use Initialized.
Whether the currently applied theme is dark (used by the toggle switch in the template)
Use IsSearchOpen.
Use IsViewingSystemTab.
Use LeftOfSwitcherApps.
Use LeftOfUserMenuApps.
Use Loading.
Shell loading-screen flag, and the source of the Computer Use readiness
beacon. When it clears, the shell has finished loading the active route's
resource, so data-mj-ready="true" is published on <html>; raising it
again on navigation clears the beacon.
The beacon lives in this setter rather than at the call sites because ~22
places assign loading — routing, resource load, app switch, error paths.
Publishing here means every one of them stays correct for free.
Use LoadingAppId.
Use MobileNavDrawer.
Use MobileNavOpen.
Use MobileNavToggle.
Use MobileNavToggle.
Use OmnibarPalette.
Use OmnibarPalette.
Platform-correct summon-shortcut label ('⌘K' on Mac, 'Ctrl+K' elsewhere).
Returns either the default Metadata provider or the one specified in the Provider property, if it was specified
True when the deployment uses the records-as-tabs record-open style
(Shell.RecordOpen.Style != 'classic'): records open as native Golden
Layout tabs in the app the user is standing in, and the Records pill in
the nav is the global entry point (count + resume-last-viewed). The GL
tab header is the tab UI — native close/drag/pin apply to records too.
Returns either the default RunQuery provider or the one specified in the Provider property, if it was specified
Returns either the default RunView provider or the one specified in the Provider property, if it was specified
Use SearchableEntities.
Use SearchInput.
Use SelectedEntity.
Use ShellSearchComposite.
Use ShellSearchComposite.
Instance Config gate for the app navigation strip (desktop and the mobile drawer).
Instance Config gate for the app switcher (also the add/configure-apps entry point).
Instance Config gate for the notification bell + unread badge (desktop and mobile).
Whether the legacy search surfaces advertise the omnibar: the instance makes it available, the user hasn't opted in yet, and they haven't dismissed the promo. Fail-closed (never advertise during boot / permission constraints).
Use TabBarVisible.
Use TabContainerRef.
Two-layer gate for the unified Ctrl+K command palette (omnibar): the 'Shell.Omnibar.Enabled' Instance Config row is the master AVAILABILITY switch (default TRUE; false = legacy trio for everyone), and each user opts in personally via My Profile → Command Palette (a UserInfoEngine setting, so the choice follows them across devices). ON = the header shows the palette affordance and Ctrl+K / Ctrl+/ open the palette; OFF = the legacy trio (search composite + app command palette + search popup) behaves exactly as before. Both reads are synchronous cache hits.
Use UserEmail.
Use UserIconClass.
Use UserImageURL.
Use UserMenuElements.
Use UserMenuVisible.
Cast element to UserMenuItem (for template type safety) Call this only after checking !isMenuDivider(element)
Clear finished activities from the tracker.
Use CloseMobileNav.
Close mobile navigation drawer
Use CloseSearch.
Close search popup
Use GetUserDisplayInfo.
Get user display info for template
Use GetUserMenuOptions.
Get user menu options for template
Use HandleLayoutError.
Handle Golden Layout initialization failure
Use InitializeShell.
Case-insensitive UUID check whether an app is the currently active app.
A callback method that is invoked immediately after Angular has completed initialization of a component's view. It is invoked only once when the view is instantiated.
A callback method that performs custom clean-up, invoked immediately before a directive, pipe, or service instance is destroyed.
A callback method that is invoked immediately after the default change detector has checked the directive's data-bound properties for the first time, and before any of the view or content children have been checked. It is invoked only once when the directive is instantiated.
Handle dialog result (install, enable, or redirect)
Handle app switch from app switcher
Command palette "Search everything" row → full Search Results workspace. Does nothing while the chrome hides search, like the other search entry points.
Close the Activity drawer when clicking anywhere outside it.
The shell's ONLY document:keydown listener — handles every global chord.
⚠️ Do NOT add a second @HostListener('document:keydown') to this component.
Angular's compiler collects host listeners into an object keyed by event name,
so a second declaration for the same event SILENTLY REPLACES the first — no
build error, no warning, the earlier handler simply never registers. That is
exactly what happened here: a separate handleGlobalKeyboardShortcuts owned
Ctrl+/ and was overwritten by this method, so the command palette shortcut was
dead for its entire life. Every new global chord belongs in this one method.
defaultPrevented): CodeMirror binds Mod-/ to toggle
comment and calls preventDefault() without stopping propagation.Header search affordance / Ctrl+K: route to whichever search surface applies. The mobile check matters: below the breakpoint the composite is CSS-hidden (.desktop-only) but its ViewChild still exists — focusing an invisible input would silently eat the interaction.
Use OnLogLayout.
Log current workspace configuration to console (debug)
Use OnLogout.
Logout user and clear authentication data
Handle Nav Bar app icon click (single click switches to app)
Handle Nav Bar app icon double-click (opens in new tab)
Handle navigation item click with shift-key detection
Promo accepted: opt the user in (same UserInfoEngine setting as the My Profile toggle, so it follows them across devices), then open the palette pre-seeded with whatever they were just searching — same query, new surface, immediate demonstration.
Promo dismissed: persist server-side so it never shows again, on any device.
Legacy search overlay selection → same navigation path as the old composite.
Legacy search overlay "See all results" → the full Search Results workspace (same destination as the omnibar's see-all row).
Palette footer gear → My Profile (where the Command Palette section lives).
Use OnResetLayout.
Reset workspace layout - clears all tabs and switches to single-resource mode
Handle search submission
Inline composite submit (Enter) → full Search Results workspace, carrying the composite's relevance/scope selections.
Inline composite's suggest-dropdown "See all N results" footer.
Handle user menu item click
Header affordance click → open the palette.
Nuclear recovery: reset server-side workspace, clear all browser-side cached data, and reload the page. This recovers from stuck loading states caused by corrupted, stale, or incompatible workspace/tab data (e.g., after a version upgrade that changes the workspace configuration schema).
Open the feedback dialog with current workspace context. Captures a screenshot in the background and attaches it once ready.
Skip link target handoff (WCAG 2.4.1). Focus is moved programmatically rather than left to the browser's fragment navigation: the shell's main region is a Golden Layout host, and letting the URL hash change here would collide with the deep-link/tab restore path.
Toggle the global Activity drawer.
Use ToggleMobileNav.
Toggle mobile navigation drawer
Use ToggleSearch.
Toggle search popup visibility
Toggle user menu visibility
Main shell component for the new Explorer UX.
Provides: