@eric-emg/symphiq-components 1.3.78 → 1.3.79

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.
@@ -1121,12 +1121,14 @@ class ModalService {
1121
1121
  navigationStack
1122
1122
  });
1123
1123
  }
1124
- navigateToUnifiedGoalObjectives(goal, allMetrics, allCharts, viewMode) {
1124
+ navigateToUnifiedGoalObjectives(goal, allMetrics, allCharts, viewMode, allInsights, allBusinessInsights) {
1125
1125
  const currentState = this.modalState.value;
1126
1126
  const data = {
1127
1127
  goal,
1128
1128
  allMetrics,
1129
1129
  allCharts,
1130
+ allInsights,
1131
+ allBusinessInsights,
1130
1132
  viewMode
1131
1133
  };
1132
1134
  const currentStack = currentState.navigationStack || [];
@@ -3861,8 +3863,10 @@ class GoalActionStateService {
3861
3863
  constructor() {
3862
3864
  this.statesSignal = signal({}, ...(ngDevMode ? [{ debugName: "statesSignal" }] : []));
3863
3865
  this.stateChangesSubject = new BehaviorSubject({});
3866
+ this.lastChangedGoalIdSignal = signal(null, ...(ngDevMode ? [{ debugName: "lastChangedGoalIdSignal" }] : []));
3864
3867
  this.states = this.statesSignal.asReadonly();
3865
3868
  this.stateChanges$ = this.stateChangesSubject.asObservable();
3869
+ this.lastChangedGoalId = this.lastChangedGoalIdSignal.asReadonly();
3866
3870
  this.loadFromStorage();
3867
3871
  }
3868
3872
  getState(goalId) {
@@ -3874,6 +3878,10 @@ class GoalActionStateService {
3874
3878
  this.statesSignal.set(updated);
3875
3879
  this.saveToStorage(updated);
3876
3880
  this.stateChangesSubject.next(updated);
3881
+ this.lastChangedGoalIdSignal.set(goalId);
3882
+ }
3883
+ clearLastChangedGoalId() {
3884
+ this.lastChangedGoalIdSignal.set(null);
3877
3885
  }
3878
3886
  getAllStates() {
3879
3887
  return this.statesSignal();
@@ -44819,7 +44827,7 @@ class ProfileAnalysisModalComponent {
44819
44827
  'critical-gaps-list', 'key-strength-detail', 'critical-gap-detail', 'top-priorities-list',
44820
44828
  'top-priority-detail', 'focus-area-strengths-list', 'focus-area-gaps-list',
44821
44829
  'focus-area-opportunities-list', 'focus-area-strength-detail', 'focus-area-gap-detail',
44822
- 'focus-area-opportunity-detail', 'metrics-list', 'metric', 'item-detail', null
44830
+ 'focus-area-opportunity-detail', 'metrics-list', 'metric', 'insight', 'item-detail', null
44823
44831
  ];
44824
44832
  // Only update previousState if this modal handles the type
44825
44833
  // This prevents z-index conflicts when other modals open on top
@@ -44827,13 +44835,20 @@ class ProfileAnalysisModalComponent {
44827
44835
  this.previousState.set(state.previousState || null);
44828
44836
  }
44829
44837
  // Check if this modal was opened with profile context (from Profile Analysis dashboard)
44838
+ const profileContextTypes = [
44839
+ 'focus-area-strengths-list', 'focus-area-strength-detail',
44840
+ 'focus-area-gaps-list', 'focus-area-gap-detail',
44841
+ 'focus-area-opportunities-list', 'focus-area-opportunity-detail',
44842
+ 'top-priorities-list', 'top-priority-detail',
44843
+ 'key-strengths-list', 'key-strength-detail',
44844
+ 'critical-gaps-list', 'critical-gap-detail',
44845
+ 'recommendation-insights-list', 'goal-insights-list',
44846
+ 'strategy-recommendations', 'objective-strategies', 'goal-objectives', 'goal-detail',
44847
+ 'recommendation-business-insights-list', 'goal-business-insights-list'
44848
+ ];
44830
44849
  const hasProfileContext = state.previousState &&
44831
- ['focus-area-strengths-list', 'focus-area-strength-detail',
44832
- 'focus-area-gaps-list', 'focus-area-gap-detail',
44833
- 'focus-area-opportunities-list', 'focus-area-opportunity-detail',
44834
- 'top-priorities-list', 'top-priority-detail',
44835
- 'key-strengths-list', 'key-strength-detail',
44836
- 'critical-gaps-list', 'critical-gap-detail'].includes(state.previousState.type || '');
44850
+ profileContextTypes.includes(state.previousState.type || '') ||
44851
+ state.navigationStack?.some(s => profileContextTypes.includes(s.type || ''));
44837
44852
  // Delegate funnel-related types to Funnel Analysis Modal ONLY if no profile context
44838
44853
  // Note: 'metric' is NOT delegated - it should be handled by ProfileAnalysisModalComponent
44839
44854
  const funnelTypes = ['insight', 'chart', 'charts-list', 'funnel-strengths-list', 'funnel-weaknesses-list', 'funnel-strength-detail', 'funnel-weakness-detail'];
@@ -44885,10 +44900,11 @@ class ProfileAnalysisModalComponent {
44885
44900
  this.modalData.set(data);
44886
44901
  this.modalTitle.set(data.goal.title || 'Goal');
44887
44902
  this.modalType.set('goal-detail');
44888
- const isFromUnifiedModal = state.previousState?.type?.startsWith('unified-goal-');
44889
- this.openModalFresh(isFromUnifiedModal);
44903
+ const unifiedFlowTypes = ['unified-goal-detail', 'unified-goal-objectives', 'unified-goal-related-metrics', 'objective-strategies', 'strategy-recommendations', 'priority-actions-list'];
44904
+ const isFromUnifiedModal = state.previousState?.type && unifiedFlowTypes.includes(state.previousState.type) ||
44905
+ state.navigationStack?.some(s => s.type && unifiedFlowTypes.includes(s.type));
44906
+ this.openModalFresh(!!isFromUnifiedModal);
44890
44907
  const stack = state.navigationStack || [];
44891
- console.log('[ProfileAnalysisModal] goal-detail opened, navigationStack:', stack.length, 'items', stack.map(s => s.type));
44892
44908
  this.navigationStack.set(stack);
44893
44909
  }
44894
44910
  else if (state.type === 'goal-objectives' && state.data) {
@@ -45161,6 +45177,16 @@ class ProfileAnalysisModalComponent {
45161
45177
  this.navigationStack.set(stack);
45162
45178
  this.currentCharts.set([]);
45163
45179
  }
45180
+ else if (state.type === 'insight' && state.data) {
45181
+ const insight = state.data;
45182
+ this.modalData.set(insight);
45183
+ this.modalTitle.set(insight.title || 'Insight Details');
45184
+ this.modalType.set('insight');
45185
+ this.openModalFresh();
45186
+ const stack = state.navigationStack || [];
45187
+ this.navigationStack.set(stack);
45188
+ this.currentCharts.set(state.charts || []);
45189
+ }
45164
45190
  else if (state.type === null) {
45165
45191
  this.isOpen.set(false);
45166
45192
  setTimeout(() => {
@@ -103177,6 +103203,7 @@ class GoalActionStateChipComponent {
103177
103203
  this.state = input.required(...(ngDevMode ? [{ debugName: "state" }] : []));
103178
103204
  this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
103179
103205
  this.goalId = input(...(ngDevMode ? [undefined, { debugName: "goalId" }] : []));
103206
+ this.shouldPulse = input(false, ...(ngDevMode ? [{ debugName: "shouldPulse" }] : []));
103180
103207
  this.stateChange = output();
103181
103208
  this.isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : []));
103182
103209
  this.elementRef = inject(ElementRef);
@@ -103280,7 +103307,7 @@ class GoalActionStateChipComponent {
103280
103307
  static { this.ɵfac = function GoalActionStateChipComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || GoalActionStateChipComponent)(); }; }
103281
103308
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: GoalActionStateChipComponent, selectors: [["symphiq-goal-action-state-chip"]], hostBindings: function GoalActionStateChipComponent_HostBindings(rf, ctx) { if (rf & 1) {
103282
103309
  i0.ɵɵlistener("click", function GoalActionStateChipComponent_click_HostBindingHandler($event) { return ctx.onDocumentClick($event); }, i0.ɵɵresolveDocument);
103283
- } }, inputs: { state: [1, "state"], viewMode: [1, "viewMode"], goalId: [1, "goalId"] }, outputs: { stateChange: "stateChange" }, decls: 7, vars: 6, consts: [[1, "relative", "inline-block"], ["type", "button", 1, "inline-flex", "items-center", "gap-1.5", "px-3", "py-1", "rounded-full", "text-xs", "font-semibold", "whitespace-nowrap", "cursor-pointer", "transition-all", "duration-200", "hover:scale-105", 3, "click", "ngClass"], [1, "w-2", "h-2", "rounded-full", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-3", "h-3", "transition-transform", "duration-200"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M19 9l-7 7-7-7"], [1, "absolute", "top-full", "left-0", "mt-1", "min-w-[160px]", "rounded-lg", "shadow-xl", "z-50", "py-1", "border", 3, "ngClass"], ["type", "button", 1, "w-full", "flex", "items-center", "gap-2", "px-3", "py-2", "text-xs", "font-medium", "transition-colors", "duration-150", "text-left", 3, "ngClass"], ["type", "button", 1, "w-full", "flex", "items-center", "gap-2", "px-3", "py-2", "text-xs", "font-medium", "transition-colors", "duration-150", "text-left", 3, "click", "ngClass"], [1, "w-2", "h-2", "rounded-full", "flex-shrink-0", 3, "ngClass"], [1, "flex-1"], ["fill", "currentColor", "viewBox", "0 0 20 20", 1, "w-3.5", "h-3.5", "text-blue-500"], ["fill-rule", "evenodd", "d", "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z", "clip-rule", "evenodd"]], template: function GoalActionStateChipComponent_Template(rf, ctx) { if (rf & 1) {
103310
+ } }, inputs: { state: [1, "state"], viewMode: [1, "viewMode"], goalId: [1, "goalId"], shouldPulse: [1, "shouldPulse"] }, outputs: { stateChange: "stateChange" }, decls: 7, vars: 8, consts: [[1, "relative", "inline-block"], ["type", "button", 1, "inline-flex", "items-center", "gap-1.5", "px-3", "py-1", "rounded-full", "text-xs", "font-semibold", "whitespace-nowrap", "cursor-pointer", "transition-all", "duration-200", "hover:scale-105", 3, "click", "ngClass"], [1, "w-2", "h-2", "rounded-full", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-3", "h-3", "transition-transform", "duration-200"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M19 9l-7 7-7-7"], [1, "absolute", "top-full", "left-0", "mt-1", "min-w-[160px]", "rounded-lg", "shadow-xl", "z-50", "py-1", "border", 3, "ngClass"], ["type", "button", 1, "w-full", "flex", "items-center", "gap-2", "px-3", "py-2", "text-xs", "font-medium", "transition-colors", "duration-150", "text-left", 3, "ngClass"], ["type", "button", 1, "w-full", "flex", "items-center", "gap-2", "px-3", "py-2", "text-xs", "font-medium", "transition-colors", "duration-150", "text-left", 3, "click", "ngClass"], [1, "w-2", "h-2", "rounded-full", "flex-shrink-0", 3, "ngClass"], [1, "flex-1"], ["fill", "currentColor", "viewBox", "0 0 20 20", 1, "w-3.5", "h-3.5", "text-blue-500"], ["fill-rule", "evenodd", "d", "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z", "clip-rule", "evenodd"]], template: function GoalActionStateChipComponent_Template(rf, ctx) { if (rf & 1) {
103284
103311
  i0.ɵɵelementStart(0, "div", 0)(1, "button", 1);
103285
103312
  i0.ɵɵlistener("click", function GoalActionStateChipComponent_Template_button_click_1_listener($event) { return ctx.toggleDropdown($event); });
103286
103313
  i0.ɵɵelement(2, "span", 2);
@@ -103293,6 +103320,7 @@ class GoalActionStateChipComponent {
103293
103320
  i0.ɵɵelementEnd();
103294
103321
  } if (rf & 2) {
103295
103322
  i0.ɵɵadvance();
103323
+ i0.ɵɵclassProp("animate-chip-pulse", ctx.shouldPulse());
103296
103324
  i0.ɵɵproperty("ngClass", ctx.chipClasses());
103297
103325
  i0.ɵɵadvance();
103298
103326
  i0.ɵɵproperty("ngClass", ctx.dotClasses());
@@ -103302,21 +103330,17 @@ class GoalActionStateChipComponent {
103302
103330
  i0.ɵɵclassProp("rotate-180", ctx.isOpen());
103303
103331
  i0.ɵɵadvance(2);
103304
103332
  i0.ɵɵconditional(ctx.isOpen() ? 6 : -1);
103305
- } }, dependencies: [CommonModule, i1$1.NgClass], encapsulation: 2, changeDetection: 0 }); }
103333
+ } }, dependencies: [CommonModule, i1$1.NgClass], styles: ["@keyframes _ngcontent-%COMP%_chip-pulse{0%,to{transform:scale(1);box-shadow:0 0 0 0 currentColor}50%{transform:scale(1.05);box-shadow:0 0 12px 2px currentColor}}.animate-chip-pulse[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_chip-pulse .6s ease-in-out 3}"], changeDetection: 0 }); }
103306
103334
  }
