@eric-emg/symphiq-components 1.2.517 → 1.2.518

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.
@@ -65843,63 +65843,6 @@ class FloatingBackButtonComponent {
65843
65843
  }], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], embedded: [{ type: i0.Input, args: [{ isSignal: true, alias: "embedded", required: false }] }] }); })();
65844
65844
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FloatingBackButtonComponent, { className: "FloatingBackButtonComponent", filePath: "lib/components/business-analysis-dashboard/floating-back-button.component.ts", lineNumber: 70 }); })();
65845
65845
 
65846
- function SearchButtonComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
65847
- i0.ɵɵelementStart(0, "span");
65848
- i0.ɵɵtext(1, "Search");
65849
- i0.ɵɵelementEnd();
65850
- } }
65851
- class SearchButtonComponent {
65852
- constructor() {
65853
- this.isLightMode = input(false, ...(ngDevMode ? [{ debugName: "isLightMode" }] : []));
65854
- this.minimized = input(false, ...(ngDevMode ? [{ debugName: "minimized" }] : []));
65855
- this.title = input('Search (/ or Cmd+K)', ...(ngDevMode ? [{ debugName: "title" }] : []));
65856
- this.searchClick = output();
65857
- this.buttonClass = computed(() => {
65858
- if (this.isLightMode()) {
65859
- return 'bg-slate-100 text-slate-700 hover:bg-slate-200 hover:text-slate-900';
65860
- }
65861
- return 'bg-slate-800 text-slate-300 hover:bg-slate-700 hover:text-white';
65862
- }, ...(ngDevMode ? [{ debugName: "buttonClass" }] : []));
65863
- }
65864
- static { this.ɵfac = function SearchButtonComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SearchButtonComponent)(); }; }
65865
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SearchButtonComponent, selectors: [["symphiq-search-button"]], inputs: { isLightMode: [1, "isLightMode"], minimized: [1, "minimized"], title: [1, "title"] }, outputs: { searchClick: "searchClick" }, decls: 4, vars: 9, consts: [["type", "button", 3, "click", "ngClass", "title"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"]], template: function SearchButtonComponent_Template(rf, ctx) { if (rf & 1) {
65866
- i0.ɵɵelementStart(0, "button", 0);
65867
- i0.ɵɵlistener("click", function SearchButtonComponent_Template_button_click_0_listener() { return ctx.searchClick.emit(); });
65868
- i0.ɵɵnamespaceSVG();
65869
- i0.ɵɵelementStart(1, "svg", 1);
65870
- i0.ɵɵelement(2, "path", 2);
65871
- i0.ɵɵelementEnd();
65872
- i0.ɵɵconditionalCreate(3, SearchButtonComponent_Conditional_3_Template, 2, 0, "span");
65873
- i0.ɵɵelementEnd();
65874
- } if (rf & 2) {
65875
- i0.ɵɵclassMap(ctx.minimized() ? "cursor-pointer p-2 rounded-lg transition-all duration-200 hover:scale-110" : "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");
65876
- i0.ɵɵproperty("ngClass", ctx.buttonClass())("title", ctx.title());
65877
- i0.ɵɵadvance();
65878
- i0.ɵɵclassProp("w-5", ctx.minimized())("h-5", ctx.minimized());
65879
- i0.ɵɵadvance(2);
65880
- i0.ɵɵconditional(!ctx.minimized() ? 3 : -1);
65881
- } }, dependencies: [CommonModule, i1$1.NgClass], styles: ["[_nghost-%COMP%]{display:contents}"], changeDetection: 0 }); }
65882
- }
65883
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SearchButtonComponent, [{
65884
- type: Component,
65885
- args: [{ selector: 'symphiq-search-button', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule], template: `
65886
- <button
65887
- type="button"
65888
- (click)="searchClick.emit()"
65889
- [ngClass]="buttonClass()"
65890
- [title]="title()"
65891
- [class]="minimized() ? 'cursor-pointer p-2 rounded-lg transition-all duration-200 hover:scale-110' : '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'">
65892
- <svg class="w-4 h-4" [class.w-5]="minimized()" [class.h-5]="minimized()" fill="none" stroke="currentColor" viewBox="0 0 24 24">
65893
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path>
65894
- </svg>
65895
- @if (!minimized()) {
65896
- <span>Search</span>
65897
- }
65898
- </button>
65899
- `, styles: [":host{display:contents}\n"] }]
65900
- }], null, { isLightMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLightMode", required: false }] }], minimized: [{ type: i0.Input, args: [{ isSignal: true, alias: "minimized", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], searchClick: [{ type: i0.Output, args: ["searchClick"] }] }); })();
65901
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SearchButtonComponent, { className: "SearchButtonComponent", filePath: "lib/components/shared/search-button.component.ts", lineNumber: 30 }); })();
65902
-
65903
65846
  const _c0$w = ["searchInput"];
65904
65847
  const _forTrack0$w = ($index, $item) => $item.id;
65905
65848
  function SearchModalComponent_Conditional_0_Conditional_10_Template(rf, ctx) { if (rf & 1) {
@@ -67830,17 +67773,76 @@ class CollapsibleSectionGroupComponent {
67830
67773
  }], null, { sections: [{ type: i0.Input, args: [{ isSignal: true, alias: "sections", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }] }); })();
67831
67774
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CollapsibleSectionGroupComponent, { className: "CollapsibleSectionGroupComponent", filePath: "lib/components/business-analysis-dashboard/collapsible-section-group.component.ts", lineNumber: 100 }); })();
67832
67775
 
67833
- const _c0$u = () => [];
67834
- function SymphiqBusinessAnalysisDashboardComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
67776
+ function SearchButtonComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
67777
+ i0.ɵɵelementStart(0, "span");
67778
+ i0.ɵɵtext(1, "Search");
67779
+ i0.ɵɵelementEnd();
67780
+ } }
67781
+ class SearchButtonComponent {
67782
+ constructor() {
67783
+ this.isLightMode = input(false, ...(ngDevMode ? [{ debugName: "isLightMode" }] : []));
67784
+ this.minimized = input(false, ...(ngDevMode ? [{ debugName: "minimized" }] : []));
67785
+ this.title = input('Search (/ or Cmd+K)', ...(ngDevMode ? [{ debugName: "title" }] : []));
67786
+ this.searchClick = output();
67787
+ this.buttonClass = computed(() => {
67788
+ if (this.isLightMode()) {
67789
+ return 'bg-slate-100 text-slate-700 hover:bg-slate-200 hover:text-slate-900';
67790
+ }
67791
+ return 'bg-slate-800 text-slate-300 hover:bg-slate-700 hover:text-white';
67792
+ }, ...(ngDevMode ? [{ debugName: "buttonClass" }] : []));
67793
+ }
67794
+ static { this.ɵfac = function SearchButtonComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SearchButtonComponent)(); }; }
67795
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SearchButtonComponent, selectors: [["symphiq-search-button"]], inputs: { isLightMode: [1, "isLightMode"], minimized: [1, "minimized"], title: [1, "title"] }, outputs: { searchClick: "searchClick" }, decls: 4, vars: 9, consts: [["type", "button", 3, "click", "ngClass", "title"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"]], template: function SearchButtonComponent_Template(rf, ctx) { if (rf & 1) {
67796
+ i0.ɵɵelementStart(0, "button", 0);
67797
+ i0.ɵɵlistener("click", function SearchButtonComponent_Template_button_click_0_listener() { return ctx.searchClick.emit(); });
67798
+ i0.ɵɵnamespaceSVG();
67799
+ i0.ɵɵelementStart(1, "svg", 1);
67800
+ i0.ɵɵelement(2, "path", 2);
67801
+ i0.ɵɵelementEnd();
67802
+ i0.ɵɵconditionalCreate(3, SearchButtonComponent_Conditional_3_Template, 2, 0, "span");
67803
+ i0.ɵɵelementEnd();
67804
+ } if (rf & 2) {
67805
+ i0.ɵɵclassMap(ctx.minimized() ? "cursor-pointer p-2 rounded-lg transition-all duration-200 hover:scale-110" : "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");
67806
+ i0.ɵɵproperty("ngClass", ctx.buttonClass())("title", ctx.title());
67807
+ i0.ɵɵadvance();
67808
+ i0.ɵɵclassProp("w-5", ctx.minimized())("h-5", ctx.minimized());
67809
+ i0.ɵɵadvance(2);
67810
+ i0.ɵɵconditional(!ctx.minimized() ? 3 : -1);
67811
+ } }, dependencies: [CommonModule, i1$1.NgClass], styles: ["[_nghost-%COMP%]{display:contents}"], changeDetection: 0 }); }
67812
+ }
67813
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SearchButtonComponent, [{
67814
+ type: Component,
67815
+ args: [{ selector: 'symphiq-search-button', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule], template: `
67816
+ <button
67817
+ type="button"
67818
+ (click)="searchClick.emit()"
67819
+ [ngClass]="buttonClass()"
67820
+ [title]="title()"
67821
+ [class]="minimized() ? 'cursor-pointer p-2 rounded-lg transition-all duration-200 hover:scale-110' : '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'">
67822
+ <svg class="w-4 h-4" [class.w-5]="minimized()" [class.h-5]="minimized()" fill="none" stroke="currentColor" viewBox="0 0 24 24">
67823
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path>
67824
+ </svg>
67825
+ @if (!minimized()) {
67826
+ <span>Search</span>
67827
+ }
67828
+ </button>
67829
+ `, styles: [":host{display:contents}\n"] }]
67830
+ }], null, { isLightMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLightMode", required: false }] }], minimized: [{ type: i0.Input, args: [{ isSignal: true, alias: "minimized", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], searchClick: [{ type: i0.Output, args: ["searchClick"] }] }); })();
67831
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SearchButtonComponent, { className: "SearchButtonComponent", filePath: "lib/components/shared/search-button.component.ts", lineNumber: 30 }); })();
67832
+
67833
+ function DashboardHeaderComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
67834
+ i0.ɵɵelement(0, "div", 6);
67835
+ } }
67836
+ function DashboardHeaderComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
67835
67837
  const _r1 = i0.ɵɵgetCurrentView();
67836
- i0.ɵɵelementStart(0, "div", 8)(1, "symphiq-search-button", 21);
67837
- i0.ɵɵlistener("searchClick", function SymphiqBusinessAnalysisDashboardComponent_Conditional_14_Template_symphiq_search_button_searchClick_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.openSearch()); });
67838
+ i0.ɵɵelementStart(0, "div", 7)(1, "symphiq-search-button", 15);
67839
+ i0.ɵɵlistener("searchClick", function DashboardHeaderComponent_Conditional_11_Template_symphiq_search_button_searchClick_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSearchClick()); });
67838
67840
  i0.ɵɵelementEnd();
67839
- i0.ɵɵelementStart(2, "button", 22);
67840
- i0.ɵɵlistener("click", function SymphiqBusinessAnalysisDashboardComponent_Conditional_14_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.openViewModeSwitcher()); });
67841
+ i0.ɵɵelementStart(2, "button", 16);
67842
+ i0.ɵɵlistener("click", function DashboardHeaderComponent_Conditional_11_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onViewModeClick()); });
67841
67843
  i0.ɵɵnamespaceSVG();
67842
- i0.ɵɵelementStart(3, "svg", 23);
67843
- i0.ɵɵelement(4, "path", 24)(5, "path", 25);
67844
+ i0.ɵɵelementStart(3, "svg", 17);
67845
+ i0.ɵɵelement(4, "path", 18)(5, "path", 19);
67844
67846
  i0.ɵɵelementEnd();
67845
67847
  i0.ɵɵnamespaceHTML();
67846
67848
  i0.ɵɵelementStart(6, "span");
@@ -67853,422 +67855,713 @@ function SymphiqBusinessAnalysisDashboardComponent_Conditional_14_Template(rf, c
67853
67855
  i0.ɵɵadvance();
67854
67856
  i0.ɵɵproperty("ngClass", ctx_r1.getViewModeButtonClasses());
67855
67857
  i0.ɵɵadvance(5);
67856
- i0.ɵɵtextInterpolate(ctx_r1.displayModeLabel());
67858
+ i0.ɵɵtextInterpolate(ctx_r1.viewModeLabel());
67857
67859
  } }
67858
- function SymphiqBusinessAnalysisDashboardComponent_Conditional_22_Conditional_3_Template(rf, ctx) { if (rf & 1) {
67859
- i0.ɵɵelementStart(0, "span", 26);
67860
- i0.ɵɵtext(1, "\u203A");
67861
- i0.ɵɵelementEnd();
67862
- i0.ɵɵelementStart(2, "span", 26);
67863
- i0.ɵɵtext(3);
67860
+ function DashboardHeaderComponent_Conditional_12_Conditional_1_Template(rf, ctx) { if (rf & 1) {
67861
+ i0.ɵɵelementStart(0, "div", 20)(1, "div", 21);
67862
+ i0.ɵɵtext(2, "Generated At");
67864
67863
  i0.ɵɵelementEnd();
67864
+ i0.ɵɵelementStart(3, "div", 22);
67865
+ i0.ɵɵtext(4);
67866
+ i0.ɵɵelementEnd()();
67865
67867
  } if (rf & 2) {
67866
67868
  const ctx_r1 = i0.ɵɵnextContext(2);
67867
- i0.ɵɵclassProp("opacity-0", ctx_r1.subsectionTitleFading())("opacity-100", !ctx_r1.subsectionTitleFading());
67868
- i0.ɵɵproperty("ngClass", ctx_r1.isLightMode() ? "text-slate-400" : "text-slate-500");
67869
- i0.ɵɵadvance(2);
67870
- i0.ɵɵclassProp("opacity-0", ctx_r1.subsectionTitleFading())("opacity-100", !ctx_r1.subsectionTitleFading());
67871
- i0.ɵɵproperty("ngClass", ctx_r1.isLightMode() ? "text-slate-500" : "text-slate-500");
67872
- i0.ɵɵadvance();
67873
- i0.ɵɵtextInterpolate1(" ", ctx_r1.currentSubsectionTitle(), " ");
67874
- } }
67875
- function SymphiqBusinessAnalysisDashboardComponent_Conditional_22_Template(rf, ctx) { if (rf & 1) {
67876
- i0.ɵɵelementStart(0, "div", 12)(1, "span", 26);
67877
- i0.ɵɵtext(2);
67878
- i0.ɵɵelementEnd();
67879
- i0.ɵɵconditionalCreate(3, SymphiqBusinessAnalysisDashboardComponent_Conditional_22_Conditional_3_Template, 4, 11);
67880
- i0.ɵɵelementEnd();
67881
- } if (rf & 2) {
67882
- const ctx_r1 = i0.ɵɵnextContext();
67883
- i0.ɵɵadvance();
67884
- i0.ɵɵclassProp("opacity-0", ctx_r1.sectionTitleFading())("opacity-100", !ctx_r1.sectionTitleFading());
67885
- i0.ɵɵproperty("ngClass", ctx_r1.isLightMode() ? "text-slate-600 font-medium" : "text-slate-400 font-medium");
67886
67869
  i0.ɵɵadvance();
67887
- i0.ɵɵtextInterpolate1(" ", ctx_r1.currentSectionTitle(), " ");
67870
+ i0.ɵɵclassMap(ctx_r1.metaLabelClass());
67871
+ i0.ɵɵadvance(2);
67872
+ i0.ɵɵclassMap(ctx_r1.headerTitleClass());
67888
67873
  i0.ɵɵadvance();
67889
- i0.ɵɵconditional(ctx_r1.currentSubsectionTitle() ? 3 : -1);
67874
+ i0.ɵɵtextInterpolate(ctx_r1.formattedGeneratedDate());
67890
67875
  } }
67891
- function SymphiqBusinessAnalysisDashboardComponent_Conditional_23_Template(rf, ctx) { if (rf & 1) {
67892
- const _r3 = i0.ɵɵgetCurrentView();
67893
- i0.ɵɵelementStart(0, "symphiq-search-button", 27);
67894
- i0.ɵɵlistener("searchClick", function SymphiqBusinessAnalysisDashboardComponent_Conditional_23_Template_symphiq_search_button_searchClick_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.openSearch()); });
67876
+ function DashboardHeaderComponent_Conditional_12_Conditional_2_Template(rf, ctx) { if (rf & 1) {
67877
+ i0.ɵɵelementStart(0, "div", 20)(1, "div", 21);
67878
+ i0.ɵɵtext(2, "Requested by");
67895
67879
  i0.ɵɵelementEnd();
67896
- i0.ɵɵelementStart(1, "button", 28);
67897
- i0.ɵɵlistener("click", function SymphiqBusinessAnalysisDashboardComponent_Conditional_23_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.openViewModeSwitcher()); });
67898
- i0.ɵɵnamespaceSVG();
67899
- i0.ɵɵelementStart(2, "svg", 23);
67900
- i0.ɵɵelement(3, "path", 24)(4, "path", 25);
67880
+ i0.ɵɵelementStart(3, "div", 22);
67881
+ i0.ɵɵtext(4);
67901
67882
  i0.ɵɵelementEnd()();
67902
67883
  } if (rf & 2) {
67903
- const ctx_r1 = i0.ɵɵnextContext();
67904
- i0.ɵɵproperty("isLightMode", ctx_r1.isLightMode())("minimized", true);
67884
+ let tmp_4_0;
67885
+ const ctx_r1 = i0.ɵɵnextContext(2);
67905
67886
  i0.ɵɵadvance();
67906
- i0.ɵɵproperty("ngClass", ctx_r1.getViewModeButtonClasses());
67907
- } }
67908
- function SymphiqBusinessAnalysisDashboardComponent_Conditional_25_Template(rf, ctx) { if (rf & 1) {
67909
- i0.ɵɵelementStart(0, "div", 14);
67910
- i0.ɵɵelement(1, "symphiq-indeterminate-spinner", 29);
67911
- i0.ɵɵelementEnd();
67912
- } if (rf & 2) {
67913
- const ctx_r1 = i0.ɵɵnextContext();
67887
+ i0.ɵɵclassMap(ctx_r1.metaLabelClass());
67888
+ i0.ɵɵadvance(2);
67889
+ i0.ɵɵclassMap(ctx_r1.headerTitleClass());
67914
67890
  i0.ɵɵadvance();
67915
- i0.ɵɵproperty("viewMode", ctx_r1.viewMode());
67891
+ i0.ɵɵtextInterpolate2("", (tmp_4_0 = ctx_r1.requestedByUser()) == null ? null : tmp_4_0.firstName, " ", (tmp_4_0 = ctx_r1.requestedByUser()) == null ? null : tmp_4_0.lastName);
67916
67892
  } }
67917
- function SymphiqBusinessAnalysisDashboardComponent_Conditional_26_Conditional_0_Template(rf, ctx) { if (rf & 1) {
67918
- const _r4 = i0.ɵɵgetCurrentView();
67919
- i0.ɵɵelementStart(0, "symphiq-journey-progress-indicator", 32);
67920
- i0.ɵɵlistener("stepClick", function SymphiqBusinessAnalysisDashboardComponent_Conditional_26_Conditional_0_Template_symphiq_journey_progress_indicator_stepClick_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.stepClick.emit($event)); })("nextStepClick", function SymphiqBusinessAnalysisDashboardComponent_Conditional_26_Conditional_0_Template_symphiq_journey_progress_indicator_nextStepClick_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.nextStepClick.emit()); });
67893
+ function DashboardHeaderComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
67894
+ i0.ɵɵelementStart(0, "div", 8);
67895
+ i0.ɵɵconditionalCreate(1, DashboardHeaderComponent_Conditional_12_Conditional_1_Template, 5, 5, "div", 20);
67896
+ i0.ɵɵconditionalCreate(2, DashboardHeaderComponent_Conditional_12_Conditional_2_Template, 5, 6, "div", 20);
67921
67897
  i0.ɵɵelementEnd();
67922
67898
  } if (rf & 2) {
67923
- const ctx_r1 = i0.ɵɵnextContext(2);
67924
- i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("currentStepId", ctx_r1.JourneyStepIdEnum.BUSINESS_ANALYSIS)("showNextStepAction", false)("forDemo", ctx_r1.forDemo())("maxAccessibleStepId", ctx_r1.maxAccessibleStepId());
67925
- } }
67926
- function SymphiqBusinessAnalysisDashboardComponent_Conditional_26_Template(rf, ctx) { if (rf & 1) {
67927
- i0.ɵɵconditionalCreate(0, SymphiqBusinessAnalysisDashboardComponent_Conditional_26_Conditional_0_Template, 1, 5, "symphiq-journey-progress-indicator", 30);
67928
- i0.ɵɵelement(1, "symphiq-content-generation-progress-with-confetti", 31);
67929
- } if (rf & 2) {
67930
- let tmp_4_0;
67931
- let tmp_6_0;
67932
67899
  const ctx_r1 = i0.ɵɵnextContext();
67933
- i0.ɵɵconditional(!ctx_r1.isOnboarded() ? 0 : -1);
67934
67900
  i0.ɵɵadvance();
67935
- i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("itemStatus", ctx_r1.itemStatus())("currentStatus", (tmp_4_0 = ctx_r1.profile()) == null ? null : tmp_4_0.selfContentStatus)("confettiIntensity", "celebration")("title", "We are generating a new Business Analysis for " + (((tmp_6_0 = ctx_r1.currentProfile()) == null ? null : tmp_6_0.profileStructured == null ? null : tmp_6_0.profileStructured.businessName) || "your business") + ".")("subtitle", "It will appear here when ready. You can check back later as this will take a few minutes to complete.");
67901
+ i0.ɵɵconditional(ctx_r1.formattedGeneratedDate() ? 1 : -1);
67902
+ i0.ɵɵadvance();
67903
+ i0.ɵɵconditional(ctx_r1.requestedByUser() ? 2 : -1);
67936
67904
  } }
