@memberjunction/ng-explorer-core 5.47.0 → 5.48.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/generated/lazy-feature-config.js +126 -126
- package/dist/generated/lazy-feature-config.js.map +1 -1
- package/dist/lib/omnibar/index.d.ts +15 -0
- package/dist/lib/omnibar/index.d.ts.map +1 -0
- package/dist/lib/omnibar/index.js +24 -0
- package/dist/lib/omnibar/index.js.map +1 -0
- package/dist/lib/omnibar/omnibar-palette.component.d.ts +130 -0
- package/dist/lib/omnibar/omnibar-palette.component.d.ts.map +1 -0
- package/dist/lib/omnibar/omnibar-palette.component.js +829 -0
- package/dist/lib/omnibar/omnibar-palette.component.js.map +1 -0
- package/dist/lib/omnibar/omnibar-provider.d.ts +94 -0
- package/dist/lib/omnibar/omnibar-provider.d.ts.map +1 -0
- package/dist/lib/omnibar/omnibar-provider.js +84 -0
- package/dist/lib/omnibar/omnibar-provider.js.map +1 -0
- package/dist/lib/omnibar/omnibar-shortcut.d.ts +12 -0
- package/dist/lib/omnibar/omnibar-shortcut.d.ts.map +1 -0
- package/dist/lib/omnibar/omnibar-shortcut.js +16 -0
- package/dist/lib/omnibar/omnibar-shortcut.js.map +1 -0
- package/dist/lib/omnibar/omnibar-user-setting.d.ts +38 -0
- package/dist/lib/omnibar/omnibar-user-setting.d.ts.map +1 -0
- package/dist/lib/omnibar/omnibar-user-setting.js +53 -0
- package/dist/lib/omnibar/omnibar-user-setting.js.map +1 -0
- package/dist/lib/omnibar/providers/omnibar-agent.provider.d.ts +24 -0
- package/dist/lib/omnibar/providers/omnibar-agent.provider.d.ts.map +1 -0
- package/dist/lib/omnibar/providers/omnibar-agent.provider.js +69 -0
- package/dist/lib/omnibar/providers/omnibar-agent.provider.js.map +1 -0
- package/dist/lib/omnibar/providers/omnibar-command.provider.d.ts +29 -0
- package/dist/lib/omnibar/providers/omnibar-command.provider.d.ts.map +1 -0
- package/dist/lib/omnibar/providers/omnibar-command.provider.js +130 -0
- package/dist/lib/omnibar/providers/omnibar-command.provider.js.map +1 -0
- package/dist/lib/omnibar/providers/omnibar-record.provider.d.ts +35 -0
- package/dist/lib/omnibar/providers/omnibar-record.provider.d.ts.map +1 -0
- package/dist/lib/omnibar/providers/omnibar-record.provider.js +176 -0
- package/dist/lib/omnibar/providers/omnibar-record.provider.js.map +1 -0
- package/dist/lib/omnibar/providers/omnibar-search.provider.d.ts +21 -0
- package/dist/lib/omnibar/providers/omnibar-search.provider.d.ts.map +1 -0
- package/dist/lib/omnibar/providers/omnibar-search.provider.js +94 -0
- package/dist/lib/omnibar/providers/omnibar-search.provider.js.map +1 -0
- package/dist/lib/profile/profile-dialog.component.d.ts +12 -0
- package/dist/lib/profile/profile-dialog.component.d.ts.map +1 -1
- package/dist/lib/profile/profile-dialog.component.js +189 -78
- package/dist/lib/profile/profile-dialog.component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts +16 -0
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.js +66 -6
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/view-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/view-resource.component.js +6 -2
- package/dist/lib/resource-wrappers/view-resource.component.js.map +1 -1
- package/dist/lib/shell/components/tabs/tab-container.component.d.ts +7 -0
- package/dist/lib/shell/components/tabs/tab-container.component.d.ts.map +1 -1
- package/dist/lib/shell/components/tabs/tab-container.component.js +26 -4
- package/dist/lib/shell/components/tabs/tab-container.component.js.map +1 -1
- package/dist/lib/shell/shell.component.d.ts +62 -2
- package/dist/lib/shell/shell.component.d.ts.map +1 -1
- package/dist/lib/shell/shell.component.js +341 -162
- package/dist/lib/shell/shell.component.js.map +1 -1
- package/dist/lib/shell/shell.module.d.ts +8 -7
- package/dist/lib/shell/shell.module.d.ts.map +1 -1
- package/dist/lib/shell/shell.module.js +5 -2
- package/dist/lib/shell/shell.module.js.map +1 -1
- package/dist/lib/single-list-detail/single-list-detail.component.d.ts.map +1 -1
- package/dist/lib/single-list-detail/single-list-detail.component.js +29 -20
- package/dist/lib/single-list-detail/single-list-detail.component.js.map +1 -1
- package/dist/public-api.d.ts +1 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +2 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +49 -49
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile-dialog.component.js","sourceRoot":"","sources":["../../../src/lib/profile/profile-dialog.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ChangeDetectorRef,\n inject\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UserRoleInfo } from '@memberjunction/core';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport {\n MJUserNotificationPreferenceEntity,\n UserInfoEngine\n} from '@memberjunction/core-entities';\nimport { MJAuthBase } from '@memberjunction/ng-auth-services';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { ThemeService, SharedService, ThemeDefinition } from '@memberjunction/ng-shared';\nimport { ExplorerSettingsModule } from '@memberjunction/ng-explorer-settings';\nimport { Subscription } from 'rxjs';\n\ninterface NotificationChannel {\n key: 'InApp' | 'Email' | 'SMS';\n label: string;\n icon: string;\n enabled: boolean;\n saving: boolean;\n}\n\ntype ProfilePanel = 'none' | 'photo' | 'theme';\n\n/**\n * \"Identity Card\" profile dialog with slide-in detail panels for editing\n * profile photo and switching theme. Replaces the legacy multi-tab Settings\n * dialog entirely. Brand-aligned with the About dialog.\n */\n@Component({\n selector: 'mj-profile-dialog',\n standalone: true,\n imports: [CommonModule, ExplorerSettingsModule],\n template: `\n<div class=\"mj-profile\" [class.mj-profile--panel-open]=\"ActivePanel !== 'none'\" role=\"document\">\n <button class=\"mj-profile__close\" type=\"button\" aria-label=\"Close\" (click)=\"OnCloseClick()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n\n <!-- ===== MAIN VIEW ===== -->\n <div class=\"mj-profile__main\">\n <div class=\"mj-profile__hero\">\n <h3 class=\"mj-profile__hero-title\">My Profile</h3>\n </div>\n\n <div class=\"mj-profile__avatar-zone\">\n @if (AvatarUrl) {\n <img class=\"mj-profile__avatar mj-profile__avatar--img\"\n [src]=\"AvatarUrl\" alt=\"\" (error)=\"OnAvatarLoadError()\" />\n } @else if (AvatarIconClass) {\n <div class=\"mj-profile__avatar mj-profile__avatar--icon\">\n <i [class]=\"AvatarIconClass\"></i>\n </div>\n } @else {\n <div class=\"mj-profile__avatar\">{{ UserInitials }}</div>\n }\n <button class=\"mj-profile__avatar-edit\" type=\"button\" title=\"Change photo\"\n (click)=\"OpenPanel('photo')\">\n <i class=\"fa-solid fa-camera\"></i>\n </button>\n </div>\n\n <div class=\"mj-profile__identity\">\n <h2 class=\"mj-profile__name\">{{ UserName }}</h2>\n <p class=\"mj-profile__email\">{{ UserEmail }}</p>\n @if (RoleChips.length > 0) {\n <div class=\"mj-profile__chips\">\n @for (chip of RoleChips; track chip.label) {\n <span class=\"mj-profile__chip\" [class]=\"'mj-profile__chip--' + chip.tone\">\n @if (chip.icon) { <i [class]=\"chip.icon\"></i> }\n {{ chip.label }}\n </span>\n }\n </div>\n }\n </div>\n\n <div class=\"mj-profile__field-list\">\n <div class=\"mj-profile__field\">\n <div class=\"mj-profile__field-icon\"><i class=\"fa-solid fa-id-badge\"></i></div>\n <div class=\"mj-profile__field-body\">\n <div class=\"mj-profile__field-label\">Account</div>\n <div class=\"mj-profile__field-value\">\n {{ AccountType }} · {{ AccountStatus }}\n @if (MemberSince) {\n <span class=\"mj-profile__field-muted\"> · {{ MemberSince }}</span>\n }\n </div>\n </div>\n </div>\n\n <button class=\"mj-profile__field mj-profile__field--button\" type=\"button\" (click)=\"OpenPanel('theme')\">\n <div class=\"mj-profile__field-icon\"><i class=\"fa-solid fa-palette\"></i></div>\n <div class=\"mj-profile__field-body\">\n <div class=\"mj-profile__field-label\">Theme</div>\n <div class=\"mj-profile__field-value\">{{ ThemeLabel }}</div>\n </div>\n <i class=\"fa-solid fa-chevron-right mj-profile__field-chev\"></i>\n </button>\n </div>\n\n <div class=\"mj-profile__section\">\n <div class=\"mj-profile__section-head\">\n <h4>Notifications</h4>\n @if (UnreadCount > 0) {\n <span class=\"mj-profile__unread\">{{ UnreadCount }} unread</span>\n }\n </div>\n @if (LoadingNotifications) {\n <div class=\"mj-profile__channels-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading…\n </div>\n } @else {\n <div class=\"mj-profile__channels\">\n @for (ch of Channels; track ch.key) {\n <button type=\"button\"\n class=\"mj-profile__channel\"\n [class.mj-profile__channel--on]=\"ch.enabled\"\n [disabled]=\"ch.saving\"\n (click)=\"ToggleChannel(ch)\">\n <div class=\"mj-profile__channel-icon\"><i [class]=\"ch.icon\"></i></div>\n <div class=\"mj-profile__channel-label\">{{ ch.label }}</div>\n <div class=\"mj-profile__channel-state\">\n @if (ch.saving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n <span class=\"mj-profile__switch\" [class.mj-profile__switch--on]=\"ch.enabled\">\n <span class=\"mj-profile__switch-knob\"></span>\n </span>\n }\n </div>\n </button>\n }\n </div>\n }\n </div>\n\n <div class=\"mj-profile__footer\">\n <button class=\"mj-profile__btn mj-profile__btn--danger\" type=\"button\" (click)=\"OnSignOut()\">\n <i class=\"fa-solid fa-arrow-right-from-bracket\"></i>\n Sign out\n </button>\n <span class=\"mj-profile__spacer\"></span>\n <button class=\"mj-profile__btn mj-profile__btn--primary\" type=\"button\" (click)=\"OnCloseClick()\">\n Done\n </button>\n </div>\n </div>\n\n <!-- ===== SLIDE-IN PANEL ===== -->\n <div class=\"mj-profile__panel\" [class.mj-profile__panel--open]=\"ActivePanel !== 'none'\">\n <div class=\"mj-profile__panel-header\">\n <button class=\"mj-profile__panel-back\" type=\"button\" aria-label=\"Back\" (click)=\"ClosePanel()\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n <h3 class=\"mj-profile__panel-title\">{{ PanelTitle }}</h3>\n </div>\n <div class=\"mj-profile__panel-body\">\n @if (ActivePanel === 'photo') {\n <mj-user-profile-settings></mj-user-profile-settings>\n } @else if (ActivePanel === 'theme') {\n <div class=\"mj-profile__themes\">\n @for (theme of ThemeOptions; track theme.id) {\n <button type=\"button\"\n class=\"mj-profile__theme\"\n [class.mj-profile__theme--active]=\"theme.id === ThemePreference\"\n [class.mj-profile__theme--saving]=\"SavingTheme === theme.id\"\n [disabled]=\"!!SavingTheme\"\n (click)=\"SelectTheme(theme.id)\">\n <div class=\"mj-profile__theme-swatch\" [class]=\"'mj-profile__theme-swatch--' + theme.swatch\">\n <i [class]=\"theme.icon\"></i>\n </div>\n <div class=\"mj-profile__theme-info\">\n <div class=\"mj-profile__theme-name\">{{ theme.name }}</div>\n @if (theme.description) {\n <div class=\"mj-profile__theme-desc\">{{ theme.description }}</div>\n }\n </div>\n @if (SavingTheme === theme.id) {\n <i class=\"fa-solid fa-spinner fa-spin mj-profile__theme-check\"></i>\n } @else if (theme.id === ThemePreference) {\n <i class=\"fa-solid fa-check mj-profile__theme-check\"></i>\n }\n </button>\n }\n </div>\n }\n </div>\n </div>\n</div>\n `,\n styles: [`\n:host {\n display: block;\n width: 100%;\n height: 100%;\n}\n.mj-profile {\n display: block;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n height: 100%;\n min-height: 0;\n position: relative;\n font-family: inherit;\n overflow: hidden;\n}\n.mj-profile__close {\n position: absolute;\n top: 12px; right: 12px;\n width: 36px; height: 36px;\n border: none; border-radius: 8px;\n background: rgba(255, 255, 255, 0.18);\n backdrop-filter: blur(8px);\n color: #fff;\n cursor: pointer;\n font-size: 16px;\n display: flex; align-items: center; justify-content: center;\n transition: background 0.15s, opacity 0.2s;\n z-index: 4;\n}\n.mj-profile__close:hover { background: rgba(255, 255, 255, 0.3); }\n.mj-profile--panel-open .mj-profile__close { opacity: 0; pointer-events: none; }\n\n/* ============ MAIN VIEW ============ */\n.mj-profile__main {\n display: flex;\n flex-direction: column;\n height: 100%;\n transition: transform 0.32s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.mj-profile--panel-open .mj-profile__main {\n transform: translateX(-12%);\n pointer-events: none;\n}\n\n.mj-profile__hero {\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: #fff;\n padding: 22px 24px 56px;\n position: relative;\n overflow: hidden;\n flex-shrink: 0;\n}\n.mj-profile__hero::before {\n content: '';\n position: absolute;\n inset: -50%;\n background: radial-gradient(circle, rgba(255, 255, 255, 0.10) 0%, transparent 60%);\n animation: mj-profile-rotate 24s linear infinite;\n pointer-events: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .mj-profile__hero::before { animation: none; }\n}\n@keyframes mj-profile-rotate { to { transform: rotate(360deg); } }\n\n.mj-profile__hero-title {\n margin: 0;\n font-size: 12px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 1.2px;\n opacity: 0.85;\n position: relative;\n z-index: 1;\n}\n\n.mj-profile__avatar-zone {\n position: relative;\n width: 96px;\n height: 96px;\n margin: -48px auto 12px;\n z-index: 2;\n}\n.mj-profile__avatar {\n width: 96px;\n height: 96px;\n border-radius: 50%;\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 32px;\n font-weight: 700;\n border: 4px solid var(--mj-bg-surface);\n box-shadow: 0 6px 20px rgba(0, 0, 0, 0.18);\n object-fit: cover;\n overflow: hidden;\n}\nimg.mj-profile__avatar { background: var(--mj-bg-surface-card); }\n.mj-profile__avatar--icon i { font-size: 36px; }\n\n.mj-profile__avatar-edit {\n position: absolute;\n bottom: 2px; right: 2px;\n width: 30px; height: 30px;\n border-radius: 50%;\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n border: 2px solid var(--mj-bg-surface);\n cursor: pointer;\n display: flex; align-items: center; justify-content: center;\n font-size: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);\n transition: transform 0.15s;\n}\n.mj-profile__avatar-edit:hover { transform: scale(1.1); }\n\n.mj-profile__identity {\n text-align: center;\n padding: 0 24px 16px;\n flex-shrink: 0;\n}\n.mj-profile__name {\n margin: 0 0 4px;\n font-size: 22px;\n font-weight: 700;\n letter-spacing: -0.4px;\n color: var(--mj-text-primary);\n}\n.mj-profile__email {\n margin: 0 0 12px;\n color: var(--mj-text-muted);\n font-size: 13px;\n word-break: break-all;\n}\n.mj-profile__chips {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n justify-content: center;\n}\n.mj-profile__chip {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 9px;\n border-radius: 100px;\n font-size: 11px;\n font-weight: 600;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n}\n.mj-profile__chip--admin {\n background: color-mix(in srgb, #f59e0b 14%, transparent);\n color: #b45309;\n}\n.mj-profile__chip--dev {\n background: color-mix(in srgb, #10b981 14%, transparent);\n color: #047857;\n}\n\n.mj-profile__field-list {\n padding: 0 24px;\n flex-shrink: 0;\n}\n.mj-profile__field {\n display: flex;\n align-items: center;\n padding: 12px 0;\n gap: 14px;\n border-top: 1px solid var(--mj-border-subtle);\n width: 100%;\n text-align: left;\n background: transparent;\n border-left: none;\n border-right: none;\n border-bottom: none;\n font-family: inherit;\n color: inherit;\n}\n.mj-profile__field:first-child { border-top: none; }\n.mj-profile__field--button {\n cursor: pointer;\n transition: background 0.12s;\n margin: 0 -8px;\n padding-left: 8px;\n padding-right: 8px;\n border-radius: 8px;\n border-top: none;\n}\n.mj-profile__field--button + .mj-profile__field--button { margin-top: 0; }\n.mj-profile__field--button:hover { background: var(--mj-bg-surface-hover); }\n.mj-profile__field--button:hover .mj-profile__field-chev { color: var(--mj-brand-primary); }\n.mj-profile__field-icon {\n width: 32px; height: 32px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n flex-shrink: 0;\n}\n.mj-profile__field-body { flex: 1; min-width: 0; }\n.mj-profile__field-label {\n font-size: 10.5px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n font-weight: 600;\n letter-spacing: 0.5px;\n}\n.mj-profile__field-value {\n font-size: 13px;\n color: var(--mj-text-primary);\n margin-top: 2px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.mj-profile__field-muted { color: var(--mj-text-muted); }\n.mj-profile__field-chev {\n color: var(--mj-text-muted);\n font-size: 11px;\n transition: color 0.15s;\n}\n\n.mj-profile__section {\n padding: 16px 24px 8px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n.mj-profile__section-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 10px;\n}\n.mj-profile__section-head h4 {\n margin: 0;\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.6px;\n}\n.mj-profile__unread {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n padding: 2px 8px;\n border-radius: 100px;\n}\n.mj-profile__channels-loading {\n color: var(--mj-text-muted);\n font-size: 12.5px;\n padding: 12px;\n text-align: center;\n}\n.mj-profile__channels {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.mj-profile__channel {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.15s;\n font-family: inherit;\n text-align: left;\n width: 100%;\n}\n.mj-profile__channel:hover:not(:disabled) {\n border-color: var(--mj-border-default);\n background: var(--mj-bg-surface-hover);\n}\n.mj-profile__channel:disabled { cursor: wait; opacity: 0.7; }\n.mj-profile__channel-icon {\n width: 32px; height: 32px;\n border-radius: 8px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n display: flex; align-items: center; justify-content: center;\n font-size: 13px;\n flex-shrink: 0;\n transition: all 0.15s;\n}\n.mj-profile__channel--on .mj-profile__channel-icon {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n color: var(--mj-brand-primary);\n}\n.mj-profile__channel-label {\n flex: 1;\n font-size: 13.5px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n.mj-profile__channel-state {\n flex-shrink: 0;\n color: var(--mj-text-muted);\n font-size: 13px;\n min-width: 36px;\n display: flex; justify-content: flex-end; align-items: center;\n}\n\n.mj-profile__switch {\n width: 36px;\n height: 20px;\n background: var(--mj-border-strong);\n border-radius: 100px;\n position: relative;\n transition: background 0.2s;\n display: inline-block;\n}\n.mj-profile__switch-knob {\n position: absolute;\n top: 2px; left: 2px;\n width: 16px; height: 16px;\n background: white;\n border-radius: 50%;\n transition: transform 0.2s;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n}\n.mj-profile__switch--on { background: var(--mj-brand-primary); }\n.mj-profile__switch--on .mj-profile__switch-knob { transform: translateX(16px); }\n\n.mj-profile__footer {\n border-top: 1px solid var(--mj-border-subtle);\n padding: 14px 20px;\n display: flex;\n gap: 8px;\n align-items: center;\n flex-shrink: 0;\n}\n.mj-profile__spacer { flex: 1; }\n.mj-profile__btn {\n padding: 9px 16px;\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n font-family: inherit;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n transition: all 0.15s;\n}\n.mj-profile__btn:hover { background: var(--mj-bg-surface-hover); border-color: var(--mj-border-strong); }\n.mj-profile__btn--primary {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n.mj-profile__btn--primary:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 88%, black);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 88%, black);\n}\n.mj-profile__btn--danger {\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-border-default));\n}\n.mj-profile__btn--danger:hover {\n background: color-mix(in srgb, var(--mj-status-error) 8%, transparent);\n border-color: var(--mj-status-error);\n}\n\n/* ============ SLIDE-IN PANEL ============ */\n.mj-profile__panel {\n position: absolute;\n inset: 0;\n background: var(--mj-bg-surface);\n transform: translateX(100%);\n transition: transform 0.32s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n flex-direction: column;\n z-index: 3;\n}\n.mj-profile__panel--open {\n transform: translateX(0);\n box-shadow: -8px 0 24px rgba(0, 0, 0, 0.06);\n}\n.mj-profile__panel-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 14px 18px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n flex-shrink: 0;\n}\n.mj-profile__panel-back {\n width: 34px; height: 34px;\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n cursor: pointer;\n display: flex; align-items: center; justify-content: center;\n font-size: 13px;\n transition: all 0.15s;\n font-family: inherit;\n}\n.mj-profile__panel-back:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n.mj-profile__panel-title {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n letter-spacing: -0.2px;\n}\n.mj-profile__panel-body {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding: 16px 20px 20px;\n}\n\n/* Theme picker */\n.mj-profile__themes {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.mj-profile__theme {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 12px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.15s;\n text-align: left;\n width: 100%;\n font-family: inherit;\n}\n.mj-profile__theme:hover:not(:disabled) {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface-hover);\n}\n.mj-profile__theme:disabled { cursor: wait; opacity: 0.7; }\n.mj-profile__theme--active {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface-card));\n}\n.mj-profile__theme-swatch {\n width: 40px; height: 40px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 16px;\n flex-shrink: 0;\n border: 1px solid var(--mj-border-default);\n}\n.mj-profile__theme-swatch--light {\n background: linear-gradient(135deg, #ffffff 0%, #f1f5f9 100%);\n color: #f59e0b;\n}\n.mj-profile__theme-swatch--dark {\n background: linear-gradient(135deg, #1e293b 0%, #0f172a 100%);\n color: #94a3b8;\n border-color: #334155;\n}\n.mj-profile__theme-swatch--system {\n background: linear-gradient(135deg, #ffffff 0%, #ffffff 49%, #1e293b 51%, #0f172a 100%);\n color: var(--mj-text-secondary);\n}\n.mj-profile__theme-info { flex: 1; min-width: 0; }\n.mj-profile__theme-name {\n font-size: 13.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.mj-profile__theme-desc {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.mj-profile__theme-check {\n color: var(--mj-brand-primary);\n font-size: 14px;\n flex-shrink: 0;\n}\n\n@media (max-width: 480px) {\n .mj-profile__hero { padding: 20px 18px 48px; }\n .mj-profile__avatar-zone { width: 88px; height: 88px; margin-top: -44px; }\n .mj-profile__avatar { width: 88px; height: 88px; font-size: 28px; }\n .mj-profile__name { font-size: 19px; }\n .mj-profile__field-list,\n .mj-profile__section { padding-left: 18px; padding-right: 18px; }\n .mj-profile__footer { padding: 12px 16px; }\n .mj-profile--panel-open .mj-profile__main { transform: translateX(-20%); }\n .mj-profile__panel-body { padding: 14px 16px 16px; }\n}\n `]\n})\nexport class ProfileDialogComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n @Output() CloseRequested = new EventEmitter<void>();\n\n @Input() AvatarUrl: string | null = null;\n @Input() AvatarIconClass: string | null = null;\n\n public UserName = '';\n public UserEmail = '';\n public UserInitials = '?';\n public AccountType = '';\n public AccountStatus = '';\n public MemberSince = '';\n public ThemeLabel = '';\n public RoleChips: Array<{ label: string; tone: string; icon: string | null }> = [];\n\n public LoadingNotifications = true;\n public Channels: NotificationChannel[] = [\n { key: 'InApp', label: 'In-app', icon: 'fa-solid fa-bell', enabled: false, saving: false },\n { key: 'Email', label: 'Email', icon: 'fa-solid fa-envelope', enabled: false, saving: false },\n { key: 'SMS', label: 'SMS', icon: 'fa-solid fa-mobile', enabled: false, saving: false }\n ];\n public UnreadCount = 0;\n\n // Slide-in panel state\n public ActivePanel: ProfilePanel = 'none';\n public ThemeOptions: Array<{ id: string; name: string; description: string; icon: string; swatch: 'light' | 'dark' | 'system' }> = [];\n public ThemePreference = '';\n public SavingTheme: string | null = null;\n\n public get PanelTitle(): string {\n switch (this.ActivePanel) {\n case 'photo': return 'Profile photo';\n case 'theme': return 'Theme';\n default: return '';\n }\n }\n\n private authBase = inject(MJAuthBase);\n private themeService = inject(ThemeService);\n private sharedService = inject(SharedService);\n private cdr = inject(ChangeDetectorRef);\n\n private themeSub?: Subscription;\n\n public ngOnInit(): void {\n this.populateIdentity();\n this.populateThemeOptions();\n this.loadNotifications();\n this.themeSub = this.themeService.Preference$.subscribe(pref => {\n this.ThemePreference = pref;\n this.ThemeLabel = this.computeThemeLabel();\n this.cdr.markForCheck();\n });\n }\n\n public ngOnDestroy(): void {\n this.themeSub?.unsubscribe();\n }\n\n public OnCloseClick(): void {\n if (this.ActivePanel !== 'none') {\n this.ClosePanel();\n return;\n }\n this.CloseRequested.emit();\n }\n\n public OnAvatarLoadError(): void {\n this.AvatarUrl = null;\n this.cdr.markForCheck();\n }\n\n public OpenPanel(panel: ProfilePanel): void {\n this.ActivePanel = panel;\n }\n\n public ClosePanel(): void {\n this.ActivePanel = 'none';\n }\n\n public async OnSignOut(): Promise<void> {\n try {\n localStorage.removeItem('auth');\n localStorage.removeItem('claims');\n await this.authBase.logout();\n } catch (err) {\n const msg = err instanceof Error ? err.message : 'Unknown error';\n this.sharedService.CreateSimpleNotification(`Sign out failed: ${msg}`, 'error', 3000);\n }\n }\n\n public async SelectTheme(themeId: string): Promise<void> {\n if (this.SavingTheme) return;\n if (themeId === this.ThemePreference) return;\n this.SavingTheme = themeId;\n this.cdr.markForCheck();\n try {\n await this.themeService.SetTheme(themeId);\n } catch (err) {\n const msg = err instanceof Error ? err.message : 'Unknown error';\n this.sharedService.CreateSimpleNotification(`Theme change failed: ${msg}`, 'error', 3000);\n } finally {\n this.SavingTheme = null;\n this.cdr.markForCheck();\n }\n }\n\n public async ToggleChannel(channel: NotificationChannel): Promise<void> {\n if (channel.saving) return;\n const newState = !channel.enabled;\n channel.saving = true;\n this.cdr.markForCheck();\n\n const provider = this.ProviderToUse;\n const currentUser = provider?.CurrentUser;\n if (!provider || !currentUser) {\n channel.saving = false;\n return;\n }\n\n try {\n const transGroup = await provider.CreateTransactionGroup();\n const types = UserInfoEngine.Instance.NotificationTypes;\n const preferences = UserInfoEngine.Instance.NotificationPreferences;\n\n for (const type of types) {\n if (type.AllowUserPreference === false) continue;\n\n let pref = preferences.find(p => UUIDsEqual(p.NotificationTypeID, type.ID));\n if (!pref) {\n pref = await provider.GetEntityObject<MJUserNotificationPreferenceEntity>(\n 'MJ: User Notification Preferences'\n );\n pref.UserID = currentUser.ID;\n pref.NotificationTypeID = type.ID;\n pref.InAppEnabled = type.DefaultInApp ?? true;\n pref.EmailEnabled = type.DefaultEmail ?? false;\n pref.SMSEnabled = type.DefaultSMS ?? false;\n }\n\n if (channel.key === 'InApp') pref.InAppEnabled = newState;\n else if (channel.key === 'Email') pref.EmailEnabled = newState;\n else pref.SMSEnabled = newState;\n\n pref.Enabled = pref.InAppEnabled || pref.EmailEnabled || pref.SMSEnabled;\n pref.TransactionGroup = transGroup;\n pref.Save();\n }\n\n const success = await transGroup.Submit();\n if (success) {\n channel.enabled = newState;\n this.sharedService.CreateSimpleNotification(\n `${channel.label} notifications ${newState ? 'enabled' : 'disabled'}`,\n 'success',\n 2000\n );\n } else {\n throw new Error('Save failed');\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : 'Unknown error';\n this.sharedService.CreateSimpleNotification(`Update failed: ${msg}`, 'error', 3000);\n await this.loadNotifications();\n } finally {\n channel.saving = false;\n this.cdr.markForCheck();\n }\n }\n\n // ---------- private helpers ----------\n\n private populateIdentity(): void {\n const provider = this.ProviderToUse;\n const user = provider?.CurrentUser;\n if (user) {\n const name = user.Name || `${user.FirstName ?? ''} ${user.LastName ?? ''}`.trim();\n this.UserName = name || 'User';\n this.UserEmail = user.Email || '';\n this.UserInitials = this.computeInitials(this.UserName);\n this.AccountType = user.Type || 'User';\n this.AccountStatus = user.IsActive ? 'Active' : 'Inactive';\n this.MemberSince = this.formatMemberSince(user.__mj_CreatedAt);\n this.RoleChips = this.computeRoleChips(user.UserRoles);\n }\n this.ThemePreference = this.themeService.Preference;\n this.ThemeLabel = this.computeThemeLabel();\n }\n\n private populateThemeOptions(): void {\n const themes: ThemeDefinition[] = this.themeService.AvailableThemes ?? [];\n this.ThemeOptions = themes.map(t => ({\n id: t.Id,\n name: t.Name,\n description: t.Description ?? (t.BaseTheme === 'dark' ? 'Dark interface' : 'Light interface'),\n icon: t.BaseTheme === 'dark' ? 'fa-solid fa-moon' : 'fa-solid fa-sun',\n swatch: t.BaseTheme as 'light' | 'dark'\n }));\n this.ThemeOptions.push({\n id: 'system',\n name: 'System',\n description: 'Follow your operating system',\n icon: 'fa-solid fa-desktop',\n swatch: 'system'\n });\n }\n\n private async loadNotifications(): Promise<void> {\n this.LoadingNotifications = true;\n try {\n this.UnreadCount = UserInfoEngine.Instance.UnreadNotificationCount ?? 0;\n const preferences = UserInfoEngine.Instance.NotificationPreferences;\n const types = UserInfoEngine.Instance.NotificationTypes;\n\n let inApp: boolean, email: boolean, sms: boolean;\n if (preferences.length === 0 && types.length > 0) {\n inApp = types.some(t => t.DefaultInApp ?? true);\n email = types.some(t => t.DefaultEmail ?? false);\n sms = types.some(t => t.DefaultSMS ?? false);\n } else {\n inApp = preferences.some(p => p.InAppEnabled);\n email = preferences.some(p => p.EmailEnabled);\n sms = preferences.some(p => p.SMSEnabled);\n }\n\n this.Channels[0].enabled = inApp;\n this.Channels[1].enabled = email;\n this.Channels[2].enabled = sms;\n } catch {\n // non-fatal; leave defaults\n } finally {\n this.LoadingNotifications = false;\n this.cdr.markForCheck();\n }\n }\n\n private computeInitials(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return '?';\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n }\n\n private computeRoleChips(roles: UserRoleInfo[] | undefined): Array<{ label: string; tone: string; icon: string | null }> {\n if (!roles || roles.length === 0) return [];\n return roles\n .map(r => r.Role)\n .filter((n): n is string => !!n)\n .map(roleName => {\n const lower = roleName.toLowerCase();\n if (lower.includes('admin')) return { label: roleName, tone: 'admin', icon: 'fa-solid fa-shield' };\n if (lower.includes('developer') || lower.includes('integration')) return { label: roleName, tone: 'dev', icon: 'fa-solid fa-code' };\n return { label: roleName, tone: '', icon: null };\n });\n }\n\n private formatMemberSince(date: Date | string | null | undefined): string {\n if (!date) return '';\n const d = date instanceof Date ? date : new Date(date);\n if (isNaN(d.getTime())) return '';\n return d.toLocaleDateString(undefined, { month: 'short', year: 'numeric' });\n }\n\n private computeThemeLabel(): string {\n const applied = this.themeService.AppliedTheme;\n const preference = this.themeService.Preference;\n const def = this.themeService.GetThemeDefinition(applied);\n const themeName = def?.Name ?? applied;\n return preference === 'system' ? `${themeName} · System` : themeName;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"profile-dialog.component.js","sourceRoot":"","sources":["../../../src/lib/profile/profile-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,SAAS,EACT,YAAY,EACZ,KAAK,EAGL,MAAM,EACN,iBAAiB,EACjB,MAAM,EACT,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAEH,cAAc,EACjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAmB,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AACxH,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;;;;;;;;IAoCtD,+BAC8D;IAAhC,uLAAS,0BAAmB,KAAC;IAD3D,iBAC8D;;;IAAzD,wDAAiB;;;IAEtB,8BAAyD;IACrD,oBAAiC;IACrC,iBAAM;;;IADC,cAAyB;IAAzB,qCAAyB;;;IAGhC,8BAAgC;IAAA,YAAkB;IAAA,iBAAM;;;IAAxB,cAAkB;IAAlB,yCAAkB;;;IAepB,oBAA2B;;;IAAxB,2BAAmB;;;IAD5C,gCAA0E;IACtE,4GAAiB;IACjB,YACJ;IAAA,iBAAO;;;IAHwB,kDAA0C;IACrE,cAA+C;IAA/C,uCAA+C;IAC/C,cACJ;IADI,8CACJ;;;IALR,+BAA+B;IAC3B,0GAKC;IACL,iBAAM;;;IANF,cAKC;IALD,+BAKC;;;IAaO,gCAAsC;IAAC,YAAmB;IAAA,iBAAO;;;IAA1B,cAAmB;IAAnB,qDAAmB;;;IAmCtD,wBAA2C;;;IAE3C,gCAAiF;IAC7E,2BAA6C;IACjD,iBAAO;;;IAF0B,+DAA+C;;;;IAlB5F,AADJ,AADJ,+BAAiC,cACS,SAC9B;IAAA,+BAAe;IACvB,AADuB,iBAAK,EACtB;IAEF,AADJ,+BAAkC,iBAMI;IAA1B,2LAAS,sBAAe,KAAC;IAC7B,+BAAsC;IAAA,wBAA4C;IAAA,iBAAM;IACxF,+BAAuC;IACnC,yCACA;IAAA,gCAAsC;IAAA,aAA8E;IACxH,AADwH,iBAAM,EACxH;IACN,gCAAuC;IAGjC,AAFF,wGAAqB,qFAEZ;IAQzB,AADI,AADI,AADI,iBAAM,EACD,EACP,EACJ;;;IAnBU,eAAgD;IAAhD,gEAAgD;IAChD,+CAA0B;IAKY,eAA8E;IAA9E,+GAA8E;IAGpH,eAMC;IAND,gDAMC;;;IAWT,gCAAiC;IAAA,YAAwB;IAAA,iBAAO;;;IAA/B,cAAwB;IAAxB,wDAAwB;;;IAI7D,+BAA0C;IACtC,wBAA2C;IAAC,+BAChD;IAAA,iBAAM;;;IAac,wBAA2C;;;IAE3C,gCAA6E;IACzE,2BAA6C;IACjD,iBAAO;;;IAF0B,uDAA2C;;;;IAXxF,kCAIoC;IAA5B,0NAAS,2BAAiB,KAAC;IAC/B,+BAAsC;IAAA,oBAAyB;IAAA,iBAAM;IACrE,+BAAuC;IAAA,YAAc;IAAA,iBAAM;IAC3D,+BAAuC;IAGjC,AAFF,4GAAiB,yFAER;IAMjB,AADI,iBAAM,EACD;;;IAdD,wDAA4C;IAC5C,uCAAsB;IAEe,eAAiB;IAAjB,yBAAiB;IACnB,eAAc;IAAd,iCAAc;IAEjD,eAMC;IAND,sCAMC;;;IAhBjB,+BAAkC;IAC9B,4GAkBC;IACL,iBAAM;;;IAnBF,cAkBC;IAlBD,8BAkBC;;;IA2BL,2CAAqD;;;IAgBjC,+BAAoC;IAAA,YAAuB;IAAA,iBAAM;;;IAA7B,cAAuB;IAAvB,0CAAuB;;;IAI/D,wBAAmE;;;IAEnE,wBAAyD;;;;IAlBjE,kCAKwC;IAAhC,6NAAS,+BAAqB,KAAC;IACnC,+BAA4F;IACxF,oBAA4B;IAChC,iBAAM;IAEF,AADJ,+BAAoC,cACI;IAAA,YAAgB;IAAA,iBAAM;IAC1D,8GAAyB;IAG7B,iBAAM;IAGJ,AAFF,4GAAgC,sFAEW;IAG/C,iBAAS;;;;IAjBD,AADA,mFAAgE,iEACJ;IAC5D,+CAA0B;IAEQ,cAAqD;IAArD,6DAAqD;IACpF,cAAoB;IAApB,4BAAoB;IAGa,eAAgB;IAAhB,mCAAgB;IACpD,cAEC;IAFD,+CAEC;IAEL,cAIC;IAJD,0GAIC;;;IArBb,+BAAgC;IAC5B,6GAsBC;IACL,iBAAM;;;IAvBF,cAsBC;IAtBD,kCAsBC;;AA/LrB;;;;GAIG;AA+sBH,MAAM,OAAO,sBAAuB,SAAQ,oBAAoB;IAClD,cAAc,GAAG,IAAI,YAAY,EAAQ,CAAC;IAE3C,SAAS,GAAkB,IAAI,CAAC;IAChC,eAAe,GAAkB,IAAI,CAAC;IAExC,QAAQ,GAAG,EAAE,CAAC;IACd,SAAS,GAAG,EAAE,CAAC;IACf,YAAY,GAAG,GAAG,CAAC;IACnB,WAAW,GAAG,EAAE,CAAC;IACjB,aAAa,GAAG,EAAE,CAAC;IACnB,WAAW,GAAG,EAAE,CAAC;IACjB,UAAU,GAAG,EAAE,CAAC;IAChB,SAAS,GAAgE,EAAE,CAAC;IAE5E,oBAAoB,GAAG,IAAI,CAAC;IAC5B,QAAQ,GAA0B;QACrC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAG,IAAI,EAAE,kBAAkB,EAAM,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;QAC/F,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAI,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;QAC/F,EAAE,GAAG,EAAE,KAAK,EAAI,KAAK,EAAE,KAAK,EAAM,IAAI,EAAE,oBAAoB,EAAI,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;KAClG,CAAC;IACK,WAAW,GAAG,CAAC,CAAC;IAEvB,4EAA4E;IACrE,gBAAgB,GAAG,KAAK,CAAC;IACzB,cAAc,GAAG,KAAK,CAAC;IACvB,aAAa,GAAG,KAAK,CAAC;IAE7B,gFAAgF;IAChF,IAAW,oBAAoB;QAC3B,OAAO,uBAAuB,EAAE,CAAC;IACrC,CAAC;IAED,uBAAuB;IAChB,WAAW,GAAiB,MAAM,CAAC;IACnC,YAAY,GAAgH,EAAE,CAAC;IAC/H,eAAe,GAAG,EAAE,CAAC;IACrB,WAAW,GAAkB,IAAI,CAAC;IAEzC,IAAW,UAAU;QACjB,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;YACvB,KAAK,OAAO,CAAC,CAAC,OAAO,eAAe,CAAC;YACrC,KAAK,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC;YAC7B,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;IACL,CAAC;IAEO,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAC9B,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IACpC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;IACtC,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAEhC,QAAQ,CAAgB;IAEzB,QAAQ;QACX,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,kBAAkB,EAAE,CAAC;QAC7C,IAAI,CAAC,cAAc,GAAG,uBAAuB,EAAE,CAAC;QAChD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YAC3D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3C,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,WAAW;QACd,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACjC,CAAC;IAEM,YAAY;QACf,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;YAC9B,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO;QACX,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAEM,iBAAiB;QACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC5B,CAAC;IAEM,SAAS,CAAC,KAAmB;QAChC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC7B,CAAC;IAEM,UAAU;QACb,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;IAC9B,CAAC;IAEM,KAAK,CAAC,SAAS;QAClB,IAAI,CAAC;YACD,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAChC,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAClC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACjE,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,oBAAoB,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC1F,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,OAAe;QACpC,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAC7B,IAAI,OAAO,KAAK,IAAI,CAAC,eAAe;YAAE,OAAO;QAC7C,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QACxB,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACjE,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,wBAAwB,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC9F,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,aAAa;QACtB,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO;QAC/B,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC;QAClC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QACxB,IAAI,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/F,IAAI,KAAK,EAAE,CAAC;gBACR,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,+CAA+C,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAChH,CAAC;QACL,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,OAA4B;QACnD,IAAI,OAAO,CAAC,MAAM;YAAE,OAAO;QAC3B,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;QAClC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAExB,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;QACpC,MAAM,WAAW,GAAG,QAAQ,EAAE,WAAW,CAAC;QAC1C,IAAI,CAAC,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;YAC5B,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;YACvB,OAAO;QACX,CAAC;QAED,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,sBAAsB,EAAE,CAAC;YAC3D,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACxD,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YAEpE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,IAAI,IAAI,CAAC,mBAAmB,KAAK,KAAK;oBAAE,SAAS;gBAEjD,IAAI,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5E,IAAI,CAAC,IAAI,EAAE,CAAC;oBACR,IAAI,GAAG,MAAM,QAAQ,CAAC,eAAe,CACjC,mCAAmC,CACtC,CAAC;oBACF,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC;oBAC7B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,EAAE,CAAC;oBAClC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC;oBAC9C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC;oBAC/C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC;gBAC/C,CAAC;gBAED,IAAI,OAAO,CAAC,GAAG,KAAK,OAAO;oBAAE,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;qBACrD,IAAI,OAAO,CAAC,GAAG,KAAK,OAAO;oBAAE,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;;oBAC1D,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;gBAEhC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC;gBACzE,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC;gBACnC,IAAI,CAAC,IAAI,EAAE,CAAC;YAChB,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC;YAC1C,IAAI,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,OAAO,GAAG,QAAQ,CAAC;gBAC3B,IAAI,CAAC,aAAa,CAAC,wBAAwB,CACvC,GAAG,OAAO,CAAC,KAAK,kBAAkB,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,EACrE,SAAS,EACT,IAAI,CACP,CAAC;YACN,CAAC;iBAAM,CAAC;gBACJ,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;YACnC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACjE,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,kBAAkB,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACpF,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACnC,CAAC;gBAAS,CAAC;YACP,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;IAED,wCAAwC;IAEhC,gBAAgB;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;QACpC,MAAM,IAAI,GAAG,QAAQ,EAAE,WAAW,CAAC;QACnC,IAAI,IAAI,EAAE,CAAC;YACP,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;YAClF,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,MAAM,CAAC;YAC/B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC;YACvC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;YAC3D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC/D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;QACpD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC/C,CAAC;IAEO,oBAAoB;QACxB,MAAM,MAAM,GAAsB,IAAI,CAAC,YAAY,CAAC,eAAe,IAAI,EAAE,CAAC;QAC1E,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACjC,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,CAAC;YAC7F,IAAI,EAAE,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB;YACrE,MAAM,EAAE,CAAC,CAAC,SAA6B;SAC1C,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACnB,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,8BAA8B;YAC3C,IAAI,EAAE,qBAAqB;YAC3B,MAAM,EAAE,QAAQ;SACnB,CAAC,CAAC;IACP,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC3B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC;YACD,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,uBAAuB,IAAI,CAAC,CAAC;YACxE,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YACpE,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YAExD,IAAI,KAAc,EAAE,KAAc,EAAE,GAAY,CAAC;YACjD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/C,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC;gBAChD,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,KAAK,CAAC,CAAC;gBACjD,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC;YACjD,CAAC;iBAAM,CAAC;gBACJ,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;gBAC9C,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;gBAC9C,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YAC9C,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;YACjC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;YACjC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACL,4BAA4B;QAChC,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;IAEO,eAAe,CAAC,IAAY;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAClE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACpE,CAAC;IAEO,gBAAgB,CAAC,KAAiC;QACtD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAC5C,OAAO,KAAK;aACP,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAChB,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAC/B,GAAG,CAAC,QAAQ,CAAC,EAAE;YACZ,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;YACrC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;YACnG,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;YACpI,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACrD,CAAC,CAAC,CAAC;IACX,CAAC;IAEO,iBAAiB,CAAC,IAAsC;QAC5D,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAAE,OAAO,EAAE,CAAC;QAClC,OAAO,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAChF,CAAC;IAEO,iBAAiB;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,GAAG,EAAE,IAAI,IAAI,OAAO,CAAC;QACvC,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,CAAC;qQAjTQ,sBAAsB,yBAAtB,sBAAsB;6DAAtB,sBAAsB;YAxsB/B,AADJ,8BAAgG,gBACA;YAAzB,mGAAS,kBAAc,IAAC;YACvF,uBAAiC;YACrC,iBAAS;YAKD,AADJ,AADJ,8BAA8B,aACI,YACS;YAAA,0BAAU;YACjD,AADiD,iBAAK,EAChD;YAEN,8BAAqC;YAQ/B,AAJA,AAHF,wFAAiB,kEAGa,oEAIrB;YAGT,mCACqC;YAA7B,oGAAS,cAAU,OAAO,CAAC,IAAC;YAChC,yBAAkC;YAE1C,AADI,iBAAS,EACP;YAGF,AADJ,gCAAkC,cACD;YAAA,aAAc;YAAA,iBAAK;YAChD,8BAA6B;YAAA,aAAe;YAAA,iBAAI;YAChD,2FAA4B;YAUhC,iBAAM;YAIE,AADJ,AADJ,gCAAoC,eACD,eACS;YAAA,yBAAoC;YAAA,iBAAM;YAE1E,AADJ,gCAAoC,eACK;YAAA,wBAAO;YAAA,iBAAM;YAClD,gCAAqC;YACjC,aACA;YAAA,4FAAmB;YAK/B,AADI,AADI,iBAAM,EACJ,EACJ;YAEN,mCAAuG;YAA7B,oGAAS,cAAU,OAAO,CAAC,IAAC;YAClG,gCAAoC;YAAA,yBAAmC;YAAA,iBAAM;YAEzE,AADJ,gCAAoC,eACK;YAAA,sBAAK;YAAA,iBAAM;YAChD,gCAAqC;YAAA,aAAgB;YACzD,AADyD,iBAAM,EACzD;YACN,yBAAgE;YAExE,AADI,iBAAS,EACP;YAEN,4FAAwB;YAiChB,AADJ,AADJ,gCAAiC,eACS,UAC9B;YAAA,8BAAa;YAAA,iBAAK;YACtB,4FAAuB;YAG3B,iBAAM;YAKJ,AAJF,2FAA4B,qEAInB;YAuBb,iBAAM;YAGF,AADJ,gCAAgC,kBACgE;YAAtB,oGAAS,eAAW,IAAC;YACvF,yBAAoD;YACpD,2BACJ;YAAA,iBAAS;YACT,4BAAwC;YACxC,mCAAgG;YAAzB,oGAAS,kBAAc,IAAC;YAC3F,uBACJ;YAER,AADI,AADI,iBAAS,EACP,EACJ;YAKE,AADJ,AADJ,gCAAwF,eAC9C,kBAC4D;YAAvB,oGAAS,gBAAY,IAAC;YACzF,yBAAsC;YAC1C,iBAAS;YACT,+BAAoC;YAAA,aAAgB;YACxD,AADwD,iBAAK,EACvD;YACN,gCAAoC;YAG9B,AAFF,4GAA+B,qEAEO;YA6BlD,AADI,AADI,iBAAM,EACJ,EACJ;;YA1LkB,oEAAuD;YAYnE,eASC;YATD,kEASC;YAQ4B,eAAc;YAAd,kCAAc;YACd,eAAe;YAAf,mCAAe;YAC5C,cASC;YATD,oDASC;YASW,eACA;YADA,+EACA;YAAA,cAEC;YAFD,2CAEC;YASgC,eAAgB;YAAhB,oCAAgB;YAMjE,eA6BC;YA7BD,gDA6BC;YAKO,eAEC;YAFD,+CAEC;YAEL,cA0BC;YA1BD,oDA0BC;YAgBsB,eAAwD;YAAxD,qEAAwD;YAK3C,eAAgB;YAAhB,oCAAgB;YAGpD,eA4BC;YA5BD,0FA4BC;4BAzLC,YAAY,EAAE,sBAAsB;;iFA2sBrC,sBAAsB;cA9sBlC,SAAS;2BACI,mBAAmB,cACjB,IAAI,WACP,CAAC,YAAY,EAAE,sBAAsB,CAAC,YACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA4LT;;kBA+gBA,MAAM;;kBAEN,KAAK;;kBACL,KAAK;;kFAJG,sBAAsB","sourcesContent":["import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ChangeDetectorRef,\n inject\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UserRoleInfo } from '@memberjunction/core';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport {\n MJUserNotificationPreferenceEntity,\n UserInfoEngine\n} from '@memberjunction/core-entities';\nimport { MJAuthBase } from '@memberjunction/ng-auth-services';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { ThemeService, SharedService, ThemeDefinition } from '@memberjunction/ng-shared';\nimport { ExplorerSettingsModule } from '@memberjunction/ng-explorer-settings';\nimport { IsOmnibarAvailable, IsOmnibarEnabledForUser, OMNIBAR_USER_SETTING_KEY } from '../omnibar/omnibar-user-setting';\nimport { GetOmnibarShortcutLabel } from '../omnibar/omnibar-shortcut';\nimport { Subscription } from 'rxjs';\n\ninterface NotificationChannel {\n key: 'InApp' | 'Email' | 'SMS';\n label: string;\n icon: string;\n enabled: boolean;\n saving: boolean;\n}\n\ntype ProfilePanel = 'none' | 'photo' | 'theme';\n\n/**\n * \"Identity Card\" profile dialog with slide-in detail panels for editing\n * profile photo and switching theme. Replaces the legacy multi-tab Settings\n * dialog entirely. Brand-aligned with the About dialog.\n */\n@Component({\n selector: 'mj-profile-dialog',\n standalone: true,\n imports: [CommonModule, ExplorerSettingsModule],\n template: `\n<div class=\"mj-profile\" [class.mj-profile--panel-open]=\"ActivePanel !== 'none'\" role=\"document\">\n <button class=\"mj-profile__close\" type=\"button\" aria-label=\"Close\" (click)=\"OnCloseClick()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n\n <!-- ===== MAIN VIEW ===== -->\n <div class=\"mj-profile__main\">\n <div class=\"mj-profile__hero\">\n <h3 class=\"mj-profile__hero-title\">My Profile</h3>\n </div>\n\n <div class=\"mj-profile__avatar-zone\">\n @if (AvatarUrl) {\n <img class=\"mj-profile__avatar mj-profile__avatar--img\"\n [src]=\"AvatarUrl\" alt=\"\" (error)=\"OnAvatarLoadError()\" />\n } @else if (AvatarIconClass) {\n <div class=\"mj-profile__avatar mj-profile__avatar--icon\">\n <i [class]=\"AvatarIconClass\"></i>\n </div>\n } @else {\n <div class=\"mj-profile__avatar\">{{ UserInitials }}</div>\n }\n <button class=\"mj-profile__avatar-edit\" type=\"button\" title=\"Change photo\"\n (click)=\"OpenPanel('photo')\">\n <i class=\"fa-solid fa-camera\"></i>\n </button>\n </div>\n\n <div class=\"mj-profile__identity\">\n <h2 class=\"mj-profile__name\">{{ UserName }}</h2>\n <p class=\"mj-profile__email\">{{ UserEmail }}</p>\n @if (RoleChips.length > 0) {\n <div class=\"mj-profile__chips\">\n @for (chip of RoleChips; track chip.label) {\n <span class=\"mj-profile__chip\" [class]=\"'mj-profile__chip--' + chip.tone\">\n @if (chip.icon) { <i [class]=\"chip.icon\"></i> }\n {{ chip.label }}\n </span>\n }\n </div>\n }\n </div>\n\n <div class=\"mj-profile__field-list\">\n <div class=\"mj-profile__field\">\n <div class=\"mj-profile__field-icon\"><i class=\"fa-solid fa-id-badge\"></i></div>\n <div class=\"mj-profile__field-body\">\n <div class=\"mj-profile__field-label\">Account</div>\n <div class=\"mj-profile__field-value\">\n {{ AccountType }} · {{ AccountStatus }}\n @if (MemberSince) {\n <span class=\"mj-profile__field-muted\"> · {{ MemberSince }}</span>\n }\n </div>\n </div>\n </div>\n\n <button class=\"mj-profile__field mj-profile__field--button\" type=\"button\" (click)=\"OpenPanel('theme')\">\n <div class=\"mj-profile__field-icon\"><i class=\"fa-solid fa-palette\"></i></div>\n <div class=\"mj-profile__field-body\">\n <div class=\"mj-profile__field-label\">Theme</div>\n <div class=\"mj-profile__field-value\">{{ ThemeLabel }}</div>\n </div>\n <i class=\"fa-solid fa-chevron-right mj-profile__field-chev\"></i>\n </button>\n </div>\n\n @if (OmnibarAvailable) {\n <div class=\"mj-profile__section\">\n <div class=\"mj-profile__section-head\">\n <h4>Command Palette</h4>\n </div>\n <div class=\"mj-profile__channels\">\n <button type=\"button\"\n class=\"mj-profile__channel\"\n data-testid=\"omnibar-toggle\"\n [class.mj-profile__channel--on]=\"OmnibarEnabled\"\n [disabled]=\"SavingOmnibar\"\n (click)=\"ToggleOmnibar()\">\n <div class=\"mj-profile__channel-icon\"><i class=\"fa-solid fa-magnifying-glass\"></i></div>\n <div class=\"mj-profile__channel-label\">\n Unified command palette\n <div class=\"mj-profile__channel-hint\">{{ OmnibarShortcutLabel }} — search, records, agents & commands in one bar</div>\n </div>\n <div class=\"mj-profile__channel-state\">\n @if (SavingOmnibar) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n <span class=\"mj-profile__switch\" [class.mj-profile__switch--on]=\"OmnibarEnabled\">\n <span class=\"mj-profile__switch-knob\"></span>\n </span>\n }\n </div>\n </button>\n </div>\n </div>\n }\n\n <div class=\"mj-profile__section\">\n <div class=\"mj-profile__section-head\">\n <h4>Notifications</h4>\n @if (UnreadCount > 0) {\n <span class=\"mj-profile__unread\">{{ UnreadCount }} unread</span>\n }\n </div>\n @if (LoadingNotifications) {\n <div class=\"mj-profile__channels-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading…\n </div>\n } @else {\n <div class=\"mj-profile__channels\">\n @for (ch of Channels; track ch.key) {\n <button type=\"button\"\n class=\"mj-profile__channel\"\n [class.mj-profile__channel--on]=\"ch.enabled\"\n [disabled]=\"ch.saving\"\n (click)=\"ToggleChannel(ch)\">\n <div class=\"mj-profile__channel-icon\"><i [class]=\"ch.icon\"></i></div>\n <div class=\"mj-profile__channel-label\">{{ ch.label }}</div>\n <div class=\"mj-profile__channel-state\">\n @if (ch.saving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n <span class=\"mj-profile__switch\" [class.mj-profile__switch--on]=\"ch.enabled\">\n <span class=\"mj-profile__switch-knob\"></span>\n </span>\n }\n </div>\n </button>\n }\n </div>\n }\n </div>\n\n <div class=\"mj-profile__footer\">\n <button class=\"mj-profile__btn mj-profile__btn--danger\" type=\"button\" (click)=\"OnSignOut()\">\n <i class=\"fa-solid fa-arrow-right-from-bracket\"></i>\n Sign out\n </button>\n <span class=\"mj-profile__spacer\"></span>\n <button class=\"mj-profile__btn mj-profile__btn--primary\" type=\"button\" (click)=\"OnCloseClick()\">\n Done\n </button>\n </div>\n </div>\n\n <!-- ===== SLIDE-IN PANEL ===== -->\n <div class=\"mj-profile__panel\" [class.mj-profile__panel--open]=\"ActivePanel !== 'none'\">\n <div class=\"mj-profile__panel-header\">\n <button class=\"mj-profile__panel-back\" type=\"button\" aria-label=\"Back\" (click)=\"ClosePanel()\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n <h3 class=\"mj-profile__panel-title\">{{ PanelTitle }}</h3>\n </div>\n <div class=\"mj-profile__panel-body\">\n @if (ActivePanel === 'photo') {\n <mj-user-profile-settings></mj-user-profile-settings>\n } @else if (ActivePanel === 'theme') {\n <div class=\"mj-profile__themes\">\n @for (theme of ThemeOptions; track theme.id) {\n <button type=\"button\"\n class=\"mj-profile__theme\"\n [class.mj-profile__theme--active]=\"theme.id === ThemePreference\"\n [class.mj-profile__theme--saving]=\"SavingTheme === theme.id\"\n [disabled]=\"!!SavingTheme\"\n (click)=\"SelectTheme(theme.id)\">\n <div class=\"mj-profile__theme-swatch\" [class]=\"'mj-profile__theme-swatch--' + theme.swatch\">\n <i [class]=\"theme.icon\"></i>\n </div>\n <div class=\"mj-profile__theme-info\">\n <div class=\"mj-profile__theme-name\">{{ theme.name }}</div>\n @if (theme.description) {\n <div class=\"mj-profile__theme-desc\">{{ theme.description }}</div>\n }\n </div>\n @if (SavingTheme === theme.id) {\n <i class=\"fa-solid fa-spinner fa-spin mj-profile__theme-check\"></i>\n } @else if (theme.id === ThemePreference) {\n <i class=\"fa-solid fa-check mj-profile__theme-check\"></i>\n }\n </button>\n }\n </div>\n }\n </div>\n </div>\n</div>\n `,\n styles: [`\n:host {\n display: block;\n width: 100%;\n height: 100%;\n}\n.mj-profile {\n display: block;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n height: 100%;\n min-height: 0;\n position: relative;\n font-family: inherit;\n overflow: hidden;\n}\n.mj-profile__close {\n position: absolute;\n top: 12px; right: 12px;\n width: 36px; height: 36px;\n border: none; border-radius: 8px;\n background: rgba(255, 255, 255, 0.18);\n backdrop-filter: blur(8px);\n color: #fff;\n cursor: pointer;\n font-size: 16px;\n display: flex; align-items: center; justify-content: center;\n transition: background 0.15s, opacity 0.2s;\n z-index: 4;\n}\n.mj-profile__close:hover { background: rgba(255, 255, 255, 0.3); }\n.mj-profile--panel-open .mj-profile__close { opacity: 0; pointer-events: none; }\n\n/* ============ MAIN VIEW ============ */\n.mj-profile__main {\n display: flex;\n flex-direction: column;\n height: 100%;\n transition: transform 0.32s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.mj-profile--panel-open .mj-profile__main {\n transform: translateX(-12%);\n pointer-events: none;\n}\n\n.mj-profile__hero {\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: #fff;\n padding: 22px 24px 56px;\n position: relative;\n overflow: hidden;\n flex-shrink: 0;\n}\n.mj-profile__hero::before {\n content: '';\n position: absolute;\n inset: -50%;\n background: radial-gradient(circle, rgba(255, 255, 255, 0.10) 0%, transparent 60%);\n animation: mj-profile-rotate 24s linear infinite;\n pointer-events: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .mj-profile__hero::before { animation: none; }\n}\n@keyframes mj-profile-rotate { to { transform: rotate(360deg); } }\n\n.mj-profile__hero-title {\n margin: 0;\n font-size: 12px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 1.2px;\n opacity: 0.85;\n position: relative;\n z-index: 1;\n}\n\n.mj-profile__avatar-zone {\n position: relative;\n width: 96px;\n height: 96px;\n margin: -48px auto 12px;\n z-index: 2;\n}\n.mj-profile__avatar {\n width: 96px;\n height: 96px;\n border-radius: 50%;\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 32px;\n font-weight: 700;\n border: 4px solid var(--mj-bg-surface);\n box-shadow: 0 6px 20px rgba(0, 0, 0, 0.18);\n object-fit: cover;\n overflow: hidden;\n}\nimg.mj-profile__avatar { background: var(--mj-bg-surface-card); }\n.mj-profile__avatar--icon i { font-size: 36px; }\n\n.mj-profile__avatar-edit {\n position: absolute;\n bottom: 2px; right: 2px;\n width: 30px; height: 30px;\n border-radius: 50%;\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n border: 2px solid var(--mj-bg-surface);\n cursor: pointer;\n display: flex; align-items: center; justify-content: center;\n font-size: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);\n transition: transform 0.15s;\n}\n.mj-profile__avatar-edit:hover { transform: scale(1.1); }\n\n.mj-profile__identity {\n text-align: center;\n padding: 0 24px 16px;\n flex-shrink: 0;\n}\n.mj-profile__name {\n margin: 0 0 4px;\n font-size: 22px;\n font-weight: 700;\n letter-spacing: -0.4px;\n color: var(--mj-text-primary);\n}\n.mj-profile__email {\n margin: 0 0 12px;\n color: var(--mj-text-muted);\n font-size: 13px;\n word-break: break-all;\n}\n.mj-profile__chips {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n justify-content: center;\n}\n.mj-profile__chip {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 9px;\n border-radius: 100px;\n font-size: 11px;\n font-weight: 600;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n}\n.mj-profile__chip--admin {\n background: color-mix(in srgb, #f59e0b 14%, transparent);\n color: #b45309;\n}\n.mj-profile__chip--dev {\n background: color-mix(in srgb, #10b981 14%, transparent);\n color: #047857;\n}\n\n.mj-profile__field-list {\n padding: 0 24px;\n flex-shrink: 0;\n}\n.mj-profile__field {\n display: flex;\n align-items: center;\n padding: 12px 0;\n gap: 14px;\n border-top: 1px solid var(--mj-border-subtle);\n width: 100%;\n text-align: left;\n background: transparent;\n border-left: none;\n border-right: none;\n border-bottom: none;\n font-family: inherit;\n color: inherit;\n}\n.mj-profile__field:first-child { border-top: none; }\n.mj-profile__field--button {\n cursor: pointer;\n transition: background 0.12s;\n margin: 0 -8px;\n padding-left: 8px;\n padding-right: 8px;\n border-radius: 8px;\n border-top: none;\n}\n.mj-profile__field--button + .mj-profile__field--button { margin-top: 0; }\n.mj-profile__field--button:hover { background: var(--mj-bg-surface-hover); }\n.mj-profile__field--button:hover .mj-profile__field-chev { color: var(--mj-brand-primary); }\n.mj-profile__field-icon {\n width: 32px; height: 32px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n flex-shrink: 0;\n}\n.mj-profile__field-body { flex: 1; min-width: 0; }\n.mj-profile__field-label {\n font-size: 10.5px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n font-weight: 600;\n letter-spacing: 0.5px;\n}\n.mj-profile__field-value {\n font-size: 13px;\n color: var(--mj-text-primary);\n margin-top: 2px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.mj-profile__field-muted { color: var(--mj-text-muted); }\n.mj-profile__field-chev {\n color: var(--mj-text-muted);\n font-size: 11px;\n transition: color 0.15s;\n}\n\n.mj-profile__section {\n padding: 16px 24px 8px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n}\n.mj-profile__section-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 10px;\n}\n.mj-profile__section-head h4 {\n margin: 0;\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.6px;\n}\n.mj-profile__unread {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n padding: 2px 8px;\n border-radius: 100px;\n}\n.mj-profile__channels-loading {\n color: var(--mj-text-muted);\n font-size: 12.5px;\n padding: 12px;\n text-align: center;\n}\n.mj-profile__channels {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.mj-profile__channel {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.15s;\n font-family: inherit;\n text-align: left;\n width: 100%;\n}\n.mj-profile__channel:hover:not(:disabled) {\n border-color: var(--mj-border-default);\n background: var(--mj-bg-surface-hover);\n}\n.mj-profile__channel:disabled { cursor: wait; opacity: 0.7; }\n.mj-profile__channel-icon {\n width: 32px; height: 32px;\n border-radius: 8px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n display: flex; align-items: center; justify-content: center;\n font-size: 13px;\n flex-shrink: 0;\n transition: all 0.15s;\n}\n.mj-profile__channel--on .mj-profile__channel-icon {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n color: var(--mj-brand-primary);\n}\n.mj-profile__channel-label {\n flex: 1;\n font-size: 13.5px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n.mj-profile__channel-hint {\n font-size: 11.5px;\n font-weight: 400;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n.mj-profile__channel-state {\n flex-shrink: 0;\n color: var(--mj-text-muted);\n font-size: 13px;\n min-width: 36px;\n display: flex; justify-content: flex-end; align-items: center;\n}\n\n.mj-profile__switch {\n width: 36px;\n height: 20px;\n background: var(--mj-border-strong);\n border-radius: 100px;\n position: relative;\n transition: background 0.2s;\n display: inline-block;\n}\n.mj-profile__switch-knob {\n position: absolute;\n top: 2px; left: 2px;\n width: 16px; height: 16px;\n background: white;\n border-radius: 50%;\n transition: transform 0.2s;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n}\n.mj-profile__switch--on { background: var(--mj-brand-primary); }\n.mj-profile__switch--on .mj-profile__switch-knob { transform: translateX(16px); }\n\n.mj-profile__footer {\n border-top: 1px solid var(--mj-border-subtle);\n padding: 14px 20px;\n display: flex;\n gap: 8px;\n align-items: center;\n flex-shrink: 0;\n}\n.mj-profile__spacer { flex: 1; }\n.mj-profile__btn {\n padding: 9px 16px;\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n font-family: inherit;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n transition: all 0.15s;\n}\n.mj-profile__btn:hover { background: var(--mj-bg-surface-hover); border-color: var(--mj-border-strong); }\n.mj-profile__btn--primary {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n.mj-profile__btn--primary:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 88%, black);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 88%, black);\n}\n.mj-profile__btn--danger {\n color: var(--mj-status-error);\n border-color: color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-border-default));\n}\n.mj-profile__btn--danger:hover {\n background: color-mix(in srgb, var(--mj-status-error) 8%, transparent);\n border-color: var(--mj-status-error);\n}\n\n/* ============ SLIDE-IN PANEL ============ */\n.mj-profile__panel {\n position: absolute;\n inset: 0;\n background: var(--mj-bg-surface);\n transform: translateX(100%);\n transition: transform 0.32s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n flex-direction: column;\n z-index: 3;\n}\n.mj-profile__panel--open {\n transform: translateX(0);\n box-shadow: -8px 0 24px rgba(0, 0, 0, 0.06);\n}\n.mj-profile__panel-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 14px 18px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface-card);\n flex-shrink: 0;\n}\n.mj-profile__panel-back {\n width: 34px; height: 34px;\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n cursor: pointer;\n display: flex; align-items: center; justify-content: center;\n font-size: 13px;\n transition: all 0.15s;\n font-family: inherit;\n}\n.mj-profile__panel-back:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n.mj-profile__panel-title {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n letter-spacing: -0.2px;\n}\n.mj-profile__panel-body {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding: 16px 20px 20px;\n}\n\n/* Theme picker */\n.mj-profile__themes {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.mj-profile__theme {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 12px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.15s;\n text-align: left;\n width: 100%;\n font-family: inherit;\n}\n.mj-profile__theme:hover:not(:disabled) {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface-hover);\n}\n.mj-profile__theme:disabled { cursor: wait; opacity: 0.7; }\n.mj-profile__theme--active {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface-card));\n}\n.mj-profile__theme-swatch {\n width: 40px; height: 40px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 16px;\n flex-shrink: 0;\n border: 1px solid var(--mj-border-default);\n}\n.mj-profile__theme-swatch--light {\n background: linear-gradient(135deg, #ffffff 0%, #f1f5f9 100%);\n color: #f59e0b;\n}\n.mj-profile__theme-swatch--dark {\n background: linear-gradient(135deg, #1e293b 0%, #0f172a 100%);\n color: #94a3b8;\n border-color: #334155;\n}\n.mj-profile__theme-swatch--system {\n background: linear-gradient(135deg, #ffffff 0%, #ffffff 49%, #1e293b 51%, #0f172a 100%);\n color: var(--mj-text-secondary);\n}\n.mj-profile__theme-info { flex: 1; min-width: 0; }\n.mj-profile__theme-name {\n font-size: 13.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.mj-profile__theme-desc {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.mj-profile__theme-check {\n color: var(--mj-brand-primary);\n font-size: 14px;\n flex-shrink: 0;\n}\n\n@media (max-width: 480px) {\n .mj-profile__hero { padding: 20px 18px 48px; }\n .mj-profile__avatar-zone { width: 88px; height: 88px; margin-top: -44px; }\n .mj-profile__avatar { width: 88px; height: 88px; font-size: 28px; }\n .mj-profile__name { font-size: 19px; }\n .mj-profile__field-list,\n .mj-profile__section { padding-left: 18px; padding-right: 18px; }\n .mj-profile__footer { padding: 12px 16px; }\n .mj-profile--panel-open .mj-profile__main { transform: translateX(-20%); }\n .mj-profile__panel-body { padding: 14px 16px 16px; }\n}\n `]\n})\nexport class ProfileDialogComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n @Output() CloseRequested = new EventEmitter<void>();\n\n @Input() AvatarUrl: string | null = null;\n @Input() AvatarIconClass: string | null = null;\n\n public UserName = '';\n public UserEmail = '';\n public UserInitials = '?';\n public AccountType = '';\n public AccountStatus = '';\n public MemberSince = '';\n public ThemeLabel = '';\n public RoleChips: Array<{ label: string; tone: string; icon: string | null }> = [];\n\n public LoadingNotifications = true;\n public Channels: NotificationChannel[] = [\n { key: 'InApp', label: 'In-app', icon: 'fa-solid fa-bell', enabled: false, saving: false },\n { key: 'Email', label: 'Email', icon: 'fa-solid fa-envelope', enabled: false, saving: false },\n { key: 'SMS', label: 'SMS', icon: 'fa-solid fa-mobile', enabled: false, saving: false }\n ];\n public UnreadCount = 0;\n\n // Omnibar per-user opt-in (shown only when the instance makes it available)\n public OmnibarAvailable = false;\n public OmnibarEnabled = false;\n public SavingOmnibar = false;\n\n /** Platform-correct summon-shortcut label ('⌘K' on Mac, 'Ctrl+K' elsewhere). */\n public get OmnibarShortcutLabel(): string {\n return GetOmnibarShortcutLabel();\n }\n\n // Slide-in panel state\n public ActivePanel: ProfilePanel = 'none';\n public ThemeOptions: Array<{ id: string; name: string; description: string; icon: string; swatch: 'light' | 'dark' | 'system' }> = [];\n public ThemePreference = '';\n public SavingTheme: string | null = null;\n\n public get PanelTitle(): string {\n switch (this.ActivePanel) {\n case 'photo': return 'Profile photo';\n case 'theme': return 'Theme';\n default: return '';\n }\n }\n\n private authBase = inject(MJAuthBase);\n private themeService = inject(ThemeService);\n private sharedService = inject(SharedService);\n private cdr = inject(ChangeDetectorRef);\n\n private themeSub?: Subscription;\n\n public ngOnInit(): void {\n this.populateIdentity();\n this.populateThemeOptions();\n this.loadNotifications();\n this.OmnibarAvailable = IsOmnibarAvailable();\n this.OmnibarEnabled = IsOmnibarEnabledForUser();\n this.themeSub = this.themeService.Preference$.subscribe(pref => {\n this.ThemePreference = pref;\n this.ThemeLabel = this.computeThemeLabel();\n this.cdr.markForCheck();\n });\n }\n\n public ngOnDestroy(): void {\n this.themeSub?.unsubscribe();\n }\n\n public OnCloseClick(): void {\n if (this.ActivePanel !== 'none') {\n this.ClosePanel();\n return;\n }\n this.CloseRequested.emit();\n }\n\n public OnAvatarLoadError(): void {\n this.AvatarUrl = null;\n this.cdr.markForCheck();\n }\n\n public OpenPanel(panel: ProfilePanel): void {\n this.ActivePanel = panel;\n }\n\n public ClosePanel(): void {\n this.ActivePanel = 'none';\n }\n\n public async OnSignOut(): Promise<void> {\n try {\n localStorage.removeItem('auth');\n localStorage.removeItem('claims');\n await this.authBase.logout();\n } catch (err) {\n const msg = err instanceof Error ? err.message : 'Unknown error';\n this.sharedService.CreateSimpleNotification(`Sign out failed: ${msg}`, 'error', 3000);\n }\n }\n\n public async SelectTheme(themeId: string): Promise<void> {\n if (this.SavingTheme) return;\n if (themeId === this.ThemePreference) return;\n this.SavingTheme = themeId;\n this.cdr.markForCheck();\n try {\n await this.themeService.SetTheme(themeId);\n } catch (err) {\n const msg = err instanceof Error ? err.message : 'Unknown error';\n this.sharedService.CreateSimpleNotification(`Theme change failed: ${msg}`, 'error', 3000);\n } finally {\n this.SavingTheme = null;\n this.cdr.markForCheck();\n }\n }\n\n /**\n * Per-user omnibar opt-in/out. Persists via UserInfoEngine (MJ: User\n * Settings) so the choice follows the user across browsers/devices. The\n * shell reads the same setting on every change-detection pass, so the\n * header affordance and Ctrl+K behavior flip live — no reload needed.\n */\n public async ToggleOmnibar(): Promise<void> {\n if (this.SavingOmnibar) return;\n const next = !this.OmnibarEnabled;\n this.SavingOmnibar = true;\n this.cdr.markForCheck();\n try {\n const saved = await UserInfoEngine.Instance.SetSetting(OMNIBAR_USER_SETTING_KEY, String(next));\n if (saved) {\n this.OmnibarEnabled = next;\n } else {\n this.sharedService.CreateSimpleNotification('Could not save the command palette preference', 'error', 3000);\n }\n } finally {\n this.SavingOmnibar = false;\n this.cdr.markForCheck();\n }\n }\n\n public async ToggleChannel(channel: NotificationChannel): Promise<void> {\n if (channel.saving) return;\n const newState = !channel.enabled;\n channel.saving = true;\n this.cdr.markForCheck();\n\n const provider = this.ProviderToUse;\n const currentUser = provider?.CurrentUser;\n if (!provider || !currentUser) {\n channel.saving = false;\n return;\n }\n\n try {\n const transGroup = await provider.CreateTransactionGroup();\n const types = UserInfoEngine.Instance.NotificationTypes;\n const preferences = UserInfoEngine.Instance.NotificationPreferences;\n\n for (const type of types) {\n if (type.AllowUserPreference === false) continue;\n\n let pref = preferences.find(p => UUIDsEqual(p.NotificationTypeID, type.ID));\n if (!pref) {\n pref = await provider.GetEntityObject<MJUserNotificationPreferenceEntity>(\n 'MJ: User Notification Preferences'\n );\n pref.UserID = currentUser.ID;\n pref.NotificationTypeID = type.ID;\n pref.InAppEnabled = type.DefaultInApp ?? true;\n pref.EmailEnabled = type.DefaultEmail ?? false;\n pref.SMSEnabled = type.DefaultSMS ?? false;\n }\n\n if (channel.key === 'InApp') pref.InAppEnabled = newState;\n else if (channel.key === 'Email') pref.EmailEnabled = newState;\n else pref.SMSEnabled = newState;\n\n pref.Enabled = pref.InAppEnabled || pref.EmailEnabled || pref.SMSEnabled;\n pref.TransactionGroup = transGroup;\n pref.Save();\n }\n\n const success = await transGroup.Submit();\n if (success) {\n channel.enabled = newState;\n this.sharedService.CreateSimpleNotification(\n `${channel.label} notifications ${newState ? 'enabled' : 'disabled'}`,\n 'success',\n 2000\n );\n } else {\n throw new Error('Save failed');\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : 'Unknown error';\n this.sharedService.CreateSimpleNotification(`Update failed: ${msg}`, 'error', 3000);\n await this.loadNotifications();\n } finally {\n channel.saving = false;\n this.cdr.markForCheck();\n }\n }\n\n // ---------- private helpers ----------\n\n private populateIdentity(): void {\n const provider = this.ProviderToUse;\n const user = provider?.CurrentUser;\n if (user) {\n const name = user.Name || `${user.FirstName ?? ''} ${user.LastName ?? ''}`.trim();\n this.UserName = name || 'User';\n this.UserEmail = user.Email || '';\n this.UserInitials = this.computeInitials(this.UserName);\n this.AccountType = user.Type || 'User';\n this.AccountStatus = user.IsActive ? 'Active' : 'Inactive';\n this.MemberSince = this.formatMemberSince(user.__mj_CreatedAt);\n this.RoleChips = this.computeRoleChips(user.UserRoles);\n }\n this.ThemePreference = this.themeService.Preference;\n this.ThemeLabel = this.computeThemeLabel();\n }\n\n private populateThemeOptions(): void {\n const themes: ThemeDefinition[] = this.themeService.AvailableThemes ?? [];\n this.ThemeOptions = themes.map(t => ({\n id: t.Id,\n name: t.Name,\n description: t.Description ?? (t.BaseTheme === 'dark' ? 'Dark interface' : 'Light interface'),\n icon: t.BaseTheme === 'dark' ? 'fa-solid fa-moon' : 'fa-solid fa-sun',\n swatch: t.BaseTheme as 'light' | 'dark'\n }));\n this.ThemeOptions.push({\n id: 'system',\n name: 'System',\n description: 'Follow your operating system',\n icon: 'fa-solid fa-desktop',\n swatch: 'system'\n });\n }\n\n private async loadNotifications(): Promise<void> {\n this.LoadingNotifications = true;\n try {\n this.UnreadCount = UserInfoEngine.Instance.UnreadNotificationCount ?? 0;\n const preferences = UserInfoEngine.Instance.NotificationPreferences;\n const types = UserInfoEngine.Instance.NotificationTypes;\n\n let inApp: boolean, email: boolean, sms: boolean;\n if (preferences.length === 0 && types.length > 0) {\n inApp = types.some(t => t.DefaultInApp ?? true);\n email = types.some(t => t.DefaultEmail ?? false);\n sms = types.some(t => t.DefaultSMS ?? false);\n } else {\n inApp = preferences.some(p => p.InAppEnabled);\n email = preferences.some(p => p.EmailEnabled);\n sms = preferences.some(p => p.SMSEnabled);\n }\n\n this.Channels[0].enabled = inApp;\n this.Channels[1].enabled = email;\n this.Channels[2].enabled = sms;\n } catch {\n // non-fatal; leave defaults\n } finally {\n this.LoadingNotifications = false;\n this.cdr.markForCheck();\n }\n }\n\n private computeInitials(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return '?';\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n }\n\n private computeRoleChips(roles: UserRoleInfo[] | undefined): Array<{ label: string; tone: string; icon: string | null }> {\n if (!roles || roles.length === 0) return [];\n return roles\n .map(r => r.Role)\n .filter((n): n is string => !!n)\n .map(roleName => {\n const lower = roleName.toLowerCase();\n if (lower.includes('admin')) return { label: roleName, tone: 'admin', icon: 'fa-solid fa-shield' };\n if (lower.includes('developer') || lower.includes('integration')) return { label: roleName, tone: 'dev', icon: 'fa-solid fa-code' };\n return { label: roleName, tone: '', icon: null };\n });\n }\n\n private formatMemberSince(date: Date | string | null | undefined): string {\n if (!date) return '';\n const d = date instanceof Date ? date : new Date(date);\n if (isNaN(d.getTime())) return '';\n return d.toLocaleDateString(undefined, { month: 'short', year: 'numeric' });\n }\n\n private computeThemeLabel(): string {\n const applied = this.themeService.AppliedTheme;\n const preference = this.themeService.Preference;\n const def = this.themeService.GetThemeDefinition(applied);\n const themeName = def?.Name ?? applied;\n return preference === 'system' ? `${themeName} · System` : themeName;\n }\n}\n"]}
|
|
@@ -81,6 +81,22 @@ export declare class ChatConversationsResource extends BaseResourceComponent imp
|
|
|
81
81
|
* The shell populates queryParams from the URL, and nav params come from cross-resource linking.
|
|
82
82
|
* Sets state synchronously so child components see values immediately.
|
|
83
83
|
*/
|
|
84
|
+
/**
|
|
85
|
+
* The omnibar's '@' mode lands here with ?agent=<AgentName>: start a NEW
|
|
86
|
+
* conversation with the composer pre-addressed to that agent. The mention chip
|
|
87
|
+
* itself is typed by the user's send; prefilling '@"Name" ' is the plain-text
|
|
88
|
+
* form the composer's agent-mention provider recognizes.
|
|
89
|
+
*/
|
|
90
|
+
private applyAgentParam;
|
|
91
|
+
pendingComposerAgentMention: string | null;
|
|
92
|
+
private lastAppliedAgentParamKey;
|
|
93
|
+
onComposerAgentMentionConsumed(): void;
|
|
94
|
+
/**
|
|
95
|
+
* Clears the agent pre-address params OUTSIDE any OnQueryParamsChanged delivery:
|
|
96
|
+
* UpdateQueryParams is suppressed synchronously during delivery, so an inline
|
|
97
|
+
* call from the echo path would silently no-op.
|
|
98
|
+
*/
|
|
99
|
+
private clearAgentParamDeferred;
|
|
84
100
|
private applyConfigurationParams;
|
|
85
101
|
/** Opens the pending realtime session review once the chat area exists (retries next tick while it renders). */
|
|
86
102
|
private applyPendingRealtimeSessionReview;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-conversations-resource.component.d.ts","sourceRoot":"","sources":["../../../src/lib/resource-wrappers/chat-conversations-resource.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,SAAS,EAAa,iBAAiB,EAAgB,MAAM,eAAe,CAAC;AACpH,OAAO,EAAY,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,qBAAqB,EAAqB,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,YAAY,EAA+B,oBAAoB,EAA2D,MAAM,+BAA+B,CAAC;AACzK,OAAO,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,4BAA4B,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAClN,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;;AAGjE;;;;;;;;;;GAUG;AACH,
|
|
1
|
+
{"version":3,"file":"chat-conversations-resource.component.d.ts","sourceRoot":"","sources":["../../../src/lib/resource-wrappers/chat-conversations-resource.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,11 +55,11 @@ function ChatConversationsResource_Conditional_0_Conditional_3_Template(rf, ctx)
|
|
|
55
55
|
function ChatConversationsResource_Conditional_0_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
56
56
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
57
57
|
i0.ɵɵelementStart(0, "mj-conversation-chat-area", 14, 1);
|
|
58
|
-
i0.ɵɵlistener("sidebarToggleClicked", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_sidebarToggleClicked_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.expandSidebar()); })("conversationRenamed", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_conversationRenamed_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onConversationRenamed($event)); })("conversationCreated", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_conversationCreated_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onConversationCreated($event)); })("threadOpened", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_threadOpened_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onThreadOpened($event)); })("threadClosed", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_threadClosed_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onThreadClosed()); })("pendingArtifactConsumed", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_pendingArtifactConsumed_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onPendingArtifactConsumed()); })("pendingMessageConsumed", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_pendingMessageConsumed_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onPendingMessageConsumed()); })("pendingMessageRequested", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_pendingMessageRequested_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onPendingMessageRequested($event)); })("artifactLinkClicked", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_artifactLinkClicked_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onArtifactLinkClicked($event)); })("openEntityRecord", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_openEntityRecord_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); })("navigationRequest", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_navigationRequest_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onNavigationRequest($event)); });
|
|
58
|
+
i0.ɵɵlistener("sidebarToggleClicked", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_sidebarToggleClicked_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.expandSidebar()); })("conversationRenamed", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_conversationRenamed_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onConversationRenamed($event)); })("conversationCreated", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_conversationCreated_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onConversationCreated($event)); })("threadOpened", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_threadOpened_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onThreadOpened($event)); })("threadClosed", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_threadClosed_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onThreadClosed()); })("pendingArtifactConsumed", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_pendingArtifactConsumed_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onPendingArtifactConsumed()); })("pendingMessageConsumed", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_pendingMessageConsumed_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onPendingMessageConsumed()); })("pendingMessageRequested", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_pendingMessageRequested_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onPendingMessageRequested($event)); })("artifactLinkClicked", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_artifactLinkClicked_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onArtifactLinkClicked($event)); })("openEntityRecord", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_openEntityRecord_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); })("navigationRequest", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_navigationRequest_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onNavigationRequest($event)); })("composerAgentMentionConsumed", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_composerAgentMentionConsumed_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onComposerAgentMentionConsumed()); });
|
|
59
59
|
i0.ɵɵelementEnd();
|
|
60
60
|
} if (rf & 2) {
|
|
61
61
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
62
|
-
i0.ɵɵproperty("environmentId", ctx_r1.environmentId)("currentUser", ctx_r1.currentUser)("conversationId", ctx_r1.selectedConversationId)("conversation", ctx_r1.selectedConversation)("threadId", ctx_r1.selectedThreadId)("isNewConversation", ctx_r1.isNewUnsavedConversation)("pendingMessage", ctx_r1.pendingMessageToSend)("pendingAttachments", ctx_r1.pendingAttachmentsToSend)("pendingArtifactId", ctx_r1.pendingArtifactId)("pendingArtifactConversationId", ctx_r1.pendingArtifactConversationId)("pendingArtifactVersionNumber", ctx_r1.pendingArtifactVersionNumber)("showSidebarToggle", ctx_r1.isSidebarCollapsed && ctx_r1.isSidebarSettingsLoaded);
|
|
62
|
+
i0.ɵɵproperty("environmentId", ctx_r1.environmentId)("currentUser", ctx_r1.currentUser)("conversationId", ctx_r1.selectedConversationId)("conversation", ctx_r1.selectedConversation)("threadId", ctx_r1.selectedThreadId)("isNewConversation", ctx_r1.isNewUnsavedConversation)("pendingMessage", ctx_r1.pendingMessageToSend)("pendingAttachments", ctx_r1.pendingAttachmentsToSend)("pendingArtifactId", ctx_r1.pendingArtifactId)("pendingArtifactConversationId", ctx_r1.pendingArtifactConversationId)("pendingArtifactVersionNumber", ctx_r1.pendingArtifactVersionNumber)("showSidebarToggle", ctx_r1.isSidebarCollapsed && ctx_r1.isSidebarSettingsLoaded)("composerAgentMention", ctx_r1.pendingComposerAgentMention);
|
|
63
63
|
} }
|
|
64
64
|
function ChatConversationsResource_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
65
65
|
i0.ɵɵelementStart(0, "div", 2);
|
|
@@ -67,7 +67,7 @@ function ChatConversationsResource_Conditional_0_Template(rf, ctx) { if (rf & 1)
|
|
|
67
67
|
i0.ɵɵconditionalCreate(2, ChatConversationsResource_Conditional_0_Conditional_2_Template, 2, 7, "div", 5);
|
|
68
68
|
i0.ɵɵconditionalCreate(3, ChatConversationsResource_Conditional_0_Conditional_3_Template, 1, 0, "div", 6);
|
|
69
69
|
i0.ɵɵelementStart(4, "div", 7);
|
|
70
|
-
i0.ɵɵconditionalCreate(5, ChatConversationsResource_Conditional_0_Conditional_5_Template, 2,
|
|
70
|
+
i0.ɵɵconditionalCreate(5, ChatConversationsResource_Conditional_0_Conditional_5_Template, 2, 13, "mj-conversation-chat-area", 8);
|
|
71
71
|
i0.ɵɵelementEnd()();
|
|
72
72
|
} if (rf & 2) {
|
|
73
73
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -270,12 +270,69 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
|
|
|
270
270
|
* The shell populates queryParams from the URL, and nav params come from cross-resource linking.
|
|
271
271
|
* Sets state synchronously so child components see values immediately.
|
|
272
272
|
*/
|
|
273
|
+
/**
|
|
274
|
+
* The omnibar's '@' mode lands here with ?agent=<AgentName>: start a NEW
|
|
275
|
+
* conversation with the composer pre-addressed to that agent. The mention chip
|
|
276
|
+
* itself is typed by the user's send; prefilling '@"Name" ' is the plain-text
|
|
277
|
+
* form the composer's agent-mention provider recognizes.
|
|
278
|
+
*/
|
|
279
|
+
applyAgentParam(agentName, requestNonce) {
|
|
280
|
+
if (!agentName) {
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
// The pre-address is a one-shot INSTRUCTION keyed by agent|nonce (the omnibar
|
|
284
|
+
// stamps ?agentReq=<nonce> alongside ?agent=). The shell's URL↔tab-config sync
|
|
285
|
+
// can echo an already-consumed param back at us — an in-flight navigation that
|
|
286
|
+
// settles AFTER our consume-clear backfills the tab config from the URL ("URL
|
|
287
|
+
// is source of truth"). A value-only guard can't tell that echo apart from a
|
|
288
|
+
// genuine re-tag of the same agent; the nonce can. Nonce-less deliveries (hand
|
|
289
|
+
// typed deep links) still apply once per session.
|
|
290
|
+
const requestKey = `${agentName}|${requestNonce ?? ''}`;
|
|
291
|
+
if (requestKey === this.lastAppliedAgentParamKey) {
|
|
292
|
+
// Stale echo. Re-issue the clear so tab config and URL converge to clean —
|
|
293
|
+
// otherwise the echoed param persists into the saved workspace and re-applies
|
|
294
|
+
// on every boot, wiping whatever draft the composer restored.
|
|
295
|
+
console.log(`[Omnibar→Chat] wrapper: agent param '${agentName}' (req=${requestNonce ?? 'none'}) already applied — ignoring echo, re-clearing`);
|
|
296
|
+
this.clearAgentParamDeferred();
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
console.log(`[Omnibar→Chat] wrapper: agent param '${agentName}' (req=${requestNonce ?? 'none'}) received — staging composer pre-address`);
|
|
300
|
+
this.lastAppliedAgentParamKey = requestKey;
|
|
301
|
+
this.isNewUnsavedConversation = true;
|
|
302
|
+
this.selectedConversationId = null;
|
|
303
|
+
this.selectedConversation = null;
|
|
304
|
+
// Resolved mention PILL (composerAgentMention) — matching the UX of typing
|
|
305
|
+
// '@agent' and picking from the dropdown; pendingMessage would AUTO-SEND.
|
|
306
|
+
this.pendingComposerAgentMention = agentName;
|
|
307
|
+
this.cdr.detectChanges();
|
|
308
|
+
}
|
|
309
|
+
pendingComposerAgentMention = null;
|
|
310
|
+
lastAppliedAgentParamKey = null;
|
|
311
|
+
onComposerAgentMentionConsumed() {
|
|
312
|
+
this.pendingComposerAgentMention = null;
|
|
313
|
+
// Consume-and-clear: drop the agent params from the tab/URL so boots and
|
|
314
|
+
// back/forward can't re-stage the pill. lastAppliedAgentParamKey is
|
|
315
|
+
// intentionally NOT reset — a fresh omnibar re-tag (even of the same agent)
|
|
316
|
+
// carries a new agentReq nonce and forms a new key, so anything re-delivering
|
|
317
|
+
// the OLD key is by definition a stale echo.
|
|
318
|
+
console.log(`[Omnibar→Chat] wrapper: pill applied — clearing agent param from URL`);
|
|
319
|
+
this.clearAgentParamDeferred();
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Clears the agent pre-address params OUTSIDE any OnQueryParamsChanged delivery:
|
|
323
|
+
* UpdateQueryParams is suppressed synchronously during delivery, so an inline
|
|
324
|
+
* call from the echo path would silently no-op.
|
|
325
|
+
*/
|
|
326
|
+
clearAgentParamDeferred() {
|
|
327
|
+
setTimeout(() => this.UpdateQueryParams({ agent: null, agentReq: null }), 0);
|
|
328
|
+
}
|
|
273
329
|
applyConfigurationParams() {
|
|
274
330
|
const config = this.Data?.Configuration;
|
|
275
331
|
if (!config)
|
|
276
332
|
return;
|
|
277
333
|
// Check queryParams first (shell populates these from the URL for deep-linking)
|
|
278
334
|
const qp = config['queryParams'];
|
|
335
|
+
this.applyAgentParam(qp?.['agent'], qp?.['agentReq']);
|
|
279
336
|
const conversationId = qp?.['conversationId'] || config.conversationId;
|
|
280
337
|
const artifactId = qp?.['artifactId'] || config.artifactId;
|
|
281
338
|
const versionNumber = qp?.['versionNumber'] ? parseInt(qp['versionNumber'], 10)
|
|
@@ -325,6 +382,7 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
|
|
|
325
382
|
* was already open instead of the pinned one.
|
|
326
383
|
*/
|
|
327
384
|
OnQueryParamsChanged(params, _source) {
|
|
385
|
+
this.applyAgentParam(params['agent'], params['agentReq']);
|
|
328
386
|
const realtimeSessionId = params['realtimeSessionId'] || null;
|
|
329
387
|
if (realtimeSessionId) {
|
|
330
388
|
this.pendingRealtimeSessionId = realtimeSessionId;
|
|
@@ -863,7 +921,7 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
|
|
|
863
921
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.chatArea = _t.first);
|
|
864
922
|
} }, hostBindings: function ChatConversationsResource_HostBindings(rf, ctx) { if (rf & 1) {
|
|
865
923
|
i0.ɵɵlistener("resize", function ChatConversationsResource_resize_HostBindingHandler() { return ctx.onWindowResize(); }, i0.ɵɵresolveWindow)("click", function ChatConversationsResource_click_HostBindingHandler($event) { return ctx.onDocumentClick($event); }, i0.ɵɵresolveDocument);
|
|
866
|
-
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 1, consts: [["conversationList", ""], ["chatArea", ""], [1, "chat-conversations-container"], [1, "initializing-container"], [1, "mobile-sidebar-backdrop"], [1, "conversation-sidebar", 3, "collapsed", "no-transition", "width"], [1, "sidebar-resize-handle"], [1, "conversation-main"], [3, "environmentId", "currentUser", "conversationId", "conversation", "threadId", "isNewConversation", "pendingMessage", "pendingAttachments", "pendingArtifactId", "pendingArtifactConversationId", "pendingArtifactVersionNumber", "showSidebarToggle"], [1, "mobile-sidebar-backdrop", 3, "click"], [1, "conversation-sidebar"], [3, "conversationSelected", "conversationDeleted", "newConversationRequested", "pinSidebarRequested", "unpinSidebarRequested", "refreshRequested", "environmentId", "currentUser", "selectedConversationId", "renamedConversationId", "isSidebarPinned", "isMobileView"], [3, "openEntityRecord", "openConversation"], [1, "sidebar-resize-handle", 3, "mousedown"], [3, "sidebarToggleClicked", "conversationRenamed", "conversationCreated", "threadOpened", "threadClosed", "pendingArtifactConsumed", "pendingMessageConsumed", "pendingMessageRequested", "artifactLinkClicked", "openEntityRecord", "navigationRequest", "environmentId", "currentUser", "conversationId", "conversation", "threadId", "isNewConversation", "pendingMessage", "pendingAttachments", "pendingArtifactId", "pendingArtifactConversationId", "pendingArtifactVersionNumber", "showSidebarToggle"], ["text", "Initializing...", "size", "large"]], template: function ChatConversationsResource_Template(rf, ctx) { if (rf & 1) {
|
|
924
|
+
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 1, consts: [["conversationList", ""], ["chatArea", ""], [1, "chat-conversations-container"], [1, "initializing-container"], [1, "mobile-sidebar-backdrop"], [1, "conversation-sidebar", 3, "collapsed", "no-transition", "width"], [1, "sidebar-resize-handle"], [1, "conversation-main"], [3, "environmentId", "currentUser", "conversationId", "conversation", "threadId", "isNewConversation", "pendingMessage", "pendingAttachments", "pendingArtifactId", "pendingArtifactConversationId", "pendingArtifactVersionNumber", "showSidebarToggle", "composerAgentMention"], [1, "mobile-sidebar-backdrop", 3, "click"], [1, "conversation-sidebar"], [3, "conversationSelected", "conversationDeleted", "newConversationRequested", "pinSidebarRequested", "unpinSidebarRequested", "refreshRequested", "environmentId", "currentUser", "selectedConversationId", "renamedConversationId", "isSidebarPinned", "isMobileView"], [3, "openEntityRecord", "openConversation"], [1, "sidebar-resize-handle", 3, "mousedown"], [3, "sidebarToggleClicked", "conversationRenamed", "conversationCreated", "threadOpened", "threadClosed", "pendingArtifactConsumed", "pendingMessageConsumed", "pendingMessageRequested", "artifactLinkClicked", "openEntityRecord", "navigationRequest", "composerAgentMentionConsumed", "environmentId", "currentUser", "conversationId", "conversation", "threadId", "isNewConversation", "pendingMessage", "pendingAttachments", "pendingArtifactId", "pendingArtifactConversationId", "pendingArtifactVersionNumber", "showSidebarToggle", "composerAgentMention"], ["text", "Initializing...", "size", "large"]], template: function ChatConversationsResource_Template(rf, ctx) { if (rf & 1) {
|
|
867
925
|
i0.ɵɵconditionalCreate(0, ChatConversationsResource_Conditional_0_Template, 6, 4, "div", 2)(1, ChatConversationsResource_Conditional_1_Template, 2, 0, "div", 3);
|
|
868
926
|
i0.ɵɵelement(2, "mj-toast");
|
|
869
927
|
} if (rf & 2) {
|
|
@@ -946,7 +1004,9 @@ export { ChatConversationsResource };
|
|
|
946
1004
|
(pendingMessageRequested)="onPendingMessageRequested($event)"
|
|
947
1005
|
(artifactLinkClicked)="onArtifactLinkClicked($event)"
|
|
948
1006
|
(openEntityRecord)="onOpenEntityRecord($event)"
|
|
949
|
-
(navigationRequest)="onNavigationRequest($event)"
|
|
1007
|
+
(navigationRequest)="onNavigationRequest($event)"
|
|
1008
|
+
[composerAgentMention]="pendingComposerAgentMention"
|
|
1009
|
+
(composerAgentMentionConsumed)="onComposerAgentMentionConsumed()">
|
|
950
1010
|
</mj-conversation-chat-area>
|
|
951
1011
|
}
|
|
952
1012
|
</div>
|
|
@@ -973,5 +1033,5 @@ export { ChatConversationsResource };
|
|
|
973
1033
|
type: HostListener,
|
|
974
1034
|
args: ['document:click', ['$event']]
|
|
975
1035
|
}] }); })();
|
|
976
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ChatConversationsResource, { className: "ChatConversationsResource", filePath: "src/lib/resource-wrappers/chat-conversations-resource.component.ts", lineNumber:
|
|
1036
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ChatConversationsResource, { className: "ChatConversationsResource", filePath: "src/lib/resource-wrappers/chat-conversations-resource.component.ts", lineNumber: 261 }); })();
|
|
977
1037
|
//# sourceMappingURL=chat-conversations-resource.component.js.map
|