103307
103335
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(GoalActionStateChipComponent, [{
103308
103336
  type: Component,
103309
- args: [{
103310
- selector: 'symphiq-goal-action-state-chip',
103311
- standalone: true,
103312
- imports: [CommonModule],
103313
- changeDetection: ChangeDetectionStrategy.OnPush,
103314
- template: `
103337
+ args: [{ selector: 'symphiq-goal-action-state-chip', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
103315
103338
  <div class="relative inline-block">
103316
103339
  <button
103317
103340
  type="button"
103318
103341
  (click)="toggleDropdown($event)"
103319
103342
  [ngClass]="chipClasses()"
103343
+ [class.animate-chip-pulse]="shouldPulse()"
103320
103344
  class="inline-flex items-center gap-1.5 px-3 py-1 rounded-full text-xs font-semibold whitespace-nowrap cursor-pointer transition-all duration-200 hover:scale-105">
103321
103345
  <span [ngClass]="dotClasses()" class="w-2 h-2 rounded-full"></span>
103322
103346
  {{ label() }}
@@ -103345,27 +103369,85 @@ class GoalActionStateChipComponent {
103345
103369
  </div>
103346
103370
  }
103347
103371
  </div>
103348
- `
103349
- }]
103350
- }], null, { state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: true }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], goalId: [{ type: i0.Input, args: [{ isSignal: true, alias: "goalId", required: false }] }], stateChange: [{ type: i0.Output, args: ["stateChange"] }], onDocumentClick: [{
103372
+ `, styles: ["@keyframes chip-pulse{0%,to{transform:scale(1);box-shadow:0 0 0 0 currentColor}50%{transform:scale(1.05);box-shadow:0 0 12px 2px currentColor}}.animate-chip-pulse{animation:chip-pulse .6s ease-in-out 3}\n"] }]
103373
+ }], null, { state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: true }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], goalId: [{ type: i0.Input, args: [{ isSignal: true, alias: "goalId", required: false }] }], shouldPulse: [{ type: i0.Input, args: [{ isSignal: true, alias: "shouldPulse", required: false }] }], stateChange: [{ type: i0.Output, args: ["stateChange"] }], onDocumentClick: [{
103351
103374
  type: HostListener,
103352
103375
  args: ['document:click', ['$event']]
103353
103376
  }] }); })();
103354
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(GoalActionStateChipComponent, { className: "GoalActionStateChipComponent", filePath: "lib/components/shared/goal-action-state-chip.component.ts", lineNumber: 47 }); })();
103377
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(GoalActionStateChipComponent, { className: "GoalActionStateChipComponent", filePath: "lib/components/shared/goal-action-state-chip.component.ts", lineNumber: 63 }); })();
103378
+
103379
+ class ReviewButtonComponent {
103380
+ constructor() {
103381
+ this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
103382
+ this.label = input('Review Goal', ...(ngDevMode ? [{ debugName: "label" }] : []));
103383
+ this.buttonClick = output();
103384
+ this.isDark = computed(() => this.viewMode() === ViewModeEnum.DARK, ...(ngDevMode ? [{ debugName: "isDark" }] : []));
103385
+ this.buttonClasses = computed(() => {
103386
+ return 'bg-gradient-to-r from-blue-600 via-cyan-600 to-teal-600 hover:from-blue-500 hover:via-cyan-500 hover:to-teal-500 text-white border border-blue-500/30';
103387
+ }, ...(ngDevMode ? [{ debugName: "buttonClasses" }] : []));
103388
+ }
103389
+ onClick(event) {
103390
+ event.stopPropagation();
103391
+ this.buttonClick.emit();
103392
+ }
103393
+ static { this.ɵfac = function ReviewButtonComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ReviewButtonComponent)(); }; }
103394
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ReviewButtonComponent, selectors: [["symphiq-review-button"]], inputs: { viewMode: [1, "viewMode"], label: [1, "label"] }, outputs: { buttonClick: "buttonClick" }, decls: 8, vars: 2, consts: [["type", "button", 1, "w-full", "flex", "items-center", "justify-center", "gap-2", "px-4", "py-3", "rounded-xl", "text-sm", "font-semibold", "transition-all", "duration-300", "cursor-pointer", "hover:scale-[1.02]", "active:scale-[0.98]", "animate-review-pulse", 3, "click", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5", "animate-pulse"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M15 12a3 3 0 11-6 0 3 3 0 016 0z"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5", "group-hover:translate-x-1", "transition-transform"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 5l7 7-7 7"]], template: function ReviewButtonComponent_Template(rf, ctx) { if (rf & 1) {
103395
+ i0.ɵɵelementStart(0, "button", 0);
103396
+ i0.ɵɵlistener("click", function ReviewButtonComponent_Template_button_click_0_listener($event) { return ctx.onClick($event); });
103397
+ i0.ɵɵnamespaceSVG();
103398
+ i0.ɵɵelementStart(1, "svg", 1);
103399
+ i0.ɵɵelement(2, "path", 2)(3, "path", 3);
103400
+ i0.ɵɵelementEnd();
103401
+ i0.ɵɵnamespaceHTML();
103402
+ i0.ɵɵelementStart(4, "span");
103403
+ i0.ɵɵtext(5);
103404
+ i0.ɵɵelementEnd();
103405
+ i0.ɵɵnamespaceSVG();
103406
+ i0.ɵɵelementStart(6, "svg", 4);
103407
+ i0.ɵɵelement(7, "path", 5);
103408
+ i0.ɵɵelementEnd()();
103409
+ } if (rf & 2) {
103410
+ i0.ɵɵproperty("ngClass", ctx.buttonClasses());
103411
+ i0.ɵɵadvance(5);
103412
+ i0.ɵɵtextInterpolate(ctx.label());
103413
+ } }, dependencies: [CommonModule, i1$1.NgClass], styles: ["@keyframes _ngcontent-%COMP%_review-pulse{0%,to{box-shadow:0 0 #3b82f666}50%{box-shadow:0 0 0 8px #3b82f600}}.animate-review-pulse[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_review-pulse 2s ease-in-out infinite}"], changeDetection: 0 }); }
103414
+ }
103415
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ReviewButtonComponent, [{
103416
+ type: Component,
103417
+ args: [{ selector: 'symphiq-review-button', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
103418
+ <button
103419
+ type="button"
103420
+ [ngClass]="buttonClasses()"
103421
+ class="w-full flex items-center justify-center gap-2 px-4 py-3 rounded-xl text-sm font-semibold transition-all duration-300 cursor-pointer hover:scale-[1.02] active:scale-[0.98] animate-review-pulse"
103422
+ (click)="onClick($event)">
103423
+ <svg class="w-5 h-5 animate-pulse" fill="none" stroke="currentColor" viewBox="0 0 24 24">
103424
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
103425
+ d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"/>
103426
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
103427
+ d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"/>
103428
+ </svg>
103429
+ <span>{{ label() }}</span>
103430
+ <svg class="w-5 h-5 group-hover:translate-x-1 transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24">
103431
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"/>
103432
+ </svg>
103433
+ </button>
103434
+ `, styles: ["@keyframes review-pulse{0%,to{box-shadow:0 0 #3b82f666}50%{box-shadow:0 0 0 8px #3b82f600}}.animate-review-pulse{animation:review-pulse 2s ease-in-out infinite}\n"] }]
103435
+ }], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], buttonClick: [{ type: i0.Output, args: ["buttonClick"] }] }); })();
103436
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ReviewButtonComponent, { className: "ReviewButtonComponent", filePath: "lib/components/shared/review-button.component.ts", lineNumber: 42 }); })();
103355
103437
 
