@eric-emg/symphiq-components 1.3.50 → 1.3.52

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.
@@ -43910,9 +43910,9 @@ class ProfileAnalysisModalComponent {
43910
43910
  }
43911
43911
  // Check if this is from a recommendation with full hierarchy context
43912
43912
  if (metricsData.recommendationContext?.title && (metricsData.goalTitle || metricsData.objectiveTitle || metricsData.strategyTitle)) {
43913
- // Find relevant navigation stack indices
43914
- const goalDetailIdx = stack.findIndex((s) => s.type === 'goal-detail');
43915
- const objectivesIdx = stack.findIndex((s) => s.type === 'goal-objectives');
43913
+ // Find relevant navigation stack indices (check both regular and unified dashboard types)
43914
+ const goalDetailIdx = stack.findIndex((s) => s.type === 'goal-detail' || s.type === 'unified-goal-detail');
43915
+ const objectivesIdx = stack.findIndex((s) => s.type === 'goal-objectives' || s.type === 'unified-goal-objectives');
43916
43916
  const strategiesIdx = stack.findIndex((s) => s.type === 'objective-strategies');
43917
43917
  const recommendationsIdx = stack.findIndex((s) => s.type === 'strategy-recommendations');
43918
43918
  // Build full hierarchy with navigation: Goal > Objectives > Objective > Strategy > Recommendation > Related Metrics
@@ -44215,6 +44215,21 @@ class ProfileAnalysisModalComponent {
44215
44215
  }, 0);
44216
44216
  return;
44217
44217
  }
44218
+ // Close ProfileAnalysisModalComponent when navigating to unified dashboard types
44219
+ // These should be handled by UnifiedDashboardModalComponent
44220
+ const unifiedDashboardOwnedTypes = ['unified-goal-detail', 'unified-goal-objectives', 'unified-goal-related-metrics'];
44221
+ if (unifiedDashboardOwnedTypes.includes(state.type || '')) {
44222
+ console.log('[ProfileAnalysisModal] Closing - unified dashboard type detected:', state.type);
44223
+ this.isOpen.set(false);
44224
+ setTimeout(() => {
44225
+ this.modalData.set(null);
44226
+ this.modalType.set(null);
44227
+ this.modalTitle.set('');
44228
+ this.navigationStack.set([]);
44229
+ this.currentCharts.set([]);
44230
+ }, 0);
44231
+ return;
44232
+ }
44218
44233
  // Check if navigation originates from unified dashboard flow
44219
44234
  // If so, let UnifiedDashboardModalComponent handle objective-strategies and strategy-recommendations
44220
44235
  const unifiedDashboardTypes = ['objective-strategies', 'strategy-recommendations'];
