@eric-emg/symphiq-components 1.2.144 → 1.2.145
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/fesm2022/symphiq-components.mjs +260 -225
- package/fesm2022/symphiq-components.mjs.map +1 -1
- package/index.d.ts +41 -37
- package/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ViewModeEnum, MetricStatusEnum, TrendDirectionEnum, CompetitiveScoreEnum, ChartTypeEnum, IconSourceEnum, ProfileAnalysisRecommendationPriorityEnum, ProfileItemTypeEnum, PriceVsCompetitorsEnum, DifferentiationStrengthEnum, ThreatLevelEnum, normalizeToV3, MetricEnum, FocusAreaDomainEnum, FocusAreaHealthEnum, ProfileAnalysisPriorityEnum, CapabilityStateEnum, QuadrantEnum, AdvantageEnum, OverallGradeEnum, OperationalMaturityEnum, ProfileAnalysisEffortLevelEnum, ProfileAnalysisImpactLevelEnum, FocusAreaDomainEnumUtil, ProfileAnalysisTypeEnum, LineChartUseCaseEnum, BarChartUseCaseEnum } from '@jebgem/model';
|
|
1
|
+
import { ViewModeEnum, MetricStatusEnum, TrendDirectionEnum, CompetitiveScoreEnum, ChartTypeEnum, IconSourceEnum, ProfileAnalysisRecommendationPriorityEnum, ProfileItemTypeEnum, PriceVsCompetitorsEnum, DifferentiationStrengthEnum, ThreatLevelEnum, normalizeToV3, MetricEnum, AiDynamicContentStatusEnum, FocusAreaDomainEnum, FocusAreaHealthEnum, ProfileAnalysisPriorityEnum, CapabilityStateEnum, QuadrantEnum, AdvantageEnum, OverallGradeEnum, OperationalMaturityEnum, ProfileAnalysisEffortLevelEnum, ProfileAnalysisImpactLevelEnum, FocusAreaDomainEnumUtil, ProfileAnalysisTypeEnum, LineChartUseCaseEnum, BarChartUseCaseEnum } from '@jebgem/model';
|
|
2
2
|
export * from '@jebgem/model';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
4
|
import { Injectable, signal, computed, input, ChangeDetectionStrategy, Component, output, inject, ElementRef, Renderer2, effect, Directive, HostListener, untracked, ViewChild, PLATFORM_ID, Inject, Input } from '@angular/core';
|
|
@@ -51864,6 +51864,40 @@ class SymphiqCreateAccountDashboardComponent {
|
|
|
51864
51864
|
this.nextStepClick = output();
|
|
51865
51865
|
this.headerScrollService = inject(HeaderScrollService);
|
|
51866
51866
|
this.fb = inject(FormBuilder);
|
|
51867
|
+
this.COLLAPSE_THRESHOLD = 20;
|
|
51868
|
+
this.EXPAND_THRESHOLD = 10;
|
|
51869
|
+
this.embeddedScrollEffect = effect(() => {
|
|
51870
|
+
const scrollEvent = this.scrollEvent();
|
|
51871
|
+
const isEmbedded = this.embedded();
|
|
51872
|
+
if (isEmbedded && !scrollEvent) {
|
|
51873
|
+
return;
|
|
51874
|
+
}
|
|
51875
|
+
if (!scrollEvent || !isEmbedded) {
|
|
51876
|
+
return;
|
|
51877
|
+
}
|
|
51878
|
+
const detail = scrollEvent.detail;
|
|
51879
|
+
if (!detail) {
|
|
51880
|
+
return;
|
|
51881
|
+
}
|
|
51882
|
+
const scrollTop = detail.scrollTop || 0;
|
|
51883
|
+
const currentState = this.headerScrollService.isScrolled();
|
|
51884
|
+
if (!currentState && scrollTop > this.COLLAPSE_THRESHOLD) {
|
|
51885
|
+
this.headerScrollService.isScrolled.set(true);
|
|
51886
|
+
}
|
|
51887
|
+
else if (currentState && scrollTop < this.EXPAND_THRESHOLD) {
|
|
51888
|
+
this.headerScrollService.isScrolled.set(false);
|
|
51889
|
+
}
|
|
51890
|
+
const scrollElement = this.scrollElement();
|
|
51891
|
+
if (scrollElement) {
|
|
51892
|
+
const scrollHeight = scrollElement.scrollHeight || 0;
|
|
51893
|
+
const clientHeight = scrollElement.clientHeight || 0;
|
|
51894
|
+
const maxScroll = scrollHeight - clientHeight;
|
|
51895
|
+
if (maxScroll > 0) {
|
|
51896
|
+
const progress = (scrollTop / maxScroll) * 100;
|
|
51897
|
+
this.headerScrollService.scrollProgress.set(Math.min(100, Math.max(0, progress)));
|
|
51898
|
+
}
|
|
51899
|
+
}
|
|
51900
|
+
}, ...(ngDevMode ? [{ debugName: "embeddedScrollEffect" }] : []));
|
|
51867
51901
|
this.scrollProgress = computed(() => this.headerScrollService.scrollProgress(), ...(ngDevMode ? [{ debugName: "scrollProgress" }] : []));
|
|
51868
51902
|
this.editMode = signal(false, ...(ngDevMode ? [{ debugName: "editMode" }] : []));
|
|
51869
51903
|
this.sameAsShopName = signal(false, ...(ngDevMode ? [{ debugName: "sameAsShopName" }] : []));
|
|
@@ -56369,7 +56403,7 @@ function SymphiqBusinessAnalysisDashboardComponent_Conditional_36_Conditional_0_
|
|
|
56369
56403
|
i0.ɵɵelementEnd();
|
|
56370
56404
|
} if (rf & 2) {
|
|
56371
56405
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
56372
|
-
i0.ɵɵproperty("viewMode", ctx_r0.viewMode())("currentStepId", ctx_r0.JourneyStepIdEnum.BUSINESS_ANALYSIS)("showNextStepAction",
|
|
56406
|
+
i0.ɵɵproperty("viewMode", ctx_r0.viewMode())("currentStepId", ctx_r0.JourneyStepIdEnum.BUSINESS_ANALYSIS)("showNextStepAction", ctx_r0.showNextStepAction())("forDemo", ctx_r0.forDemo())("maxAccessibleStepId", ctx_r0.maxAccessibleStepId());
|
|
56373
56407
|
} }
|
|
56374
56408
|
function SymphiqBusinessAnalysisDashboardComponent_Conditional_36_Template(rf, ctx) { if (rf & 1) {
|
|
56375
56409
|
const _r2 = i0.ɵɵgetCurrentView();
|
|
@@ -56472,6 +56506,7 @@ class SymphiqBusinessAnalysisDashboardComponent {
|
|
|
56472
56506
|
this.stepClick = output();
|
|
56473
56507
|
this.nextStepClick = output();
|
|
56474
56508
|
this.JourneyStepIdEnum = JourneyStepIdEnum;
|
|
56509
|
+
this.showNextStepAction = computed(() => this.profile()?.selfContentStatus === AiDynamicContentStatusEnum.GENERATED, ...(ngDevMode ? [{ debugName: "showNextStepAction" }] : []));
|
|
56475
56510
|
this.headerScrollService = inject(HeaderScrollService);
|
|
56476
56511
|
this.lookupService = inject(ProfileItemLookupService);
|
|
56477
56512
|
this.navigationService = inject(NavigationStateService);
|
|
@@ -57047,228 +57082,228 @@ class SymphiqBusinessAnalysisDashboardComponent {
|
|
|
57047
57082
|
}
|
|
57048
57083
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SymphiqBusinessAnalysisDashboardComponent, [{
|
|
57049
57084
|
type: Component,
|
|
57050
|
-
args: [{ selector: 'symphiq-business-analysis-dashboard', standalone: true, imports: [CommonModule, ProfileSectionComponent, SectionNavigationComponent, FloatingTocComponent, FloatingBackButtonComponent, TooltipContainerComponent, SectionDividerComponent, BusinessAnalysisModalComponent, SearchButtonComponent, SearchModalComponent, ViewModeSwitcherModalComponent, JourneyProgressIndicatorComponent, WelcomeBannerComponent, RecommendationsTiledGridComponent, CollapsibleSectionGroupComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
57051
|
-
<div [ngClass]="getContainerClasses()">
|
|
57052
|
-
<!-- Scroll Progress Bar (fixed at top) -->
|
|
57053
|
-
<div [class]="embedded() ? 'sticky top-0 left-0 right-0 h-1 z-[60] bg-slate-200/30' : 'fixed top-0 left-0 right-0 h-1 z-[60] bg-slate-200/30'">
|
|
57054
|
-
<div
|
|
57055
|
-
[style.width.%]="scrollProgress()"
|
|
57056
|
-
[ngClass]="isLightMode() ? 'bg-gradient-to-r from-blue-500 to-purple-500' : 'bg-gradient-to-r from-blue-400 to-purple-400'"
|
|
57057
|
-
class="h-full transition-all duration-200 ease-out">
|
|
57058
|
-
</div>
|
|
57059
|
-
</div>
|
|
57060
|
-
|
|
57061
|
-
<div class="animated-bubbles" [class.light-mode]="isLightMode()" style="position: fixed; top: 0; left: 0; right: 0; bottom: 0; width: 100vw; height: 100vh; z-index: 1; pointer-events: none;"></div>
|
|
57062
|
-
|
|
57063
|
-
<div class="relative z-[51]">
|
|
57064
|
-
<header [ngClass]="getHeaderClasses()" class="sticky top-0 z-50">
|
|
57065
|
-
<!-- Expanded Header (default state) -->
|
|
57066
|
-
<div
|
|
57067
|
-
class="transition-all duration-300 ease-in-out overflow-hidden"
|
|
57068
|
-
[class.max-h-0]="headerScrollService.isScrolled()"
|
|
57069
|
-
[class.opacity-0]="headerScrollService.isScrolled()"
|
|
57070
|
-
[class.max-h-96]="!headerScrollService.isScrolled()"
|
|
57071
|
-
[class.opacity-100]="!headerScrollService.isScrolled()">
|
|
57072
|
-
<div
|
|
57073
|
-
class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8"
|
|
57074
|
-
[class.pointer-events-none]="headerScrollService.isScrolled()"
|
|
57075
|
-
[class.pointer-events-auto]="!headerScrollService.isScrolled()">
|
|
57076
|
-
<div class="flex items-center justify-between">
|
|
57077
|
-
<div>
|
|
57078
|
-
<h1 [ngClass]="getMainTitleClasses()">
|
|
57079
|
-
{{ currentProfile()?.profileStructured?.businessName || 'Business Analysis' }}
|
|
57080
|
-
</h1>
|
|
57081
|
-
<p [ngClass]="getSubtitleClasses()">
|
|
57082
|
-
Business Profile & Analysis
|
|
57083
|
-
</p>
|
|
57084
|
-
</div>
|
|
57085
|
-
<div class="flex items-center gap-2">
|
|
57086
|
-
<symphiq-search-button
|
|
57087
|
-
[isLightMode]="isLightMode()"
|
|
57088
|
-
(searchClick)="openSearch()"
|
|
57089
|
-
/>
|
|
57090
|
-
<button
|
|
57091
|
-
type="button"
|
|
57092
|
-
(click)="openViewModeSwitcher()"
|
|
57093
|
-
[ngClass]="getViewModeButtonClasses()"
|
|
57094
|
-
class="cursor-pointer flex items-center gap-2 px-3 py-1.5 rounded-lg text-xs font-medium transition-all duration-200 hover:scale-105">
|
|
57095
|
-
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
57096
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
|
|
57097
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"></path>
|
|
57098
|
-
</svg>
|
|
57099
|
-
<span>{{ displayModeLabel() }}</span>
|
|
57100
|
-
</button>
|
|
57101
|
-
</div>
|
|
57102
|
-
</div>
|
|
57103
|
-
</div>
|
|
57104
|
-
</div>
|
|
57105
|
-
|
|
57106
|
-
<!-- Condensed Header (scrolled state) -->
|
|
57107
|
-
<div
|
|
57108
|
-
class="transition-all duration-300 ease-in-out overflow-hidden"
|
|
57109
|
-
[class.max-h-0]="!headerScrollService.isScrolled()"
|
|
57110
|
-
[class.opacity-0]="!headerScrollService.isScrolled()"
|
|
57111
|
-
[class.max-h-20]="headerScrollService.isScrolled()"
|
|
57112
|
-
[class.opacity-100]="headerScrollService.isScrolled()">
|
|
57113
|
-
<div
|
|
57114
|
-
class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-3"
|
|
57115
|
-
[class.pointer-events-none]="!headerScrollService.isScrolled()"
|
|
57116
|
-
[class.pointer-events-auto]="headerScrollService.isScrolled()">
|
|
57117
|
-
<div class="flex items-center justify-between">
|
|
57118
|
-
<div class="flex-1 min-w-0 mr-4">
|
|
57119
|
-
<h1 [ngClass]="isLightMode() ? 'text-xl font-bold bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent truncate' : 'text-xl font-bold bg-gradient-to-r from-blue-400 to-purple-400 bg-clip-text text-transparent truncate'">
|
|
57120
|
-
{{ currentProfile()?.profileStructured?.businessName || 'Business Analysis' }}
|
|
57121
|
-
</h1>
|
|
57122
|
-
</div>
|
|
57123
|
-
<div class="flex items-center gap-4">
|
|
57124
|
-
@if (!isSimplifiedView()) {
|
|
57125
|
-
<div class="flex items-center gap-2 text-sm flex-shrink-0">
|
|
57126
|
-
<span [ngClass]="isLightMode() ? 'text-slate-600 font-medium' : 'text-slate-400 font-medium'" class="transition-opacity duration-300" [class.opacity-0]="sectionTitleFading()" [class.opacity-100]="!sectionTitleFading()">
|
|
57127
|
-
{{ currentSectionTitle() }}
|
|
57128
|
-
</span>
|
|
57129
|
-
@if (currentSubsectionTitle()) {
|
|
57130
|
-
<span [ngClass]="isLightMode() ? 'text-slate-400' : 'text-slate-500'" class="transition-opacity duration-300" [class.opacity-0]="subsectionTitleFading()" [class.opacity-100]="!subsectionTitleFading()">›</span>
|
|
57131
|
-
<span [ngClass]="isLightMode() ? 'text-slate-500' : 'text-slate-500'" class="transition-opacity duration-300" [class.opacity-0]="subsectionTitleFading()" [class.opacity-100]="!subsectionTitleFading()">
|
|
57132
|
-
{{ currentSubsectionTitle() }}
|
|
57133
|
-
</span>
|
|
57134
|
-
}
|
|
57135
|
-
</div>
|
|
57136
|
-
}
|
|
57137
|
-
<symphiq-search-button
|
|
57138
|
-
[isLightMode]="isLightMode()"
|
|
57139
|
-
[minimized]="true"
|
|
57140
|
-
(searchClick)="openSearch()"
|
|
57141
|
-
/>
|
|
57142
|
-
<button
|
|
57143
|
-
type="button"
|
|
57144
|
-
(click)="openViewModeSwitcher()"
|
|
57145
|
-
[ngClass]="getViewModeButtonClasses()"
|
|
57146
|
-
class="cursor-pointer flex items-center gap-2 px-2 py-1.5 rounded-lg text-xs font-medium transition-all duration-200 hover:scale-105">
|
|
57147
|
-
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
57148
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
|
|
57149
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"></path>
|
|
57150
|
-
</svg>
|
|
57151
|
-
</button>
|
|
57152
|
-
</div>
|
|
57153
|
-
</div>
|
|
57154
|
-
</div>
|
|
57155
|
-
</div>
|
|
57156
|
-
</header>
|
|
57157
|
-
|
|
57158
|
-
<main class="relative">
|
|
57159
|
-
@if (isSimplifiedView()) {
|
|
57160
|
-
<!-- Journey Progress Banner - Full Width Sticky (only show when not onboarded) -->
|
|
57161
|
-
@if (!isOnboarded()) {
|
|
57162
|
-
<symphiq-journey-progress-indicator
|
|
57163
|
-
[viewMode]="viewMode()"
|
|
57164
|
-
[currentStepId]="JourneyStepIdEnum.BUSINESS_ANALYSIS"
|
|
57165
|
-
[showNextStepAction]="
|
|
57166
|
-
[forDemo]="forDemo()"
|
|
57167
|
-
[maxAccessibleStepId]="maxAccessibleStepId()"
|
|
57168
|
-
(stepClick)="stepClick.emit($event)"
|
|
57169
|
-
(nextStepClick)="nextStepClick.emit()"
|
|
57170
|
-
/>
|
|
57171
|
-
}
|
|
57172
|
-
|
|
57173
|
-
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
|
|
57174
|
-
<div class="mb-8">
|
|
57175
|
-
<symphiq-welcome-banner
|
|
57176
|
-
[viewMode]="viewMode()"
|
|
57177
|
-
[businessName]="currentProfile()?.profileStructured?.businessName || 'your business'"
|
|
57178
|
-
[isOnboarded]="isOnboarded()"
|
|
57179
|
-
/>
|
|
57180
|
-
</div>
|
|
57181
|
-
|
|
57182
|
-
<div class="mb-8">
|
|
57183
|
-
<symphiq-recommendations-tiled-grid
|
|
57184
|
-
[recommendations]="recommendationItems()"
|
|
57185
|
-
[viewMode]="viewMode()"
|
|
57186
|
-
(viewMoreClick)="openRecommendationDetailsModal($event)"
|
|
57187
|
-
/>
|
|
57188
|
-
</div>
|
|
57189
|
-
|
|
57190
|
-
<div>
|
|
57191
|
-
<symphiq-collapsible-section-group
|
|
57192
|
-
[sections]="nonRecommendationSections()"
|
|
57193
|
-
[viewMode]="viewMode()"
|
|
57194
|
-
/>
|
|
57195
|
-
</div>
|
|
57196
|
-
</div>
|
|
57197
|
-
} @else {
|
|
57198
|
-
@for (section of sections(); track trackBySectionId($index, section); let idx = $index; let last = $last) {
|
|
57199
|
-
<symphiq-profile-section
|
|
57200
|
-
[section]="section"
|
|
57201
|
-
[viewMode]="viewMode()"
|
|
57202
|
-
[forceExpanded]="!isCompactView()"
|
|
57203
|
-
/>
|
|
57204
|
-
@if (!last) {
|
|
57205
|
-
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
|
57206
|
-
<symphiq-section-divider
|
|
57207
|
-
[viewMode]="viewMode()"
|
|
57208
|
-
[subsections]="sections()[idx + 1].subsections || []" />
|
|
57209
|
-
</div>
|
|
57210
|
-
}
|
|
57211
|
-
}
|
|
57212
|
-
}
|
|
57213
|
-
</main>
|
|
57214
|
-
|
|
57215
|
-
@if (!isSimplifiedView()) {
|
|
57216
|
-
<symphiq-section-navigation
|
|
57217
|
-
[sections]="sections()"
|
|
57218
|
-
[viewMode]="viewMode()"
|
|
57219
|
-
[embedded]="embedded()"
|
|
57220
|
-
[scrollElement]="scrollElement() ?? undefined"
|
|
57221
|
-
/>
|
|
57222
|
-
}
|
|
57223
|
-
|
|
57224
|
-
@if (!isSimplifiedView()) {
|
|
57225
|
-
<symphiq-floating-toc
|
|
57226
|
-
[sections]="sections()"
|
|
57227
|
-
[viewMode]="viewMode()"
|
|
57228
|
-
[embedded]="embedded()"
|
|
57229
|
-
[scrollElement]="scrollElement() ?? undefined"
|
|
57230
|
-
/>
|
|
57231
|
-
}
|
|
57232
|
-
|
|
57233
|
-
<symphiq-floating-back-button
|
|
57234
|
-
[viewMode]="viewMode()"
|
|
57235
|
-
[embedded]="embedded()"
|
|
57236
|
-
/>
|
|
57237
|
-
</div>
|
|
57238
|
-
|
|
57239
|
-
@if (isLoading()) {
|
|
57240
|
-
<div [ngClass]="getLoadingOverlayClasses()">
|
|
57241
|
-
<div [ngClass]="getSpinnerClasses()"></div>
|
|
57242
|
-
</div>
|
|
57243
|
-
}
|
|
57244
|
-
|
|
57245
|
-
<symphiq-tooltip-container />
|
|
57246
|
-
<symphiq-business-analysis-modal
|
|
57247
|
-
[isLightMode]="isLightMode()"
|
|
57248
|
-
(viewInContextRequested)="handleViewInContext($event)" />
|
|
57249
|
-
|
|
57250
|
-
<symphiq-search-modal
|
|
57251
|
-
[isLightMode]="isLightMode()"
|
|
57252
|
-
[isOpen]="searchService.isSearchOpen()"
|
|
57253
|
-
[searchQuery]="searchService.getSearchQuery()"
|
|
57254
|
-
[results]="searchService.searchResults()"
|
|
57255
|
-
[hasResults]="searchService.hasResults()"
|
|
57256
|
-
[selectedIndex]="selectedSearchIndex()"
|
|
57257
|
-
[placeholder]="'Search sections, items, and analysis...'"
|
|
57258
|
-
(searchChange)="onSearchChange($event)"
|
|
57259
|
-
(resultSelected)="onSearchResultSelected($event)"
|
|
57260
|
-
(close)="closeSearch()"
|
|
57261
|
-
/>
|
|
57262
|
-
|
|
57263
|
-
<symphiq-view-mode-switcher-modal
|
|
57264
|
-
[isOpen]="isViewModeSwitcherOpen()"
|
|
57265
|
-
[currentMode]="displayMode()"
|
|
57266
|
-
[viewMode]="viewMode()"
|
|
57267
|
-
[isLoading]="isViewModeSwitching()"
|
|
57268
|
-
(close)="closeViewModeSwitcher()"
|
|
57269
|
-
(modeSelected)="handleDisplayModeChange($event)"
|
|
57270
|
-
/>
|
|
57271
|
-
</div>
|
|
57085
|
+
args: [{ selector: 'symphiq-business-analysis-dashboard', standalone: true, imports: [CommonModule, ProfileSectionComponent, SectionNavigationComponent, FloatingTocComponent, FloatingBackButtonComponent, TooltipContainerComponent, SectionDividerComponent, BusinessAnalysisModalComponent, SearchButtonComponent, SearchModalComponent, ViewModeSwitcherModalComponent, JourneyProgressIndicatorComponent, WelcomeBannerComponent, RecommendationsTiledGridComponent, CollapsibleSectionGroupComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
57086
|
+
<div [ngClass]="getContainerClasses()">
|
|
57087
|
+
<!-- Scroll Progress Bar (fixed at top) -->
|
|
57088
|
+
<div [class]="embedded() ? 'sticky top-0 left-0 right-0 h-1 z-[60] bg-slate-200/30' : 'fixed top-0 left-0 right-0 h-1 z-[60] bg-slate-200/30'">
|
|
57089
|
+
<div
|
|
57090
|
+
[style.width.%]="scrollProgress()"
|
|
57091
|
+
[ngClass]="isLightMode() ? 'bg-gradient-to-r from-blue-500 to-purple-500' : 'bg-gradient-to-r from-blue-400 to-purple-400'"
|
|
57092
|
+
class="h-full transition-all duration-200 ease-out">
|
|
57093
|
+
</div>
|
|
57094
|
+
</div>
|
|
57095
|
+
|
|
57096
|
+
<div class="animated-bubbles" [class.light-mode]="isLightMode()" style="position: fixed; top: 0; left: 0; right: 0; bottom: 0; width: 100vw; height: 100vh; z-index: 1; pointer-events: none;"></div>
|
|
57097
|
+
|
|
57098
|
+
<div class="relative z-[51]">
|
|
57099
|
+
<header [ngClass]="getHeaderClasses()" class="sticky top-0 z-50">
|
|
57100
|
+
<!-- Expanded Header (default state) -->
|
|
57101
|
+
<div
|
|
57102
|
+
class="transition-all duration-300 ease-in-out overflow-hidden"
|
|
57103
|
+
[class.max-h-0]="headerScrollService.isScrolled()"
|
|
57104
|
+
[class.opacity-0]="headerScrollService.isScrolled()"
|
|
57105
|
+
[class.max-h-96]="!headerScrollService.isScrolled()"
|
|
57106
|
+
[class.opacity-100]="!headerScrollService.isScrolled()">
|
|
57107
|
+
<div
|
|
57108
|
+
class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8"
|
|
57109
|
+
[class.pointer-events-none]="headerScrollService.isScrolled()"
|
|
57110
|
+
[class.pointer-events-auto]="!headerScrollService.isScrolled()">
|
|
57111
|
+
<div class="flex items-center justify-between">
|
|
57112
|
+
<div>
|
|
57113
|
+
<h1 [ngClass]="getMainTitleClasses()">
|
|
57114
|
+
{{ currentProfile()?.profileStructured?.businessName || 'Business Analysis' }}
|
|
57115
|
+
</h1>
|
|
57116
|
+
<p [ngClass]="getSubtitleClasses()">
|
|
57117
|
+
Business Profile & Analysis
|
|
57118
|
+
</p>
|
|
57119
|
+
</div>
|
|
57120
|
+
<div class="flex items-center gap-2">
|
|
57121
|
+
<symphiq-search-button
|
|
57122
|
+
[isLightMode]="isLightMode()"
|
|
57123
|
+
(searchClick)="openSearch()"
|
|
57124
|
+
/>
|
|
57125
|
+
<button
|
|
57126
|
+
type="button"
|
|
57127
|
+
(click)="openViewModeSwitcher()"
|
|
57128
|
+
[ngClass]="getViewModeButtonClasses()"
|
|
57129
|
+
class="cursor-pointer flex items-center gap-2 px-3 py-1.5 rounded-lg text-xs font-medium transition-all duration-200 hover:scale-105">
|
|
57130
|
+
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
57131
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
|
|
57132
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"></path>
|
|
57133
|
+
</svg>
|
|
57134
|
+
<span>{{ displayModeLabel() }}</span>
|
|
57135
|
+
</button>
|
|
57136
|
+
</div>
|
|
57137
|
+
</div>
|
|
57138
|
+
</div>
|
|
57139
|
+
</div>
|
|
57140
|
+
|
|
57141
|
+
<!-- Condensed Header (scrolled state) -->
|
|
57142
|
+
<div
|
|
57143
|
+
class="transition-all duration-300 ease-in-out overflow-hidden"
|
|
57144
|
+
[class.max-h-0]="!headerScrollService.isScrolled()"
|
|
57145
|
+
[class.opacity-0]="!headerScrollService.isScrolled()"
|
|
57146
|
+
[class.max-h-20]="headerScrollService.isScrolled()"
|
|
57147
|
+
[class.opacity-100]="headerScrollService.isScrolled()">
|
|
57148
|
+
<div
|
|
57149
|
+
class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-3"
|
|
57150
|
+
[class.pointer-events-none]="!headerScrollService.isScrolled()"
|
|
57151
|
+
[class.pointer-events-auto]="headerScrollService.isScrolled()">
|
|
57152
|
+
<div class="flex items-center justify-between">
|
|
57153
|
+
<div class="flex-1 min-w-0 mr-4">
|
|
57154
|
+
<h1 [ngClass]="isLightMode() ? 'text-xl font-bold bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent truncate' : 'text-xl font-bold bg-gradient-to-r from-blue-400 to-purple-400 bg-clip-text text-transparent truncate'">
|
|
57155
|
+
{{ currentProfile()?.profileStructured?.businessName || 'Business Analysis' }}
|
|
57156
|
+
</h1>
|
|
57157
|
+
</div>
|
|
57158
|
+
<div class="flex items-center gap-4">
|
|
57159
|
+
@if (!isSimplifiedView()) {
|
|
57160
|
+
<div class="flex items-center gap-2 text-sm flex-shrink-0">
|
|
57161
|
+
<span [ngClass]="isLightMode() ? 'text-slate-600 font-medium' : 'text-slate-400 font-medium'" class="transition-opacity duration-300" [class.opacity-0]="sectionTitleFading()" [class.opacity-100]="!sectionTitleFading()">
|
|
57162
|
+
{{ currentSectionTitle() }}
|
|
57163
|
+
</span>
|
|
57164
|
+
@if (currentSubsectionTitle()) {
|
|
57165
|
+
<span [ngClass]="isLightMode() ? 'text-slate-400' : 'text-slate-500'" class="transition-opacity duration-300" [class.opacity-0]="subsectionTitleFading()" [class.opacity-100]="!subsectionTitleFading()">›</span>
|
|
57166
|
+
<span [ngClass]="isLightMode() ? 'text-slate-500' : 'text-slate-500'" class="transition-opacity duration-300" [class.opacity-0]="subsectionTitleFading()" [class.opacity-100]="!subsectionTitleFading()">
|
|
57167
|
+
{{ currentSubsectionTitle() }}
|
|
57168
|
+
</span>
|
|
57169
|
+
}
|
|
57170
|
+
</div>
|
|
57171
|
+
}
|
|
57172
|
+
<symphiq-search-button
|
|
57173
|
+
[isLightMode]="isLightMode()"
|
|
57174
|
+
[minimized]="true"
|
|
57175
|
+
(searchClick)="openSearch()"
|
|
57176
|
+
/>
|
|
57177
|
+
<button
|
|
57178
|
+
type="button"
|
|
57179
|
+
(click)="openViewModeSwitcher()"
|
|
57180
|
+
[ngClass]="getViewModeButtonClasses()"
|
|
57181
|
+
class="cursor-pointer flex items-center gap-2 px-2 py-1.5 rounded-lg text-xs font-medium transition-all duration-200 hover:scale-105">
|
|
57182
|
+
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
57183
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
|
|
57184
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"></path>
|
|
57185
|
+
</svg>
|
|
57186
|
+
</button>
|
|
57187
|
+
</div>
|
|
57188
|
+
</div>
|
|
57189
|
+
</div>
|
|
57190
|
+
</div>
|
|
57191
|
+
</header>
|
|
57192
|
+
|
|
57193
|
+
<main class="relative">
|
|
57194
|
+
@if (isSimplifiedView()) {
|
|
57195
|
+
<!-- Journey Progress Banner - Full Width Sticky (only show when not onboarded) -->
|
|
57196
|
+
@if (!isOnboarded()) {
|
|
57197
|
+
<symphiq-journey-progress-indicator
|
|
57198
|
+
[viewMode]="viewMode()"
|
|
57199
|
+
[currentStepId]="JourneyStepIdEnum.BUSINESS_ANALYSIS"
|
|
57200
|
+
[showNextStepAction]="showNextStepAction()"
|
|
57201
|
+
[forDemo]="forDemo()"
|
|
57202
|
+
[maxAccessibleStepId]="maxAccessibleStepId()"
|
|
57203
|
+
(stepClick)="stepClick.emit($event)"
|
|
57204
|
+
(nextStepClick)="nextStepClick.emit()"
|
|
57205
|
+
/>
|
|
57206
|
+
}
|
|
57207
|
+
|
|
57208
|
+
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
|
|
57209
|
+
<div class="mb-8">
|
|
57210
|
+
<symphiq-welcome-banner
|
|
57211
|
+
[viewMode]="viewMode()"
|
|
57212
|
+
[businessName]="currentProfile()?.profileStructured?.businessName || 'your business'"
|
|
57213
|
+
[isOnboarded]="isOnboarded()"
|
|
57214
|
+
/>
|
|
57215
|
+
</div>
|
|
57216
|
+
|
|
57217
|
+
<div class="mb-8">
|
|
57218
|
+
<symphiq-recommendations-tiled-grid
|
|
57219
|
+
[recommendations]="recommendationItems()"
|
|
57220
|
+
[viewMode]="viewMode()"
|
|
57221
|
+
(viewMoreClick)="openRecommendationDetailsModal($event)"
|
|
57222
|
+
/>
|
|
57223
|
+
</div>
|
|
57224
|
+
|
|
57225
|
+
<div>
|
|
57226
|
+
<symphiq-collapsible-section-group
|
|
57227
|
+
[sections]="nonRecommendationSections()"
|
|
57228
|
+
[viewMode]="viewMode()"
|
|
57229
|
+
/>
|
|
57230
|
+
</div>
|
|
57231
|
+
</div>
|
|
57232
|
+
} @else {
|
|
57233
|
+
@for (section of sections(); track trackBySectionId($index, section); let idx = $index; let last = $last) {
|
|
57234
|
+
<symphiq-profile-section
|
|
57235
|
+
[section]="section"
|
|
57236
|
+
[viewMode]="viewMode()"
|
|
57237
|
+
[forceExpanded]="!isCompactView()"
|
|
57238
|
+
/>
|
|
57239
|
+
@if (!last) {
|
|
57240
|
+
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
|
57241
|
+
<symphiq-section-divider
|
|
57242
|
+
[viewMode]="viewMode()"
|
|
57243
|
+
[subsections]="sections()[idx + 1].subsections || []" />
|
|
57244
|
+
</div>
|
|
57245
|
+
}
|
|
57246
|
+
}
|
|
57247
|
+
}
|
|
57248
|
+
</main>
|
|
57249
|
+
|
|
57250
|
+
@if (!isSimplifiedView()) {
|
|
57251
|
+
<symphiq-section-navigation
|
|
57252
|
+
[sections]="sections()"
|
|
57253
|
+
[viewMode]="viewMode()"
|
|
57254
|
+
[embedded]="embedded()"
|
|
57255
|
+
[scrollElement]="scrollElement() ?? undefined"
|
|
57256
|
+
/>
|
|
57257
|
+
}
|
|
57258
|
+
|
|
57259
|
+
@if (!isSimplifiedView()) {
|
|
57260
|
+
<symphiq-floating-toc
|
|
57261
|
+
[sections]="sections()"
|
|
57262
|
+
[viewMode]="viewMode()"
|
|
57263
|
+
[embedded]="embedded()"
|
|
57264
|
+
[scrollElement]="scrollElement() ?? undefined"
|
|
57265
|
+
/>
|
|
57266
|
+
}
|
|
57267
|
+
|
|
57268
|
+
<symphiq-floating-back-button
|
|
57269
|
+
[viewMode]="viewMode()"
|
|
57270
|
+
[embedded]="embedded()"
|
|
57271
|
+
/>
|
|
57272
|
+
</div>
|
|
57273
|
+
|
|
57274
|
+
@if (isLoading()) {
|
|
57275
|
+
<div [ngClass]="getLoadingOverlayClasses()">
|
|
57276
|
+
<div [ngClass]="getSpinnerClasses()"></div>
|
|
57277
|
+
</div>
|
|
57278
|
+
}
|
|
57279
|
+
|
|
57280
|
+
<symphiq-tooltip-container />
|
|
57281
|
+
<symphiq-business-analysis-modal
|
|
57282
|
+
[isLightMode]="isLightMode()"
|
|
57283
|
+
(viewInContextRequested)="handleViewInContext($event)" />
|
|
57284
|
+
|
|
57285
|
+
<symphiq-search-modal
|
|
57286
|
+
[isLightMode]="isLightMode()"
|
|
57287
|
+
[isOpen]="searchService.isSearchOpen()"
|
|
57288
|
+
[searchQuery]="searchService.getSearchQuery()"
|
|
57289
|
+
[results]="searchService.searchResults()"
|
|
57290
|
+
[hasResults]="searchService.hasResults()"
|
|
57291
|
+
[selectedIndex]="selectedSearchIndex()"
|
|
57292
|
+
[placeholder]="'Search sections, items, and analysis...'"
|
|
57293
|
+
(searchChange)="onSearchChange($event)"
|
|
57294
|
+
(resultSelected)="onSearchResultSelected($event)"
|
|
57295
|
+
(close)="closeSearch()"
|
|
57296
|
+
/>
|
|
57297
|
+
|
|
57298
|
+
<symphiq-view-mode-switcher-modal
|
|
57299
|
+
[isOpen]="isViewModeSwitcherOpen()"
|
|
57300
|
+
[currentMode]="displayMode()"
|
|
57301
|
+
[viewMode]="viewMode()"
|
|
57302
|
+
[isLoading]="isViewModeSwitching()"
|
|
57303
|
+
(close)="closeViewModeSwitcher()"
|
|
57304
|
+
(modeSelected)="handleDisplayModeChange($event)"
|
|
57305
|
+
/>
|
|
57306
|
+
</div>
|
|
57272
57307
|
`, styles: [":host{display:block}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse-highlight{0%,to{transform:scale(1);box-shadow:0 0 #3b82f6b3}50%{transform:scale(1.02);box-shadow:0 0 20px 8px #3b82f64d}}:host ::ng-deep .search-highlight-pulse{animation:pulse-highlight 2s ease-in-out;border-color:#3b82f6!important}\n"] }]
|
|
57273
57308
|
}], () => [], { embedded: [{ type: i0.Input, args: [{ isSignal: true, alias: "embedded", required: false }] }], profile: [{ type: i0.Input, args: [{ isSignal: true, alias: "profile", required: false }] }], parentHeaderOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentHeaderOffset", required: false }] }], requestedByUser: [{ type: i0.Input, args: [{ isSignal: true, alias: "requestedByUser", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], scrollEvent: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollEvent", required: false }] }], scrollElement: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollElement", required: false }] }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: false }] }], isOnboarded: [{ type: i0.Input, args: [{ isSignal: true, alias: "isOnboarded", required: false }] }], forDemo: [{ type: i0.Input, args: [{ isSignal: true, alias: "forDemo", required: false }] }], maxAccessibleStepId: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxAccessibleStepId", required: false }] }], stepClick: [{ type: i0.Output, args: ["stepClick"] }], nextStepClick: [{ type: i0.Output, args: ["nextStepClick"] }], onScroll: [{
|
|
57274
57309
|
type: HostListener,
|
|
@@ -57277,7 +57312,7 @@ class SymphiqBusinessAnalysisDashboardComponent {
|
|
|
57277
57312
|
type: HostListener,
|
|
57278
57313
|
args: ['document:keydown', ['$event']]
|
|
57279
57314
|
}] }); })();
|
|
57280
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqBusinessAnalysisDashboardComponent, { className: "SymphiqBusinessAnalysisDashboardComponent", filePath: "lib/components/business-analysis-dashboard/symphiq-business-analysis-dashboard.component.ts", lineNumber:
|
|
57315
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqBusinessAnalysisDashboardComponent, { className: "SymphiqBusinessAnalysisDashboardComponent", filePath: "lib/components/business-analysis-dashboard/symphiq-business-analysis-dashboard.component.ts", lineNumber: 303 }); })();
|
|
57281
57316
|
|
|
57282
57317
|
function DashboardHeaderComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
57283
57318
|
i0.ɵɵelement(0, "div", 6);
|