103356
103438
  function UnifiedGoalCardComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
103357
103439
  const _r1 = i0.ɵɵgetCurrentView();
103358
- i0.ɵɵelementStart(0, "symphiq-goal-action-state-chip", 19);
103440
+ i0.ɵɵelementStart(0, "symphiq-goal-action-state-chip", 20);
103359
103441
  i0.ɵɵlistener("stateChange", function UnifiedGoalCardComponent_Conditional_9_Template_symphiq_goal_action_state_chip_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onActionStateChange($event)); });
103360
103442
  i0.ɵɵelementEnd();
103361
103443
  } if (rf & 2) {
103362
103444
  let tmp_3_0;
103363
103445
  const ctx_r1 = i0.ɵɵnextContext();
103364
- i0.ɵɵproperty("state", ctx_r1.actionState())("viewMode", ctx_r1.viewMode())("goalId", (tmp_3_0 = ctx_r1.goal()) == null ? null : tmp_3_0.id);
103446
+ i0.ɵɵproperty("state", ctx_r1.actionState())("viewMode", ctx_r1.viewMode())("goalId", (tmp_3_0 = ctx_r1.goal()) == null ? null : tmp_3_0.id)("shouldPulse", ctx_r1.shouldPulseChip());
103365
103447
  } }
103366
103448
  function UnifiedGoalCardComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
103367
103449
  i0.ɵɵelementStart(0, "div", 10);
103368
- i0.ɵɵelement(1, "symphiq-thematic-category-badge", 20);
103450
+ i0.ɵɵelement(1, "symphiq-thematic-category-badge", 21);
103369
103451
  i0.ɵɵelementEnd();
103370
103452
  } if (rf & 2) {
103371
103453
  const ctx_r1 = i0.ɵɵnextContext();
@@ -103384,7 +103466,7 @@ function UnifiedGoalCardComponent_Conditional_13_Template(rf, ctx) { if (rf & 1)
103384
103466
  } }
103385
103467
  function UnifiedGoalCardComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
103386
103468
  i0.ɵɵelementStart(0, "div", 12);
103387
- i0.ɵɵelement(1, "symphiq-roadmap-metrics", 21);
103469
+ i0.ɵɵelement(1, "symphiq-roadmap-metrics", 22);
103388
103470
  i0.ɵɵelementEnd();
103389
103471
  } if (rf & 2) {
103390
103472
  const ctx_r1 = i0.ɵɵnextContext();
@@ -103409,11 +103491,30 @@ function UnifiedGoalCardComponent_Conditional_18_Template(rf, ctx) { if (rf & 1)
103409
103491
  const ctx_r1 = i0.ɵɵnextContext();
103410
103492
  i0.ɵɵproperty("sourceTypeCounts", ctx_r1.sourceTypeCounts())("contributingCounts", ctx_r1.contributingCounts())("viewMode", ctx_r1.viewMode());
103411
103493
  } }
103494
+ function UnifiedGoalCardComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
103495
+ const _r3 = i0.ɵɵgetCurrentView();
103496
+ i0.ɵɵelementStart(0, "symphiq-learn-more-button", 23);
103497
+ i0.ɵɵlistener("buttonClick", function UnifiedGoalCardComponent_Conditional_20_Template_symphiq_learn_more_button_buttonClick_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onLearnMoreClick()); });
103498
+ i0.ɵɵelementEnd();
103499
+ } if (rf & 2) {
103500
+ const ctx_r1 = i0.ɵɵnextContext();
103501
+ i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("variant", "button")("label", "Learn More");
103502
+ } }
103503
+ function UnifiedGoalCardComponent_Conditional_21_Template(rf, ctx) { if (rf & 1) {
103504
+ const _r4 = i0.ɵɵgetCurrentView();
103505
+ i0.ɵɵelementStart(0, "symphiq-review-button", 24);
103506
+ i0.ɵɵlistener("buttonClick", function UnifiedGoalCardComponent_Conditional_21_Template_symphiq_review_button_buttonClick_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onLearnMoreClick()); });
103507
+ i0.ɵɵelementEnd();
103508
+ } if (rf & 2) {
103509
+ const ctx_r1 = i0.ɵɵnextContext();
103510
+ i0.ɵɵproperty("viewMode", ctx_r1.viewMode())("label", "Review Goal");
103511
+ } }
103412
103512
  class UnifiedGoalCardComponent {
103413
103513
  constructor() {
103414
103514
  this.goal = input(...(ngDevMode ? [undefined, { debugName: "goal" }] : []));
103415
103515
  this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
103416
103516
  this.actionState = input(...(ngDevMode ? [undefined, { debugName: "actionState" }] : []));
103517
+ this.shouldPulseChip = input(false, ...(ngDevMode ? [{ debugName: "shouldPulseChip" }] : []));
103417
103518
  this.goalClick = output();
103418
103519
  this.sourceBadgeClick = output();
103419
103520
  this.relatedMetricsClick = output();
@@ -103565,7 +103666,7 @@ class UnifiedGoalCardComponent {
103565
103666
  this.actionStateChange.emit(event);
103566
103667
  }
103567
103668
  static { this.ɵfac = function UnifiedGoalCardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || UnifiedGoalCardComponent)(); }; }
103568
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: UnifiedGoalCardComponent, selectors: [["symphiq-unified-goal-card"]], inputs: { goal: [1, "goal"], viewMode: [1, "viewMode"], actionState: [1, "actionState"] }, outputs: { goalClick: "goalClick", sourceBadgeClick: "sourceBadgeClick", relatedMetricsClick: "relatedMetricsClick", relatedFocusAreasClick: "relatedFocusAreasClick", learnMoreClick: "learnMoreClick", actionStateChange: "actionStateChange" }, decls: 21, vars: 15, consts: [[1, "rounded-2xl", "p-6", "shadow-lg", "transition-all", "duration-200", 3, "ngClass"], [1, "flex", "items-start", "gap-4", "mb-2"], [3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 12l2 2 4-4M7.835 4.697a3.42 3.42 0 001.946-.806 3.42 3.42 0 014.438 0 3.42 3.42 0 001.946.806 3.42 3.42 0 013.138 3.138 3.42 3.42 0 00.806 1.946 3.42 3.42 0 010 4.438 3.42 3.42 0 00-.806 1.946 3.42 3.42 0 01-3.138 3.138 3.42 3.42 0 00-1.946.806 3.42 3.42 0 01-4.438 0 3.42 3.42 0 00-1.946-.806 3.42 3.42 0 01-3.138-3.138 3.42 3.42 0 00-.806-1.946 3.42 3.42 0 010-4.438 3.42 3.42 0 00.806-1.946 3.42 3.42 0 013.138-3.138z"], [1, "flex-1", "min-w-0"], [1, "flex", "items-center", "justify-between", "gap-2", "mb-1"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wider", 3, "ngClass"], [3, "state", "viewMode", "goalId"], [1, "font-semibold", "text-lg", "line-clamp-2", 3, "ngClass"], [1, "mb-3"], [1, "text-sm", "mb-4", "line-clamp-3", "cursor-help", 3, "ngClass", "libSymphiqTooltip"], [1, "mb-4"], [1, "flex", "flex-wrap", "items-center", "justify-between", "gap-3", "mb-4"], [3, "priority", "viewMode"], [3, "timeframe", "viewMode"], [3, "sourceTypeCounts", "contributingCounts", "viewMode"], [1, "mt-4"], [3, "buttonClick", "viewMode", "variant", "label"], [3, "stateChange", "state", "viewMode", "goalId"], [3, "category", "viewMode"], [3, "metrics", "viewMode"]], template: function UnifiedGoalCardComponent_Template(rf, ctx) { if (rf & 1) {
103669
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: UnifiedGoalCardComponent, selectors: [["symphiq-unified-goal-card"]], inputs: { goal: [1, "goal"], viewMode: [1, "viewMode"], actionState: [1, "actionState"], shouldPulseChip: [1, "shouldPulseChip"] }, outputs: { goalClick: "goalClick", sourceBadgeClick: "sourceBadgeClick", relatedMetricsClick: "relatedMetricsClick", relatedFocusAreasClick: "relatedFocusAreasClick", learnMoreClick: "learnMoreClick", actionStateChange: "actionStateChange" }, decls: 22, vars: 13, consts: [[1, "rounded-2xl", "p-6", "shadow-lg", "transition-all", "duration-200", 3, "ngClass"], [1, "flex", "items-start", "gap-4", "mb-2"], [3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 12l2 2 4-4M7.835 4.697a3.42 3.42 0 001.946-.806 3.42 3.42 0 014.438 0 3.42 3.42 0 001.946.806 3.42 3.42 0 013.138 3.138 3.42 3.42 0 00.806 1.946 3.42 3.42 0 010 4.438 3.42 3.42 0 00-.806 1.946 3.42 3.42 0 01-3.138 3.138 3.42 3.42 0 00-1.946.806 3.42 3.42 0 01-4.438 0 3.42 3.42 0 00-1.946-.806 3.42 3.42 0 01-3.138-3.138 3.42 3.42 0 00-.806-1.946 3.42 3.42 0 010-4.438 3.42 3.42 0 00.806-1.946 3.42 3.42 0 013.138-3.138z"], [1, "flex-1", "min-w-0"], [1, "flex", "items-center", "justify-between", "gap-2", "mb-1"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wider", 3, "ngClass"], [3, "state", "viewMode", "goalId", "shouldPulse"], [1, "font-semibold", "text-lg", "line-clamp-2", 3, "ngClass"], [1, "mb-3"], [1, "text-sm", "mb-4", "line-clamp-3", "cursor-help", 3, "ngClass", "libSymphiqTooltip"], [1, "mb-4"], [1, "flex", "flex-wrap", "items-center", "justify-between", "gap-3", "mb-4"], [3, "priority", "viewMode"], [3, "timeframe", "viewMode"], [3, "sourceTypeCounts", "contributingCounts", "viewMode"], [1, "mt-4"], [3, "viewMode", "variant", "label"], [3, "viewMode", "label"], [3, "stateChange", "state", "viewMode", "goalId", "shouldPulse"], [3, "category", "viewMode"], [3, "metrics", "viewMode"], [3, "buttonClick", "viewMode", "variant", "label"], [3, "buttonClick", "viewMode", "label"]], template: function UnifiedGoalCardComponent_Template(rf, ctx) { if (rf & 1) {
103569
103670
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2);
103570
103671
  i0.ɵɵnamespaceSVG();
103571
103672
  i0.ɵɵelementStart(3, "svg", 3);
@@ -103575,7 +103676,7 @@ class UnifiedGoalCardComponent {
103575
103676
  i0.ɵɵelementStart(5, "div", 5)(6, "div", 6)(7, "div", 7);
103576
103677
  i0.ɵɵtext(8, " Unified Goal ");
103577
103678
  i0.ɵɵelementEnd();
103578
- i0.ɵɵconditionalCreate(9, UnifiedGoalCardComponent_Conditional_9_Template, 1, 3, "symphiq-goal-action-state-chip", 8);
103679
+ i0.ɵɵconditionalCreate(9, UnifiedGoalCardComponent_Conditional_9_Template, 1, 4, "symphiq-goal-action-state-chip", 8);
103579
103680
  i0.ɵɵelementEnd();
103580
103681
  i0.ɵɵelementStart(10, "h4", 9);
103581
103682
  i0.ɵɵtext(11);
@@ -103588,9 +103689,9 @@ class UnifiedGoalCardComponent {
103588
103689
  i0.ɵɵconditionalCreate(17, UnifiedGoalCardComponent_Conditional_17_Template, 1, 2, "symphiq-timeframe-badge", 15);
103589
103690
  i0.ɵɵelementEnd();
103590
103691
  i0.ɵɵconditionalCreate(18, UnifiedGoalCardComponent_Conditional_18_Template, 1, 3, "symphiq-source-summary", 16);
103591
- i0.ɵɵelementStart(19, "div", 17)(20, "symphiq-learn-more-button", 18);
103592
- i0.ɵɵlistener("buttonClick", function UnifiedGoalCardComponent_Template_symphiq_learn_more_button_buttonClick_20_listener() { return ctx.onLearnMoreClick(); });
103593
- i0.ɵɵelementEnd()()();
103692
+ i0.ɵɵelementStart(19, "div", 17);
103693
+ i0.ɵɵconditionalCreate(20, UnifiedGoalCardComponent_Conditional_20_Template, 1, 3, "symphiq-learn-more-button", 18)(21, UnifiedGoalCardComponent_Conditional_21_Template, 1, 2, "symphiq-review-button", 19);
103694
+ i0.ɵɵelementEnd()();
103594
103695
  } if (rf & 2) {
103595
103696
  let tmp_5_0;
103596
103697
  let tmp_6_0;
@@ -103622,7 +103723,7 @@ class UnifiedGoalCardComponent {
103622
103723
  i0.ɵɵadvance();
103623
103724
  i0.ɵɵconditional((((tmp_11_0 = ctx.goal()) == null ? null : tmp_11_0.sourceAnalyses == null ? null : tmp_11_0.sourceAnalyses.length) ?? 0) > 0 || ctx.hasRelatedContext() ? 18 : -1);
103624
103725
  i0.ɵɵadvance(2);
103625
- i0.ɵɵproperty("viewMode", ctx.viewMode())("variant", "button")("label", "Learn More");
103726
+ i0.ɵɵconditional(ctx.actionState() ? 20 : 21);
103626
103727
  } }, dependencies: [CommonModule, i1$1.NgClass, PriorityBadgeComponent,
103627
103728
  TimeframeBadgeComponent,
103628
103729
  RoadmapMetricsComponent,
@@ -103630,7 +103731,8 @@ class UnifiedGoalCardComponent {
103630
103731
  SourceSummaryComponent,
103631
103732
  ThematicCategoryBadgeComponent,
103632
103733
  TooltipDirective,
103633
- GoalActionStateChipComponent], encapsulation: 2, changeDetection: 0 }); }
103734
+ GoalActionStateChipComponent,
103735
+ ReviewButtonComponent], encapsulation: 2, changeDetection: 0 }); }
103634
103736
  }