67937
- function SymphiqBusinessAnalysisDashboardComponent_Conditional_27_Conditional_0_Conditional_0_Template(rf, ctx) { if (rf & 1) {
67938
- const _r6 = i0.ɵɵgetCurrentView();
67939
- i0.ɵɵelementStart(0, "symphiq-journey-progress-indicator", 32);
67940
- i0.ɵɵlistener("stepClick", function SymphiqBusinessAnalysisDashboardComponent_Conditional_27_Conditional_0_Conditional_0_Template_symphiq_journey_progress_indicator_stepClick_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.stepClick.emit($event)); })("nextStepClick", function SymphiqBusinessAnalysisDashboardComponent_Conditional_27_Conditional_0_Conditional_0_Template_symphiq_journey_progress_indicator_nextStepClick_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.nextStepClick.emit()); });
67905
+ function DashboardHeaderComponent_Conditional_20_Conditional_3_Template(rf, ctx) { if (rf & 1) {
67906
+ i0.ɵɵelementStart(0, "span", 23);
67907
+ i0.ɵɵtext(1, "\u203A");
67941
67908
  i0.ɵɵelementEnd();
67942
- } if (rf & 2) {
67943
- const ctx_r1 = i0.ɵɵnextContext(3);
67944
- i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("currentStepId", ctx_r1.JourneyStepIdEnum.BUSINESS_ANALYSIS)("showNextStepAction", ctx_r1.showNextStepAction())("forDemo", ctx_r1.forDemo())("maxAccessibleStepId", ctx_r1.maxAccessibleStepId());
67945
- } }
67946
- function SymphiqBusinessAnalysisDashboardComponent_Conditional_27_Conditional_0_Template(rf, ctx) { if (rf & 1) {
67947
- const _r5 = i0.ɵɵgetCurrentView();
67948
- i0.ɵɵconditionalCreate(0, SymphiqBusinessAnalysisDashboardComponent_Conditional_27_Conditional_0_Conditional_0_Template, 1, 5, "symphiq-journey-progress-indicator", 30);
67949
- i0.ɵɵelementStart(1, "div", 6)(2, "div", 33);
67950
- i0.ɵɵelement(3, "symphiq-welcome-banner", 34);
67909
+ i0.ɵɵelementStart(2, "span", 23);
67910
+ i0.ɵɵtext(3);
67951
67911
  i0.ɵɵelementEnd();
67952
- i0.ɵɵelementStart(4, "div", 33)(5, "symphiq-recommendations-tiled-grid", 35);
67953
- i0.ɵɵlistener("viewMoreClick", function SymphiqBusinessAnalysisDashboardComponent_Conditional_27_Conditional_0_Template_symphiq_recommendations_tiled_grid_viewMoreClick_5_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openRecommendationDetailsModal($event)); });
67954
- i0.ɵɵelementEnd()();
67955
- i0.ɵɵelementStart(6, "div");
67956
- i0.ɵɵelement(7, "symphiq-collapsible-section-group", 36);
67957
- i0.ɵɵelementEnd()();
67958
67912
  } if (rf & 2) {
67959
- let tmp_4_0;
67960
67913
  const ctx_r1 = i0.ɵɵnextContext(2);
67961
- i0.ɵɵconditional(!ctx_r1.isOnboarded() ? 0 : -1);
67962
- i0.ɵɵadvance(3);
67963
- i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("businessName", ((tmp_4_0 = ctx_r1.currentProfile()) == null ? null : tmp_4_0.profileStructured == null ? null : tmp_4_0.profileStructured.businessName) || "your business")("isOnboarded", ctx_r1.isOnboarded());
67964
- i0.ɵɵadvance(2);
67965
- i0.ɵɵproperty("recommendations", ctx_r1.recommendationItems())("viewMode", ctx_r1.viewMode());
67914
+ i0.ɵɵclassProp("opacity-0", ctx_r1.subsectionFading())("opacity-100", !ctx_r1.subsectionFading());
67915
+ i0.ɵɵproperty("ngClass", ctx_r1.isLightMode() ? "text-slate-400" : "text-slate-500");
67966
67916
  i0.ɵɵadvance(2);
67967
- i0.ɵɵproperty("sections", ctx_r1.nonRecommendationSections())("viewMode", ctx_r1.viewMode());
67917
+ i0.ɵɵclassProp("opacity-0", ctx_r1.subsectionFading())("opacity-100", !ctx_r1.subsectionFading());
67918
+ i0.ɵɵproperty("ngClass", ctx_r1.isLightMode() ? "text-slate-500" : "text-slate-500");
67919
+ i0.ɵɵadvance();
67920
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.currentSubsection(), " ");
67968
67921
  } }
67969
- function SymphiqBusinessAnalysisDashboardComponent_Conditional_27_Conditional_1_For_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
67970
- i0.ɵɵelementStart(0, "div", 38);
67971
- i0.ɵɵelement(1, "symphiq-section-divider", 39);
67922
+ function DashboardHeaderComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
67923
+ i0.ɵɵelementStart(0, "div", 14)(1, "span", 23);
67924
+ i0.ɵɵtext(2);
67925
+ i0.ɵɵelementEnd();
67926
+ i0.ɵɵconditionalCreate(3, DashboardHeaderComponent_Conditional_20_Conditional_3_Template, 4, 11);
67972
67927
  i0.ɵɵelementEnd();
67973
67928
  } if (rf & 2) {
67974
- const ɵ$index_113_r7 = i0.ɵɵnextContext().$index;
67975
- const ctx_r1 = i0.ɵɵnextContext(3);
67929
+ const ctx_r1 = i0.ɵɵnextContext();
67976
67930
  i0.ɵɵadvance();
67977
- i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("subsections", ctx_r1.sections()[ɵ$index_113_r7 + 1].subsections || i0.ɵɵpureFunction0(2, _c0$u));
67978
- } }
67979
- function SymphiqBusinessAnalysisDashboardComponent_Conditional_27_Conditional_1_For_1_Template(rf, ctx) { if (rf & 1) {
67980
- i0.ɵɵelement(0, "symphiq-profile-section", 37);
67981
- i0.ɵɵconditionalCreate(1, SymphiqBusinessAnalysisDashboardComponent_Conditional_27_Conditional_1_For_1_Conditional_1_Template, 2, 3, "div", 38);
67982
- } if (rf & 2) {
67983
- const section_r8 = ctx.$implicit;
67984
- const ɵ$index_113_r7 = ctx.$index;
67985
- const ɵ$count_113_r9 = ctx.$count;
67986
- const ctx_r1 = i0.ɵɵnextContext(3);
67987
- i0.ɵɵproperty("section", section_r8)("viewMode", ctx_r1.viewMode())("forceExpanded", !ctx_r1.isCompactView());
67931
+ i0.ɵɵclassProp("opacity-0", ctx_r1.sectionFading())("opacity-100", !ctx_r1.sectionFading());
67932
+ i0.ɵɵproperty("ngClass", ctx_r1.isLightMode() ? "text-slate-600 font-medium" : "text-slate-400 font-medium");
67988
67933
  i0.ɵɵadvance();
67989
- i0.ɵɵconditional(!(ɵ$index_113_r7 === ɵ$count_113_r9 - 1) ? 1 : -1);
67990
- } }
67991
- function SymphiqBusinessAnalysisDashboardComponent_Conditional_27_Conditional_1_Template(rf, ctx) { if (rf & 1) {
67992
- i0.ɵɵrepeaterCreate(0, SymphiqBusinessAnalysisDashboardComponent_Conditional_27_Conditional_1_For_1_Template, 2, 4, null, null, i0.ɵɵcomponentInstance().trackBySectionId, true);
67993
- } if (rf & 2) {
67994
- const ctx_r1 = i0.ɵɵnextContext(2);
67995
- i0.ɵɵrepeater(ctx_r1.sections());
67996
- } }
67997
- function SymphiqBusinessAnalysisDashboardComponent_Conditional_27_Template(rf, ctx) { if (rf & 1) {
67998
- i0.ɵɵconditionalCreate(0, SymphiqBusinessAnalysisDashboardComponent_Conditional_27_Conditional_0_Template, 8, 8)(1, SymphiqBusinessAnalysisDashboardComponent_Conditional_27_Conditional_1_Template, 2, 0);
67999
- } if (rf & 2) {
68000
- const ctx_r1 = i0.ɵɵnextContext();
68001
- i0.ɵɵconditional(ctx_r1.isSimplifiedView() ? 0 : 1);
68002
- } }
68003
- function SymphiqBusinessAnalysisDashboardComponent_Conditional_28_Template(rf, ctx) { if (rf & 1) {
68004
- i0.ɵɵelement(0, "symphiq-section-navigation", 15);
68005
- } if (rf & 2) {
68006
- const ctx_r1 = i0.ɵɵnextContext();
68007
- i0.ɵɵproperty("sections", ctx_r1.sections())("viewMode", ctx_r1.viewMode())("embedded", ctx_r1.embedded())("scrollElement", ctx_r1.scrollElement() ?? undefined);
67934
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.currentSection(), " ");
67935
+ i0.ɵɵadvance();
67936
+ i0.ɵɵconditional(ctx_r1.currentSubsection() ? 3 : -1);
68008
67937
  } }
68009
- function SymphiqBusinessAnalysisDashboardComponent_Conditional_29_Template(rf, ctx) { if (rf & 1) {
68010
- i0.ɵɵelement(0, "symphiq-floating-toc", 15);
67938
+ function DashboardHeaderComponent_Conditional_21_Template(rf, ctx) { if (rf & 1) {
67939
+ const _r3 = i0.ɵɵgetCurrentView();
67940
+ i0.ɵɵelementStart(0, "symphiq-search-button", 24);
67941
+ i0.ɵɵlistener("searchClick", function DashboardHeaderComponent_Conditional_21_Template_symphiq_search_button_searchClick_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSearchClick()); });
67942
+ i0.ɵɵelementEnd();
67943
+ i0.ɵɵelementStart(1, "button", 25);
67944
+ i0.ɵɵlistener("click", function DashboardHeaderComponent_Conditional_21_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onViewModeClick()); });
67945
+ i0.ɵɵnamespaceSVG();
67946
+ i0.ɵɵelementStart(2, "svg", 17);
67947
+ i0.ɵɵelement(3, "path", 18)(4, "path", 19);
67948
+ i0.ɵɵelementEnd()();
68011
67949
  } if (rf & 2) {
68012
67950
  const ctx_r1 = i0.ɵɵnextContext();
68013
- i0.ɵɵproperty("sections", ctx_r1.sections())("viewMode", ctx_r1.viewMode())("embedded", ctx_r1.embedded())("scrollElement", ctx_r1.scrollElement() ?? undefined);
67951
+ i0.ɵɵproperty("isLightMode", ctx_r1.isLightMode())("minimized", true);
67952
+ i0.ɵɵadvance();
67953
+ i0.ɵɵproperty("ngClass", ctx_r1.getViewModeButtonClasses());
68014
67954
  } }