@@ -44222,6 +44237,7 @@ class ProfileAnalysisModalComponent {
44222
44237
  const isFromUnifiedFlow = state.previousState?.type?.startsWith('unified-goal-') ||
44223
44238
  state.navigationStack?.some(s => s.type?.startsWith('unified-goal-'));
44224
44239
  if (isFromUnifiedFlow) {
44240
+ console.log('[ProfileAnalysisModal] Closing - unified flow detected for:', state.type);
44225
44241
  this.isOpen.set(false);
44226
44242
  setTimeout(() => {
44227
44243
  this.modalData.set(null);
@@ -44486,6 +44502,14 @@ class ProfileAnalysisModalComponent {
44486
44502
  }
44487
44503
  else if (state.type === 'metric' && state.data) {
44488
44504
  const metric = state.data;
44505
+ console.log('[ProfileAnalysisModal] Handling metric state:', {
44506
+ metricName: metric.metric,
44507
+ chartsFromState: state.charts?.length || 0,
44508
+ chartIds: state.charts?.map(c => c.performanceItemId),
44509
+ allChartsInput: this.allCharts()?.length || 0,
44510
+ navigationStackLength: state.navigationStack?.length || 0,
44511
+ navigationStackTypes: state.navigationStack?.map(s => s.type)
44512
+ });
44489
44513
  this.modalData.set(metric);
44490
44514
  const formattedName = metric.metric ? this.metricFormatter.formatMetricName(metric.metric) : 'Metric Details';
44491
44515
  this.modalTitle.set(formattedName);
@@ -101800,14 +101824,14 @@ function UnifiedTimelineComponent_Conditional_0_For_8_Conditional_11_Template(rf
101800
101824
  } }
101801
101825
  function UnifiedTimelineComponent_Conditional_0_For_8_Conditional_12_For_5_Template(rf, ctx) { if (rf & 1) {
101802
101826
  const _r4 = i0.ɵɵgetCurrentView();
101803
- i0.ɵɵelementStart(0, "div", 23);
101827
+ i0.ɵɵelementStart(0, "div", 24);
101804
101828
  i0.ɵɵlistener("click", function UnifiedTimelineComponent_Conditional_0_For_8_Conditional_12_For_5_Template_div_click_0_listener() { const goal_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onGoalChipClick(goal_r5)); });
101805
- i0.ɵɵelementStart(1, "span", 24);
101829
+ i0.ɵɵelementStart(1, "span", 25);
101806
101830
  i0.ɵɵtext(2);
101807
101831
  i0.ɵɵelementEnd();
101808
101832
  i0.ɵɵnamespaceSVG();
101809
- i0.ɵɵelementStart(3, "svg", 25);
101810
- i0.ɵɵelement(4, "path", 26);
101833
+ i0.ɵɵelementStart(3, "svg", 26);
101834
+ i0.ɵɵelement(4, "path", 27);
101811
101835
  i0.ɵɵelementEnd()();
101812
101836
  } if (rf & 2) {
101813
101837
  const goal_r5 = ctx.$implicit;
@@ -101820,8 +101844,8 @@ function UnifiedTimelineComponent_Conditional_0_For_8_Conditional_12_Template(rf
101820
101844
  i0.ɵɵelementStart(0, "div", 15)(1, "div", 17);
101821
101845
  i0.ɵɵtext(2);
101822
101846
  i0.ɵɵelementEnd();
101823
- i0.ɵɵelementStart(3, "div", 18);
101824
- i0.ɵɵrepeaterCreate(4, UnifiedTimelineComponent_Conditional_0_For_8_Conditional_12_For_5_Template, 5, 2, "div", 22, _forTrack0$b);
101847
+ i0.ɵɵelementStart(3, "div", 22);
101848
+ i0.ɵɵrepeaterCreate(4, UnifiedTimelineComponent_Conditional_0_For_8_Conditional_12_For_5_Template, 5, 2, "div", 23, _forTrack0$b);
101825
101849
  i0.ɵɵelementEnd()();
101826
101850
  } if (rf & 2) {
101827
101851
  const phase_r3 = i0.ɵɵnextContext().$implicit;
@@ -101994,7 +102018,7 @@ class UnifiedTimelineComponent {
101994
102018
  this.goalClick.emit(goal);
101995
102019
  }
101996
102020
  static { this.ɵfac = function UnifiedTimelineComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || UnifiedTimelineComponent)(); }; }
101997
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: UnifiedTimelineComponent, selectors: [["symphiq-unified-timeline"]], inputs: { timeline: [1, "timeline"], viewMode: [1, "viewMode"], goals: [1, "goals"] }, outputs: { goalClick: "goalClick" }, decls: 1, vars: 1, consts: [["id", "section-timeline", 1, "space-y-6", "scroll-mt-24"], [3, "viewMode", "sectionIcon"], ["title", "Implementation Timeline", 3, "icon", "viewMode"], [1, "rounded-2xl", "p-8", "shadow-xl", 3, "ngClass"], [1, "relative"], [1, "absolute", "left-6", "top-0", "bottom-0", "w-0.5", 3, "ngClass"], [1, "space-y-8"], [1, "relative", "pl-16", "group"], [1, "absolute", "left-4", "w-5", "h-5", "rounded-full", "border-4", "flex", "items-center", "justify-center", "transition-all", "duration-300", "group-hover:scale-125", 3, "ngClass"], [1, "w-2", "h-2", "rounded-full", 3, "ngClass"], [1, "rounded-xl", "p-5", "transition-all", "duration-300", 3, "ngClass"], [1, "flex", "items-start", "justify-between", "gap-4", "mb-3"], [1, "text-base", "font-semibold", 3, "ngClass"], [1, "px-2", "py-1", "text-xs", "font-semibold", "rounded-full", "flex-shrink-0", 3, "ngClass"], [1, "text-sm", "mb-4", 3, "ngClass"], [1, "mt-4"], [1, "absolute", "-left-[52px]", "top-0", "text-xs", "font-bold", 3, "ngClass"], [1, "text-xs", "font-semibold", "uppercase", "mb-2", 3, "ngClass"], [1, "space-y-2"], [1, "flex", "items-start", "gap-2", "text-sm", 3, "ngClass"], [1, "w-2", "h-2", "rounded-full", "mt-1.5", "flex-shrink-0", 3, "ngClass"], [1, "line-clamp-1"], [1, "goal-chip", "flex", "items-center", "justify-between", "gap-2", "px-3", "py-2", "rounded-lg", "cursor-pointer", 3, "ngClass"], [1, "goal-chip", "flex", "items-center", "justify-between", "gap-2", "px-3", "py-2", "rounded-lg", "cursor-pointer", 3, "click", "ngClass"], [1, "text-sm", "font-medium", "line-clamp-1"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4", "flex-shrink-0"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 5l7 7-7 7"]], template: function UnifiedTimelineComponent_Template(rf, ctx) { if (rf & 1) {
102021
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: UnifiedTimelineComponent, selectors: [["symphiq-unified-timeline"]], inputs: { timeline: [1, "timeline"], viewMode: [1, "viewMode"], goals: [1, "goals"] }, outputs: { goalClick: "goalClick" }, decls: 1, vars: 1, consts: [["id", "section-timeline", 1, "space-y-6", "scroll-mt-24"], [3, "viewMode", "sectionIcon"], ["title", "Implementation Timeline", 3, "icon", "viewMode"], [1, "rounded-2xl", "p-8", "shadow-xl", 3, "ngClass"], [1, "relative"], [1, "absolute", "left-6", "top-0", "bottom-0", "w-0.5", 3, "ngClass"], [1, "space-y-8"], [1, "relative", "pl-16", "group"], [1, "absolute", "left-4", "w-5", "h-5", "rounded-full", "border-4", "flex", "items-center", "justify-center", "transition-all", "duration-300", "group-hover:scale-125", 3, "ngClass"], [1, "w-2", "h-2", "rounded-full", 3, "ngClass"], [1, "rounded-xl", "p-5", "transition-all", "duration-300", 3, "ngClass"], [1, "flex", "items-start", "justify-between", "gap-4", "mb-3"], [1, "text-base", "font-semibold", 3, "ngClass"], [1, "px-2", "py-1", "text-xs", "font-semibold", "rounded-full", "flex-shrink-0", 3, "ngClass"], [1, "text-sm", "mb-4", 3, "ngClass"], [1, "mt-4"], [1, "absolute", "-left-[52px]", "top-0", "text-xs", "font-bold", "transition-all", "duration-300", "origin-right", "group-hover:scale-125", "group-hover:font-extrabold", 3, "ngClass"], [1, "text-xs", "font-semibold", "uppercase", "mb-2", 3, "ngClass"], [1, "space-y-2"], [1, "flex", "items-start", "gap-2", "text-sm", 3, "ngClass"], [1, "w-2", "h-2", "rounded-full", "mt-1.5", "flex-shrink-0", 3, "ngClass"], [1, "line-clamp-1"], [1, "space-y-3"], [1, "goal-chip", "flex", "items-center", "justify-between", "gap-2", "px-3", "py-2", "rounded-lg", "cursor-pointer", 3, "ngClass"], [1, "goal-chip", "flex", "items-center", "justify-between", "gap-2", "px-3", "py-2", "rounded-lg", "cursor-pointer", 3, "click", "ngClass"], [1, "text-sm", "font-medium", "line-clamp-1"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4", "flex-shrink-0"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 5l7 7-7 7"]], template: function UnifiedTimelineComponent_Template(rf, ctx) { if (rf & 1) {
101998
102022
  i0.ɵɵconditionalCreate(0, UnifiedTimelineComponent_Conditional_0_Template, 9, 10, "section", 0);
101999
102023
  } if (rf & 2) {
102000
102024
  i0.ɵɵconditional(ctx.phases().length > 0 ? 0 : -1);
@@ -102071,7 +102095,7 @@ class UnifiedTimelineComponent {
102071
102095
  <div [ngClass]="objectivesLabelClasses()" class="text-xs font-semibold uppercase mb-2">
102072
102096
  Related Goals ({{ getGoalsForPhase(phase).length }})
102073
102097
  </div>
102074
- <div class="space-y-2">
102098
+ <div class="space-y-3">
102075
102099
  @for (goal of getGoalsForPhase(phase); track goal.id) {
102076
102100
  <div
102077
102101
  [ngClass]="goalChipClasses()"
@@ -102087,7 +102111,7 @@ class UnifiedTimelineComponent {
102087
102111
  </div>
102088
102112
  }
102089
102113
 
102090
- <div [ngClass]="phaseIndicatorClasses()" class="absolute -left-[52px] top-0 text-xs font-bold">
102114
+ <div [ngClass]="phaseIndicatorClasses()" class="absolute -left-[52px] top-0 text-xs font-bold transition-all duration-300 origin-right group-hover:scale-125 group-hover:font-extrabold">
102091
102115
  Phase {{ idx + 1 }}
102092
102116
  </div>
102093
102117
  </div>
@@ -103163,7 +103187,7 @@ class SourceAnalysisTraceabilityComponent {
103163
103187
  }
103164
103188
  }
103165
103189
  static { this.ɵfac = function SourceAnalysisTraceabilityComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SourceAnalysisTraceabilityComponent)(); }; }
103166
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SourceAnalysisTraceabilityComponent, selectors: [["symphiq-source-analysis-traceability"]], inputs: { sourceAnalyses: [1, "sourceAnalyses"], loadedSourceAnalysisIds: [1, "loadedSourceAnalysisIds"], loadingSourceAnalysisId: [1, "loadingSourceAnalysisId"], viewMode: [1, "viewMode"], goal: [1, "goal"] }, outputs: { sourceAnalysisClick: "sourceAnalysisClick" }, decls: 1, vars: 1, consts: [[1, "p-5", "rounded-xl", 3, "ngClass"], [1, "text-sm", "font-semibold", "mb-4", "flex", "items-center", "gap-2", 3, "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", "M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"], [3, "score", "explanation", "viewMode"], [1, "grid", "grid-cols-1", "sm:grid-cols-2", "gap-3"], ["type", "button", 1, "p-4", "rounded-lg", "text-left", "transition-all", "hover:scale-[1.02]", "relative", 3, "ngClass"], ["type", "button", 1, "p-4", "rounded-lg", "text-left", "transition-all", "hover:scale-[1.02]", "relative", 3, "click", "ngClass"], [1, "absolute", "inset-0", "bg-black/10", "rounded-lg", "flex", "items-center", "justify-center"], [1, "absolute", "top-2", "right-2"], [1, "flex", "items-start", "gap-3"], [1, "w-8", "h-8", "rounded-lg", "flex", "items-center", "justify-center", "flex-shrink-0", 3, "ngClass"], [1, "flex-1", "min-w-0"], [1, "text-xs", "font-medium", "uppercase", "mb-0.5", 3, "ngClass"], [1, "text-sm", "font-medium", "truncate", 3, "ngClass"], [1, "text-xs", "mt-1", 3, "ngClass"], [1, "w-5", "h-5", "border-2", "border-current", "border-t-transparent", "rounded-full", "animate-spin"], ["fill", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4", "text-green-500"], ["d", "M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"]], template: function SourceAnalysisTraceabilityComponent_Template(rf, ctx) { if (rf & 1) {
103190
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SourceAnalysisTraceabilityComponent, selectors: [["symphiq-source-analysis-traceability"]], inputs: { sourceAnalyses: [1, "sourceAnalyses"], loadedSourceAnalysisIds: [1, "loadedSourceAnalysisIds"], loadingSourceAnalysisId: [1, "loadingSourceAnalysisId"], viewMode: [1, "viewMode"], goal: [1, "goal"] }, outputs: { sourceAnalysisClick: "sourceAnalysisClick" }, decls: 1, vars: 1, consts: [[1, "p-5", "rounded-xl", "flex", "flex-col", "gap-4", 3, "ngClass"], [1, "text-sm", "font-semibold", "flex", "items-center", "gap-2", 3, "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", "M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"], [3, "score", "explanation", "viewMode"], [1, "grid", "grid-cols-1", "sm:grid-cols-2", "gap-3"], ["type", "button", 1, "p-4", "rounded-lg", "text-left", "transition-all", "hover:scale-[1.02]", "relative", 3, "ngClass"], ["type", "button", 1, "p-4", "rounded-lg", "text-left", "transition-all", "hover:scale-[1.02]", "relative", 3, "click", "ngClass"], [1, "absolute", "inset-0", "bg-black/10", "rounded-lg", "flex", "items-center", "justify-center"], [1, "absolute", "top-2", "right-2"], [1, "flex", "items-start", "gap-3"], [1, "w-8", "h-8", "rounded-lg", "flex", "items-center", "justify-center", "flex-shrink-0", 3, "ngClass"], [1, "flex-1", "min-w-0"], [1, "text-xs", "font-medium", "uppercase", "mb-0.5", 3, "ngClass"], [1, "text-sm", "font-medium", "truncate", 3, "ngClass"], [1, "text-xs", "mt-1", 3, "ngClass"], [1, "w-5", "h-5", "border-2", "border-current", "border-t-transparent", "rounded-full", "animate-spin"], ["fill", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4", "text-green-500"], ["d", "M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"]], template: function SourceAnalysisTraceabilityComponent_Template(rf, ctx) { if (rf & 1) {
103167
103191
  i0.ɵɵconditionalCreate(0, SourceAnalysisTraceabilityComponent_Conditional_0_Template, 9, 6, "div", 0);
103168
103192
  } if (rf & 2) {
103169
103193
  let tmp_0_0;
@@ -103179,8 +103203,8 @@ class SourceAnalysisTraceabilityComponent {
103179
103203
  imports: [CommonModule, SynthesisConfidenceSectionComponent],
103180
103204
  template: `
103181
103205
  @if ((sourceAnalyses()?.length ?? 0) > 0) {
103182
- <div [ngClass]="sectionCardClasses()" class="p-5 rounded-xl">
103183
- <h4 [ngClass]="sectionTitleClasses()" class="text-sm font-semibold mb-4 flex items-center gap-2">
103206
+ <div [ngClass]="sectionCardClasses()" class="p-5 rounded-xl flex flex-col gap-4">
103207
+ <h4 [ngClass]="sectionTitleClasses()" class="text-sm font-semibold flex items-center gap-2">
103184
103208
  <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
103185
103209
  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"/>
103186
103210
  </svg>
@@ -103707,7 +103731,7 @@ function UnifiedDashboardModalComponent_Conditional_0_Conditional_23_Template(rf
103707
103731
  i0.ɵɵelement(0, "symphiq-strategy-recommendations-modal-content", 23);
103708
103732
  } if (rf & 2) {
103709
103733
  const ctx_r1 = i0.ɵɵnextContext(2);
103710
- i0.ɵɵproperty("strategy", ctx_r1.recommendationsData().strategy)("viewMode", ctx_r1.viewMode());
103734
+ i0.ɵɵproperty("strategy", ctx_r1.recommendationsData().strategy)("viewMode", ctx_r1.viewMode())("allMetrics", ctx_r1.allMetricsFromStack())("allCharts", ctx_r1.allChartsFromStack())("allInsights", ctx_r1.allInsightsFromStack())("goalTitle", ctx_r1.recommendationsData().goalTitle)("objectiveTitle", ctx_r1.recommendationsData().objectiveTitle);
103711
103735
  } }
103712
103736
  function UnifiedDashboardModalComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
103713
103737
  const _r1 = i0.ɵɵgetCurrentView();
@@ -103736,7 +103760,7 @@ function UnifiedDashboardModalComponent_Conditional_0_Template(rf, ctx) { if (rf
103736
103760
  i0.ɵɵconditionalCreate(20, UnifiedDashboardModalComponent_Conditional_0_Conditional_20_Template, 1, 4, "symphiq-goal-objectives-modal-content", 20);
103737
103761
  i0.ɵɵconditionalCreate(21, UnifiedDashboardModalComponent_Conditional_0_Conditional_21_Template, 1, 3, "symphiq-unified-goal-related-metrics-modal-content", 21);
103738
103762
  i0.ɵɵconditionalCreate(22, UnifiedDashboardModalComponent_Conditional_0_Conditional_22_Template, 1, 2, "symphiq-objective-strategies-modal-content", 22);
103739
- i0.ɵɵconditionalCreate(23, UnifiedDashboardModalComponent_Conditional_0_Conditional_23_Template, 1, 2, "symphiq-strategy-recommendations-modal-content", 23);
103763
+ i0.ɵɵconditionalCreate(23, UnifiedDashboardModalComponent_Conditional_0_Conditional_23_Template, 1, 7, "symphiq-strategy-recommendations-modal-content", 23);
103740
103764
  i0.ɵɵelementEnd()()();
103741
103765
  } if (rf & 2) {
103742
103766
  let tmp_15_0;
@@ -103838,6 +103862,66 @@ class UnifiedDashboardModalComponent {
103838
103862
  this.navigationStack = computed(() => {
103839
103863
  return this.currentModalState()?.navigationStack || [];
103840
103864
  }, ...(ngDevMode ? [{ debugName: "navigationStack" }] : []));
103865
+ this.allMetricsFromStack = computed(() => {
103866
+ const goalData = this.unifiedGoalData();
103867
+ if (goalData?.allMetrics)
103868
+ return goalData.allMetrics;
103869
+ const objData = this.objectivesData();
103870
+ if (objData?.allMetrics)
103871
+ return objData.allMetrics;
103872
+ const relatedData = this.relatedMetricsData();
103873
+ if (relatedData?.contributingMetrics)
103874
+ return relatedData.contributingMetrics;
103875
+ const stack = this.navigationStack();
103876
+ for (let i = stack.length - 1; i >= 0; i--) {
103877
+ const state = stack[i];
103878
+ if (state.type === 'unified-goal-detail' || state.type === 'unified-goal-objectives') {
103879
+ const data = state.data;
103880
+ if (data?.allMetrics)
103881
+ return data.allMetrics;
103882
+ }
103883
+ }
103884
+ return [];
103885
+ }, ...(ngDevMode ? [{ debugName: "allMetricsFromStack" }] : []));
103886
+ this.allChartsFromStack = computed(() => {
103887
+ const goalData = this.unifiedGoalData();
103888
+ if (goalData?.allCharts)
103889
+ return goalData.allCharts;
103890
+ const objData = this.objectivesData();
103891
+ if (objData?.allCharts)
103892
+ return objData.allCharts;
103893
+ const relatedData = this.relatedMetricsData();
103894
+ if (relatedData?.allCharts)
103895
+ return relatedData.allCharts;
103896
+ const stack = this.navigationStack();
103897
+ for (let i = stack.length - 1; i >= 0; i--) {
103898
+ const state = stack[i];
103899
+ if (state.type === 'unified-goal-detail' || state.type === 'unified-goal-objectives') {
103900
+ const data = state.data;
103901
+ if (data?.allCharts)
103902
+ return data.allCharts;
103903
+ }
103904
+ }
103905
+ return [];
103906
+ }, ...(ngDevMode ? [{ debugName: "allChartsFromStack" }] : []));
103907
+ this.allInsightsFromStack = computed(() => {
103908
+ const goalData = this.unifiedGoalData();
103909
+ if (goalData?.allInsights)
103910
+ return goalData.allInsights;
103911
+ const objData = this.objectivesData();
103912
+ if (objData?.allInsights)
103913
+ return objData.allInsights;
103914
+ const stack = this.navigationStack();
103915
+ for (let i = stack.length - 1; i >= 0; i--) {
103916
+ const state = stack[i];
103917
+ if (state.type === 'unified-goal-detail' || state.type === 'unified-goal-objectives') {
103918
+ const data = state.data;
103919
+ if (data?.allInsights)
103920
+ return data.allInsights;
103921
+ }
103922
+ }
103923
+ return [];
103924
+ }, ...(ngDevMode ? [{ debugName: "allInsightsFromStack" }] : []));
103841
103925
  this.loadedSourceAnalysisIdsAsNumbers = computed(() => {
103842
103926
  const data = this.unifiedGoalData();
103843
103927
  if (!data?.loadedSourceAnalysisIds)
@@ -103888,7 +103972,26 @@ class UnifiedDashboardModalComponent {
103888
103972
  clearTimeout(this.cleanupTimeoutId);
103889
103973
  this.cleanupTimeoutId = null;
103890
103974
  }
103891
- if (state.type !== 'unified-goal-detail' && state.type !== 'unified-goal-objectives' && state.type !== 'unified-goal-related-metrics' && state.type !== 'objective-strategies' && state.type !== 'strategy-recommendations' && state.type !== null) {
103975
+ const unifiedModalTypes = ['unified-goal-detail', 'unified-goal-objectives', 'unified-goal-related-metrics', 'objective-strategies', 'strategy-recommendations'];
103976
+ const isUnifiedType = unifiedModalTypes.includes(state.type || '');
103977
+ const stackableTypes = ['metrics-list', 'metric'];
103978
+ const isStackableType = stackableTypes.includes(state.type || '');
103979
+ if (!isUnifiedType && state.type !== null && !isStackableType) {
103980
+ if (this.isOpen()) {
103981
+ console.log('[UnifiedDashboardModal] Closing - transitioning to non-unified type:', state.type);
103982
+ this.isOpen.set(false);
103983
+ this.cleanupTimeoutId = setTimeout(() => {
103984
+ this.modalType.set(null);
103985
+ this.modalData.set(null);
103986
+ this.modalTitle.set('');
103987
+ this.previousState.set(null);
103988
+ this.currentModalState.set(null);
103989
+ this.cleanupTimeoutId = null;
103990
+ }, 300);
103991
+ }
103992
+ return;
103993
+ }
103994
+ if (isStackableType) {
103892
103995
  return;
103893
103996
  }
103894
103997
  this.previousState.set(state.previousState ?? null);
@@ -103956,6 +104059,14 @@ class UnifiedDashboardModalComponent {
103956
104059
  return;
103957
104060
  const contributingMetricNames = data.goal.contributingMetrics || [];
103958
104061
  const contributingMetrics = data.allMetrics.filter(m => m.metric && contributingMetricNames.includes(m.metric));
104062
+ console.log('[UnifiedDashboardModal] onContributingMetricsClick:', {
104063
+ goalTitle: data.goal.title,
104064
+ contributingMetricNames,
104065
+ contributingMetricsCount: contributingMetrics.length,
104066
+ contributingMetricsPerformanceItemIds: contributingMetrics.map(m => m.performanceItemId),
104067
+ allChartsCount: data.allCharts?.length || 0,
104068
+ allChartsPerformanceItemIds: data.allCharts?.map(c => c.performanceItemId)
104069
+ });
103959
104070
  this.modalService.navigateToUnifiedGoalRelatedMetrics(data.goal, contributingMetrics, data.allCharts, this.viewMode());
103960
104071
  }
103961
104072
  onShowObjectives() {
@@ -103968,6 +104079,14 @@ class UnifiedDashboardModalComponent {
103968
104079
  const data = this.relatedMetricsData();
103969
104080
  const allCharts = data?.allCharts || [];
103970
104081
  const metricCharts = allCharts.filter(chart => chart.performanceItemId === metric.performanceItemId);
104082
+ console.log('[UnifiedDashboardModal] onRelatedMetricClick:', {
104083
+ metricName: metric.metric,
104084
+ metricPerformanceItemId: metric.performanceItemId,
104085
+ allChartsCount: allCharts.length,
104086
+ allChartsPerformanceItemIds: allCharts.map(c => c.performanceItemId),
104087
+ filteredChartsCount: metricCharts.length,
104088
+ currentModalState: this.currentModalState()?.type
104089
+ });
103971
104090
  this.modalService.openMetricModal(metric, metricCharts, this.currentModalState() ?? undefined);
103972
104091
  }
103973
104092
  navigateToBreadcrumb(index) {
@@ -104021,7 +104140,7 @@ class UnifiedDashboardModalComponent {
104021
104140
  let _t;
104022
104141
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.modalContent = _t.first);
104023
104142
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.modalWrapper = _t.first);
104024
- } }, inputs: { viewMode: [1, "viewMode"] }, decls: 1, vars: 1, consts: [["modalWrapper", ""], ["modalContent", ""], [1, "fixed", "inset-0", "flex", "items-center", "justify-center", "p-4", "overflow-y-auto", 3, "z-index", "visibility"], [1, "fixed", "inset-0", "flex", "items-center", "justify-center", "p-4", "overflow-y-auto"], ["aria-hidden", "true", 1, "fixed", "inset-0", "backdrop-blur-sm", 3, "click", "ngClass"], [1, "relative", "w-full", "max-w-4xl", "rounded-2xl", "text-left", "overflow-hidden", "shadow-xl", "border", "backdrop-blur-xl", 3, "click", "ngClass"], [1, "px-6", "py-5", "border-b", "backdrop-blur-sm", 3, "ngClass"], [1, "flex", "items-start", "justify-between"], [1, "flex-1", "min-w-0"], [1, "flex", "items-center", "gap-1.5", "mb-2", "text-xs"], [1, "flex", "items-center", "gap-2", "mb-2"], [1, "text-xl", "font-bold", "leading-tight", 3, "ngClass"], [1, "flex", "items-center", "gap-2", "ml-4", "flex-shrink-0"], [3, "priority", "viewMode"], [3, "timeframe", "viewMode"], ["type", "button", 1, "transition-all", "rounded-lg", "p-1", "hover:scale-110", "active:scale-90", "cursor-pointer", "relative", "ml-4", "flex-shrink-0", 3, "click", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-6", "h-6"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M6 18L18 6M6 6l12 12"], [1, "px-6", "py-8", "max-h-[80vh]", "overflow-y-auto", "backdrop-blur-sm", 3, "ngClass"], [3, "goal", "allMetrics", "allCharts", "loadedSourceAnalysisIds", "loadingSourceAnalysisId", "viewMode", "currentModalState"], [3, "objectives", "goalTitle", "viewMode"], [3, "goal", "contributingMetrics", "viewMode"], [3, "objective", "viewMode"], [3, "strategy", "viewMode"], [1, "font-medium", 3, "ngClass"], ["type", "button", 1, "hover:underline", "cursor-pointer", "transition-colors", 3, "click", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-3", "h-3", "flex-shrink-0", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 5l7 7-7 7"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wider", 3, "ngClass"], [3, "sourceAnalysisClick", "metricClick", "contributingMetricsClick", "showObjectives", "close", "goal", "allMetrics", "allCharts", "loadedSourceAnalysisIds", "loadingSourceAnalysisId", "viewMode", "currentModalState"], [3, "metricClick", "goal", "contributingMetrics", "viewMode"]], template: function UnifiedDashboardModalComponent_Template(rf, ctx) { if (rf & 1) {
104143
+ } }, inputs: { viewMode: [1, "viewMode"] }, decls: 1, vars: 1, consts: [["modalWrapper", ""], ["modalContent", ""], [1, "fixed", "inset-0", "flex", "items-center", "justify-center", "p-4", "overflow-y-auto", 3, "z-index", "visibility"], [1, "fixed", "inset-0", "flex", "items-center", "justify-center", "p-4", "overflow-y-auto"], ["aria-hidden", "true", 1, "fixed", "inset-0", "backdrop-blur-sm", 3, "click", "ngClass"], [1, "relative", "w-full", "max-w-4xl", "rounded-2xl", "text-left", "overflow-hidden", "shadow-xl", "border", "backdrop-blur-xl", 3, "click", "ngClass"], [1, "px-6", "py-5", "border-b", "backdrop-blur-sm", 3, "ngClass"], [1, "flex", "items-start", "justify-between"], [1, "flex-1", "min-w-0"], [1, "flex", "items-center", "gap-1.5", "mb-2", "text-xs"], [1, "flex", "items-center", "gap-2", "mb-2"], [1, "text-xl", "font-bold", "leading-tight", 3, "ngClass"], [1, "flex", "items-center", "gap-2", "ml-4", "flex-shrink-0"], [3, "priority", "viewMode"], [3, "timeframe", "viewMode"], ["type", "button", 1, "transition-all", "rounded-lg", "p-1", "hover:scale-110", "active:scale-90", "cursor-pointer", "relative", "ml-4", "flex-shrink-0", 3, "click", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-6", "h-6"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M6 18L18 6M6 6l12 12"], [1, "px-6", "py-8", "max-h-[80vh]", "overflow-y-auto", "backdrop-blur-sm", 3, "ngClass"], [3, "goal", "allMetrics", "allCharts", "loadedSourceAnalysisIds", "loadingSourceAnalysisId", "viewMode", "currentModalState"], [3, "objectives", "goalTitle", "viewMode"], [3, "goal", "contributingMetrics", "viewMode"], [3, "objective", "viewMode"], [3, "strategy", "viewMode", "allMetrics", "allCharts", "allInsights", "goalTitle", "objectiveTitle"], [1, "font-medium", 3, "ngClass"], ["type", "button", 1, "hover:underline", "cursor-pointer", "transition-colors", 3, "click", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-3", "h-3", "flex-shrink-0", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 5l7 7-7 7"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wider", 3, "ngClass"], [3, "sourceAnalysisClick", "metricClick", "contributingMetricsClick", "showObjectives", "close", "goal", "allMetrics", "allCharts", "loadedSourceAnalysisIds", "loadingSourceAnalysisId", "viewMode", "currentModalState"], [3, "metricClick", "goal", "contributingMetrics", "viewMode"]], template: function UnifiedDashboardModalComponent_Template(rf, ctx) { if (rf & 1) {
104025
104144
  i0.ɵɵconditionalCreate(0, UnifiedDashboardModalComponent_Conditional_0_Template, 24, 27, "div", 2);
104026
104145
  } if (rf & 2) {
104027
104146
  i0.ɵɵconditional(ctx.isOpen() ? 0 : -1);
@@ -104198,6 +104317,11 @@ class UnifiedDashboardModalComponent {
104198
104317
  <symphiq-strategy-recommendations-modal-content
104199
104318
  [strategy]="recommendationsData()!.strategy"
104200
104319
  [viewMode]="viewMode()"
104320
+ [allMetrics]="allMetricsFromStack()"
104321
+ [allCharts]="allChartsFromStack()"
104322
+ [allInsights]="allInsightsFromStack()"
104323
+ [goalTitle]="recommendationsData()!.goalTitle"
104324
+ [objectiveTitle]="recommendationsData()!.objectiveTitle"
104201
104325
  />
104202
104326
  }
104203
104327
  </div>
@@ -104213,7 +104337,7 @@ class UnifiedDashboardModalComponent {
104213
104337
  type: ViewChild,
104214
104338
  args: ['modalWrapper']
104215
104339
  }] }); })();
104216
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(UnifiedDashboardModalComponent, { className: "UnifiedDashboardModalComponent", filePath: "lib/components/profile-analysis-unified-dashboard/modals/unified-dashboard-modal.component.ts", lineNumber: 195 }); })();
104340
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(UnifiedDashboardModalComponent, { className: "UnifiedDashboardModalComponent", filePath: "lib/components/profile-analysis-unified-dashboard/modals/unified-dashboard-modal.component.ts", lineNumber: 202 }); })();
104217
104341
 
104218
104342
  const _c0$7 = () => [];
104219
104343
  const _c1$3 = a0 => ({ name: "flag", source: a0 });