103635
103737
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(UnifiedGoalCardComponent, [{
103636
103738
  type: Component,
@@ -103646,7 +103748,8 @@ class UnifiedGoalCardComponent {
103646
103748
  SourceSummaryComponent,
103647
103749
  ThematicCategoryBadgeComponent,
103648
103750
  TooltipDirective,
103649
- GoalActionStateChipComponent
103751
+ GoalActionStateChipComponent,
103752
+ ReviewButtonComponent
103650
103753
  ],
103651
103754
  changeDetection: ChangeDetectionStrategy.OnPush,
103652
103755
  template: `
@@ -103670,6 +103773,7 @@ class UnifiedGoalCardComponent {
103670
103773
  [state]="actionState()!"
103671
103774
  [viewMode]="viewMode()"
103672
103775
  [goalId]="goal()?.id"
103776
+ [shouldPulse]="shouldPulseChip()"
103673
103777
  (stateChange)="onActionStateChange($event)"
103674
103778
  />
103675
103779
  }
@@ -103725,18 +103829,26 @@ class UnifiedGoalCardComponent {
103725
103829
  }
103726
103830
 
103727
103831
  <div class="mt-4">
103728
- <symphiq-learn-more-button
103729
- [viewMode]="viewMode()"
103730
- [variant]="'button'"
103731
- [label]="'Learn More'"
103732
- (buttonClick)="onLearnMoreClick()"
103733
- />
103832
+ @if (actionState()) {
103833
+ <symphiq-learn-more-button
103834
+ [viewMode]="viewMode()"
103835
+ [variant]="'button'"
103836
+ [label]="'Learn More'"
103837
+ (buttonClick)="onLearnMoreClick()"
103838
+ />
103839
+ } @else {
103840
+ <symphiq-review-button
103841
+ [viewMode]="viewMode()"
103842
+ [label]="'Review Goal'"
103843
+ (buttonClick)="onLearnMoreClick()"
103844
+ />
103845
+ }
103734
103846
  </div>
103735
103847
  </div>
103736
103848
  `
103737
103849
  }]
103738
- }], null, { goal: [{ type: i0.Input, args: [{ isSignal: true, alias: "goal", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], actionState: [{ type: i0.Input, args: [{ isSignal: true, alias: "actionState", required: false }] }], goalClick: [{ type: i0.Output, args: ["goalClick"] }], sourceBadgeClick: [{ type: i0.Output, args: ["sourceBadgeClick"] }], relatedMetricsClick: [{ type: i0.Output, args: ["relatedMetricsClick"] }], relatedFocusAreasClick: [{ type: i0.Output, args: ["relatedFocusAreasClick"] }], learnMoreClick: [{ type: i0.Output, args: ["learnMoreClick"] }], actionStateChange: [{ type: i0.Output, args: ["actionStateChange"] }] }); })();
103739
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(UnifiedGoalCardComponent, { className: "UnifiedGoalCardComponent", filePath: "lib/components/profile-analysis-unified-dashboard/cards/unified-goal-card.component.ts", lineNumber: 116 }); })();
103850
+ }], null, { goal: [{ type: i0.Input, args: [{ isSignal: true, alias: "goal", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], actionState: [{ type: i0.Input, args: [{ isSignal: true, alias: "actionState", required: false }] }], shouldPulseChip: [{ type: i0.Input, args: [{ isSignal: true, alias: "shouldPulseChip", required: false }] }], goalClick: [{ type: i0.Output, args: ["goalClick"] }], sourceBadgeClick: [{ type: i0.Output, args: ["sourceBadgeClick"] }], relatedMetricsClick: [{ type: i0.Output, args: ["relatedMetricsClick"] }], relatedFocusAreasClick: [{ type: i0.Output, args: ["relatedFocusAreasClick"] }], learnMoreClick: [{ type: i0.Output, args: ["learnMoreClick"] }], actionStateChange: [{ type: i0.Output, args: ["actionStateChange"] }] }); })();
103851
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(UnifiedGoalCardComponent, { className: "UnifiedGoalCardComponent", filePath: "lib/components/profile-analysis-unified-dashboard/cards/unified-goal-card.component.ts", lineNumber: 127 }); })();
103740
103852
 
103741
103853
  const _c0$9 = a0 => ({ name: "flag", source: a0 });
103742
103854
  const _forTrack0$9 = ($index, $item) => $item.id;
@@ -103748,13 +103860,13 @@ function UnifiedGoalsGridComponent_Conditional_0_For_5_Template(rf, ctx) { if (r
103748
103860
  } if (rf & 2) {
103749
103861
  const goal_r3 = ctx.$implicit;
103750
103862
  const ctx_r1 = i0.ɵɵnextContext(2);
103751
- i0.ɵɵproperty("goal", goal_r3)("viewMode", ctx_r1.viewMode())("actionState", ctx_r1.getActionState(goal_r3.id));
103863
+ i0.ɵɵproperty("goal", goal_r3)("viewMode", ctx_r1.viewMode())("actionState", ctx_r1.getActionState(goal_r3.id))("shouldPulseChip", ctx_r1.shouldPulse(goal_r3.id));
103752
103864
  } }
103753
103865
  function UnifiedGoalsGridComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
103754
103866
  i0.ɵɵelementStart(0, "section", 0);
103755
103867
  i0.ɵɵelement(1, "symphiq-section-divider", 1)(2, "symphiq-section-header", 2);
103756
103868
  i0.ɵɵelementStart(3, "div", 3);
103757
- i0.ɵɵrepeaterCreate(4, UnifiedGoalsGridComponent_Conditional_0_For_5_Template, 1, 3, "symphiq-unified-goal-card", 4, _forTrack0$9);
103869
+ i0.ɵɵrepeaterCreate(4, UnifiedGoalsGridComponent_Conditional_0_For_5_Template, 1, 4, "symphiq-unified-goal-card", 4, _forTrack0$9);
103758
103870
  i0.ɵɵelementEnd()();
103759
103871
  } if (rf & 2) {
103760
103872
  const ctx_r1 = i0.ɵɵnextContext();
@@ -103778,19 +103890,29 @@ class UnifiedGoalsGridComponent {
103778
103890
  this.goalActionStateService.states();
103779
103891
  return this.goalActionStateService.getAllStates();
103780
103892
  }, ...(ngDevMode ? [{ debugName: "states" }] : []));
103893
+ this.lastChangedGoalId = computed(() => this.goalActionStateService.lastChangedGoalId(), ...(ngDevMode ? [{ debugName: "lastChangedGoalId" }] : []));
103781
103894
  }
103782
103895
  getActionState(goalId) {
103783
103896
  if (!goalId)
103784
103897
  return undefined;
103785
103898
  return this.states()[goalId];
103786
103899
  }
103900
+ shouldPulse(goalId) {
103901
+ if (!goalId)
103902
+ return false;
103903
+ const match = this.lastChangedGoalId() === goalId;
103904
+ if (match) {
103905
+ setTimeout(() => this.goalActionStateService.clearLastChangedGoalId(), 2000);
103906
+ }
103907
+ return match;
103908
+ }
103787
103909
  onActionStateChange(event) {
103788
103910
  if (event.goalId) {
103789
103911
  this.goalActionStateService.setState(event.goalId, event.state);
103790
103912
  }
103791
103913
  }