68015
- class SymphiqBusinessAnalysisDashboardComponent {
68016
- sectionHasContent(section) {
68017
- if (!section?.subsections || section.subsections.length === 0) {
68018
- return false;
68019
- }
68020
- return section.subsections.some((subsection) => this.subsectionHasContent(subsection));
68021
- }
68022
- subsectionHasContent(subsection) {
68023
- const hasItems = !!(subsection?.items && subsection.items.length > 0);
68024
- const hasContent = !!(subsection?.content && subsection.content.trim().length > 0);
68025
- const hasVisual = !!(subsection?.visual && subsection.visual.enabled);
68026
- return hasItems || hasContent || hasVisual;
68027
- }
67955
+ class DashboardHeaderComponent {
68028
67956
  constructor() {
68029
- this.embedded = input(false, ...(ngDevMode ? [{ debugName: "embedded" }] : []));
68030
- this.profile = input(...(ngDevMode ? [undefined, { debugName: "profile" }] : []));
68031
- this.parentHeaderOffset = input(0, ...(ngDevMode ? [{ debugName: "parentHeaderOffset" }] : []));
68032
67957
  this.requestedByUser = input(...(ngDevMode ? [undefined, { debugName: "requestedByUser" }] : []));
67958
+ this.createdDate = input(...(ngDevMode ? [undefined, { debugName: "createdDate" }] : []));
67959
+ this.title = input('', ...(ngDevMode ? [{ debugName: "title" }] : []));
67960
+ this.subtitle = input('', ...(ngDevMode ? [{ debugName: "subtitle" }] : []));
68033
67961
  this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
68034
- this.scrollEvent = input(...(ngDevMode ? [undefined, { debugName: "scrollEvent" }] : []));
68035
- this.scrollElement = input(...(ngDevMode ? [undefined, { debugName: "scrollElement" }] : []));
68036
- this.isLoading = input(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
68037
- this.isOnboarded = input(false, ...(ngDevMode ? [{ debugName: "isOnboarded" }] : []));
68038
- this.forDemo = input(false, ...(ngDevMode ? [{ debugName: "forDemo" }] : []));
68039
- this.maxAccessibleStepId = input(undefined, ...(ngDevMode ? [{ debugName: "maxAccessibleStepId" }] : []));
68040
- this.itemStatus = input(...(ngDevMode ? [undefined, { debugName: "itemStatus" }] : []));
68041
- this.isMarkingAsReviewed = input(false, ...(ngDevMode ? [{ debugName: "isMarkingAsReviewed" }] : []));
68042
- this.stepClick = output();
68043
- this.nextStepClick = output();
68044
- this.markAsReviewedClick = output();
68045
- this.JourneyStepIdEnum = JourneyStepIdEnum;
68046
- this.AiDynamicContentStatusEnum = AiDynamicContentStatusEnum;
68047
- this.showNextStepAction = computed(() => {
68048
- const profile = this.profile();
68049
- if (!profile)
68050
- return false;
68051
- const contentGenerated = profile.selfContentStatus === AiDynamicContentStatusEnum.GENERATED;
68052
- const isReviewed = profile.reviewStatus === ProfileAnalysisReviewStatusEnum.REVIEWED;
68053
- return contentGenerated && isReviewed;
68054
- }, ...(ngDevMode ? [{ debugName: "showNextStepAction" }] : []));
68055
- this.isContentGenerating = computed(() => {
68056
- const status = this.profile()?.selfContentStatus;
68057
- return status === AiDynamicContentStatusEnum.REQUESTED || status === AiDynamicContentStatusEnum.GENERATING;
68058
- }, ...(ngDevMode ? [{ debugName: "isContentGenerating" }] : []));
68059
- this.shouldShowReviewFooter = computed(() => {
68060
- const profile = this.profile();
68061
- if (!profile)
68062
- return false;
68063
- return profile.selfContentStatus === AiDynamicContentStatusEnum.GENERATED &&
68064
- profile.reviewStatus === ProfileAnalysisReviewStatusEnum.NOT_REVIEWED;
68065
- }, ...(ngDevMode ? [{ debugName: "shouldShowReviewFooter" }] : []));
67962
+ this.viewModeLabel = input('View Mode', ...(ngDevMode ? [{ debugName: "viewModeLabel" }] : []));
67963
+ this.currentSection = input(...(ngDevMode ? [undefined, { debugName: "currentSection" }] : []));
67964
+ this.currentSubsection = input(...(ngDevMode ? [undefined, { debugName: "currentSubsection" }] : []));
67965
+ this.sectionFading = input(false, ...(ngDevMode ? [{ debugName: "sectionFading" }] : []));
67966
+ this.subsectionFading = input(false, ...(ngDevMode ? [{ debugName: "subsectionFading" }] : []));
67967
+ this.isLoading = input(...(ngDevMode ? [undefined, { debugName: "isLoading" }] : []));
67968
+ this.showControls = input(true, ...(ngDevMode ? [{ debugName: "showControls" }] : []));
67969
+ this.searchClick = output();
67970
+ this.viewModeClick = output();
68066
67971
  this.headerScrollService = inject(HeaderScrollService);
68067
- this.lookupService = inject(ProfileItemLookupService);
68068
- this.navigationService = inject(NavigationStateService);
68069
- this.profileContextService = inject(ProfileContextService);
68070
- this.searchService = inject(BusinessProfileSearchService);
68071
- this.modalService = inject(ModalService);
68072
- this.confettiService = inject(ConfettiService);
68073
- this.currentProfile = signal(undefined, ...(ngDevMode ? [{ debugName: "currentProfile" }] : []));
68074
- this.previousContentStatus = signal(undefined, ...(ngDevMode ? [{ debugName: "previousContentStatus" }] : []));
68075
- this.COLLAPSE_THRESHOLD = 20;
68076
- this.EXPAND_THRESHOLD = 10;
68077
- this.embeddedScrollEffect = effect(() => {
68078
- const scrollEvent = this.scrollEvent();
68079
- const isEmbedded = this.embedded();
68080
- if (isEmbedded && !scrollEvent) {
68081
- return;
68082
- }
68083
- if (!scrollEvent || !isEmbedded) {
68084
- return;
68085
- }
68086
- const detail = scrollEvent.detail;
68087
- if (!detail) {
68088
- return;
68089
- }
68090
- const scrollTop = detail.scrollTop || 0;
68091
- const currentState = this.headerScrollService.isScrolled();
68092
- if (!currentState && scrollTop > this.COLLAPSE_THRESHOLD) {
68093
- this.headerScrollService.isScrolled.set(true);
68094
- }
68095
- else if (currentState && scrollTop < this.EXPAND_THRESHOLD) {
68096
- this.headerScrollService.isScrolled.set(false);
68097
- }
68098
- const scrollElement = this.scrollElement();
68099
- if (scrollElement) {
68100
- const scrollHeight = scrollElement.scrollHeight || 0;
68101
- const clientHeight = scrollElement.clientHeight || 0;
68102
- const maxScroll = scrollHeight - clientHeight;
68103
- if (maxScroll > 0) {
68104
- const progress = (scrollTop / maxScroll) * 100;
68105
- this.headerScrollService.scrollProgress.set(Math.min(100, Math.max(0, progress)));
68106
- }
68107
- }
68108
- }, ...(ngDevMode ? [{ debugName: "embeddedScrollEffect" }] : []));
68109
- this.scrollProgress = computed(() => this.headerScrollService.scrollProgress(), ...(ngDevMode ? [{ debugName: "scrollProgress" }] : []));
68110
67972
  this.isLightMode = computed(() => this.viewMode() === ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "isLightMode" }] : []));
68111
- this.displayMode = signal(DisplayModeEnum.SIMPLIFIED, ...(ngDevMode ? [{ debugName: "displayMode" }] : []));
68112
- this.isCompactView = computed(() => this.displayMode() === DisplayModeEnum.COMPACT, ...(ngDevMode ? [{ debugName: "isCompactView" }] : []));
68113
- this.isSimplifiedView = computed(() => this.displayMode() === DisplayModeEnum.SIMPLIFIED, ...(ngDevMode ? [{ debugName: "isSimplifiedView" }] : []));
68114
- this.currentSectionTitle = signal('', ...(ngDevMode ? [{ debugName: "currentSectionTitle" }] : []));
68115
- this.currentSubsectionTitle = signal('', ...(ngDevMode ? [{ debugName: "currentSubsectionTitle" }] : []));
68116
- this.sectionTitleFading = signal(false, ...(ngDevMode ? [{ debugName: "sectionTitleFading" }] : []));
68117
- this.subsectionTitleFading = signal(false, ...(ngDevMode ? [{ debugName: "subsectionTitleFading" }] : []));
68118
- this.selectedSearchIndex = signal(0, ...(ngDevMode ? [{ debugName: "selectedSearchIndex" }] : []));
68119
- this.isViewModeSwitcherOpen = signal(false, ...(ngDevMode ? [{ debugName: "isViewModeSwitcherOpen" }] : []));
68120
- this.isViewModeSwitching = signal(false, ...(ngDevMode ? [{ debugName: "isViewModeSwitching" }] : []));
68121
- this.sections = computed(() => {
68122
- const profile = this.currentProfile();
68123
- const allSections = profile?.profileStructured?.sections || [];
68124
- return allSections
68125
- .filter(section => this.sectionHasContent(section))
68126
- .sort((a, b) => (a.order || 0) - (b.order || 0));
68127
- }, ...(ngDevMode ? [{ debugName: "sections" }] : []));
68128
- this.recommendationItems = computed(() => {
68129
- const profile = this.currentProfile();
68130
- return profile?.profileStructured?.recommendations || [];
68131
- }, ...(ngDevMode ? [{ debugName: "recommendationItems" }] : []));
68132
- this.nonRecommendationSections = computed(() => {
68133
- return this.sections().filter(section => section.id !== 'strategic-insights');
68134
- }, ...(ngDevMode ? [{ debugName: "nonRecommendationSections" }] : []));
68135
- this.displayModeLabel = computed(() => {
68136
- const mode = this.displayMode();
68137
- switch (mode) {
68138
- case DisplayModeEnum.SIMPLIFIED:
68139
- return 'Simplified';
68140
- case DisplayModeEnum.COMPACT:
68141
- return 'Compact';
68142
- case DisplayModeEnum.EXPANDED:
68143
- return 'Expanded';
68144
- default:
68145
- return 'View';
68146
- }
68147
- }, ...(ngDevMode ? [{ debugName: "displayModeLabel" }] : []));
68148
- this.lastSectionTitle = '';
68149
- this.lastSubsectionTitle = '';
68150
- this.lastScrollY = 0;
68151
- this.scrollDirection = 'down';
68152
- effect(() => {
68153
- const profile = this.profile();
68154
- this.currentProfile.set(profile);
68155
- this.lookupService.setProfile(profile);
68156
- if (profile) {
68157
- this.searchService.setProfile(profile);
68158
- }
68159
- if (profile?.profileStructured?.sections) {
68160
- const recommendations = profile.profileStructured?.recommendations;
68161
- this.profileContextService.indexProfile(profile.profileStructured.sections, recommendations);
68162
- }
68163
- });
68164
- effect(() => {
68165
- const currentStatus = this.profile()?.selfContentStatus;
68166
- const prevStatus = this.previousContentStatus();
68167
- if (prevStatus === AiDynamicContentStatusEnum.GENERATING &&
68168
- currentStatus === AiDynamicContentStatusEnum.GENERATED) {
68169
- this.confettiService.trigger({
68170
- intensity: 'celebration',
68171
- delay: 200,
68172
- viewMode: this.viewMode(),
68173
- });
67973
+ this.dateFormatCache = new StringMemoizeCache();
67974
+ this.formattedGeneratedDate = computed(() => {
67975
+ let formatted = '';
67976
+ const createdDate = this.createdDate();
67977
+ if (createdDate) {
67978
+ formatted = this.formatDate(createdDate.toISOString());
68174
67979
  }
68175
- this.previousContentStatus.set(currentStatus);
68176
- });
67980
+ return formatted;
67981
+ }, ...(ngDevMode ? [{ debugName: "formattedGeneratedDate" }] : []));
67982
+ this.headerTitleClass = computed(() => this.isLightMode() ? 'text-slate-900' : 'text-white', ...(ngDevMode ? [{ debugName: "headerTitleClass" }] : []));
67983
+ this.metaLabelClass = computed(() => this.isLightMode() ? 'text-slate-600' : 'text-slate-500', ...(ngDevMode ? [{ debugName: "metaLabelClass" }] : []));
68177
67984
  }
68178
- onScroll() {
68179
- this.headerScrollService.handleScroll(this.embedded());
68180
- const navState = this.navigationService.getNavigationState()();
68181
- if (navState.sourceElementId && navState.targetElementId && !navState.isBackButtonVisible) {
68182
- const currentScrollPosition = window.scrollY;
68183
- const scrollDifference = Math.abs(currentScrollPosition - navState.targetScrollPosition);
68184
- if (scrollDifference > 100) {
68185
- this.navigationService.showBackButton();
68186
- }
68187
- }
67985
+ onSearchClick() {
67986
+ this.searchClick.emit();
68188
67987
  }
68189
- toggleExpandedView() {
68190
- const current = this.displayMode();
68191
- if (current === DisplayModeEnum.COMPACT) {
68192
- this.displayMode.set(DisplayModeEnum.EXPANDED);
68193
- }
68194
- else if (current === DisplayModeEnum.EXPANDED) {
68195
- this.displayMode.set(DisplayModeEnum.COMPACT);
68196
- }
67988
+ onViewModeClick() {
67989
+ this.viewModeClick.emit();
68197
67990
  }
68198
- openViewModeSwitcher() {
68199
- this.isViewModeSwitcherOpen.set(true);
67991
+ formatDate(dateString) {
67992
+ // Cache date formatting operations
67993
+ return this.dateFormatCache.get(dateString, (date) => new Date(date).toLocaleDateString('en-US', {
67994
+ year: 'numeric',
67995
+ month: 'long',
67996
+ day: 'numeric',
67997
+ }));
68200
67998
  }
68201
- closeViewModeSwitcher() {
68202
- this.isViewModeSwitcherOpen.set(false);
67999
+ getHeaderClasses() {
68000
+ return this.isLightMode()
68001
+ ? 'bg-white/95 backdrop-blur-md shadow-sm border-b border-slate-200'
68002
+ : 'bg-slate-900/95 backdrop-blur-md shadow-sm border-b border-slate-800';
68203
68003
  }
68204
- handleDisplayModeChange(mode) {
68205
- this.isViewModeSwitching.set(true);
68206
- // Add a small delay to show the spinner
68207
- setTimeout(() => {
68208
- this.displayMode.set(mode);
68209
- this.isViewModeSwitching.set(false);
68210
- this.closeViewModeSwitcher();
68211
- }, 500);
68004
+ getMainTitleClasses() {
68005
+ return this.isLightMode()
68006
+ ? 'text-3xl font-bold bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent'
68007
+ : 'text-3xl font-bold bg-gradient-to-r from-blue-400 to-purple-400 bg-clip-text text-transparent';
68212
68008
  }
68213
- handleMarkAsReviewedClick() {
68214
- this.markAsReviewedClick.emit();
68009
+ getSubtitleClasses() {
68010
+ return this.isLightMode()
68011
+ ? 'text-slate-600 mt-1 text-sm'
68012
+ : 'text-slate-400 mt-1 text-sm';
68215
68013
  }
68216
- openRecommendationDetailsModal(recommendation) {
68217
- const itemAdapter = {
68218
- ...recommendation,
68219
- type: 'RECOMMENDATION',
68220
- label: recommendation.title,
68221
- value: recommendation.description
68222
- };
68223
- this.modalService.openItemDetailModal(itemAdapter, this.viewMode(), 'recommendation', 'Strategic Insights', recommendation.title, undefined, this.isSimplifiedView() || this.isCompactView());
68014
+ getCondensedTitleClasses() {
68015
+ return this.isLightMode()
68016
+ ? 'text-xl font-bold bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent truncate'
68017
+ : 'text-xl font-bold bg-gradient-to-r from-blue-400 to-purple-400 bg-clip-text text-transparent truncate';
68224
68018
  }
68225
68019
  getViewModeButtonClasses() {
68226
- const isDark = this.viewMode() === ViewModeEnum.DARK;
68227
- if (isDark) {
68228
- return 'bg-slate-800/60 border border-slate-700/50 text-slate-300 hover:bg-slate-700/60 hover:border-slate-600/50';
68229
- }
68230
- return 'bg-white/80 border border-slate-200 text-slate-700 hover:bg-white hover:border-slate-300 shadow-sm';
68020
+ return this.isLightMode()
68021
+ ? 'bg-slate-100 hover:bg-slate-200 text-slate-700 border border-slate-200'
68022
+ : 'bg-slate-800 hover:bg-slate-700 text-slate-300 border border-slate-700';
68231
68023
  }
68232
- handleKeyDown(event) {
68233
- if (!this.searchService.isSearchOpen()) {
68234
- if (event.key === '/' || (event.metaKey && event.key === 'k') || (event.ctrlKey && event.key === 'k')) {
68235
- event.preventDefault();
68236
- this.searchService.openSearch();
68237
- }
68238
- return;
68239
- }
68240
- if (event.key === 'Escape') {
68241
- event.preventDefault();
68242
- this.closeSearch();
68243
- }
68244
- else if (event.key === 'ArrowDown') {
68245
- event.preventDefault();
68246
- const results = this.searchService.searchResults();
68247
- if (results.length > 0) {
68248
- this.selectedSearchIndex.update(i => (i + 1) % results.length);
68249
- }
68250
- }
68251
- else if (event.key === 'ArrowUp') {
68252
- event.preventDefault();
68253
- const results = this.searchService.searchResults();
68254
- if (results.length > 0) {
68255
- this.selectedSearchIndex.update(i => (i - 1 + results.length) % results.length);
68024
+ static { this.ɵfac = function DashboardHeaderComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || DashboardHeaderComponent)(); }; }
68025
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DashboardHeaderComponent, selectors: [["symphiq-dashboard-header"]], inputs: { requestedByUser: [1, "requestedByUser"], createdDate: [1, "createdDate"], title: [1, "title"], subtitle: [1, "subtitle"], viewMode: [1, "viewMode"], viewModeLabel: [1, "viewModeLabel"], currentSection: [1, "currentSection"], currentSubsection: [1, "currentSubsection"], sectionFading: [1, "sectionFading"], subsectionFading: [1, "subsectionFading"], isLoading: [1, "isLoading"], showControls: [1, "showControls"] }, outputs: { searchClick: "searchClick", viewModeClick: "viewModeClick" }, decls: 22, vars: 26, consts: [[1, "sticky", "top-0", "z-50", "overflow-hidden", 2, "transition", "height 300ms ease-in-out", 3, "ngClass"], [1, "transition-opacity", "duration-300", "ease-in-out", "h-full"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-4", "h-full", "flex", "items-center"], [1, "flex", "items-center", "justify-between", "w-full"], [1, "flex", "items-center", "gap-3"], [3, "ngClass"], ["title", "Refreshing data...", 1, "animate-spin", "w-4", "h-4", "border-2", "border-blue-500/30", "border-t-blue-500", "rounded-full"], [1, "flex", "items-center", "gap-2"], [1, "flex", "flex-col", "gap-4", "min-w-[180px]"], [1, "absolute", "inset-x-0", "top-0", "transition-opacity", "duration-300", "ease-in-out"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-3.5"], [1, "flex", "items-center", "justify-between"], [1, "flex-1", "min-w-0", "mr-4"], [1, "flex", "items-center", "gap-4"], [1, "flex", "items-center", "gap-2", "text-sm", "flex-shrink-0"], [3, "searchClick", "isLightMode"], ["type", "button", 1, "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", 3, "click", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M15 12a3 3 0 11-6 0 3 3 0 016 0z"], ["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"], [1, "text-left", "sm:text-right"], [1, "text-xs", "sm:text-sm"], [1, "text-sm", "sm:text-base", "font-medium"], [1, "transition-opacity", "duration-300", 3, "ngClass"], [3, "searchClick", "isLightMode", "minimized"], ["type", "button", 1, "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", 3, "click", "ngClass"]], template: function DashboardHeaderComponent_Template(rf, ctx) { if (rf & 1) {
68026
+ i0.ɵɵelementStart(0, "header", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3)(4, "div")(5, "div", 4)(6, "h1", 5);
68027
+ i0.ɵɵtext(7);
68028
+ i0.ɵɵelementEnd();
68029
+ i0.ɵɵconditionalCreate(8, DashboardHeaderComponent_Conditional_8_Template, 1, 0, "div", 6);
68030
+ i0.ɵɵelementEnd();
68031
+ i0.ɵɵelementStart(9, "p", 5);
68032
+ i0.ɵɵtext(10);
68033
+ i0.ɵɵelementEnd()();
68034
+ i0.ɵɵconditionalCreate(11, DashboardHeaderComponent_Conditional_11_Template, 8, 3, "div", 7);
68035
+ i0.ɵɵconditionalCreate(12, DashboardHeaderComponent_Conditional_12_Template, 3, 2, "div", 8);
68036
+ i0.ɵɵelementEnd()()();
68037
+ i0.ɵɵelementStart(13, "div", 9)(14, "div", 10)(15, "div", 11)(16, "div", 12)(17, "h1", 5);
68038
+ i0.ɵɵtext(18);
68039
+ i0.ɵɵelementEnd()();
68040
+ i0.ɵɵelementStart(19, "div", 13);
68041
+ i0.ɵɵconditionalCreate(20, DashboardHeaderComponent_Conditional_20_Template, 4, 7, "div", 14);
68042
+ i0.ɵɵconditionalCreate(21, DashboardHeaderComponent_Conditional_21_Template, 5, 3);
68043
+ i0.ɵɵelementEnd()()()()();
68044
+ } if (rf & 2) {
68045
+ i0.ɵɵstyleProp("height", ctx.headerScrollService.isScrolled() ? "52px" : "100px");
68046
+ i0.ɵɵproperty("ngClass", ctx.getHeaderClasses());
68047
+ i0.ɵɵadvance();
68048
+ i0.ɵɵclassProp("opacity-0", ctx.headerScrollService.isScrolled())("pointer-events-none", ctx.headerScrollService.isScrolled())("opacity-100", !ctx.headerScrollService.isScrolled());
68049
+ i0.ɵɵadvance(5);
68050
+ i0.ɵɵproperty("ngClass", ctx.getMainTitleClasses());
68051
+ i0.ɵɵadvance();
68052
+ i0.ɵɵtextInterpolate1(" ", ctx.title(), " ");
68053
+ i0.ɵɵadvance();
68054
+ i0.ɵɵconditional(ctx.isLoading() ? 8 : -1);
68055
+ i0.ɵɵadvance();
68056
+ i0.ɵɵproperty("ngClass", ctx.getSubtitleClasses());
68057
+ i0.ɵɵadvance();
68058
+ i0.ɵɵtextInterpolate1(" ", ctx.subtitle(), " ");
68059
+ i0.ɵɵadvance();
68060
+ i0.ɵɵconditional(ctx.showControls() ? 11 : -1);
68061
+ i0.ɵɵadvance();
68062
+ i0.ɵɵconditional(ctx.formattedGeneratedDate() || ctx.requestedByUser() ? 12 : -1);
68063
+ i0.ɵɵadvance();
68064
+ i0.ɵɵclassProp("opacity-0", !ctx.headerScrollService.isScrolled())("pointer-events-none", !ctx.headerScrollService.isScrolled())("opacity-100", ctx.headerScrollService.isScrolled());
68065
+ i0.ɵɵadvance(4);
68066
+ i0.ɵɵproperty("ngClass", ctx.getCondensedTitleClasses());
68067
+ i0.ɵɵadvance();
68068
+ i0.ɵɵtextInterpolate1(" ", ctx.title(), " ");
68069
+ i0.ɵɵadvance(2);
68070
+ i0.ɵɵconditional(ctx.currentSection() ? 20 : -1);
68071
+ i0.ɵɵadvance();
68072
+ i0.ɵɵconditional(ctx.showControls() ? 21 : -1);
68073
+ } }, dependencies: [CommonModule, i1$1.NgClass, SearchButtonComponent], encapsulation: 2, changeDetection: 0 }); }
68074
+ }
68075
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DashboardHeaderComponent, [{
68076
+ type: Component,
68077
+ args: [{
68078
+ selector: 'symphiq-dashboard-header',
68079
+ standalone: true,
68080
+ imports: [CommonModule, SearchButtonComponent],
68081
+ changeDetection: ChangeDetectionStrategy.OnPush,
68082
+ template: `
68083
+ <header [ngClass]="getHeaderClasses()" class="sticky top-0 z-50 overflow-hidden" [style.height]="headerScrollService.isScrolled() ? '52px' : '100px'" style="transition: height 300ms ease-in-out;">
68084
+ <!-- Expanded Header (default state) -->
68085
+ <div
68086
+ class="transition-opacity duration-300 ease-in-out h-full"
68087
+ [class.opacity-0]="headerScrollService.isScrolled()"
68088
+ [class.pointer-events-none]="headerScrollService.isScrolled()"
68089
+ [class.opacity-100]="!headerScrollService.isScrolled()">
68090
+ <div
68091
+ class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4 h-full flex items-center">
68092
+ <div class="flex items-center justify-between w-full">
68093
+ <div>
68094
+ <div class="flex items-center gap-3">
68095
+ <h1 [ngClass]="getMainTitleClasses()">
68096
+ {{ title() }}
68097
+ </h1>
68098
+ @if (isLoading()) {
68099
+ <div class="animate-spin w-4 h-4 border-2 border-blue-500/30 border-t-blue-500 rounded-full" title="Refreshing data..."></div>
68100
+ }
68101
+ </div>
68102
+ <p [ngClass]="getSubtitleClasses()">
68103
+ {{ subtitle() }}
68104
+ </p>
68105
+ </div>
68106
+ @if (showControls()) {
68107
+ <div class="flex items-center gap-2">
68108
+ <symphiq-search-button
68109
+ [isLightMode]="isLightMode()"
68110
+ (searchClick)="onSearchClick()"
68111
+ />
68112
+ <button
68113
+ type="button"
68114
+ (click)="onViewModeClick()"
68115
+ [ngClass]="getViewModeButtonClasses()"
68116
+ 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">
68117
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
68118
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
68119
+ <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>
68120
+ </svg>
68121
+ <span>{{ viewModeLabel() }}</span>
68122
+ </button>
68123
+ </div>
68256
68124
  }
68257
- }
68258
- else if (event.key === 'Enter') {
68259
- event.preventDefault();
68260
- const results = this.searchService.searchResults();
68261
- if (results.length > 0) {
68262
- this.onSearchResultSelected(results[this.selectedSearchIndex()]);
68125
+ @if (formattedGeneratedDate() || requestedByUser()) {
68126
+ <div class="flex flex-col gap-4 min-w-[180px]">
68127
+ @if (formattedGeneratedDate()) {
68128
+ <div class="text-left sm:text-right">
68129
+ <div [class]="metaLabelClass()" class="text-xs sm:text-sm">Generated At</div>
68130
+ <div [class]="headerTitleClass()" class="text-sm sm:text-base font-medium">{{ formattedGeneratedDate() }}</div>
68131
+ </div>
68132
+ }
68133
+ @if (requestedByUser()) {
68134
+ <div class="text-left sm:text-right">
68135
+ <div [class]="metaLabelClass()" class="text-xs sm:text-sm">Requested by</div>
68136
+ <div [class]="headerTitleClass()" class="text-sm sm:text-base font-medium">{{ requestedByUser()?.firstName }} {{ requestedByUser()?.lastName }}</div>
68137
+ </div>
68138
+ }
68139
+ </div>
68263
68140
  }
68141
+ </div>
68142
+ </div>
68143
+ </div>
68144
+
68145
+ <!-- Condensed Header (scrolled state) -->
68146
+ <div
68147
+ class="absolute inset-x-0 top-0 transition-opacity duration-300 ease-in-out"
68148
+ [class.opacity-0]="!headerScrollService.isScrolled()"
68149
+ [class.pointer-events-none]="!headerScrollService.isScrolled()"
68150
+ [class.opacity-100]="headerScrollService.isScrolled()">
68151
+ <div
68152
+ class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-3.5">
68153
+ <div class="flex items-center justify-between">
68154
+ <div class="flex-1 min-w-0 mr-4">
68155
+ <h1 [ngClass]="getCondensedTitleClasses()">
68156
+ {{ title() }}
68157
+ </h1>
68158
+ </div>
68159
+ <div class="flex items-center gap-4">
68160
+ @if (currentSection()) {
68161
+ <div class="flex items-center gap-2 text-sm flex-shrink-0">
68162
+ <span [ngClass]="isLightMode() ? 'text-slate-600 font-medium' : 'text-slate-400 font-medium'" class="transition-opacity duration-300" [class.opacity-0]="sectionFading()" [class.opacity-100]="!sectionFading()">
68163
+ {{ currentSection() }}
68164
+ </span>
68165
+ @if (currentSubsection()) {
68166
+ <span [ngClass]="isLightMode() ? 'text-slate-400' : 'text-slate-500'" class="transition-opacity duration-300" [class.opacity-0]="subsectionFading()" [class.opacity-100]="!subsectionFading()">›</span>
68167
+ <span [ngClass]="isLightMode() ? 'text-slate-500' : 'text-slate-500'" class="transition-opacity duration-300" [class.opacity-0]="subsectionFading()" [class.opacity-100]="!subsectionFading()">
68168
+ {{ currentSubsection() }}
68169
+ </span>
68170
+ }
68171
+ </div>
68172
+ }
68173
+ @if (showControls()) {
68174
+ <symphiq-search-button
68175
+ [isLightMode]="isLightMode()"
68176
+ [minimized]="true"
68177
+ (searchClick)="onSearchClick()"
68178
+ />
68179
+ <button
68180
+ type="button"
68181
+ (click)="onViewModeClick()"
68182
+ [ngClass]="getViewModeButtonClasses()"
68183
+ 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">
68184
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
68185
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
68186
+ <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>
68187
+ </svg>
68188
+ </button>
68189
+ }
68190
+ </div>
68191
+ </div>
68192
+ </div>
68193
+ </div>
68194
+ </header>
68195
+ `
68196
+ }]
68197
+ }], null, { requestedByUser: [{ type: i0.Input, args: [{ isSignal: true, alias: "requestedByUser", required: false }] }], createdDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "createdDate", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], subtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "subtitle", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], viewModeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewModeLabel", required: false }] }], currentSection: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentSection", required: false }] }], currentSubsection: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentSubsection", required: false }] }], sectionFading: [{ type: i0.Input, args: [{ isSignal: true, alias: "sectionFading", required: false }] }], subsectionFading: [{ type: i0.Input, args: [{ isSignal: true, alias: "subsectionFading", required: false }] }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: false }] }], showControls: [{ type: i0.Input, args: [{ isSignal: true, alias: "showControls", required: false }] }], searchClick: [{ type: i0.Output, args: ["searchClick"] }], viewModeClick: [{ type: i0.Output, args: ["viewModeClick"] }] }); })();
68198
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DashboardHeaderComponent, { className: "DashboardHeaderComponent", filePath: "lib/components/shared/dashboard-header.component.ts", lineNumber: 128 }); })();
68199
+
68200
+ const _c0$u = () => [];
68201
+ function SymphiqBusinessAnalysisDashboardComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
68202
+ i0.ɵɵelementStart(0, "div", 6);
68203
+ i0.ɵɵelement(1, "symphiq-indeterminate-spinner", 13);
68204
+ i0.ɵɵelementEnd();
68205
+ } if (rf & 2) {
68206
+ const ctx_r0 = i0.ɵɵnextContext();
68207
+ i0.ɵɵadvance();
68208
+ i0.ɵɵproperty("viewMode", ctx_r0.viewMode());
68209
+ } }
68210
+ function SymphiqBusinessAnalysisDashboardComponent_Conditional_8_Conditional_0_Template(rf, ctx) { if (rf & 1) {
68211
+ const _r2 = i0.ɵɵgetCurrentView();
68212
+ i0.ɵɵelementStart(0, "symphiq-journey-progress-indicator", 16);
68213
+ i0.ɵɵlistener("stepClick", function SymphiqBusinessAnalysisDashboardComponent_Conditional_8_Conditional_0_Template_symphiq_journey_progress_indicator_stepClick_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.stepClick.emit($event)); })("nextStepClick", function SymphiqBusinessAnalysisDashboardComponent_Conditional_8_Conditional_0_Template_symphiq_journey_progress_indicator_nextStepClick_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.nextStepClick.emit()); });
68214
+ i0.ɵɵelementEnd();
68215
+ } if (rf & 2) {
68216
+ const ctx_r0 = i0.ɵɵnextContext(2);
68217
+ i0.ɵɵproperty("viewMode", ctx_r0.viewMode())("currentStepId", ctx_r0.JourneyStepIdEnum.BUSINESS_ANALYSIS)("showNextStepAction", false)("forDemo", ctx_r0.forDemo())("maxAccessibleStepId", ctx_r0.maxAccessibleStepId());
68218
+ } }
68219
+ function SymphiqBusinessAnalysisDashboardComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
68220
+ i0.ɵɵconditionalCreate(0, SymphiqBusinessAnalysisDashboardComponent_Conditional_8_Conditional_0_Template, 1, 5, "symphiq-journey-progress-indicator", 14);
68221
+ i0.ɵɵelement(1, "symphiq-content-generation-progress-with-confetti", 15);
68222
+ } if (rf & 2) {
68223
+ let tmp_4_0;
68224
+ let tmp_6_0;
68225
+ const ctx_r0 = i0.ɵɵnextContext();
68226
+ i0.ɵɵconditional(!ctx_r0.isOnboarded() ? 0 : -1);
68227
+ i0.ɵɵadvance();
68228
+ i0.ɵɵproperty("viewMode", ctx_r0.viewMode())("itemStatus", ctx_r0.itemStatus())("currentStatus", (tmp_4_0 = ctx_r0.profile()) == null ? null : tmp_4_0.selfContentStatus)("confettiIntensity", "celebration")("title", "We are generating a new Business Analysis for " + (((tmp_6_0 = ctx_r0.currentProfile()) == null ? null : tmp_6_0.profileStructured == null ? null : tmp_6_0.profileStructured.businessName) || "your business") + ".")("subtitle", "It will appear here when ready. You can check back later as this will take a few minutes to complete.");
68229
+ } }
68230
+ function SymphiqBusinessAnalysisDashboardComponent_Conditional_9_Conditional_0_Conditional_0_Template(rf, ctx) { if (rf & 1) {
68231
+ const _r4 = i0.ɵɵgetCurrentView();
68232
+ i0.ɵɵelementStart(0, "symphiq-journey-progress-indicator", 16);
68233
+ i0.ɵɵlistener("stepClick", function SymphiqBusinessAnalysisDashboardComponent_Conditional_9_Conditional_0_Conditional_0_Template_symphiq_journey_progress_indicator_stepClick_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.stepClick.emit($event)); })("nextStepClick", function SymphiqBusinessAnalysisDashboardComponent_Conditional_9_Conditional_0_Conditional_0_Template_symphiq_journey_progress_indicator_nextStepClick_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.nextStepClick.emit()); });
68234
+ i0.ɵɵelementEnd();
68235
+ } if (rf & 2) {
68236
+ const ctx_r0 = i0.ɵɵnextContext(3);
68237
+ i0.ɵɵproperty("viewMode", ctx_r0.viewMode())("currentStepId", ctx_r0.JourneyStepIdEnum.BUSINESS_ANALYSIS)("showNextStepAction", ctx_r0.showNextStepAction())("forDemo", ctx_r0.forDemo())("maxAccessibleStepId", ctx_r0.maxAccessibleStepId());
68238
+ } }
68239
+ function SymphiqBusinessAnalysisDashboardComponent_Conditional_9_Conditional_0_Template(rf, ctx) { if (rf & 1) {
68240
+ const _r3 = i0.ɵɵgetCurrentView();
68241
+ i0.ɵɵconditionalCreate(0, SymphiqBusinessAnalysisDashboardComponent_Conditional_9_Conditional_0_Conditional_0_Template, 1, 5, "symphiq-journey-progress-indicator", 14);
68242
+ i0.ɵɵelementStart(1, "div", 17)(2, "div", 18);
68243
+ i0.ɵɵelement(3, "symphiq-welcome-banner", 19);
68244
+ i0.ɵɵelementEnd();
68245
+ i0.ɵɵelementStart(4, "div", 18)(5, "symphiq-recommendations-tiled-grid", 20);
68246
+ i0.ɵɵlistener("viewMoreClick", function SymphiqBusinessAnalysisDashboardComponent_Conditional_9_Conditional_0_Template_symphiq_recommendations_tiled_grid_viewMoreClick_5_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openRecommendationDetailsModal($event)); });
68247
+ i0.ɵɵelementEnd()();
68248
+ i0.ɵɵelementStart(6, "div");
68249
+ i0.ɵɵelement(7, "symphiq-collapsible-section-group", 21);
68250
+ i0.ɵɵelementEnd()();
68251
+ } if (rf & 2) {
68252
+ let tmp_4_0;
68253
+ const ctx_r0 = i0.ɵɵnextContext(2);
68254
+ i0.ɵɵconditional(!ctx_r0.isOnboarded() ? 0 : -1);
68255
+ i0.ɵɵadvance(3);
68256
+ i0.ɵɵproperty("viewMode", ctx_r0.viewMode())("businessName", ((tmp_4_0 = ctx_r0.currentProfile()) == null ? null : tmp_4_0.profileStructured == null ? null : tmp_4_0.profileStructured.businessName) || "your business")("isOnboarded", ctx_r0.isOnboarded());
68257
+ i0.ɵɵadvance(2);
68258
+ i0.ɵɵproperty("recommendations", ctx_r0.recommendationItems())("viewMode", ctx_r0.viewMode());
68259
+ i0.ɵɵadvance(2);
68260
+ i0.ɵɵproperty("sections", ctx_r0.nonRecommendationSections())("viewMode", ctx_r0.viewMode());
68261
+ } }
68262
+ function SymphiqBusinessAnalysisDashboardComponent_Conditional_9_Conditional_1_For_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
68263
+ i0.ɵɵelementStart(0, "div", 23);
68264
+ i0.ɵɵelement(1, "symphiq-section-divider", 24);
68265
+ i0.ɵɵelementEnd();
68266
+ } if (rf & 2) {
68267
+ const ɵ$index_46_r5 = i0.ɵɵnextContext().$index;
68268
+ const ctx_r0 = i0.ɵɵnextContext(3);
68269
+ i0.ɵɵadvance();
68270
+ i0.ɵɵproperty("viewMode", ctx_r0.viewMode())("subsections", ctx_r0.sections()[ɵ$index_46_r5 + 1].subsections || i0.ɵɵpureFunction0(2, _c0$u));
68271
+ } }
68272
+ function SymphiqBusinessAnalysisDashboardComponent_Conditional_9_Conditional_1_For_1_Template(rf, ctx) { if (rf & 1) {
68273
+ i0.ɵɵelement(0, "symphiq-profile-section", 22);
68274
+ i0.ɵɵconditionalCreate(1, SymphiqBusinessAnalysisDashboardComponent_Conditional_9_Conditional_1_For_1_Conditional_1_Template, 2, 3, "div", 23);
68275
+ } if (rf & 2) {
68276
+ const section_r6 = ctx.$implicit;
68277
+ const ɵ$index_46_r5 = ctx.$index;
68278
+ const ɵ$count_46_r7 = ctx.$count;
68279
+ const ctx_r0 = i0.ɵɵnextContext(3);
68280
+ i0.ɵɵproperty("section", section_r6)("viewMode", ctx_r0.viewMode())("forceExpanded", !ctx_r0.isCompactView());
68281
+ i0.ɵɵadvance();
68282
+ i0.ɵɵconditional(!(ɵ$index_46_r5 === ɵ$count_46_r7 - 1) ? 1 : -1);
68283
+ } }
68284
+ function SymphiqBusinessAnalysisDashboardComponent_Conditional_9_Conditional_1_Template(rf, ctx) { if (rf & 1) {
68285
+ i0.ɵɵrepeaterCreate(0, SymphiqBusinessAnalysisDashboardComponent_Conditional_9_Conditional_1_For_1_Template, 2, 4, null, null, i0.ɵɵcomponentInstance().trackBySectionId, true);
68286
+ } if (rf & 2) {
68287
+ const ctx_r0 = i0.ɵɵnextContext(2);
68288
+ i0.ɵɵrepeater(ctx_r0.sections());
68289
+ } }
68290
+ function SymphiqBusinessAnalysisDashboardComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
68291
+ i0.ɵɵconditionalCreate(0, SymphiqBusinessAnalysisDashboardComponent_Conditional_9_Conditional_0_Template, 8, 8)(1, SymphiqBusinessAnalysisDashboardComponent_Conditional_9_Conditional_1_Template, 2, 0);
68292
+ } if (rf & 2) {
68293
+ const ctx_r0 = i0.ɵɵnextContext();
68294
+ i0.ɵɵconditional(ctx_r0.isSimplifiedView() ? 0 : 1);
68295
+ } }
68296
+ function SymphiqBusinessAnalysisDashboardComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
68297
+ i0.ɵɵelement(0, "symphiq-section-navigation", 7);
68298
+ } if (rf & 2) {
68299
+ const ctx_r0 = i0.ɵɵnextContext();
68300
+ i0.ɵɵproperty("sections", ctx_r0.sections())("viewMode", ctx_r0.viewMode())("embedded", ctx_r0.embedded())("scrollElement", ctx_r0.scrollElement() ?? undefined);
68301
+ } }
68302
+ function SymphiqBusinessAnalysisDashboardComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
68303
+ i0.ɵɵelement(0, "symphiq-floating-toc", 7);
68304
+ } if (rf & 2) {
68305
+ const ctx_r0 = i0.ɵɵnextContext();
68306
+ i0.ɵɵproperty("sections", ctx_r0.sections())("viewMode", ctx_r0.viewMode())("embedded", ctx_r0.embedded())("scrollElement", ctx_r0.scrollElement() ?? undefined);
68307
+ } }
68308
+ class SymphiqBusinessAnalysisDashboardComponent {
68309
+ sectionHasContent(section) {
68310
+ if (!section?.subsections || section.subsections.length === 0) {
68311
+ return false;
68264
68312
  }
68313
+ return section.subsections.some((subsection) => this.subsectionHasContent(subsection));
68265
68314
  }
68266
- openSearch() {
68267
- this.searchService.openSearch();
68315
+ subsectionHasContent(subsection) {
68316
+ const hasItems = !!(subsection?.items && subsection.items.length > 0);
68317
+ const hasContent = !!(subsection?.content && subsection.content.trim().length > 0);
68318
+ const hasVisual = !!(subsection?.visual && subsection.visual.enabled);
68319
+ return hasItems || hasContent || hasVisual;
68268
68320
  }
68269
- closeSearch() {
68270
- this.searchService.closeSearch();
68271
- this.selectedSearchIndex.set(0);
68321
+ constructor() {
68322
+ this.embedded = input(false, ...(ngDevMode ? [{ debugName: "embedded" }] : []));
68323
+ this.profile = input(...(ngDevMode ? [undefined, { debugName: "profile" }] : []));
68324
+ this.parentHeaderOffset = input(0, ...(ngDevMode ? [{ debugName: "parentHeaderOffset" }] : []));
68325
+ this.requestedByUser = input(...(ngDevMode ? [undefined, { debugName: "requestedByUser" }] : []));
68326
+ this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
68327
+ this.scrollEvent = input(...(ngDevMode ? [undefined, { debugName: "scrollEvent" }] : []));
68328
+ this.scrollElement = input(...(ngDevMode ? [undefined, { debugName: "scrollElement" }] : []));
68329
+ this.isLoading = input(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
68330
+ this.isOnboarded = input(false, ...(ngDevMode ? [{ debugName: "isOnboarded" }] : []));
68331
+ this.forDemo = input(false, ...(ngDevMode ? [{ debugName: "forDemo" }] : []));
68332
+ this.maxAccessibleStepId = input(undefined, ...(ngDevMode ? [{ debugName: "maxAccessibleStepId" }] : []));
68333
+ this.itemStatus = input(...(ngDevMode ? [undefined, { debugName: "itemStatus" }] : []));
68334
+ this.isMarkingAsReviewed = input(false, ...(ngDevMode ? [{ debugName: "isMarkingAsReviewed" }] : []));
68335
+ this.stepClick = output();
68336
+ this.nextStepClick = output();
68337
+ this.markAsReviewedClick = output();
68338
+ this.JourneyStepIdEnum = JourneyStepIdEnum;
68339
+ this.AiDynamicContentStatusEnum = AiDynamicContentStatusEnum;
68340
+ this.showNextStepAction = computed(() => {
68341
+ const profile = this.profile();
68342
+ if (!profile)
68343
+ return false;
68344
+ const contentGenerated = profile.selfContentStatus === AiDynamicContentStatusEnum.GENERATED;
68345
+ const isReviewed = profile.reviewStatus === ProfileAnalysisReviewStatusEnum.REVIEWED;
68346
+ return contentGenerated && isReviewed;
68347
+ }, ...(ngDevMode ? [{ debugName: "showNextStepAction" }] : []));
68348
+ this.isContentGenerating = computed(() => {
68349
+ const status = this.profile()?.selfContentStatus;
68350
+ return status === AiDynamicContentStatusEnum.REQUESTED || status === AiDynamicContentStatusEnum.GENERATING;
68351
+ }, ...(ngDevMode ? [{ debugName: "isContentGenerating" }] : []));
68352
+ this.shouldShowReviewFooter = computed(() => {
68353
+ const profile = this.profile();
68354
+ if (!profile)
68355
+ return false;
68356
+ return profile.selfContentStatus === AiDynamicContentStatusEnum.GENERATED &&
68357
+ profile.reviewStatus === ProfileAnalysisReviewStatusEnum.NOT_REVIEWED;
68358
+ }, ...(ngDevMode ? [{ debugName: "shouldShowReviewFooter" }] : []));
68359
+ this.headerScrollService = inject(HeaderScrollService);
68360
+ this.lookupService = inject(ProfileItemLookupService);
68361
+ this.navigationService = inject(NavigationStateService);
68362
+ this.profileContextService = inject(ProfileContextService);
68363
+ this.searchService = inject(BusinessProfileSearchService);
68364
+ this.modalService = inject(ModalService);
68365
+ this.confettiService = inject(ConfettiService);
68366
+ this.currentProfile = signal(undefined, ...(ngDevMode ? [{ debugName: "currentProfile" }] : []));
68367
+ this.previousContentStatus = signal(undefined, ...(ngDevMode ? [{ debugName: "previousContentStatus" }] : []));
68368
+ this.COLLAPSE_THRESHOLD = 20;
68369
+ this.EXPAND_THRESHOLD = 10;
68370
+ this.embeddedScrollEffect = effect(() => {
68371
+ const scrollEvent = this.scrollEvent();
68372
+ const isEmbedded = this.embedded();
68373
+ if (isEmbedded && !scrollEvent) {
68374
+ return;
68375
+ }
68376
+ if (!scrollEvent || !isEmbedded) {
68377
+ return;
68378
+ }
68379
+ const detail = scrollEvent.detail;
68380
+ if (!detail) {
68381
+ return;
68382
+ }
68383
+ const scrollTop = detail.scrollTop || 0;
68384
+ const currentState = this.headerScrollService.isScrolled();
68385
+ if (!currentState && scrollTop > this.COLLAPSE_THRESHOLD) {
68386
+ this.headerScrollService.isScrolled.set(true);
68387
+ }
68388
+ else if (currentState && scrollTop < this.EXPAND_THRESHOLD) {
68389
+ this.headerScrollService.isScrolled.set(false);
68390
+ }
68391
+ const scrollElement = this.scrollElement();
68392
+ if (scrollElement) {
68393
+ const scrollHeight = scrollElement.scrollHeight || 0;
68394
+ const clientHeight = scrollElement.clientHeight || 0;
68395
+ const maxScroll = scrollHeight - clientHeight;
68396
+ if (maxScroll > 0) {
68397
+ const progress = (scrollTop / maxScroll) * 100;
68398
+ this.headerScrollService.scrollProgress.set(Math.min(100, Math.max(0, progress)));
68399
+ }
68400
+ }
68401
+ }, ...(ngDevMode ? [{ debugName: "embeddedScrollEffect" }] : []));
68402
+ this.scrollProgress = computed(() => this.headerScrollService.scrollProgress(), ...(ngDevMode ? [{ debugName: "scrollProgress" }] : []));
68403
+ this.isLightMode = computed(() => this.viewMode() === ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "isLightMode" }] : []));
68404
+ this.displayMode = signal(DisplayModeEnum.SIMPLIFIED, ...(ngDevMode ? [{ debugName: "displayMode" }] : []));
68405
+ this.isCompactView = computed(() => this.displayMode() === DisplayModeEnum.COMPACT, ...(ngDevMode ? [{ debugName: "isCompactView" }] : []));
68406
+ this.isSimplifiedView = computed(() => this.displayMode() === DisplayModeEnum.SIMPLIFIED, ...(ngDevMode ? [{ debugName: "isSimplifiedView" }] : []));
68407
+ this.currentSectionTitle = signal('', ...(ngDevMode ? [{ debugName: "currentSectionTitle" }] : []));
68408
+ this.currentSubsectionTitle = signal('', ...(ngDevMode ? [{ debugName: "currentSubsectionTitle" }] : []));
68409
+ this.sectionTitleFading = signal(false, ...(ngDevMode ? [{ debugName: "sectionTitleFading" }] : []));
68410
+ this.subsectionTitleFading = signal(false, ...(ngDevMode ? [{ debugName: "subsectionTitleFading" }] : []));
68411
+ this.selectedSearchIndex = signal(0, ...(ngDevMode ? [{ debugName: "selectedSearchIndex" }] : []));
68412
+ this.isViewModeSwitcherOpen = signal(false, ...(ngDevMode ? [{ debugName: "isViewModeSwitcherOpen" }] : []));
68413
+ this.isViewModeSwitching = signal(false, ...(ngDevMode ? [{ debugName: "isViewModeSwitching" }] : []));
68414
+ this.sections = computed(() => {
68415
+ const profile = this.currentProfile();
68416
+ const allSections = profile?.profileStructured?.sections || [];
68417
+ return allSections
68418
+ .filter(section => this.sectionHasContent(section))
68419
+ .sort((a, b) => (a.order || 0) - (b.order || 0));
68420
+ }, ...(ngDevMode ? [{ debugName: "sections" }] : []));
68421
+ this.recommendationItems = computed(() => {
68422
+ const profile = this.currentProfile();
68423
+ return profile?.profileStructured?.recommendations || [];
68424
+ }, ...(ngDevMode ? [{ debugName: "recommendationItems" }] : []));
68425
+ this.nonRecommendationSections = computed(() => {
68426
+ return this.sections().filter(section => section.id !== 'strategic-insights');
68427
+ }, ...(ngDevMode ? [{ debugName: "nonRecommendationSections" }] : []));
68428
+ this.displayModeLabel = computed(() => {
68429
+ const mode = this.displayMode();
68430
+ switch (mode) {
68431
+ case DisplayModeEnum.SIMPLIFIED:
68432
+ return 'Simplified';
68433
+ case DisplayModeEnum.COMPACT:
68434
+ return 'Compact';
68435
+ case DisplayModeEnum.EXPANDED:
68436
+ return 'Expanded';
68437
+ default:
68438
+ return 'View';
68439
+ }
68440
+ }, ...(ngDevMode ? [{ debugName: "displayModeLabel" }] : []));
68441
+ this.lastSectionTitle = '';
68442
+ this.lastSubsectionTitle = '';
68443
+ this.lastScrollY = 0;
68444
+ this.scrollDirection = 'down';
68445
+ effect(() => {
68446
+ const profile = this.profile();
68447
+ this.currentProfile.set(profile);
68448
+ this.lookupService.setProfile(profile);
68449
+ if (profile) {
68450
+ this.searchService.setProfile(profile);
68451
+ }
68452
+ if (profile?.profileStructured?.sections) {
68453
+ const recommendations = profile.profileStructured?.recommendations;
68454
+ this.profileContextService.indexProfile(profile.profileStructured.sections, recommendations);
68455
+ }
68456
+ });
68457
+ effect(() => {
68458
+ const currentStatus = this.profile()?.selfContentStatus;
68459
+ const prevStatus = this.previousContentStatus();
68460
+ if (prevStatus === AiDynamicContentStatusEnum.GENERATING &&
68461
+ currentStatus === AiDynamicContentStatusEnum.GENERATED) {
68462
+ this.confettiService.trigger({
68463
+ intensity: 'celebration',
68464
+ delay: 200,
68465
+ viewMode: this.viewMode(),
68466
+ });
68467
+ }
68468
+ this.previousContentStatus.set(currentStatus);
68469
+ });
68470
+ }
68471
+ onScroll() {
68472
+ this.headerScrollService.handleScroll(this.embedded());
68473
+ const navState = this.navigationService.getNavigationState()();
68474
+ if (navState.sourceElementId && navState.targetElementId && !navState.isBackButtonVisible) {
68475
+ const currentScrollPosition = window.scrollY;
68476
+ const scrollDifference = Math.abs(currentScrollPosition - navState.targetScrollPosition);
68477
+ if (scrollDifference > 100) {
68478
+ this.navigationService.showBackButton();
68479
+ }
68480
+ }
68481
+ }
68482
+ toggleExpandedView() {
68483
+ const current = this.displayMode();
68484
+ if (current === DisplayModeEnum.COMPACT) {
68485
+ this.displayMode.set(DisplayModeEnum.EXPANDED);
68486
+ }
68487
+ else if (current === DisplayModeEnum.EXPANDED) {
68488
+ this.displayMode.set(DisplayModeEnum.COMPACT);
68489
+ }
68490
+ }
68491
+ openViewModeSwitcher() {
68492
+ this.isViewModeSwitcherOpen.set(true);
68493
+ }
68494
+ closeViewModeSwitcher() {
68495
+ this.isViewModeSwitcherOpen.set(false);
68496
+ }
68497
+ handleDisplayModeChange(mode) {
68498
+ this.isViewModeSwitching.set(true);
68499
+ // Add a small delay to show the spinner
68500
+ setTimeout(() => {
68501
+ this.displayMode.set(mode);
68502
+ this.isViewModeSwitching.set(false);
68503
+ this.closeViewModeSwitcher();
68504
+ }, 500);
68505
+ }
68506
+ handleMarkAsReviewedClick() {
68507
+ this.markAsReviewedClick.emit();
68508
+ }
68509
+ openRecommendationDetailsModal(recommendation) {
68510
+ const itemAdapter = {
68511
+ ...recommendation,
68512
+ type: 'RECOMMENDATION',
68513
+ label: recommendation.title,
68514
+ value: recommendation.description
68515
+ };
68516
+ this.modalService.openItemDetailModal(itemAdapter, this.viewMode(), 'recommendation', 'Strategic Insights', recommendation.title, undefined, this.isSimplifiedView() || this.isCompactView());
68517
+ }
68518
+ getViewModeButtonClasses() {
68519
+ const isDark = this.viewMode() === ViewModeEnum.DARK;
68520
+ if (isDark) {
68521
+ return 'bg-slate-800/60 border border-slate-700/50 text-slate-300 hover:bg-slate-700/60 hover:border-slate-600/50';
68522
+ }
68523
+ return 'bg-white/80 border border-slate-200 text-slate-700 hover:bg-white hover:border-slate-300 shadow-sm';
68524
+ }
68525
+ handleKeyDown(event) {
68526
+ if (!this.searchService.isSearchOpen()) {
68527
+ if (event.key === '/' || (event.metaKey && event.key === 'k') || (event.ctrlKey && event.key === 'k')) {
68528
+ event.preventDefault();
68529
+ this.searchService.openSearch();
68530
+ }
68531
+ return;
68532
+ }
68533
+ if (event.key === 'Escape') {
68534
+ event.preventDefault();
68535
+ this.closeSearch();
68536
+ }
68537
+ else if (event.key === 'ArrowDown') {
68538
+ event.preventDefault();
68539
+ const results = this.searchService.searchResults();
68540
+ if (results.length > 0) {
68541
+ this.selectedSearchIndex.update(i => (i + 1) % results.length);
68542
+ }
68543
+ }
68544
+ else if (event.key === 'ArrowUp') {
68545
+ event.preventDefault();
68546
+ const results = this.searchService.searchResults();
68547
+ if (results.length > 0) {
68548
+ this.selectedSearchIndex.update(i => (i - 1 + results.length) % results.length);
68549
+ }
68550
+ }
68551
+ else if (event.key === 'Enter') {
68552
+ event.preventDefault();
68553
+ const results = this.searchService.searchResults();
68554
+ if (results.length > 0) {
68555
+ this.onSearchResultSelected(results[this.selectedSearchIndex()]);
68556
+ }
68557
+ }
68558
+ }
68559
+ openSearch() {
68560
+ this.searchService.openSearch();
68561
+ }
68562
+ closeSearch() {
68563
+ this.searchService.closeSearch();
68564
+ this.selectedSearchIndex.set(0);
68272
68565
  }
68273
68566
  onSearchChange(query) {
68274
68567
  this.searchService.setSearchQuery(query);
@@ -68391,888 +68684,404 @@ class SymphiqBusinessAnalysisDashboardComponent {
68391
68684
  if (this.sectionUpdateTimeout) {
68392
68685
  clearTimeout(this.sectionUpdateTimeout);
68393
68686
  }
68394
- this.sectionUpdateTimeout = setTimeout(() => {
68395
- // Double-check that we should still update (in case scroll changed rapidly)
68396
- if (parentSectionTitle !== this.lastSectionTitle) {
68397
- this.sectionTitleFading.set(true);
68398
- setTimeout(() => {
68399
- this.currentSectionTitle.set(parentSectionTitle);
68400
- this.lastSectionTitle = parentSectionTitle;
68401
- this.sectionTitleFading.set(false);
68402
- }, 150);
68403
- }
68404
- }, 200); // Shorter debounce since we're now using proximity
68405
- }
68406
- if (subsectionChanged && this.lastSubsectionTitle !== '') {
68407
- if (this.subsectionUpdateTimeout) {
68408
- clearTimeout(this.subsectionUpdateTimeout);
68409
- }
68410
- this.subsectionUpdateTimeout = setTimeout(() => {
68411
- // Double-check that we should still update
68412
- if (subsectionTitle !== this.lastSubsectionTitle) {
68413
- this.subsectionTitleFading.set(true);
68414
- setTimeout(() => {
68415
- this.currentSubsectionTitle.set(subsectionTitle);
68416
- this.lastSubsectionTitle = subsectionTitle;
68417
- this.subsectionTitleFading.set(false);
68418
- }, 150);
68419
- }
68420
- }, 200); // Shorter debounce since we're now using proximity
68421
- }
68422
- }
68423
- }, {
68424
- // Use more granular thresholds for better detection
68425
- threshold: [0, 0.2, 0.4, 0.6, 0.8, 1],
68426
- // Focus area starts right after the header
68427
- rootMargin: '-100px 0px -50% 0px',
68428
- });
68429
- // Observe all subsections
68430
- setTimeout(() => {
68431
- const subsections = document.querySelectorAll('[data-subsection-id]');
68432
- subsections.forEach((subsection) => this.subsectionObserver?.observe(subsection));
68433
- }, 100);
68434
- // Add event listener for scroll-to-target
68435
- this.scrollToTargetHandler = (event) => {
68436
- const customEvent = event;
68437
- const targetId = customEvent.detail;
68438
- if (targetId) {
68439
- // Find the element with matching data-id
68440
- const targetElement = document.querySelector(`[data-id="${targetId}"]`);
68441
- if (targetElement) {
68442
- // Scroll to the element with offset for header
68443
- const yOffset = -120; // Account for sticky header
68444
- const y = targetElement.getBoundingClientRect().top + window.pageYOffset + yOffset;
68445
- window.scrollTo({ top: y, behavior: 'smooth' });
68446
- // Click to expand if collapsed
68447
- setTimeout(() => {
68448
- targetElement.click();
68449
- }, 400);
68450
- // Add pulse animation to border
68451
- targetElement.classList.add('animate-pulse-border');
68452
- setTimeout(() => {
68453
- targetElement.classList.remove('animate-pulse-border');
68454
- }, 2000);
68455
- }
68456
- }
68457
- };
68458
- window.addEventListener('scroll-to-target', this.scrollToTargetHandler);
68459
- }
68460
- ngOnDestroy() {
68461
- this.subsectionObserver?.disconnect();
68462
- if (this.sectionUpdateTimeout) {
68463
- clearTimeout(this.sectionUpdateTimeout);
68464
- }
68465
- if (this.subsectionUpdateTimeout) {
68466
- clearTimeout(this.subsectionUpdateTimeout);
68467
- }
68468
- if (this.scrollToTargetHandler) {
68469
- window.removeEventListener('scroll-to-target', this.scrollToTargetHandler);
68470
- }
68471
- if (this.scrollDirectionHandler) {
68472
- window.removeEventListener('scroll', this.scrollDirectionHandler);
68473
- }
68474
- }
68475
- getContainerClasses() {
68476
- const positioning = this.embedded() ? '' : 'relative';
68477
- return `${positioning} min-h-screen`.trim();
68478
- }
68479
- getBackgroundClasses() {
68480
- const positioning = this.embedded() ? 'absolute' : 'fixed';
68481
- return `${positioning} inset-0 overflow-hidden pointer-events-none`;
68482
- }
68483
- getMeshGradientClasses() {
68484
- const isDark = this.viewMode() === ViewModeEnum.DARK;
68485
- if (isDark) {
68486
- return 'absolute inset-0 opacity-30 bg-gradient-to-br from-blue-900/20 via-purple-900/20 to-slate-900';
68487
- }
68488
- return 'absolute inset-0 opacity-30 bg-gradient-to-br from-blue-100/50 via-purple-100/50 to-slate-50';
68489
- }
68490
- getTopoPatternClasses() {
68491
- const isDark = this.viewMode() === ViewModeEnum.DARK;
68492
- return isDark ? 'absolute inset-0 opacity-5' : 'absolute inset-0 opacity-5 mix-blend-overlay';
68493
- }
68494
- getOrbClasses(index) {
68495
- const isDark = this.viewMode() === ViewModeEnum.DARK;
68496
- if (!isDark)
68497
- return 'hidden';
68498
- const positions = [
68499
- 'absolute top-0 left-1/4 w-96 h-96 bg-blue-500/10 rounded-full blur-3xl',
68500
- 'absolute top-1/3 right-1/4 w-[32rem] h-[32rem] bg-purple-500/10 rounded-full blur-3xl',
68501
- 'absolute bottom-0 left-1/3 w-[28rem] h-[28rem] bg-blue-400/10 rounded-full blur-3xl'
68502
- ];
68503
- return positions[index - 1] || '';
68504
- }
68505
- getHeaderClasses() {
68506
- const isDark = this.viewMode() === ViewModeEnum.DARK;
68507
- return isDark ? 'relative backdrop-blur-sm bg-slate-900/50' : 'relative backdrop-blur-sm bg-white/50';
68508
- }
68509
- getMainTitleClasses() {
68510
- const isDark = this.viewMode() === ViewModeEnum.DARK;
68511
- if (isDark) {
68512
- return 'text-4xl sm:text-5xl font-bold bg-gradient-to-r from-blue-400 to-purple-400 bg-clip-text text-transparent';
68513
- }
68514
- return 'text-4xl sm:text-5xl font-bold bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent';
68515
- }
68516
- getSubtitleClasses() {
68517
- const isDark = this.viewMode() === ViewModeEnum.DARK;
68518
- return isDark ? 'text-lg mt-2 text-slate-400' : 'text-lg mt-2 text-slate-600';
68519
- }
68520
- getLoadingOverlayClasses() {
68521
- const isDark = this.viewMode() === ViewModeEnum.DARK;
68522
- if (isDark) {
68523
- return 'fixed inset-0 z-50 flex items-center justify-center bg-slate-900/80 backdrop-blur-sm';
68524
- }
68525
- return 'fixed inset-0 z-50 flex items-center justify-center bg-white/80 backdrop-blur-sm';
68526
- }
68527
- getSpinnerClasses() {
68528
- const isDark = this.viewMode() === ViewModeEnum.DARK;
68529
- if (isDark) {
68530
- return 'w-16 h-16 border-4 rounded-full animate-spin border-slate-700 border-t-blue-400';
68531
- }
68532
- return 'w-16 h-16 border-4 rounded-full animate-spin border-slate-200 border-t-blue-600';
68533
- }
68534
- trackBySectionId(index, section) {
68535
- return section.id || index;
68536
- }
68537
- static { this.ɵfac = function SymphiqBusinessAnalysisDashboardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SymphiqBusinessAnalysisDashboardComponent)(); }; }
68538
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SymphiqBusinessAnalysisDashboardComponent, selectors: [["symphiq-business-analysis-dashboard"]], hostBindings: function SymphiqBusinessAnalysisDashboardComponent_HostBindings(rf, ctx) { if (rf & 1) {
68539
- i0.ɵɵlistener("scroll", function SymphiqBusinessAnalysisDashboardComponent_scroll_HostBindingHandler($event) { return ctx.onScroll($event); }, i0.ɵɵresolveWindow)("keydown", function SymphiqBusinessAnalysisDashboardComponent_keydown_HostBindingHandler($event) { return ctx.handleKeyDown($event); }, i0.ɵɵresolveDocument);
68540
- } }, inputs: { embedded: [1, "embedded"], profile: [1, "profile"], parentHeaderOffset: [1, "parentHeaderOffset"], requestedByUser: [1, "requestedByUser"], viewMode: [1, "viewMode"], scrollEvent: [1, "scrollEvent"], scrollElement: [1, "scrollElement"], isLoading: [1, "isLoading"], isOnboarded: [1, "isOnboarded"], forDemo: [1, "forDemo"], maxAccessibleStepId: [1, "maxAccessibleStepId"], itemStatus: [1, "itemStatus"], isMarkingAsReviewed: [1, "isMarkingAsReviewed"] }, outputs: { stepClick: "stepClick", nextStepClick: "nextStepClick", markAsReviewedClick: "markAsReviewedClick" }, decls: 36, vars: 64, consts: [[3, "ngClass"], [1, "h-full", "transition-all", "duration-200", "ease-out", 3, "ngClass"], [1, "animated-bubbles", 2, "position", "fixed", "top", "0", "left", "0", "right", "0", "bottom", "0", "width", "100vw", "height", "100vh", "z-index", "1", "pointer-events", "none"], [1, "relative", "z-[51]"], [1, "sticky", "top-0", "z-50", 3, "ngClass"], [1, "transition-all", "duration-300", "ease-in-out", "overflow-hidden"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-8"], [1, "flex", "items-center", "justify-between"], [1, "flex", "items-center", "gap-2"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-3"], [1, "flex-1", "min-w-0", "mr-4"], [1, "flex", "items-center", "gap-4"], [1, "flex", "items-center", "gap-2", "text-sm", "flex-shrink-0"], [1, "relative"], [1, "flex", "items-center", "justify-center", "min-h-[60vh]"], [3, "sections", "viewMode", "embedded", "scrollElement"], [3, "viewMode", "embedded"], [3, "viewInContextRequested", "isLightMode"], [3, "searchChange", "resultSelected", "close", "isLightMode", "isOpen", "searchQuery", "results", "hasResults", "selectedIndex", "placeholder"], [3, "close", "modeSelected", "isOpen", "currentMode", "viewMode", "isLoading"], [3, "markAsReviewedClick", "viewMode", "reviewStatus", "selfContentStatus", "isMarkingAsReviewed"], [3, "searchClick", "isLightMode"], ["type", "button", 1, "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", 3, "click", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M15 12a3 3 0 11-6 0 3 3 0 016 0z"], ["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"], [1, "transition-opacity", "duration-300", 3, "ngClass"], [3, "searchClick", "isLightMode", "minimized"], ["type", "button", 1, "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", 3, "click", "ngClass"], ["size", "large", 3, "viewMode"], [3, "viewMode", "currentStepId", "showNextStepAction", "forDemo", "maxAccessibleStepId"], [3, "viewMode", "itemStatus", "currentStatus", "confettiIntensity", "title", "subtitle"], [3, "stepClick", "nextStepClick", "viewMode", "currentStepId", "showNextStepAction", "forDemo", "maxAccessibleStepId"], [1, "mb-8"], [3, "viewMode", "businessName", "isOnboarded"], [3, "viewMoreClick", "recommendations", "viewMode"], [3, "sections", "viewMode"], [3, "section", "viewMode", "forceExpanded"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8"], [3, "viewMode", "subsections"]], template: function SymphiqBusinessAnalysisDashboardComponent_Template(rf, ctx) { if (rf & 1) {
68541
- i0.ɵɵelementStart(0, "div", 0)(1, "div");
68542
- i0.ɵɵelement(2, "div", 1);
68543
- i0.ɵɵelementEnd();
68544
- i0.ɵɵelement(3, "div", 2);
68545
- i0.ɵɵelementStart(4, "div", 3)(5, "header", 4)(6, "div", 5)(7, "div", 6)(8, "div", 7)(9, "div")(10, "h1", 0);
68546
- i0.ɵɵtext(11);
68547
- i0.ɵɵelementEnd();
68548
- i0.ɵɵelementStart(12, "p", 0);
68549
- i0.ɵɵtext(13, " Business Profile & Analysis ");
68550
- i0.ɵɵelementEnd()();
68551
- i0.ɵɵconditionalCreate(14, SymphiqBusinessAnalysisDashboardComponent_Conditional_14_Template, 8, 3, "div", 8);
68552
- i0.ɵɵelementEnd()()();
68553
- i0.ɵɵelementStart(15, "div", 5)(16, "div", 9)(17, "div", 7)(18, "div", 10)(19, "h1", 0);
68554
- i0.ɵɵtext(20);
68555
- i0.ɵɵelementEnd()();
68556
- i0.ɵɵelementStart(21, "div", 11);
68557
- i0.ɵɵconditionalCreate(22, SymphiqBusinessAnalysisDashboardComponent_Conditional_22_Template, 4, 7, "div", 12);
68558
- i0.ɵɵconditionalCreate(23, SymphiqBusinessAnalysisDashboardComponent_Conditional_23_Template, 5, 3);
68559
- i0.ɵɵelementEnd()()()()();
68560
- i0.ɵɵelementStart(24, "main", 13);
68561
- i0.ɵɵconditionalCreate(25, SymphiqBusinessAnalysisDashboardComponent_Conditional_25_Template, 2, 1, "div", 14)(26, SymphiqBusinessAnalysisDashboardComponent_Conditional_26_Template, 2, 7)(27, SymphiqBusinessAnalysisDashboardComponent_Conditional_27_Template, 2, 1);
68562
- i0.ɵɵelementEnd();
68563
- i0.ɵɵconditionalCreate(28, SymphiqBusinessAnalysisDashboardComponent_Conditional_28_Template, 1, 4, "symphiq-section-navigation", 15);
68564
- i0.ɵɵconditionalCreate(29, SymphiqBusinessAnalysisDashboardComponent_Conditional_29_Template, 1, 4, "symphiq-floating-toc", 15);
68565
- i0.ɵɵelement(30, "symphiq-floating-back-button", 16);
68566
- i0.ɵɵelementEnd();
68567
- i0.ɵɵelement(31, "symphiq-tooltip-container");
68568
- i0.ɵɵelementStart(32, "symphiq-business-analysis-modal", 17);
68569
- i0.ɵɵlistener("viewInContextRequested", function SymphiqBusinessAnalysisDashboardComponent_Template_symphiq_business_analysis_modal_viewInContextRequested_32_listener($event) { return ctx.handleViewInContext($event); });
68570
- i0.ɵɵelementEnd();
68571
- i0.ɵɵelementStart(33, "symphiq-search-modal", 18);
68572
- i0.ɵɵlistener("searchChange", function SymphiqBusinessAnalysisDashboardComponent_Template_symphiq_search_modal_searchChange_33_listener($event) { return ctx.onSearchChange($event); })("resultSelected", function SymphiqBusinessAnalysisDashboardComponent_Template_symphiq_search_modal_resultSelected_33_listener($event) { return ctx.onSearchResultSelected($event); })("close", function SymphiqBusinessAnalysisDashboardComponent_Template_symphiq_search_modal_close_33_listener() { return ctx.closeSearch(); });
68573
- i0.ɵɵelementEnd();
68574
- i0.ɵɵelementStart(34, "symphiq-view-mode-switcher-modal", 19);
68575
- i0.ɵɵlistener("close", function SymphiqBusinessAnalysisDashboardComponent_Template_symphiq_view_mode_switcher_modal_close_34_listener() { return ctx.closeViewModeSwitcher(); })("modeSelected", function SymphiqBusinessAnalysisDashboardComponent_Template_symphiq_view_mode_switcher_modal_modeSelected_34_listener($event) { return ctx.handleDisplayModeChange($event); });
68576
- i0.ɵɵelementEnd();
68577
- i0.ɵɵelementStart(35, "symphiq-mark-as-reviewed-footer", 20);
68578
- i0.ɵɵlistener("markAsReviewedClick", function SymphiqBusinessAnalysisDashboardComponent_Template_symphiq_mark_as_reviewed_footer_markAsReviewedClick_35_listener() { return ctx.handleMarkAsReviewedClick(); });
68579
- i0.ɵɵelementEnd()();
68580
- } if (rf & 2) {
68581
- let tmp_13_0;
68582
- let tmp_15_0;
68583
- let tmp_23_0;
68584
- let tmp_25_0;
68585
- let tmp_45_0;
68586
- let tmp_46_0;
68587
- i0.ɵɵproperty("ngClass", ctx.getContainerClasses());
68588
- i0.ɵɵadvance();
68589
- i0.ɵɵclassMap(ctx.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");
68590
- i0.ɵɵadvance();
68591
- i0.ɵɵstyleProp("width", ctx.scrollProgress(), "%");
68592
- i0.ɵɵproperty("ngClass", ctx.isLightMode() ? "bg-gradient-to-r from-blue-500 to-purple-500" : "bg-gradient-to-r from-blue-400 to-purple-400");
68593
- i0.ɵɵadvance();
68594
- i0.ɵɵclassProp("light-mode", ctx.isLightMode());
68595
- i0.ɵɵadvance(2);
68596
- i0.ɵɵproperty("ngClass", ctx.getHeaderClasses());
68597
- i0.ɵɵadvance();
68598
- i0.ɵɵclassProp("max-h-0", ctx.headerScrollService.isScrolled())("opacity-0", ctx.headerScrollService.isScrolled())("max-h-96", !ctx.headerScrollService.isScrolled())("opacity-100", !ctx.headerScrollService.isScrolled());
68599
- i0.ɵɵadvance();
68600
- i0.ɵɵclassProp("pointer-events-none", ctx.headerScrollService.isScrolled())("pointer-events-auto", !ctx.headerScrollService.isScrolled());
68601
- i0.ɵɵadvance(3);
68602
- i0.ɵɵproperty("ngClass", ctx.getMainTitleClasses());
68603
- i0.ɵɵadvance();
68604
- i0.ɵɵtextInterpolate1(" ", ((tmp_13_0 = ctx.currentProfile()) == null ? null : tmp_13_0.profileStructured == null ? null : tmp_13_0.profileStructured.businessName) || "Business Analysis", " ");
68605
- i0.ɵɵadvance();
68606
- i0.ɵɵproperty("ngClass", ctx.getSubtitleClasses());
68607
- i0.ɵɵadvance(2);
68608
- i0.ɵɵconditional(((tmp_15_0 = ctx.profile()) == null ? null : tmp_15_0.selfContentStatus) === ctx.AiDynamicContentStatusEnum.GENERATED ? 14 : -1);
68609
- i0.ɵɵadvance();
68610
- i0.ɵɵclassProp("max-h-0", !ctx.headerScrollService.isScrolled())("opacity-0", !ctx.headerScrollService.isScrolled())("max-h-20", ctx.headerScrollService.isScrolled())("opacity-100", ctx.headerScrollService.isScrolled());
68611
- i0.ɵɵadvance();
68612
- i0.ɵɵclassProp("pointer-events-none", !ctx.headerScrollService.isScrolled())("pointer-events-auto", ctx.headerScrollService.isScrolled());
68613
- i0.ɵɵadvance(3);
68614
- i0.ɵɵproperty("ngClass", ctx.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");
68615
- i0.ɵɵadvance();
68616
- i0.ɵɵtextInterpolate1(" ", ((tmp_23_0 = ctx.currentProfile()) == null ? null : tmp_23_0.profileStructured == null ? null : tmp_23_0.profileStructured.businessName) || "Business Analysis", " ");
68617
- i0.ɵɵadvance(2);
68618
- i0.ɵɵconditional(!ctx.isSimplifiedView() ? 22 : -1);
68619
- i0.ɵɵadvance();
68620
- i0.ɵɵconditional(((tmp_25_0 = ctx.profile()) == null ? null : tmp_25_0.selfContentStatus) === ctx.AiDynamicContentStatusEnum.GENERATED ? 23 : -1);
68621
- i0.ɵɵadvance();
68622
- i0.ɵɵclassProp("pb-32", ctx.shouldShowReviewFooter());
68623
- i0.ɵɵadvance();
68624
- i0.ɵɵconditional(ctx.isLoading() ? 25 : ctx.isContentGenerating() ? 26 : 27);
68625
- i0.ɵɵadvance(3);
68626
- i0.ɵɵconditional(!ctx.isSimplifiedView() ? 28 : -1);
68627
- i0.ɵɵadvance();
68628
- i0.ɵɵconditional(!ctx.isSimplifiedView() ? 29 : -1);
68629
- i0.ɵɵadvance();
68630
- i0.ɵɵproperty("viewMode", ctx.viewMode())("embedded", ctx.embedded());
68631
- i0.ɵɵadvance(2);
68632
- i0.ɵɵproperty("isLightMode", ctx.isLightMode());
68633
- i0.ɵɵadvance();
68634
- i0.ɵɵproperty("isLightMode", ctx.isLightMode())("isOpen", ctx.searchService.isSearchOpen())("searchQuery", ctx.searchService.getSearchQuery())("results", ctx.searchService.searchResults())("hasResults", ctx.searchService.hasResults())("selectedIndex", ctx.selectedSearchIndex())("placeholder", "Search sections, items, and analysis...");
68635
- i0.ɵɵadvance();
68636
- i0.ɵɵproperty("isOpen", ctx.isViewModeSwitcherOpen())("currentMode", ctx.displayMode())("viewMode", ctx.viewMode())("isLoading", ctx.isViewModeSwitching());
68637
- i0.ɵɵadvance();
68638
- i0.ɵɵproperty("viewMode", ctx.viewMode())("reviewStatus", (tmp_45_0 = ctx.profile()) == null ? null : tmp_45_0.reviewStatus)("selfContentStatus", (tmp_46_0 = ctx.profile()) == null ? null : tmp_46_0.selfContentStatus)("isMarkingAsReviewed", ctx.isMarkingAsReviewed());
68639
- } }, dependencies: [CommonModule, i1$1.NgClass, ProfileSectionComponent, SectionNavigationComponent, FloatingTocComponent, FloatingBackButtonComponent, TooltipContainerComponent, SectionDividerComponent, BusinessAnalysisModalComponent, SearchButtonComponent, SearchModalComponent, ViewModeSwitcherModalComponent, JourneyProgressIndicatorComponent, WelcomeBannerComponent, RecommendationsTiledGridComponent, CollapsibleSectionGroupComponent, ContentGenerationProgressWithConfettiComponent, IndeterminateSpinnerComponent, MarkAsReviewedFooterComponent], styles: ["[_nghost-%COMP%]{display:block}@keyframes _ngcontent-%COMP%_spin{to{transform:rotate(360deg)}}@keyframes _ngcontent-%COMP%_pulse-highlight{0%,to{transform:scale(1);box-shadow:0 0 #3b82f6b3}50%{transform:scale(1.02);box-shadow:0 0 20px 8px #3b82f64d}}[_nghost-%COMP%] .search-highlight-pulse{animation:_ngcontent-%COMP%_pulse-highlight 2s ease-in-out;border-color:#3b82f6!important}"], changeDetection: 0 }); }
68640
- }
68641
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SymphiqBusinessAnalysisDashboardComponent, [{
68642
- type: Component,
68643
- args: [{ selector: 'symphiq-business-analysis-dashboard', standalone: true, imports: [CommonModule, ProfileSectionComponent, SectionNavigationComponent, FloatingTocComponent, FloatingBackButtonComponent, TooltipContainerComponent, SectionDividerComponent, BusinessAnalysisModalComponent, SearchButtonComponent, SearchModalComponent, ViewModeSwitcherModalComponent, JourneyProgressIndicatorComponent, WelcomeBannerComponent, RecommendationsTiledGridComponent, CollapsibleSectionGroupComponent, ContentGenerationProgressWithConfettiComponent, IndeterminateSpinnerComponent, MarkAsReviewedFooterComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: `
68644
- <div [ngClass]="getContainerClasses()">
68645
- <!-- Scroll Progress Bar (fixed at top) -->
68646
- <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'">
68647
- <div
68648
- [style.width.%]="scrollProgress()"
68649
- [ngClass]="isLightMode() ? 'bg-gradient-to-r from-blue-500 to-purple-500' : 'bg-gradient-to-r from-blue-400 to-purple-400'"
68650
- class="h-full transition-all duration-200 ease-out">
68651
- </div>
68652
- </div>
68653
-
68654
- <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>
68655
-
68656
- <div class="relative z-[51]">
68657
- <header [ngClass]="getHeaderClasses()" class="sticky top-0 z-50">
68658
- <!-- Expanded Header (default state) -->
68659
- <div
68660
- class="transition-all duration-300 ease-in-out overflow-hidden"
68661
- [class.max-h-0]="headerScrollService.isScrolled()"
68662
- [class.opacity-0]="headerScrollService.isScrolled()"
68663
- [class.max-h-96]="!headerScrollService.isScrolled()"
68664
- [class.opacity-100]="!headerScrollService.isScrolled()">
68665
- <div
68666
- class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8"
68667
- [class.pointer-events-none]="headerScrollService.isScrolled()"
68668
- [class.pointer-events-auto]="!headerScrollService.isScrolled()">
68669
- <div class="flex items-center justify-between">
68670
- <div>
68671
- <h1 [ngClass]="getMainTitleClasses()">
68672
- {{ currentProfile()?.profileStructured?.businessName || 'Business Analysis' }}
68673
- </h1>
68674
- <p [ngClass]="getSubtitleClasses()">
68675
- Business Profile & Analysis
68676
- </p>
68677
- </div>
68678
- @if (profile()?.selfContentStatus === AiDynamicContentStatusEnum.GENERATED) {
68679
- <div class="flex items-center gap-2">
68680
- <symphiq-search-button
68681
- [isLightMode]="isLightMode()"
68682
- (searchClick)="openSearch()"
68683
- />
68684
- <button
68685
- type="button"
68686
- (click)="openViewModeSwitcher()"
68687
- [ngClass]="getViewModeButtonClasses()"
68688
- 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">
68689
- <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
68690
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
68691
- <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>
68692
- </svg>
68693
- <span>{{ displayModeLabel() }}</span>
68694
- </button>
68695
- </div>
68696
- }
68697
- </div>
68698
- </div>
68699
- </div>
68700
-
68701
- <!-- Condensed Header (scrolled state) -->
68702
- <div
68703
- class="transition-all duration-300 ease-in-out overflow-hidden"
68704
- [class.max-h-0]="!headerScrollService.isScrolled()"
68705
- [class.opacity-0]="!headerScrollService.isScrolled()"
68706
- [class.max-h-20]="headerScrollService.isScrolled()"
68707
- [class.opacity-100]="headerScrollService.isScrolled()">
68708
- <div
68709
- class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-3"
68710
- [class.pointer-events-none]="!headerScrollService.isScrolled()"
68711
- [class.pointer-events-auto]="headerScrollService.isScrolled()">
68712
- <div class="flex items-center justify-between">
68713
- <div class="flex-1 min-w-0 mr-4">
68714
- <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'">
68715
- {{ currentProfile()?.profileStructured?.businessName || 'Business Analysis' }}
68716
- </h1>
68717
- </div>
68718
- <div class="flex items-center gap-4">
68719
- @if (!isSimplifiedView()) {
68720
- <div class="flex items-center gap-2 text-sm flex-shrink-0">
68721
- <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()">
68722
- {{ currentSectionTitle() }}
68723
- </span>
68724
- @if (currentSubsectionTitle()) {
68725
- <span [ngClass]="isLightMode() ? 'text-slate-400' : 'text-slate-500'" class="transition-opacity duration-300" [class.opacity-0]="subsectionTitleFading()" [class.opacity-100]="!subsectionTitleFading()">›</span>
68726
- <span [ngClass]="isLightMode() ? 'text-slate-500' : 'text-slate-500'" class="transition-opacity duration-300" [class.opacity-0]="subsectionTitleFading()" [class.opacity-100]="!subsectionTitleFading()">
68727
- {{ currentSubsectionTitle() }}
68728
- </span>
68729
- }
68730
- </div>
68731
- }
68732
- @if (profile()?.selfContentStatus === AiDynamicContentStatusEnum.GENERATED) {
68733
- <symphiq-search-button
68734
- [isLightMode]="isLightMode()"
68735
- [minimized]="true"
68736
- (searchClick)="openSearch()"
68737
- />
68738
- <button
68739
- type="button"
68740
- (click)="openViewModeSwitcher()"
68741
- [ngClass]="getViewModeButtonClasses()"
68742
- 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">
68743
- <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
68744
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
68745
- <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>
68746
- </svg>
68747
- </button>
68748
- }
68749
- </div>
68750
- </div>
68751
- </div>
68752
- </div>
68753
- </header>
68754
-
68755
- <main class="relative" [class.pb-32]="shouldShowReviewFooter()">
68756
- @if (isLoading()) {
68757
- <!-- Pure Loading State -->
68758
- <div class="flex items-center justify-center min-h-[60vh]">
68759
- <symphiq-indeterminate-spinner
68760
- [viewMode]="viewMode()"
68761
- size="large"
68762
- />
68763
- </div>
68764
- } @else if (isContentGenerating()) {
68765
- <!-- Journey Progress Banner (always show when not onboarded) -->
68766
- @if (!isOnboarded()) {
68767
- <symphiq-journey-progress-indicator
68768
- [viewMode]="viewMode()"
68769
- [currentStepId]="JourneyStepIdEnum.BUSINESS_ANALYSIS"
68770
- [showNextStepAction]="false"
68771
- [forDemo]="forDemo()"
68772
- [maxAccessibleStepId]="maxAccessibleStepId()"
68773
- (stepClick)="stepClick.emit($event)"
68774
- (nextStepClick)="nextStepClick.emit()"
68775
- />
68776
- }
68777
-
68778
- <!-- Content Generation Progress Component -->
68779
- <symphiq-content-generation-progress-with-confetti
68780
- [viewMode]="viewMode()"
68781
- [itemStatus]="itemStatus()"
68782
- [currentStatus]="profile()?.selfContentStatus"
68783
- [confettiIntensity]="'celebration'"
68784
- [title]="'We are generating a new Business Analysis for ' + (currentProfile()?.profileStructured?.businessName || 'your business') + '.'"
68785
- [subtitle]="'It will appear here when ready. You can check back later as this will take a few minutes to complete.'"
68786
- />
68787
- } @else {
68788
- @if (isSimplifiedView()) {
68789
- <!-- Journey Progress Banner - Full Width Sticky (only show when not onboarded) -->
68790
- @if (!isOnboarded()) {
68791
- <symphiq-journey-progress-indicator
68792
- [viewMode]="viewMode()"
68793
- [currentStepId]="JourneyStepIdEnum.BUSINESS_ANALYSIS"
68794
- [showNextStepAction]="showNextStepAction()"
68795
- [forDemo]="forDemo()"
68796
- [maxAccessibleStepId]="maxAccessibleStepId()"
68797
- (stepClick)="stepClick.emit($event)"
68798
- (nextStepClick)="nextStepClick.emit()"
68799
- />
68800
- }
68801
-
68802
- <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
68803
- <div class="mb-8">
68804
- <symphiq-welcome-banner
68805
- [viewMode]="viewMode()"
68806
- [businessName]="currentProfile()?.profileStructured?.businessName || 'your business'"
68807
- [isOnboarded]="isOnboarded()"
68808
- />
68809
- </div>
68810
-
68811
- <div class="mb-8">
68812
- <symphiq-recommendations-tiled-grid
68813
- [recommendations]="recommendationItems()"
68814
- [viewMode]="viewMode()"
68815
- (viewMoreClick)="openRecommendationDetailsModal($event)"
68816
- />
68817
- </div>
68818
-
68819
- <div>
68820
- <symphiq-collapsible-section-group
68821
- [sections]="nonRecommendationSections()"
68822
- [viewMode]="viewMode()"
68823
- />
68824
- </div>
68825
- </div>
68826
- } @else {
68827
- @for (section of sections(); track trackBySectionId($index, section); let idx = $index; let last = $last) {
68828
- <symphiq-profile-section
68829
- [section]="section"
68830
- [viewMode]="viewMode()"
68831
- [forceExpanded]="!isCompactView()"
68832
- />
68833
- @if (!last) {
68834
- <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
68835
- <symphiq-section-divider
68836
- [viewMode]="viewMode()"
68837
- [subsections]="sections()[idx + 1].subsections || []" />
68838
- </div>
68839
- }
68840
- }
68841
- }
68842
- }
68843
- </main>
68844
-
68845
- @if (!isSimplifiedView()) {
68846
- <symphiq-section-navigation
68847
- [sections]="sections()"
68848
- [viewMode]="viewMode()"
68849
- [embedded]="embedded()"
68850
- [scrollElement]="scrollElement() ?? undefined"
68851
- />
68852
- }
68853
-
68854
- @if (!isSimplifiedView()) {
68855
- <symphiq-floating-toc
68856
- [sections]="sections()"
68857
- [viewMode]="viewMode()"
68858
- [embedded]="embedded()"
68859
- [scrollElement]="scrollElement() ?? undefined"
68860
- />
68861
- }
68862
-
68863
- <symphiq-floating-back-button
68864
- [viewMode]="viewMode()"
68865
- [embedded]="embedded()"
68866
- />
68867
- </div>
68868
-
68869
- <symphiq-tooltip-container />
68870
- <symphiq-business-analysis-modal
68871
- [isLightMode]="isLightMode()"
68872
- (viewInContextRequested)="handleViewInContext($event)" />
68873
-
68874
- <symphiq-search-modal
68875
- [isLightMode]="isLightMode()"
68876
- [isOpen]="searchService.isSearchOpen()"
68877
- [searchQuery]="searchService.getSearchQuery()"
68878
- [results]="searchService.searchResults()"
68879
- [hasResults]="searchService.hasResults()"
68880
- [selectedIndex]="selectedSearchIndex()"
68881
- [placeholder]="'Search sections, items, and analysis...'"
68882
- (searchChange)="onSearchChange($event)"
68883
- (resultSelected)="onSearchResultSelected($event)"
68884
- (close)="closeSearch()"
68885
- />
68886
-
68887
- <symphiq-view-mode-switcher-modal
68888
- [isOpen]="isViewModeSwitcherOpen()"
68889
- [currentMode]="displayMode()"
68890
- [viewMode]="viewMode()"
68891
- [isLoading]="isViewModeSwitching()"
68892
- (close)="closeViewModeSwitcher()"
68893
- (modeSelected)="handleDisplayModeChange($event)"
68894
- />
68895
-
68896
- <!-- Mark as Reviewed Sticky Footer -->
68897
- <symphiq-mark-as-reviewed-footer
68898
- [viewMode]="viewMode()"
68899
- [reviewStatus]="profile()?.reviewStatus"
68900
- [selfContentStatus]="profile()?.selfContentStatus"
68901
- [isMarkingAsReviewed]="isMarkingAsReviewed()"
68902
- (markAsReviewedClick)="handleMarkAsReviewedClick()"
68903
- />
68904
- </div>
68905
- `, 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"] }]
68906
- }], () => [], { 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 }] }], itemStatus: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemStatus", required: false }] }], isMarkingAsReviewed: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMarkingAsReviewed", required: false }] }], stepClick: [{ type: i0.Output, args: ["stepClick"] }], nextStepClick: [{ type: i0.Output, args: ["nextStepClick"] }], markAsReviewedClick: [{ type: i0.Output, args: ["markAsReviewedClick"] }], onScroll: [{
68907
- type: HostListener,
68908
- args: ['window:scroll', ['$event']]
68909
- }], handleKeyDown: [{
68910
- type: HostListener,
68911
- args: ['document:keydown', ['$event']]
68912
- }] }); })();
68913
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqBusinessAnalysisDashboardComponent, { className: "SymphiqBusinessAnalysisDashboardComponent", filePath: "lib/components/business-analysis-dashboard/symphiq-business-analysis-dashboard.component.ts", lineNumber: 351 }); })();
68914
-
68915
- function DashboardHeaderComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
68916
- i0.ɵɵelement(0, "div", 6);
68917
- } }
68918
- function DashboardHeaderComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
68919
- const _r1 = i0.ɵɵgetCurrentView();
68920
- i0.ɵɵelementStart(0, "div", 7)(1, "symphiq-search-button", 15);
68921
- i0.ɵɵlistener("searchClick", function DashboardHeaderComponent_Conditional_11_Template_symphiq_search_button_searchClick_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSearchClick()); });
68922
- i0.ɵɵelementEnd();
68923
- i0.ɵɵelementStart(2, "button", 16);
68924
- i0.ɵɵlistener("click", function DashboardHeaderComponent_Conditional_11_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onViewModeClick()); });
68925
- i0.ɵɵnamespaceSVG();
68926
- i0.ɵɵelementStart(3, "svg", 17);
68927
- i0.ɵɵelement(4, "path", 18)(5, "path", 19);
68928
- i0.ɵɵelementEnd();
68929
- i0.ɵɵnamespaceHTML();
68930
- i0.ɵɵelementStart(6, "span");
68931
- i0.ɵɵtext(7);
68932
- i0.ɵɵelementEnd()()();
68933
- } if (rf & 2) {
68934
- const ctx_r1 = i0.ɵɵnextContext();
68935
- i0.ɵɵadvance();
68936
- i0.ɵɵproperty("isLightMode", ctx_r1.isLightMode());
68937
- i0.ɵɵadvance();
68938
- i0.ɵɵproperty("ngClass", ctx_r1.getViewModeButtonClasses());
68939
- i0.ɵɵadvance(5);
68940
- i0.ɵɵtextInterpolate(ctx_r1.viewModeLabel());
68941
- } }
68942
- function DashboardHeaderComponent_Conditional_12_Conditional_1_Template(rf, ctx) { if (rf & 1) {
68943
- i0.ɵɵelementStart(0, "div", 20)(1, "div", 21);
68944
- i0.ɵɵtext(2, "Generated At");
68945
- i0.ɵɵelementEnd();
68946
- i0.ɵɵelementStart(3, "div", 22);
68947
- i0.ɵɵtext(4);
68948
- i0.ɵɵelementEnd()();
68949
- } if (rf & 2) {
68950
- const ctx_r1 = i0.ɵɵnextContext(2);
68951
- i0.ɵɵadvance();
68952
- i0.ɵɵclassMap(ctx_r1.metaLabelClass());
68953
- i0.ɵɵadvance(2);
68954
- i0.ɵɵclassMap(ctx_r1.headerTitleClass());
68955
- i0.ɵɵadvance();
68956
- i0.ɵɵtextInterpolate(ctx_r1.formattedGeneratedDate());
68957
- } }
68958
- function DashboardHeaderComponent_Conditional_12_Conditional_2_Template(rf, ctx) { if (rf & 1) {
68959
- i0.ɵɵelementStart(0, "div", 20)(1, "div", 21);
68960
- i0.ɵɵtext(2, "Requested by");
68961
- i0.ɵɵelementEnd();
68962
- i0.ɵɵelementStart(3, "div", 22);
68963
- i0.ɵɵtext(4);
68964
- i0.ɵɵelementEnd()();
68965
- } if (rf & 2) {
68966
- let tmp_4_0;
68967
- const ctx_r1 = i0.ɵɵnextContext(2);
68968
- i0.ɵɵadvance();
68969
- i0.ɵɵclassMap(ctx_r1.metaLabelClass());
68970
- i0.ɵɵadvance(2);
68971
- i0.ɵɵclassMap(ctx_r1.headerTitleClass());
68972
- i0.ɵɵadvance();
68973
- i0.ɵɵtextInterpolate2("", (tmp_4_0 = ctx_r1.requestedByUser()) == null ? null : tmp_4_0.firstName, " ", (tmp_4_0 = ctx_r1.requestedByUser()) == null ? null : tmp_4_0.lastName);
68974
- } }
68975
- function DashboardHeaderComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
68976
- i0.ɵɵelementStart(0, "div", 8);
68977
- i0.ɵɵconditionalCreate(1, DashboardHeaderComponent_Conditional_12_Conditional_1_Template, 5, 5, "div", 20);
68978
- i0.ɵɵconditionalCreate(2, DashboardHeaderComponent_Conditional_12_Conditional_2_Template, 5, 6, "div", 20);
68979
- i0.ɵɵelementEnd();
68980
- } if (rf & 2) {
68981
- const ctx_r1 = i0.ɵɵnextContext();
68982
- i0.ɵɵadvance();
68983
- i0.ɵɵconditional(ctx_r1.formattedGeneratedDate() ? 1 : -1);
68984
- i0.ɵɵadvance();
68985
- i0.ɵɵconditional(ctx_r1.requestedByUser() ? 2 : -1);
68986
- } }
68987
- function DashboardHeaderComponent_Conditional_20_Conditional_3_Template(rf, ctx) { if (rf & 1) {
68988
- i0.ɵɵelementStart(0, "span", 5);
68989
- i0.ɵɵtext(1, "\u203A");
68990
- i0.ɵɵelementEnd();
68991
- i0.ɵɵelementStart(2, "span", 5);
68992
- i0.ɵɵtext(3);
68993
- i0.ɵɵelementEnd();
68994
- } if (rf & 2) {
68995
- const ctx_r1 = i0.ɵɵnextContext(2);
68996
- i0.ɵɵproperty("ngClass", ctx_r1.isLightMode() ? "text-slate-400" : "text-slate-500");
68997
- i0.ɵɵadvance(2);
68998
- i0.ɵɵproperty("ngClass", ctx_r1.isLightMode() ? "text-slate-500" : "text-slate-500");
68999
- i0.ɵɵadvance();
69000
- i0.ɵɵtextInterpolate1(" ", ctx_r1.currentSubsection(), " ");
69001
- } }
69002
- function DashboardHeaderComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
69003
- i0.ɵɵelementStart(0, "div", 14)(1, "span", 5);
69004
- i0.ɵɵtext(2);
69005
- i0.ɵɵelementEnd();
69006
- i0.ɵɵconditionalCreate(3, DashboardHeaderComponent_Conditional_20_Conditional_3_Template, 4, 3);
69007
- i0.ɵɵelementEnd();
69008
- } if (rf & 2) {
69009
- const ctx_r1 = i0.ɵɵnextContext();
69010
- i0.ɵɵadvance();
69011
- i0.ɵɵproperty("ngClass", ctx_r1.isLightMode() ? "text-slate-600 font-medium" : "text-slate-400 font-medium");
69012
- i0.ɵɵadvance();
69013
- i0.ɵɵtextInterpolate1(" ", ctx_r1.currentSection(), " ");
69014
- i0.ɵɵadvance();
69015
- i0.ɵɵconditional(ctx_r1.currentSubsection() ? 3 : -1);
69016
- } }
69017
- function DashboardHeaderComponent_Conditional_21_Template(rf, ctx) { if (rf & 1) {
69018
- const _r3 = i0.ɵɵgetCurrentView();
69019
- i0.ɵɵelementStart(0, "symphiq-search-button", 23);
69020
- i0.ɵɵlistener("searchClick", function DashboardHeaderComponent_Conditional_21_Template_symphiq_search_button_searchClick_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSearchClick()); });
69021
- i0.ɵɵelementEnd();
69022
- i0.ɵɵelementStart(1, "button", 24);
69023
- i0.ɵɵlistener("click", function DashboardHeaderComponent_Conditional_21_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onViewModeClick()); });
69024
- i0.ɵɵnamespaceSVG();
69025
- i0.ɵɵelementStart(2, "svg", 17);
69026
- i0.ɵɵelement(3, "path", 18)(4, "path", 19);
69027
- i0.ɵɵelementEnd()();
69028
- } if (rf & 2) {
69029
- const ctx_r1 = i0.ɵɵnextContext();
69030
- i0.ɵɵproperty("isLightMode", ctx_r1.isLightMode())("minimized", true);
69031
- i0.ɵɵadvance();
69032
- i0.ɵɵproperty("ngClass", ctx_r1.getViewModeButtonClasses());
69033
- } }
69034
- class DashboardHeaderComponent {
69035
- constructor() {
69036
- this.requestedByUser = input(...(ngDevMode ? [undefined, { debugName: "requestedByUser" }] : []));
69037
- this.createdDate = input(...(ngDevMode ? [undefined, { debugName: "createdDate" }] : []));
69038
- this.title = input('', ...(ngDevMode ? [{ debugName: "title" }] : []));
69039
- this.subtitle = input('', ...(ngDevMode ? [{ debugName: "subtitle" }] : []));
69040
- this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
69041
- this.viewModeLabel = input('View Mode', ...(ngDevMode ? [{ debugName: "viewModeLabel" }] : []));
69042
- this.currentSection = input(...(ngDevMode ? [undefined, { debugName: "currentSection" }] : []));
69043
- this.currentSubsection = input(...(ngDevMode ? [undefined, { debugName: "currentSubsection" }] : []));
69044
- this.isLoading = input(...(ngDevMode ? [undefined, { debugName: "isLoading" }] : []));
69045
- this.showControls = input(true, ...(ngDevMode ? [{ debugName: "showControls" }] : []));
69046
- this.searchClick = output();
69047
- this.viewModeClick = output();
69048
- this.headerScrollService = inject(HeaderScrollService);
69049
- this.isLightMode = computed(() => this.viewMode() === ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "isLightMode" }] : []));
69050
- this.dateFormatCache = new StringMemoizeCache();
69051
- this.formattedGeneratedDate = computed(() => {
69052
- let formatted = '';
69053
- const createdDate = this.createdDate();
69054
- if (createdDate) {
69055
- formatted = this.formatDate(createdDate.toISOString());
68687
+ this.sectionUpdateTimeout = setTimeout(() => {
68688
+ // Double-check that we should still update (in case scroll changed rapidly)
68689
+ if (parentSectionTitle !== this.lastSectionTitle) {
68690
+ this.sectionTitleFading.set(true);
68691
+ setTimeout(() => {
68692
+ this.currentSectionTitle.set(parentSectionTitle);
68693
+ this.lastSectionTitle = parentSectionTitle;
68694
+ this.sectionTitleFading.set(false);
68695
+ }, 150);
68696
+ }
68697
+ }, 200); // Shorter debounce since we're now using proximity
68698
+ }
68699
+ if (subsectionChanged && this.lastSubsectionTitle !== '') {
68700
+ if (this.subsectionUpdateTimeout) {
68701
+ clearTimeout(this.subsectionUpdateTimeout);
68702
+ }
68703
+ this.subsectionUpdateTimeout = setTimeout(() => {
68704
+ // Double-check that we should still update
68705
+ if (subsectionTitle !== this.lastSubsectionTitle) {
68706
+ this.subsectionTitleFading.set(true);
68707
+ setTimeout(() => {
68708
+ this.currentSubsectionTitle.set(subsectionTitle);
68709
+ this.lastSubsectionTitle = subsectionTitle;
68710
+ this.subsectionTitleFading.set(false);
68711
+ }, 150);
68712
+ }
68713
+ }, 200); // Shorter debounce since we're now using proximity
68714
+ }
69056
68715
  }
69057
- return formatted;
69058
- }, ...(ngDevMode ? [{ debugName: "formattedGeneratedDate" }] : []));
69059
- this.headerTitleClass = computed(() => this.isLightMode() ? 'text-slate-900' : 'text-white', ...(ngDevMode ? [{ debugName: "headerTitleClass" }] : []));
69060
- this.metaLabelClass = computed(() => this.isLightMode() ? 'text-slate-600' : 'text-slate-500', ...(ngDevMode ? [{ debugName: "metaLabelClass" }] : []));
68716
+ }, {
68717
+ // Use more granular thresholds for better detection
68718
+ threshold: [0, 0.2, 0.4, 0.6, 0.8, 1],
68719
+ // Focus area starts right after the header
68720
+ rootMargin: '-100px 0px -50% 0px',
68721
+ });
68722
+ // Observe all subsections
68723
+ setTimeout(() => {
68724
+ const subsections = document.querySelectorAll('[data-subsection-id]');
68725
+ subsections.forEach((subsection) => this.subsectionObserver?.observe(subsection));
68726
+ }, 100);
68727
+ // Add event listener for scroll-to-target
68728
+ this.scrollToTargetHandler = (event) => {
68729
+ const customEvent = event;
68730
+ const targetId = customEvent.detail;
68731
+ if (targetId) {
68732
+ // Find the element with matching data-id
68733
+ const targetElement = document.querySelector(`[data-id="${targetId}"]`);
68734
+ if (targetElement) {
68735
+ // Scroll to the element with offset for header
68736
+ const yOffset = -120; // Account for sticky header
68737
+ const y = targetElement.getBoundingClientRect().top + window.pageYOffset + yOffset;
68738
+ window.scrollTo({ top: y, behavior: 'smooth' });
68739
+ // Click to expand if collapsed
68740
+ setTimeout(() => {
68741
+ targetElement.click();
68742
+ }, 400);
68743
+ // Add pulse animation to border
68744
+ targetElement.classList.add('animate-pulse-border');
68745
+ setTimeout(() => {
68746
+ targetElement.classList.remove('animate-pulse-border');
68747
+ }, 2000);
68748
+ }
68749
+ }
68750
+ };
68751
+ window.addEventListener('scroll-to-target', this.scrollToTargetHandler);
69061
68752
  }
