@memberjunction/ng-explorer-core 5.10.1 → 5.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/lib/command-palette/command-palette.component.js +2 -2
  2. package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js +2 -2
  3. package/dist/lib/oauth/oauth-callback.component.js +2 -2
  4. package/dist/lib/resource-wrappers/chat-collections-resource.component.js +2 -2
  5. package/dist/lib/resource-wrappers/chat-collections-resource.component.js.map +1 -1
  6. package/dist/lib/resource-wrappers/chat-conversations-resource.component.js +2 -2
  7. package/dist/lib/resource-wrappers/chat-conversations-resource.component.js.map +1 -1
  8. package/dist/lib/resource-wrappers/dashboard-resource.component.js +2 -2
  9. package/dist/lib/resource-wrappers/dashboard-resource.component.js.map +1 -1
  10. package/dist/lib/resource-wrappers/record-resource.component.d.ts.map +1 -1
  11. package/dist/lib/resource-wrappers/record-resource.component.js +3 -7
  12. package/dist/lib/resource-wrappers/record-resource.component.js.map +1 -1
  13. package/dist/lib/resource-wrappers/view-resource.component.js +2 -2
  14. package/dist/lib/resource-wrappers/view-resource.component.js.map +1 -1
  15. package/dist/lib/shell/components/dialogs/app-access-dialog.component.js +4 -4
  16. package/dist/lib/shell/components/dialogs/app-access-dialog.component.js.map +1 -1
  17. package/dist/lib/shell/components/header/app-nav.component.d.ts.map +1 -1
  18. package/dist/lib/shell/components/header/app-nav.component.js +5 -5
  19. package/dist/lib/shell/components/header/app-nav.component.js.map +1 -1
  20. package/dist/lib/shell/components/header/app-switcher.component.js +22 -21
  21. package/dist/lib/shell/components/header/app-switcher.component.js.map +1 -1
  22. package/dist/lib/shell/components/tabs/tab-container.component.js +2 -2
  23. package/dist/lib/shell/loading-themes.js +1 -1
  24. package/dist/lib/shell/loading-themes.js.map +1 -1
  25. package/dist/lib/shell/shell.component.d.ts +19 -0
  26. package/dist/lib/shell/shell.component.d.ts.map +1 -1
  27. package/dist/lib/shell/shell.component.js +87 -4
  28. package/dist/lib/shell/shell.component.js.map +1 -1
  29. package/dist/lib/single-dashboard/Components/add-item/add-item.component.js +2 -2
  30. package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.js +2 -2
  31. package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.js +2 -2
  32. package/dist/lib/single-dashboard/single-dashboard.component.js +2 -2
  33. package/dist/lib/single-list-detail/single-list-detail.component.js +2 -2
  34. package/dist/lib/single-record/single-record.component.js +2 -2
  35. package/dist/lib/single-search-result/single-search-result.component.js +2 -2
  36. package/dist/lib/system-validation/system-validation-banner.component.js +2 -2
  37. package/dist/lib/system-validation/system-validation-banner.component.js.map +1 -1
  38. package/dist/lib/user-notifications/user-notifications.component.d.ts +15 -2
  39. package/dist/lib/user-notifications/user-notifications.component.d.ts.map +1 -1
  40. package/dist/lib/user-notifications/user-notifications.component.js +76 -8
  41. package/dist/lib/user-notifications/user-notifications.component.js.map +1 -1
  42. package/dist/lib/user-profile/user-profile.component.js +2 -2
  43. package/package.json +34 -34