103792
103914
  static { this.ɵfac = function UnifiedGoalsGridComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || UnifiedGoalsGridComponent)(); }; }
103793
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: UnifiedGoalsGridComponent, selectors: [["symphiq-unified-goals-grid"]], inputs: { viewMode: [1, "viewMode"], goals: [1, "goals"] }, outputs: { goalClick: "goalClick", sourceBadgeClick: "sourceBadgeClick", relatedMetricsClick: "relatedMetricsClick" }, decls: 1, vars: 1, consts: [["id", "section-unified-goals", 1, "space-y-6", "scroll-mt-24"], [3, "viewMode", "sectionIcon"], ["title", "Unified Goals", 3, "icon", "viewMode"], [1, "grid", "gap-6", 2, "grid-template-columns", "repeat(auto-fit, minmax(340px, 1fr))"], [3, "goal", "viewMode", "actionState"], [3, "goalClick", "sourceBadgeClick", "relatedMetricsClick", "learnMoreClick", "actionStateChange", "goal", "viewMode", "actionState"]], template: function UnifiedGoalsGridComponent_Template(rf, ctx) { if (rf & 1) {
103915
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: UnifiedGoalsGridComponent, selectors: [["symphiq-unified-goals-grid"]], inputs: { viewMode: [1, "viewMode"], goals: [1, "goals"] }, outputs: { goalClick: "goalClick", sourceBadgeClick: "sourceBadgeClick", relatedMetricsClick: "relatedMetricsClick" }, decls: 1, vars: 1, consts: [["id", "section-unified-goals", 1, "space-y-6", "scroll-mt-24"], [3, "viewMode", "sectionIcon"], ["title", "Unified Goals", 3, "icon", "viewMode"], [1, "grid", "gap-6", 2, "grid-template-columns", "repeat(auto-fit, minmax(340px, 1fr))"], [3, "goal", "viewMode", "actionState", "shouldPulseChip"], [3, "goalClick", "sourceBadgeClick", "relatedMetricsClick", "learnMoreClick", "actionStateChange", "goal", "viewMode", "actionState", "shouldPulseChip"]], template: function UnifiedGoalsGridComponent_Template(rf, ctx) { if (rf & 1) {
103794
103916
  i0.ɵɵconditionalCreate(0, UnifiedGoalsGridComponent_Conditional_0_Template, 6, 8, "section", 0);
103795
103917
  } if (rf & 2) {
103796
103918
  i0.ɵɵconditional(ctx.goals().length > 0 ? 0 : -1);
@@ -103830,6 +103952,7 @@ class UnifiedGoalsGridComponent {
103830
103952
  [goal]="goal"
103831
103953
  [viewMode]="viewMode()"
103832
103954
  [actionState]="getActionState(goal.id)"
103955
+ [shouldPulseChip]="shouldPulse(goal.id)"
103833
103956
  (goalClick)="goalClick.emit($event)"
103834
103957
  (sourceBadgeClick)="sourceBadgeClick.emit($event)"
103835
103958
  (relatedMetricsClick)="relatedMetricsClick.emit($event)"
@@ -103843,7 +103966,7 @@ class UnifiedGoalsGridComponent {
103843
103966
  `
103844
103967
  }]
103845
103968
  }], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], goals: [{ type: i0.Input, args: [{ isSignal: true, alias: "goals", required: false }] }], goalClick: [{ type: i0.Output, args: ["goalClick"] }], sourceBadgeClick: [{ type: i0.Output, args: ["sourceBadgeClick"] }], relatedMetricsClick: [{ type: i0.Output, args: ["relatedMetricsClick"] }] }); })();
103846
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(UnifiedGoalsGridComponent, { className: "UnifiedGoalsGridComponent", filePath: "lib/components/profile-analysis-unified-dashboard/cards/unified-goals-grid.component.ts", lineNumber: 51 }); })();
103969
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(UnifiedGoalsGridComponent, { className: "UnifiedGoalsGridComponent", filePath: "lib/components/profile-analysis-unified-dashboard/cards/unified-goals-grid.component.ts", lineNumber: 52 }); })();
103847
103970
 
103848
103971
  function SynthesisConfidenceSectionComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
103849
103972
  i0.ɵɵelementStart(0, "div", 0)(1, "h4", 1);
@@ -104850,42 +104973,41 @@ class PriorityActionsModalContentComponent {
104850
104973
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PriorityActionsModalContentComponent, { className: "PriorityActionsModalContentComponent", filePath: "lib/components/profile-analysis-unified-dashboard/modals/priority-actions-modal-content.component.ts", lineNumber: 107 }); })();
104851
104974
 
104852
104975
  const _forTrack0$6 = ($index, $item) => $item.value;
104853
- function GoalActionStateSelectorComponent_For_5_Conditional_4_Template(rf, ctx) { if (rf & 1) {
104976
+ function GoalActionStateSelectorComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
104854
104977
  i0.ɵɵnamespaceSVG();
104855
- i0.ɵɵelementStart(0, "svg", 7);
104856
- i0.ɵɵelement(1, "path", 8);
104978
+ i0.ɵɵelementStart(0, "svg", 2);
104979
+ i0.ɵɵelement(1, "path", 7)(2, "path", 8);
104980
+ i0.ɵɵelementEnd();
104981
+ } if (rf & 2) {
104982
+ const ctx_r0 = i0.ɵɵnextContext();
104983
+ i0.ɵɵproperty("ngClass", ctx_r0.promptIconClasses());
104984
+ } }
104985
+ function GoalActionStateSelectorComponent_For_7_Conditional_4_Template(rf, ctx) { if (rf & 1) {
104986
+ i0.ɵɵnamespaceSVG();
104987
+ i0.ɵɵelementStart(0, "svg", 11);
104988
+ i0.ɵɵelement(1, "path", 12);
104857
104989
  i0.ɵɵelementEnd();
104858
104990
  } }
104859
- function GoalActionStateSelectorComponent_For_5_Template(rf, ctx) { if (rf & 1) {
104860
- const _r1 = i0.ɵɵgetCurrentView();
104861
- i0.ɵɵelementStart(0, "button", 5);
104862
- i0.ɵɵlistener("click", function GoalActionStateSelectorComponent_For_5_Template_button_click_0_listener() { const option_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.selectState(option_r2.value)); });
104863
- i0.ɵɵelement(1, "span", 6);
104991
+ function GoalActionStateSelectorComponent_For_7_Template(rf, ctx) { if (rf & 1) {
104992
+ const _r2 = i0.ɵɵgetCurrentView();
104993
+ i0.ɵɵelementStart(0, "button", 9);
104994
+ i0.ɵɵlistener("click", function GoalActionStateSelectorComponent_For_7_Template_button_click_0_listener() { const option_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.selectState(option_r3.value)); });
104995
+ i0.ɵɵelement(1, "span", 10);
104864
104996
  i0.ɵɵelementStart(2, "span");
104865
104997
  i0.ɵɵtext(3);
104866
104998
  i0.ɵɵelementEnd();
104867
- i0.ɵɵconditionalCreate(4, GoalActionStateSelectorComponent_For_5_Conditional_4_Template, 2, 0, ":svg:svg", 7);
104999
+ i0.ɵɵconditionalCreate(4, GoalActionStateSelectorComponent_For_7_Conditional_4_Template, 2, 0, ":svg:svg", 11);
104868
105000
  i0.ɵɵelementEnd();
104869
105001
  } if (rf & 2) {
104870
- const option_r2 = ctx.$implicit;
104871
- const ctx_r2 = i0.ɵɵnextContext();
104872
- i0.ɵɵproperty("ngClass", ctx_r2.getButtonClasses(option_r2.value));
105002
+ const option_r3 = ctx.$implicit;
105003
+ const ctx_r0 = i0.ɵɵnextContext();
105004
+ i0.ɵɵproperty("ngClass", ctx_r0.getButtonClasses(option_r3.value));
104873
105005
  i0.ɵɵadvance();
104874
- i0.ɵɵproperty("ngClass", ctx_r2.getDotClasses(option_r2.value));
105006
+ i0.ɵɵproperty("ngClass", ctx_r0.getDotClasses(option_r3.value));
104875
105007
  i0.ɵɵadvance(2);
104876
- i0.ɵɵtextInterpolate(option_r2.label);
105008
+ i0.ɵɵtextInterpolate(option_r3.label);
104877
105009
  i0.ɵɵadvance();
104878
- i0.ɵɵconditional(ctx_r2.state() === option_r2.value ? 4 : -1);
104879
- } }
104880
- function GoalActionStateSelectorComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
104881
- i0.ɵɵelementStart(0, "div", 4);
104882
- i0.ɵɵtext(1);
104883
- i0.ɵɵelementEnd();
104884
- } if (rf & 2) {
104885
- const ctx_r2 = i0.ɵɵnextContext();
104886
- i0.ɵɵproperty("ngClass", ctx_r2.hintClasses());
104887
- i0.ɵɵadvance();
104888
- i0.ɵɵtextInterpolate1(" ", ctx_r2.getHintText(), " ");
105010
+ i0.ɵɵconditional(ctx_r0.state() === option_r3.value ? 4 : -1);
104889
105011
  } }
104890
105012
  class GoalActionStateSelectorComponent {
104891
105013
  constructor() {
@@ -104899,10 +105021,27 @@ class GoalActionStateSelectorComponent {
104899
105021
  { value: GoalActionStateEnum.SKIP, label: 'Skip' }
104900
105022
  ];
104901
105023
  this.isDark = computed(() => this.viewMode() === ViewModeEnum.DARK, ...(ngDevMode ? [{ debugName: "isDark" }] : []));
105024
+ this.containerClasses = computed(() => {
105025
+ if (!this.state()) {
105026
+ return this.isDark()
105027
+ ? 'bg-gradient-to-r from-blue-900/30 via-cyan-900/30 to-teal-900/30 border-2 border-blue-500/50 animate-attention-pulse'
105028
+ : 'bg-gradient-to-r from-blue-50 via-cyan-50 to-teal-50 border-2 border-blue-400/50 animate-attention-pulse';
105029
+ }
105030
+ return this.isDark() ? 'bg-slate-800/30' : 'bg-slate-50/50';
105031
+ }, ...(ngDevMode ? [{ debugName: "containerClasses" }] : []));
105032
+ this.promptIconClasses = computed(() => {
105033
+ return this.isDark() ? 'text-blue-400 animate-pulse' : 'text-blue-600 animate-pulse';
105034
+ }, ...(ngDevMode ? [{ debugName: "promptIconClasses" }] : []));
104902
105035
  this.labelClasses = computed(() => {
105036
+ if (!this.state()) {
105037
+ return this.isDark() ? 'text-blue-300 font-bold' : 'text-blue-700 font-bold';
105038
+ }
104903
105039
  return this.isDark() ? 'text-slate-400' : 'text-slate-500';
104904
105040
  }, ...(ngDevMode ? [{ debugName: "labelClasses" }] : []));
104905
105041
  this.hintClasses = computed(() => {
105042
+ if (!this.state()) {
105043
+ return this.isDark() ? 'text-slate-400' : 'text-slate-500';
105044
+ }
104906
105045
  return this.isDark() ? 'text-slate-500' : 'text-slate-400';
104907
105046
  }, ...(ngDevMode ? [{ debugName: "hintClasses" }] : []));
104908
105047
  }
@@ -104955,50 +105094,63 @@ class GoalActionStateSelectorComponent {
104955
105094
  case GoalActionStateEnum.SKIP:
104956
105095
  return 'This goal will be marked as not applicable to your current focus.';
104957
105096
  default:
104958
- return '';
105097
+ return 'Select how you want to handle this goal to continue your review.';
104959
105098
  }
104960
105099
  }
104961
105100
  selectState(value) {
104962
105101
  this.stateChange.emit({ goalId: this.goalId(), state: value });
104963
105102
  }
104964
105103
  static { this.ɵfac = function GoalActionStateSelectorComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || GoalActionStateSelectorComponent)(); }; }
104965
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: GoalActionStateSelectorComponent, selectors: [["symphiq-goal-action-state-selector"]], inputs: { state: [1, "state"], viewMode: [1, "viewMode"], goalId: [1, "goalId"] }, outputs: { stateChange: "stateChange" }, decls: 7, vars: 2, consts: [[1, "flex", "flex-col", "gap-3"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wider", 3, "ngClass"], [1, "flex", "flex-wrap", "gap-3"], ["type", "button", 1, "flex", "items-center", "gap-2", "px-4", "py-2.5", "rounded-xl", "font-medium", "text-sm", "transition-all", "duration-200", "border", "cursor-pointer", 3, "ngClass"], [1, "text-xs", "mt-1", 3, "ngClass"], ["type", "button", 1, "flex", "items-center", "gap-2", "px-4", "py-2.5", "rounded-xl", "font-medium", "text-sm", "transition-all", "duration-200", "border", "cursor-pointer", 3, "click", "ngClass"], [1, "w-3", "h-3", "rounded-full", "flex-shrink-0", 3, "ngClass"], ["fill", "currentColor", "viewBox", "0 0 20 20", 1, "w-4", "h-4", "ml-1"], ["fill-rule", "evenodd", "d", "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z", "clip-rule", "evenodd"]], template: function GoalActionStateSelectorComponent_Template(rf, ctx) { if (rf & 1) {
105104
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: GoalActionStateSelectorComponent, selectors: [["symphiq-goal-action-state-selector"]], inputs: { state: [1, "state"], viewMode: [1, "viewMode"], goalId: [1, "goalId"] }, outputs: { stateChange: "stateChange" }, decls: 10, vars: 6, consts: [[1, "flex", "flex-col", "gap-3", "p-4", "rounded-xl", "transition-all", "duration-300", 3, "ngClass"], [1, "flex", "items-center", "gap-2"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5", "flex-shrink-0", 3, "ngClass"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wider", 3, "ngClass"], [1, "flex", "flex-col", "sm:flex-row", "sm:flex-wrap", "gap-2", "sm:gap-3"], ["type", "button", 1, "flex", "items-center", "justify-center", "sm:justify-start", "gap-2", "px-4", "py-2.5", "rounded-xl", "font-medium", "text-sm", "transition-all", "duration-200", "border", "cursor-pointer", "w-full", "sm:w-auto", 3, "ngClass"], [1, "text-xs", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M15 12a3 3 0 11-6 0 3 3 0 016 0z"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"], ["type", "button", 1, "flex", "items-center", "justify-center", "sm:justify-start", "gap-2", "px-4", "py-2.5", "rounded-xl", "font-medium", "text-sm", "transition-all", "duration-200", "border", "cursor-pointer", "w-full", "sm:w-auto", 3, "click", "ngClass"], [1, "w-3", "h-3", "rounded-full", "flex-shrink-0", 3, "ngClass"], ["fill", "currentColor", "viewBox", "0 0 20 20", 1, "w-4", "h-4", "ml-1"], ["fill-rule", "evenodd", "d", "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z", "clip-rule", "evenodd"]], template: function GoalActionStateSelectorComponent_Template(rf, ctx) { if (rf & 1) {
104966
105105
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
104967
- i0.ɵɵtext(2, " What would you like to do with this goal? ");
104968
- i0.ɵɵelementEnd();
104969
- i0.ɵɵelementStart(3, "div", 2);
104970
- i0.ɵɵrepeaterCreate(4, GoalActionStateSelectorComponent_For_5_Template, 5, 4, "button", 3, _forTrack0$6);
104971
- i0.ɵɵelementEnd();
104972
- i0.ɵɵconditionalCreate(6, GoalActionStateSelectorComponent_Conditional_6_Template, 2, 2, "div", 4);
105106
+ i0.ɵɵconditionalCreate(2, GoalActionStateSelectorComponent_Conditional_2_Template, 3, 1, ":svg:svg", 2);
105107
+ i0.ɵɵelementStart(3, "div", 3);
105108
+ i0.ɵɵtext(4);
105109
+ i0.ɵɵelementEnd()();
105110
+ i0.ɵɵelementStart(5, "div", 4);
105111
+ i0.ɵɵrepeaterCreate(6, GoalActionStateSelectorComponent_For_7_Template, 5, 4, "button", 5, _forTrack0$6);
104973
105112
  i0.ɵɵelementEnd();
105113
+ i0.ɵɵelementStart(8, "div", 6);
105114
+ i0.ɵɵtext(9);
105115
+ i0.ɵɵelementEnd()();
104974
105116
  } if (rf & 2) {
105117
+ i0.ɵɵproperty("ngClass", ctx.containerClasses());
105118
+ i0.ɵɵadvance(2);
105119
+ i0.ɵɵconditional(!ctx.state() ? 2 : -1);
104975
105120
  i0.ɵɵadvance();
104976
105121
  i0.ɵɵproperty("ngClass", ctx.labelClasses());
104977
- i0.ɵɵadvance(3);
105122
+ i0.ɵɵadvance();
105123
+ i0.ɵɵtextInterpolate1(" ", !ctx.state() ? "Choose an action for this goal" : "What would you like to do with this goal?", " ");
105124
+ i0.ɵɵadvance(2);
104978
105125
  i0.ɵɵrepeater(ctx.options);
104979
105126
  i0.ɵɵadvance(2);
104980
- i0.ɵɵconditional(ctx.state() ? 6 : -1);
104981
- } }, dependencies: [CommonModule, i1$1.NgClass], encapsulation: 2, changeDetection: 0 }); }
105127
+ i0.ɵɵproperty("ngClass", ctx.hintClasses());
105128
+ i0.ɵɵadvance();
105129
+ i0.ɵɵtextInterpolate1(" ", ctx.getHintText(), " ");
105130
+ } }, dependencies: [CommonModule, i1$1.NgClass], styles: ["@keyframes _ngcontent-%COMP%_attention-pulse{0%,to{box-shadow:0 0 #3b82f680}50%{box-shadow:0 0 0 6px #3b82f600}}.animate-attention-pulse[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_attention-pulse 2s ease-in-out infinite}"], changeDetection: 0 }); }
104982
105131
  }
104983
105132
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(GoalActionStateSelectorComponent, [{
104984
105133
  type: Component,
104985
- args: [{
104986
- selector: 'symphiq-goal-action-state-selector',
104987
- standalone: true,
104988
- imports: [CommonModule],
104989
- changeDetection: ChangeDetectionStrategy.OnPush,
104990
- template: `
104991
- <div class="flex flex-col gap-3">
104992
- <div [ngClass]="labelClasses()" class="text-xs font-semibold uppercase tracking-wider">
104993
- What would you like to do with this goal?
105134
+ args: [{ selector: 'symphiq-goal-action-state-selector', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
105135
+ <div [ngClass]="containerClasses()" class="flex flex-col gap-3 p-4 rounded-xl transition-all duration-300">
105136
+ <div class="flex items-center gap-2">
105137
+ @if (!state()) {
105138
+ <svg [ngClass]="promptIconClasses()" class="w-5 h-5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
105139
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"/>
105140
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"/>
105141
+ </svg>
105142
+ }
105143
+ <div [ngClass]="labelClasses()" class="text-xs font-semibold uppercase tracking-wider">
105144
+ {{ !state() ? 'Choose an action for this goal' : 'What would you like to do with this goal?' }}
105145
+ </div>
104994
105146
  </div>
104995
- <div class="flex flex-wrap gap-3">
105147
+ <div class="flex flex-col sm:flex-row sm:flex-wrap gap-2 sm:gap-3">
104996
105148
  @for (option of options; track option.value) {
104997
105149
  <button
104998
105150
  type="button"
104999
105151
  (click)="selectState(option.value)"
105000
105152
  [ngClass]="getButtonClasses(option.value)"
105001
- class="flex items-center gap-2 px-4 py-2.5 rounded-xl font-medium text-sm transition-all duration-200 border cursor-pointer">
105153
+ class="flex items-center justify-center sm:justify-start gap-2 px-4 py-2.5 rounded-xl font-medium text-sm transition-all duration-200 border cursor-pointer w-full sm:w-auto">
105002
105154
  <span [ngClass]="getDotClasses(option.value)" class="w-3 h-3 rounded-full flex-shrink-0"></span>
105003
105155
  <span>{{ option.label }}</span>
105004
105156
  @if (state() === option.value) {
@@ -105009,16 +105161,13 @@ class GoalActionStateSelectorComponent {
105009
105161
  </button>
105010
105162
  }
105011
105163
  </div>
105012
- @if (state()) {
105013
- <div [ngClass]="hintClasses()" class="text-xs mt-1">
105014
- {{ getHintText() }}
105015
- </div>
105016
- }
105164
+ <div [ngClass]="hintClasses()" class="text-xs">
105165
+ {{ getHintText() }}
105166
+ </div>
105017
105167
  </div>
105018
- `
105019
- }]
105168
+ `, styles: ["@keyframes attention-pulse{0%,to{box-shadow:0 0 #3b82f680}50%{box-shadow:0 0 0 6px #3b82f600}}.animate-attention-pulse{animation:attention-pulse 2s ease-in-out infinite}\n"] }]
105020
105169
  }], null, { state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], goalId: [{ type: i0.Input, args: [{ isSignal: true, alias: "goalId", required: false }] }], stateChange: [{ type: i0.Output, args: ["stateChange"] }] }); })();
105021
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(GoalActionStateSelectorComponent, { className: "GoalActionStateSelectorComponent", filePath: "lib/components/shared/goal-action-state-selector.component.ts", lineNumber: 41 }); })();
105170
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(GoalActionStateSelectorComponent, { className: "GoalActionStateSelectorComponent", filePath: "lib/components/shared/goal-action-state-selector.component.ts", lineNumber: 60 }); })();
105022
105171
 