69062
- onSearchClick() {
69063
- this.searchClick.emit();
68753
+ ngOnDestroy() {
68754
+ this.subsectionObserver?.disconnect();
68755
+ if (this.sectionUpdateTimeout) {
68756
+ clearTimeout(this.sectionUpdateTimeout);
68757
+ }
68758
+ if (this.subsectionUpdateTimeout) {
68759
+ clearTimeout(this.subsectionUpdateTimeout);
68760
+ }
68761
+ if (this.scrollToTargetHandler) {
68762
+ window.removeEventListener('scroll-to-target', this.scrollToTargetHandler);
68763
+ }
68764
+ if (this.scrollDirectionHandler) {
68765
+ window.removeEventListener('scroll', this.scrollDirectionHandler);
68766
+ }
69064
68767
  }
69065
- onViewModeClick() {
69066
- this.viewModeClick.emit();
68768
+ getContainerClasses() {
68769
+ const positioning = this.embedded() ? '' : 'relative';
68770
+ return `${positioning} min-h-screen`.trim();
69067
68771
  }
69068
- formatDate(dateString) {
69069
- // Cache date formatting operations
69070
- return this.dateFormatCache.get(dateString, (date) => new Date(date).toLocaleDateString('en-US', {
69071
- year: 'numeric',
69072
- month: 'long',
69073
- day: 'numeric',
69074
- }));
68772
+ getBackgroundClasses() {
68773
+ const positioning = this.embedded() ? 'absolute' : 'fixed';
68774
+ return `${positioning} inset-0 overflow-hidden pointer-events-none`;
68775
+ }
68776
+ getMeshGradientClasses() {
68777
+ const isDark = this.viewMode() === ViewModeEnum.DARK;
68778
+ if (isDark) {
68779
+ return 'absolute inset-0 opacity-30 bg-gradient-to-br from-blue-900/20 via-purple-900/20 to-slate-900';
68780
+ }
68781
+ return 'absolute inset-0 opacity-30 bg-gradient-to-br from-blue-100/50 via-purple-100/50 to-slate-50';
68782
+ }
68783
+ getTopoPatternClasses() {
68784
+ const isDark = this.viewMode() === ViewModeEnum.DARK;
68785
+ return isDark ? 'absolute inset-0 opacity-5' : 'absolute inset-0 opacity-5 mix-blend-overlay';
68786
+ }
68787
+ getOrbClasses(index) {
68788
+ const isDark = this.viewMode() === ViewModeEnum.DARK;
68789
+ if (!isDark)
68790
+ return 'hidden';
68791
+ const positions = [
68792
+ 'absolute top-0 left-1/4 w-96 h-96 bg-blue-500/10 rounded-full blur-3xl',
68793
+ 'absolute top-1/3 right-1/4 w-[32rem] h-[32rem] bg-purple-500/10 rounded-full blur-3xl',
68794
+ 'absolute bottom-0 left-1/3 w-[28rem] h-[28rem] bg-blue-400/10 rounded-full blur-3xl'
68795
+ ];
68796
+ return positions[index - 1] || '';
69075
68797
  }
69076
68798
  getHeaderClasses() {
69077
- return this.isLightMode()
69078
- ? 'bg-white/95 backdrop-blur-md shadow-sm border-b border-slate-200'
69079
- : 'bg-slate-900/95 backdrop-blur-md shadow-sm border-b border-slate-800';
68799
+ const isDark = this.viewMode() === ViewModeEnum.DARK;
68800
+ return isDark ? 'relative backdrop-blur-sm bg-slate-900/50' : 'relative backdrop-blur-sm bg-white/50';
69080
68801
  }
69081
68802
  getMainTitleClasses() {
69082
- return this.isLightMode()
69083
- ? 'text-3xl font-bold bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent'
69084
- : 'text-3xl font-bold bg-gradient-to-r from-blue-400 to-purple-400 bg-clip-text text-transparent';
68803
+ const isDark = this.viewMode() === ViewModeEnum.DARK;
68804
+ if (isDark) {
68805
+ return 'text-4xl sm:text-5xl font-bold bg-gradient-to-r from-blue-400 to-purple-400 bg-clip-text text-transparent';
68806
+ }
68807
+ return 'text-4xl sm:text-5xl font-bold bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent';
69085
68808
  }
69086
68809
  getSubtitleClasses() {
69087
- return this.isLightMode()
69088
- ? 'text-slate-600 mt-1 text-sm'
69089
- : 'text-slate-400 mt-1 text-sm';
68810
+ const isDark = this.viewMode() === ViewModeEnum.DARK;
68811
+ return isDark ? 'text-lg mt-2 text-slate-400' : 'text-lg mt-2 text-slate-600';
69090
68812
  }
69091
- getCondensedTitleClasses() {
69092
- return this.isLightMode()
69093
- ? 'text-xl font-bold bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent truncate'
69094
- : 'text-xl font-bold bg-gradient-to-r from-blue-400 to-purple-400 bg-clip-text text-transparent truncate';
68813
+ getLoadingOverlayClasses() {
68814
+ const isDark = this.viewMode() === ViewModeEnum.DARK;
68815
+ if (isDark) {
68816
+ return 'fixed inset-0 z-50 flex items-center justify-center bg-slate-900/80 backdrop-blur-sm';
68817
+ }
68818
+ return 'fixed inset-0 z-50 flex items-center justify-center bg-white/80 backdrop-blur-sm';
69095
68819
  }
69096
- getViewModeButtonClasses() {
69097
- return this.isLightMode()
69098
- ? 'bg-slate-100 hover:bg-slate-200 text-slate-700 border border-slate-200'
69099
- : 'bg-slate-800 hover:bg-slate-700 text-slate-300 border border-slate-700';
68820
+ getSpinnerClasses() {
68821
+ const isDark = this.viewMode() === ViewModeEnum.DARK;
68822
+ if (isDark) {
68823
+ return 'w-16 h-16 border-4 rounded-full animate-spin border-slate-700 border-t-blue-400';
68824
+ }
68825
+ return 'w-16 h-16 border-4 rounded-full animate-spin border-slate-200 border-t-blue-600';
69100
68826
  }
69101
- static { this.ɵfac = function DashboardHeaderComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || DashboardHeaderComponent)(); }; }
69102
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DashboardHeaderComponent, selectors: [["symphiq-dashboard-header"]], inputs: { requestedByUser: [1, "requestedByUser"], createdDate: [1, "createdDate"], title: [1, "title"], subtitle: [1, "subtitle"], viewMode: [1, "viewMode"], viewModeLabel: [1, "viewModeLabel"], currentSection: [1, "currentSection"], currentSubsection: [1, "currentSubsection"], isLoading: [1, "isLoading"], showControls: [1, "showControls"] }, outputs: { searchClick: "searchClick", viewModeClick: "viewModeClick" }, decls: 22, vars: 26, consts: [[1, "sticky", "top-0", "z-50", "overflow-hidden", 2, "transition", "height 300ms ease-in-out", 3, "ngClass"], [1, "transition-opacity", "duration-300", "ease-in-out", "h-full"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-4", "h-full", "flex", "items-center"], [1, "flex", "items-center", "justify-between", "w-full"], [1, "flex", "items-center", "gap-3"], [3, "ngClass"], ["title", "Refreshing data...", 1, "animate-spin", "w-4", "h-4", "border-2", "border-blue-500/30", "border-t-blue-500", "rounded-full"], [1, "flex", "items-center", "gap-2"], [1, "flex", "flex-col", "gap-4", "min-w-[180px]"], [1, "absolute", "inset-x-0", "top-0", "transition-opacity", "duration-300", "ease-in-out"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-3.5"], [1, "flex", "items-center", "justify-between"], [1, "flex-1", "min-w-0", "mr-4"], [1, "flex", "items-center", "gap-4"], [1, "flex", "items-center", "gap-2", "text-sm", "flex-shrink-0"], [3, "searchClick", "isLightMode"], ["type", "button", 1, "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", 3, "click", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M15 12a3 3 0 11-6 0 3 3 0 016 0z"], ["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"], [1, "text-left", "sm:text-right"], [1, "text-xs", "sm:text-sm"], [1, "text-sm", "sm:text-base", "font-medium"], [3, "searchClick", "isLightMode", "minimized"], ["type", "button", 1, "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", 3, "click", "ngClass"]], template: function DashboardHeaderComponent_Template(rf, ctx) { if (rf & 1) {
69103
- i0.ɵɵelementStart(0, "header", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3)(4, "div")(5, "div", 4)(6, "h1", 5);
69104
- i0.ɵɵtext(7);
68827
+ trackBySectionId(index, section) {
68828
+ return section.id || index;
68829
+ }
68830
+ static { this.ɵfac = function SymphiqBusinessAnalysisDashboardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SymphiqBusinessAnalysisDashboardComponent)(); }; }
68831
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SymphiqBusinessAnalysisDashboardComponent, selectors: [["symphiq-business-analysis-dashboard"]], hostBindings: function SymphiqBusinessAnalysisDashboardComponent_HostBindings(rf, ctx) { if (rf & 1) {
68832
+ i0.ɵɵlistener("scroll", function SymphiqBusinessAnalysisDashboardComponent_scroll_HostBindingHandler($event) { return ctx.onScroll($event); }, i0.ɵɵresolveWindow)("keydown", function SymphiqBusinessAnalysisDashboardComponent_keydown_HostBindingHandler($event) { return ctx.handleKeyDown($event); }, i0.ɵɵresolveDocument);
68833
+ } }, inputs: { embedded: [1, "embedded"], profile: [1, "profile"], parentHeaderOffset: [1, "parentHeaderOffset"], requestedByUser: [1, "requestedByUser"], viewMode: [1, "viewMode"], scrollEvent: [1, "scrollEvent"], scrollElement: [1, "scrollElement"], isLoading: [1, "isLoading"], isOnboarded: [1, "isOnboarded"], forDemo: [1, "forDemo"], maxAccessibleStepId: [1, "maxAccessibleStepId"], itemStatus: [1, "itemStatus"], isMarkingAsReviewed: [1, "isMarkingAsReviewed"] }, outputs: { stepClick: "stepClick", nextStepClick: "nextStepClick", markAsReviewedClick: "markAsReviewedClick" }, decls: 18, vars: 40, consts: [[3, "ngClass"], [1, "h-full", "transition-all", "duration-200", "ease-out", 3, "ngClass"], [1, "animated-bubbles", 2, "position", "fixed", "top", "0", "left", "0", "right", "0", "bottom", "0", "width", "100vw", "height", "100vh", "z-index", "1", "pointer-events", "none"], [1, "relative", "z-[51]"], [3, "searchClick", "viewModeClick", "title", "subtitle", "viewMode", "viewModeLabel", "currentSection", "currentSubsection", "sectionFading", "subsectionFading", "showControls"], [1, "relative"], [1, "flex", "items-center", "justify-center", "min-h-[60vh]"], [3, "sections", "viewMode", "embedded", "scrollElement"], [3, "viewMode", "embedded"], [3, "viewInContextRequested", "isLightMode"], [3, "searchChange", "resultSelected", "close", "isLightMode", "isOpen", "searchQuery", "results", "hasResults", "selectedIndex", "placeholder"], [3, "close", "modeSelected", "isOpen", "currentMode", "viewMode", "isLoading"], [3, "markAsReviewedClick", "viewMode", "reviewStatus", "selfContentStatus", "isMarkingAsReviewed"], ["size", "large", 3, "viewMode"], [3, "viewMode", "currentStepId", "showNextStepAction", "forDemo", "maxAccessibleStepId"], [3, "viewMode", "itemStatus", "currentStatus", "confettiIntensity", "title", "subtitle"], [3, "stepClick", "nextStepClick", "viewMode", "currentStepId", "showNextStepAction", "forDemo", "maxAccessibleStepId"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-8"], [1, "mb-8"], [3, "viewMode", "businessName", "isOnboarded"], [3, "viewMoreClick", "recommendations", "viewMode"], [3, "sections", "viewMode"], [3, "section", "viewMode", "forceExpanded"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8"], [3, "viewMode", "subsections"]], template: function SymphiqBusinessAnalysisDashboardComponent_Template(rf, ctx) { if (rf & 1) {
68834
+ i0.ɵɵelementStart(0, "div", 0)(1, "div");
68835
+ i0.ɵɵelement(2, "div", 1);
69105
68836
  i0.ɵɵelementEnd();
69106
- i0.ɵɵconditionalCreate(8, DashboardHeaderComponent_Conditional_8_Template, 1, 0, "div", 6);
68837
+ i0.ɵɵelement(3, "div", 2);
68838
+ i0.ɵɵelementStart(4, "div", 3)(5, "symphiq-dashboard-header", 4);
68839
+ i0.ɵɵlistener("searchClick", function SymphiqBusinessAnalysisDashboardComponent_Template_symphiq_dashboard_header_searchClick_5_listener() { return ctx.openSearch(); })("viewModeClick", function SymphiqBusinessAnalysisDashboardComponent_Template_symphiq_dashboard_header_viewModeClick_5_listener() { return ctx.openViewModeSwitcher(); });
69107
68840
  i0.ɵɵelementEnd();
69108
- i0.ɵɵelementStart(9, "p", 5);
69109
- i0.ɵɵtext(10);
69110
- i0.ɵɵelementEnd()();
69111
- i0.ɵɵconditionalCreate(11, DashboardHeaderComponent_Conditional_11_Template, 8, 3, "div", 7);
69112
- i0.ɵɵconditionalCreate(12, DashboardHeaderComponent_Conditional_12_Template, 3, 2, "div", 8);
69113
- i0.ɵɵelementEnd()()();
69114
- i0.ɵɵelementStart(13, "div", 9)(14, "div", 10)(15, "div", 11)(16, "div", 12)(17, "h1", 5);
69115
- i0.ɵɵtext(18);
68841
+ i0.ɵɵelementStart(6, "main", 5);
68842
+ i0.ɵɵconditionalCreate(7, SymphiqBusinessAnalysisDashboardComponent_Conditional_7_Template, 2, 1, "div", 6)(8, SymphiqBusinessAnalysisDashboardComponent_Conditional_8_Template, 2, 7)(9, SymphiqBusinessAnalysisDashboardComponent_Conditional_9_Template, 2, 1);
68843
+ i0.ɵɵelementEnd();
68844
+ i0.ɵɵconditionalCreate(10, SymphiqBusinessAnalysisDashboardComponent_Conditional_10_Template, 1, 4, "symphiq-section-navigation", 7);
68845
+ i0.ɵɵconditionalCreate(11, SymphiqBusinessAnalysisDashboardComponent_Conditional_11_Template, 1, 4, "symphiq-floating-toc", 7);
68846
+ i0.ɵɵelement(12, "symphiq-floating-back-button", 8);
68847
+ i0.ɵɵelementEnd();
68848
+ i0.ɵɵelement(13, "symphiq-tooltip-container");
68849
+ i0.ɵɵelementStart(14, "symphiq-business-analysis-modal", 9);
68850
+ i0.ɵɵlistener("viewInContextRequested", function SymphiqBusinessAnalysisDashboardComponent_Template_symphiq_business_analysis_modal_viewInContextRequested_14_listener($event) { return ctx.handleViewInContext($event); });
68851
+ i0.ɵɵelementEnd();
68852
+ i0.ɵɵelementStart(15, "symphiq-search-modal", 10);
68853
+ i0.ɵɵlistener("searchChange", function SymphiqBusinessAnalysisDashboardComponent_Template_symphiq_search_modal_searchChange_15_listener($event) { return ctx.onSearchChange($event); })("resultSelected", function SymphiqBusinessAnalysisDashboardComponent_Template_symphiq_search_modal_resultSelected_15_listener($event) { return ctx.onSearchResultSelected($event); })("close", function SymphiqBusinessAnalysisDashboardComponent_Template_symphiq_search_modal_close_15_listener() { return ctx.closeSearch(); });
68854
+ i0.ɵɵelementEnd();
68855
+ i0.ɵɵelementStart(16, "symphiq-view-mode-switcher-modal", 11);
68856
+ i0.ɵɵlistener("close", function SymphiqBusinessAnalysisDashboardComponent_Template_symphiq_view_mode_switcher_modal_close_16_listener() { return ctx.closeViewModeSwitcher(); })("modeSelected", function SymphiqBusinessAnalysisDashboardComponent_Template_symphiq_view_mode_switcher_modal_modeSelected_16_listener($event) { return ctx.handleDisplayModeChange($event); });
68857
+ i0.ɵɵelementEnd();
68858
+ i0.ɵɵelementStart(17, "symphiq-mark-as-reviewed-footer", 12);
68859
+ i0.ɵɵlistener("markAsReviewedClick", function SymphiqBusinessAnalysisDashboardComponent_Template_symphiq_mark_as_reviewed_footer_markAsReviewedClick_17_listener() { return ctx.handleMarkAsReviewedClick(); });
69116
68860
  i0.ɵɵelementEnd()();
69117
- i0.ɵɵelementStart(19, "div", 13);
69118
- i0.ɵɵconditionalCreate(20, DashboardHeaderComponent_Conditional_20_Template, 4, 3, "div", 14);
69119
- i0.ɵɵconditionalCreate(21, DashboardHeaderComponent_Conditional_21_Template, 5, 3);
69120
- i0.ɵɵelementEnd()()()()();
69121
68861
  } if (rf & 2) {
69122
- i0.ɵɵstyleProp("height", ctx.headerScrollService.isScrolled() ? "52px" : "100px");
69123
- i0.ɵɵproperty("ngClass", ctx.getHeaderClasses());
69124
- i0.ɵɵadvance();
69125
- i0.ɵɵclassProp("opacity-0", ctx.headerScrollService.isScrolled())("pointer-events-none", ctx.headerScrollService.isScrolled())("opacity-100", !ctx.headerScrollService.isScrolled());
69126
- i0.ɵɵadvance(5);
69127
- i0.ɵɵproperty("ngClass", ctx.getMainTitleClasses());
69128
- i0.ɵɵadvance();
69129
- i0.ɵɵtextInterpolate1(" ", ctx.title(), " ");
68862
+ let tmp_5_0;
68863
+ let tmp_13_0;
68864
+ let tmp_33_0;
68865
+ let tmp_34_0;
68866
+ i0.ɵɵproperty("ngClass", ctx.getContainerClasses());
69130
68867
  i0.ɵɵadvance();
69131
- i0.ɵɵconditional(ctx.isLoading() ? 8 : -1);
68868
+ i0.ɵɵclassMap(ctx.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");
69132
68869
  i0.ɵɵadvance();
69133
- i0.ɵɵproperty("ngClass", ctx.getSubtitleClasses());
68870
+ i0.ɵɵstyleProp("width", ctx.scrollProgress(), "%");
68871
+ i0.ɵɵproperty("ngClass", ctx.isLightMode() ? "bg-gradient-to-r from-blue-500 to-purple-500" : "bg-gradient-to-r from-blue-400 to-purple-400");
69134
68872
  i0.ɵɵadvance();
69135
- i0.ɵɵtextInterpolate1(" ", ctx.subtitle(), " ");
68873
+ i0.ɵɵclassProp("light-mode", ctx.isLightMode());
68874
+ i0.ɵɵadvance(2);
68875
+ i0.ɵɵproperty("title", ((tmp_5_0 = ctx.currentProfile()) == null ? null : tmp_5_0.profileStructured == null ? null : tmp_5_0.profileStructured.businessName) || "Business Analysis")("subtitle", "Business Profile & Analysis")("viewMode", ctx.viewMode())("viewModeLabel", ctx.displayModeLabel())("currentSection", ctx.isSimplifiedView() ? undefined : ctx.currentSectionTitle())("currentSubsection", ctx.isSimplifiedView() ? undefined : ctx.currentSubsectionTitle())("sectionFading", ctx.sectionTitleFading())("subsectionFading", ctx.subsectionTitleFading())("showControls", ((tmp_13_0 = ctx.profile()) == null ? null : tmp_13_0.selfContentStatus) === ctx.AiDynamicContentStatusEnum.GENERATED);
69136
68876
  i0.ɵɵadvance();
69137
- i0.ɵɵconditional(ctx.showControls() ? 11 : -1);
68877
+ i0.ɵɵclassProp("pb-32", ctx.shouldShowReviewFooter());
69138
68878
  i0.ɵɵadvance();
69139
- i0.ɵɵconditional(ctx.formattedGeneratedDate() || ctx.requestedByUser() ? 12 : -1);
68879
+ i0.ɵɵconditional(ctx.isLoading() ? 7 : ctx.isContentGenerating() ? 8 : 9);
68880
+ i0.ɵɵadvance(3);
68881
+ i0.ɵɵconditional(!ctx.isSimplifiedView() ? 10 : -1);
69140
68882
  i0.ɵɵadvance();
69141
- i0.ɵɵclassProp("opacity-0", !ctx.headerScrollService.isScrolled())("pointer-events-none", !ctx.headerScrollService.isScrolled())("opacity-100", ctx.headerScrollService.isScrolled());
69142
- i0.ɵɵadvance(4);
69143
- i0.ɵɵproperty("ngClass", ctx.getCondensedTitleClasses());
68883
+ i0.ɵɵconditional(!ctx.isSimplifiedView() ? 11 : -1);
69144
68884
  i0.ɵɵadvance();
69145
- i0.ɵɵtextInterpolate1(" ", ctx.title(), " ");
68885
+ i0.ɵɵproperty("viewMode", ctx.viewMode())("embedded", ctx.embedded());
69146
68886
  i0.ɵɵadvance(2);
69147
- i0.ɵɵconditional(ctx.currentSection() ? 20 : -1);
68887
+ i0.ɵɵproperty("isLightMode", ctx.isLightMode());
69148
68888
  i0.ɵɵadvance();
69149
- i0.ɵɵconditional(ctx.showControls() ? 21 : -1);
69150
- } }, dependencies: [CommonModule, i1$1.NgClass, SearchButtonComponent], encapsulation: 2, changeDetection: 0 }); }
69151
- }
69152
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DashboardHeaderComponent, [{
69153
- type: Component,
69154
- args: [{
69155
- selector: 'symphiq-dashboard-header',
69156
- standalone: true,
69157
- imports: [CommonModule, SearchButtonComponent],
69158
- changeDetection: ChangeDetectionStrategy.OnPush,
69159
- template: `
69160
- <header [ngClass]="getHeaderClasses()" class="sticky top-0 z-50 overflow-hidden" [style.height]="headerScrollService.isScrolled() ? '52px' : '100px'" style="transition: height 300ms ease-in-out;">
69161
- <!-- Expanded Header (default state) -->
69162
- <div
69163
- class="transition-opacity duration-300 ease-in-out h-full"
69164
- [class.opacity-0]="headerScrollService.isScrolled()"
69165
- [class.pointer-events-none]="headerScrollService.isScrolled()"
69166
- [class.opacity-100]="!headerScrollService.isScrolled()">
69167
- <div
69168
- class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4 h-full flex items-center">
69169
- <div class="flex items-center justify-between w-full">
69170
- <div>
69171
- <div class="flex items-center gap-3">
69172
- <h1 [ngClass]="getMainTitleClasses()">
69173
- {{ title() }}
69174
- </h1>
69175
- @if (isLoading()) {
69176
- <div class="animate-spin w-4 h-4 border-2 border-blue-500/30 border-t-blue-500 rounded-full" title="Refreshing data..."></div>
69177
- }
69178
- </div>
69179
- <p [ngClass]="getSubtitleClasses()">
69180
- {{ subtitle() }}
69181
- </p>
68889
+ i0.ɵɵproperty("isLightMode", ctx.isLightMode())("isOpen", ctx.searchService.isSearchOpen())("searchQuery", ctx.searchService.getSearchQuery())("results", ctx.searchService.searchResults())("hasResults", ctx.searchService.hasResults())("selectedIndex", ctx.selectedSearchIndex())("placeholder", "Search sections, items, and analysis...");
68890
+ i0.ɵɵadvance();
68891
+ i0.ɵɵproperty("isOpen", ctx.isViewModeSwitcherOpen())("currentMode", ctx.displayMode())("viewMode", ctx.viewMode())("isLoading", ctx.isViewModeSwitching());
68892
+ i0.ɵɵadvance();
68893
+ i0.ɵɵproperty("viewMode", ctx.viewMode())("reviewStatus", (tmp_33_0 = ctx.profile()) == null ? null : tmp_33_0.reviewStatus)("selfContentStatus", (tmp_34_0 = ctx.profile()) == null ? null : tmp_34_0.selfContentStatus)("isMarkingAsReviewed", ctx.isMarkingAsReviewed());
68894
+ } }, dependencies: [CommonModule, i1$1.NgClass, ProfileSectionComponent, SectionNavigationComponent, FloatingTocComponent, FloatingBackButtonComponent, TooltipContainerComponent, SectionDividerComponent, BusinessAnalysisModalComponent, SearchModalComponent, ViewModeSwitcherModalComponent, JourneyProgressIndicatorComponent, WelcomeBannerComponent, RecommendationsTiledGridComponent, CollapsibleSectionGroupComponent, ContentGenerationProgressWithConfettiComponent, IndeterminateSpinnerComponent, MarkAsReviewedFooterComponent, DashboardHeaderComponent], styles: ["[_nghost-%COMP%]{display:block}@keyframes _ngcontent-%COMP%_spin{to{transform:rotate(360deg)}}@keyframes _ngcontent-%COMP%_pulse-highlight{0%,to{transform:scale(1);box-shadow:0 0 #3b82f6b3}50%{transform:scale(1.02);box-shadow:0 0 20px 8px #3b82f64d}}[_nghost-%COMP%] .search-highlight-pulse{animation:_ngcontent-%COMP%_pulse-highlight 2s ease-in-out;border-color:#3b82f6!important}"], changeDetection: 0 }); }
68895
+ }
68896
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SymphiqBusinessAnalysisDashboardComponent, [{
68897
+ type: Component,
68898
+ args: [{ selector: 'symphiq-business-analysis-dashboard', standalone: true, imports: [CommonModule, ProfileSectionComponent, SectionNavigationComponent, FloatingTocComponent, FloatingBackButtonComponent, TooltipContainerComponent, SectionDividerComponent, BusinessAnalysisModalComponent, SearchModalComponent, ViewModeSwitcherModalComponent, JourneyProgressIndicatorComponent, WelcomeBannerComponent, RecommendationsTiledGridComponent, CollapsibleSectionGroupComponent, ContentGenerationProgressWithConfettiComponent, IndeterminateSpinnerComponent, MarkAsReviewedFooterComponent, DashboardHeaderComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: `
68899
+ <div [ngClass]="getContainerClasses()">
68900
+ <!-- Scroll Progress Bar (fixed at top) -->
68901
+ <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'">
68902
+ <div
68903
+ [style.width.%]="scrollProgress()"
68904
+ [ngClass]="isLightMode() ? 'bg-gradient-to-r from-blue-500 to-purple-500' : 'bg-gradient-to-r from-blue-400 to-purple-400'"
68905
+ class="h-full transition-all duration-200 ease-out">
68906
+ </div>
68907
+ </div>
68908
+
68909
+ <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>
68910
+
68911
+ <div class="relative z-[51]">
68912
+ <symphiq-dashboard-header
68913
+ [title]="currentProfile()?.profileStructured?.businessName || 'Business Analysis'"
68914
+ [subtitle]="'Business Profile & Analysis'"
68915
+ [viewMode]="viewMode()"
68916
+ [viewModeLabel]="displayModeLabel()"
68917
+ [currentSection]="isSimplifiedView() ? undefined : currentSectionTitle()"
68918
+ [currentSubsection]="isSimplifiedView() ? undefined : currentSubsectionTitle()"
68919
+ [sectionFading]="sectionTitleFading()"
68920
+ [subsectionFading]="subsectionTitleFading()"
68921
+ [showControls]="profile()?.selfContentStatus === AiDynamicContentStatusEnum.GENERATED"
68922
+ (searchClick)="openSearch()"
68923
+ (viewModeClick)="openViewModeSwitcher()"
68924
+ />
68925
+
68926
+ <main class="relative" [class.pb-32]="shouldShowReviewFooter()">
68927
+ @if (isLoading()) {
68928
+ <!-- Pure Loading State -->
68929
+ <div class="flex items-center justify-center min-h-[60vh]">
68930
+ <symphiq-indeterminate-spinner
68931
+ [viewMode]="viewMode()"
68932
+ size="large"
68933
+ />
69182
68934
  </div>
69183
- @if (showControls()) {
69184
- <div class="flex items-center gap-2">
69185
- <symphiq-search-button
69186
- [isLightMode]="isLightMode()"
69187
- (searchClick)="onSearchClick()"
68935
+ } @else if (isContentGenerating()) {
68936
+ <!-- Journey Progress Banner (always show when not onboarded) -->
68937
+ @if (!isOnboarded()) {
68938
+ <symphiq-journey-progress-indicator
68939
+ [viewMode]="viewMode()"
68940
+ [currentStepId]="JourneyStepIdEnum.BUSINESS_ANALYSIS"
68941
+ [showNextStepAction]="false"
68942
+ [forDemo]="forDemo()"
68943
+ [maxAccessibleStepId]="maxAccessibleStepId()"
68944
+ (stepClick)="stepClick.emit($event)"
68945
+ (nextStepClick)="nextStepClick.emit()"
68946
+ />
68947
+ }
68948
+
68949
+ <!-- Content Generation Progress Component -->
68950
+ <symphiq-content-generation-progress-with-confetti
68951
+ [viewMode]="viewMode()"
68952
+ [itemStatus]="itemStatus()"
68953
+ [currentStatus]="profile()?.selfContentStatus"
68954
+ [confettiIntensity]="'celebration'"
68955
+ [title]="'We are generating a new Business Analysis for ' + (currentProfile()?.profileStructured?.businessName || 'your business') + '.'"
68956
+ [subtitle]="'It will appear here when ready. You can check back later as this will take a few minutes to complete.'"
68957
+ />
68958
+ } @else {
68959
+ @if (isSimplifiedView()) {
68960
+ <!-- Journey Progress Banner - Full Width Sticky (only show when not onboarded) -->
68961
+ @if (!isOnboarded()) {
68962
+ <symphiq-journey-progress-indicator
68963
+ [viewMode]="viewMode()"
68964
+ [currentStepId]="JourneyStepIdEnum.BUSINESS_ANALYSIS"
68965
+ [showNextStepAction]="showNextStepAction()"
68966
+ [forDemo]="forDemo()"
68967
+ [maxAccessibleStepId]="maxAccessibleStepId()"
68968
+ (stepClick)="stepClick.emit($event)"
68969
+ (nextStepClick)="nextStepClick.emit()"
69188
68970
  />
69189
- <button
69190
- type="button"
69191
- (click)="onViewModeClick()"
69192
- [ngClass]="getViewModeButtonClasses()"
69193
- 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">
69194
- <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
69195
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
69196
- <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>
69197
- </svg>
69198
- <span>{{ viewModeLabel() }}</span>
69199
- </button>
68971
+ }
68972
+
68973
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
68974
+ <div class="mb-8">
68975
+ <symphiq-welcome-banner
68976
+ [viewMode]="viewMode()"
68977
+ [businessName]="currentProfile()?.profileStructured?.businessName || 'your business'"
68978
+ [isOnboarded]="isOnboarded()"
68979
+ />
68980
+ </div>
68981
+
68982
+ <div class="mb-8">
68983
+ <symphiq-recommendations-tiled-grid
68984
+ [recommendations]="recommendationItems()"
68985
+ [viewMode]="viewMode()"
68986
+ (viewMoreClick)="openRecommendationDetailsModal($event)"
68987
+ />
68988
+ </div>
68989
+
68990
+ <div>
68991
+ <symphiq-collapsible-section-group
68992
+ [sections]="nonRecommendationSections()"
68993
+ [viewMode]="viewMode()"
68994
+ />
68995
+ </div>
69200
68996
  </div>
69201
- }
69202
- @if (formattedGeneratedDate() || requestedByUser()) {
69203
- <div class="flex flex-col gap-4 min-w-[180px]">
69204
- @if (formattedGeneratedDate()) {
69205
- <div class="text-left sm:text-right">
69206
- <div [class]="metaLabelClass()" class="text-xs sm:text-sm">Generated At</div>
69207
- <div [class]="headerTitleClass()" class="text-sm sm:text-base font-medium">{{ formattedGeneratedDate() }}</div>
69208
- </div>
69209
- }
69210
- @if (requestedByUser()) {
69211
- <div class="text-left sm:text-right">
69212
- <div [class]="metaLabelClass()" class="text-xs sm:text-sm">Requested by</div>
69213
- <div [class]="headerTitleClass()" class="text-sm sm:text-base font-medium">{{ requestedByUser()?.firstName }} {{ requestedByUser()?.lastName }}</div>
68997
+ } @else {
68998
+ @for (section of sections(); track trackBySectionId($index, section); let idx = $index; let last = $last) {
68999
+ <symphiq-profile-section
69000
+ [section]="section"
69001
+ [viewMode]="viewMode()"
69002
+ [forceExpanded]="!isCompactView()"
69003
+ />
69004
+ @if (!last) {
69005
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
69006
+ <symphiq-section-divider
69007
+ [viewMode]="viewMode()"
69008
+ [subsections]="sections()[idx + 1].subsections || []" />
69214
69009
  </div>
69215
69010
  }
69216
- </div>
69011
+ }
69217
69012
  }
69218
- </div>
69219
- </div>
69220
- </div>
69013
+ }
69014
+ </main>
69221
69015
 
69222
- <!-- Condensed Header (scrolled state) -->
69223
- <div
69224
- class="absolute inset-x-0 top-0 transition-opacity duration-300 ease-in-out"
69225
- [class.opacity-0]="!headerScrollService.isScrolled()"
69226
- [class.pointer-events-none]="!headerScrollService.isScrolled()"
69227
- [class.opacity-100]="headerScrollService.isScrolled()">
69228
- <div
69229
- class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-3.5">
69230
- <div class="flex items-center justify-between">
69231
- <div class="flex-1 min-w-0 mr-4">
69232
- <h1 [ngClass]="getCondensedTitleClasses()">
69233
- {{ title() }}
69234
- </h1>
69235
- </div>
69236
- <div class="flex items-center gap-4">
69237
- @if (currentSection()) {
69238
- <div class="flex items-center gap-2 text-sm flex-shrink-0">
69239
- <span [ngClass]="isLightMode() ? 'text-slate-600 font-medium' : 'text-slate-400 font-medium'">
69240
- {{ currentSection() }}
69241
- </span>
69242
- @if (currentSubsection()) {
69243
- <span [ngClass]="isLightMode() ? 'text-slate-400' : 'text-slate-500'">›</span>
69244
- <span [ngClass]="isLightMode() ? 'text-slate-500' : 'text-slate-500'">
69245
- {{ currentSubsection() }}
69246
- </span>
69247
- }
69248
- </div>
69249
- }
69250
- @if (showControls()) {
69251
- <symphiq-search-button
69252
- [isLightMode]="isLightMode()"
69253
- [minimized]="true"
69254
- (searchClick)="onSearchClick()"
69255
- />
69256
- <button
69257
- type="button"
69258
- (click)="onViewModeClick()"
69259
- [ngClass]="getViewModeButtonClasses()"
69260
- 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">
69261
- <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
69262
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path>
69263
- <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>
69264
- </svg>
69265
- </button>
69266
- }
69267
- </div>
69268
- </div>
69269
- </div>
69270
- </div>
69271
- </header>
69272
- `
69273
- }]
69274
- }], null, { requestedByUser: [{ type: i0.Input, args: [{ isSignal: true, alias: "requestedByUser", required: false }] }], createdDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "createdDate", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], subtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "subtitle", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], viewModeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewModeLabel", required: false }] }], currentSection: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentSection", required: false }] }], currentSubsection: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentSubsection", required: false }] }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: false }] }], showControls: [{ type: i0.Input, args: [{ isSignal: true, alias: "showControls", required: false }] }], searchClick: [{ type: i0.Output, args: ["searchClick"] }], viewModeClick: [{ type: i0.Output, args: ["viewModeClick"] }] }); })();
69275
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DashboardHeaderComponent, { className: "DashboardHeaderComponent", filePath: "lib/components/shared/dashboard-header.component.ts", lineNumber: 128 }); })();
69016
+ @if (!isSimplifiedView()) {
69017
+ <symphiq-section-navigation
69018
+ [sections]="sections()"
69019
+ [viewMode]="viewMode()"
69020
+ [embedded]="embedded()"
69021
+ [scrollElement]="scrollElement() ?? undefined"
69022
+ />
69023
+ }
69024
+
69025
+ @if (!isSimplifiedView()) {
69026
+ <symphiq-floating-toc
69027
+ [sections]="sections()"
69028
+ [viewMode]="viewMode()"
69029
+ [embedded]="embedded()"
69030
+ [scrollElement]="scrollElement() ?? undefined"
69031
+ />
69032
+ }
69033
+
69034
+ <symphiq-floating-back-button
69035
+ [viewMode]="viewMode()"
69036
+ [embedded]="embedded()"
69037
+ />
69038
+ </div>
69039
+
69040
+ <symphiq-tooltip-container />
69041
+ <symphiq-business-analysis-modal
69042
+ [isLightMode]="isLightMode()"
69043
+ (viewInContextRequested)="handleViewInContext($event)" />
69044
+
69045
+ <symphiq-search-modal
69046
+ [isLightMode]="isLightMode()"
69047
+ [isOpen]="searchService.isSearchOpen()"
69048
+ [searchQuery]="searchService.getSearchQuery()"
69049
+ [results]="searchService.searchResults()"
69050
+ [hasResults]="searchService.hasResults()"
69051
+ [selectedIndex]="selectedSearchIndex()"
69052
+ [placeholder]="'Search sections, items, and analysis...'"
69053
+ (searchChange)="onSearchChange($event)"
69054
+ (resultSelected)="onSearchResultSelected($event)"
69055
+ (close)="closeSearch()"
69056
+ />
69057
+
69058
+ <symphiq-view-mode-switcher-modal
69059
+ [isOpen]="isViewModeSwitcherOpen()"
69060
+ [currentMode]="displayMode()"
69061
+ [viewMode]="viewMode()"
69062
+ [isLoading]="isViewModeSwitching()"
69063
+ (close)="closeViewModeSwitcher()"
69064
+ (modeSelected)="handleDisplayModeChange($event)"
69065
+ />
69066
+
69067
+ <!-- Mark as Reviewed Sticky Footer -->
69068
+ <symphiq-mark-as-reviewed-footer
69069
+ [viewMode]="viewMode()"
69070
+ [reviewStatus]="profile()?.reviewStatus"
69071
+ [selfContentStatus]="profile()?.selfContentStatus"
69072
+ [isMarkingAsReviewed]="isMarkingAsReviewed()"
69073
+ (markAsReviewedClick)="handleMarkAsReviewedClick()"
69074
+ />
69075
+ </div>
69076
+ `, 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"] }]
69077
+ }], () => [], { 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 }] }], itemStatus: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemStatus", required: false }] }], isMarkingAsReviewed: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMarkingAsReviewed", required: false }] }], stepClick: [{ type: i0.Output, args: ["stepClick"] }], nextStepClick: [{ type: i0.Output, args: ["nextStepClick"] }], markAsReviewedClick: [{ type: i0.Output, args: ["markAsReviewedClick"] }], onScroll: [{
69078
+ type: HostListener,
69079
+ args: ['window:scroll', ['$event']]
69080
+ }], handleKeyDown: [{
69081
+ type: HostListener,
69082
+ args: ['document:keydown', ['$event']]
69083
+ }] }); })();
69084
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqBusinessAnalysisDashboardComponent, { className: "SymphiqBusinessAnalysisDashboardComponent", filePath: "lib/components/business-analysis-dashboard/symphiq-business-analysis-dashboard.component.ts", lineNumber: 267 }); })();
69276
69085
 
69277
69086
  class GradeBadgeComponent {
69278
69087
  constructor() {