@@ -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: 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 });
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-page);\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-page);\n overflow: hidden;\n}\n\n.tab-content-container {\n background: var(--mj-bg-page);\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-page) !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-page) !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: 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"] }]
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-page);\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-page);\n overflow: hidden;\n}\n\n.tab-content-container {\n background: var(--mj-bg-page);\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-page) !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-page) !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 }]
@@ -10,7 +10,7 @@ export const STANDARD_THEME = {
10
10
  staticColors: true, // Keep MJ blue the whole time
11
11
  animations: 'pulse', // Calm, professional pulse animation only
12
12
  colors: [
13
- '#264FAF', // MJ Blue (only color used)
13
+ '', // Uses --mj-logo-color CSS variable (adapts to theme)
14
14
  ],
15
15
  messages: [
16
16
  'Loading workspace...',
@@ -1 +1 @@
1
- {"version":3,"file":"loading-themes.js","sourceRoot":"","sources":["../../../src/lib/shell/loading-themes.ts"],"names":[],"mappings":"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","sourcesContent":["import { LogoGradient } from '@memberjunction/ng-shared-generic';\n\n/**\n * Available animation types for the loading screen.\n */\nexport type LoadingAnimationType = 'pulse' | 'spin' | 'bounce' | 'pulse-spin';\n\n/**\n * Configuration for an animation step in a sequence.\n */\nexport interface AnimationStep {\n /** The animation type to use */\n type: LoadingAnimationType;\n\n /**\n * Duration in milliseconds for this animation step.\n * If not specified or 0, this animation runs for the remainder of loading.\n * Use this to create sequences like: bounce for 5s, then pulse for the rest.\n */\n durationMs?: number;\n}\n\n/**\n * Configuration for a seasonal loading theme.\n * Themes are selected based on date range and optionally locale.\n */\nexport interface LoadingTheme {\n /** Unique identifier for the theme */\n id: string;\n\n /** Human-readable name for the theme */\n name: string;\n\n /** Month (1-12) and day when this theme starts */\n startsAt: { month: number; day: number };\n\n /** Month (1-12) and day when this theme ends (inclusive) */\n endsAt: { month: number; day: number };\n\n /**\n * Optional locale codes where this theme applies.\n * Uses BCP 47 language tags (e.g., 'en-US', 'en-CA', 'es-MX').\n * If undefined or empty, theme applies globally.\n * Can include partial matches (e.g., 'en' matches 'en-US', 'en-GB', etc.)\n */\n locales?: string[];\n\n /**\n * Array of theme colors used for the logo and text.\n * Colors are cycled through as loading progresses.\n * For the standard theme, only the first color is used (no changes).\n */\n colors: string[];\n\n /**\n * Optional array of gradient configurations for the logo.\n * When set, gradients are alternated through as loading progresses.\n * Takes precedence over solid colors for the logo fill.\n * If only one gradient is provided, it's used throughout.\n */\n gradients?: LogoGradient[];\n\n /**\n * Array of themed messages to display during loading.\n * Should contain at least 25 messages for variety.\n */\n messages: string[];\n\n /**\n * Priority for theme selection when multiple themes match.\n * Higher priority themes are selected over lower priority ones.\n * Default is 0. More specific themes (e.g., regional) should have higher priority.\n */\n priority?: number;\n\n /**\n * If true, colors and gradients remain fixed (no cycling).\n * Used for standard theme to keep MJ blue throughout.\n */\n staticColors?: boolean;\n\n /**\n * Animation configuration for this theme.\n * Can be a single animation type (string) or an array of AnimationSteps for sequences.\n *\n * Examples:\n * - 'pulse' - Use pulse animation throughout\n * - [{ type: 'bounce', durationMs: 5000 }, { type: 'pulse' }] - Bounce for 5s, then pulse\n * - [{ type: 'spin', durationMs: 3000 }, { type: 'pulse-spin', durationMs: 3000 }, { type: 'pulse' }]\n *\n * If not specified, defaults to 'pulse' for standard theme or random selection for others.\n */\n animations?: LoadingAnimationType | AnimationStep[];\n}\n\n/**\n * Standard (default) theme used when no seasonal theme applies.\n * Keeps MJ blue throughout loading with no color changes.\n */\nexport const STANDARD_THEME: LoadingTheme = {\n id: 'standard',\n name: 'Standard',\n startsAt: { month: 1, day: 1 },\n endsAt: { month: 12, day: 31 },\n staticColors: true, // Keep MJ blue the whole time\n animations: 'pulse', // Calm, professional pulse animation only\n colors: [\n '#264FAF', // MJ Blue (only color used)\n ],\n messages: [\n 'Loading workspace...',\n 'Warming up the engines... 🚀',\n 'Fetching your applications...',\n 'Preparing your dashboards... 📊',\n 'Connecting the dots...',\n 'Almost there... ⏳',\n 'Loading your favorites...',\n 'Syncing your workspace... 🔄',\n 'Initializing components...',\n 'Getting things ready...',\n 'Just a moment... ⌛',\n 'Brewing some magic... ✨',\n 'Polishing the interface...',\n 'Loading your data... 📦',\n 'Configuring your experience...',\n 'Hang tight... 🎯',\n 'Spinning up resources...',\n 'Preparing your view... 👀',\n 'Loading configurations...',\n 'Setting up your environment... ⚙️',\n 'Gathering your tools... 🔧',\n 'Assembling the pieces...',\n 'Checking permissions... 🔐',\n 'Loading preferences...',\n 'Almost ready to go... 🏁',\n ],\n};\n\n/**\n * Winter Holiday theme (December 1-31) - Global\n * Uses alternating Red→Green and Green→Red gradients\n */\nexport const WINTER_HOLIDAY_THEME: LoadingTheme = {\n id: 'winter-holiday',\n name: 'Winter Holidays',\n startsAt: { month: 12, day: 1 },\n endsAt: { month: 12, day: 31 },\n // Festive bounce to start, then gentle pulse\n animations: [\n { type: 'bounce', durationMs: 4000 },\n { type: 'pulse' }\n ],\n colors: [\n '#C41E3A', // Christmas Red\n '#228B22', // Forest Green\n '#FFD700', // Gold\n '#87CEEB', // Sky Blue (icy)\n '#8B4513', // Saddle Brown (cozy)\n ],\n gradients: [\n { startColor: '#C41E3A', endColor: '#228B22', angle: 45 }, // Red to Green\n { startColor: '#228B22', endColor: '#C41E3A', angle: 45 }, // Green to Red\n { startColor: '#C41E3A', endColor: '#FFD700', angle: 45 }, // Red to Gold\n { startColor: '#FFD700', endColor: '#228B22', angle: 45 }, // Gold to Green\n { startColor: '#87CEEB', endColor: '#C41E3A', angle: 45 }, // Ice Blue to Red\n ],\n messages: [\n 'Loading workspace...',\n 'Happy Holidays! 🎄',\n 'Spreading holiday cheer... ✨',\n 'Warming up by the fire... 🔥',\n 'Unwrapping your workspace... 🎁',\n 'Jingling all the way... 🔔',\n 'Decking the halls...',\n 'Making spirits bright... ⭐',\n 'Dashing through the data... 🦌',\n 'Wrapping up the details...',\n \"Season's greetings! ❄️\",\n 'Cozy loading vibes... ☕',\n 'Frosting the interface...',\n 'Lighting up your workspace... 💡',\n 'Holiday magic loading... ✨',\n 'Almost ready to celebrate... 🎉',\n 'Spreading warmth and joy...',\n 'Twinkling with excitement... ⭐',\n 'Gathering around the data...',\n 'Festive preparations underway... 🎄',\n 'Making memories load...',\n 'Warming your workspace...',\n 'Sprinkling holiday dust... ✨',\n 'Preparing your gift... 🎁',\n 'Joy is loading... 😊',\n ],\n};\n\n/**\n * New Year theme (December 31 - January 2) - Global\n */\nexport const NEW_YEAR_THEME: LoadingTheme = {\n id: 'new-year',\n name: 'New Year',\n startsAt: { month: 12, day: 31 },\n endsAt: { month: 1, day: 2 },\n priority: 10, // Higher priority than Winter Holiday\n // Exciting spin for countdown feel, then celebratory pulse-spin\n animations: [\n { type: 'spin', durationMs: 3000 },\n { type: 'pulse-spin', durationMs: 4000 },\n { type: 'pulse' }\n ],\n colors: [\n '#FFD700', // Gold\n '#C0C0C0', // Silver\n '#4169E1', // Royal Blue\n '#9400D3', // Dark Violet\n '#FF1493', // Deep Pink\n ],\n gradients: [\n { startColor: '#FFD700', endColor: '#C0C0C0', angle: 135 }, // Gold to Silver\n { startColor: '#C0C0C0', endColor: '#FFD700', angle: 135 }, // Silver to Gold\n { startColor: '#FFD700', endColor: '#4169E1', angle: 135 }, // Gold to Blue\n { startColor: '#4169E1', endColor: '#9400D3', angle: 135 }, // Blue to Violet\n { startColor: '#9400D3', endColor: '#FF1493', angle: 135 }, // Violet to Pink\n ],\n messages: [\n 'Loading workspace...',\n 'Happy New Year! 🎆',\n 'New year, new possibilities... ✨',\n 'Counting down to greatness... ⏰',\n 'Popping the confetti... 🎊',\n 'Cheers to new beginnings! 🥂',\n 'Ringing in the new year... 🔔',\n 'Fresh start loading... 🌟',\n 'Making resolutions...',\n 'Celebrating new opportunities... 🎉',\n 'Sparkling with anticipation... ✨',\n 'A fresh chapter begins... 📖',\n 'Toasting to success... 🥂',\n \"Here's to a great year! 🎆\",\n 'New adventures await... 🚀',\n 'Loading your best year yet...',\n 'Fireworks of data... 🎇',\n 'Midnight magic... 🌙',\n 'Starting fresh...',\n 'New horizons loading... 🌅',\n 'Embracing the future...',\n 'Ready for amazing things... ⭐',\n 'A blank canvas awaits... 🎨',\n 'Possibilities are endless... ♾️',\n 'Your year is loading... 📅',\n ],\n};\n\n/**\n * Halloween theme (October 15-31) - Global\n */\nexport const HALLOWEEN_THEME: LoadingTheme = {\n id: 'halloween',\n name: 'Halloween',\n startsAt: { month: 10, day: 15 },\n endsAt: { month: 10, day: 31 },\n // Spooky slow pulse-spin, then eerie pulse\n animations: [\n { type: 'pulse-spin', durationMs: 5000 },\n { type: 'pulse' }\n ],\n colors: [\n '#FF6600', // Pumpkin Orange\n '#8B008B', // Dark Magenta\n '#2E8B57', // Sea Green (witchy)\n '#800080', // Purple\n '#000000', // Black\n ],\n gradients: [\n { startColor: '#FF6600', endColor: '#8B008B', angle: 45 }, // Orange to Magenta\n { startColor: '#8B008B', endColor: '#FF6600', angle: 45 }, // Magenta to Orange\n { startColor: '#FF6600', endColor: '#000000', angle: 45 }, // Orange to Black\n { startColor: '#800080', endColor: '#2E8B57', angle: 45 }, // Purple to Green\n { startColor: '#2E8B57', endColor: '#FF6600', angle: 45 }, // Green to Orange\n ],\n messages: [\n 'Loading workspace...',\n 'Summoning your data... 🔮',\n 'Brewing a spooky potion... 🧙',\n 'Creeping through the code...',\n 'Trick or treat! 🎃',\n 'Haunting your workspace... 👻',\n 'Carving out some time... 🎃',\n 'Spooky loading noises... 💀',\n 'Conjuring your dashboards... ✨',\n 'Ghostly preparations... 👻',\n 'Waking the monsters...',\n 'Something wicked loading... 🦇',\n 'Boo! Almost there... 👻',\n 'Cackling with excitement...',\n 'Enchanting your experience... 🔮',\n 'The witching hour approaches... 🌙',\n 'Stirring the cauldron... 🧪',\n 'Unleashing the spirits...',\n 'Cobwebs are clearing... 🕸️',\n 'Moonlight loading... 🌕',\n 'Creaky doors opening...',\n 'Pumpkins are glowing... 🎃',\n 'Bats are flying... 🦇',\n 'Spine-tingling preparations...',\n 'Eerie data emerging... 💀',\n ],\n};\n\n/**\n * Valentine's Day theme (February 1-14) - Global\n */\nexport const VALENTINES_THEME: LoadingTheme = {\n id: 'valentines',\n name: \"Valentine's Day\",\n startsAt: { month: 2, day: 1 },\n endsAt: { month: 2, day: 14 },\n // Heartbeat-like pulse throughout\n animations: 'pulse',\n colors: [\n '#FF69B4', // Hot Pink\n '#DC143C', // Crimson\n '#FFB6C1', // Light Pink\n '#C71585', // Medium Violet Red\n '#FF1493', // Deep Pink\n ],\n gradients: [\n { startColor: '#FF69B4', endColor: '#DC143C', angle: 45 }, // Hot Pink to Crimson\n { startColor: '#DC143C', endColor: '#FF69B4', angle: 45 }, // Crimson to Hot Pink\n { startColor: '#FFB6C1', endColor: '#C71585', angle: 45 }, // Light Pink to Violet Red\n { startColor: '#C71585', endColor: '#FF1493', angle: 45 }, // Violet Red to Deep Pink\n { startColor: '#FF1493', endColor: '#FFB6C1', angle: 45 }, // Deep Pink to Light Pink\n ],\n messages: [\n 'Loading workspace...',\n 'Hearts are loading... 💕',\n 'Cupid is on the way... 💘',\n 'Sweet things coming... 🍫',\n 'Roses are loading... 🌹',\n 'Be mine, almost ready... 💝',\n 'Chocolate loading... 🍫',\n 'Heart-shaped preparations... 💖',\n 'Romance in progress... 💑',\n 'XOXO loading... 😘',\n 'Sweet nothings compiling... 💌',\n 'Heartfelt data incoming... 💗',\n 'Candy hearts loading... 🍬',\n 'Affection initializing... 💓',\n 'Tenderness loading...',\n 'Sweet surprises ahead... 🎁',\n 'Butterflies are loading... 🦋',\n 'Warm fuzzies incoming... 💕',\n 'Smitten with data... 💘',\n 'Adoring your workspace... 💖',\n ],\n};\n\n/**\n * St. Patrick's Day theme (March 14-17) - Global\n */\nexport const ST_PATRICKS_THEME: LoadingTheme = {\n id: 'st-patricks',\n name: \"St. Patrick's Day\",\n startsAt: { month: 3, day: 14 },\n endsAt: { month: 3, day: 17 },\n // Lucky bounce, then pulse\n animations: [\n { type: 'bounce', durationMs: 3000 },\n { type: 'pulse' }\n ],\n colors: [\n '#228B22', // Forest Green\n '#32CD32', // Lime Green\n '#FFD700', // Gold\n '#006400', // Dark Green\n '#90EE90', // Light Green\n ],\n gradients: [\n { startColor: '#228B22', endColor: '#FFD700', angle: 45 }, // Forest Green to Gold\n { startColor: '#FFD700', endColor: '#228B22', angle: 45 }, // Gold to Forest Green\n { startColor: '#32CD32', endColor: '#006400', angle: 45 }, // Lime to Dark Green\n { startColor: '#006400', endColor: '#90EE90', angle: 45 }, // Dark to Light Green\n { startColor: '#90EE90', endColor: '#FFD700', angle: 45 }, // Light Green to Gold\n ],\n messages: [\n 'Loading workspace...',\n 'Feeling lucky... 🍀',\n 'Finding the pot of gold... 🌈',\n 'Shamrocks are loading... ☘️',\n 'Top of the morning! ☀️',\n 'Luck of the Irish... 🍀',\n 'Chasing rainbows... 🌈',\n 'Green with excitement...',\n 'Leprechaun approved... 🎩',\n 'Four-leaf clover found... 🍀',\n 'Irish eyes are smiling... 😊',\n 'Lucky charms loading... ⭐',\n 'Emerald data incoming... 💎',\n 'Slainte! Loading... 🍺',\n 'Golden treasures loading... 🪙',\n 'Celtic magic brewing... ✨',\n 'Lucky stars aligning... ⭐',\n 'Pot of gold discovered... 🌈',\n 'Green beer loading... 🍺',\n 'Jig is loading... 💃',\n 'Blarney stone touched...',\n 'Lucky loading... 🍀',\n 'Fortunes are loading...',\n 'Magically delicious... ✨',\n ],\n};\n\n/**\n * Spring theme (March 20 - April 15) - Global\n */\nexport const SPRING_THEME: LoadingTheme = {\n id: 'spring',\n name: 'Spring',\n startsAt: { month: 3, day: 20 },\n endsAt: { month: 4, day: 15 },\n // Fresh, light bounce then gentle pulse\n animations: [\n { type: 'bounce', durationMs: 3000 },\n { type: 'pulse' }\n ],\n colors: [\n '#98FB98', // Pale Green\n '#FFB6C1', // Light Pink\n '#87CEEB', // Sky Blue\n '#DDA0DD', // Plum\n '#F0E68C', // Khaki (sunny)\n '#FFA07A', // Light Salmon\n ],\n gradients: [\n { startColor: '#98FB98', endColor: '#FFB6C1', angle: 45 }, // Green to Pink\n { startColor: '#FFB6C1', endColor: '#87CEEB', angle: 45 }, // Pink to Sky Blue\n { startColor: '#87CEEB', endColor: '#DDA0DD', angle: 45 }, // Sky Blue to Plum\n { startColor: '#DDA0DD', endColor: '#F0E68C', angle: 45 }, // Plum to Sunny\n { startColor: '#F0E68C', endColor: '#FFA07A', angle: 45 }, // Sunny to Salmon\n { startColor: '#FFA07A', endColor: '#98FB98', angle: 45 }, // Salmon to Green\n ],\n messages: [\n 'Loading workspace...',\n 'Spring is in the air... 🌸',\n 'Flowers are blooming... 🌷',\n 'Birds are singing... 🐦',\n 'Fresh beginnings... 🌱',\n 'Sunny days ahead... ☀️',\n 'Butterflies loading... 🦋',\n 'April showers loading... 🌧️',\n 'New growth emerging... 🌿',\n 'Blossoms are opening... 🌺',\n 'Spring cleaning data... 🧹',\n 'Buzzing with activity... 🐝',\n 'Nature is awakening... 🌳',\n 'Fresh air loading... 💨',\n 'Rainbow after rain... 🌈',\n 'Chirping preparations... 🐤',\n 'Planting seeds of data... 🌱',\n 'Springing into action... 🏃',\n 'Garden of data growing... 🌻',\n 'Warmth is returning... ☀️',\n 'Eggs are hatching... 🐣',\n 'Bunny hop loading... 🐰',\n 'Renewal in progress... 🔄',\n 'Pastel dreams loading... 🎨',\n 'Spring forward... ⏰',\n ],\n};\n\n/**\n * Thanksgiving theme (November 1-30) - US\n */\nexport const THANKSGIVING_US_THEME: LoadingTheme = {\n id: 'thanksgiving-us',\n name: 'Thanksgiving (US)',\n startsAt: { month: 11, day: 1 },\n endsAt: { month: 11, day: 30 },\n locales: ['en-US'],\n // Warm, cozy pulse throughout\n animations: 'pulse',\n colors: [\n '#D2691E', // Chocolate (brown)\n '#FF8C00', // Dark Orange\n '#8B4513', // Saddle Brown\n '#DAA520', // Goldenrod\n '#CD853F', // Peru\n '#B22222', // Firebrick (cranberry)\n ],\n gradients: [\n { startColor: '#D2691E', endColor: '#FF8C00', angle: 45 }, // Brown to Orange\n { startColor: '#FF8C00', endColor: '#D2691E', angle: 45 }, // Orange to Brown\n { startColor: '#8B4513', endColor: '#DAA520', angle: 45 }, // Saddle to Gold\n { startColor: '#DAA520', endColor: '#CD853F', angle: 45 }, // Gold to Peru\n { startColor: '#CD853F', endColor: '#B22222', angle: 45 }, // Peru to Cranberry\n { startColor: '#B22222', endColor: '#FF8C00', angle: 45 }, // Cranberry to Orange\n ],\n messages: [\n 'Loading workspace...',\n 'Giving thanks... 🙏',\n 'Harvest time loading... 🌾',\n 'Turkey is in the oven... 🦃',\n 'Grateful for you... 💛',\n 'Fall feast preparing... 🍂',\n 'Pumpkin pie loading... 🥧',\n 'Counting blessings... ✨',\n 'Autumn leaves falling... 🍁',\n 'Family gathering... 👨‍👩‍👧‍👦',\n 'Cornucopia of data... 🎃',\n 'Thankful preparations...',\n 'Gobble gobble loading... 🦃',\n 'Cranberry sauce ready...',\n 'Stuffing the data... 🍞',\n 'Warm and cozy loading... 🧣',\n 'Harvest moon rising... 🌕',\n 'Gratitude loading... 💛',\n 'Pilgrim progress...',\n 'Feast is preparing... 🍽️',\n 'Apple cider warming... 🍎',\n 'Leaves are crunching... 🍂',\n 'Sweater weather loading... 🧶',\n 'Hayride in progress... 🚜',\n 'Thankful vibes only... 🙏',\n ],\n};\n\n/**\n * Canadian Thanksgiving theme (October 1-14) - Canada\n */\nexport const THANKSGIVING_CA_THEME: LoadingTheme = {\n id: 'thanksgiving-ca',\n name: 'Thanksgiving (Canada)',\n startsAt: { month: 10, day: 1 },\n endsAt: { month: 10, day: 14 },\n locales: ['en-CA', 'fr-CA'],\n // Warm, cozy pulse throughout\n animations: 'pulse',\n colors: [\n '#D2691E', // Chocolate (brown)\n '#FF8C00', // Dark Orange\n '#8B4513', // Saddle Brown\n '#DAA520', // Goldenrod\n '#CD853F', // Peru\n '#C41E3A', // Maple red\n ],\n gradients: [\n { startColor: '#C41E3A', endColor: '#FF8C00', angle: 45 }, // Maple to Orange\n { startColor: '#FF8C00', endColor: '#C41E3A', angle: 45 }, // Orange to Maple\n { startColor: '#D2691E', endColor: '#DAA520', angle: 45 }, // Brown to Gold\n { startColor: '#DAA520', endColor: '#8B4513', angle: 45 }, // Gold to Saddle\n { startColor: '#8B4513', endColor: '#CD853F', angle: 45 }, // Saddle to Peru\n ],\n messages: [\n 'Loading workspace...',\n 'Giving thanks, eh... 🙏',\n 'Harvest time loading... 🌾',\n 'Turkey is roasting... 🦃',\n 'Grateful for you... 💛',\n 'Fall feast preparing... 🍂',\n 'Pumpkin pie loading... 🥧',\n 'Counting blessings... ✨',\n 'Maple leaves falling... 🍁',\n 'Family gathering... 👨‍👩‍👧‍👦',\n 'Cornucopia of data... 🎃',\n 'Thankful preparations...',\n 'Gobble gobble loading... 🦃',\n 'Cranberry sauce is tasty, eh?',\n 'Stuffing the data... 🍞',\n 'Warm and cozy loading... 🧣',\n 'Harvest moon rising... 🌕',\n 'Gratitude loading... 💛',\n 'Canadian warmth... 🇨🇦',\n 'Feast is preparing... 🍽️',\n 'Apple cider warming... 🍎',\n 'Leaves are crunching... 🍂',\n 'Sweater weather loading... 🧶',\n 'True north thankful... 🍁',\n 'Merci beaucoup... 💛',\n ],\n};\n\n/**\n * Independence Day theme (June 28 - July 4) - US\n */\nexport const INDEPENDENCE_DAY_US_THEME: LoadingTheme = {\n id: 'independence-day-us',\n name: 'Independence Day (US)',\n startsAt: { month: 6, day: 28 },\n endsAt: { month: 7, day: 4 },\n locales: ['en-US'],\n // Fireworks-like spin, then celebratory pulse-spin\n animations: [\n { type: 'spin', durationMs: 3000 },\n { type: 'pulse-spin', durationMs: 3000 },\n { type: 'pulse' }\n ],\n colors: [\n '#B22234', // Old Glory Red\n '#FFFFFF', // White\n '#3C3B6E', // Old Glory Blue\n ],\n gradients: [\n { startColor: '#B22234', endColor: '#3C3B6E', angle: 0 }, // Red to Blue\n { startColor: '#3C3B6E', endColor: '#B22234', angle: 0 }, // Blue to Red\n { startColor: '#B22234', endColor: '#FFFFFF', angle: 0 }, // Red to White\n { startColor: '#FFFFFF', endColor: '#3C3B6E', angle: 0 }, // White to Blue\n ],\n messages: [\n 'Loading workspace...',\n 'Happy 4th of July! 🎆',\n 'Land of the free loading... 🗽',\n 'Fireworks incoming... 🎇',\n 'Stars and stripes forever... ⭐',\n 'Liberty is loading... 🔔',\n 'Red, white, and blue... 🇺🇸',\n 'Freedom rings... 🔔',\n 'Patriotic preparations... 🦅',\n 'Sparklers are lit... ✨',\n 'BBQ is firing up... 🍔',\n 'Celebrating independence... 🎉',\n 'America the beautiful... 🏔️',\n 'Rockets red glare... 🚀',\n 'Bombs bursting in air... 🎆',\n 'United we load... 🤝',\n 'Liberty and justice... ⚖️',\n 'Star-spangled loading... ⭐',\n 'Freedom is loading... 🗽',\n 'Parade is starting... 🎺',\n 'Hot dogs are grilling... 🌭',\n 'Flags are waving... 🇺🇸',\n 'Independence loading... 📜',\n 'Sweet land of liberty... 🎶',\n 'Let freedom ring... 🔔',\n ],\n};\n\n/**\n * Canada Day theme (June 28 - July 1) - Canada\n */\nexport const CANADA_DAY_THEME: LoadingTheme = {\n id: 'canada-day',\n name: 'Canada Day',\n startsAt: { month: 6, day: 28 },\n endsAt: { month: 7, day: 1 },\n locales: ['en-CA', 'fr-CA'],\n // Celebratory bounce, then pulse\n animations: [\n { type: 'bounce', durationMs: 4000 },\n { type: 'pulse' }\n ],\n colors: [\n '#FF0000', // Red\n '#FFFFFF', // White\n ],\n gradients: [\n { startColor: '#FF0000', endColor: '#FFFFFF', angle: 0 }, // Red to White\n { startColor: '#FFFFFF', endColor: '#FF0000', angle: 0 }, // White to Red\n ],\n messages: [\n 'Loading workspace...',\n 'Happy Canada Day! 🇨🇦',\n 'Bonne fête du Canada! 🍁',\n 'True north strong and free... 🏔️',\n 'Celebrating Canada, eh... 🎉',\n 'Maple leaf loading... 🍁',\n 'Red and white pride... ❤️',\n 'From coast to coast... 🌊',\n 'O Canada loading... 🎶',\n 'Northern lights glowing... 🌌',\n 'Poutine is ready... 🍟',\n 'Hockey night loading... 🏒',\n 'Canadian spirit rising... 🇨🇦',\n 'Fireworks over Parliament... 🎆',\n 'Celebrating since 1867... 🎂',\n 'Mounties are ready... 🐴',\n 'Canadian pride loading... 💛',\n 'Land of the maple... 🍁',\n 'Strong and free... 💪',\n 'Celebrating together... 🤝',\n 'Northern beauty loading... 🏔️',\n 'Canadian hearts united... ❤️',\n 'Beaver approved... 🦫',\n 'Sorry for the wait, eh... 😊',\n 'True patriot love... 🇨🇦',\n ],\n};\n\n/**\n * Mexican Independence Day theme (September 13-16) - Mexico\n */\nexport const INDEPENDENCE_DAY_MX_THEME: LoadingTheme = {\n id: 'independence-day-mx',\n name: 'Mexican Independence Day',\n startsAt: { month: 9, day: 13 },\n endsAt: { month: 9, day: 16 },\n locales: ['es-MX', 'es'],\n priority: 5,\n // Fiesta spin, then celebratory pulse-spin\n animations: [\n { type: 'spin', durationMs: 3000 },\n { type: 'pulse-spin', durationMs: 3000 },\n { type: 'pulse' }\n ],\n colors: [\n '#006847', // Green\n '#FFFFFF', // White\n '#CE1126', // Red\n ],\n gradients: [\n { startColor: '#006847', endColor: '#CE1126', angle: 0 }, // Green to Red\n { startColor: '#CE1126', endColor: '#006847', angle: 0 }, // Red to Green\n { startColor: '#006847', endColor: '#FFFFFF', angle: 0 }, // Green to White\n { startColor: '#FFFFFF', endColor: '#CE1126', angle: 0 }, // White to Red\n ],\n messages: [\n 'Cargando espacio de trabajo...',\n '¡Viva México! 🇲🇽',\n 'Felices fiestas patrias... 🎉',\n 'Verde, blanco y rojo... 💚',\n 'Orgullo mexicano... 🦅',\n 'Celebrando la independencia... 🎊',\n 'Mariachi is playing... 🎺',\n 'Fiesta mexicana... 🎉',\n 'Tradiciones cargando... 🌮',\n 'Cultura loading... 🎨',\n 'Alegría mexicana... 😊',\n 'Colores patrios... 🇲🇽',\n 'Libertad cargando... ⭐',\n 'Heroes remembered... 🏛️',\n 'México lindo y querido... ❤️',\n 'Corazón mexicano... 💚',\n 'Fuegos artificiales... 🎆',\n 'Celebración patria... 🎊',\n 'Unidos por México... 🤝',\n 'Orgullo nacional... 🦅',\n 'Tradición y cultura... 🎭',\n 'México en el corazón... ❤️',\n '¡Que viva México! 🇲🇽',\n 'Patria querida... 💛',\n ],\n};\n\n/**\n * Indian Independence Day theme (August 13-15) - India\n */\nexport const INDEPENDENCE_DAY_IN_THEME: LoadingTheme = {\n id: 'independence-day-in',\n name: 'Indian Independence Day',\n startsAt: { month: 8, day: 13 },\n endsAt: { month: 8, day: 15 },\n locales: ['en-IN', 'hi', 'hi-IN'],\n // Patriotic spin, then pulse\n animations: [\n { type: 'spin', durationMs: 3000 },\n { type: 'pulse' }\n ],\n colors: [\n '#FF9933', // Saffron\n '#FFFFFF', // White\n '#138808', // Green\n '#000080', // Navy Blue (Ashoka Chakra)\n ],\n gradients: [\n { startColor: '#FF9933', endColor: '#138808', angle: 90 }, // Saffron to Green\n { startColor: '#138808', endColor: '#FF9933', angle: 90 }, // Green to Saffron\n { startColor: '#FF9933', endColor: '#FFFFFF', angle: 90 }, // Saffron to White\n { startColor: '#FFFFFF', endColor: '#138808', angle: 90 }, // White to Green\n ],\n messages: [\n 'Loading workspace...',\n 'Jai Hind! 🇮🇳',\n 'Happy Independence Day! 🎉',\n 'Celebrating freedom... 🕊️',\n 'Tiranga is flying... 🇮🇳',\n 'Unity in diversity... 🤝',\n 'Saffron, white, and green... 🧡',\n 'Mera Bharat Mahan... ✨',\n 'Pride of India loading... 🦚',\n 'Freedom fighters remembered... 🙏',\n 'Vande Mataram... 🎶',\n 'Indian spirit rising... 💪',\n 'Patriotic vibes... 🇮🇳',\n 'From Himalayas to oceans... 🏔️',\n 'Incredible India loading... ✨',\n 'Azadi ka Amrit... 🪔',\n 'Bharat Mata ki Jai... 🙏',\n 'Unity is strength... 💪',\n 'Democratic dreams... ⭐',\n 'Secular spirit loading... 🤝',\n 'Rich heritage loading... 🏛️',\n 'Cultural pride... 💃',\n 'National anthem playing... 🎵',\n 'Tricolor pride... 🧡',\n 'India shining... ✨',\n ],\n};\n\n/**\n * Diwali theme (variable dates, roughly October-November) - India\n * Using a broad range since Diwali dates change yearly\n */\nexport const DIWALI_THEME: LoadingTheme = {\n id: 'diwali',\n name: 'Diwali',\n startsAt: { month: 10, day: 20 },\n endsAt: { month: 11, day: 15 },\n locales: ['en-IN', 'hi', 'hi-IN'],\n priority: 5,\n // Festival of lights - glowing pulse-spin, then warm pulse\n animations: [\n { type: 'pulse-spin', durationMs: 4000 },\n { type: 'pulse' }\n ],\n colors: [\n '#FFD700', // Gold\n '#FF6600', // Orange (diyas)\n '#8B0000', // Dark Red\n '#9400D3', // Dark Violet\n '#FF1493', // Deep Pink\n ],\n gradients: [\n { startColor: '#FFD700', endColor: '#FF6600', angle: 45 }, // Gold to Orange\n { startColor: '#FF6600', endColor: '#FFD700', angle: 45 }, // Orange to Gold\n { startColor: '#FFD700', endColor: '#8B0000', angle: 45 }, // Gold to Dark Red\n { startColor: '#8B0000', endColor: '#9400D3', angle: 45 }, // Red to Violet\n { startColor: '#9400D3', endColor: '#FF1493', angle: 45 }, // Violet to Pink\n ],\n messages: [\n 'Loading workspace...',\n 'Happy Diwali! 🪔',\n 'Shubh Deepavali! ✨',\n 'Festival of lights... 💡',\n 'Diyas are glowing... 🪔',\n 'Spreading brightness... ✨',\n 'Lakshmi blessings... 🙏',\n 'Rangoli loading... 🎨',\n 'Sweet celebrations... 🍬',\n 'Light over darkness... 💡',\n 'Prosperity loading... 🪙',\n 'Fireworks of joy... 🎆',\n 'Golden blessings... ✨',\n 'Festive vibes... 🎉',\n 'Sweets are ready... 🍪',\n 'Family gathering... 👨‍👩‍👧‍👦',\n 'New beginnings... 🌟',\n 'Divine blessings... 🙏',\n 'Auspicious loading... ⭐',\n 'Celebration mode... 🎊',\n 'Sparklers glowing... ✨',\n 'Joy and happiness... 😊',\n 'Wealth and wisdom... 📚',\n 'Radiant preparations... 💫',\n 'Illuminating your day... 🪔',\n ],\n};\n\n/**\n * All available themes in priority order.\n * More specific themes (regional, higher priority) should come first.\n */\nexport const ALL_THEMES: LoadingTheme[] = [\n // Regional/specific themes (higher priority)\n NEW_YEAR_THEME,\n DIWALI_THEME,\n INDEPENDENCE_DAY_MX_THEME,\n INDEPENDENCE_DAY_IN_THEME,\n INDEPENDENCE_DAY_US_THEME,\n CANADA_DAY_THEME,\n THANKSGIVING_CA_THEME,\n THANKSGIVING_US_THEME,\n\n // Global themes\n HALLOWEEN_THEME,\n VALENTINES_THEME,\n ST_PATRICKS_THEME,\n SPRING_THEME,\n WINTER_HOLIDAY_THEME,\n\n // Default fallback (always matches)\n STANDARD_THEME,\n];\n\n/**\n * Get the user's browser locale.\n */\nexport function getBrowserLocale(): string {\n if (typeof navigator !== 'undefined') {\n return navigator.language || (navigator as { userLanguage?: string }).userLanguage || 'en';\n }\n return 'en';\n}\n\n/**\n * Check if a theme's date range includes today.\n * Handles ranges that span year boundaries (e.g., Dec 31 - Jan 2).\n */\nfunction isDateInRange(\n today: { month: number; day: number },\n start: { month: number; day: number },\n end: { month: number; day: number }\n): boolean {\n const todayValue = today.month * 100 + today.day;\n const startValue = start.month * 100 + start.day;\n const endValue = end.month * 100 + end.day;\n\n if (startValue <= endValue) {\n // Normal range (e.g., Mar 14 - Mar 17)\n return todayValue >= startValue && todayValue <= endValue;\n } else {\n // Range spans year boundary (e.g., Dec 31 - Jan 2)\n return todayValue >= startValue || todayValue <= endValue;\n }\n}\n\n/**\n * Check if a locale matches any of the theme's allowed locales.\n * Supports partial matching (e.g., 'en' matches 'en-US', 'en-GB').\n */\nfunction localeMatches(userLocale: string, themeLocales?: string[]): boolean {\n if (!themeLocales || themeLocales.length === 0) {\n return true; // No locale restriction means global theme\n }\n\n const normalizedUserLocale = userLocale.toLowerCase();\n\n return themeLocales.some(themeLocale => {\n const normalizedThemeLocale = themeLocale.toLowerCase();\n // Exact match or prefix match\n return normalizedUserLocale === normalizedThemeLocale ||\n normalizedUserLocale.startsWith(normalizedThemeLocale + '-') ||\n normalizedThemeLocale.startsWith(normalizedUserLocale + '-');\n });\n}\n\n/**\n * Find the best matching theme for the current date and locale.\n * Returns the highest priority matching theme, or STANDARD_THEME if none match.\n */\nexport function getActiveTheme(date: Date = new Date(), locale?: string): LoadingTheme {\n const userLocale = locale || getBrowserLocale();\n const today = { month: date.getMonth() + 1, day: date.getDate() };\n\n // Find all matching themes\n const matchingThemes = ALL_THEMES.filter(theme => {\n const dateMatches = isDateInRange(today, theme.startsAt, theme.endsAt);\n const localeMatch = localeMatches(userLocale, theme.locales);\n return dateMatches && localeMatch;\n });\n\n if (matchingThemes.length === 0) {\n return STANDARD_THEME;\n }\n\n // Sort by priority (higher first) and return the best match\n matchingThemes.sort((a, b) => (b.priority || 0) - (a.priority || 0));\n\n // If the best match is STANDARD_THEME and there are other matches, prefer those\n if (matchingThemes[0].id === 'standard' && matchingThemes.length > 1) {\n return matchingThemes[1];\n }\n\n return matchingThemes[0];\n}\n"]}
1
+ {"version":3,"file":"loading-themes.js","sourceRoot":"","sources":["../../../src/lib/shell/loading-themes.ts"],"names":[],"mappings":"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","sourcesContent":["import { LogoGradient } from '@memberjunction/ng-shared-generic';\n\n/**\n * Available animation types for the loading screen.\n */\nexport type LoadingAnimationType = 'pulse' | 'spin' | 'bounce' | 'pulse-spin';\n\n/**\n * Configuration for an animation step in a sequence.\n */\nexport interface AnimationStep {\n /** The animation type to use */\n type: LoadingAnimationType;\n\n /**\n * Duration in milliseconds for this animation step.\n * If not specified or 0, this animation runs for the remainder of loading.\n * Use this to create sequences like: bounce for 5s, then pulse for the rest.\n */\n durationMs?: number;\n}\n\n/**\n * Configuration for a seasonal loading theme.\n * Themes are selected based on date range and optionally locale.\n */\nexport interface LoadingTheme {\n /** Unique identifier for the theme */\n id: string;\n\n /** Human-readable name for the theme */\n name: string;\n\n /** Month (1-12) and day when this theme starts */\n startsAt: { month: number; day: number };\n\n /** Month (1-12) and day when this theme ends (inclusive) */\n endsAt: { month: number; day: number };\n\n /**\n * Optional locale codes where this theme applies.\n * Uses BCP 47 language tags (e.g., 'en-US', 'en-CA', 'es-MX').\n * If undefined or empty, theme applies globally.\n * Can include partial matches (e.g., 'en' matches 'en-US', 'en-GB', etc.)\n */\n locales?: string[];\n\n /**\n * Array of theme colors used for the logo and text.\n * Colors are cycled through as loading progresses.\n * For the standard theme, only the first color is used (no changes).\n */\n colors: string[];\n\n /**\n * Optional array of gradient configurations for the logo.\n * When set, gradients are alternated through as loading progresses.\n * Takes precedence over solid colors for the logo fill.\n * If only one gradient is provided, it's used throughout.\n */\n gradients?: LogoGradient[];\n\n /**\n * Array of themed messages to display during loading.\n * Should contain at least 25 messages for variety.\n */\n messages: string[];\n\n /**\n * Priority for theme selection when multiple themes match.\n * Higher priority themes are selected over lower priority ones.\n * Default is 0. More specific themes (e.g., regional) should have higher priority.\n */\n priority?: number;\n\n /**\n * If true, colors and gradients remain fixed (no cycling).\n * Used for standard theme to keep MJ blue throughout.\n */\n staticColors?: boolean;\n\n /**\n * Animation configuration for this theme.\n * Can be a single animation type (string) or an array of AnimationSteps for sequences.\n *\n * Examples:\n * - 'pulse' - Use pulse animation throughout\n * - [{ type: 'bounce', durationMs: 5000 }, { type: 'pulse' }] - Bounce for 5s, then pulse\n * - [{ type: 'spin', durationMs: 3000 }, { type: 'pulse-spin', durationMs: 3000 }, { type: 'pulse' }]\n *\n * If not specified, defaults to 'pulse' for standard theme or random selection for others.\n */\n animations?: LoadingAnimationType | AnimationStep[];\n}\n\n/**\n * Standard (default) theme used when no seasonal theme applies.\n * Keeps MJ blue throughout loading with no color changes.\n */\nexport const STANDARD_THEME: LoadingTheme = {\n id: 'standard',\n name: 'Standard',\n startsAt: { month: 1, day: 1 },\n endsAt: { month: 12, day: 31 },\n staticColors: true, // Keep MJ blue the whole time\n animations: 'pulse', // Calm, professional pulse animation only\n colors: [\n '', // Uses --mj-logo-color CSS variable (adapts to theme)\n ],\n messages: [\n 'Loading workspace...',\n 'Warming up the engines... 🚀',\n 'Fetching your applications...',\n 'Preparing your dashboards... 📊',\n 'Connecting the dots...',\n 'Almost there... ⏳',\n 'Loading your favorites...',\n 'Syncing your workspace... 🔄',\n 'Initializing components...',\n 'Getting things ready...',\n 'Just a moment... ⌛',\n 'Brewing some magic... ✨',\n 'Polishing the interface...',\n 'Loading your data... 📦',\n 'Configuring your experience...',\n 'Hang tight... 🎯',\n 'Spinning up resources...',\n 'Preparing your view... 👀',\n 'Loading configurations...',\n 'Setting up your environment... ⚙️',\n 'Gathering your tools... 🔧',\n 'Assembling the pieces...',\n 'Checking permissions... 🔐',\n 'Loading preferences...',\n 'Almost ready to go... 🏁',\n ],\n};\n\n/**\n * Winter Holiday theme (December 1-31) - Global\n * Uses alternating Red→Green and Green→Red gradients\n */\nexport const WINTER_HOLIDAY_THEME: LoadingTheme = {\n id: 'winter-holiday',\n name: 'Winter Holidays',\n startsAt: { month: 12, day: 1 },\n endsAt: { month: 12, day: 31 },\n // Festive bounce to start, then gentle pulse\n animations: [\n { type: 'bounce', durationMs: 4000 },\n { type: 'pulse' }\n ],\n colors: [\n '#C41E3A', // Christmas Red\n '#228B22', // Forest Green\n '#FFD700', // Gold\n '#87CEEB', // Sky Blue (icy)\n '#8B4513', // Saddle Brown (cozy)\n ],\n gradients: [\n { startColor: '#C41E3A', endColor: '#228B22', angle: 45 }, // Red to Green\n { startColor: '#228B22', endColor: '#C41E3A', angle: 45 }, // Green to Red\n { startColor: '#C41E3A', endColor: '#FFD700', angle: 45 }, // Red to Gold\n { startColor: '#FFD700', endColor: '#228B22', angle: 45 }, // Gold to Green\n { startColor: '#87CEEB', endColor: '#C41E3A', angle: 45 }, // Ice Blue to Red\n ],\n messages: [\n 'Loading workspace...',\n 'Happy Holidays! 🎄',\n 'Spreading holiday cheer... ✨',\n 'Warming up by the fire... 🔥',\n 'Unwrapping your workspace... 🎁',\n 'Jingling all the way... 🔔',\n 'Decking the halls...',\n 'Making spirits bright... ⭐',\n 'Dashing through the data... 🦌',\n 'Wrapping up the details...',\n \"Season's greetings! ❄️\",\n 'Cozy loading vibes... ☕',\n 'Frosting the interface...',\n 'Lighting up your workspace... 💡',\n 'Holiday magic loading... ✨',\n 'Almost ready to celebrate... 🎉',\n 'Spreading warmth and joy...',\n 'Twinkling with excitement... ⭐',\n 'Gathering around the data...',\n 'Festive preparations underway... 🎄',\n 'Making memories load...',\n 'Warming your workspace...',\n 'Sprinkling holiday dust... ✨',\n 'Preparing your gift... 🎁',\n 'Joy is loading... 😊',\n ],\n};\n\n/**\n * New Year theme (December 31 - January 2) - Global\n */\nexport const NEW_YEAR_THEME: LoadingTheme = {\n id: 'new-year',\n name: 'New Year',\n startsAt: { month: 12, day: 31 },\n endsAt: { month: 1, day: 2 },\n priority: 10, // Higher priority than Winter Holiday\n // Exciting spin for countdown feel, then celebratory pulse-spin\n animations: [\n { type: 'spin', durationMs: 3000 },\n { type: 'pulse-spin', durationMs: 4000 },\n { type: 'pulse' }\n ],\n colors: [\n '#FFD700', // Gold\n '#C0C0C0', // Silver\n '#4169E1', // Royal Blue\n '#9400D3', // Dark Violet\n '#FF1493', // Deep Pink\n ],\n gradients: [\n { startColor: '#FFD700', endColor: '#C0C0C0', angle: 135 }, // Gold to Silver\n { startColor: '#C0C0C0', endColor: '#FFD700', angle: 135 }, // Silver to Gold\n { startColor: '#FFD700', endColor: '#4169E1', angle: 135 }, // Gold to Blue\n { startColor: '#4169E1', endColor: '#9400D3', angle: 135 }, // Blue to Violet\n { startColor: '#9400D3', endColor: '#FF1493', angle: 135 }, // Violet to Pink\n ],\n messages: [\n 'Loading workspace...',\n 'Happy New Year! 🎆',\n 'New year, new possibilities... ✨',\n 'Counting down to greatness... ⏰',\n 'Popping the confetti... 🎊',\n 'Cheers to new beginnings! 🥂',\n 'Ringing in the new year... 🔔',\n 'Fresh start loading... 🌟',\n 'Making resolutions...',\n 'Celebrating new opportunities... 🎉',\n 'Sparkling with anticipation... ✨',\n 'A fresh chapter begins... 📖',\n 'Toasting to success... 🥂',\n \"Here's to a great year! 🎆\",\n 'New adventures await... 🚀',\n 'Loading your best year yet...',\n 'Fireworks of data... 🎇',\n 'Midnight magic... 🌙',\n 'Starting fresh...',\n 'New horizons loading... 🌅',\n 'Embracing the future...',\n 'Ready for amazing things... ⭐',\n 'A blank canvas awaits... 🎨',\n 'Possibilities are endless... ♾️',\n 'Your year is loading... 📅',\n ],\n};\n\n/**\n * Halloween theme (October 15-31) - Global\n */\nexport const HALLOWEEN_THEME: LoadingTheme = {\n id: 'halloween',\n name: 'Halloween',\n startsAt: { month: 10, day: 15 },\n endsAt: { month: 10, day: 31 },\n // Spooky slow pulse-spin, then eerie pulse\n animations: [\n { type: 'pulse-spin', durationMs: 5000 },\n { type: 'pulse' }\n ],\n colors: [\n '#FF6600', // Pumpkin Orange\n '#8B008B', // Dark Magenta\n '#2E8B57', // Sea Green (witchy)\n '#800080', // Purple\n '#000000', // Black\n ],\n gradients: [\n { startColor: '#FF6600', endColor: '#8B008B', angle: 45 }, // Orange to Magenta\n { startColor: '#8B008B', endColor: '#FF6600', angle: 45 }, // Magenta to Orange\n { startColor: '#FF6600', endColor: '#000000', angle: 45 }, // Orange to Black\n { startColor: '#800080', endColor: '#2E8B57', angle: 45 }, // Purple to Green\n { startColor: '#2E8B57', endColor: '#FF6600', angle: 45 }, // Green to Orange\n ],\n messages: [\n 'Loading workspace...',\n 'Summoning your data... 🔮',\n 'Brewing a spooky potion... 🧙',\n 'Creeping through the code...',\n 'Trick or treat! 🎃',\n 'Haunting your workspace... 👻',\n 'Carving out some time... 🎃',\n 'Spooky loading noises... 💀',\n 'Conjuring your dashboards... ✨',\n 'Ghostly preparations... 👻',\n 'Waking the monsters...',\n 'Something wicked loading... 🦇',\n 'Boo! Almost there... 👻',\n 'Cackling with excitement...',\n 'Enchanting your experience... 🔮',\n 'The witching hour approaches... 🌙',\n 'Stirring the cauldron... 🧪',\n 'Unleashing the spirits...',\n 'Cobwebs are clearing... 🕸️',\n 'Moonlight loading... 🌕',\n 'Creaky doors opening...',\n 'Pumpkins are glowing... 🎃',\n 'Bats are flying... 🦇',\n 'Spine-tingling preparations...',\n 'Eerie data emerging... 💀',\n ],\n};\n\n/**\n * Valentine's Day theme (February 1-14) - Global\n */\nexport const VALENTINES_THEME: LoadingTheme = {\n id: 'valentines',\n name: \"Valentine's Day\",\n startsAt: { month: 2, day: 1 },\n endsAt: { month: 2, day: 14 },\n // Heartbeat-like pulse throughout\n animations: 'pulse',\n colors: [\n '#FF69B4', // Hot Pink\n '#DC143C', // Crimson\n '#FFB6C1', // Light Pink\n '#C71585', // Medium Violet Red\n '#FF1493', // Deep Pink\n ],\n gradients: [\n { startColor: '#FF69B4', endColor: '#DC143C', angle: 45 }, // Hot Pink to Crimson\n { startColor: '#DC143C', endColor: '#FF69B4', angle: 45 }, // Crimson to Hot Pink\n { startColor: '#FFB6C1', endColor: '#C71585', angle: 45 }, // Light Pink to Violet Red\n { startColor: '#C71585', endColor: '#FF1493', angle: 45 }, // Violet Red to Deep Pink\n { startColor: '#FF1493', endColor: '#FFB6C1', angle: 45 }, // Deep Pink to Light Pink\n ],\n messages: [\n 'Loading workspace...',\n 'Hearts are loading... 💕',\n 'Cupid is on the way... 💘',\n 'Sweet things coming... 🍫',\n 'Roses are loading... 🌹',\n 'Be mine, almost ready... 💝',\n 'Chocolate loading... 🍫',\n 'Heart-shaped preparations... 💖',\n 'Romance in progress... 💑',\n 'XOXO loading... 😘',\n 'Sweet nothings compiling... 💌',\n 'Heartfelt data incoming... 💗',\n 'Candy hearts loading... 🍬',\n 'Affection initializing... 💓',\n 'Tenderness loading...',\n 'Sweet surprises ahead... 🎁',\n 'Butterflies are loading... 🦋',\n 'Warm fuzzies incoming... 💕',\n 'Smitten with data... 💘',\n 'Adoring your workspace... 💖',\n ],\n};\n\n/**\n * St. Patrick's Day theme (March 14-17) - Global\n */\nexport const ST_PATRICKS_THEME: LoadingTheme = {\n id: 'st-patricks',\n name: \"St. Patrick's Day\",\n startsAt: { month: 3, day: 14 },\n endsAt: { month: 3, day: 17 },\n // Lucky bounce, then pulse\n animations: [\n { type: 'bounce', durationMs: 3000 },\n { type: 'pulse' }\n ],\n colors: [\n '#228B22', // Forest Green\n '#32CD32', // Lime Green\n '#FFD700', // Gold\n '#006400', // Dark Green\n '#90EE90', // Light Green\n ],\n gradients: [\n { startColor: '#228B22', endColor: '#FFD700', angle: 45 }, // Forest Green to Gold\n { startColor: '#FFD700', endColor: '#228B22', angle: 45 }, // Gold to Forest Green\n { startColor: '#32CD32', endColor: '#006400', angle: 45 }, // Lime to Dark Green\n { startColor: '#006400', endColor: '#90EE90', angle: 45 }, // Dark to Light Green\n { startColor: '#90EE90', endColor: '#FFD700', angle: 45 }, // Light Green to Gold\n ],\n messages: [\n 'Loading workspace...',\n 'Feeling lucky... 🍀',\n 'Finding the pot of gold... 🌈',\n 'Shamrocks are loading... ☘️',\n 'Top of the morning! ☀️',\n 'Luck of the Irish... 🍀',\n 'Chasing rainbows... 🌈',\n 'Green with excitement...',\n 'Leprechaun approved... 🎩',\n 'Four-leaf clover found... 🍀',\n 'Irish eyes are smiling... 😊',\n 'Lucky charms loading... ⭐',\n 'Emerald data incoming... 💎',\n 'Slainte! Loading... 🍺',\n 'Golden treasures loading... 🪙',\n 'Celtic magic brewing... ✨',\n 'Lucky stars aligning... ⭐',\n 'Pot of gold discovered... 🌈',\n 'Green beer loading... 🍺',\n 'Jig is loading... 💃',\n 'Blarney stone touched...',\n 'Lucky loading... 🍀',\n 'Fortunes are loading...',\n 'Magically delicious... ✨',\n ],\n};\n\n/**\n * Spring theme (March 20 - April 15) - Global\n */\nexport const SPRING_THEME: LoadingTheme = {\n id: 'spring',\n name: 'Spring',\n startsAt: { month: 3, day: 20 },\n endsAt: { month: 4, day: 15 },\n // Fresh, light bounce then gentle pulse\n animations: [\n { type: 'bounce', durationMs: 3000 },\n { type: 'pulse' }\n ],\n colors: [\n '#98FB98', // Pale Green\n '#FFB6C1', // Light Pink\n '#87CEEB', // Sky Blue\n '#DDA0DD', // Plum\n '#F0E68C', // Khaki (sunny)\n '#FFA07A', // Light Salmon\n ],\n gradients: [\n { startColor: '#98FB98', endColor: '#FFB6C1', angle: 45 }, // Green to Pink\n { startColor: '#FFB6C1', endColor: '#87CEEB', angle: 45 }, // Pink to Sky Blue\n { startColor: '#87CEEB', endColor: '#DDA0DD', angle: 45 }, // Sky Blue to Plum\n { startColor: '#DDA0DD', endColor: '#F0E68C', angle: 45 }, // Plum to Sunny\n { startColor: '#F0E68C', endColor: '#FFA07A', angle: 45 }, // Sunny to Salmon\n { startColor: '#FFA07A', endColor: '#98FB98', angle: 45 }, // Salmon to Green\n ],\n messages: [\n 'Loading workspace...',\n 'Spring is in the air... 🌸',\n 'Flowers are blooming... 🌷',\n 'Birds are singing... 🐦',\n 'Fresh beginnings... 🌱',\n 'Sunny days ahead... ☀️',\n 'Butterflies loading... 🦋',\n 'April showers loading... 🌧️',\n 'New growth emerging... 🌿',\n 'Blossoms are opening... 🌺',\n 'Spring cleaning data... 🧹',\n 'Buzzing with activity... 🐝',\n 'Nature is awakening... 🌳',\n 'Fresh air loading... 💨',\n 'Rainbow after rain... 🌈',\n 'Chirping preparations... 🐤',\n 'Planting seeds of data... 🌱',\n 'Springing into action... 🏃',\n 'Garden of data growing... 🌻',\n 'Warmth is returning... ☀️',\n 'Eggs are hatching... 🐣',\n 'Bunny hop loading... 🐰',\n 'Renewal in progress... 🔄',\n 'Pastel dreams loading... 🎨',\n 'Spring forward... ⏰',\n ],\n};\n\n/**\n * Thanksgiving theme (November 1-30) - US\n */\nexport const THANKSGIVING_US_THEME: LoadingTheme = {\n id: 'thanksgiving-us',\n name: 'Thanksgiving (US)',\n startsAt: { month: 11, day: 1 },\n endsAt: { month: 11, day: 30 },\n locales: ['en-US'],\n // Warm, cozy pulse throughout\n animations: 'pulse',\n colors: [\n '#D2691E', // Chocolate (brown)\n '#FF8C00', // Dark Orange\n '#8B4513', // Saddle Brown\n '#DAA520', // Goldenrod\n '#CD853F', // Peru\n '#B22222', // Firebrick (cranberry)\n ],\n gradients: [\n { startColor: '#D2691E', endColor: '#FF8C00', angle: 45 }, // Brown to Orange\n { startColor: '#FF8C00', endColor: '#D2691E', angle: 45 }, // Orange to Brown\n { startColor: '#8B4513', endColor: '#DAA520', angle: 45 }, // Saddle to Gold\n { startColor: '#DAA520', endColor: '#CD853F', angle: 45 }, // Gold to Peru\n { startColor: '#CD853F', endColor: '#B22222', angle: 45 }, // Peru to Cranberry\n { startColor: '#B22222', endColor: '#FF8C00', angle: 45 }, // Cranberry to Orange\n ],\n messages: [\n 'Loading workspace...',\n 'Giving thanks... 🙏',\n 'Harvest time loading... 🌾',\n 'Turkey is in the oven... 🦃',\n 'Grateful for you... 💛',\n 'Fall feast preparing... 🍂',\n 'Pumpkin pie loading... 🥧',\n 'Counting blessings... ✨',\n 'Autumn leaves falling... 🍁',\n 'Family gathering... 👨‍👩‍👧‍👦',\n 'Cornucopia of data... 🎃',\n 'Thankful preparations...',\n 'Gobble gobble loading... 🦃',\n 'Cranberry sauce ready...',\n 'Stuffing the data... 🍞',\n 'Warm and cozy loading... 🧣',\n 'Harvest moon rising... 🌕',\n 'Gratitude loading... 💛',\n 'Pilgrim progress...',\n 'Feast is preparing... 🍽️',\n 'Apple cider warming... 🍎',\n 'Leaves are crunching... 🍂',\n 'Sweater weather loading... 🧶',\n 'Hayride in progress... 🚜',\n 'Thankful vibes only... 🙏',\n ],\n};\n\n/**\n * Canadian Thanksgiving theme (October 1-14) - Canada\n */\nexport const THANKSGIVING_CA_THEME: LoadingTheme = {\n id: 'thanksgiving-ca',\n name: 'Thanksgiving (Canada)',\n startsAt: { month: 10, day: 1 },\n endsAt: { month: 10, day: 14 },\n locales: ['en-CA', 'fr-CA'],\n // Warm, cozy pulse throughout\n animations: 'pulse',\n colors: [\n '#D2691E', // Chocolate (brown)\n '#FF8C00', // Dark Orange\n '#8B4513', // Saddle Brown\n '#DAA520', // Goldenrod\n '#CD853F', // Peru\n '#C41E3A', // Maple red\n ],\n gradients: [\n { startColor: '#C41E3A', endColor: '#FF8C00', angle: 45 }, // Maple to Orange\n { startColor: '#FF8C00', endColor: '#C41E3A', angle: 45 }, // Orange to Maple\n { startColor: '#D2691E', endColor: '#DAA520', angle: 45 }, // Brown to Gold\n { startColor: '#DAA520', endColor: '#8B4513', angle: 45 }, // Gold to Saddle\n { startColor: '#8B4513', endColor: '#CD853F', angle: 45 }, // Saddle to Peru\n ],\n messages: [\n 'Loading workspace...',\n 'Giving thanks, eh... 🙏',\n 'Harvest time loading... 🌾',\n 'Turkey is roasting... 🦃',\n 'Grateful for you... 💛',\n 'Fall feast preparing... 🍂',\n 'Pumpkin pie loading... 🥧',\n 'Counting blessings... ✨',\n 'Maple leaves falling... 🍁',\n 'Family gathering... 👨‍👩‍👧‍👦',\n 'Cornucopia of data... 🎃',\n 'Thankful preparations...',\n 'Gobble gobble loading... 🦃',\n 'Cranberry sauce is tasty, eh?',\n 'Stuffing the data... 🍞',\n 'Warm and cozy loading... 🧣',\n 'Harvest moon rising... 🌕',\n 'Gratitude loading... 💛',\n 'Canadian warmth... 🇨🇦',\n 'Feast is preparing... 🍽️',\n 'Apple cider warming... 🍎',\n 'Leaves are crunching... 🍂',\n 'Sweater weather loading... 🧶',\n 'True north thankful... 🍁',\n 'Merci beaucoup... 💛',\n ],\n};\n\n/**\n * Independence Day theme (June 28 - July 4) - US\n */\nexport const INDEPENDENCE_DAY_US_THEME: LoadingTheme = {\n id: 'independence-day-us',\n name: 'Independence Day (US)',\n startsAt: { month: 6, day: 28 },\n endsAt: { month: 7, day: 4 },\n locales: ['en-US'],\n // Fireworks-like spin, then celebratory pulse-spin\n animations: [\n { type: 'spin', durationMs: 3000 },\n { type: 'pulse-spin', durationMs: 3000 },\n { type: 'pulse' }\n ],\n colors: [\n '#B22234', // Old Glory Red\n '#FFFFFF', // White\n '#3C3B6E', // Old Glory Blue\n ],\n gradients: [\n { startColor: '#B22234', endColor: '#3C3B6E', angle: 0 }, // Red to Blue\n { startColor: '#3C3B6E', endColor: '#B22234', angle: 0 }, // Blue to Red\n { startColor: '#B22234', endColor: '#FFFFFF', angle: 0 }, // Red to White\n { startColor: '#FFFFFF', endColor: '#3C3B6E', angle: 0 }, // White to Blue\n ],\n messages: [\n 'Loading workspace...',\n 'Happy 4th of July! 🎆',\n 'Land of the free loading... 🗽',\n 'Fireworks incoming... 🎇',\n 'Stars and stripes forever... ⭐',\n 'Liberty is loading... 🔔',\n 'Red, white, and blue... 🇺🇸',\n 'Freedom rings... 🔔',\n 'Patriotic preparations... 🦅',\n 'Sparklers are lit... ✨',\n 'BBQ is firing up... 🍔',\n 'Celebrating independence... 🎉',\n 'America the beautiful... 🏔️',\n 'Rockets red glare... 🚀',\n 'Bombs bursting in air... 🎆',\n 'United we load... 🤝',\n 'Liberty and justice... ⚖️',\n 'Star-spangled loading... ⭐',\n 'Freedom is loading... 🗽',\n 'Parade is starting... 🎺',\n 'Hot dogs are grilling... 🌭',\n 'Flags are waving... 🇺🇸',\n 'Independence loading... 📜',\n 'Sweet land of liberty... 🎶',\n 'Let freedom ring... 🔔',\n ],\n};\n\n/**\n * Canada Day theme (June 28 - July 1) - Canada\n */\nexport const CANADA_DAY_THEME: LoadingTheme = {\n id: 'canada-day',\n name: 'Canada Day',\n startsAt: { month: 6, day: 28 },\n endsAt: { month: 7, day: 1 },\n locales: ['en-CA', 'fr-CA'],\n // Celebratory bounce, then pulse\n animations: [\n { type: 'bounce', durationMs: 4000 },\n { type: 'pulse' }\n ],\n colors: [\n '#FF0000', // Red\n '#FFFFFF', // White\n ],\n gradients: [\n { startColor: '#FF0000', endColor: '#FFFFFF', angle: 0 }, // Red to White\n { startColor: '#FFFFFF', endColor: '#FF0000', angle: 0 }, // White to Red\n ],\n messages: [\n 'Loading workspace...',\n 'Happy Canada Day! 🇨🇦',\n 'Bonne fête du Canada! 🍁',\n 'True north strong and free... 🏔️',\n 'Celebrating Canada, eh... 🎉',\n 'Maple leaf loading... 🍁',\n 'Red and white pride... ❤️',\n 'From coast to coast... 🌊',\n 'O Canada loading... 🎶',\n 'Northern lights glowing... 🌌',\n 'Poutine is ready... 🍟',\n 'Hockey night loading... 🏒',\n 'Canadian spirit rising... 🇨🇦',\n 'Fireworks over Parliament... 🎆',\n 'Celebrating since 1867... 🎂',\n 'Mounties are ready... 🐴',\n 'Canadian pride loading... 💛',\n 'Land of the maple... 🍁',\n 'Strong and free... 💪',\n 'Celebrating together... 🤝',\n 'Northern beauty loading... 🏔️',\n 'Canadian hearts united... ❤️',\n 'Beaver approved... 🦫',\n 'Sorry for the wait, eh... 😊',\n 'True patriot love... 🇨🇦',\n ],\n};\n\n/**\n * Mexican Independence Day theme (September 13-16) - Mexico\n */\nexport const INDEPENDENCE_DAY_MX_THEME: LoadingTheme = {\n id: 'independence-day-mx',\n name: 'Mexican Independence Day',\n startsAt: { month: 9, day: 13 },\n endsAt: { month: 9, day: 16 },\n locales: ['es-MX', 'es'],\n priority: 5,\n // Fiesta spin, then celebratory pulse-spin\n animations: [\n { type: 'spin', durationMs: 3000 },\n { type: 'pulse-spin', durationMs: 3000 },\n { type: 'pulse' }\n ],\n colors: [\n '#006847', // Green\n '#FFFFFF', // White\n '#CE1126', // Red\n ],\n gradients: [\n { startColor: '#006847', endColor: '#CE1126', angle: 0 }, // Green to Red\n { startColor: '#CE1126', endColor: '#006847', angle: 0 }, // Red to Green\n { startColor: '#006847', endColor: '#FFFFFF', angle: 0 }, // Green to White\n { startColor: '#FFFFFF', endColor: '#CE1126', angle: 0 }, // White to Red\n ],\n messages: [\n 'Cargando espacio de trabajo...',\n '¡Viva México! 🇲🇽',\n 'Felices fiestas patrias... 🎉',\n 'Verde, blanco y rojo... 💚',\n 'Orgullo mexicano... 🦅',\n 'Celebrando la independencia... 🎊',\n 'Mariachi is playing... 🎺',\n 'Fiesta mexicana... 🎉',\n 'Tradiciones cargando... 🌮',\n 'Cultura loading... 🎨',\n 'Alegría mexicana... 😊',\n 'Colores patrios... 🇲🇽',\n 'Libertad cargando... ⭐',\n 'Heroes remembered... 🏛️',\n 'México lindo y querido... ❤️',\n 'Corazón mexicano... 💚',\n 'Fuegos artificiales... 🎆',\n 'Celebración patria... 🎊',\n 'Unidos por México... 🤝',\n 'Orgullo nacional... 🦅',\n 'Tradición y cultura... 🎭',\n 'México en el corazón... ❤️',\n '¡Que viva México! 🇲🇽',\n 'Patria querida... 💛',\n ],\n};\n\n/**\n * Indian Independence Day theme (August 13-15) - India\n */\nexport const INDEPENDENCE_DAY_IN_THEME: LoadingTheme = {\n id: 'independence-day-in',\n name: 'Indian Independence Day',\n startsAt: { month: 8, day: 13 },\n endsAt: { month: 8, day: 15 },\n locales: ['en-IN', 'hi', 'hi-IN'],\n // Patriotic spin, then pulse\n animations: [\n { type: 'spin', durationMs: 3000 },\n { type: 'pulse' }\n ],\n colors: [\n '#FF9933', // Saffron\n '#FFFFFF', // White\n '#138808', // Green\n '#000080', // Navy Blue (Ashoka Chakra)\n ],\n gradients: [\n { startColor: '#FF9933', endColor: '#138808', angle: 90 }, // Saffron to Green\n { startColor: '#138808', endColor: '#FF9933', angle: 90 }, // Green to Saffron\n { startColor: '#FF9933', endColor: '#FFFFFF', angle: 90 }, // Saffron to White\n { startColor: '#FFFFFF', endColor: '#138808', angle: 90 }, // White to Green\n ],\n messages: [\n 'Loading workspace...',\n 'Jai Hind! 🇮🇳',\n 'Happy Independence Day! 🎉',\n 'Celebrating freedom... 🕊️',\n 'Tiranga is flying... 🇮🇳',\n 'Unity in diversity... 🤝',\n 'Saffron, white, and green... 🧡',\n 'Mera Bharat Mahan... ✨',\n 'Pride of India loading... 🦚',\n 'Freedom fighters remembered... 🙏',\n 'Vande Mataram... 🎶',\n 'Indian spirit rising... 💪',\n 'Patriotic vibes... 🇮🇳',\n 'From Himalayas to oceans... 🏔️',\n 'Incredible India loading... ✨',\n 'Azadi ka Amrit... 🪔',\n 'Bharat Mata ki Jai... 🙏',\n 'Unity is strength... 💪',\n 'Democratic dreams... ⭐',\n 'Secular spirit loading... 🤝',\n 'Rich heritage loading... 🏛️',\n 'Cultural pride... 💃',\n 'National anthem playing... 🎵',\n 'Tricolor pride... 🧡',\n 'India shining... ✨',\n ],\n};\n\n/**\n * Diwali theme (variable dates, roughly October-November) - India\n * Using a broad range since Diwali dates change yearly\n */\nexport const DIWALI_THEME: LoadingTheme = {\n id: 'diwali',\n name: 'Diwali',\n startsAt: { month: 10, day: 20 },\n endsAt: { month: 11, day: 15 },\n locales: ['en-IN', 'hi', 'hi-IN'],\n priority: 5,\n // Festival of lights - glowing pulse-spin, then warm pulse\n animations: [\n { type: 'pulse-spin', durationMs: 4000 },\n { type: 'pulse' }\n ],\n colors: [\n '#FFD700', // Gold\n '#FF6600', // Orange (diyas)\n '#8B0000', // Dark Red\n '#9400D3', // Dark Violet\n '#FF1493', // Deep Pink\n ],\n gradients: [\n { startColor: '#FFD700', endColor: '#FF6600', angle: 45 }, // Gold to Orange\n { startColor: '#FF6600', endColor: '#FFD700', angle: 45 }, // Orange to Gold\n { startColor: '#FFD700', endColor: '#8B0000', angle: 45 }, // Gold to Dark Red\n { startColor: '#8B0000', endColor: '#9400D3', angle: 45 }, // Red to Violet\n { startColor: '#9400D3', endColor: '#FF1493', angle: 45 }, // Violet to Pink\n ],\n messages: [\n 'Loading workspace...',\n 'Happy Diwali! 🪔',\n 'Shubh Deepavali! ✨',\n 'Festival of lights... 💡',\n 'Diyas are glowing... 🪔',\n 'Spreading brightness... ✨',\n 'Lakshmi blessings... 🙏',\n 'Rangoli loading... 🎨',\n 'Sweet celebrations... 🍬',\n 'Light over darkness... 💡',\n 'Prosperity loading... 🪙',\n 'Fireworks of joy... 🎆',\n 'Golden blessings... ✨',\n 'Festive vibes... 🎉',\n 'Sweets are ready... 🍪',\n 'Family gathering... 👨‍👩‍👧‍👦',\n 'New beginnings... 🌟',\n 'Divine blessings... 🙏',\n 'Auspicious loading... ⭐',\n 'Celebration mode... 🎊',\n 'Sparklers glowing... ✨',\n 'Joy and happiness... 😊',\n 'Wealth and wisdom... 📚',\n 'Radiant preparations... 💫',\n 'Illuminating your day... 🪔',\n ],\n};\n\n/**\n * All available themes in priority order.\n * More specific themes (regional, higher priority) should come first.\n */\nexport const ALL_THEMES: LoadingTheme[] = [\n // Regional/specific themes (higher priority)\n NEW_YEAR_THEME,\n DIWALI_THEME,\n INDEPENDENCE_DAY_MX_THEME,\n INDEPENDENCE_DAY_IN_THEME,\n INDEPENDENCE_DAY_US_THEME,\n CANADA_DAY_THEME,\n THANKSGIVING_CA_THEME,\n THANKSGIVING_US_THEME,\n\n // Global themes\n HALLOWEEN_THEME,\n VALENTINES_THEME,\n ST_PATRICKS_THEME,\n SPRING_THEME,\n WINTER_HOLIDAY_THEME,\n\n // Default fallback (always matches)\n STANDARD_THEME,\n];\n\n/**\n * Get the user's browser locale.\n */\nexport function getBrowserLocale(): string {\n if (typeof navigator !== 'undefined') {\n return navigator.language || (navigator as { userLanguage?: string }).userLanguage || 'en';\n }\n return 'en';\n}\n\n/**\n * Check if a theme's date range includes today.\n * Handles ranges that span year boundaries (e.g., Dec 31 - Jan 2).\n */\nfunction isDateInRange(\n today: { month: number; day: number },\n start: { month: number; day: number },\n end: { month: number; day: number }\n): boolean {\n const todayValue = today.month * 100 + today.day;\n const startValue = start.month * 100 + start.day;\n const endValue = end.month * 100 + end.day;\n\n if (startValue <= endValue) {\n // Normal range (e.g., Mar 14 - Mar 17)\n return todayValue >= startValue && todayValue <= endValue;\n } else {\n // Range spans year boundary (e.g., Dec 31 - Jan 2)\n return todayValue >= startValue || todayValue <= endValue;\n }\n}\n\n/**\n * Check if a locale matches any of the theme's allowed locales.\n * Supports partial matching (e.g., 'en' matches 'en-US', 'en-GB').\n */\nfunction localeMatches(userLocale: string, themeLocales?: string[]): boolean {\n if (!themeLocales || themeLocales.length === 0) {\n return true; // No locale restriction means global theme\n }\n\n const normalizedUserLocale = userLocale.toLowerCase();\n\n return themeLocales.some(themeLocale => {\n const normalizedThemeLocale = themeLocale.toLowerCase();\n // Exact match or prefix match\n return normalizedUserLocale === normalizedThemeLocale ||\n normalizedUserLocale.startsWith(normalizedThemeLocale + '-') ||\n normalizedThemeLocale.startsWith(normalizedUserLocale + '-');\n });\n}\n\n/**\n * Find the best matching theme for the current date and locale.\n * Returns the highest priority matching theme, or STANDARD_THEME if none match.\n */\nexport function getActiveTheme(date: Date = new Date(), locale?: string): LoadingTheme {\n const userLocale = locale || getBrowserLocale();\n const today = { month: date.getMonth() + 1, day: date.getDate() };\n\n // Find all matching themes\n const matchingThemes = ALL_THEMES.filter(theme => {\n const dateMatches = isDateInRange(today, theme.startsAt, theme.endsAt);\n const localeMatch = localeMatches(userLocale, theme.locales);\n return dateMatches && localeMatch;\n });\n\n if (matchingThemes.length === 0) {\n return STANDARD_THEME;\n }\n\n // Sort by priority (higher first) and return the best match\n matchingThemes.sort((a, b) => (b.priority || 0) - (a.priority || 0));\n\n // If the best match is STANDARD_THEME and there are other matches, prefer those\n if (matchingThemes[0].id === 'standard' && matchingThemes.length > 1) {\n return matchingThemes[1];\n }\n\n return matchingThemes[0];\n}\n"]}
@@ -63,6 +63,9 @@ export declare class ShellComponent implements OnInit, OnDestroy, AfterViewInit
63
63
  private animationSequence;
64
64
  private currentAnimationIndex;
65
65
  private animationSequenceTimeout;
66
+ ShowResetOption: boolean;
67
+ private loadingResetTimeout;
68
+ private readonly loadingResetDelayMs;
66
69
  currentLoadingText: string;
67
70
  currentLoadingColor: string;
68
71
  currentLoadingTextColor: string;
@@ -156,6 +159,22 @@ export declare class ShellComponent implements OnInit, OnDestroy, AfterViewInit
156
159
  * Stop the loading message cycling animation.
157
160
  */
158
161
  private stopLoadingAnimation;
162
+ /**
163
+ * Start a timer that shows a recovery reset option if loading takes too long.
164
+ * This helps users recover from stuck loading states caused by upgrades,
165
+ * corrupted cache, or bad stored state.
166
+ */
167
+ private startLoadingResetTimer;
168
+ /**
169
+ * Cancel the recovery reset timer.
170
+ */
171
+ private cancelLoadingResetTimer;
172
+ /**
173
+ * Nuclear recovery: clear all browser-side cached data and reload the page.
174
+ * This clears localStorage, sessionStorage, and IndexedDB to recover
175
+ * from stuck loading states caused by corrupted or stale cached data.
176
+ */
177
+ ResetApplication(): void;
159
178
  /**
160
179
  * Initialize the loading display with first message and initial color/gradient.
161
180
  * For themed periods, applies theme styling from the start.
@@ -1 +1 @@
1
- {"version":3,"file":"shell.component.d.ts","sourceRoot":"","sources":["../../../src/lib/shell/shell.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shell.component.d.ts","sourceRoot":"","sources":["../../../src/lib/shell/shell.component.ts"],"names":[],"mappings":"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"}