105023
105172
  const _c0$8 = ["modalContent"];
105024
105173
  const _c1$3 = ["modalWrapper"];
@@ -105313,6 +105462,7 @@ class UnifiedDashboardModalComponent {
105313
105462
  this.modalReady = signal(false, ...(ngDevMode ? [{ debugName: "modalReady" }] : []));
105314
105463
  this.isFreshOpen = signal(true, ...(ngDevMode ? [{ debugName: "isFreshOpen" }] : []));
105315
105464
  this.modalMovedToBody = false;
105465
+ this.initialGoalActionState = signal(null, ...(ngDevMode ? [{ debugName: "initialGoalActionState" }] : []));
105316
105466
  this.modalTitle = signal('', ...(ngDevMode ? [{ debugName: "modalTitle" }] : []));
105317
105467
  this.modalType = signal(null, ...(ngDevMode ? [{ debugName: "modalType" }] : []));
105318
105468
  this.modalData = signal(null, ...(ngDevMode ? [{ debugName: "modalData" }] : []));
@@ -105548,6 +105698,9 @@ class UnifiedDashboardModalComponent {
105548
105698
  this.modalTitle.set(data.goal.title || 'Unified Goal');
105549
105699
  this.isFreshOpen.set(!wasAlreadyOpen);
105550
105700
  this.isOpen.set(true);
105701
+ if (!wasAlreadyOpen && data.goal?.id) {
105702
+ this.initialGoalActionState.set(this.goalActionStateService.getState(data.goal.id));
105703
+ }
105551
105704
  this.scrollContentToTop();
105552
105705
  }
105553
105706
  else if (state.type === 'unified-goal-objectives' && state.data) {
@@ -105630,7 +105783,7 @@ class UnifiedDashboardModalComponent {
105630
105783
  const data = this.unifiedGoalData();
105631
105784
  if (!data)
105632
105785
  return;
105633
- this.modalService.navigateToUnifiedGoalObjectives(data.goal, data.allMetrics, data.allCharts, this.viewMode());
105786
+ this.modalService.navigateToUnifiedGoalObjectives(data.goal, data.allMetrics, data.allCharts, this.viewMode(), data.allInsights, data.allBusinessInsights);
105634
105787
  }
105635
105788
  onRelatedMetricClick(metric) {
105636
105789
  const data = this.relatedMetricsData();
@@ -105750,7 +105903,11 @@ class UnifiedDashboardModalComponent {
105750
105903
  }
105751
105904
  onActionStateChange(event) {
105752
105905
  if (event.goalId) {
105906
+ const wasInitiallyUndefined = this.initialGoalActionState() === undefined;
105753
105907
  this.goalActionStateService.setState(event.goalId, event.state);
105908
+ if (wasInitiallyUndefined) {
105909
+ this.closeModal();
105910
+ }
105754
105911
  }
105755
105912
  }
105756
105913
  closeModal() {
@@ -106603,7 +106760,7 @@ class UnifiedGoalsProgressFooterComponent {
106603
106760
  this.integrateGoals.emit(this.goalActionStateService.getOutput(this.goalIds()));
106604
106761
  }
106605
106762
  static { this.ɵfac = function UnifiedGoalsProgressFooterComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || UnifiedGoalsProgressFooterComponent)(); }; }
106606
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: UnifiedGoalsProgressFooterComponent, selectors: [["symphiq-unified-goals-progress-footer"]], inputs: { goalIds: [1, "goalIds"], viewMode: [1, "viewMode"] }, outputs: { integrateGoals: "integrateGoals" }, decls: 15, vars: 11, consts: [[1, "fixed", "bottom-0", "left-0", "right-0", "z-40", "border-t", "backdrop-blur-xl", "transition-all", "duration-300", 3, "ngClass"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-4"], [1, "flex", "flex-col", "sm:flex-row", "items-center", "justify-between", "gap-4"], [1, "flex-1", "w-full", "sm:w-auto"], [1, "flex", "items-center", "justify-between", "mb-2"], [1, "text-sm", "font-medium", 3, "ngClass"], [1, "text-sm", "font-semibold", 3, "ngClass"], [1, "h-2", "rounded-full", "overflow-hidden", 3, "ngClass"], [1, "h-full", "rounded-full", "transition-all", "duration-500", "ease-out", 3, "ngClass"], [1, "flex", "items-center", "gap-4", "mt-2"], [1, "flex", "items-center", "gap-3"], ["type", "button", 1, "inline-flex", "items-center", "gap-2", "px-6", "py-3", "rounded-xl", "font-semibold", "text-sm", "transition-all", "duration-200", "shadow-lg", "hover:shadow-xl", "hover:scale-105", "active:scale-95", "cursor-pointer", 3, "ngClass"], [1, "text-sm", 3, "ngClass"], [1, "flex", "items-center", "gap-1.5"], [1, "w-2", "h-2", "rounded-full", "bg-emerald-500"], [1, "text-xs", 3, "ngClass"], [1, "w-2", "h-2", "rounded-full", "bg-amber-500"], [1, "w-2", "h-2", "rounded-full", "bg-slate-400"], ["type", "button", 1, "inline-flex", "items-center", "gap-2", "px-6", "py-3", "rounded-xl", "font-semibold", "text-sm", "transition-all", "duration-200", "shadow-lg", "hover:shadow-xl", "hover:scale-105", "active:scale-95", "cursor-pointer", 3, "click", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 10V3L4 14h7v7l9-11h-7z"]], template: function UnifiedGoalsProgressFooterComponent_Template(rf, ctx) { if (rf & 1) {
106763
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: UnifiedGoalsProgressFooterComponent, selectors: [["symphiq-unified-goals-progress-footer"]], inputs: { goalIds: [1, "goalIds"], viewMode: [1, "viewMode"] }, outputs: { integrateGoals: "integrateGoals" }, decls: 15, vars: 11, consts: [[1, "fixed", "bottom-0", "left-0", "right-0", "z-50", "border-t", "backdrop-blur-xl", "transition-all", "duration-300", 3, "ngClass"], [1, "max-w-7xl", "mx-auto", "px-4", "sm:px-6", "lg:px-8", "py-4"], [1, "flex", "flex-col", "sm:flex-row", "items-center", "justify-between", "gap-4"], [1, "flex-1", "w-full", "sm:w-auto"], [1, "flex", "items-center", "justify-between", "mb-2"], [1, "text-sm", "font-medium", 3, "ngClass"], [1, "text-sm", "font-semibold", 3, "ngClass"], [1, "h-2", "rounded-full", "overflow-hidden", 3, "ngClass"], [1, "h-full", "rounded-full", "transition-all", "duration-500", "ease-out", 3, "ngClass"], [1, "flex", "items-center", "gap-4", "mt-2"], [1, "flex", "items-center", "gap-3"], ["type", "button", 1, "inline-flex", "items-center", "gap-2", "px-6", "py-3", "rounded-xl", "font-semibold", "text-sm", "transition-all", "duration-200", "shadow-lg", "hover:shadow-xl", "hover:scale-105", "active:scale-95", "cursor-pointer", 3, "ngClass"], [1, "text-sm", 3, "ngClass"], [1, "flex", "items-center", "gap-1.5"], [1, "w-2", "h-2", "rounded-full", "bg-emerald-500"], [1, "text-xs", 3, "ngClass"], [1, "w-2", "h-2", "rounded-full", "bg-amber-500"], [1, "w-2", "h-2", "rounded-full", "bg-slate-400"], ["type", "button", 1, "inline-flex", "items-center", "gap-2", "px-6", "py-3", "rounded-xl", "font-semibold", "text-sm", "transition-all", "duration-200", "shadow-lg", "hover:shadow-xl", "hover:scale-105", "active:scale-95", "cursor-pointer", 3, "click", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 10V3L4 14h7v7l9-11h-7z"]], template: function UnifiedGoalsProgressFooterComponent_Template(rf, ctx) { if (rf & 1) {
106607
106764
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3)(4, "div", 4)(5, "span", 5);
106608
106765
  i0.ɵɵtext(6, " Goals Reviewed ");
106609
106766
  i0.ɵɵelementEnd();
@@ -106645,7 +106802,7 @@ class UnifiedGoalsProgressFooterComponent {
106645
106802
  imports: [CommonModule],
106646
106803
  changeDetection: ChangeDetectionStrategy.OnPush,
106647
106804
  template: `
106648
- <div [ngClass]="containerClasses()" class="fixed bottom-0 left-0 right-0 z-40 border-t backdrop-blur-xl transition-all duration-300">
106805
+ <div [ngClass]="containerClasses()" class="fixed bottom-0 left-0 right-0 z-50 border-t backdrop-blur-xl transition-all duration-300">
106649
106806
  <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4">
106650
106807
  <div class="flex flex-col sm:flex-row items-center justify-between gap-4">
106651
106808
  <div class="flex-1 w-full sm:w-auto">
@@ -107323,7 +107480,7 @@ class SymphiqProfileAnalysisUnifiedDashboardComponent {
107323
107480
  const goal = this.unifiedGoals().find(g => g.id === goalId);
107324
107481
  if (goal) {
107325
107482
  const currentState = this.modalService.getCurrentState();
107326
- this.modalService.openUnifiedGoalModal(goal, this.allMetrics(), this.allCharts(), this.loadedSourceAnalysisIds().map(String), this.viewMode(), this.loadingSourceAnalysisId() !== undefined ? String(this.loadingSourceAnalysisId()) : undefined, currentState, this.allInsights());
107483
+ this.modalService.openUnifiedGoalModal(goal, this.allMetrics(), this.allCharts(), this.loadedSourceAnalysisIds().map(String), this.viewMode(), this.loadingSourceAnalysisId() !== undefined ? String(this.loadingSourceAnalysisId()) : undefined, currentState, this.allInsights(), this.allBusinessInsights());
107327
107484
  }
107328
107485
  }
107329
107486
  onPriorityActionRecommendationClick(recommendationId) {
@@ -115627,5 +115784,5 @@ var pieChart_component = /*#__PURE__*/Object.freeze({
115627
115784
  * Generated bundle index. Do not edit.
115628
115785
  */
115629
115786
 
115630
- export { AreaChartComponent, BarChartComponent, BreakdownSectionComponent, BusinessAnalysisModalComponent, BusinessProfileSearchService, ChartCardComponent, ChartContainerComponent, ChartThemeService, CircularProgressComponent, CompetitivePositioningSummaryComponent, CompetitorAnalysisCardComponent, ConfettiService, ConfidenceLevelCardComponent, ContentGenerationProgressComponent, ContentGenerationProgressWithConfettiComponent, CrossDashboardRelationshipsService, DashboardHeaderComponent, DataLoaderService, DisplayModeEnum, FloatingBackButtonComponent, FloatingTocComponent, FocusAreaDetailCardComponent, FocusAreaExecutiveSummaryComponent, FocusAreaQuestionComponent, FocusAreaStatusCardComponent, FocusAreaToolsModalComponent, FunnelOrderService, GoalActionStateEnum, GoalActionStateService, GradeBadgeComponent, HeaderScrollService, HierarchyDisplayComponent, HorizontalBarComponent, IconService, IndeterminateSpinnerComponent, InsightCardComponent, JourneyProgressIndicatorComponent, JourneyStepIdEnum, LineChartComponent, MetricCardComponent, MetricExecutiveSummaryComponent, MetricFormatterService, MetricListItemComponent, MetricReportModalComponent, MetricWelcomeBannerComponent, MobileBottomNavComponent, MobileFABComponent, ModalComponent, ModalService, NapkinVisualPlaceholderComponent, NavigationStateService, OpportunityHighlightBannerComponent, OverallAssessmentComponent, PacingStatusBadgeComponent, PieChartComponent, ProfileItemCardComponent, ProfileSectionComponent, ProfileSubsectionComponent, RelatedContentSidebarComponent, RevenueCalculatorService, RevenueCalculatorWelcomeBannerComponent, ScrollDepthService, ScrollProgressBarComponent, SearchButtonComponent, SearchModalComponent, SectionDividerComponent, SectionNavigationComponent, ShadowElevationDirective, ShopPlatformEnum, ShopProfileCategoryListComponent, ShopProfileQuestionAnswerComponent, ShopProfileQuestionCardComponent, ShopProfileQuestionsModalComponent, ShopProfileStatusCardComponent, ShopProfileStickyFooterComponent, ShopProfileViewToggleComponent, ShopWelcomeBannerComponent, SkeletonBarComponent, SkeletonCardBaseComponent, SkeletonCircleComponent, SkeletonCompetitorCardComponent, SkeletonCustomerSegmentCardComponent, SkeletonFocusAreaCardComponent, SkeletonGenericCardComponent, SkeletonLoaderComponent, SkeletonPriceTierCardComponent, SkeletonProductCategoryCardComponent, SkeletonRegionCardComponent, SkeletonSeasonCardComponent, StickySubscriptionContinueButtonComponent, SubscriptionValuePropositionCardComponent, SymphiqBusinessAnalysisDashboardComponent, SymphiqConnectGaDashboardComponent, SymphiqCreateAccountDashboardComponent, SymphiqFunnelAnalysisDashboardComponent, SymphiqFunnelAnalysisPreviewComponent, SymphiqIconComponent, SymphiqProfileAnalysisFocusAreaDashboardComponent, SymphiqProfileAnalysisMetricDashboardComponent, SymphiqProfileAnalysisUnifiedDashboardComponent, SymphiqProfileFocusAreaDashboardComponent, SymphiqProfileFocusAreasAnalysesDashboardComponent, SymphiqProfileMetricDashboardComponent, SymphiqProfileMetricsAnalysesDashboardComponent, SymphiqProfileShopAnalysisDashboardComponent, SymphiqRevenueCalculatorDashboardComponent, SymphiqWelcomeDashboardComponent, TargetChangeBadgeComponent, TooltipContainerComponent, TooltipDataService, TooltipDirective, TooltipService, UserAvatarComponent, UserDisplayComponent, ViewModeService, ViewModeSwitcherModalComponent, ViewportAnimationDirective, VisualizationContainerComponent, calculateFunnelRatios, calculateMetricTargetsFromRevenue, calculateMetricTargetsFromRevenueReverse, calculateRelatedMetricRatios, generateTargetsFromCalculations, getBadgeLabelClasses, getButtonClasses, getCategoryBadgeClasses, getCategoryColor, getCompetitiveBadgeClasses, getContainerClasses, getFooterClasses, getFunnelStageMetrics, getGradeBadgeClasses, getHeaderClasses, getInsightsBadgeClasses, getInsightsCardClasses, getMetricLabelClasses, getMetricMiniCardClasses, getMetricValueClasses, getNarrativeTextClasses, getRevenueCardClasses, getRevenueIconClasses, getStatusBadgeClasses, getStatusDotClasses, getStatusIconClasses, getStatusSummaryClasses, getSubtitleClasses, getTitleClasses, getTrendClasses, getTrendIconClasses, getTrendValueClasses, groupMetricsByFunnelStage, isLightMode, validateRevenueTarget };
115787
+ export { AreaChartComponent, BarChartComponent, BreakdownSectionComponent, BusinessAnalysisModalComponent, BusinessProfileSearchService, ChartCardComponent, ChartContainerComponent, ChartThemeService, CircularProgressComponent, CompetitivePositioningSummaryComponent, CompetitorAnalysisCardComponent, ConfettiService, ConfidenceLevelCardComponent, ContentGenerationProgressComponent, ContentGenerationProgressWithConfettiComponent, CrossDashboardRelationshipsService, DashboardHeaderComponent, DataLoaderService, DisplayModeEnum, FloatingBackButtonComponent, FloatingTocComponent, FocusAreaDetailCardComponent, FocusAreaExecutiveSummaryComponent, FocusAreaQuestionComponent, FocusAreaStatusCardComponent, FocusAreaToolsModalComponent, FunnelOrderService, GoalActionStateEnum, GoalActionStateService, GradeBadgeComponent, HeaderScrollService, HierarchyDisplayComponent, HorizontalBarComponent, IconService, IndeterminateSpinnerComponent, InsightCardComponent, JourneyProgressIndicatorComponent, JourneyStepIdEnum, LineChartComponent, MetricCardComponent, MetricExecutiveSummaryComponent, MetricFormatterService, MetricListItemComponent, MetricReportModalComponent, MetricWelcomeBannerComponent, MobileBottomNavComponent, MobileFABComponent, ModalComponent, ModalService, NapkinVisualPlaceholderComponent, NavigationStateService, OpportunityHighlightBannerComponent, OverallAssessmentComponent, PacingStatusBadgeComponent, PieChartComponent, ProfileItemCardComponent, ProfileSectionComponent, ProfileSubsectionComponent, RelatedContentSidebarComponent, RevenueCalculatorService, RevenueCalculatorWelcomeBannerComponent, ReviewButtonComponent, ScrollDepthService, ScrollProgressBarComponent, SearchButtonComponent, SearchModalComponent, SectionDividerComponent, SectionNavigationComponent, ShadowElevationDirective, ShopPlatformEnum, ShopProfileCategoryListComponent, ShopProfileQuestionAnswerComponent, ShopProfileQuestionCardComponent, ShopProfileQuestionsModalComponent, ShopProfileStatusCardComponent, ShopProfileStickyFooterComponent, ShopProfileViewToggleComponent, ShopWelcomeBannerComponent, SkeletonBarComponent, SkeletonCardBaseComponent, SkeletonCircleComponent, SkeletonCompetitorCardComponent, SkeletonCustomerSegmentCardComponent, SkeletonFocusAreaCardComponent, SkeletonGenericCardComponent, SkeletonLoaderComponent, SkeletonPriceTierCardComponent, SkeletonProductCategoryCardComponent, SkeletonRegionCardComponent, SkeletonSeasonCardComponent, StickySubscriptionContinueButtonComponent, SubscriptionValuePropositionCardComponent, SymphiqBusinessAnalysisDashboardComponent, SymphiqConnectGaDashboardComponent, SymphiqCreateAccountDashboardComponent, SymphiqFunnelAnalysisDashboardComponent, SymphiqFunnelAnalysisPreviewComponent, SymphiqIconComponent, SymphiqProfileAnalysisFocusAreaDashboardComponent, SymphiqProfileAnalysisMetricDashboardComponent, SymphiqProfileAnalysisUnifiedDashboardComponent, SymphiqProfileFocusAreaDashboardComponent, SymphiqProfileFocusAreasAnalysesDashboardComponent, SymphiqProfileMetricDashboardComponent, SymphiqProfileMetricsAnalysesDashboardComponent, SymphiqProfileShopAnalysisDashboardComponent, SymphiqRevenueCalculatorDashboardComponent, SymphiqWelcomeDashboardComponent, TargetChangeBadgeComponent, TooltipContainerComponent, TooltipDataService, TooltipDirective, TooltipService, UserAvatarComponent, UserDisplayComponent, ViewModeService, ViewModeSwitcherModalComponent, ViewportAnimationDirective, VisualizationContainerComponent, calculateFunnelRatios, calculateMetricTargetsFromRevenue, calculateMetricTargetsFromRevenueReverse, calculateRelatedMetricRatios, generateTargetsFromCalculations, getBadgeLabelClasses, getButtonClasses, getCategoryBadgeClasses, getCategoryColor, getCompetitiveBadgeClasses, getContainerClasses, getFooterClasses, getFunnelStageMetrics, getGradeBadgeClasses, getHeaderClasses, getInsightsBadgeClasses, getInsightsCardClasses, getMetricLabelClasses, getMetricMiniCardClasses, getMetricValueClasses, getNarrativeTextClasses, getRevenueCardClasses, getRevenueIconClasses, getStatusBadgeClasses, getStatusDotClasses, getStatusIconClasses, getStatusSummaryClasses, getSubtitleClasses, getTitleClasses, getTrendClasses, getTrendIconClasses, getTrendValueClasses, groupMetricsByFunnelStage, isLightMode, validateRevenueTarget };
115631
115788
  //# sourceMappingURL=symphiq-components.mjs.map