@eric-emg/symphiq-components 1.2.345 → 1.2.347

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.
@@ -86972,6 +86972,9 @@ class PlanCardComponent {
86972
86972
  getPricePeriod() {
86973
86973
  const info = this.planInfo();
86974
86974
  if (info.periodUnit === ChargebeeItemPricePeriodUnitEnum.YEAR) {
86975
+ if (info.planItemPrice.periodUnit === ChargebeeItemPricePeriodUnitEnum.MONTH) {
86976
+ return 'per month, billed monthly';
86977
+ }
86975
86978
  return 'per month, billed annually';
86976
86979
  }
86977
86980
  else {
@@ -88512,7 +88515,7 @@ function SymphiqProfileAnalysisDashboardComponent_Conditional_9_Conditional_2_Co
88512
88515
  function SymphiqProfileAnalysisDashboardComponent_Conditional_9_Conditional_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
88513
88516
  const _r5 = i0.ɵɵgetCurrentView();
88514
88517
  i0.ɵɵelementStart(0, "div", 31)(1, "symphiq-plan-selection-container", 35);
88515
- i0.ɵɵlistener("periodUnitChanged", function SymphiqProfileAnalysisDashboardComponent_Conditional_9_Conditional_2_Conditional_1_Template_symphiq_plan_selection_container_periodUnitChanged_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.handlePeriodUnitChange($event)); })("planSelected", function SymphiqProfileAnalysisDashboardComponent_Conditional_9_Conditional_2_Conditional_1_Template_symphiq_plan_selection_container_planSelected_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.handlePlanSelection($event)); })("editCurrency", function SymphiqProfileAnalysisDashboardComponent_Conditional_9_Conditional_2_Conditional_1_Template_symphiq_plan_selection_container_editCurrency_1_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.handleEditCurrencyClick()); });
88518
+ i0.ɵɵlistener("periodUnitChanged", function SymphiqProfileAnalysisDashboardComponent_Conditional_9_Conditional_2_Conditional_1_Template_symphiq_plan_selection_container_periodUnitChanged_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.handlePeriodUnitChange($event)); })("planSelected", function SymphiqProfileAnalysisDashboardComponent_Conditional_9_Conditional_2_Conditional_1_Template_symphiq_plan_selection_container_planSelected_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.handlePlanSelection($event)); })("editCurrency", function SymphiqProfileAnalysisDashboardComponent_Conditional_9_Conditional_2_Conditional_1_Template_symphiq_plan_selection_container_editCurrency_1_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.handleEditCurrencyClick()); })("checkout", function SymphiqProfileAnalysisDashboardComponent_Conditional_9_Conditional_2_Conditional_1_Template_symphiq_plan_selection_container_checkout_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.checkoutPlanClick.emit($event)); });
88516
88519
  i0.ɵɵelementEnd()();
