@memberjunction/ng-explorer-core 5.3.0 → 5.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/dist/app-routing.module.js.map +1 -1
- package/dist/generic/Item.types.js.map +1 -1
- package/dist/generic/PathData.types.js.map +1 -1
- package/dist/generic/app-nav-view.types.js.map +1 -1
- package/dist/lib/__tests__/explorer-core.test.js.map +1 -1
- package/dist/lib/command-palette/command-palette.component.js.map +1 -1
- package/dist/lib/command-palette/command-palette.service.js.map +1 -1
- package/dist/lib/command-palette/index.js.map +1 -1
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js.map +1 -1
- package/dist/lib/generic/form-toolbar.js.map +1 -1
- package/dist/lib/generic/resource-container-component.js.map +1 -1
- package/dist/lib/guards/auth-guard.service.js.map +1 -1
- package/dist/lib/guards/entities.guard.js.map +1 -1
- package/dist/lib/oauth/oauth-callback.component.js.map +1 -1
- package/dist/lib/oauth/oauth.module.js.map +1 -1
- package/dist/lib/resource-wrappers/artifact-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-collections-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/dashboard-resource.component.js +3 -3
- package/dist/lib/resource-wrappers/dashboard-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/list-detail-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/notifications-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/query-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/record-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/resource-wrappers-loader.js.map +1 -1
- package/dist/lib/resource-wrappers/search-results-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/view-resource.component.js.map +1 -1
- package/dist/lib/services/startup-validation.service.js.map +1 -1
- package/dist/lib/services/system-validation.service.js.map +1 -1
- package/dist/lib/shell/components/dialogs/app-access-dialog.component.js.map +1 -1
- package/dist/lib/shell/components/header/app-nav.component.js +2 -2
- package/dist/lib/shell/components/header/app-nav.component.js.map +1 -1
- package/dist/lib/shell/components/header/app-switcher.component.js +7 -7
- package/dist/lib/shell/components/header/app-switcher.component.js.map +1 -1
- package/dist/lib/shell/components/tabs/component-cache-manager.js.map +1 -1
- package/dist/lib/shell/components/tabs/tab-container.component.js +2 -2
- package/dist/lib/shell/components/tabs/tab-container.component.js.map +1 -1
- package/dist/lib/shell/loading-themes.js.map +1 -1
- package/dist/lib/shell/services/settings-dialog.service.js.map +1 -1
- package/dist/lib/shell/shell.component.d.ts +7 -2
- package/dist/lib/shell/shell.component.d.ts.map +1 -1
- package/dist/lib/shell/shell.component.js +102 -34
- package/dist/lib/shell/shell.component.js.map +1 -1
- package/dist/lib/shell/shell.module.js.map +1 -1
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.js.map +1 -1
- package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.js.map +1 -1
- package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.js.map +1 -1
- package/dist/lib/single-dashboard/single-dashboard.component.js.map +1 -1
- package/dist/lib/single-list-detail/single-list-detail.component.js.map +1 -1
- package/dist/lib/single-query/single-query.component.js.map +1 -1
- package/dist/lib/single-record/single-record.component.js.map +1 -1
- package/dist/lib/single-search-result/single-search-result.component.js.map +1 -1
- package/dist/lib/system-validation/system-validation-banner.component.js.map +1 -1
- package/dist/lib/user-menu/base-user-menu.d.ts +17 -0
- package/dist/lib/user-menu/base-user-menu.d.ts.map +1 -1
- package/dist/lib/user-menu/base-user-menu.js +70 -1
- package/dist/lib/user-menu/base-user-menu.js.map +1 -1
- package/dist/lib/user-menu/index.js.map +1 -1
- package/dist/lib/user-menu/user-menu.types.d.ts +7 -0
- package/dist/lib/user-menu/user-menu.types.d.ts.map +1 -1
- package/dist/lib/user-menu/user-menu.types.js.map +1 -1
- package/dist/lib/user-notifications/user-notifications.component.js.map +1 -1
- package/dist/lib/user-profile/user-profile.component.js.map +1 -1
- package/dist/module.js.map +1 -1
- package/dist/public-api.js.map +1 -1
- package/package.json +34 -34
|
@@ -123,7 +123,7 @@ export class AppSwitcherComponent {
|
|
|
123
123
|
// Use setTimeout to ensure ViewChild is available
|
|
124
124
|
setTimeout(() => {
|
|
125
125
|
if (this.appConfigDialog) {
|
|
126
|
-
this.appConfigDialog.
|
|
126
|
+
this.appConfigDialog.Open();
|
|
127
127
|
}
|
|
128
128
|
}, 0);
|
|
129
129
|
}
|
|
@@ -143,7 +143,7 @@ export class AppSwitcherComponent {
|
|
|
143
143
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.appConfigDialog = _t.first);
|
|
144
144
|
} }, hostBindings: function AppSwitcherComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
145
145
|
i0.ɵɵlistener("click", function AppSwitcherComponent_click_HostBindingHandler($event) { return ctx.onClickOutside($event); }, i0.ɵɵresolveDocument);
|
|
146
|
-
} }, inputs: { activeApp: "activeApp", isViewingSystemTab: "isViewingSystemTab", loadingAppId: "loadingAppId" }, outputs: { appSelected: "appSelected" }, standalone: false, decls: 8, vars: 6, consts: [["appConfigDialog", ""], [1, "app-switcher-container"], [1, "app-switcher-button", 3, "click"], [1, "app-icon", "loading-spinner", "fa-solid", "fa-spinner", "fa-spin"], [1, "app-icon", 3, "class", "color", "--active-color"], [1, "dropdown-arrow", "fa-solid", "fa-chevron-down"], [1, "app-switcher-dropdown"], [3, "
|
|
146
|
+
} }, inputs: { activeApp: "activeApp", isViewingSystemTab: "isViewingSystemTab", loadingAppId: "loadingAppId" }, outputs: { appSelected: "appSelected" }, standalone: false, decls: 8, vars: 6, consts: [["appConfigDialog", ""], [1, "app-switcher-container"], [1, "app-switcher-button", 3, "click"], [1, "app-icon", "loading-spinner", "fa-solid", "fa-spinner", "fa-spin"], [1, "app-icon", 3, "class", "color", "--active-color"], [1, "dropdown-arrow", "fa-solid", "fa-chevron-down"], [1, "app-switcher-dropdown"], [3, "ShowDialogChange", "ConfigSaved", "ShowDialog"], [1, "app-icon"], [1, "app-switcher-item", 3, "active", "loading", "--item-color"], [1, "app-switcher-divider"], [1, "app-switcher-item", "configure-item", 3, "click"], [1, "fa-solid", "fa-gear"], [1, "app-switcher-item", 3, "click"], [1, "fa-solid", "fa-spinner", "fa-spin"], [3, "class"]], template: function AppSwitcherComponent_Template(rf, ctx) { if (rf & 1) {
|
|
147
147
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
148
148
|
i0.ɵɵelementStart(0, "div", 1)(1, "div", 2);
|
|
149
149
|
i0.ɵɵlistener("click", function AppSwitcherComponent_Template_div_click_1_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.toggleDropdown()); });
|
|
@@ -154,8 +154,8 @@ export class AppSwitcherComponent {
|
|
|
154
154
|
i0.ɵɵconditionalCreate(5, AppSwitcherComponent_Conditional_5_Template, 8, 0, "div", 6);
|
|
155
155
|
i0.ɵɵelementEnd();
|
|
156
156
|
i0.ɵɵelementStart(6, "mj-user-app-config", 7, 0);
|
|
157
|
-
i0.ɵɵtwoWayListener("
|
|
158
|
-
i0.ɵɵlistener("
|
|
157
|
+
i0.ɵɵtwoWayListener("ShowDialogChange", function AppSwitcherComponent_Template_mj_user_app_config_ShowDialogChange_6_listener($event) { i0.ɵɵrestoreView(_r1); i0.ɵɵtwoWayBindingSet(ctx.showConfigDialog, $event) || (ctx.showConfigDialog = $event); return i0.ɵɵresetView($event); });
|
|
158
|
+
i0.ɵɵlistener("ConfigSaved", function AppSwitcherComponent_Template_mj_user_app_config_ConfigSaved_6_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onConfigSaved()); });
|
|
159
159
|
i0.ɵɵelementEnd();
|
|
160
160
|
} if (rf & 2) {
|
|
161
161
|
i0.ɵɵclassProp("loading", ctx.isLoading);
|
|
@@ -166,12 +166,12 @@ export class AppSwitcherComponent {
|
|
|
166
166
|
i0.ɵɵadvance(2);
|
|
167
167
|
i0.ɵɵconditional(ctx.showDropdown ? 5 : -1);
|
|
168
168
|
i0.ɵɵadvance();
|
|
169
|
-
i0.ɵɵtwoWayProperty("
|
|
170
|
-
} }, dependencies: [i2.UserAppConfigComponent], styles: [".app-switcher-container[_ngcontent-%COMP%] {\n position: relative;\n margin-left: -2px; \n\n}\n\n.app-switcher-button[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 10px;\n border-radius: 8px;\n cursor: pointer;\n transition: background 0.15s;\n user-select: none;\n position: relative;\n}\n.app-switcher-button[_ngcontent-%COMP%] .app-icon[_ngcontent-%COMP%] {\n font-size: 20px;\n width: 24px;\n text-align: center;\n position: relative;\n}\n\n\n.app-switcher-button[_ngcontent-%COMP%] .app-icon[_ngcontent-%COMP%]::after {\n content: \"\";\n position: absolute;\n bottom: -6px;\n left: 2px;\n right: 2px;\n height: 3px;\n border-radius: 2px;\n background-color: var(--active-color, #757575);\n}\n.app-switcher-button[_ngcontent-%COMP%]:hover {\n background:
|
|
169
|
+
i0.ɵɵtwoWayProperty("ShowDialog", ctx.showConfigDialog);
|
|
170
|
+
} }, dependencies: [i2.UserAppConfigComponent], styles: [".app-switcher-container[_ngcontent-%COMP%] {\n position: relative;\n margin-left: -2px; \n\n}\n\n.app-switcher-button[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 10px;\n border-radius: 8px;\n cursor: pointer;\n transition: background 0.15s;\n user-select: none;\n position: relative;\n}\n.app-switcher-button[_ngcontent-%COMP%] .app-icon[_ngcontent-%COMP%] {\n font-size: 20px;\n width: 24px;\n text-align: center;\n position: relative;\n}\n\n\n.app-switcher-button[_ngcontent-%COMP%] .app-icon[_ngcontent-%COMP%]::after {\n content: \"\";\n position: absolute;\n bottom: -6px;\n left: 2px;\n right: 2px;\n height: 3px;\n border-radius: 2px;\n background-color: var(--active-color, #757575);\n}\n.app-switcher-button[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n.app-switcher-button[_ngcontent-%COMP%] .dropdown-arrow[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-disabled);\n}\n\n.app-switcher-dropdown[_ngcontent-%COMP%] {\n position: absolute;\n top: calc(100% + 8px);\n left: 0;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: var(--mj-shadow-lg);\n min-width: 220px;\n width: max-content;\n overflow: hidden;\n z-index: 10000;\n}\n.app-switcher-dropdown[_ngcontent-%COMP%] .app-switcher-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px;\n cursor: pointer;\n transition: all 0.15s;\n font-weight: 500;\n color: var(--mj-text-secondary);\n position: relative;\n white-space: nowrap;\n}\n.app-switcher-dropdown[_ngcontent-%COMP%] .app-switcher-item[_ngcontent-%COMP%]::before {\n content: \"\";\n position: absolute;\n left: 4px;\n top: 8px;\n bottom: 8px;\n width: 3px;\n border-radius: 2px;\n background-color: var(--item-color, #757575);\n opacity: 0.8;\n transition: all 0.15s;\n}\n.app-switcher-dropdown[_ngcontent-%COMP%] .app-switcher-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n color: var(--item-color, #757575);\n width: 20px;\n text-align: center;\n opacity: 1;\n transition: all 0.15s;\n}\n.app-switcher-dropdown[_ngcontent-%COMP%] .app-switcher-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n.app-switcher-dropdown[_ngcontent-%COMP%] .app-switcher-item[_ngcontent-%COMP%]:hover::before {\n opacity: 1;\n}\n.app-switcher-dropdown[_ngcontent-%COMP%] .app-switcher-item.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--item-color, #1976d2) 10%, var(--mj-bg-surface-elevated));\n color: var(--item-color, #1976d2);\n font-weight: 600;\n}\n.app-switcher-dropdown[_ngcontent-%COMP%] .app-switcher-item.active[_ngcontent-%COMP%]::before {\n width: 4px;\n left: 3px;\n opacity: 1;\n}\n\n\n.app-switcher-dropdown[_ngcontent-%COMP%] .app-switcher-item.configure-item[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n.app-switcher-dropdown[_ngcontent-%COMP%] .app-switcher-item.configure-item[_ngcontent-%COMP%]::before {\n display: none;\n}\n.app-switcher-dropdown[_ngcontent-%COMP%] .app-switcher-item.configure-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n.app-switcher-dropdown[_ngcontent-%COMP%] .app-switcher-item.configure-item[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n}\n.app-switcher-dropdown[_ngcontent-%COMP%] .app-switcher-item.configure-item[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n}\n.app-switcher-dropdown[_ngcontent-%COMP%] .app-switcher-divider[_ngcontent-%COMP%] {\n height: 1px;\n background: var(--mj-border-default);\n margin: 4px 12px;\n}\n\n\n\n.app-switcher-button[_ngcontent-%COMP%] .loading-spinner[_ngcontent-%COMP%] {\n color: #757575;\n}\n.app-switcher-button[_ngcontent-%COMP%] .loading-spinner[_ngcontent-%COMP%]::after {\n \n\n display: none;\n}\n\n\n\n.app-switcher-dropdown[_ngcontent-%COMP%] .app-switcher-item.loading[_ngcontent-%COMP%] {\n pointer-events: none;\n opacity: 0.7;\n}\n.app-switcher-dropdown[_ngcontent-%COMP%] .app-switcher-item.loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--item-color, #757575);\n}\n\n\n\n@media (max-width: 600px) {\n .app-switcher-dropdown[_ngcontent-%COMP%] {\n position: fixed;\n top: 60px;\n left: 0;\n right: 0;\n width: 100%;\n min-width: unset;\n height: calc(100vh - 60px);\n overflow-y: auto;\n border-radius: 0;\n border-top: none;\n padding: 0.25rem 0;\n }\n\n .app-switcher-dropdown[_ngcontent-%COMP%] .app-switcher-item[_ngcontent-%COMP%] {\n padding: 14px 20px;\n gap: 14px;\n min-height: 48px;\n font-size: 0.9375rem;\n }\n\n .app-switcher-dropdown[_ngcontent-%COMP%] .app-switcher-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n width: 24px;\n }\n}"] });
|
|
171
171
|
}
|
|
172
172
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AppSwitcherComponent, [{
|
|
173
173
|
type: Component,
|
|
174
|
-
args: [{ standalone: false, selector: 'mj-app-switcher', template: "<div class=\"app-switcher-container\" [class.loading]=\"isLoading\">\n <div class=\"app-switcher-button\"\n (click)=\"toggleDropdown()\">\n <!-- Show spinner when loading, otherwise show app icon -->\n @if (isLoading) {\n <i class=\"app-icon loading-spinner fa-solid fa-spinner fa-spin\"></i>\n }\n @if (!isLoading) {\n <i class=\"app-icon\" [class]=\"activeApp?.Icon || 'fa-solid fa-cube'\"\n [style.color]=\"activeApp?.GetColor()\"\n [style.--active-color]=\"activeApp?.GetColor()\"></i>\n }\n <i class=\"dropdown-arrow fa-solid fa-chevron-down\"></i>\n </div>\n\n @if (showDropdown) {\n <div class=\"app-switcher-dropdown\">\n @for (app of apps; track app) {\n <div\n class=\"app-switcher-item\"\n [class.active]=\"app.ID === activeApp?.ID\"\n [class.loading]=\"app.ID === loadingAppId\"\n [style.--item-color]=\"app.GetColor()\"\n (click)=\"selectApp(app)\">\n @if (app.ID === loadingAppId) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n @if (app.ID !== loadingAppId) {\n <i [class]=\"app.Icon || 'fa-solid fa-cube'\"></i>\n }\n <span>{{ app.Name }}</span>\n </div>\n }\n <!-- Divider -->\n <div class=\"app-switcher-divider\"></div>\n <!-- Configure option -->\n <div class=\"app-switcher-item configure-item\" (click)=\"openConfigDialog()\">\n <i class=\"fa-solid fa-gear\"></i>\n <span>Configure...</span>\n </div>\n </div>\n }\n</div>\n\n<!-- App Configuration Dialog -->\n<mj-user-app-config\n #appConfigDialog\n [(
|
|
174
|
+
args: [{ standalone: false, selector: 'mj-app-switcher', template: "<div class=\"app-switcher-container\" [class.loading]=\"isLoading\">\n <div class=\"app-switcher-button\"\n (click)=\"toggleDropdown()\">\n <!-- Show spinner when loading, otherwise show app icon -->\n @if (isLoading) {\n <i class=\"app-icon loading-spinner fa-solid fa-spinner fa-spin\"></i>\n }\n @if (!isLoading) {\n <i class=\"app-icon\" [class]=\"activeApp?.Icon || 'fa-solid fa-cube'\"\n [style.color]=\"activeApp?.GetColor()\"\n [style.--active-color]=\"activeApp?.GetColor()\"></i>\n }\n <i class=\"dropdown-arrow fa-solid fa-chevron-down\"></i>\n </div>\n\n @if (showDropdown) {\n <div class=\"app-switcher-dropdown\">\n @for (app of apps; track app) {\n <div\n class=\"app-switcher-item\"\n [class.active]=\"app.ID === activeApp?.ID\"\n [class.loading]=\"app.ID === loadingAppId\"\n [style.--item-color]=\"app.GetColor()\"\n (click)=\"selectApp(app)\">\n @if (app.ID === loadingAppId) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n @if (app.ID !== loadingAppId) {\n <i [class]=\"app.Icon || 'fa-solid fa-cube'\"></i>\n }\n <span>{{ app.Name }}</span>\n </div>\n }\n <!-- Divider -->\n <div class=\"app-switcher-divider\"></div>\n <!-- Configure option -->\n <div class=\"app-switcher-item configure-item\" (click)=\"openConfigDialog()\">\n <i class=\"fa-solid fa-gear\"></i>\n <span>Configure...</span>\n </div>\n </div>\n }\n</div>\n\n<!-- App Configuration Dialog -->\n<mj-user-app-config\n #appConfigDialog\n [(ShowDialog)]=\"showConfigDialog\"\n (ConfigSaved)=\"onConfigSaved()\">\n</mj-user-app-config>\n", styles: [".app-switcher-container {\n position: relative;\n margin-left: -2px; /* Fine-tune alignment when no nav-bar icons to the left */\n}\n\n.app-switcher-button {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 10px;\n border-radius: 8px;\n cursor: pointer;\n transition: background 0.15s;\n user-select: none;\n position: relative;\n}\n.app-switcher-button .app-icon {\n font-size: 20px;\n width: 24px;\n text-align: center;\n position: relative;\n}\n/* Color underline under the icon only, not the caret */\n.app-switcher-button .app-icon::after {\n content: \"\";\n position: absolute;\n bottom: -6px;\n left: 2px;\n right: 2px;\n height: 3px;\n border-radius: 2px;\n background-color: var(--active-color, #757575);\n}\n.app-switcher-button:hover {\n background: var(--mj-bg-surface-hover);\n}\n.app-switcher-button .dropdown-arrow {\n font-size: 10px;\n color: var(--mj-text-disabled);\n}\n\n.app-switcher-dropdown {\n position: absolute;\n top: calc(100% + 8px);\n left: 0;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: var(--mj-shadow-lg);\n min-width: 220px;\n width: max-content;\n overflow: hidden;\n z-index: 10000;\n}\n.app-switcher-dropdown .app-switcher-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px;\n cursor: pointer;\n transition: all 0.15s;\n font-weight: 500;\n color: var(--mj-text-secondary);\n position: relative;\n white-space: nowrap;\n}\n.app-switcher-dropdown .app-switcher-item::before {\n content: \"\";\n position: absolute;\n left: 4px;\n top: 8px;\n bottom: 8px;\n width: 3px;\n border-radius: 2px;\n background-color: var(--item-color, #757575);\n opacity: 0.8;\n transition: all 0.15s;\n}\n.app-switcher-dropdown .app-switcher-item i {\n font-size: 18px;\n color: var(--item-color, #757575);\n width: 20px;\n text-align: center;\n opacity: 1;\n transition: all 0.15s;\n}\n.app-switcher-dropdown .app-switcher-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n.app-switcher-dropdown .app-switcher-item:hover::before {\n opacity: 1;\n}\n.app-switcher-dropdown .app-switcher-item.active {\n background: color-mix(in srgb, var(--item-color, #1976d2) 10%, var(--mj-bg-surface-elevated));\n color: var(--item-color, #1976d2);\n font-weight: 600;\n}\n.app-switcher-dropdown .app-switcher-item.active::before {\n width: 4px;\n left: 3px;\n opacity: 1;\n}\n/* Configure option - no color line, neutral gray styling */\n.app-switcher-dropdown .app-switcher-item.configure-item {\n color: var(--mj-text-secondary);\n}\n.app-switcher-dropdown .app-switcher-item.configure-item::before {\n display: none;\n}\n.app-switcher-dropdown .app-switcher-item.configure-item i {\n color: var(--mj-text-muted);\n}\n.app-switcher-dropdown .app-switcher-item.configure-item:hover {\n color: var(--mj-text-primary);\n}\n.app-switcher-dropdown .app-switcher-item.configure-item:hover i {\n color: var(--mj-text-primary);\n}\n.app-switcher-dropdown .app-switcher-divider {\n height: 1px;\n background: var(--mj-border-default);\n margin: 4px 12px;\n}\n\n/* Loading state for app switcher button */\n.app-switcher-button .loading-spinner {\n color: #757575;\n}\n.app-switcher-button .loading-spinner::after {\n /* Hide the underline when showing spinner */\n display: none;\n}\n\n/* Loading state for dropdown items */\n.app-switcher-dropdown .app-switcher-item.loading {\n pointer-events: none;\n opacity: 0.7;\n}\n.app-switcher-dropdown .app-switcher-item.loading i {\n color: var(--item-color, #757575);\n}\n\n/* Mobile: full-width dropdown with scroll */\n@media (max-width: 600px) {\n .app-switcher-dropdown {\n position: fixed;\n top: 60px;\n left: 0;\n right: 0;\n width: 100%;\n min-width: unset;\n height: calc(100vh - 60px);\n overflow-y: auto;\n border-radius: 0;\n border-top: none;\n padding: 0.25rem 0;\n }\n\n .app-switcher-dropdown .app-switcher-item {\n padding: 14px 20px;\n gap: 14px;\n min-height: 48px;\n font-size: 0.9375rem;\n }\n\n .app-switcher-dropdown .app-switcher-item i {\n font-size: 20px;\n width: 24px;\n }\n}\n"] }]
|
|
175
175
|
}], () => [{ type: i1.ApplicationManager }], { activeApp: [{
|
|
176
176
|
type: Input
|
|
177
177
|
}], isViewingSystemTab: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-switcher.component.js","sourceRoot":"","sources":["../../../../../src/lib/shell/components/header/app-switcher.component.ts","../../../../../src/lib/shell/components/header/app-switcher.component.html"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app-switcher.component.js","sourceRoot":"","sources":["../../../../../src/lib/shell/components/header/app-switcher.component.ts","../../../../../src/lib/shell/components/header/app-switcher.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, HostListener, ViewChild } from '@angular/core';\nimport { ApplicationManager, BaseApplication } from '@memberjunction/ng-base-application';\nimport { UserAppConfigComponent } from '@memberjunction/ng-explorer-settings';\n\n/**\n * App switcher dropdown in the header.\n * Displays current app and allows switching between apps.\n */\n@Component({\n standalone: false,\n selector: 'mj-app-switcher',\n templateUrl: './app-switcher.component.html',\n styleUrls: ['./app-switcher.component.css']\n})\nexport class AppSwitcherComponent {\n @Input() activeApp: BaseApplication | null = null;\n @Input() isViewingSystemTab = false;\n /** ID of the app currently being loaded (shows loading indicator) */\n @Input() loadingAppId: string | null = null;\n @Output() appSelected = new EventEmitter<string>();\n\n @ViewChild('appConfigDialog') appConfigDialog!: UserAppConfigComponent;\n\n showDropdown = false;\n showConfigDialog = false;\n\n constructor(private appManager: ApplicationManager) {}\n\n /**\n * Check if the app switcher should show loading state\n */\n get isLoading(): boolean {\n return this.loadingAppId !== null;\n }\n\n /**\n * Get applications that should appear in the app switcher dropdown\n * (NavigationStyle = 'App Switcher' or 'Both')\n */\n get apps(): BaseApplication[] {\n return this.appManager.GetAppSwitcherApps();\n }\n\n /**\n * Toggle dropdown visibility\n */\n toggleDropdown(): void {\n this.showDropdown = !this.showDropdown;\n }\n\n /**\n * Select an application\n * When viewing a system tab, always emit to allow returning to the app\n */\n selectApp(app: BaseApplication): void {\n this.showDropdown = false;\n if (app.ID !== this.activeApp?.ID || this.isViewingSystemTab) {\n this.appSelected.emit(app.ID);\n }\n }\n\n /**\n * Close dropdown when clicking outside\n */\n @HostListener('document:click', ['$event'])\n onClickOutside(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n if (!target.closest('.app-switcher-container') && this.showDropdown) {\n this.showDropdown = false;\n }\n }\n\n /**\n * Open the app configuration dialog\n */\n openConfigDialog(): void {\n this.showDropdown = false;\n this.showConfigDialog = true;\n // Use setTimeout to ensure ViewChild is available\n setTimeout(() => {\n if (this.appConfigDialog) {\n this.appConfigDialog.Open();\n }\n }, 0);\n }\n\n /**\n * Handle when config is saved - reload the app list\n */\n onConfigSaved(): void {\n // The ApplicationManager will be refreshed by the dialog\n // Force a re-render by triggering change detection\n this.showConfigDialog = false;\n }\n}\n","<div class=\"app-switcher-container\" [class.loading]=\"isLoading\">\n <div class=\"app-switcher-button\"\n (click)=\"toggleDropdown()\">\n <!-- Show spinner when loading, otherwise show app icon -->\n @if (isLoading) {\n <i class=\"app-icon loading-spinner fa-solid fa-spinner fa-spin\"></i>\n }\n @if (!isLoading) {\n <i class=\"app-icon\" [class]=\"activeApp?.Icon || 'fa-solid fa-cube'\"\n [style.color]=\"activeApp?.GetColor()\"\n [style.--active-color]=\"activeApp?.GetColor()\"></i>\n }\n <i class=\"dropdown-arrow fa-solid fa-chevron-down\"></i>\n </div>\n\n @if (showDropdown) {\n <div class=\"app-switcher-dropdown\">\n @for (app of apps; track app) {\n <div\n class=\"app-switcher-item\"\n [class.active]=\"app.ID === activeApp?.ID\"\n [class.loading]=\"app.ID === loadingAppId\"\n [style.--item-color]=\"app.GetColor()\"\n (click)=\"selectApp(app)\">\n @if (app.ID === loadingAppId) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n @if (app.ID !== loadingAppId) {\n <i [class]=\"app.Icon || 'fa-solid fa-cube'\"></i>\n }\n <span>{{ app.Name }}</span>\n </div>\n }\n <!-- Divider -->\n <div class=\"app-switcher-divider\"></div>\n <!-- Configure option -->\n <div class=\"app-switcher-item configure-item\" (click)=\"openConfigDialog()\">\n <i class=\"fa-solid fa-gear\"></i>\n <span>Configure...</span>\n </div>\n </div>\n }\n</div>\n\n<!-- App Configuration Dialog -->\n<mj-user-app-config\n #appConfigDialog\n [(ShowDialog)]=\"showConfigDialog\"\n (ConfigSaved)=\"onConfigSaved()\">\n</mj-user-app-config>\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-cache-manager.js","sourceRoot":"","sources":["../../../../../src/lib/shell/components/tabs/component-cache-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"component-cache-manager.js","sourceRoot":"","sources":["../../../../../src/lib/shell/components/tabs/component-cache-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import { ComponentRef, ApplicationRef } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { ResourceData } from '@memberjunction/core-entities';\n\n/**\n * Metadata about a cached component\n */\nexport interface CachedComponentInfo {\n // The Angular component reference\n componentRef: ComponentRef<BaseResourceComponent>;\n\n // The wrapper DOM element (for detaching/reattaching)\n wrapperElement: HTMLElement;\n\n // Resource identity (for matching)\n resourceType: string;\n resourceRecordId: string;\n applicationId: string;\n\n // Usage tracking\n isAttached: boolean; // Currently attached to a tab?\n attachedToTabId: string | null; // Which tab is it attached to?\n\n // Lifecycle tracking\n lastUsed: Date;\n createdAt: Date;\n\n // Resource data snapshot (for comparison)\n resourceData: ResourceData;\n}\n\n/**\n * Smart component cache manager that preserves component state across tab switches.\n *\n * Features:\n * - Caches components by resource identity (not just tab ID)\n * - Tracks component usage to prevent double-attachment\n * - Detaches/reattaches DOM elements without destroying Angular components\n * - Provides manual cache clearing (no automatic periodic cleanup)\n */\nexport class ComponentCacheManager {\n private cache = new Map<string, CachedComponentInfo>();\n\n constructor(private appRef: ApplicationRef) {}\n\n /**\n * Generate a unique cache key from resource identity\n */\n private getCacheKey(resourceType: string, recordId: string, appId: string): string {\n // Normalize empty/null recordId to ensure consistent matching\n const normalizedRecordId = recordId || '__no_record__';\n return `${appId}::${resourceType}::${normalizedRecordId}`;\n }\n\n /**\n * Check if a component exists in cache and is available for reuse\n */\n hasAvailableComponent(resourceType: string, recordId: string, appId: string): boolean {\n const key = this.getCacheKey(resourceType, recordId, appId);\n const info = this.cache.get(key);\n return info !== undefined && !info.isAttached;\n }\n\n /**\n * Get a cached component if available (not currently attached)\n */\n getCachedComponent(resourceType: string, recordId: string, appId: string): CachedComponentInfo | null {\n const key = this.getCacheKey(resourceType, recordId, appId);\n const info = this.cache.get(key);\n\n if (!info) {\n return null;\n }\n\n // Can only reuse if not currently attached elsewhere\n if (info.isAttached) {\n return null;\n }\n\n return info;\n }\n\n /**\n * Store a component in the cache\n */\n cacheComponent(\n componentRef: ComponentRef<BaseResourceComponent>,\n wrapperElement: HTMLElement,\n resourceData: ResourceData,\n tabId: string\n ): void {\n const key = this.getCacheKey(\n resourceData.ResourceType,\n resourceData.ResourceRecordID || '',\n resourceData.Configuration?.applicationId || ''\n );\n\n const info: CachedComponentInfo = {\n componentRef,\n wrapperElement,\n resourceType: resourceData.ResourceType,\n resourceRecordId: resourceData.ResourceRecordID || '',\n applicationId: resourceData.Configuration?.applicationId || '',\n isAttached: true,\n attachedToTabId: tabId,\n lastUsed: new Date(),\n createdAt: new Date(),\n resourceData\n };\n\n this.cache.set(key, info);\n }\n\n /**\n * Mark a component as attached to a tab\n */\n markAsAttached(resourceType: string, recordId: string, appId: string, tabId: string): void {\n const key = this.getCacheKey(resourceType, recordId, appId);\n const info = this.cache.get(key);\n\n if (info) {\n info.isAttached = true;\n info.attachedToTabId = tabId;\n info.lastUsed = new Date();\n }\n }\n\n /**\n * Mark a component as detached (available for reuse)\n */\n markAsDetached(tabId: string): CachedComponentInfo | null {\n // Find component by tab ID\n const entry = Array.from(this.cache.entries())\n .find(([_, info]) => info.attachedToTabId === tabId);\n\n if (!entry) {\n return null;\n }\n\n const [key, info] = entry;\n info.isAttached = false;\n info.attachedToTabId = null;\n info.lastUsed = new Date();\n\n return info;\n }\n\n /**\n * Get component info by tab ID (for finding what's attached to a tab)\n */\n getComponentByTabId(tabId: string): CachedComponentInfo | null {\n const entry = Array.from(this.cache.entries())\n .find(([_, info]) => info.attachedToTabId === tabId);\n\n return entry ? entry[1] : null;\n }\n\n /**\n * Remove and destroy a specific component from cache\n */\n destroyComponent(resourceType: string, recordId: string, appId: string): void {\n const key = this.getCacheKey(resourceType, recordId, appId);\n const info = this.cache.get(key);\n\n if (!info) {\n return;\n }\n\n // Destroy Angular component\n this.appRef.detachView(info.componentRef.hostView);\n info.componentRef.destroy();\n\n // Remove from cache\n this.cache.delete(key);\n\n }\n\n /**\n * Remove and destroy component by tab ID\n */\n destroyComponentByTabId(tabId: string): void {\n const entry = Array.from(this.cache.entries())\n .find(([_, info]) => info.attachedToTabId === tabId);\n\n if (!entry) {\n return;\n }\n\n const [key, info] = entry;\n\n // Destroy Angular component\n this.appRef.detachView(info.componentRef.hostView);\n info.componentRef.destroy();\n\n // Remove from cache\n this.cache.delete(key);\n\n }\n\n /**\n * Clear the entire cache, destroying all components\n * Call this manually when needed (e.g., user logout, app shutdown)\n */\n clearCache(): void {\n\n // Destroy all components\n this.cache.forEach(info => {\n this.appRef.detachView(info.componentRef.hostView);\n info.componentRef.destroy();\n });\n\n // Clear the map\n this.cache.clear();\n }\n\n /**\n * Get cache statistics for debugging\n */\n getCacheStats(): {\n total: number;\n attached: number;\n detached: number;\n byResourceType: Map<string, number>;\n } {\n const stats = {\n total: this.cache.size,\n attached: 0,\n detached: 0,\n byResourceType: new Map<string, number>()\n };\n\n this.cache.forEach(info => {\n if (info.isAttached) {\n stats.attached++;\n } else {\n stats.detached++;\n }\n\n const count = stats.byResourceType.get(info.resourceType) || 0;\n stats.byResourceType.set(info.resourceType, count + 1);\n });\n\n return stats;\n }\n}\n"]}
|
|
@@ -971,11 +971,11 @@ export class TabContainerComponent {
|
|
|
971
971
|
i0.ɵɵconditional(ctx.useSingleResourceMode ? 1 : 2);
|
|
972
972
|
i0.ɵɵadvance(2);
|
|
973
973
|
i0.ɵɵconditional(ctx.contextMenuVisible ? 3 : -1);
|
|
974
|
-
} }, styles: [":host {\n display: flex;\n flex: 1;\n height: 100%;\n width: 100%;\n overflow: hidden;\n}\n\n.tab-container {\n display: flex;\n flex-direction: column;\n flex: 1;\n width: 100%;\n overflow: hidden;\n}\n\n.gl-container {\n flex: 1;\n width: 100%;\n height: 100%;\n position: relative;\n background:
|
|
974
|
+
} }, styles: [":host {\n display: flex;\n flex: 1;\n height: 100%;\n width: 100%;\n overflow: hidden;\n}\n\n.tab-container {\n display: flex;\n flex-direction: column;\n flex: 1;\n width: 100%;\n overflow: hidden;\n}\n\n.gl-container {\n flex: 1;\n width: 100%;\n height: 100%;\n position: relative;\n background: var(--mj-bg-surface);\n}\n\n/* Direct content container for single-resource mode */\n/* Renders components directly without Golden Layout overhead */\n.direct-content-container {\n flex: 1;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n overflow: hidden;\n}\n\n.tab-content-container {\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n padding: 20px;\n}\n\n/* Context Menu */\n.context-menu {\n position: fixed;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n min-width: 150px;\n z-index: 10001;\n overflow: hidden;\n}\n\n.context-menu .context-menu-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n transition: background 0.15s;\n}\n\n.context-menu .context-menu-item i {\n width: 16px;\n text-align: center;\n color: var(--mj-text-secondary);\n}\n\n.context-menu .context-menu-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.context-menu .context-menu-divider {\n height: 1px;\n background: var(--mj-border-default);\n margin: 4px 0;\n}\n\n/* Override Golden Layout styles */\n/* Global overrides */\n\n/* Ensure GL root container fills available space */\nmj-tab-container .lm_goldenlayout {\n width: 100% !important;\n height: 100% !important;\n}\n\n/* Ensure the root layout item fills space */\nmj-tab-container .lm_root {\n width: 100% !important;\n height: 100% !important;\n}\n\n/* Ensure proper box-sizing for all GL layout elements */\nmj-tab-container .lm_item,\nmj-tab-container .lm_content,\nmj-tab-container .lm_stack,\nmj-tab-container .lm_row,\nmj-tab-container .lm_column {\n box-sizing: border-box !important;\n}\n\n/* Ensure layout items don't overflow */\nmj-tab-container .lm_item {\n overflow: hidden !important;\n}\n\n/* Fix for .lm_items - the content container inside stacks */\n/* This is separate from .lm_item - it holds the actual tab content */\nmj-tab-container .lm_items {\n width: 100% !important;\n height: calc(100% - 38px) !important; /* Account for header height (38px) */\n box-sizing: border-box !important;\n position: relative !important;\n}\n\n/* When tabs are maximized, no header visible */\nmj-tab-container .lm_stack.lm_maximised > .lm_items {\n height: 100% !important;\n}\n\n/* Target the anonymous ComponentItem div inside lm_items (has no class) */\n/* Created in golden-layout/src/ts/items/component-item.ts:51 without a class */\n/* NOTE: Do NOT set display here - GL uses display:none to hide inactive tabs */\nmj-tab-container .lm_items > div {\n width: 100% !important;\n height: 100% !important;\n box-sizing: border-box !important;\n flex-direction: column !important;\n}\n\n/* Only apply flex display to the active/visible tab content div */\nmj-tab-container .lm_items > div:not([style*=\"display: none\"]) {\n display: flex !important;\n}\n\n/* Clearfix for float-based row layout - GL uses float:left for horizontal panes */\nmj-tab-container .lm_row::after {\n content: \"\" !important;\n display: table !important;\n clear: both !important;\n}\n\n/* Force content children to respect parent bounds (GL sets pixel widths inline) */\nmj-tab-container .lm_content > * {\n max-width: 100% !important;\n width: 100% !important;\n}\n\nmj-tab-container .lm_content {\n background: var(--mj-bg-surface) !important;\n display: flex !important;\n flex-direction: column !important;\n height: 100% !important;\n width: 100% !important;\n}\n\nmj-tab-container .lm_item_container {\n background: var(--mj-bg-surface) !important;\n}\n\n/* Tab content wrapper - allow scrolling */\n.tab-content-wrapper {\n overflow: auto !important;\n}\n\n/* Make tabs larger and easier to click */\nmj-tab-container .lm_header {\n height: 38px !important;\n padding-top: 2px !important;\n padding-left: 4px !important;\n background: var(--mj-bg-surface-sunken) !important;\n border-bottom: 1px solid var(--mj-border-default) !important;\n overflow: visible !important;\n box-sizing: border-box !important;\n}\n\nmj-tab-container .lm_tabs {\n height: 36px !important;\n}\n\n/* Hide Golden Layout window controls */\nmj-tab-container .lm_controls {\n display: none !important;\n}\n\nmj-tab-container .lm_header .lm_tab {\n padding: 0 16px !important;\n font-size: 13px !important;\n height: 35px !important;\n line-height: 35px !important;\n box-sizing: border-box !important;\n cursor: pointer !important;\n user-select: none !important;\n background: transparent !important;\n border: none !important;\n border-bottom: 1px solid var(--mj-border-default) !important;\n transition: all 0.15s ease !important;\n position: relative !important;\n z-index: 1 !important;\n margin-right: 1px !important;\n}\n\n/* App color accent - left edge indicator */\nmj-tab-container .lm_header .lm_tab::before {\n content: '' !important;\n position: absolute !important;\n left: 0 !important;\n top: 4px !important;\n bottom: 4px !important;\n width: 3px !important;\n border-radius: 0 2px 2px 0 !important;\n background-color: var(--app-color, transparent) !important;\n opacity: 0.6 !important;\n transition: all 0.15s ease !important;\n}\n\nmj-tab-container .lm_header .lm_tab:hover {\n background: var(--mj-bg-surface-hover) !important;\n}\n\nmj-tab-container .lm_header .lm_tab:hover .lm_close_tab {\n opacity: 0.7 !important;\n}\n\nmj-tab-container .lm_header .lm_tab:hover::before {\n opacity: 0.8 !important;\n}\n\nmj-tab-container .lm_header .lm_tab.lm_active {\n background: var(--mj-bg-surface) !important;\n height: 36px !important;\n margin-bottom: -1px !important;\n margin-right: 0 !important;\n border: 1px solid var(--mj-border-default) !important;\n border-bottom-color: var(--mj-bg-surface) !important;\n border-radius: 4px 4px 0 0 !important;\n z-index: 2 !important;\n}\n\n/* Enhanced app color accent for active tab */\nmj-tab-container .lm_header .lm_tab.lm_active::before {\n opacity: 1 !important;\n width: 3px !important;\n top: 2px !important;\n bottom: 2px !important;\n box-shadow: 0 0 6px var(--app-color, transparent) !important;\n}\n\nmj-tab-container .lm_title {\n cursor: pointer !important;\n user-select: none !important;\n}\n\nmj-tab-container .lm_close_tab {\n position: absolute !important;\n right: 4px !important;\n top: 50% !important;\n transform: translateY(-50%) !important;\n width: 16px !important;\n height: 16px !important;\n cursor: pointer !important;\n opacity: 0 !important;\n transition: all 0.15s ease !important;\n flex-shrink: 0 !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n font-size: 10px !important;\n color: var(--mj-text-secondary) !important;\n}\n\nmj-tab-container .lm_close_tab:hover {\n opacity: 1 !important;\n color: var(--mj-status-error) !important;\n}\n\n/* Show close button on hover (except pinned) */\nmj-tab-container .lm_header .lm_tab:hover:not(.pinned) .lm_close_tab {\n opacity: 0.7 !important;\n}\n\n/* Pinned tabs never show close button */\nmj-tab-container .lm_header .lm_tab.pinned .lm_close_tab {\n display: none !important;\n}\n\n/* Hide close button on active tab by default */\nmj-tab-container .lm_active .lm_close_tab {\n opacity: 0 !important;\n}\n\n/* Show close button when hovering active tab */\nmj-tab-container .lm_active:hover .lm_close_tab {\n opacity: 0.7 !important;\n}\n\n/* Adjust padding for close button */\nmj-tab-container .lm_header .lm_tab {\n padding-right: 24px !important;\n}\n"], encapsulation: 2 });
|
|
975
975
|
}
|
|
976
976
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TabContainerComponent, [{
|
|
977
977
|
type: Component,
|
|
978
|
-
args: [{ standalone: false, selector: 'mj-tab-container', encapsulation: ViewEncapsulation.None, template: "<div class=\"tab-container\">\n\n <!-- Single-Resource Mode: Direct component rendering without Golden Layout -->\n <!-- This avoids the 20px height issue when GL header is hidden -->\n @if (useSingleResourceMode) {\n <div #directContentContainer class=\"direct-content-container\"></div>\n } @else {\n <!-- Multi-Tab Mode: Golden Layout Container -->\n <div #glContainer class=\"gl-container\"></div>\n }\n\n <!-- Context Menu (only relevant in multi-tab mode) -->\n @if (contextMenuVisible) {\n <div\n class=\"context-menu\"\n [style.left.px]=\"contextMenuX\"\n [style.top.px]=\"contextMenuY\">\n <div class=\"context-menu-item\" (click)=\"onContextPin()\">\n <i class=\"fa-solid fa-thumbtack\"></i>\n <span>{{ isContextTabPinned ? 'Unpin Tab' : 'Pin Tab' }}</span>\n </div>\n <div class=\"context-menu-divider\"></div>\n <div class=\"context-menu-item\" (click)=\"onContextClose()\">\n <i class=\"fa-solid fa-xmark\"></i>\n <span>Close Tab</span>\n </div>\n <div class=\"context-menu-item\" (click)=\"onContextCloseOthers()\">\n <i class=\"fa-solid fa-layer-group\"></i>\n <span>Close Others</span>\n </div>\n <div class=\"context-menu-item\" (click)=\"onContextCloseToRight()\">\n <i class=\"fa-solid fa-angles-right\"></i>\n <span>Close to Right</span>\n </div>\n </div>\n }\n</div>\n", styles: [":host {\n display: flex;\n flex: 1;\n height: 100%;\n width: 100%;\n overflow: hidden;\n}\n\n.tab-container {\n display: flex;\n flex-direction: column;\n flex: 1;\n width: 100%;\n overflow: hidden;\n}\n\n.gl-container {\n flex: 1;\n width: 100%;\n height: 100%;\n position: relative;\n background:
|
|
978
|
+
args: [{ standalone: false, selector: 'mj-tab-container', encapsulation: ViewEncapsulation.None, template: "<div class=\"tab-container\">\n\n <!-- Single-Resource Mode: Direct component rendering without Golden Layout -->\n <!-- This avoids the 20px height issue when GL header is hidden -->\n @if (useSingleResourceMode) {\n <div #directContentContainer class=\"direct-content-container\"></div>\n } @else {\n <!-- Multi-Tab Mode: Golden Layout Container -->\n <div #glContainer class=\"gl-container\"></div>\n }\n\n <!-- Context Menu (only relevant in multi-tab mode) -->\n @if (contextMenuVisible) {\n <div\n class=\"context-menu\"\n [style.left.px]=\"contextMenuX\"\n [style.top.px]=\"contextMenuY\">\n <div class=\"context-menu-item\" (click)=\"onContextPin()\">\n <i class=\"fa-solid fa-thumbtack\"></i>\n <span>{{ isContextTabPinned ? 'Unpin Tab' : 'Pin Tab' }}</span>\n </div>\n <div class=\"context-menu-divider\"></div>\n <div class=\"context-menu-item\" (click)=\"onContextClose()\">\n <i class=\"fa-solid fa-xmark\"></i>\n <span>Close Tab</span>\n </div>\n <div class=\"context-menu-item\" (click)=\"onContextCloseOthers()\">\n <i class=\"fa-solid fa-layer-group\"></i>\n <span>Close Others</span>\n </div>\n <div class=\"context-menu-item\" (click)=\"onContextCloseToRight()\">\n <i class=\"fa-solid fa-angles-right\"></i>\n <span>Close to Right</span>\n </div>\n </div>\n }\n</div>\n", styles: [":host {\n display: flex;\n flex: 1;\n height: 100%;\n width: 100%;\n overflow: hidden;\n}\n\n.tab-container {\n display: flex;\n flex-direction: column;\n flex: 1;\n width: 100%;\n overflow: hidden;\n}\n\n.gl-container {\n flex: 1;\n width: 100%;\n height: 100%;\n position: relative;\n background: var(--mj-bg-surface);\n}\n\n/* Direct content container for single-resource mode */\n/* Renders components directly without Golden Layout overhead */\n.direct-content-container {\n flex: 1;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n overflow: hidden;\n}\n\n.tab-content-container {\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n padding: 20px;\n}\n\n/* Context Menu */\n.context-menu {\n position: fixed;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n min-width: 150px;\n z-index: 10001;\n overflow: hidden;\n}\n\n.context-menu .context-menu-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n transition: background 0.15s;\n}\n\n.context-menu .context-menu-item i {\n width: 16px;\n text-align: center;\n color: var(--mj-text-secondary);\n}\n\n.context-menu .context-menu-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.context-menu .context-menu-divider {\n height: 1px;\n background: var(--mj-border-default);\n margin: 4px 0;\n}\n\n/* Override Golden Layout styles */\n/* Global overrides */\n\n/* Ensure GL root container fills available space */\nmj-tab-container .lm_goldenlayout {\n width: 100% !important;\n height: 100% !important;\n}\n\n/* Ensure the root layout item fills space */\nmj-tab-container .lm_root {\n width: 100% !important;\n height: 100% !important;\n}\n\n/* Ensure proper box-sizing for all GL layout elements */\nmj-tab-container .lm_item,\nmj-tab-container .lm_content,\nmj-tab-container .lm_stack,\nmj-tab-container .lm_row,\nmj-tab-container .lm_column {\n box-sizing: border-box !important;\n}\n\n/* Ensure layout items don't overflow */\nmj-tab-container .lm_item {\n overflow: hidden !important;\n}\n\n/* Fix for .lm_items - the content container inside stacks */\n/* This is separate from .lm_item - it holds the actual tab content */\nmj-tab-container .lm_items {\n width: 100% !important;\n height: calc(100% - 38px) !important; /* Account for header height (38px) */\n box-sizing: border-box !important;\n position: relative !important;\n}\n\n/* When tabs are maximized, no header visible */\nmj-tab-container .lm_stack.lm_maximised > .lm_items {\n height: 100% !important;\n}\n\n/* Target the anonymous ComponentItem div inside lm_items (has no class) */\n/* Created in golden-layout/src/ts/items/component-item.ts:51 without a class */\n/* NOTE: Do NOT set display here - GL uses display:none to hide inactive tabs */\nmj-tab-container .lm_items > div {\n width: 100% !important;\n height: 100% !important;\n box-sizing: border-box !important;\n flex-direction: column !important;\n}\n\n/* Only apply flex display to the active/visible tab content div */\nmj-tab-container .lm_items > div:not([style*=\"display: none\"]) {\n display: flex !important;\n}\n\n/* Clearfix for float-based row layout - GL uses float:left for horizontal panes */\nmj-tab-container .lm_row::after {\n content: \"\" !important;\n display: table !important;\n clear: both !important;\n}\n\n/* Force content children to respect parent bounds (GL sets pixel widths inline) */\nmj-tab-container .lm_content > * {\n max-width: 100% !important;\n width: 100% !important;\n}\n\nmj-tab-container .lm_content {\n background: var(--mj-bg-surface) !important;\n display: flex !important;\n flex-direction: column !important;\n height: 100% !important;\n width: 100% !important;\n}\n\nmj-tab-container .lm_item_container {\n background: var(--mj-bg-surface) !important;\n}\n\n/* Tab content wrapper - allow scrolling */\n.tab-content-wrapper {\n overflow: auto !important;\n}\n\n/* Make tabs larger and easier to click */\nmj-tab-container .lm_header {\n height: 38px !important;\n padding-top: 2px !important;\n padding-left: 4px !important;\n background: var(--mj-bg-surface-sunken) !important;\n border-bottom: 1px solid var(--mj-border-default) !important;\n overflow: visible !important;\n box-sizing: border-box !important;\n}\n\nmj-tab-container .lm_tabs {\n height: 36px !important;\n}\n\n/* Hide Golden Layout window controls */\nmj-tab-container .lm_controls {\n display: none !important;\n}\n\nmj-tab-container .lm_header .lm_tab {\n padding: 0 16px !important;\n font-size: 13px !important;\n height: 35px !important;\n line-height: 35px !important;\n box-sizing: border-box !important;\n cursor: pointer !important;\n user-select: none !important;\n background: transparent !important;\n border: none !important;\n border-bottom: 1px solid var(--mj-border-default) !important;\n transition: all 0.15s ease !important;\n position: relative !important;\n z-index: 1 !important;\n margin-right: 1px !important;\n}\n\n/* App color accent - left edge indicator */\nmj-tab-container .lm_header .lm_tab::before {\n content: '' !important;\n position: absolute !important;\n left: 0 !important;\n top: 4px !important;\n bottom: 4px !important;\n width: 3px !important;\n border-radius: 0 2px 2px 0 !important;\n background-color: var(--app-color, transparent) !important;\n opacity: 0.6 !important;\n transition: all 0.15s ease !important;\n}\n\nmj-tab-container .lm_header .lm_tab:hover {\n background: var(--mj-bg-surface-hover) !important;\n}\n\nmj-tab-container .lm_header .lm_tab:hover .lm_close_tab {\n opacity: 0.7 !important;\n}\n\nmj-tab-container .lm_header .lm_tab:hover::before {\n opacity: 0.8 !important;\n}\n\nmj-tab-container .lm_header .lm_tab.lm_active {\n background: var(--mj-bg-surface) !important;\n height: 36px !important;\n margin-bottom: -1px !important;\n margin-right: 0 !important;\n border: 1px solid var(--mj-border-default) !important;\n border-bottom-color: var(--mj-bg-surface) !important;\n border-radius: 4px 4px 0 0 !important;\n z-index: 2 !important;\n}\n\n/* Enhanced app color accent for active tab */\nmj-tab-container .lm_header .lm_tab.lm_active::before {\n opacity: 1 !important;\n width: 3px !important;\n top: 2px !important;\n bottom: 2px !important;\n box-shadow: 0 0 6px var(--app-color, transparent) !important;\n}\n\nmj-tab-container .lm_title {\n cursor: pointer !important;\n user-select: none !important;\n}\n\nmj-tab-container .lm_close_tab {\n position: absolute !important;\n right: 4px !important;\n top: 50% !important;\n transform: translateY(-50%) !important;\n width: 16px !important;\n height: 16px !important;\n cursor: pointer !important;\n opacity: 0 !important;\n transition: all 0.15s ease !important;\n flex-shrink: 0 !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n font-size: 10px !important;\n color: var(--mj-text-secondary) !important;\n}\n\nmj-tab-container .lm_close_tab:hover {\n opacity: 1 !important;\n color: var(--mj-status-error) !important;\n}\n\n/* Show close button on hover (except pinned) */\nmj-tab-container .lm_header .lm_tab:hover:not(.pinned) .lm_close_tab {\n opacity: 0.7 !important;\n}\n\n/* Pinned tabs never show close button */\nmj-tab-container .lm_header .lm_tab.pinned .lm_close_tab {\n display: none !important;\n}\n\n/* Hide close button on active tab by default */\nmj-tab-container .lm_active .lm_close_tab {\n opacity: 0 !important;\n}\n\n/* Show close button when hovering active tab */\nmj-tab-container .lm_active:hover .lm_close_tab {\n opacity: 0.7 !important;\n}\n\n/* Adjust padding for close button */\nmj-tab-container .lm_header .lm_tab {\n padding-right: 24px !important;\n}\n"] }]
|
|
979
979
|
}], () => [{ type: i1.GoldenLayoutManager }, { type: i1.WorkspaceStateManager }, { type: i1.ApplicationManager }, { type: i0.ApplicationRef }, { type: i0.EnvironmentInjector }, { type: i0.ChangeDetectorRef }], { glContainer: [{
|
|
980
980
|
type: ViewChild,
|
|
981
981
|
args: ['glContainer', { static: false }]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tab-container.component.js","sourceRoot":"","sources":["../../../../../src/lib/shell/components/tabs/tab-container.component.ts","../../../../../src/lib/shell/components/tabs/tab-container.component.html"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tab-container.component.js","sourceRoot":"","sources":["../../../../../src/lib/shell/components/tabs/tab-container.component.ts","../../../../../src/lib/shell/components/tabs/tab-container.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n OnInit,\n OnDestroy,\n AfterViewInit,\n ViewChild,\n ElementRef,\n ApplicationRef,\n EnvironmentInjector,\n createComponent,\n ComponentRef,\n ViewEncapsulation,\n ChangeDetectorRef,\n HostListener,\n Output,\n EventEmitter\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport {\n GoldenLayoutManager,\n WorkspaceStateManager,\n ApplicationManager,\n TabComponentState,\n TabShownEvent,\n WorkspaceTab,\n LayoutNode\n} from '@memberjunction/ng-base-application';\nimport { MJGlobal } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { ResourceData, MJResourceTypeEntity } from '@memberjunction/core-entities';\nimport { DatasetResultType, LogError, Metadata } from '@memberjunction/core';\nimport { ComponentCacheManager } from './component-cache-manager';\n\n/**\n * Container for Golden Layout tabs with app-colored styling.\n *\n * Handles:\n * - Golden Layout initialization\n * - Tab creation and styling\n * - Lazy loading of tab content\n * - Context menu for pin/close\n * - Layout persistence\n */\n@Component({\n standalone: false,\n selector: 'mj-tab-container',\n templateUrl: './tab-container.component.html',\n styleUrls: ['./tab-container.component.css'],\n encapsulation: ViewEncapsulation.None\n})\nexport class TabContainerComponent implements OnInit, OnDestroy, AfterViewInit {\n @ViewChild('glContainer', { static: false }) glContainer!: ElementRef<HTMLDivElement>;\n @ViewChild('directContentContainer', { static: false }) directContentContainer!: ElementRef<HTMLDivElement>;\n\n /**\n * Emitted when the first resource component finishes loading.\n * This allows the shell to keep showing its loading indicator until the first\n * resource is ready, eliminating the visual gap between shell loading and resource loading.\n */\n @Output() firstResourceLoadComplete = new EventEmitter<void>();\n\n /**\n * Emitted when Golden Layout fails to initialize after multiple retries.\n * The shell can use this to show an error dialog and redirect.\n */\n @Output() layoutInitError = new EventEmitter<void>();\n\n private subscriptions: Subscription[] = [];\n private layoutInitRetryCount = 0;\n private readonly MAX_LAYOUT_INIT_RETRIES = 5;\n private layoutInitialized = false;\n private layoutRestorationComplete = false; // True only AFTER layout is fully restored/created\n\n // Track component references for cleanup (legacy - keep for backward compat during transition)\n private componentRefs = new Map<string, ComponentRef<BaseResourceComponent>>();\n\n // NEW: Smart component cache for preserving state across tab switches\n private cacheManager: ComponentCacheManager;\n\n // Single-resource mode: render component directly without Golden Layout\n // This avoids the 20px height issue when GL header is hidden\n useSingleResourceMode = false;\n private singleResourceComponentRef: ComponentRef<BaseResourceComponent> | null = null;\n private previousTabBarVisible: boolean | null = null;\n private currentSingleResourceSignature: string | null = null; // Track loaded content signature to avoid unnecessary reloads\n private isCreatingInitialTabs = false; // Flag to prevent syncTabsWithConfiguration during initial tab creation\n\n // Context menu state\n contextMenuVisible = false;\n contextMenuX = 0;\n contextMenuY = 0;\n contextMenuTabId: string | null = null;\n\n constructor(\n private layoutManager: GoldenLayoutManager,\n private workspaceManager: WorkspaceStateManager,\n private appManager: ApplicationManager,\n private appRef: ApplicationRef,\n private environmentInjector: EnvironmentInjector,\n private cdr: ChangeDetectorRef\n ) {\n // Initialize component cache manager\n this.cacheManager = new ComponentCacheManager(this.appRef);\n }\n\n ngOnInit(): void {\n // Subscribe to tab events\n this.subscriptions.push(\n this.layoutManager.TabShown.subscribe(event => {\n this.onTabShown(event);\n }),\n this.layoutManager.TabClosed.subscribe(tabId => {\n this.cleanupTabComponent(tabId);\n this.workspaceManager.CloseTab(tabId);\n }),\n this.layoutManager.LayoutChanged.subscribe(event => {\n const layout = this.layoutManager.SaveLayout();\n this.workspaceManager.UpdateLayout(layout);\n }),\n this.layoutManager.ActiveTab.subscribe(tabId => {\n if (tabId) {\n this.workspaceManager.SetActiveTab(tabId);\n }\n }),\n this.layoutManager.TabDoubleClicked.subscribe(tabId => {\n this.workspaceManager.TogglePin(tabId);\n }),\n this.layoutManager.TabRightClicked.subscribe(event => {\n this.showContextMenu(event.x, event.y, event.tabId);\n })\n );\n\n // Subscribe to configuration changes to sync tabs\n this.subscriptions.push(\n this.workspaceManager.Configuration.subscribe(config => {\n if (config) {\n if (this.useSingleResourceMode) {\n // In single-resource mode, reload content if the tab content changed\n // The same tab ID can have different content (tab gets reused)\n const activeTab = config.tabs.find(t => t.id === config.activeTabId) || config.tabs[0];\n if (activeTab) {\n const signature = this.getTabContentSignature(activeTab);\n if (signature !== this.currentSingleResourceSignature) {\n this.loadSingleResourceContent();\n }\n }\n } else if (this.layoutRestorationComplete && !this.isCreatingInitialTabs) {\n // In multi-tab mode, sync with Golden Layout\n // IMPORTANT: Only sync AFTER layout restoration is complete to avoid creating duplicate tabs\n // layoutRestorationComplete is set to true only after initializeGoldenLayout finishes\n this.syncTabsWithConfiguration(config.tabs);\n }\n }\n })\n );\n\n // Subscribe to tab bar visibility changes for single-resource mode\n this.subscriptions.push(\n this.workspaceManager.TabBarVisible.subscribe(tabBarVisible => {\n this.handleTabBarVisibilityChange(tabBarVisible);\n })\n );\n }\n\n ngAfterViewInit(): void {\n // Initialize Golden Layout only if we're not in single-resource mode\n if (!this.useSingleResourceMode) {\n this.initializeGoldenLayout();\n } else {\n // In single-resource mode, load content directly\n this.loadSingleResourceContent();\n }\n }\n\n /**\n * Initialize Golden Layout and load tabs\n * @param forceCreateTabs - If true, always creates tabs fresh from config.tabs instead of restoring saved layout\n */\n private initializeGoldenLayout(forceCreateTabs = false): void {\n // If we are in single resource mode we do NOT need to do this work as golden layout should not exist in that state\n if (this.useSingleResourceMode)\n return;\n\n if (!this.glContainer?.nativeElement) {\n this.layoutInitRetryCount++;\n\n if (this.layoutInitRetryCount > this.MAX_LAYOUT_INIT_RETRIES) {\n console.error(`Golden Layout container not available after ${this.MAX_LAYOUT_INIT_RETRIES} retries, emitting error`);\n this.layoutInitError.emit();\n return;\n }\n\n console.warn(`Golden Layout container not available, retry ${this.layoutInitRetryCount}/${this.MAX_LAYOUT_INIT_RETRIES}...`);\n setTimeout(() => this.initializeGoldenLayout(forceCreateTabs), 50);\n return;\n }\n\n // Reset retry counter on success\n this.layoutInitRetryCount = 0;\n\n if (this.layoutInitialized) {\n return; // Already initialized\n }\n\n // Check if configuration is available\n // If not, wait for it to be loaded before proceeding\n const config = this.workspaceManager.GetConfiguration();\n if (!config) {\n // Configuration not loaded yet - wait for it\n const configSub = this.workspaceManager.Configuration.subscribe(loadedConfig => {\n if (loadedConfig) {\n configSub.unsubscribe();\n // Re-call initializeGoldenLayout now that config is available\n this.initializeGoldenLayout(forceCreateTabs);\n }\n });\n return;\n }\n\n // Initialize Golden Layout (we have config now)\n this.layoutManager.Initialize(this.glContainer.nativeElement);\n\n // Mark layout as initialized\n this.layoutInitialized = true;\n\n // Check if config has no tabs\n if (config.tabs.length === 0) {\n // No tabs to load, but mark restoration as complete\n this.layoutRestorationComplete = true;\n return;\n }\n\n // Check if we have a saved layout structure with actual content\n const hasSavedLayout = config.layout?.root?.content && config.layout.root.content.length > 0;\n\n if (hasSavedLayout && !forceCreateTabs && config.layout) {\n // VALIDATE: Check that layout component count matches tabs array count\n const layoutComponentCount = this.countLayoutComponents(config.layout.root);\n if (layoutComponentCount !== config.tabs.length) {\n console.warn(`[TabContainer.initializeGoldenLayout] Layout/tabs mismatch: layout has ${layoutComponentCount} components but tabs array has ${config.tabs.length} tabs. Clearing layout.`);\n this.workspaceManager.ClearLayout();\n // Fall through to create fresh tabs\n } else {\n // RESTORE SAVED LAYOUT - preserves drag/drop arrangements (stacks, columns, rows)\n // This is the single source of truth for visual arrangement\n const layoutLoaded = this.layoutManager.LoadLayout(config.layout);\n\n if (layoutLoaded) {\n // Mark layout restoration as complete AFTER layout is loaded\n this.layoutRestorationComplete = true;\n\n // Focus active tab and ensure proper sizing\n // Also trigger updateSize() to force Golden Layout to fire 'show' events\n // for the active tab in ALL stacks (not just the globally active tab)\n setTimeout(() => {\n if (config.activeTabId) {\n this.layoutManager.FocusTab(config.activeTabId);\n }\n // Trigger resize to ensure all visible tabs in all stacks render their content\n this.layoutManager.updateSize();\n }, 50);\n return; // Layout restored successfully\n }\n\n // Layout load FAILED - clear the corrupted layout and fall through to create tabs fresh\n console.warn('[TabContainer] Saved layout was corrupted, clearing and recreating tabs');\n this.workspaceManager.ClearLayout();\n }\n }\n\n // CREATE FRESH - no saved layout, forceCreateTabs=true, or layout load failed\n // Use config.tabs sorted by sequence to build a simple single-stack layout\n const sortedTabs = [...config.tabs].sort((a, b) => a.sequence - b.sequence);\n\n this.isCreatingInitialTabs = true;\n try {\n sortedTabs.forEach(tab => {\n this.createTab(tab);\n });\n } finally {\n this.isCreatingInitialTabs = false;\n }\n\n // Mark layout restoration as complete AFTER tabs are created\n this.layoutRestorationComplete = true;\n\n setTimeout(() => {\n if (config.activeTabId) {\n this.layoutManager.FocusTab(config.activeTabId);\n }\n }, 50);\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n\n // Cleanup single-resource mode component if exists\n this.cleanupSingleResourceComponent();\n\n // Clear the component cache (destroys all components)\n this.cacheManager.clearCache();\n\n // Cleanup any legacy componentRefs\n this.componentRefs.forEach((ref, _tabId) => {\n this.appRef.detachView(ref.hostView);\n ref.destroy();\n });\n this.componentRefs.clear();\n }\n\n /**\n * Handle window resize events as a fallback safety mechanism.\n * Golden Layout's ResizeObserver should handle most cases, but this\n * ensures the layout is properly sized after browser window changes.\n */\n @HostListener('window:resize')\n onWindowResize(): void {\n if (this.layoutInitialized && !this.useSingleResourceMode) {\n this.layoutManager.updateSize();\n }\n }\n\n /**\n * Handle changes to tab bar visibility - switches between single-resource and multi-tab modes\n */\n private handleTabBarVisibilityChange(tabBarVisible: boolean): void {\n // Skip if no change\n if (this.previousTabBarVisible === tabBarVisible) {\n return;\n }\n this.previousTabBarVisible = tabBarVisible;\n\n // Determine if we should use single-resource mode\n const shouldUseSingleResourceMode = !tabBarVisible;\n\n if (shouldUseSingleResourceMode !== this.useSingleResourceMode) {\n this.useSingleResourceMode = shouldUseSingleResourceMode;\n this.cdr.detectChanges();\n\n if (this.useSingleResourceMode) {\n // Transitioning to single-resource mode\n // **CRITICAL FIX**: Wait for the template to render directContentContainer\n // before trying to load content. detectChanges() only marks dirty, doesn't render immediately.\n setTimeout(() => {\n // First, destroy Golden Layout if it was initialized (prevents stale state)\n if (this.layoutInitialized) {\n this.layoutManager.Destroy();\n this.layoutInitialized = false;\n }\n // Load the active tab's content directly (now container will exist)\n this.loadSingleResourceContent();\n }, 0);\n } else {\n // Transitioning to multi-tab mode\n // Pin the previously displayed tab (it was the \"current\" content in single-resource mode)\n // This ensures we only have ONE temporary tab at a time\n const config = this.workspaceManager.GetConfiguration();\n if (config && config.tabs.length > 0) {\n // The new tab (just added via OpenTabForced) is now the activeTabId\n // All OTHER unpinned tabs should be pinned since they represent content\n // the user explicitly kept open\n const updatedTabs = config.tabs.map(tab => {\n // Pin all tabs except the newly active one (which is the temporary tab)\n if (tab.id !== config.activeTabId && !tab.isPinned) {\n return { ...tab, isPinned: true };\n }\n return tab;\n });\n\n // Only update if we actually changed something\n const hasChanges = updatedTabs.some((tab, i) => tab.isPinned !== config.tabs[i].isPinned);\n if (hasChanges) {\n this.workspaceManager.UpdateConfiguration({\n ...config,\n tabs: updatedTabs\n });\n }\n }\n\n // Clean up direct component, Golden Layout will handle tabs\n this.cleanupSingleResourceComponent();\n this.currentSingleResourceSignature = null; // Reset tracking\n\n // Reset layout initialized flag since we're switching from single-resource mode\n // The gl-container is a new DOM element (due to @if), so we need fresh initialization\n this.layoutInitialized = false;\n\n // Initialize Golden Layout - use setTimeout to allow the template to update first\n // and ensure the gl-container div exists in the DOM\n // IMPORTANT: Use forceCreateTabs=true to create tabs fresh from config.tabs\n // instead of restoring potentially stale saved layout structure\n setTimeout(() => {\n this.initializeGoldenLayout(true /* forceCreateTabs */);\n }, 0);\n }\n }\n }\n\n /**\n * Load content directly for single-resource mode (bypasses Golden Layout)\n */\n private async loadSingleResourceContent(): Promise<void> {\n // Wait for next tick to ensure the container is rendered\n await Promise.resolve();\n\n const config = this.workspaceManager.GetConfiguration();\n if (!config || config.tabs.length === 0) {\n return;\n }\n\n // Get the active tab (or first tab)\n const activeTab = config.tabs.find(t => t.id === config.activeTabId) || config.tabs[0];\n if (!activeTab) {\n return;\n }\n\n // Track which content we're loading (signature includes resource type and record ID)\n const newSignature = this.getTabContentSignature(activeTab);\n if (this.currentSingleResourceSignature === newSignature) {\n // Content already loaded, no action needed\n return;\n }\n this.currentSingleResourceSignature = newSignature;\n\n // Get the container element\n const container = this.directContentContainer?.nativeElement;\n if (!container) {\n console.warn('Direct content container not available yet, retrying...');\n // Retry after view is updated\n setTimeout(() => this.loadSingleResourceContent(), 50);\n return;\n }\n\n // Create ResourceData from tab\n const resourceData = await this.getResourceDataFromTab(activeTab);\n if (!resourceData) {\n LogError(`Unable to create ResourceData for tab: ${activeTab.title}`);\n return;\n }\n\n // Get driver class for component lookup\n const driverClass = resourceData.Configuration?.resourceTypeDriverClass || resourceData.ResourceType;\n\n // **OPTIMIZATION: Check cache first to reuse existing loaded component**\n const cached = this.cacheManager.getCachedComponent(\n driverClass,\n resourceData.ResourceRecordID || '',\n activeTab.applicationId\n );\n\n if (cached) {\n // Clean up previous single-resource component (if different)\n this.cleanupSingleResourceComponent();\n\n // Detach from tab tracking (it was attached to a tab in Golden Layout)\n this.cacheManager.markAsDetached(activeTab.id);\n\n // Reattach the cached wrapper element to single-resource container\n cached.wrapperElement.style.height = \"100%\"; // Ensure full height\n container.appendChild(cached.wrapperElement);\n\n // Store reference for cleanup\n this.singleResourceComponentRef = cached.componentRef;\n\n return;\n }\n\n // Get the component registration\n const resourceReg = MJGlobal.Instance.ClassFactory.GetRegistration(\n BaseResourceComponent,\n driverClass\n );\n\n if (!resourceReg) {\n LogError(`Unable to find resource registration for driver class: ${driverClass}`);\n return;\n }\n\n // Clean up previous component if any\n this.cleanupSingleResourceComponent();\n\n // Create the component dynamically\n const componentRef = createComponent(resourceReg.SubClass, {\n environmentInjector: this.environmentInjector\n });\n\n // Attach to Angular's change detection\n this.appRef.attachView(componentRef.hostView);\n\n // Set the resource data on the component\n const instance = componentRef.instance as BaseResourceComponent;\n instance.Data = resourceData;\n\n // Wire up events\n instance.LoadCompleteEvent = () => {\n this.emitFirstLoadCompleteOnce();\n };\n\n // Get the native element and append to container\n const nativeElement = (componentRef.hostView as unknown as { rootNodes: HTMLElement[] }).rootNodes[0];\n container.appendChild(nativeElement);\n // now make sure that the container's direct child is 100% height\n if (container.children?.length > 0) {\n (container.children[0] as any).style.height = \"100%\";\n }\n\n // Store reference for cleanup\n this.singleResourceComponentRef = componentRef as ComponentRef<BaseResourceComponent>;\n }\n\n /**\n * Clean up single-resource mode component\n */\n private cleanupSingleResourceComponent(): void {\n if (this.singleResourceComponentRef) {\n this.appRef.detachView(this.singleResourceComponentRef.hostView);\n this.singleResourceComponentRef.destroy();\n this.singleResourceComponentRef = null;\n }\n\n // Clear the container\n const container = this.directContentContainer?.nativeElement;\n if (container) {\n container.innerHTML = '';\n }\n }\n\n /**\n * Generate a signature for tab content to detect when content changes\n * This is needed because in single-resource mode, the same tab ID can have different content\n */\n private getTabContentSignature(tab: WorkspaceTab): string {\n // Include key identifying fields that determine what component/content is shown\n // IMPORTANT: Check both resourceRecordId AND configuration.recordId\n // because for nav items, the recordId is stored in configuration, not resourceRecordId\n const effectiveRecordId = tab.resourceRecordId || (tab.configuration?.recordId as string) || '';\n const parts = [\n tab.applicationId,\n tab.configuration?.resourceType || '',\n tab.configuration?.driverClass || '',\n tab.configuration?.Entity || '', // Include Entity name for Records resource type\n effectiveRecordId,\n tab.configuration?.route || ''\n ];\n return parts.join('|');\n }\n\n /**\n * Create a tab in Golden Layout from workspace tab data\n */\n private createTab(tab: WorkspaceTab): void {\n const app = this.appManager.GetAppById(tab.applicationId);\n const appColor = app?.GetColor() || '#757575';\n\n const state: TabComponentState = {\n tabId: tab.id,\n appId: tab.applicationId,\n appColor,\n title: tab.title,\n route: tab.configuration['route'] as string || '',\n isPinned: tab.isPinned,\n isLoaded: false\n };\n\n this.layoutManager.AddTab(state);\n\n // Load display name in background without loading full component\n this.updateTabDisplayName(tab);\n }\n\n /**\n * Handle tab shown event for lazy loading\n */\n private async onTabShown(event: TabShownEvent): Promise<void> {\n if (event.isFirstShow) {\n // Load content for this tab\n await this.loadTabContent(event.tabId, event.container);\n this.layoutManager.MarkTabLoaded(event.tabId);\n }\n }\n\n /**\n * Load content into a tab container\n * Uses component cache to reuse components for same resources\n */\n private async loadTabContent(tabId: string, container: unknown): Promise<void> {\n try {\n const tab = this.workspaceManager.GetTab(tabId);\n if (!tab) {\n LogError(`Tab not found: ${tabId}`);\n return;\n }\n\n // Get the container element from Golden Layout\n const glContainer = container as { element: HTMLElement };\n if (!glContainer?.element) {\n LogError('Golden Layout container element not found');\n return;\n }\n\n // Extract resource data from tab configuration\n const resourceData = await this.getResourceDataFromTab(tab);\n if (!resourceData) {\n LogError(`Unable to create ResourceData for tab: ${tab.title}`);\n return;\n }\n\n // Clear any existing content from the container (important for tab reuse)\n glContainer.element.innerHTML = '';\n\n // Get driver class for cache lookup (resolves to actual component class name)\n const driverClass = resourceData.Configuration?.resourceTypeDriverClass || resourceData.ResourceType;\n\n // Check if we have a cached component for this resource\n const cached = this.cacheManager.getCachedComponent(\n driverClass,\n resourceData.ResourceRecordID || '',\n tab.applicationId\n );\n\n if (cached) {\n // Reattach the cached wrapper element\n glContainer.element.appendChild(cached.wrapperElement);\n\n // Mark as attached to this tab\n this.cacheManager.markAsAttached(\n driverClass,\n resourceData.ResourceRecordID || '',\n tab.applicationId,\n tabId\n );\n\n // Keep legacy componentRefs map updated\n this.componentRefs.set(tabId, cached.componentRef);\n\n // If resource is already loaded, update tab title immediately\n const instance = cached.componentRef.instance as BaseResourceComponent;\n if (instance.LoadComplete) {\n this.updateTabTitleFromResource(tabId, instance, resourceData);\n }\n\n return;\n }\n\n // Get the component registration using the driver class\n const resourceReg = MJGlobal.Instance.ClassFactory.GetRegistration(\n BaseResourceComponent,\n driverClass\n );\n\n if (!resourceReg) {\n LogError(`Unable to find resource registration for driver class: ${driverClass}`);\n return;\n }\n\n // Create the component dynamically\n const componentRef = createComponent(resourceReg.SubClass, {\n environmentInjector: this.environmentInjector\n });\n\n // Attach to Angular's change detection\n this.appRef.attachView(componentRef.hostView);\n\n // Set the resource data on the component\n const instance = componentRef.instance as BaseResourceComponent;\n instance.Data = resourceData;\n\n // Wire up events\n instance.LoadCompleteEvent = () => {\n // Tab content loaded - update tab title with resource display name\n this.updateTabTitleFromResource(tabId, instance, resourceData);\n this.emitFirstLoadCompleteOnce();\n };\n\n instance.ResourceRecordSavedEvent = (entity: { Get?: (key: string) => unknown }) => {\n // Update tab title if needed\n if (entity && entity.Get && entity.Get('Name')) {\n // TODO: Implement UpdateTabTitle in WorkspaceStateManager\n }\n };\n\n // Create a container div for the component\n const componentElement = document.createElement('div');\n componentElement.className = 'tab-content-wrapper';\n componentElement.style.cssText = 'width: 100%; height: 100%;';\n\n // Append the component's native element\n const nativeElement = (componentRef.hostView as unknown as { rootNodes: HTMLElement[] }).rootNodes[0];\n componentElement.appendChild(nativeElement);\n\n // Add to Golden Layout container\n glContainer.element.appendChild(componentElement);\n\n // Cache the component for future reuse\n this.cacheManager.cacheComponent(\n componentRef as ComponentRef<BaseResourceComponent>,\n componentElement,\n resourceData,\n tabId\n );\n\n // Store reference for cleanup (legacy)\n this.componentRefs.set(tabId, componentRef as ComponentRef<BaseResourceComponent>);\n\n } catch (e) {\n LogError(e);\n }\n }\n\n /**\n * Update tab display name in background without loading full component\n * This ensures all tabs show proper names immediately, not just when clicked\n */\n private async updateTabDisplayName(tab: WorkspaceTab): Promise<void> {\n try {\n // Only update display names for resource-based tabs\n const resourceType = tab.configuration['resourceType'] as string;\n if (!resourceType) {\n return;\n }\n\n // Get ResourceData from tab\n const resourceData = await this.getResourceDataFromTab(tab);\n if (!resourceData) {\n return;\n }\n\n // Get the resource registration to access GetResourceDisplayName without loading full component\n const driverClass = resourceData.Configuration?.resourceTypeDriverClass || resourceData.ResourceType;\n const resourceReg = MJGlobal.Instance.ClassFactory.GetRegistration(\n BaseResourceComponent,\n driverClass\n );\n\n if (!resourceReg) {\n return;\n }\n\n // Create a lightweight instance just to call GetResourceDisplayName\n const tempInstance = new resourceReg.SubClass() as BaseResourceComponent;\n const displayName = await tempInstance.GetResourceDisplayName(resourceData);\n\n if (displayName && displayName !== tab.title) {\n // Update the tab title in Golden Layout\n this.layoutManager.UpdateTabStyle(tab.id, { title: displayName });\n\n // Update the tab title in workspace configuration for persistence\n this.workspaceManager.UpdateTabTitle(tab.id, displayName);\n }\n } catch (error) {\n console.error('[TabContainer.updateTabDisplayName] Error updating tab display name:', error);\n }\n }\n\n /**\n * Update tab title with resource display name after resource loads\n */\n private async updateTabTitleFromResource(\n tabId: string,\n resourceComponent: BaseResourceComponent,\n resourceData: ResourceData\n ): Promise<void> {\n try {\n // Get the display name from the resource component\n const displayName = await resourceComponent.GetResourceDisplayName(resourceData);\n\n if (!displayName) {\n return;\n }\n\n // Update the tab title in Golden Layout\n this.layoutManager.UpdateTabStyle(tabId, { title: displayName });\n\n // Update the tab title in workspace configuration for persistence\n this.workspaceManager.UpdateTabTitle(tabId, displayName);\n\n } catch (error) {\n console.error('[TabContainer.updateTabTitleFromResource] Error updating tab title:', error);\n }\n }\n\n /**\n * Convert tab configuration to ResourceData\n */\n private async getResourceDataFromTab(tab: WorkspaceTab): Promise<ResourceData | null> {\n const config = tab.configuration;\n\n // Extract resource type from configuration or route\n let resourceType = config['resourceType'] as string;\n\n if (!resourceType && config['route']) {\n // Parse route to determine resource type\n resourceType = this.getResourceTypeFromRoute(config['route'] as string);\n }\n\n if (!resourceType) {\n console.error('[TabContainer.getResourceDataFromTab] No resourceType found in config or route');\n return null;\n }\n\n // Determine the driver class to use for component instantiation\n let driverClass = resourceType; // Default: use resourceType as driver class\n\n // For Custom resource type, get DriverClass from configuration or ResourceType metadata\n if (resourceType.toLowerCase() === 'custom') {\n // Custom resource type uses NavItem's DriverClass\n driverClass = config['driverClass'] as string;\n\n if (!driverClass) {\n LogError('Custom resource type requires driverClass in configuration');\n console.error('[TabContainer.getResourceDataFromTab] Missing driverClass for Custom resource type');\n return null;\n }\n } else {\n // For standard resource types, look up DriverClass from metadata\n const resourceTypeEntity = await this.getResourceTypeEntity(resourceType);\n\n if (resourceTypeEntity?.DriverClass) {\n driverClass = resourceTypeEntity.DriverClass;\n } \n // If no DriverClass in metadata, fall back to resourceType (backward compatibility)\n }\n\n // Include applicationId and driverClass in configuration\n const resourceConfig = {\n ...config,\n applicationId: tab.applicationId,\n resourceTypeDriverClass: driverClass // Store resolved driver class for component lookup\n };\n\n // Get ResourceRecordID from config or fall back to tab.resourceRecordId\n // Important: Some tabs store the record ID in config['recordId'], others in tab.resourceRecordId\n const resourceRecordId = (config['recordId'] as string) || tab.resourceRecordId || '';\n\n const resourceData = new ResourceData({\n ResourceTypeID: await this.getResourceTypeId(resourceType),\n ResourceRecordID: resourceRecordId,\n Configuration: resourceConfig\n });\n\n return resourceData;\n }\n\n private static _resourceTypesDataset: DatasetResultType | null = null;\n\n /**\n * Get ResourceType entity by name (includes DriverClass field)\n */\n private async getResourceTypeEntity(resourceType: string): Promise<MJResourceTypeEntity | null> {\n const md = new Metadata();\n const ds = TabContainerComponent._resourceTypesDataset || await md.GetDatasetByName(\"ResourceTypes\");\n if (!ds || !ds.Success || ds.Results.length === 0) {\n return null;\n }\n\n if (!TabContainerComponent._resourceTypesDataset) {\n TabContainerComponent._resourceTypesDataset = ds; // cache for next time\n }\n\n const result = ds.Results.find(r => r.Code.trim().toLowerCase() === 'resourcetypes');\n if (result && result.Results?.length > 0) {\n const rt = result.Results.find(rt => rt.Name.trim().toLowerCase() === resourceType.trim().toLowerCase()) as MJResourceTypeEntity;\n return rt || null;\n }\n\n return null;\n }\n\n private async getResourceTypeId(resourceType: string): Promise<string> {\n const rt = await this.getResourceTypeEntity(resourceType);\n if (rt) {\n return rt.ID;\n }\n throw new Error(`ResourceType ID not found for type: ${resourceType}`);\n }\n\n /**\n * Determine resource type from route\n */\n private getResourceTypeFromRoute(route: string): string {\n // Parse route segments to determine resource type\n const segments = route.split('/').filter(s => s);\n\n if (segments.length === 0) {\n return 'home';\n }\n\n // Common route patterns\n if (route.includes('/record/')) {\n return 'record';\n }\n if (route.includes('/view/')) {\n return 'view';\n }\n if (route.includes('/dashboard/')) {\n return 'dashboard';\n }\n if (route.includes('/report/')) {\n return 'report';\n }\n if (route.includes('/search')) {\n return 'search';\n }\n if (route.includes('/query/')) {\n return 'query';\n }\n\n // Default based on first segment\n return segments[0] || 'home';\n }\n\n /**\n * Count the number of component nodes in a layout tree.\n * Used to validate that saved layout matches the tabs array before restoring.\n */\n private countLayoutComponents(node: LayoutNode): number {\n if (!node) {\n return 0;\n }\n\n // If this is a component node, count it\n if (node.type === 'component') {\n return 1;\n }\n\n // If this node has children (row, column, stack), recursively count them\n if (node.content && Array.isArray(node.content)) {\n return node.content.reduce((count, child) => count + this.countLayoutComponents(child), 0);\n }\n\n return 0;\n }\n\n /**\n * Cleanup a tab's component\n * Detaches from DOM but keeps in cache for potential reuse\n */\n private cleanupTabComponent(tabId: string): void {\n // First, try to detach from cache (preserves component for reuse)\n const cachedInfo = this.cacheManager.markAsDetached(tabId);\n\n if (cachedInfo) {\n // Remove from legacy componentRefs but keep in cache\n this.componentRefs.delete(tabId);\n } else {\n // Fallback: destroy if not in cache (shouldn't happen in normal flow)\n const componentRef = this.componentRefs.get(tabId);\n if (componentRef) {\n this.appRef.detachView(componentRef.hostView);\n componentRef.destroy();\n this.componentRefs.delete(tabId);\n }\n }\n }\n\n /**\n * Sync tabs with configuration changes\n */\n private syncTabsWithConfiguration(tabs: WorkspaceTab[]): void {\n // Get existing tab IDs from Golden Layout\n const existingTabIds = this.layoutManager.GetAllTabIds();\n\n // Get tab IDs from configuration\n const configTabIds = tabs.map(tab => tab.id);\n\n // Remove tabs that are no longer in configuration\n existingTabIds.forEach(tabId => {\n if (!configTabIds.includes(tabId)) {\n this.layoutManager.RemoveTab(tabId);\n }\n });\n\n // Create tabs that don't exist yet\n tabs.forEach(tab => {\n if (!existingTabIds.includes(tab.id)) {\n this.createTab(tab);\n } else {\n // Check if tab content needs to be reloaded (app or resource type changed)\n const existingComponentRef = this.componentRefs.get(tab.id);\n if (existingComponentRef) {\n const existingResourceData = existingComponentRef.instance.Data;\n\n // For Custom resource types, also check driverClass to distinguish between different custom resources\n const existingDriverClass = existingResourceData?.Configuration?.driverClass || existingResourceData?.Configuration?.resourceTypeDriverClass;\n const newDriverClass = tab.configuration['driverClass'] || tab.configuration['resourceTypeDriverClass'];\n\n // Normalize record IDs for comparison (treat null/undefined as empty string)\n // IMPORTANT: Check both tab.resourceRecordId AND tab.configuration['recordId']\n // because for nav items, the recordId is stored in configuration, not resourceRecordId\n const existingRecordId = existingResourceData?.ResourceRecordID || '';\n const newRecordId = tab.resourceRecordId || tab.configuration['recordId'] as string || '';\n\n const needsReload = existingResourceData?.ResourceType !== tab.configuration['resourceType'] ||\n existingResourceData?.Configuration?.applicationId !== tab.applicationId ||\n existingRecordId !== newRecordId ||\n (tab.configuration['resourceType'] === 'Custom' && existingDriverClass !== newDriverClass);\n\n if (needsReload) {\n // Clean up old component\n this.cleanupTabComponent(tab.id);\n\n // Mark tab as not loaded so it will reload when shown\n this.layoutManager.MarkTabNotLoaded(tab.id);\n\n // Update display name in background\n this.updateTabDisplayName(tab);\n\n // If this tab is currently active, reload it immediately\n const config = this.workspaceManager.GetConfiguration();\n if (config?.activeTabId === tab.id) {\n const glContainer = this.layoutManager.GetContainer(tab.id);\n if (glContainer) {\n this.loadTabContent(tab.id, glContainer);\n }\n }\n }\n }\n\n // Update styling for existing tabs\n const app = this.appManager.GetAppById(tab.applicationId);\n this.layoutManager.UpdateTabStyle(tab.id, {\n isPinned: tab.isPinned,\n title: tab.title,\n appColor: app?.GetColor() || '#757575'\n });\n }\n });\n\n // Focus the active tab\n const config = this.workspaceManager.GetConfiguration();\n if (config?.activeTabId) {\n this.layoutManager.FocusTab(config.activeTabId);\n }\n }\n\n\n /**\n * Show context menu\n */\n showContextMenu(x: number, y: number, tabId: string): void {\n this.contextMenuX = x;\n this.contextMenuY = y;\n this.contextMenuTabId = tabId;\n this.contextMenuVisible = true;\n\n // Close menu when clicking outside - use setTimeout to avoid immediate trigger\n setTimeout(() => {\n const clickHandler = (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n if (!target.closest('.context-menu')) {\n this.hideContextMenu();\n document.removeEventListener('click', clickHandler);\n document.removeEventListener('keydown', keyHandler);\n }\n };\n\n const keyHandler = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n this.hideContextMenu();\n document.removeEventListener('click', clickHandler);\n document.removeEventListener('keydown', keyHandler);\n }\n };\n\n document.addEventListener('click', clickHandler);\n document.addEventListener('keydown', keyHandler);\n }, 0);\n }\n\n /**\n * Hide context menu\n */\n hideContextMenu(): void {\n this.contextMenuVisible = false;\n this.contextMenuTabId = null;\n }\n\n /**\n * Check if context menu tab is pinned\n */\n get isContextTabPinned(): boolean {\n if (!this.contextMenuTabId) return false;\n const tab = this.workspaceManager.GetTab(this.contextMenuTabId);\n return tab?.isPinned || false;\n }\n\n /**\n * Toggle pin from context menu\n */\n onContextPin(): void {\n if (this.contextMenuTabId) {\n this.workspaceManager.TogglePin(this.contextMenuTabId);\n }\n this.hideContextMenu();\n }\n\n /**\n * Close tab from context menu\n */\n onContextClose(): void {\n if (this.contextMenuTabId) {\n this.layoutManager.RemoveTab(this.contextMenuTabId);\n }\n this.hideContextMenu();\n }\n\n /**\n * Close all other tabs from context menu\n */\n onContextCloseOthers(): void {\n if (this.contextMenuTabId) {\n this.workspaceManager.CloseOtherTabs(this.contextMenuTabId);\n }\n this.hideContextMenu();\n }\n\n /**\n * Close tabs to the right from context menu\n */\n onContextCloseToRight(): void {\n if (this.contextMenuTabId) {\n this.workspaceManager.CloseTabsToRight(this.contextMenuTabId);\n }\n this.hideContextMenu();\n }\n\n /**\n * While the naming implies this is only invoked once, components we DO NOT CONTROL might have race\n * conditions that result in unpredictable behavior. To avoid those causing loading screen overaly to show\n * forever we emit all events upstream\n */\n private emitFirstLoadCompleteOnce(): void {\n this.firstResourceLoadComplete.emit(); // do this each time to be sure we don't suppress messages\n }\n}\n","<div class=\"tab-container\">\n\n <!-- Single-Resource Mode: Direct component rendering without Golden Layout -->\n <!-- This avoids the 20px height issue when GL header is hidden -->\n @if (useSingleResourceMode) {\n <div #directContentContainer class=\"direct-content-container\"></div>\n } @else {\n <!-- Multi-Tab Mode: Golden Layout Container -->\n <div #glContainer class=\"gl-container\"></div>\n }\n\n <!-- Context Menu (only relevant in multi-tab mode) -->\n @if (contextMenuVisible) {\n <div\n class=\"context-menu\"\n [style.left.px]=\"contextMenuX\"\n [style.top.px]=\"contextMenuY\">\n <div class=\"context-menu-item\" (click)=\"onContextPin()\">\n <i class=\"fa-solid fa-thumbtack\"></i>\n <span>{{ isContextTabPinned ? 'Unpin Tab' : 'Pin Tab' }}</span>\n </div>\n <div class=\"context-menu-divider\"></div>\n <div class=\"context-menu-item\" (click)=\"onContextClose()\">\n <i class=\"fa-solid fa-xmark\"></i>\n <span>Close Tab</span>\n </div>\n <div class=\"context-menu-item\" (click)=\"onContextCloseOthers()\">\n <i class=\"fa-solid fa-layer-group\"></i>\n <span>Close Others</span>\n </div>\n <div class=\"context-menu-item\" (click)=\"onContextCloseToRight()\">\n <i class=\"fa-solid fa-angles-right\"></i>\n <span>Close to Right</span>\n </div>\n </div>\n }\n</div>\n"]}
|