88517
88520
  } if (rf & 2) {
88518
88521
  let tmp_4_0;
@@ -89064,6 +89067,7 @@ class SymphiqProfileAnalysisDashboardComponent {
89064
89067
  this.editCurrencyClick = output();
89065
89068
  this.periodUnitChanged = output();
89066
89069
  this.planSelected = output();
89070
+ this.checkoutPlanClick = output();
89067
89071
  this.isCurrencySelectionLoading = signal(false, ...(ngDevMode ? [{ debugName: "isCurrencySelectionLoading" }] : []));
89068
89072
  this.selectedCurrency = signal(null, ...(ngDevMode ? [{ debugName: "selectedCurrency" }] : []));
89069
89073
  this.isPlanLoading = signal(false, ...(ngDevMode ? [{ debugName: "isPlanLoading" }] : []));
@@ -89899,7 +89903,7 @@ class SymphiqProfileAnalysisDashboardComponent {
89899
89903
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.funnelModalComponent = _t.first);
89900
89904
  } }, hostBindings: function SymphiqProfileAnalysisDashboardComponent_HostBindings(rf, ctx) { if (rf & 1) {
89901
89905
  i0.ɵɵlistener("scroll", function SymphiqProfileAnalysisDashboardComponent_scroll_HostBindingHandler($event) { return ctx.onWindowScroll($event); }, i0.ɵɵresolveWindow);
89902
- } }, inputs: { viewMode: [1, "viewMode"], requestedByUser: [1, "requestedByUser"], createdDate: [1, "createdDate"], embedded: [1, "embedded"], profileAnalysis: [1, "profileAnalysis"], profile: [1, "profile"], funnelAnalysis: [1, "funnelAnalysis"], analysisType: [1, "analysisType"], focusAreaDetails: [1, "focusAreaDetails"], account: [1, "account"], planCardInfos: [1, "planCardInfos"], isOnboarded: [1, "isOnboarded"], scrollEvent: [1, "scrollEvent"], scrollElement: [1, "scrollElement"], isLoading: [1, "isLoading"], forDemo: [1, "forDemo"], maxAccessibleStepId: [1, "maxAccessibleStepId"] }, outputs: { stepClick: "stepClick", nextStepClick: "nextStepClick", currencySelectionClick: "currencySelectionClick", editCurrencyClick: "editCurrencyClick", periodUnitChanged: "periodUnitChanged", planSelected: "planSelected" }, features: [i0.ɵɵNgOnChangesFeature], decls: 29, vars: 50, consts: [[1, "min-h-screen", "relative", 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, "h-full", "transition-all", "duration-200", "ease-out", 3, "ngClass"], [1, "relative", "z-[51]"], [3, "searchClick", "viewModeClick", "title", "subtitle", "currentSection", "viewMode", "viewModeLabel", "isLoading", "requestedByUser", "createdDate"], [3, "viewMode", "currentStepId", "showNextStepAction", "forDemo", "maxAccessibleStepId"], [1, "relative", "z-10", "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-12", "space-y-12"], [1, "mb-12"], [3, "sections", "viewMode", "embedded", "scrollElement"], [3, "close", "isOpen", "isLightMode"], [3, "close", "modeSelected", "isOpen", "currentMode", "viewMode"], [3, "isLightMode", "allMetrics", "allInsights", "allBusinessInsights", "allCharts"], [3, "goal", "viewMode", "isInModal", "allMetrics", "allCharts", "allInsights", "currentModalState", "businessProfile"], [3, "goal", "viewMode"], [3, "objective", "goalTitle", "viewMode"], [3, "strategy", "objectiveTitle", "goalTitle", "viewMode", "allMetrics", "allCharts", "allInsights", "allBusinessInsights", "currentModalState"], [3, "category", "viewMode", "scrollToSection"], [3, "strength", "viewMode", "allFunnelStrengths", "currentModalState"], [3, "gap", "viewMode", "allGoals", "allWeaknesses", "currentModalState"], [3, "opportunity", "viewMode", "allStrengths", "currentModalState"], [3, "isLightMode", "viewMode", "allMetrics", "allInsights", "allCharts"], [3, "isLightMode"], [3, "viewMode", "isEnabled", "isLoading"], [1, "fixed", "bottom-0", "left-0", "right-0", "z-50", "border-t", "backdrop-blur-lg", 3, "ngClass"], [3, "nextStepClick", "stepClick", "viewMode", "currentStepId", "showNextStepAction", "forDemo", "maxAccessibleStepId"], [3, "viewMode", "businessName", "isOnboarded"], [3, "viewMode", "focusAreaDomain", "focusAreaName", "focusAreaDetails"], [3, "viewMode", "metricName", "isOnboarded"], [1, "mb-8"], [3, "goals", "viewMode"], [3, "viewMoreClick", "goals", "viewMode"], [1, "mb-32"], [3, "viewMode", "selectedCurrency"], [3, "currencySelected", "viewMode", "isLoading", "initialCurrency"], [3, "viewMode"], [3, "periodUnitChanged", "planSelected", "editCurrency", "viewMode", "selectedCurrency", "planCardInfos", "isLoading", "selectedPeriodUnit"], [3, "editCurrency", "viewMode", "selectedCurrency"], [3, "sections", "viewMode", "executiveSummary", "focusAreaExecutiveSummary", "metricExecutiveSummary", "metricName", "allGoals", "allMetrics", "allCharts", "allInsights", "businessProfile"], ["id", "section-executive-summary", 1, "space-y-6", "scroll-mt-24"], [3, "viewMode", "summary", "allGoals"], [3, "viewMode", "summary", "metricName", "allGoals"], [1, "space-y-8"], [1, "rounded-2xl", "p-8", "shadow-xl", 3, "ngClass"], [1, "space-y-6"], [1, "flex", "items-start", "justify-between", "gap-4"], [1, "flex-1"], [1, "text-2xl", "font-bold", "mb-3", 3, "ngClass"], [1, "text-lg", "leading-relaxed", 3, "ngClass"], [3, "grade", "gradeRationale", "viewMode"], [1, "rounded-xl", "p-6", 3, "ngClass"], [1, "grid", "grid-cols-1", "md:grid-cols-3", "gap-4"], ["type", "button", 1, "p-4", "rounded-xl", "text-left", "transition-all", "duration-200", "hover:scale-[1.02]", "active:scale-[0.98]", "group", "cursor-pointer", 3, "click", "ngClass"], [1, "text-xs", "font-semibold", "uppercase", "mb-1", 3, "ngClass"], [1, "text-3xl", "font-bold", "mb-2", 3, "ngClass"], [1, "flex", "items-center", "gap-1.5", "text-xs", "font-medium"], [3, "ngClass"], ["size", "w-4 h-4", 1, "transition-transform", "group-hover:translate-x-1", 3, "icon", "ngClass"], ["size", "w-4 h-4", 1, "transition-transform", "group-hover:translate-y-1", "animate-bounce", 3, "icon", "ngClass"], ["id", "quick-wins-section", 1, "space-y-4", "scroll-mt-24"], [1, "text-lg", "font-semibold", "mb-3", 3, "ngClass"], [1, "relative"], [1, "mb-6", "lg:float-left", "lg:mr-6", "lg:mb-4", "lg:max-w-[66%]"], [1, "text-sm", "leading-relaxed", "whitespace-pre-line", 3, "ngClass"], [1, "clear-both"], [3, "visual", "viewMode"], [1, "text-xl", "font-bold", 3, "ngClass"], [1, "grid", "grid-cols-1", "lg:grid-cols-2", "gap-6"], [1, "rounded-xl", "p-6", "transition-all", "duration-300", 3, "ngClass"], [1, "space-y-4"], [1, "flex", "items-start", "gap-3"], [1, "flex-shrink-0", "w-8", "h-8", "rounded-full", "flex", "items-center", "justify-center", "text-sm", "font-bold", 3, "ngClass"], [1, "font-semibold", "leading-tight", "flex-1", 3, "ngClass"], [1, "flex", "flex-wrap", "gap-2"], [1, "px-3", "py-1", "rounded-full", "text-xs", "font-semibold", 3, "ngClass"], [1, "flex", "items-center", "gap-2", "text-sm", 3, "ngClass"], [1, "space-y-2"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wider", 3, "ngClass"], [3, "relatedGoalIds", "allGoals", "viewMode"], [3, "topPrioritiesClick", "priorityDetailClick", "viewMode", "summary", "allGoals"], [3, "topPrioritiesClick", "priorityDetailClick", "viewMode", "summary", "metricName", "allGoals"], [3, "viewMode", "sectionIcon"], [1, "rounded-xl", "p-8", "scroll-mt-24", 3, "id", "ngClass"], [1, "flex", "items-start", "gap-3", "mb-6"], [1, "flex-shrink-0", "w-12", "h-12", "rounded-xl", "flex", "items-center", "justify-center", 3, "ngClass"], [1, "text-2xl", "font-bold", 3, "ngClass"], [1, "mb-6", "flex", "flex-col", "lg:flex-row", "gap-6", "items-start", 3, "lg:flex-row-reverse"], [3, "section", "executiveSummary", "viewMode", "sectionIndex", "allGoals", "allMetrics", "allCharts", "allInsights", "businessProfile"], ["size", "w-6 h-6", 3, "icon"], [1, "mb-6", "flex", "flex-col", "lg:flex-row", "gap-6", "items-start"], [1, "w-full", "lg:w-2/3"], [1, "w-full", 3, "lg:w-1/3", "lg:w-full"], [1, "w-full"], [3, "continueClick", "viewMode", "isEnabled", "isLoading"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-4"], [1, "flex", "items-center", "gap-4"], [1, "px-6", "py-4", "rounded-xl", "font-semibold", "text-lg", "transition-all", "duration-300", "cursor-pointer", 3, "click", "ngClass"], [1, "flex-1", "px-6", "py-4", "rounded-xl", "font-semibold", "text-lg", "transition-all", "duration-300", "flex", "items-center", "justify-center", "gap-3", "shadow-2xl", 3, "click", "disabled", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-6", "h-6", "transition-transform", "duration-200"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 7l5 5m0 0l-5 5m5-5H6"]], template: function SymphiqProfileAnalysisDashboardComponent_Template(rf, ctx) { if (rf & 1) {
89906
+ } }, inputs: { viewMode: [1, "viewMode"], requestedByUser: [1, "requestedByUser"], createdDate: [1, "createdDate"], embedded: [1, "embedded"], profileAnalysis: [1, "profileAnalysis"], profile: [1, "profile"], funnelAnalysis: [1, "funnelAnalysis"], analysisType: [1, "analysisType"], focusAreaDetails: [1, "focusAreaDetails"], account: [1, "account"], planCardInfos: [1, "planCardInfos"], isOnboarded: [1, "isOnboarded"], scrollEvent: [1, "scrollEvent"], scrollElement: [1, "scrollElement"], isLoading: [1, "isLoading"], forDemo: [1, "forDemo"], maxAccessibleStepId: [1, "maxAccessibleStepId"] }, outputs: { stepClick: "stepClick", nextStepClick: "nextStepClick", currencySelectionClick: "currencySelectionClick", editCurrencyClick: "editCurrencyClick", periodUnitChanged: "periodUnitChanged", planSelected: "planSelected", checkoutPlanClick: "checkoutPlanClick" }, features: [i0.ɵɵNgOnChangesFeature], decls: 29, vars: 50, consts: [[1, "min-h-screen", "relative", 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, "h-full", "transition-all", "duration-200", "ease-out", 3, "ngClass"], [1, "relative", "z-[51]"], [3, "searchClick", "viewModeClick", "title", "subtitle", "currentSection", "viewMode", "viewModeLabel", "isLoading", "requestedByUser", "createdDate"], [3, "viewMode", "currentStepId", "showNextStepAction", "forDemo", "maxAccessibleStepId"], [1, "relative", "z-10", "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-12", "space-y-12"], [1, "mb-12"], [3, "sections", "viewMode", "embedded", "scrollElement"], [3, "close", "isOpen", "isLightMode"], [3, "close", "modeSelected", "isOpen", "currentMode", "viewMode"], [3, "isLightMode", "allMetrics", "allInsights", "allBusinessInsights", "allCharts"], [3, "goal", "viewMode", "isInModal", "allMetrics", "allCharts", "allInsights", "currentModalState", "businessProfile"], [3, "goal", "viewMode"], [3, "objective", "goalTitle", "viewMode"], [3, "strategy", "objectiveTitle", "goalTitle", "viewMode", "allMetrics", "allCharts", "allInsights", "allBusinessInsights", "currentModalState"], [3, "category", "viewMode", "scrollToSection"], [3, "strength", "viewMode", "allFunnelStrengths", "currentModalState"], [3, "gap", "viewMode", "allGoals", "allWeaknesses", "currentModalState"], [3, "opportunity", "viewMode", "allStrengths", "currentModalState"], [3, "isLightMode", "viewMode", "allMetrics", "allInsights", "allCharts"], [3, "isLightMode"], [3, "viewMode", "isEnabled", "isLoading"], [1, "fixed", "bottom-0", "left-0", "right-0", "z-50", "border-t", "backdrop-blur-lg", 3, "ngClass"], [3, "nextStepClick", "stepClick", "viewMode", "currentStepId", "showNextStepAction", "forDemo", "maxAccessibleStepId"], [3, "viewMode", "businessName", "isOnboarded"], [3, "viewMode", "focusAreaDomain", "focusAreaName", "focusAreaDetails"], [3, "viewMode", "metricName", "isOnboarded"], [1, "mb-8"], [3, "goals", "viewMode"], [3, "viewMoreClick", "goals", "viewMode"], [1, "mb-32"], [3, "viewMode", "selectedCurrency"], [3, "currencySelected", "viewMode", "isLoading", "initialCurrency"], [3, "viewMode"], [3, "periodUnitChanged", "planSelected", "editCurrency", "checkout", "viewMode", "selectedCurrency", "planCardInfos", "isLoading", "selectedPeriodUnit"], [3, "editCurrency", "viewMode", "selectedCurrency"], [3, "sections", "viewMode", "executiveSummary", "focusAreaExecutiveSummary", "metricExecutiveSummary", "metricName", "allGoals", "allMetrics", "allCharts", "allInsights", "businessProfile"], ["id", "section-executive-summary", 1, "space-y-6", "scroll-mt-24"], [3, "viewMode", "summary", "allGoals"], [3, "viewMode", "summary", "metricName", "allGoals"], [1, "space-y-8"], [1, "rounded-2xl", "p-8", "shadow-xl", 3, "ngClass"], [1, "space-y-6"], [1, "flex", "items-start", "justify-between", "gap-4"], [1, "flex-1"], [1, "text-2xl", "font-bold", "mb-3", 3, "ngClass"], [1, "text-lg", "leading-relaxed", 3, "ngClass"], [3, "grade", "gradeRationale", "viewMode"], [1, "rounded-xl", "p-6", 3, "ngClass"], [1, "grid", "grid-cols-1", "md:grid-cols-3", "gap-4"], ["type", "button", 1, "p-4", "rounded-xl", "text-left", "transition-all", "duration-200", "hover:scale-[1.02]", "active:scale-[0.98]", "group", "cursor-pointer", 3, "click", "ngClass"], [1, "text-xs", "font-semibold", "uppercase", "mb-1", 3, "ngClass"], [1, "text-3xl", "font-bold", "mb-2", 3, "ngClass"], [1, "flex", "items-center", "gap-1.5", "text-xs", "font-medium"], [3, "ngClass"], ["size", "w-4 h-4", 1, "transition-transform", "group-hover:translate-x-1", 3, "icon", "ngClass"], ["size", "w-4 h-4", 1, "transition-transform", "group-hover:translate-y-1", "animate-bounce", 3, "icon", "ngClass"], ["id", "quick-wins-section", 1, "space-y-4", "scroll-mt-24"], [1, "text-lg", "font-semibold", "mb-3", 3, "ngClass"], [1, "relative"], [1, "mb-6", "lg:float-left", "lg:mr-6", "lg:mb-4", "lg:max-w-[66%]"], [1, "text-sm", "leading-relaxed", "whitespace-pre-line", 3, "ngClass"], [1, "clear-both"], [3, "visual", "viewMode"], [1, "text-xl", "font-bold", 3, "ngClass"], [1, "grid", "grid-cols-1", "lg:grid-cols-2", "gap-6"], [1, "rounded-xl", "p-6", "transition-all", "duration-300", 3, "ngClass"], [1, "space-y-4"], [1, "flex", "items-start", "gap-3"], [1, "flex-shrink-0", "w-8", "h-8", "rounded-full", "flex", "items-center", "justify-center", "text-sm", "font-bold", 3, "ngClass"], [1, "font-semibold", "leading-tight", "flex-1", 3, "ngClass"], [1, "flex", "flex-wrap", "gap-2"], [1, "px-3", "py-1", "rounded-full", "text-xs", "font-semibold", 3, "ngClass"], [1, "flex", "items-center", "gap-2", "text-sm", 3, "ngClass"], [1, "space-y-2"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wider", 3, "ngClass"], [3, "relatedGoalIds", "allGoals", "viewMode"], [3, "topPrioritiesClick", "priorityDetailClick", "viewMode", "summary", "allGoals"], [3, "topPrioritiesClick", "priorityDetailClick", "viewMode", "summary", "metricName", "allGoals"], [3, "viewMode", "sectionIcon"], [1, "rounded-xl", "p-8", "scroll-mt-24", 3, "id", "ngClass"], [1, "flex", "items-start", "gap-3", "mb-6"], [1, "flex-shrink-0", "w-12", "h-12", "rounded-xl", "flex", "items-center", "justify-center", 3, "ngClass"], [1, "text-2xl", "font-bold", 3, "ngClass"], [1, "mb-6", "flex", "flex-col", "lg:flex-row", "gap-6", "items-start", 3, "lg:flex-row-reverse"], [3, "section", "executiveSummary", "viewMode", "sectionIndex", "allGoals", "allMetrics", "allCharts", "allInsights", "businessProfile"], ["size", "w-6 h-6", 3, "icon"], [1, "mb-6", "flex", "flex-col", "lg:flex-row", "gap-6", "items-start"], [1, "w-full", "lg:w-2/3"], [1, "w-full", 3, "lg:w-1/3", "lg:w-full"], [1, "w-full"], [3, "continueClick", "viewMode", "isEnabled", "isLoading"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-4"], [1, "flex", "items-center", "gap-4"], [1, "px-6", "py-4", "rounded-xl", "font-semibold", "text-lg", "transition-all", "duration-300", "cursor-pointer", 3, "click", "ngClass"], [1, "flex-1", "px-6", "py-4", "rounded-xl", "font-semibold", "text-lg", "transition-all", "duration-300", "flex", "items-center", "justify-center", "gap-3", "shadow-2xl", 3, "click", "disabled", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-6", "h-6", "transition-transform", "duration-200"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 7l5 5m0 0l-5 5m5-5H6"]], template: function SymphiqProfileAnalysisDashboardComponent_Template(rf, ctx) { if (rf & 1) {
89903
89907
  i0.ɵɵelementStart(0, "div", 0);
89904
89908
  i0.ɵɵelement(1, "div", 1);
89905
89909
  i0.ɵɵelementStart(2, "div");
@@ -90010,621 +90014,622 @@ class SymphiqProfileAnalysisDashboardComponent {
90010
90014
  standalone: true,
90011
90015
  imports: [CommonModule, DashboardHeaderComponent, SearchModalComponent, ViewModeSwitcherModalComponent, JourneyProgressIndicatorComponent, FloatingTocComponent, SectionNavigationComponent, GradeBadgeComponent, ShopWelcomeBannerComponent, FocusAreaWelcomeBannerComponent, MetricWelcomeBannerComponent, FocusAreaExecutiveSummaryComponent, MetricExecutiveSummaryComponent, NapkinVisualPlaceholderComponent, TooltipContainerComponent, ProfileSectionContentComponent, ProfileAnalysisModalComponent, ModalComponent, GoalCardComponent, GoalObjectivesModalContentComponent, ObjectiveStrategiesModalContentComponent, StrategyRecommendationsModalContentComponent, CategoryDetailModalContentComponent, StrengthDetailModalContentComponent, GapDetailModalContentComponent, OpportunityDetailModalContentComponent, BusinessAnalysisModalComponent, SectionDividerComponent, SymphiqIconComponent, RelatedGoalChipsComponent, StrategicGoalsTiledGridComponent, CollapsibleAnalysisSectionGroupComponent, BillingCurrencySelectorCardComponent, PlanSelectionPlaceholderCardComponent, PlanSelectionContainerComponent, SubscriptionValuePropositionCardComponent, StickySubscriptionContinueButtonComponent],
90012
90016
  changeDetection: ChangeDetectionStrategy.OnPush,
90013
- template: `
90014
- <div [ngClass]="getContainerClasses()" class="min-h-screen relative">
90015
- <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>
90016
-
90017
- <!-- Scroll Progress Bar -->
90018
- <div
90019
- [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'">
90020
- <div
90021
- [style.width.%]="scrollProgress()"
90022
- [ngClass]="isLightMode() ? 'bg-gradient-to-r from-blue-500 to-purple-500' : 'bg-gradient-to-r from-blue-400 to-purple-400'"
90023
- class="h-full transition-all duration-200 ease-out">
90024
- </div>
90025
- </div>
90026
-
90027
- <div class="relative z-[51]">
90028
- <!-- Dashboard Header -->
90029
- <symphiq-dashboard-header
90030
- [title]="profileAnalysis()?.profileAnalysisStructured?.businessName || 'Profile Analysis'"
90031
- [subtitle]="getAnalysisSubtitle()"
90032
- [currentSection]="getAnalysisSubtitle()"
90033
- [viewMode]="viewMode()"
90034
- [viewModeLabel]="displayModeLabel()"
90035
- [isLoading]="isLoading()"
90036
- [requestedByUser]="requestedByUser()"
90037
- [createdDate]="profileAnalysis()?.selfContentCompletedDate"
90038
- (searchClick)="openSearch()"
90039
- (viewModeClick)="openViewModeSwitcher()"
90040
- />
90041
-
90042
- <!-- Journey Progress Banner -->
90043
- @if (isSimplifiedView() && !isOnboarded()) {
90044
- <symphiq-journey-progress-indicator
90045
- [viewMode]="viewMode()"
90046
- [currentStepId]="currentStepId()"
90047
- [showNextStepAction]="shouldShowContinueButton()"
90048
- [forDemo]="forDemo()"
90049
- [maxAccessibleStepId]="maxAccessibleStepId()"
90050
- (nextStepClick)="nextStepClick.emit()"
90051
- (stepClick)="stepClick.emit($event)"
90052
- />
90053
- }
90054
-
90055
- <!-- Main Content -->
90056
- <main class="relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12 space-y-12" [class.pb-32]="shouldShowStickyButton()">
90057
-
90058
- <!-- Welcome Banner (Simplified View Only) -->
90059
- @if (isSimplifiedView()) {
90060
- <div class="mb-12">
90061
- @if (!isFocusAreaAnalysis() && !isMetricAnalysis()) {
90062
- <symphiq-shop-welcome-banner
90063
- [viewMode]="viewMode()"
90064
- [businessName]="profileAnalysis()?.profileAnalysisStructured?.businessName || 'your shop'"
90065
- [isOnboarded]="isOnboarded()"
90066
- />
90067
- }
90068
- @if (isFocusAreaAnalysis()) {
90069
- <symphiq-focus-area-welcome-banner
90070
- [viewMode]="viewMode()"
90071
- [focusAreaDomain]="focusAreaDomain()"
90072
- [focusAreaName]="focusAreaName()"
90073
- [focusAreaDetails]="focusAreaDetails()"
90074
- />
90075
- }
90076
- @if (isMetricAnalysis()) {
90077
- <symphiq-metric-welcome-banner
90078
- [viewMode]="viewMode()"
90079
- [metricName]="profileAnalysis()?.profileAnalysisStructured?.metricExecutiveSummary?.metric"
90080
- [isOnboarded]="isOnboarded()"
90081
- />
90082
- }
90083
- </div>
90084
- }
90085
-
90086
- <!-- Simplified View Content -->
90087
- @if (isSimplifiedView()) {
90088
- <!-- Strategic Insights & Goals (or Subscription Flow) -->
90089
- <div class="mb-8">
90090
- @if (isSubscriptionActive() || isFocusAreaAnalysis() || isMetricAnalysis()) {
90091
- <symphiq-strategic-goals-tiled-grid
90092
- [goals]="strategicRoadmapGoals()"
90093
- [viewMode]="viewMode()"
90094
- (viewMoreClick)="openGoalModal($event)"
90095
- />
90096
- } @else {
90097
- <!-- Subscription Value Proposition -->
90098
- @if (!hasBillingCurrency() || isEditingCurrency()) {
90099
- @if (!hasBillingCurrency()) {
90100
- <div class="mb-8">
90101
- <symphiq-subscription-value-proposition-card
90102
- [viewMode]="viewMode()"
90103
- />
90104
- </div>
90105
- }
90106
-
90107
- <!-- Currency Selection -->
90108
- <symphiq-billing-currency-selector-card
90109
- [viewMode]="viewMode()"
90110
- [isLoading]="isCurrencySelectionLoading()"
90111
- [initialCurrency]="isEditingCurrency() ? (account()?.billingCurrencyCode || null) : null"
90112
- (currencySelected)="handleCurrencyChange($event)"
90113
- />
90114
- } @else if (showPlanSelection()) {
90115
- <!-- Plan Selection -->
90116
-
90117
- <div class="mb-32">
90118
- <symphiq-plan-selection-container
90119
- [viewMode]="viewMode()"
90120
- [selectedCurrency]="account()?.billingCurrencyCode || CurrencyCodeEnum.USD"
90121
- [planCardInfos]="planCardInfos()"
90122
- [isLoading]="isPlanLoading()"
90123
- [selectedPeriodUnit]="selectedPeriodUnit()"
90124
- (periodUnitChanged)="handlePeriodUnitChange($event)"
90125
- (planSelected)="handlePlanSelection($event)"
90126
- (editCurrency)="handleEditCurrencyClick()"
90127
- />
90128
- </div>
90129
- } @else {
90130
- <symphiq-plan-selection-placeholder-card
90131
- [viewMode]="viewMode()"
90132
- [selectedCurrency]="account()?.billingCurrencyCode || CurrencyCodeEnum.USD"
90133
- (editCurrency)="handleEditCurrencyClick()"
90134
- />
90135
- }
90136
- }
90137
- </div>
90138
-
90139
- <!-- Supporting Business Context -->
90140
- @if (nonStrategicSections().length > 0) {
90141
- <div>
90142
- <symphiq-collapsible-analysis-section-group
90143
- [sections]="nonStrategicSections()"
90144
- [viewMode]="viewMode()"
90145
- [executiveSummary]="executiveSummary()"
90146
- [focusAreaExecutiveSummary]="focusAreaExecutiveSummary()"
90147
- [metricExecutiveSummary]="metricExecutiveSummary()"
90148
- [metricName]="metricName()"
90149
- [allGoals]="allGoals()"
90150
- [allMetrics]="allMetrics()"
90151
- [allCharts]="allCharts()"
90152
- [allInsights]="allInsights()"
90153
- [businessProfile]="profile()"
90154
- />
90155
- </div>
90156
- }
90157
- }
90158
-
90159
- <!-- Compact & Expanded View Content -->
90160
- @if (!isSimplifiedView()) {
90161
- <!-- SHOP Executive Summary -->
90162
- @if (!isFocusAreaAnalysis() && executiveSummary(); as summary) {
90163
- <section id="section-executive-summary" class="space-y-6 scroll-mt-24">
90164
- <!-- Summary Banner -->
90165
- <div [ngClass]="getBannerClasses()" class="rounded-2xl p-8 shadow-xl">
90166
- <div class="space-y-6">
90167
- <div class="flex items-start justify-between gap-4">
90168
- <div class="flex-1">
90169
- <h2 [ngClass]="getSectionTitleClasses()" class="text-2xl font-bold mb-3">
90170
- Executive Summary
90171
- </h2>
90172
- <p [ngClass]="getTextClasses()" class="text-lg leading-relaxed">
90173
- {{ summary.gradeRationale }}
90174
- </p>
90175
- </div>
90176
- @if (summary.overallGrade) {
90177
- <symphiq-grade-badge
90178
- [grade]="summary.overallGrade"
90179
- [gradeRationale]="summary.gradeRationale || ''"
90180
- [viewMode]="viewMode()"
90181
- />
90182
- }
90183
- </div>
90184
-
90185
- @if (summary.narrative) {
90186
- <div [ngClass]="getNarrativeClasses()" class="rounded-xl p-6">
90187
- <h3 [ngClass]="getSubheadingClasses()" class="text-lg font-semibold mb-3">
90188
- Analysis Narrative
90189
- </h3>
90190
- <div class="relative">
90191
- @if (summary.napkinVisual && summary.napkinVisual.enabled) {
90192
- <div class="mb-6 lg:float-left lg:mr-6 lg:mb-4 lg:max-w-[66%]">
90193
- <symphiq-napkin-visual-placeholder
90194
- [visual]="summary.napkinVisual"
90195
- [viewMode]="viewMode()"
90196
- />
90197
- </div>
90198
- }
90199
- <p [ngClass]="getTextClasses()" class="text-sm leading-relaxed whitespace-pre-line">
90200
- {{ summary.narrative }}
90201
- </p>
90202
- <div class="clear-both"></div>
90203
- </div>
90204
- </div>
90205
- }
90206
-
90207
- <!-- Stats -->
90208
- <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
90209
- <button
90210
- type="button"
90211
- (click)="onKeyStrengthsClick(summary)"
90212
- [ngClass]="getKeyStrengthsStatCardClasses()"
90213
- class="p-4 rounded-xl text-left transition-all duration-200 hover:scale-[1.02] active:scale-[0.98] group cursor-pointer">
90214
- <div [ngClass]="getKeyStrengthsStatLabelClasses()" class="text-xs font-semibold uppercase mb-1">
90215
- Key Strengths
90216
- </div>
90217
- <div [ngClass]="getKeyStrengthsStatValueClasses()" class="text-3xl font-bold mb-2">
90218
- {{ summary.keyStrengths?.length || 0 }}
90219
- </div>
90220
- <div class="flex items-center gap-1.5 text-xs font-medium">
90221
- <span [ngClass]="getKeyStrengthsButtonTextClasses()">View Details</span>
90222
- <symphiq-icon
90223
- [icon]="{ name: 'chevron-right', source: IconSourceEnum.HEROICONS }"
90224
- size="w-4 h-4"
90225
- [ngClass]="getKeyStrengthsButtonTextClasses()"
90226
- class="transition-transform group-hover:translate-x-1"
90227
- />
90228
- </div>
90229
- </button>
90230
- <button
90231
- type="button"
90232
- (click)="onCriticalGapsClick(summary)"
90233
- [ngClass]="getCriticalGapsStatCardClasses()"
90234
- class="p-4 rounded-xl text-left transition-all duration-200 hover:scale-[1.02] active:scale-[0.98] group cursor-pointer">
90235
- <div [ngClass]="getCriticalGapsStatLabelClasses()" class="text-xs font-semibold uppercase mb-1">
90236
- Critical Gaps
90237
- </div>
90238
- <div [ngClass]="getCriticalGapsStatValueClasses()" class="text-3xl font-bold mb-2">
90239
- {{ summary.criticalGaps?.length || 0 }}
90240
- </div>
90241
- <div class="flex items-center gap-1.5 text-xs font-medium">
90242
- <span [ngClass]="getCriticalGapsButtonTextClasses()">View Details</span>
90243
- <symphiq-icon
90244
- [icon]="{ name: 'chevron-right', source: IconSourceEnum.HEROICONS }"
90245
- size="w-4 h-4"
90246
- [ngClass]="getCriticalGapsButtonTextClasses()"
90247
- class="transition-transform group-hover:translate-x-1"
90248
- />
90249
- </div>
90250
- </button>
90251
- <button
90252
- type="button"
90253
- (click)="scrollToQuickWins()"
90254
- [ngClass]="getQuickWinsStatCardClasses()"
90255
- class="p-4 rounded-xl text-left transition-all duration-200 hover:scale-[1.02] active:scale-[0.98] group cursor-pointer">
90256
- <div [ngClass]="getQuickWinsStatLabelClasses()" class="text-xs font-semibold uppercase mb-1">
90257
- Quick Wins
90258
- </div>
90259
- <div [ngClass]="getQuickWinsStatValueClasses()" class="text-3xl font-bold mb-2">
90260
- {{ summary.quickWins?.length || 0 }}
90261
- </div>
90262
- <div class="flex items-center gap-1.5 text-xs font-medium">
90263
- <span [ngClass]="getQuickWinsButtonTextClasses()">Details Below</span>
90264
- <symphiq-icon
90265
- [icon]="{ name: 'chevron-down', source: IconSourceEnum.HEROICONS }"
90266
- size="w-4 h-4"
90267
- [ngClass]="getQuickWinsButtonTextClasses()"
90268
- class="transition-transform group-hover:translate-y-1 animate-bounce"
90269
- />
90270
- </div>
90271
- </button>
90272
- </div>
90273
- </div>
90274
- </div>
90275
-
90276
- <!-- Quick Wins -->
90277
- @if (summary.quickWins && summary.quickWins.length > 0) {
90278
- <div id="quick-wins-section" class="space-y-4 scroll-mt-24">
90279
- <h3 [ngClass]="getSectionTitleClasses()" class="text-xl font-bold">
90280
- Quick Wins
90281
- </h3>
90282
- <div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
90283
- @for (win of summary.quickWins; track $index) {
90284
- <div [ngClass]="getQuickWinCardClasses()"
90285
- class="rounded-xl p-6 transition-all duration-300">
90286
- <div class="space-y-4">
90287
- <div class="flex items-start gap-3">
90288
- <span [ngClass]="getNumberBadgeClasses()"
90289
- class="flex-shrink-0 w-8 h-8 rounded-full flex items-center justify-center text-sm font-bold">
90290
- {{ $index + 1 }}
90291
- </span>
90292
- <p [ngClass]="getQuickWinTextClasses()" class="font-semibold leading-tight flex-1">
90293
- {{ win.action }}
90294
- </p>
90295
- </div>
90296
-
90297
- <div class="flex flex-wrap gap-2">
90298
- <span [ngClass]="getEffortBadgeClasses(win.effort)"
90299
- class="px-3 py-1 rounded-full text-xs font-semibold">
90300
- {{ formatLabel(win.effort) }} Effort
90301
- </span>
90302
- <span [ngClass]="getImpactBadgeClasses(win.impact)"
90303
- class="px-3 py-1 rounded-full text-xs font-semibold">
90304
- {{ formatLabel(win.impact) }} Impact
90305
- </span>
90306
- </div>
90307
-
90308
- @if (win.estimatedTimeframe) {
90309
- <div class="flex items-center gap-2 text-sm" [ngClass]="getMetaTextClasses()">
90310
- <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
90311
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
90312
- d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"/>
90313
- </svg>
90314
- <span>{{ win.estimatedTimeframe }}</span>
90315
- </div>
90316
- }
90317
-
90318
- @if (win.relatedGoalId) {
90319
- <div class="space-y-2">
90320
- <h4 [ngClass]="getMetaTextClasses()"
90321
- class="text-xs font-semibold uppercase tracking-wider">
90322
- Related Goal
90323
- </h4>
90324
- <symphiq-related-goal-chips
90325
- [relatedGoalIds]="[win.relatedGoalId]"
90326
- [allGoals]="allGoals()"
90327
- [viewMode]="viewMode()"
90328
- />
90329
- </div>
90330
- }
90331
- </div>
90332
- </div>
90333
- }
90334
- </div>
90335
- </div>
90336
- }
90337
- </section>
90338
- }
90339
-
90340
- <!-- FOCUS_AREA Executive Summary -->
90341
- @if (isFocusAreaAnalysis() && focusAreaExecutiveSummary(); as summary) {
90342
- <symphiq-focus-area-executive-summary
90343
- [viewMode]="viewMode()"
90344
- [summary]="summary"
90345
- [allGoals]="allGoals()"
90346
- (topPrioritiesClick)="handleTopPrioritiesClick()"
90347
- (priorityDetailClick)="handlePriorityDetailClick($event)"
90348
- />
90349
- }
90350
-
90351
- <!-- METRIC Executive Summary -->
90352
- @if (isMetricAnalysis() && metricExecutiveSummary(); as summary) {
90353
- <symphiq-metric-executive-summary
90354
- [viewMode]="viewMode()"
90355
- [summary]="summary"
90356
- [metricName]="metricName()"
90357
- [allGoals]="allGoals()"
90358
- (topPrioritiesClick)="handleMetricTopPrioritiesClick()"
90359
- (priorityDetailClick)="handleMetricPriorityDetailClick($event)"
90360
- />
90361
- }
90362
-
90363
- <!-- Divider Before First Section -->
90364
- @if (sections(); as sectionList) {
90365
- @if (sectionList.length > 0 && sectionList[0].icon) {
90366
- <symphiq-section-divider
90367
- [viewMode]="viewMode()"
90368
- [sectionIcon]="sectionList[0].icon"
90369
- />
90370
- }
90371
- }
90372
-
90373
- <!-- Profile Analysis Sections -->
90374
- @if (sections(); as sectionList) {
90375
- <section class="space-y-8">
90376
- @for (section of sectionList; track section.id; let idx = $index; let last = $last) {
90377
- <div [id]="'section-' + section.id" [ngClass]="getSectionCardClasses()"
90378
- class="rounded-xl p-8 scroll-mt-24">
90379
- <!-- Icon and Title -->
90380
- <div class="flex items-start gap-3 mb-6">
90381
- @if (section.icon) {
90382
- <div [ngClass]="getSectionIconClasses()"
90383
- class="flex-shrink-0 w-12 h-12 rounded-xl flex items-center justify-center">
90384
- <symphiq-icon [icon]="section.icon" size="w-6 h-6"></symphiq-icon>
90385
- </div>
90386
- }
90387
- <div class="flex-1">
90388
- <h3 [ngClass]="getSectionTitleClasses()" class="text-2xl font-bold">
90389
- {{ section.title }}
90390
- </h3>
90391
- </div>
90392
- </div>
90393
-
90394
- <!-- Description and Visual Side-by-Side -->
90395
- @if (section.description || (section.visual && section.visual.enabled)) {
90396
- <div class="mb-6 flex flex-col lg:flex-row gap-6 items-start"
90397
- [class.lg:flex-row-reverse]="idx % 2 === 0">
90398
- @if (section.visual && section.visual.enabled) {
90399
- <div class="w-full lg:w-2/3">
90400
- <symphiq-napkin-visual-placeholder
90401
- [visual]="section.visual"
90402
- [viewMode]="viewMode()"
90403
- />
90404
- </div>
90405
- }
90406
- @if (section.description) {
90407
- <div class="w-full"
90408
- [class.lg:w-1/3]="section.visual && section.visual.enabled" [class.lg:w-full]="!section.visual || !section.visual.enabled">
90409
- <p [ngClass]="getSectionDescriptionClasses()"
90410
- class="text-sm leading-relaxed whitespace-pre-line">
90411
- {{ section.description }}
90412
- </p>
90413
- </div>
90414
- }
90415
- </div>
90416
- }
90417
-
90418
- <!-- Section Content -->
90419
- <symphiq-profile-section-content
90420
- [section]="section"
90421
- [executiveSummary]="section.id === 'executive-summary' ? executiveSummary() : undefined"
90422
- [viewMode]="viewMode()"
90423
- [sectionIndex]="idx"
90424
- [allGoals]="allGoals()"
90425
- [allMetrics]="allMetrics()"
90426
- [allCharts]="allCharts()"
90427
- [allInsights]="allInsights()"
90428
- [businessProfile]="profile()"
90429
- />
90430
- </div>
90431
-
90432
- <!-- Section Divider (between sections) -->
90433
- @if (!last) {
90434
- <symphiq-section-divider
90435
- [viewMode]="viewMode()"
90436
- [sectionIcon]="sectionList[idx + 1].icon"
90437
- />
90438
- }
90439
- }
90440
- </section>
90441
- }
90442
- }
90443
-
90444
- </main>
90445
-
90446
- <!-- Table of Contents (Compact & Expanded Views) -->
90447
- @if (!isSimplifiedView() && sections()) {
90448
- <symphiq-floating-toc
90449
- [sections]="tocSections()"
90450
- [viewMode]="viewMode()"
90451
- [embedded]="embedded()"
90452
- [scrollElement]="scrollElement() ?? undefined"
90453
- />
90454
- }
90455
-
90456
- <!-- Section Navigation Dots (Compact & Expanded Views) -->
90457
- @if (!isSimplifiedView() && sections()) {
90458
- <symphiq-section-navigation
90459
- [sections]="tocSections()"
90460
- [viewMode]="viewMode()"
90461
- [embedded]="embedded()"
90462
- [scrollElement]="scrollElement() ?? undefined"
90463
- />
90464
- }
90465
-
90466
- <!-- Search Modal -->
90467
- <symphiq-search-modal
90468
- [isOpen]="isSearchOpen()"
90469
- [isLightMode]="isLightMode()"
90470
- (close)="closeSearch()"
90471
- />
90472
-
90473
- <!-- View Mode Switcher Modal -->
90474
- <symphiq-view-mode-switcher-modal
90475
- [isOpen]="isViewModeSwitcherOpen()"
90476
- [currentMode]="currentDisplayMode()"
90477
- [viewMode]="viewMode()"
90478
- (close)="closeViewModeSwitcher()"
90479
- (modeSelected)="handleDisplayModeChange($event)"
90480
- />
90481
-
90482
- <!-- Profile Analysis Modal -->
90483
- <symphiq-profile-analysis-modal
90484
- [isLightMode]="isLightMode()"
90485
- [allMetrics]="allMetrics()"
90486
- [allInsights]="allInsights()"
90487
- [allBusinessInsights]="allBusinessInsights()"
90488
- [allCharts]="allCharts()"
90489
- >
90490
- @if (modalType() === 'goal-detail' && getGoalDetailData(); as data) {
90491
- <symphiq-goal-card
90492
- [goal]="data.goal"
90493
- [viewMode]="data.viewMode"
90494
- [isInModal]="true"
90495
- [allMetrics]="allMetrics()"
90496
- [allCharts]="allCharts()"
90497
- [allInsights]="allInsights()"
90498
- [currentModalState]="getCurrentModalState()"
90499
- [businessProfile]="profile()"
90500
- />
90501
- }
90502
- @if (modalType() === 'goal-objectives' && getGoalDetailData(); as data) {
90503
- <symphiq-goal-objectives-modal-content
90504
- [goal]="data.goal"
90505
- [viewMode]="data.viewMode"
90506
- />
90507
- }
90508
- @if (modalType() === 'objective-strategies' && getObjectiveStrategiesData(); as data) {
90509
- <symphiq-objective-strategies-modal-content
90510
- [objective]="data.objective"
90511
- [goalTitle]="data.goalTitle"
90512
- [viewMode]="data.viewMode"
90513
- />
90514
- }
90515
- @if (modalType() === 'strategy-recommendations' && getStrategyRecommendationsData(); as data) {
90516
- <symphiq-strategy-recommendations-modal-content
90517
- [strategy]="data.strategy"
90518
- [objectiveTitle]="data.objectiveTitle"
90519
- [goalTitle]="data.goalTitle"
90520
- [viewMode]="data.viewMode"
90521
- [allMetrics]="allMetrics()"
90522
- [allCharts]="allCharts()"
90523
- [allInsights]="allInsights()"
90524
- [allBusinessInsights]="allBusinessInsights()"
90525
- [currentModalState]="getCurrentModalState()"
90526
- />
90527
- }
90528
- @if (modalType() === 'category-detail' && getCategoryDetailData(); as data) {
90529
- <symphiq-category-detail-modal-content
90530
- [category]="data.category"
90531
- [viewMode]="data.viewMode"
90532
- [scrollToSection]="data.scrollToSection"
90533
- />
90534
- }
90535
- @if (modalType() === 'strength-detail' && getStrengthDetailData(); as data) {
90536
- <symphiq-strength-detail-modal-content
90537
- [strength]="data.strength"
90538
- [viewMode]="data.viewMode"
90539
- [allFunnelStrengths]="funnelStrengths()"
90540
- [currentModalState]="getCurrentModalState()"
90541
- />
90542
- }
90543
- @if (modalType() === 'gap-detail' && getGapDetailData(); as data) {
90544
- <symphiq-gap-detail-modal-content
90545
- [gap]="data.gap"
90546
- [viewMode]="data.viewMode"
90547
- [allGoals]="allGoals()"
90548
- [allWeaknesses]="funnelWeaknesses()"
90549
- [currentModalState]="getCurrentModalState()"
90550
- />
90551
- }
90552
- @if (modalType() === 'opportunity-detail' && getOpportunityDetailData(); as data) {
90553
- <symphiq-opportunity-detail-modal-content
90554
- [opportunity]="data.opportunity"
90555
- [viewMode]="data.viewMode"
90556
- [allStrengths]="funnelStrengths()"
90557
- [currentModalState]="getCurrentModalState()"
90558
- />
90559
- }
90560
- </symphiq-profile-analysis-modal>
90561
-
90562
- <!-- Funnel Analysis Modal (for insights and metrics from profile goals) -->
90563
- <symphiq-funnel-analysis-modal
90564
- [isLightMode]="isLightMode()"
90565
- [viewMode]="viewMode()"
90566
- [allMetrics]="allMetrics()"
90567
- [allInsights]="allInsights()"
90568
- [allCharts]="allCharts()"
90569
- />
90570
-
90571
- <!-- Business Analysis Modal (for napkin visuals and other content) -->
90572
- <symphiq-business-analysis-modal [isLightMode]="isLightMode()"/>
90573
-
90574
- <!-- Tooltip Container -->
90575
- <symphiq-tooltip-container/>
90576
-
90577
- <!-- Sticky Continue Button (Only shown when not subscribed and no currency selected) -->
90578
- @if (!isSubscriptionActive() && !hasBillingCurrency() && isSimplifiedView() && !isFocusAreaAnalysis() && !isMetricAnalysis()) {
90579
- <symphiq-sticky-subscription-continue-button
90580
- [viewMode]="viewMode()"
90581
- [isEnabled]="hasCurrencySelected()"
90582
- [isLoading]="isCurrencySelectionLoading()"
90583
- (continueClick)="handleStickyButtonClick()"
90584
- />
90585
- }
90586
-
90587
- <!-- Sticky Footer for Edit Currency Mode -->
90588
- @if (isEditingCurrency()) {
90589
- <div
90590
- [ngClass]="getEditCurrencyFooterClasses()"
90591
- class="fixed bottom-0 left-0 right-0 z-50 border-t backdrop-blur-lg"
90592
- >
90593
- <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4">
90594
- <div class="flex items-center gap-4">
90595
- <button
90596
- (click)="handleCancelCurrencyEdit()"
90597
- [ngClass]="getEditCurrencyCancelButtonClasses()"
90598
- class="px-6 py-4 rounded-xl font-semibold text-lg transition-all duration-300 cursor-pointer"
90599
- >
90600
- Cancel
90601
- </button>
90602
- <button
90603
- (click)="handleContinueToPlans()"
90604
- [disabled]="!editingCurrencySelection()"
90605
- [ngClass]="getEditCurrencyContinueButtonClasses()"
90606
- class="flex-1 px-6 py-4 rounded-xl font-semibold text-lg transition-all duration-300 flex items-center justify-center gap-3 shadow-2xl"
90607
- >
90608
- <span>Continue to Plans</span>
90609
- <svg class="w-6 h-6 transition-transform duration-200" [class.translate-x-1]="editingCurrencySelection()" fill="none" stroke="currentColor" viewBox="0 0 24 24">
90610
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7l5 5m0 0l-5 5m5-5H6"></path>
90611
- </svg>
90612
- </button>
90613
- </div>
90614
- </div>
90615
- </div>
90616
- }
90617
- </div>
90017
+ template: `
90018
+ <div [ngClass]="getContainerClasses()" class="min-h-screen relative">
90019
+ <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>
90020
+
90021
+ <!-- Scroll Progress Bar -->
90022
+ <div
90023
+ [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'">
90024
+ <div
90025
+ [style.width.%]="scrollProgress()"
90026
+ [ngClass]="isLightMode() ? 'bg-gradient-to-r from-blue-500 to-purple-500' : 'bg-gradient-to-r from-blue-400 to-purple-400'"
90027
+ class="h-full transition-all duration-200 ease-out">
90028
+ </div>
90029
+ </div>
90030
+
90031
+ <div class="relative z-[51]">
90032
+ <!-- Dashboard Header -->
90033
+ <symphiq-dashboard-header
90034
+ [title]="profileAnalysis()?.profileAnalysisStructured?.businessName || 'Profile Analysis'"
90035
+ [subtitle]="getAnalysisSubtitle()"
90036
+ [currentSection]="getAnalysisSubtitle()"
90037
+ [viewMode]="viewMode()"
90038
+ [viewModeLabel]="displayModeLabel()"
90039
+ [isLoading]="isLoading()"
90040
+ [requestedByUser]="requestedByUser()"
90041
+ [createdDate]="profileAnalysis()?.selfContentCompletedDate"
90042
+ (searchClick)="openSearch()"
90043
+ (viewModeClick)="openViewModeSwitcher()"
90044
+ />
90045
+
90046
+ <!-- Journey Progress Banner -->
90047
+ @if (isSimplifiedView() && !isOnboarded()) {
90048
+ <symphiq-journey-progress-indicator
90049
+ [viewMode]="viewMode()"
90050
+ [currentStepId]="currentStepId()"
90051
+ [showNextStepAction]="shouldShowContinueButton()"
90052
+ [forDemo]="forDemo()"
90053
+ [maxAccessibleStepId]="maxAccessibleStepId()"
90054
+ (nextStepClick)="nextStepClick.emit()"
90055
+ (stepClick)="stepClick.emit($event)"
90056
+ />
90057
+ }
90058
+
90059
+ <!-- Main Content -->
90060
+ <main class="relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12 space-y-12" [class.pb-32]="shouldShowStickyButton()">
90061
+
90062
+ <!-- Welcome Banner (Simplified View Only) -->
90063
+ @if (isSimplifiedView()) {
90064
+ <div class="mb-12">
90065
+ @if (!isFocusAreaAnalysis() && !isMetricAnalysis()) {
90066
+ <symphiq-shop-welcome-banner
90067
+ [viewMode]="viewMode()"
90068
+ [businessName]="profileAnalysis()?.profileAnalysisStructured?.businessName || 'your shop'"
90069
+ [isOnboarded]="isOnboarded()"
90070
+ />
90071
+ }
90072
+ @if (isFocusAreaAnalysis()) {
90073
+ <symphiq-focus-area-welcome-banner
90074
+ [viewMode]="viewMode()"
90075
+ [focusAreaDomain]="focusAreaDomain()"
90076
+ [focusAreaName]="focusAreaName()"
90077
+ [focusAreaDetails]="focusAreaDetails()"
90078
+ />
90079
+ }
90080
+ @if (isMetricAnalysis()) {
90081
+ <symphiq-metric-welcome-banner
90082
+ [viewMode]="viewMode()"
90083
+ [metricName]="profileAnalysis()?.profileAnalysisStructured?.metricExecutiveSummary?.metric"
90084
+ [isOnboarded]="isOnboarded()"
90085
+ />
90086
+ }
90087
+ </div>
90088
+ }
90089
+
90090
+ <!-- Simplified View Content -->
90091
+ @if (isSimplifiedView()) {
90092
+ <!-- Strategic Insights & Goals (or Subscription Flow) -->
90093
+ <div class="mb-8">
90094
+ @if (isSubscriptionActive() || isFocusAreaAnalysis() || isMetricAnalysis()) {
90095
+ <symphiq-strategic-goals-tiled-grid
90096
+ [goals]="strategicRoadmapGoals()"
90097
+ [viewMode]="viewMode()"
90098
+ (viewMoreClick)="openGoalModal($event)"
90099
+ />
90100
+ } @else {
90101
+ <!-- Subscription Value Proposition -->
90102
+ @if (!hasBillingCurrency() || isEditingCurrency()) {
90103
+ @if (!hasBillingCurrency()) {
90104
+ <div class="mb-8">
90105
+ <symphiq-subscription-value-proposition-card
90106
+ [viewMode]="viewMode()"
90107
+ />
90108
+ </div>
90109
+ }
90110
+
90111
+ <!-- Currency Selection -->
90112
+ <symphiq-billing-currency-selector-card
90113
+ [viewMode]="viewMode()"
90114
+ [isLoading]="isCurrencySelectionLoading()"
90115
+ [initialCurrency]="isEditingCurrency() ? (account()?.billingCurrencyCode || null) : null"
90116
+ (currencySelected)="handleCurrencyChange($event)"
90117
+ />
90118
+ } @else if (showPlanSelection()) {
90119
+ <!-- Plan Selection -->
90120
+
90121
+ <div class="mb-32">
90122
+ <symphiq-plan-selection-container
90123
+ [viewMode]="viewMode()"
90124
+ [selectedCurrency]="account()?.billingCurrencyCode || CurrencyCodeEnum.USD"
90125
+ [planCardInfos]="planCardInfos()"
90126
+ [isLoading]="isPlanLoading()"
90127
+ [selectedPeriodUnit]="selectedPeriodUnit()"
90128
+ (periodUnitChanged)="handlePeriodUnitChange($event)"
90129
+ (planSelected)="handlePlanSelection($event)"
90130
+ (editCurrency)="handleEditCurrencyClick()"
90131
+ (checkout)="checkoutPlanClick.emit($event)"
90132
+ />
90133
+ </div>
90134
+ } @else {
90135
+ <symphiq-plan-selection-placeholder-card
90136
+ [viewMode]="viewMode()"
90137
+ [selectedCurrency]="account()?.billingCurrencyCode || CurrencyCodeEnum.USD"
90138
+ (editCurrency)="handleEditCurrencyClick()"
90139
+ />
90140
+ }
90141
+ }
90142
+ </div>
90143
+
90144
+ <!-- Supporting Business Context -->
90145
+ @if (nonStrategicSections().length > 0) {
90146
+ <div>
90147
+ <symphiq-collapsible-analysis-section-group
90148
+ [sections]="nonStrategicSections()"
90149
+ [viewMode]="viewMode()"
90150
+ [executiveSummary]="executiveSummary()"
90151
+ [focusAreaExecutiveSummary]="focusAreaExecutiveSummary()"
90152
+ [metricExecutiveSummary]="metricExecutiveSummary()"
90153
+ [metricName]="metricName()"
90154
+ [allGoals]="allGoals()"
90155
+ [allMetrics]="allMetrics()"
90156
+ [allCharts]="allCharts()"
90157
+ [allInsights]="allInsights()"
90158
+ [businessProfile]="profile()"
90159
+ />
90160
+ </div>
90161
+ }
90162
+ }
90163
+
90164
+ <!-- Compact & Expanded View Content -->
90165
+ @if (!isSimplifiedView()) {
90166
+ <!-- SHOP Executive Summary -->
90167
+ @if (!isFocusAreaAnalysis() && executiveSummary(); as summary) {
90168
+ <section id="section-executive-summary" class="space-y-6 scroll-mt-24">
90169
+ <!-- Summary Banner -->
90170
+ <div [ngClass]="getBannerClasses()" class="rounded-2xl p-8 shadow-xl">
90171
+ <div class="space-y-6">
90172
+ <div class="flex items-start justify-between gap-4">
90173
+ <div class="flex-1">
90174
+ <h2 [ngClass]="getSectionTitleClasses()" class="text-2xl font-bold mb-3">
90175
+ Executive Summary
90176
+ </h2>
90177
+ <p [ngClass]="getTextClasses()" class="text-lg leading-relaxed">
90178
+ {{ summary.gradeRationale }}
90179
+ </p>
90180
+ </div>
90181
+ @if (summary.overallGrade) {
90182
+ <symphiq-grade-badge
90183
+ [grade]="summary.overallGrade"
90184
+ [gradeRationale]="summary.gradeRationale || ''"
90185
+ [viewMode]="viewMode()"
90186
+ />
90187
+ }
90188
+ </div>
90189
+
90190
+ @if (summary.narrative) {
90191
+ <div [ngClass]="getNarrativeClasses()" class="rounded-xl p-6">
90192
+ <h3 [ngClass]="getSubheadingClasses()" class="text-lg font-semibold mb-3">
90193
+ Analysis Narrative
90194
+ </h3>
90195
+ <div class="relative">
90196
+ @if (summary.napkinVisual && summary.napkinVisual.enabled) {
90197
+ <div class="mb-6 lg:float-left lg:mr-6 lg:mb-4 lg:max-w-[66%]">
90198
+ <symphiq-napkin-visual-placeholder
90199
+ [visual]="summary.napkinVisual"
90200
+ [viewMode]="viewMode()"
90201
+ />
90202
+ </div>
90203
+ }
90204
+ <p [ngClass]="getTextClasses()" class="text-sm leading-relaxed whitespace-pre-line">
90205
+ {{ summary.narrative }}
90206
+ </p>
90207
+ <div class="clear-both"></div>
90208
+ </div>
90209
+ </div>
90210
+ }
90211
+
90212
+ <!-- Stats -->
90213
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
90214
+ <button
90215
+ type="button"
90216
+ (click)="onKeyStrengthsClick(summary)"
90217
+ [ngClass]="getKeyStrengthsStatCardClasses()"
90218
+ class="p-4 rounded-xl text-left transition-all duration-200 hover:scale-[1.02] active:scale-[0.98] group cursor-pointer">
90219
+ <div [ngClass]="getKeyStrengthsStatLabelClasses()" class="text-xs font-semibold uppercase mb-1">
90220
+ Key Strengths
90221
+ </div>
90222
+ <div [ngClass]="getKeyStrengthsStatValueClasses()" class="text-3xl font-bold mb-2">
90223
+ {{ summary.keyStrengths?.length || 0 }}
90224
+ </div>
90225
+ <div class="flex items-center gap-1.5 text-xs font-medium">
90226
+ <span [ngClass]="getKeyStrengthsButtonTextClasses()">View Details</span>
90227
+ <symphiq-icon
90228
+ [icon]="{ name: 'chevron-right', source: IconSourceEnum.HEROICONS }"
90229
+ size="w-4 h-4"
90230
+ [ngClass]="getKeyStrengthsButtonTextClasses()"
90231
+ class="transition-transform group-hover:translate-x-1"
90232
+ />
90233
+ </div>
90234
+ </button>
90235
+ <button
90236
+ type="button"
90237
+ (click)="onCriticalGapsClick(summary)"
90238
+ [ngClass]="getCriticalGapsStatCardClasses()"
90239
+ class="p-4 rounded-xl text-left transition-all duration-200 hover:scale-[1.02] active:scale-[0.98] group cursor-pointer">
90240
+ <div [ngClass]="getCriticalGapsStatLabelClasses()" class="text-xs font-semibold uppercase mb-1">
90241
+ Critical Gaps
90242
+ </div>
90243
+ <div [ngClass]="getCriticalGapsStatValueClasses()" class="text-3xl font-bold mb-2">
90244
+ {{ summary.criticalGaps?.length || 0 }}
90245
+ </div>
90246
+ <div class="flex items-center gap-1.5 text-xs font-medium">
90247
+ <span [ngClass]="getCriticalGapsButtonTextClasses()">View Details</span>
90248
+ <symphiq-icon
90249
+ [icon]="{ name: 'chevron-right', source: IconSourceEnum.HEROICONS }"
90250
+ size="w-4 h-4"
90251
+ [ngClass]="getCriticalGapsButtonTextClasses()"
90252
+ class="transition-transform group-hover:translate-x-1"
90253
+ />
90254
+ </div>
90255
+ </button>
90256
+ <button
90257
+ type="button"
90258
+ (click)="scrollToQuickWins()"
90259
+ [ngClass]="getQuickWinsStatCardClasses()"
90260
+ class="p-4 rounded-xl text-left transition-all duration-200 hover:scale-[1.02] active:scale-[0.98] group cursor-pointer">
90261
+ <div [ngClass]="getQuickWinsStatLabelClasses()" class="text-xs font-semibold uppercase mb-1">
90262
+ Quick Wins
90263
+ </div>
90264
+ <div [ngClass]="getQuickWinsStatValueClasses()" class="text-3xl font-bold mb-2">
90265
+ {{ summary.quickWins?.length || 0 }}
90266
+ </div>
90267
+ <div class="flex items-center gap-1.5 text-xs font-medium">
90268
+ <span [ngClass]="getQuickWinsButtonTextClasses()">Details Below</span>
90269
+ <symphiq-icon
90270
+ [icon]="{ name: 'chevron-down', source: IconSourceEnum.HEROICONS }"
90271
+ size="w-4 h-4"
90272
+ [ngClass]="getQuickWinsButtonTextClasses()"
90273
+ class="transition-transform group-hover:translate-y-1 animate-bounce"
90274
+ />
90275
+ </div>
90276
+ </button>
90277
+ </div>
90278
+ </div>
90279
+ </div>
90280
+
90281
+ <!-- Quick Wins -->
90282
+ @if (summary.quickWins && summary.quickWins.length > 0) {
90283
+ <div id="quick-wins-section" class="space-y-4 scroll-mt-24">
90284
+ <h3 [ngClass]="getSectionTitleClasses()" class="text-xl font-bold">
90285
+ Quick Wins
90286
+ </h3>
90287
+ <div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
90288
+ @for (win of summary.quickWins; track $index) {
90289
+ <div [ngClass]="getQuickWinCardClasses()"
90290
+ class="rounded-xl p-6 transition-all duration-300">
90291
+ <div class="space-y-4">
90292
+ <div class="flex items-start gap-3">
90293
+ <span [ngClass]="getNumberBadgeClasses()"
90294
+ class="flex-shrink-0 w-8 h-8 rounded-full flex items-center justify-center text-sm font-bold">
90295
+ {{ $index + 1 }}
90296
+ </span>
90297
+ <p [ngClass]="getQuickWinTextClasses()" class="font-semibold leading-tight flex-1">
90298
+ {{ win.action }}
90299
+ </p>
90300
+ </div>
90301
+
90302
+ <div class="flex flex-wrap gap-2">
90303
+ <span [ngClass]="getEffortBadgeClasses(win.effort)"
90304
+ class="px-3 py-1 rounded-full text-xs font-semibold">
90305
+ {{ formatLabel(win.effort) }} Effort
90306
+ </span>
90307
+ <span [ngClass]="getImpactBadgeClasses(win.impact)"
90308
+ class="px-3 py-1 rounded-full text-xs font-semibold">
90309
+ {{ formatLabel(win.impact) }} Impact
90310
+ </span>
90311
+ </div>
90312
+
90313
+ @if (win.estimatedTimeframe) {
90314
+ <div class="flex items-center gap-2 text-sm" [ngClass]="getMetaTextClasses()">
90315
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
90316
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
90317
+ d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"/>
90318
+ </svg>
90319
+ <span>{{ win.estimatedTimeframe }}</span>
90320
+ </div>
90321
+ }
90322
+
90323
+ @if (win.relatedGoalId) {
90324
+ <div class="space-y-2">
90325
+ <h4 [ngClass]="getMetaTextClasses()"
90326
+ class="text-xs font-semibold uppercase tracking-wider">
90327
+ Related Goal
90328
+ </h4>
90329
+ <symphiq-related-goal-chips
90330
+ [relatedGoalIds]="[win.relatedGoalId]"
90331
+ [allGoals]="allGoals()"
90332
+ [viewMode]="viewMode()"
90333
+ />
90334
+ </div>
90335
+ }
90336
+ </div>
90337
+ </div>
90338
+ }
90339
+ </div>
90340
+ </div>
90341
+ }
90342
+ </section>
90343
+ }
90344
+
90345
+ <!-- FOCUS_AREA Executive Summary -->
90346
+ @if (isFocusAreaAnalysis() && focusAreaExecutiveSummary(); as summary) {
90347
+ <symphiq-focus-area-executive-summary
90348
+ [viewMode]="viewMode()"
90349
+ [summary]="summary"
90350
+ [allGoals]="allGoals()"
90351
+ (topPrioritiesClick)="handleTopPrioritiesClick()"
90352
+ (priorityDetailClick)="handlePriorityDetailClick($event)"
90353
+ />
90354
+ }
90355
+
90356
+ <!-- METRIC Executive Summary -->
90357
+ @if (isMetricAnalysis() && metricExecutiveSummary(); as summary) {
90358
+ <symphiq-metric-executive-summary
90359
+ [viewMode]="viewMode()"
90360
+ [summary]="summary"
90361
+ [metricName]="metricName()"
90362
+ [allGoals]="allGoals()"
90363
+ (topPrioritiesClick)="handleMetricTopPrioritiesClick()"
90364
+ (priorityDetailClick)="handleMetricPriorityDetailClick($event)"
90365
+ />
90366
+ }
90367
+
90368
+ <!-- Divider Before First Section -->
90369
+ @if (sections(); as sectionList) {
90370
+ @if (sectionList.length > 0 && sectionList[0].icon) {
90371
+ <symphiq-section-divider
90372
+ [viewMode]="viewMode()"
90373
+ [sectionIcon]="sectionList[0].icon"
90374
+ />
90375
+ }
90376
+ }
90377
+
90378
+ <!-- Profile Analysis Sections -->
90379
+ @if (sections(); as sectionList) {
90380
+ <section class="space-y-8">
90381
+ @for (section of sectionList; track section.id; let idx = $index; let last = $last) {
90382
+ <div [id]="'section-' + section.id" [ngClass]="getSectionCardClasses()"
90383
+ class="rounded-xl p-8 scroll-mt-24">
90384
+ <!-- Icon and Title -->
90385
+ <div class="flex items-start gap-3 mb-6">
90386
+ @if (section.icon) {
90387
+ <div [ngClass]="getSectionIconClasses()"
90388
+ class="flex-shrink-0 w-12 h-12 rounded-xl flex items-center justify-center">
90389
+ <symphiq-icon [icon]="section.icon" size="w-6 h-6"></symphiq-icon>
90390
+ </div>
90391
+ }
90392
+ <div class="flex-1">
90393
+ <h3 [ngClass]="getSectionTitleClasses()" class="text-2xl font-bold">
90394
+ {{ section.title }}
90395
+ </h3>
90396
+ </div>
90397
+ </div>
90398
+
90399
+ <!-- Description and Visual Side-by-Side -->
90400
+ @if (section.description || (section.visual && section.visual.enabled)) {
90401
+ <div class="mb-6 flex flex-col lg:flex-row gap-6 items-start"
90402
+ [class.lg:flex-row-reverse]="idx % 2 === 0">
90403
+ @if (section.visual && section.visual.enabled) {
90404
+ <div class="w-full lg:w-2/3">
90405
+ <symphiq-napkin-visual-placeholder
90406
+ [visual]="section.visual"
90407
+ [viewMode]="viewMode()"
90408
+ />
90409
+ </div>
90410
+ }
90411
+ @if (section.description) {
90412
+ <div class="w-full"
90413
+ [class.lg:w-1/3]="section.visual && section.visual.enabled" [class.lg:w-full]="!section.visual || !section.visual.enabled">
90414
+ <p [ngClass]="getSectionDescriptionClasses()"
90415
+ class="text-sm leading-relaxed whitespace-pre-line">
90416
+ {{ section.description }}
90417
+ </p>
90418
+ </div>
90419
+ }
90420
+ </div>
90421
+ }
90422
+
90423
+ <!-- Section Content -->
90424
+ <symphiq-profile-section-content
90425
+ [section]="section"
90426
+ [executiveSummary]="section.id === 'executive-summary' ? executiveSummary() : undefined"
90427
+ [viewMode]="viewMode()"
90428
+ [sectionIndex]="idx"
90429
+ [allGoals]="allGoals()"
90430
+ [allMetrics]="allMetrics()"
90431
+ [allCharts]="allCharts()"
90432
+ [allInsights]="allInsights()"
90433
+ [businessProfile]="profile()"
90434
+ />
90435
+ </div>
90436
+
90437
+ <!-- Section Divider (between sections) -->
90438
+ @if (!last) {
90439
+ <symphiq-section-divider
90440
+ [viewMode]="viewMode()"
90441
+ [sectionIcon]="sectionList[idx + 1].icon"
90442
+ />
90443
+ }
90444
+ }
90445
+ </section>
90446
+ }
90447
+ }
90448
+
90449
+ </main>
90450
+
90451
+ <!-- Table of Contents (Compact & Expanded Views) -->
90452
+ @if (!isSimplifiedView() && sections()) {
90453
+ <symphiq-floating-toc
90454
+ [sections]="tocSections()"
90455
+ [viewMode]="viewMode()"
90456
+ [embedded]="embedded()"
90457
+ [scrollElement]="scrollElement() ?? undefined"
90458
+ />
90459
+ }
90460
+
90461
+ <!-- Section Navigation Dots (Compact & Expanded Views) -->
90462
+ @if (!isSimplifiedView() && sections()) {
90463
+ <symphiq-section-navigation
90464
+ [sections]="tocSections()"
90465
+ [viewMode]="viewMode()"
90466
+ [embedded]="embedded()"
90467
+ [scrollElement]="scrollElement() ?? undefined"
90468
+ />
90469
+ }
90470
+
90471
+ <!-- Search Modal -->
90472
+ <symphiq-search-modal
90473
+ [isOpen]="isSearchOpen()"
90474
+ [isLightMode]="isLightMode()"
90475
+ (close)="closeSearch()"
90476
+ />
90477
+
90478
+ <!-- View Mode Switcher Modal -->
90479
+ <symphiq-view-mode-switcher-modal
90480
+ [isOpen]="isViewModeSwitcherOpen()"
90481
+ [currentMode]="currentDisplayMode()"
90482
+ [viewMode]="viewMode()"
90483
+ (close)="closeViewModeSwitcher()"
90484
+ (modeSelected)="handleDisplayModeChange($event)"
90485
+ />
90486
+
90487
+ <!-- Profile Analysis Modal -->
90488
+ <symphiq-profile-analysis-modal
90489
+ [isLightMode]="isLightMode()"
90490
+ [allMetrics]="allMetrics()"
90491
+ [allInsights]="allInsights()"
90492
+ [allBusinessInsights]="allBusinessInsights()"
90493
+ [allCharts]="allCharts()"
90494
+ >
90495
+ @if (modalType() === 'goal-detail' && getGoalDetailData(); as data) {
90496
+ <symphiq-goal-card
90497
+ [goal]="data.goal"
90498
+ [viewMode]="data.viewMode"
90499
+ [isInModal]="true"
90500
+ [allMetrics]="allMetrics()"
90501
+ [allCharts]="allCharts()"
90502
+ [allInsights]="allInsights()"
90503
+ [currentModalState]="getCurrentModalState()"
90504
+ [businessProfile]="profile()"
90505
+ />
90506
+ }
90507
+ @if (modalType() === 'goal-objectives' && getGoalDetailData(); as data) {
90508
+ <symphiq-goal-objectives-modal-content
90509
+ [goal]="data.goal"
90510
+ [viewMode]="data.viewMode"
90511
+ />
90512
+ }
90513
+ @if (modalType() === 'objective-strategies' && getObjectiveStrategiesData(); as data) {
90514
+ <symphiq-objective-strategies-modal-content
90515
+ [objective]="data.objective"
90516
+ [goalTitle]="data.goalTitle"
90517
+ [viewMode]="data.viewMode"
90518
+ />
90519
+ }
90520
+ @if (modalType() === 'strategy-recommendations' && getStrategyRecommendationsData(); as data) {
90521
+ <symphiq-strategy-recommendations-modal-content
90522
+ [strategy]="data.strategy"
90523
+ [objectiveTitle]="data.objectiveTitle"
90524
+ [goalTitle]="data.goalTitle"
90525
+ [viewMode]="data.viewMode"
90526
+ [allMetrics]="allMetrics()"
90527
+ [allCharts]="allCharts()"
90528
+ [allInsights]="allInsights()"
90529
+ [allBusinessInsights]="allBusinessInsights()"
90530
+ [currentModalState]="getCurrentModalState()"
90531
+ />
90532
+ }
90533
+ @if (modalType() === 'category-detail' && getCategoryDetailData(); as data) {
90534
+ <symphiq-category-detail-modal-content
90535
+ [category]="data.category"
90536
+ [viewMode]="data.viewMode"
90537
+ [scrollToSection]="data.scrollToSection"
90538
+ />
90539
+ }
90540
+ @if (modalType() === 'strength-detail' && getStrengthDetailData(); as data) {
90541
+ <symphiq-strength-detail-modal-content
90542
+ [strength]="data.strength"
90543
+ [viewMode]="data.viewMode"
90544
+ [allFunnelStrengths]="funnelStrengths()"
90545
+ [currentModalState]="getCurrentModalState()"
90546
+ />
90547
+ }
90548
+ @if (modalType() === 'gap-detail' && getGapDetailData(); as data) {
90549
+ <symphiq-gap-detail-modal-content
90550
+ [gap]="data.gap"
90551
+ [viewMode]="data.viewMode"
90552
+ [allGoals]="allGoals()"
90553
+ [allWeaknesses]="funnelWeaknesses()"
90554
+ [currentModalState]="getCurrentModalState()"
90555
+ />
90556
+ }
90557
+ @if (modalType() === 'opportunity-detail' && getOpportunityDetailData(); as data) {
90558
+ <symphiq-opportunity-detail-modal-content
90559
+ [opportunity]="data.opportunity"
90560
+ [viewMode]="data.viewMode"
90561
+ [allStrengths]="funnelStrengths()"
90562
+ [currentModalState]="getCurrentModalState()"
90563
+ />
90564
+ }
90565
+ </symphiq-profile-analysis-modal>
90566
+
90567
+ <!-- Funnel Analysis Modal (for insights and metrics from profile goals) -->
90568
+ <symphiq-funnel-analysis-modal
90569
+ [isLightMode]="isLightMode()"
90570
+ [viewMode]="viewMode()"
90571
+ [allMetrics]="allMetrics()"
90572
+ [allInsights]="allInsights()"
90573
+ [allCharts]="allCharts()"
90574
+ />
90575
+
90576
+ <!-- Business Analysis Modal (for napkin visuals and other content) -->
90577
+ <symphiq-business-analysis-modal [isLightMode]="isLightMode()"/>
90578
+
90579
+ <!-- Tooltip Container -->
90580
+ <symphiq-tooltip-container/>
90581
+
90582
+ <!-- Sticky Continue Button (Only shown when not subscribed and no currency selected) -->
90583
+ @if (!isSubscriptionActive() && !hasBillingCurrency() && isSimplifiedView() && !isFocusAreaAnalysis() && !isMetricAnalysis()) {
90584
+ <symphiq-sticky-subscription-continue-button
90585
+ [viewMode]="viewMode()"
90586
+ [isEnabled]="hasCurrencySelected()"
90587
+ [isLoading]="isCurrencySelectionLoading()"
90588
+ (continueClick)="handleStickyButtonClick()"
90589
+ />
90590
+ }
90591
+
90592
+ <!-- Sticky Footer for Edit Currency Mode -->
90593
+ @if (isEditingCurrency()) {
90594
+ <div
90595
+ [ngClass]="getEditCurrencyFooterClasses()"
90596
+ class="fixed bottom-0 left-0 right-0 z-50 border-t backdrop-blur-lg"
90597
+ >
90598
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4">
90599
+ <div class="flex items-center gap-4">
90600
+ <button
90601
+ (click)="handleCancelCurrencyEdit()"
90602
+ [ngClass]="getEditCurrencyCancelButtonClasses()"
90603
+ class="px-6 py-4 rounded-xl font-semibold text-lg transition-all duration-300 cursor-pointer"
90604
+ >
90605
+ Cancel
90606
+ </button>
90607
+ <button
90608
+ (click)="handleContinueToPlans()"
90609
+ [disabled]="!editingCurrencySelection()"
90610
+ [ngClass]="getEditCurrencyContinueButtonClasses()"
90611
+ class="flex-1 px-6 py-4 rounded-xl font-semibold text-lg transition-all duration-300 flex items-center justify-center gap-3 shadow-2xl"
90612
+ >
90613
+ <span>Continue to Plans</span>
90614
+ <svg class="w-6 h-6 transition-transform duration-200" [class.translate-x-1]="editingCurrencySelection()" fill="none" stroke="currentColor" viewBox="0 0 24 24">
90615
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7l5 5m0 0l-5 5m5-5H6"></path>
90616
+ </svg>
90617
+ </button>
90618
+ </div>
90619
+ </div>
90620
+ </div>
90621
+ }
90622
+ </div>
90618
90623
  `
90619
90624
  }]
90620
90625
  }], () => [], { funnelModalComponent: [{
90621
90626
  type: ViewChild,
90622
90627
  args: [ModalComponent]
90623
- }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], requestedByUser: [{ type: i0.Input, args: [{ isSignal: true, alias: "requestedByUser", required: false }] }], createdDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "createdDate", required: false }] }], embedded: [{ type: i0.Input, args: [{ isSignal: true, alias: "embedded", required: false }] }], profileAnalysis: [{ type: i0.Input, args: [{ isSignal: true, alias: "profileAnalysis", required: false }] }], profile: [{ type: i0.Input, args: [{ isSignal: true, alias: "profile", required: false }] }], funnelAnalysis: [{ type: i0.Input, args: [{ isSignal: true, alias: "funnelAnalysis", required: false }] }], analysisType: [{ type: i0.Input, args: [{ isSignal: true, alias: "analysisType", required: false }] }], focusAreaDetails: [{ type: i0.Input, args: [{ isSignal: true, alias: "focusAreaDetails", required: false }] }], account: [{ type: i0.Input, args: [{ isSignal: true, alias: "account", required: false }] }], planCardInfos: [{ type: i0.Input, args: [{ isSignal: true, alias: "planCardInfos", required: false }] }], isOnboarded: [{ type: i0.Input, args: [{ isSignal: true, alias: "isOnboarded", 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 }] }], forDemo: [{ type: i0.Input, args: [{ isSignal: true, alias: "forDemo", required: false }] }], maxAccessibleStepId: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxAccessibleStepId", required: false }] }], stepClick: [{ type: i0.Output, args: ["stepClick"] }], nextStepClick: [{ type: i0.Output, args: ["nextStepClick"] }], currencySelectionClick: [{ type: i0.Output, args: ["currencySelectionClick"] }], editCurrencyClick: [{ type: i0.Output, args: ["editCurrencyClick"] }], periodUnitChanged: [{ type: i0.Output, args: ["periodUnitChanged"] }], planSelected: [{ type: i0.Output, args: ["planSelected"] }], onWindowScroll: [{
90628
+ }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], requestedByUser: [{ type: i0.Input, args: [{ isSignal: true, alias: "requestedByUser", required: false }] }], createdDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "createdDate", required: false }] }], embedded: [{ type: i0.Input, args: [{ isSignal: true, alias: "embedded", required: false }] }], profileAnalysis: [{ type: i0.Input, args: [{ isSignal: true, alias: "profileAnalysis", required: false }] }], profile: [{ type: i0.Input, args: [{ isSignal: true, alias: "profile", required: false }] }], funnelAnalysis: [{ type: i0.Input, args: [{ isSignal: true, alias: "funnelAnalysis", required: false }] }], analysisType: [{ type: i0.Input, args: [{ isSignal: true, alias: "analysisType", required: false }] }], focusAreaDetails: [{ type: i0.Input, args: [{ isSignal: true, alias: "focusAreaDetails", required: false }] }], account: [{ type: i0.Input, args: [{ isSignal: true, alias: "account", required: false }] }], planCardInfos: [{ type: i0.Input, args: [{ isSignal: true, alias: "planCardInfos", required: false }] }], isOnboarded: [{ type: i0.Input, args: [{ isSignal: true, alias: "isOnboarded", 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 }] }], forDemo: [{ type: i0.Input, args: [{ isSignal: true, alias: "forDemo", required: false }] }], maxAccessibleStepId: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxAccessibleStepId", required: false }] }], stepClick: [{ type: i0.Output, args: ["stepClick"] }], nextStepClick: [{ type: i0.Output, args: ["nextStepClick"] }], currencySelectionClick: [{ type: i0.Output, args: ["currencySelectionClick"] }], editCurrencyClick: [{ type: i0.Output, args: ["editCurrencyClick"] }], periodUnitChanged: [{ type: i0.Output, args: ["periodUnitChanged"] }], planSelected: [{ type: i0.Output, args: ["planSelected"] }], checkoutPlanClick: [{ type: i0.Output, args: ["checkoutPlanClick"] }], onWindowScroll: [{
90624
90629
  type: HostListener,
90625
90630
  args: ['window:scroll', ['$event']]
90626
90631
  }] }); })();
90627
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqProfileAnalysisDashboardComponent, { className: "SymphiqProfileAnalysisDashboardComponent", filePath: "lib/components/profile-analysis-dashboard/symphiq-profile-analysis-dashboard.component.ts", lineNumber: 721 }); })();
90632
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqProfileAnalysisDashboardComponent, { className: "SymphiqProfileAnalysisDashboardComponent", filePath: "lib/components/profile-analysis-dashboard/symphiq-profile-analysis-dashboard.component.ts", lineNumber: 723 }); })();
90628
90633
 
90629
90634
  class ScrollProgressBarComponent {
90630
90635
  constructor() {