@eric-emg/symphiq-components 1.2.403 → 1.2.405
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/symphiq-components.mjs +314 -270
- package/fesm2022/symphiq-components.mjs.map +1 -1
- package/index.d.ts +43 -43
- package/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/styles.css +333 -328
- package/styles.css +26 -12
|
@@ -57432,6 +57432,13 @@ class AreaChartComponent {
|
|
|
57432
57432
|
});
|
|
57433
57433
|
// Default colors for area chart series
|
|
57434
57434
|
const defaultColors = ['#4A90E2', '#10b981', '#f59e0b', '#ef4444', '#8b5cf6', '#06b6d4'];
|
|
57435
|
+
// Find series with most data points for X-axis categories
|
|
57436
|
+
const seriesWithMostData = chartData.series?.reduce((max, s) => (s.data?.length ?? 0) > (max.data?.length ?? 0) ? s : max, chartData.series[0]);
|
|
57437
|
+
const xAxisData = (seriesWithMostData?.data || []).map(d => ({
|
|
57438
|
+
month: d.month,
|
|
57439
|
+
value: d.value
|
|
57440
|
+
}));
|
|
57441
|
+
xAxis.data.setAll(xAxisData);
|
|
57435
57442
|
chartData.series?.forEach((seriesData, index) => {
|
|
57436
57443
|
const colorHex = defaultColors[index % defaultColors.length];
|
|
57437
57444
|
const seriesColor = color(parseInt(colorHex.replace('#', ''), 16));
|
|
@@ -57468,9 +57475,6 @@ class AreaChartComponent {
|
|
|
57468
57475
|
value: d.value
|
|
57469
57476
|
}));
|
|
57470
57477
|
series.data.setAll(transformedData);
|
|
57471
|
-
if (index === 0) {
|
|
57472
|
-
xAxis.data.setAll(transformedData);
|
|
57473
|
-
}
|
|
57474
57478
|
series.appear(ChartConstants.ANIMATION.APPEAR_DURATION);
|
|
57475
57479
|
});
|
|
57476
57480
|
const legend = chartElement.children.push(Legend.new(root, {
|
|
@@ -72528,7 +72532,7 @@ function CapabilityMatrixCardComponent_Conditional_26_Template(rf, ctx) { if (rf
|
|
|
72528
72532
|
i0.ɵɵelementEnd();
|
|
72529
72533
|
} if (rf & 2) {
|
|
72530
72534
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
72531
|
-
i0.ɵɵclassProp("animate-pulse", ctx_r0.isHighImportance());
|
|
72535
|
+
i0.ɵɵclassProp("animate-pulse-slow", ctx_r0.isHighImportance());
|
|
72532
72536
|
i0.ɵɵproperty("ngClass", ctx_r0.importanceBadgeClasses());
|
|
72533
72537
|
i0.ɵɵadvance();
|
|
72534
72538
|
i0.ɵɵtextInterpolate1(" ", ctx_r0.importanceLabel(), " Importance ");
|
|
@@ -72781,7 +72785,7 @@ class CapabilityMatrixCardComponent {
|
|
|
72781
72785
|
return 'bg-red-500';
|
|
72782
72786
|
}
|
|
72783
72787
|
static { this.ɵfac = function CapabilityMatrixCardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CapabilityMatrixCardComponent)(); }; }
|
|
72784
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CapabilityMatrixCardComponent, selectors: [["symphiq-capability-matrix-card"]], inputs: { capability: [1, "capability"], viewMode: [1, "viewMode"], allGoals: [1, "allGoals"] }, decls: 31, vars: 30, consts: [[1, "rounded-lg", "p-4", 3, "click", "ngClass"], [1, "flex", "items-start", "justify-between", "gap-3", "mb-3"], [1, "flex-1"], [1, "font-semibold", "text-sm", "mb-1", 3, "ngClass"], [1, "text-xs", 3, "ngClass"], [1, "px-2.5", "py-1", "rounded-full", "text-xs", "font-semibold", "whitespace-nowrap", 3, "ngClass"], [1, "grid", "transition-[grid-template-rows]", "duration-300", "ease-in-out"], [1, "overflow-hidden", "min-h-0"], [1, "transition-opacity", "duration-300"], [1, "grid", "grid-cols-2", "gap-3", "mb-3"], [1, "p-3", "rounded-lg", 3, "ngClass"], [1, "text-xs", "font-medium", "mb-1", 3, "ngClass"], [1, "flex", "items-center", "gap-1.5"], [1, "w-2", "h-2", "rounded-full", 3, "ngClass"], [1, "text-xs", "font-semibold", 3, "ngClass"], [1, "flex", "flex-wrap", "gap-1.5", "mb-4"], [1, "px-2", "py-1", "rounded", "text-xs", "font-medium", 3, "ngClass", "animate-pulse"], [1, "px-2", "py-1", "rounded", "text-xs", 3, "ngClass"], [1, "space-y-2"], [1, "flex", "items-center", "gap-2", "mt-3", "cursor-pointer"], [1, "px-2", "py-1", "rounded", "text-xs", "font-medium", 3, "ngClass"], ["size", "w-3.5 h-3.5", 3, "icon", "ngClass"], [3, "relatedGoalIds", "allGoals", "viewMode"], [1, "flex", "items-center", "gap-2", "mt-3", "cursor-pointer", 3, "click"], [1, "text-sm", "font-medium", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4", "transition-transform", "duration-200", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M19 9l-7 7-7-7"]], template: function CapabilityMatrixCardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
72788
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CapabilityMatrixCardComponent, selectors: [["symphiq-capability-matrix-card"]], inputs: { capability: [1, "capability"], viewMode: [1, "viewMode"], allGoals: [1, "allGoals"] }, decls: 31, vars: 30, consts: [[1, "rounded-lg", "p-4", 3, "click", "ngClass"], [1, "flex", "items-start", "justify-between", "gap-3", "mb-3"], [1, "flex-1"], [1, "font-semibold", "text-sm", "mb-1", 3, "ngClass"], [1, "text-xs", 3, "ngClass"], [1, "px-2.5", "py-1", "rounded-full", "text-xs", "font-semibold", "whitespace-nowrap", 3, "ngClass"], [1, "grid", "transition-[grid-template-rows]", "duration-300", "ease-in-out"], [1, "overflow-hidden", "min-h-0"], [1, "transition-opacity", "duration-300"], [1, "grid", "grid-cols-2", "gap-3", "mb-3"], [1, "p-3", "rounded-lg", 3, "ngClass"], [1, "text-xs", "font-medium", "mb-1", 3, "ngClass"], [1, "flex", "items-center", "gap-1.5"], [1, "w-2", "h-2", "rounded-full", 3, "ngClass"], [1, "text-xs", "font-semibold", 3, "ngClass"], [1, "flex", "flex-wrap", "gap-1.5", "mb-4"], [1, "px-2", "py-1", "rounded", "text-xs", "font-medium", 3, "ngClass", "animate-pulse-slow"], [1, "px-2", "py-1", "rounded", "text-xs", 3, "ngClass"], [1, "space-y-2"], [1, "flex", "items-center", "gap-2", "mt-3", "cursor-pointer"], [1, "px-2", "py-1", "rounded", "text-xs", "font-medium", 3, "ngClass"], ["size", "w-3.5 h-3.5", 3, "icon", "ngClass"], [3, "relatedGoalIds", "allGoals", "viewMode"], [1, "flex", "items-center", "gap-2", "mt-3", "cursor-pointer", 3, "click"], [1, "text-sm", "font-medium", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4", "transition-transform", "duration-200", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M19 9l-7 7-7-7"]], template: function CapabilityMatrixCardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
72785
72789
|
i0.ɵɵelementStart(0, "div", 0);
|
|
72786
72790
|
i0.ɵɵlistener("click", function CapabilityMatrixCardComponent_Template_div_click_0_listener($event) { return ctx.onCardClick($event); });
|
|
72787
72791
|
i0.ɵɵelementStart(1, "div", 1)(2, "div", 2)(3, "h5", 3);
|
|
@@ -72848,7 +72852,7 @@ class CapabilityMatrixCardComponent {
|
|
|
72848
72852
|
i0.ɵɵadvance();
|
|
72849
72853
|
i0.ɵɵproperty("ngClass", ctx.stateLabelClasses());
|
|
72850
72854
|
i0.ɵɵadvance(3);
|
|
72851
|
-
i0.ɵɵclassProp("animate-pulse", ctx.isNotImplemented((tmp_11_0 = ctx.capability()) == null ? null : tmp_11_0.currentState));
|
|
72855
|
+
i0.ɵɵclassProp("animate-pulse-slow", ctx.isNotImplemented((tmp_11_0 = ctx.capability()) == null ? null : tmp_11_0.currentState));
|
|
72852
72856
|
i0.ɵɵproperty("ngClass", ctx.stateIndicatorClasses(((tmp_12_0 = ctx.capability()) == null ? null : tmp_12_0.currentState) || ctx.CapabilityStateEnum.NOT_IMPLEMENTED));
|
|
72853
72857
|
i0.ɵɵadvance();
|
|
72854
72858
|
i0.ɵɵproperty("ngClass", ctx.stateValueClasses());
|
|
@@ -72883,107 +72887,107 @@ class CapabilityMatrixCardComponent {
|
|
|
72883
72887
|
standalone: true,
|
|
72884
72888
|
imports: [CommonModule, RelatedGoalChipsComponent, SymphiqIconComponent],
|
|
72885
72889
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
72886
|
-
template: `
|
|
72887
|
-
<div
|
|
72888
|
-
[ngClass]="cardClasses()"
|
|
72889
|
-
[class.cursor-pointer]="!isExpandedMode()"
|
|
72890
|
-
(click)="onCardClick($event)"
|
|
72891
|
-
class="rounded-lg p-4">
|
|
72892
|
-
<div class="flex items-start justify-between gap-3 mb-3">
|
|
72893
|
-
<div class="flex-1">
|
|
72894
|
-
<h5 [ngClass]="titleClasses()" class="font-semibold text-sm mb-1">{{ capability()?.name }}</h5>
|
|
72895
|
-
@if (capability()?.industryBenchmark) {
|
|
72896
|
-
<p [ngClass]="benchmarkClasses()" class="text-xs">Industry: {{ formatIndustryBenchmark(capability()!.industryBenchmark!) }}</p>
|
|
72897
|
-
}
|
|
72898
|
-
</div>
|
|
72899
|
-
@if (capability()?.quadrant) {
|
|
72900
|
-
<span [ngClass]="quadrantBadgeClasses()" class="px-2.5 py-1 rounded-full text-xs font-semibold whitespace-nowrap">
|
|
72901
|
-
{{ quadrantLabel() }}
|
|
72902
|
-
</span>
|
|
72903
|
-
}
|
|
72904
|
-
</div>
|
|
72905
|
-
|
|
72906
|
-
<!-- Expandable Content -->
|
|
72907
|
-
<div class="grid transition-[grid-template-rows] duration-300 ease-in-out" [style.grid-template-rows]="shouldShowExpandedContent() ? '1fr' : '0fr'">
|
|
72908
|
-
<div class="overflow-hidden min-h-0">
|
|
72909
|
-
<div [style.opacity]="shouldShowExpandedContent() ? '1' : '0'" [style.transition-delay]="shouldShowExpandedContent() ? '150ms' : '0ms'" class="transition-opacity duration-300">
|
|
72910
|
-
|
|
72911
|
-
<div class="grid grid-cols-2 gap-3 mb-3">
|
|
72912
|
-
<div [ngClass]="stateSectionClasses()" class="p-3 rounded-lg">
|
|
72913
|
-
<p [ngClass]="stateLabelClasses()" class="text-xs font-medium mb-1">Current</p>
|
|
72914
|
-
<div class="flex items-center gap-1.5">
|
|
72915
|
-
<div [ngClass]="stateIndicatorClasses(capability()?.currentState || CapabilityStateEnum.NOT_IMPLEMENTED)" [class.animate-pulse]="isNotImplemented(capability()?.currentState)" class="w-2 h-2 rounded-full"></div>
|
|
72916
|
-
<p [ngClass]="stateValueClasses()" class="text-xs">{{ formatState(capability()?.currentState) }}</p>
|
|
72917
|
-
</div>
|
|
72918
|
-
</div>
|
|
72919
|
-
<div [ngClass]="stateSectionClasses()" class="p-3 rounded-lg">
|
|
72920
|
-
<p [ngClass]="stateLabelClasses()" class="text-xs font-medium mb-1">Desired</p>
|
|
72921
|
-
<div class="flex items-center gap-1.5">
|
|
72922
|
-
<div [ngClass]="stateIndicatorClasses(capability()?.desiredState || CapabilityStateEnum.FULLY_IMPLEMENTED)" class="w-2 h-2 rounded-full"></div>
|
|
72923
|
-
<p [ngClass]="stateValueClasses()" class="text-xs font-semibold">{{ formatState(capability()?.desiredState) }}</p>
|
|
72924
|
-
</div>
|
|
72925
|
-
</div>
|
|
72926
|
-
</div>
|
|
72927
|
-
|
|
72928
|
-
<div class="flex flex-wrap gap-1.5 mb-4">
|
|
72929
|
-
@if (capability()?.importance) {
|
|
72930
|
-
<span [ngClass]="importanceBadgeClasses()" [class.animate-pulse]="isHighImportance()" class="px-2 py-1 rounded text-xs font-medium">
|
|
72931
|
-
{{ importanceLabel() }} Importance
|
|
72932
|
-
</span>
|
|
72933
|
-
}
|
|
72934
|
-
@if (capability()?.effort) {
|
|
72935
|
-
<span [ngClass]="effortBadgeClasses()" class="px-2 py-1 rounded text-xs">
|
|
72936
|
-
{{ effortLabel() }} Effort
|
|
72937
|
-
</span>
|
|
72938
|
-
}
|
|
72939
|
-
@if (capability()?.impact) {
|
|
72940
|
-
<span [ngClass]="impactBadgeClasses()" class="px-2 py-1 rounded text-xs">
|
|
72941
|
-
{{ impactLabel() }} Impact
|
|
72942
|
-
</span>
|
|
72943
|
-
}
|
|
72944
|
-
</div>
|
|
72945
|
-
|
|
72946
|
-
<!-- Related Goals (in expandable section) -->
|
|
72947
|
-
@if (capability()?.relatedGoalIds && capability()!.relatedGoalIds!.length > 0) {
|
|
72948
|
-
<div class="space-y-2">
|
|
72949
|
-
<div class="flex items-center gap-1.5">
|
|
72950
|
-
<symphiq-icon
|
|
72951
|
-
[icon]="{ name: 'link', source: IconSourceEnum.HEROICONS }"
|
|
72952
|
-
size="w-3.5 h-3.5"
|
|
72953
|
-
[ngClass]="relatedGoalsIconClasses()"
|
|
72954
|
-
/>
|
|
72955
|
-
<span [ngClass]="relatedGoalsTitleClasses()" class="text-xs font-semibold">Related Goals</span>
|
|
72956
|
-
</div>
|
|
72957
|
-
<symphiq-related-goal-chips
|
|
72958
|
-
[relatedGoalIds]="capability()!.relatedGoalIds!"
|
|
72959
|
-
[allGoals]="allGoals()"
|
|
72960
|
-
[viewMode]="viewMode()"
|
|
72961
|
-
/>
|
|
72962
|
-
</div>
|
|
72963
|
-
}
|
|
72964
|
-
|
|
72965
|
-
</div>
|
|
72966
|
-
</div>
|
|
72967
|
-
</div>
|
|
72968
|
-
|
|
72969
|
-
<!-- Learn More / View Less Button (for Compact/Simplified modes) -->
|
|
72970
|
-
@if (!isExpandedMode()) {
|
|
72971
|
-
<div class="flex items-center gap-2 mt-3 cursor-pointer" (click)="toggleExpanded($event)">
|
|
72972
|
-
<span [ngClass]="learnMoreButtonClasses()" class="text-sm font-medium">
|
|
72973
|
-
{{ isExpanded() ? 'View Less' : 'Learn More' }}
|
|
72974
|
-
</span>
|
|
72975
|
-
<svg
|
|
72976
|
-
[ngClass]="learnMoreChevronClasses()"
|
|
72977
|
-
[class.rotate-180]="isExpanded()"
|
|
72978
|
-
class="w-4 h-4 transition-transform duration-200"
|
|
72979
|
-
fill="none"
|
|
72980
|
-
stroke="currentColor"
|
|
72981
|
-
viewBox="0 0 24 24">
|
|
72982
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
|
|
72983
|
-
</svg>
|
|
72984
|
-
</div>
|
|
72985
|
-
}
|
|
72986
|
-
</div>
|
|
72890
|
+
template: `
|
|
72891
|
+
<div
|
|
72892
|
+
[ngClass]="cardClasses()"
|
|
72893
|
+
[class.cursor-pointer]="!isExpandedMode()"
|
|
72894
|
+
(click)="onCardClick($event)"
|
|
72895
|
+
class="rounded-lg p-4">
|
|
72896
|
+
<div class="flex items-start justify-between gap-3 mb-3">
|
|
72897
|
+
<div class="flex-1">
|
|
72898
|
+
<h5 [ngClass]="titleClasses()" class="font-semibold text-sm mb-1">{{ capability()?.name }}</h5>
|
|
72899
|
+
@if (capability()?.industryBenchmark) {
|
|
72900
|
+
<p [ngClass]="benchmarkClasses()" class="text-xs">Industry: {{ formatIndustryBenchmark(capability()!.industryBenchmark!) }}</p>
|
|
72901
|
+
}
|
|
72902
|
+
</div>
|
|
72903
|
+
@if (capability()?.quadrant) {
|
|
72904
|
+
<span [ngClass]="quadrantBadgeClasses()" class="px-2.5 py-1 rounded-full text-xs font-semibold whitespace-nowrap">
|
|
72905
|
+
{{ quadrantLabel() }}
|
|
72906
|
+
</span>
|
|
72907
|
+
}
|
|
72908
|
+
</div>
|
|
72909
|
+
|
|
72910
|
+
<!-- Expandable Content -->
|
|
72911
|
+
<div class="grid transition-[grid-template-rows] duration-300 ease-in-out" [style.grid-template-rows]="shouldShowExpandedContent() ? '1fr' : '0fr'">
|
|
72912
|
+
<div class="overflow-hidden min-h-0">
|
|
72913
|
+
<div [style.opacity]="shouldShowExpandedContent() ? '1' : '0'" [style.transition-delay]="shouldShowExpandedContent() ? '150ms' : '0ms'" class="transition-opacity duration-300">
|
|
72914
|
+
|
|
72915
|
+
<div class="grid grid-cols-2 gap-3 mb-3">
|
|
72916
|
+
<div [ngClass]="stateSectionClasses()" class="p-3 rounded-lg">
|
|
72917
|
+
<p [ngClass]="stateLabelClasses()" class="text-xs font-medium mb-1">Current</p>
|
|
72918
|
+
<div class="flex items-center gap-1.5">
|
|
72919
|
+
<div [ngClass]="stateIndicatorClasses(capability()?.currentState || CapabilityStateEnum.NOT_IMPLEMENTED)" [class.animate-pulse-slow]="isNotImplemented(capability()?.currentState)" class="w-2 h-2 rounded-full"></div>
|
|
72920
|
+
<p [ngClass]="stateValueClasses()" class="text-xs">{{ formatState(capability()?.currentState) }}</p>
|
|
72921
|
+
</div>
|
|
72922
|
+
</div>
|
|
72923
|
+
<div [ngClass]="stateSectionClasses()" class="p-3 rounded-lg">
|
|
72924
|
+
<p [ngClass]="stateLabelClasses()" class="text-xs font-medium mb-1">Desired</p>
|
|
72925
|
+
<div class="flex items-center gap-1.5">
|
|
72926
|
+
<div [ngClass]="stateIndicatorClasses(capability()?.desiredState || CapabilityStateEnum.FULLY_IMPLEMENTED)" class="w-2 h-2 rounded-full"></div>
|
|
72927
|
+
<p [ngClass]="stateValueClasses()" class="text-xs font-semibold">{{ formatState(capability()?.desiredState) }}</p>
|
|
72928
|
+
</div>
|
|
72929
|
+
</div>
|
|
72930
|
+
</div>
|
|
72931
|
+
|
|
72932
|
+
<div class="flex flex-wrap gap-1.5 mb-4">
|
|
72933
|
+
@if (capability()?.importance) {
|
|
72934
|
+
<span [ngClass]="importanceBadgeClasses()" [class.animate-pulse-slow]="isHighImportance()" class="px-2 py-1 rounded text-xs font-medium">
|
|
72935
|
+
{{ importanceLabel() }} Importance
|
|
72936
|
+
</span>
|
|
72937
|
+
}
|
|
72938
|
+
@if (capability()?.effort) {
|
|
72939
|
+
<span [ngClass]="effortBadgeClasses()" class="px-2 py-1 rounded text-xs">
|
|
72940
|
+
{{ effortLabel() }} Effort
|
|
72941
|
+
</span>
|
|
72942
|
+
}
|
|
72943
|
+
@if (capability()?.impact) {
|
|
72944
|
+
<span [ngClass]="impactBadgeClasses()" class="px-2 py-1 rounded text-xs">
|
|
72945
|
+
{{ impactLabel() }} Impact
|
|
72946
|
+
</span>
|
|
72947
|
+
}
|
|
72948
|
+
</div>
|
|
72949
|
+
|
|
72950
|
+
<!-- Related Goals (in expandable section) -->
|
|
72951
|
+
@if (capability()?.relatedGoalIds && capability()!.relatedGoalIds!.length > 0) {
|
|
72952
|
+
<div class="space-y-2">
|
|
72953
|
+
<div class="flex items-center gap-1.5">
|
|
72954
|
+
<symphiq-icon
|
|
72955
|
+
[icon]="{ name: 'link', source: IconSourceEnum.HEROICONS }"
|
|
72956
|
+
size="w-3.5 h-3.5"
|
|
72957
|
+
[ngClass]="relatedGoalsIconClasses()"
|
|
72958
|
+
/>
|
|
72959
|
+
<span [ngClass]="relatedGoalsTitleClasses()" class="text-xs font-semibold">Related Goals</span>
|
|
72960
|
+
</div>
|
|
72961
|
+
<symphiq-related-goal-chips
|
|
72962
|
+
[relatedGoalIds]="capability()!.relatedGoalIds!"
|
|
72963
|
+
[allGoals]="allGoals()"
|
|
72964
|
+
[viewMode]="viewMode()"
|
|
72965
|
+
/>
|
|
72966
|
+
</div>
|
|
72967
|
+
}
|
|
72968
|
+
|
|
72969
|
+
</div>
|
|
72970
|
+
</div>
|
|
72971
|
+
</div>
|
|
72972
|
+
|
|
72973
|
+
<!-- Learn More / View Less Button (for Compact/Simplified modes) -->
|
|
72974
|
+
@if (!isExpandedMode()) {
|
|
72975
|
+
<div class="flex items-center gap-2 mt-3 cursor-pointer" (click)="toggleExpanded($event)">
|
|
72976
|
+
<span [ngClass]="learnMoreButtonClasses()" class="text-sm font-medium">
|
|
72977
|
+
{{ isExpanded() ? 'View Less' : 'Learn More' }}
|
|
72978
|
+
</span>
|
|
72979
|
+
<svg
|
|
72980
|
+
[ngClass]="learnMoreChevronClasses()"
|
|
72981
|
+
[class.rotate-180]="isExpanded()"
|
|
72982
|
+
class="w-4 h-4 transition-transform duration-200"
|
|
72983
|
+
fill="none"
|
|
72984
|
+
stroke="currentColor"
|
|
72985
|
+
viewBox="0 0 24 24">
|
|
72986
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
|
|
72987
|
+
</svg>
|
|
72988
|
+
</div>
|
|
72989
|
+
}
|
|
72990
|
+
</div>
|
|
72987
72991
|
`
|
|
72988
72992
|
}]
|
|
72989
72993
|
}], () => [], { capability: [{ type: i0.Input, args: [{ isSignal: true, alias: "capability", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], allGoals: [{ type: i0.Input, args: [{ isSignal: true, alias: "allGoals", required: false }] }] }); })();
|
|
@@ -73090,7 +73094,7 @@ function CompetitiveComparisonCardComponent_Conditional_13_For_4_Template(rf, ct
|
|
|
73090
73094
|
i0.ɵɵadvance(2);
|
|
73091
73095
|
i0.ɵɵproperty("ngClass", ctx_r1.competitorNameClasses());
|
|
73092
73096
|
i0.ɵɵadvance();
|
|
73093
|
-
i0.ɵɵtextInterpolate(position_r3.competitorId);
|
|
73097
|
+
i0.ɵɵtextInterpolate(ctx_r1.getCompetitorTitle(position_r3.competitorId));
|
|
73094
73098
|
i0.ɵɵadvance();
|
|
73095
73099
|
i0.ɵɵproperty("ngClass", ctx_r1.advantageBadgeClasses(position_r3.advantage));
|
|
73096
73100
|
i0.ɵɵadvance();
|
|
@@ -73162,6 +73166,7 @@ class CompetitiveComparisonCardComponent {
|
|
|
73162
73166
|
this.comparison = input(...(ngDevMode ? [undefined, { debugName: "comparison" }] : []));
|
|
73163
73167
|
this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
|
|
73164
73168
|
this.viewModeService = inject(ViewModeService);
|
|
73169
|
+
this.profileContextService = inject(ProfileContextService);
|
|
73165
73170
|
this.expandedSignal = signal(false, ...(ngDevMode ? [{ debugName: "expandedSignal" }] : []));
|
|
73166
73171
|
this.isDark = computed(() => this.viewMode() === ViewModeEnum.DARK, ...(ngDevMode ? [{ debugName: "isDark" }] : []));
|
|
73167
73172
|
this.globalIsExpanded = computed(() => this.viewModeService.getViewMode() === 'expanded', ...(ngDevMode ? [{ debugName: "globalIsExpanded" }] : []));
|
|
@@ -73273,6 +73278,12 @@ class CompetitiveComparisonCardComponent {
|
|
|
73273
73278
|
default: return '';
|
|
73274
73279
|
}
|
|
73275
73280
|
}
|
|
73281
|
+
getCompetitorTitle(competitorId) {
|
|
73282
|
+
if (!competitorId)
|
|
73283
|
+
return '';
|
|
73284
|
+
const competitors = this.profileContextService.getCompetitorsByIds([competitorId]);
|
|
73285
|
+
return competitors[0]?.label || competitorId;
|
|
73286
|
+
}
|
|
73276
73287
|
advantageBadgeClasses(advantage) {
|
|
73277
73288
|
if (this.isDark()) {
|
|
73278
73289
|
if (advantage === AdvantageEnum.YOURS) {
|
|
@@ -73431,7 +73442,7 @@ class CompetitiveComparisonCardComponent {
|
|
|
73431
73442
|
@for (position of comparison()!.competitorPositions; track position.competitorId || $index) {
|
|
73432
73443
|
<div [ngClass]="competitorCardClasses()" class="p-3 rounded-lg">
|
|
73433
73444
|
<div class="flex items-start justify-between gap-2 mb-2">
|
|
73434
|
-
<p [ngClass]="competitorNameClasses()" class="text-sm font-medium">{{ position.competitorId }}</p>
|
|
73445
|
+
<p [ngClass]="competitorNameClasses()" class="text-sm font-medium">{{ getCompetitorTitle(position.competitorId) }}</p>
|
|
73435
73446
|
<span [ngClass]="advantageBadgeClasses(position.advantage)" class="px-2 py-0.5 rounded-full text-xs font-semibold whitespace-nowrap">
|
|
73436
73447
|
{{ formatAdvantage(position.advantage) }}
|
|
73437
73448
|
</span>
|
|
@@ -73481,7 +73492,7 @@ class CompetitiveComparisonCardComponent {
|
|
|
73481
73492
|
`
|
|
73482
73493
|
}]
|
|
73483
73494
|
}], () => [], { comparison: [{ type: i0.Input, args: [{ isSignal: true, alias: "comparison", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }] }); })();
|
|
73484
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CompetitiveComparisonCardComponent, { className: "CompetitiveComparisonCardComponent", filePath: "lib/components/profile-analysis-dashboard/cards/competitive-comparison-card.component.ts", lineNumber:
|
|
73495
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CompetitiveComparisonCardComponent, { className: "CompetitiveComparisonCardComponent", filePath: "lib/components/profile-analysis-dashboard/cards/competitive-comparison-card.component.ts", lineNumber: 126 }); })();
|
|
73485
73496
|
|
|
73486
73497
|
const _c0$j = a0 => ({ name: "chevron-right", source: a0 });
|
|
73487
73498
|
const _forTrack0$j = ($index, $item) => $item.id;
|
|
@@ -73523,20 +73534,22 @@ function PhaseTimelineCardComponent_Conditional_8_Template(rf, ctx) { if (rf & 1
|
|
|
73523
73534
|
i0.ɵɵrepeater(ctx_r2.goalObjects());
|
|
73524
73535
|
} }
|
|
73525
73536
|
function PhaseTimelineCardComponent_Conditional_9_For_7_Template(rf, ctx) { if (rf & 1) {
|
|
73526
|
-
i0.ɵɵ
|
|
73527
|
-
i0.ɵɵ
|
|
73528
|
-
i0.ɵɵ
|
|
73529
|
-
i0.ɵɵ
|
|
73530
|
-
i0.ɵɵ
|
|
73537
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
73538
|
+
i0.ɵɵelementStart(0, "button", 15);
|
|
73539
|
+
i0.ɵɵlistener("click", function PhaseTimelineCardComponent_Conditional_9_For_7_Template_button_click_0_listener($event) { const recommendation_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.openRecommendationModal(recommendation_r5, $event)); });
|
|
73540
|
+
i0.ɵɵelementStart(1, "span");
|
|
73541
|
+
i0.ɵɵtext(2);
|
|
73542
|
+
i0.ɵɵelementEnd();
|
|
73543
|
+
i0.ɵɵelement(3, "symphiq-icon", 16);
|
|
73544
|
+
i0.ɵɵelementEnd();
|
|
73531
73545
|
} if (rf & 2) {
|
|
73532
|
-
const
|
|
73546
|
+
const recommendation_r5 = ctx.$implicit;
|
|
73533
73547
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
73548
|
+
i0.ɵɵproperty("ngClass", ctx_r2.recommendationBadgeClasses());
|
|
73549
|
+
i0.ɵɵadvance(2);
|
|
73550
|
+
i0.ɵɵtextInterpolate(recommendation_r5.title);
|
|
73534
73551
|
i0.ɵɵadvance();
|
|
73535
|
-
i0.ɵɵproperty("
|
|
73536
|
-
i0.ɵɵadvance();
|
|
73537
|
-
i0.ɵɵproperty("ngClass", ctx_r2.recommendationTextClasses());
|
|
73538
|
-
i0.ɵɵadvance();
|
|
73539
|
-
i0.ɵɵtextInterpolate(recommendationId_r4);
|
|
73552
|
+
i0.ɵɵproperty("icon", i0.ɵɵpureFunction1(3, _c0$j, ctx_r2.IconSourceEnum.HEROICONS));
|
|
73540
73553
|
} }
|
|
73541
73554
|
function PhaseTimelineCardComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
73542
73555
|
i0.ɵɵelementStart(0, "div", 7)(1, "h6", 10);
|
|
@@ -73547,47 +73560,47 @@ function PhaseTimelineCardComponent_Conditional_9_Template(rf, ctx) { if (rf & 1
|
|
|
73547
73560
|
i0.ɵɵtext(4, " Recommendations ");
|
|
73548
73561
|
i0.ɵɵelementEnd();
|
|
73549
73562
|
i0.ɵɵnamespaceHTML();
|
|
73550
|
-
i0.ɵɵelementStart(5, "
|
|
73551
|
-
i0.ɵɵrepeaterCreate(6, PhaseTimelineCardComponent_Conditional_9_For_7_Template, 4,
|
|
73563
|
+
i0.ɵɵelementStart(5, "div", 13);
|
|
73564
|
+
i0.ɵɵrepeaterCreate(6, PhaseTimelineCardComponent_Conditional_9_For_7_Template, 4, 5, "button", 14, _forTrack0$j);
|
|
73552
73565
|
i0.ɵɵelementEnd()();
|
|
73553
73566
|
} if (rf & 2) {
|
|
73554
73567
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
73555
73568
|
i0.ɵɵadvance();
|
|
73556
73569
|
i0.ɵɵproperty("ngClass", ctx_r2.sectionLabelClasses());
|
|
73557
73570
|
i0.ɵɵadvance(5);
|
|
73558
|
-
i0.ɵɵrepeater(ctx_r2.
|
|
73571
|
+
i0.ɵɵrepeater(ctx_r2.recommendationObjects());
|
|
73559
73572
|
} }
|
|
73560
73573
|
function PhaseTimelineCardComponent_Conditional_10_For_10_Template(rf, ctx) { if (rf & 1) {
|
|
73561
|
-
i0.ɵɵelementStart(0, "li",
|
|
73574
|
+
i0.ɵɵelementStart(0, "li", 23);
|
|
73562
73575
|
i0.ɵɵnamespaceSVG();
|
|
73563
|
-
i0.ɵɵelementStart(1, "svg",
|
|
73564
|
-
i0.ɵɵelement(2, "path",
|
|
73576
|
+
i0.ɵɵelementStart(1, "svg", 24);
|
|
73577
|
+
i0.ɵɵelement(2, "path", 25);
|
|
73565
73578
|
i0.ɵɵelementEnd();
|
|
73566
73579
|
i0.ɵɵnamespaceHTML();
|
|
73567
|
-
i0.ɵɵelementStart(3, "span",
|
|
73580
|
+
i0.ɵɵelementStart(3, "span", 26);
|
|
73568
73581
|
i0.ɵɵtext(4);
|
|
73569
73582
|
i0.ɵɵelementEnd()();
|
|
73570
73583
|
} if (rf & 2) {
|
|
73571
|
-
const
|
|
73584
|
+
const outcome_r6 = ctx.$implicit;
|
|
73572
73585
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
73573
73586
|
i0.ɵɵadvance();
|
|
73574
73587
|
i0.ɵɵproperty("ngClass", ctx_r2.outcomeIconClasses());
|
|
73575
73588
|
i0.ɵɵadvance(2);
|
|
73576
73589
|
i0.ɵɵproperty("ngClass", ctx_r2.outcomeTextClasses());
|
|
73577
73590
|
i0.ɵɵadvance();
|
|
73578
|
-
i0.ɵɵtextInterpolate(
|
|
73591
|
+
i0.ɵɵtextInterpolate(outcome_r6);
|
|
73579
73592
|
} }
|
|
73580
73593
|
function PhaseTimelineCardComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
73581
|
-
i0.ɵɵelementStart(0, "div",
|
|
73594
|
+
i0.ɵɵelementStart(0, "div", 18)(1, "div", 19)(2, "div")(3, "h6", 10);
|
|
73582
73595
|
i0.ɵɵnamespaceSVG();
|
|
73583
73596
|
i0.ɵɵelementStart(4, "svg", 11);
|
|
73584
|
-
i0.ɵɵelement(5, "path",
|
|
73597
|
+
i0.ɵɵelement(5, "path", 20);
|
|
73585
73598
|
i0.ɵɵelementEnd();
|
|
73586
73599
|
i0.ɵɵtext(6, " Expected Outcomes ");
|
|
73587
73600
|
i0.ɵɵelementEnd();
|
|
73588
73601
|
i0.ɵɵnamespaceHTML();
|
|
73589
|
-
i0.ɵɵelementStart(7, "div",
|
|
73590
|
-
i0.ɵɵrepeaterCreate(9, PhaseTimelineCardComponent_Conditional_10_For_10_Template, 5, 3, "li",
|
|
73602
|
+
i0.ɵɵelementStart(7, "div", 21)(8, "ul", 22);
|
|
73603
|
+
i0.ɵɵrepeaterCreate(9, PhaseTimelineCardComponent_Conditional_10_For_10_Template, 5, 3, "li", 23, i0.ɵɵrepeaterTrackByIndex);
|
|
73591
73604
|
i0.ɵɵelementEnd()()()()();
|
|
73592
73605
|
} if (rf & 2) {
|
|
73593
73606
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
@@ -73600,15 +73613,15 @@ function PhaseTimelineCardComponent_Conditional_10_Template(rf, ctx) { if (rf &
|
|
|
73600
73613
|
i0.ɵɵrepeater(ctx_r2.phase().outcomes);
|
|
73601
73614
|
} }
|
|
73602
73615
|
function PhaseTimelineCardComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
73603
|
-
const
|
|
73604
|
-
i0.ɵɵelementStart(0, "div",
|
|
73605
|
-
i0.ɵɵlistener("click", function PhaseTimelineCardComponent_Conditional_11_Template_div_click_0_listener() { i0.ɵɵrestoreView(
|
|
73606
|
-
i0.ɵɵelementStart(1, "span",
|
|
73616
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
73617
|
+
i0.ɵɵelementStart(0, "div", 27);
|
|
73618
|
+
i0.ɵɵlistener("click", function PhaseTimelineCardComponent_Conditional_11_Template_div_click_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.toggleExpanded($event)); });
|
|
73619
|
+
i0.ɵɵelementStart(1, "span", 28);
|
|
73607
73620
|
i0.ɵɵtext(2);
|
|
73608
73621
|
i0.ɵɵelementEnd();
|
|
73609
73622
|
i0.ɵɵnamespaceSVG();
|
|
73610
|
-
i0.ɵɵelementStart(3, "svg",
|
|
73611
|
-
i0.ɵɵelement(4, "path",
|
|
73623
|
+
i0.ɵɵelementStart(3, "svg", 29);
|
|
73624
|
+
i0.ɵɵelement(4, "path", 30);
|
|
73612
73625
|
i0.ɵɵelementEnd()();
|
|
73613
73626
|
} if (rf & 2) {
|
|
73614
73627
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
@@ -73628,6 +73641,7 @@ class PhaseTimelineCardComponent {
|
|
|
73628
73641
|
this.allGoals = input([], ...(ngDevMode ? [{ debugName: "allGoals" }] : []));
|
|
73629
73642
|
this.viewModeService = inject(ViewModeService);
|
|
73630
73643
|
this.modalService = inject(ModalService);
|
|
73644
|
+
this.profileContextService = inject(ProfileContextService);
|
|
73631
73645
|
this.expandedSignal = signal(false, ...(ngDevMode ? [{ debugName: "expandedSignal" }] : []));
|
|
73632
73646
|
this.IconSourceEnum = IconSourceEnum;
|
|
73633
73647
|
this.isDark = computed(() => this.viewMode() === ViewModeEnum.DARK, ...(ngDevMode ? [{ debugName: "isDark" }] : []));
|
|
@@ -73635,6 +73649,12 @@ class PhaseTimelineCardComponent {
|
|
|
73635
73649
|
const goalIds = this.phase()?.goalIds || [];
|
|
73636
73650
|
return this.allGoals().filter((goal) => goalIds.includes(goal.id || ''));
|
|
73637
73651
|
}, ...(ngDevMode ? [{ debugName: "goalObjects" }] : []));
|
|
73652
|
+
this.recommendationObjects = computed(() => {
|
|
73653
|
+
const recommendationIds = this.phase()?.recommendationIds || [];
|
|
73654
|
+
return recommendationIds
|
|
73655
|
+
.map(id => this.profileContextService.getRecommendationById(id))
|
|
73656
|
+
.filter((rec) => rec !== undefined);
|
|
73657
|
+
}, ...(ngDevMode ? [{ debugName: "recommendationObjects" }] : []));
|
|
73638
73658
|
this.globalIsExpanded = computed(() => this.viewModeService.getViewMode() === 'expanded', ...(ngDevMode ? [{ debugName: "globalIsExpanded" }] : []));
|
|
73639
73659
|
this.formattedPhaseName = computed(() => {
|
|
73640
73660
|
const phaseData = this.phase();
|
|
@@ -73690,6 +73710,12 @@ class PhaseTimelineCardComponent {
|
|
|
73690
73710
|
}
|
|
73691
73711
|
return 'bg-blue-50 text-blue-700 border border-blue-200 hover:bg-blue-100 hover:border-blue-300 hover:shadow-lg hover:shadow-blue-500/20';
|
|
73692
73712
|
}, ...(ngDevMode ? [{ debugName: "goalBadgeClasses" }] : []));
|
|
73713
|
+
this.recommendationBadgeClasses = computed(() => {
|
|
73714
|
+
if (this.isDark()) {
|
|
73715
|
+
return 'bg-purple-500/20 text-purple-400 border border-purple-500/30 hover:bg-purple-500/30 hover:border-purple-500/40 hover:shadow-lg hover:shadow-purple-500/20';
|
|
73716
|
+
}
|
|
73717
|
+
return 'bg-purple-50 text-purple-700 border border-purple-200 hover:bg-purple-100 hover:border-purple-300 hover:shadow-lg hover:shadow-purple-500/20';
|
|
73718
|
+
}, ...(ngDevMode ? [{ debugName: "recommendationBadgeClasses" }] : []));
|
|
73693
73719
|
this.bulletClasses = computed(() => {
|
|
73694
73720
|
return this.isDark() ? 'bg-slate-400' : 'bg-slate-400';
|
|
73695
73721
|
}, ...(ngDevMode ? [{ debugName: "bulletClasses" }] : []));
|
|
@@ -73732,7 +73758,10 @@ class PhaseTimelineCardComponent {
|
|
|
73732
73758
|
shouldShowExpandedContent() {
|
|
73733
73759
|
return this.globalIsExpanded() || this.expandedSignal();
|
|
73734
73760
|
}
|
|
73735
|
-
toggleExpanded() {
|
|
73761
|
+
toggleExpanded(event) {
|
|
73762
|
+
if (event) {
|
|
73763
|
+
event.stopPropagation();
|
|
73764
|
+
}
|
|
73736
73765
|
if (!this.globalIsExpanded()) {
|
|
73737
73766
|
this.expandedSignal.update(v => !v);
|
|
73738
73767
|
}
|
|
@@ -73749,8 +73778,20 @@ class PhaseTimelineCardComponent {
|
|
|
73749
73778
|
}
|
|
73750
73779
|
this.modalService.openGoalDetailModal(goal, this.viewMode());
|
|
73751
73780
|
}
|
|
73781
|
+
openRecommendationModal(recommendation, event) {
|
|
73782
|
+
if (event) {
|
|
73783
|
+
event.stopPropagation();
|
|
73784
|
+
event.preventDefault();
|
|
73785
|
+
}
|
|
73786
|
+
const goalContext = {
|
|
73787
|
+
title: recommendation.title || 'Recommendation',
|
|
73788
|
+
description: recommendation.description || '',
|
|
73789
|
+
icon: 'light-bulb'
|
|
73790
|
+
};
|
|
73791
|
+
this.modalService.navigateToBusinessInsightDetail(recommendation, goalContext, this.viewMode());
|
|
73792
|
+
}
|
|
73752
73793
|
static { this.ɵfac = function PhaseTimelineCardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PhaseTimelineCardComponent)(); }; }
|
|
73753
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PhaseTimelineCardComponent, selectors: [["symphiq-phase-timeline-card"]], inputs: { phase: [1, "phase"], viewMode: [1, "viewMode"], isLast: [1, "isLast"], allGoals: [1, "allGoals"] }, decls: 12, vars: 12, consts: [[1, "rounded-lg", "p-5", "relative", 3, "click", "ngClass"], [1, "flex", "items-start", "gap-4", "relative"], [1, "z-10", 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", "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"], [1, "flex-1"], [1, "font-bold", "text-lg", "mb-4", 3, "ngClass"], [1, "mb-4"], [1, "grid", "transition-[grid-template-rows]", "duration-300", "ease-in-out", 3, "grid-template-rows"], [1, "flex", "items-center", "gap-2", "mt-3", "cursor-pointer"], [1, "text-sm", "font-semibold", "mb-2", "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", "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", "flex-wrap", "gap-2"], ["type", "button", 1, "cursor-pointer", "flex", "items-center", "gap-2", "px-3", "py-1.5", "rounded-lg", "text-xs", "font-medium", "transition-all", "duration-200", "hover:scale-105", "hover:shadow-md", 3, "ngClass"], ["type", "button", 1, "cursor-pointer", "flex", "items-center", "gap-2", "px-3", "py-1.5", "rounded-lg", "text-xs", "font-medium", "transition-all", "duration-200", "hover:scale-105", "hover:shadow-md", 3, "click", "ngClass"], ["size", "w-3.5 h-3.5", 1, "flex-shrink-0", "opacity-60", 3, "icon"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"], [1, "
|
|
73794
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PhaseTimelineCardComponent, selectors: [["symphiq-phase-timeline-card"]], inputs: { phase: [1, "phase"], viewMode: [1, "viewMode"], isLast: [1, "isLast"], allGoals: [1, "allGoals"] }, decls: 12, vars: 12, consts: [[1, "rounded-lg", "p-5", "relative", 3, "click", "ngClass"], [1, "flex", "items-start", "gap-4", "relative"], [1, "z-10", 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", "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"], [1, "flex-1"], [1, "font-bold", "text-lg", "mb-4", 3, "ngClass"], [1, "mb-4"], [1, "grid", "transition-[grid-template-rows]", "duration-300", "ease-in-out", 3, "grid-template-rows"], [1, "flex", "items-center", "gap-2", "mt-3", "cursor-pointer"], [1, "text-sm", "font-semibold", "mb-2", "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", "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", "flex-wrap", "gap-2"], ["type", "button", 1, "cursor-pointer", "flex", "items-center", "gap-2", "px-3", "py-1.5", "rounded-lg", "text-xs", "font-medium", "transition-all", "duration-200", "hover:scale-105", "hover:shadow-md", 3, "ngClass"], ["type", "button", 1, "cursor-pointer", "flex", "items-center", "gap-2", "px-3", "py-1.5", "rounded-lg", "text-xs", "font-medium", "transition-all", "duration-200", "hover:scale-105", "hover:shadow-md", 3, "click", "ngClass"], ["size", "w-3.5 h-3.5", 1, "flex-shrink-0", "opacity-60", 3, "icon"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"], [1, "grid", "transition-[grid-template-rows]", "duration-300", "ease-in-out"], [1, "overflow-hidden"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 10V3L4 14h7v7l9-11h-7z"], [1, "p-3", "rounded-lg", 3, "ngClass"], [1, "space-y-1.5"], [1, "flex", "items-start", "gap-2"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4", "flex-shrink-0", "mt-0.5", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M5 13l4 4L19 7"], [1, "text-sm", 3, "ngClass"], [1, "flex", "items-center", "gap-2", "mt-3", "cursor-pointer", 3, "click"], [1, "text-sm", "font-medium", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4", "transition-transform", "duration-200", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M19 9l-7 7-7-7"]], template: function PhaseTimelineCardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
73754
73795
|
i0.ɵɵelementStart(0, "div", 0);
|
|
73755
73796
|
i0.ɵɵlistener("click", function PhaseTimelineCardComponent_Template_div_click_0_listener($event) { return ctx.onCardClick($event); });
|
|
73756
73797
|
i0.ɵɵelementStart(1, "div", 1)(2, "div", 2);
|
|
@@ -73769,7 +73810,6 @@ class PhaseTimelineCardComponent {
|
|
|
73769
73810
|
i0.ɵɵelementEnd()()();
|
|
73770
73811
|
} if (rf & 2) {
|
|
73771
73812
|
let tmp_6_0;
|
|
73772
|
-
let tmp_7_0;
|
|
73773
73813
|
let tmp_8_0;
|
|
73774
73814
|
let tmp_9_0;
|
|
73775
73815
|
i0.ɵɵclassProp("mb-6", !ctx.isLast())("cursor-pointer", ctx.isCompactMode());
|
|
@@ -73783,7 +73823,7 @@ class PhaseTimelineCardComponent {
|
|
|
73783
73823
|
i0.ɵɵadvance();
|
|
73784
73824
|
i0.ɵɵconditional(((tmp_6_0 = ctx.phase()) == null ? null : tmp_6_0.goalIds) && ctx.phase().goalIds.length > 0 ? 8 : -1);
|
|
73785
73825
|
i0.ɵɵadvance();
|
|
73786
|
-
i0.ɵɵconditional(
|
|
73826
|
+
i0.ɵɵconditional(ctx.recommendationObjects().length > 0 ? 9 : -1);
|
|
73787
73827
|
i0.ɵɵadvance();
|
|
73788
73828
|
i0.ɵɵconditional(((tmp_8_0 = ctx.phase()) == null ? null : tmp_8_0.outcomes) && ctx.phase().outcomes.length > 0 ? 10 : -1);
|
|
73789
73829
|
i0.ɵɵadvance();
|
|
@@ -73837,7 +73877,7 @@ class PhaseTimelineCardComponent {
|
|
|
73837
73877
|
</div>
|
|
73838
73878
|
}
|
|
73839
73879
|
|
|
73840
|
-
@if (
|
|
73880
|
+
@if (recommendationObjects().length > 0) {
|
|
73841
73881
|
<div class="mb-4">
|
|
73842
73882
|
<h6 [ngClass]="sectionLabelClasses()" class="text-sm font-semibold mb-2 flex items-center gap-2">
|
|
73843
73883
|
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
@@ -73845,14 +73885,18 @@ class PhaseTimelineCardComponent {
|
|
|
73845
73885
|
</svg>
|
|
73846
73886
|
Recommendations
|
|
73847
73887
|
</h6>
|
|
73848
|
-
<
|
|
73849
|
-
@for (
|
|
73850
|
-
<
|
|
73851
|
-
|
|
73852
|
-
|
|
73853
|
-
|
|
73888
|
+
<div class="flex flex-wrap gap-2">
|
|
73889
|
+
@for (recommendation of recommendationObjects(); track recommendation.id) {
|
|
73890
|
+
<button
|
|
73891
|
+
type="button"
|
|
73892
|
+
[ngClass]="recommendationBadgeClasses()"
|
|
73893
|
+
(click)="openRecommendationModal(recommendation, $event)"
|
|
73894
|
+
class="cursor-pointer flex items-center gap-2 px-3 py-1.5 rounded-lg text-xs font-medium transition-all duration-200 hover:scale-105 hover:shadow-md">
|
|
73895
|
+
<span>{{ recommendation.title }}</span>
|
|
73896
|
+
<symphiq-icon [icon]="{ name: 'chevron-right', source: IconSourceEnum.HEROICONS }" size="w-3.5 h-3.5" class="flex-shrink-0 opacity-60"></symphiq-icon>
|
|
73897
|
+
</button>
|
|
73854
73898
|
}
|
|
73855
|
-
</
|
|
73899
|
+
</div>
|
|
73856
73900
|
</div>
|
|
73857
73901
|
}
|
|
73858
73902
|
|
|
@@ -73886,7 +73930,7 @@ class PhaseTimelineCardComponent {
|
|
|
73886
73930
|
|
|
73887
73931
|
<!-- Learn More / View Less Button (for Compact mode) -->
|
|
73888
73932
|
@if (isCompactMode() && phase()?.outcomes && phase()!.outcomes!.length > 0) {
|
|
73889
|
-
<div class="flex items-center gap-2 mt-3 cursor-pointer" (click)="toggleExpanded()">
|
|
73933
|
+
<div class="flex items-center gap-2 mt-3 cursor-pointer" (click)="toggleExpanded($event)">
|
|
73890
73934
|
<span [ngClass]="learnMoreButtonClasses()" class="text-sm font-medium">
|
|
73891
73935
|
{{ isExpanded() ? 'View Less' : 'Learn More' }}
|
|
73892
73936
|
</span>
|
|
@@ -73907,7 +73951,7 @@ class PhaseTimelineCardComponent {
|
|
|
73907
73951
|
`
|
|
73908
73952
|
}]
|
|
73909
73953
|
}], () => [], { phase: [{ type: i0.Input, args: [{ isSignal: true, alias: "phase", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], isLast: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLast", required: false }] }], allGoals: [{ type: i0.Input, args: [{ isSignal: true, alias: "allGoals", required: false }] }] }); })();
|
|
73910
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PhaseTimelineCardComponent, { className: "PhaseTimelineCardComponent", filePath: "lib/components/profile-analysis-dashboard/cards/phase-timeline-card.component.ts", lineNumber:
|
|
73954
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PhaseTimelineCardComponent, { className: "PhaseTimelineCardComponent", filePath: "lib/components/profile-analysis-dashboard/cards/phase-timeline-card.component.ts", lineNumber: 128 }); })();
|
|
73911
73955
|
|
|
73912
73956
|
const _c0$i = a0 => ({ name: "chevron-right", source: a0 });
|
|
73913
73957
|
function OperationalCategoryCardComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
@@ -74276,7 +74320,7 @@ class OperationalCategoryCardComponent {
|
|
|
74276
74320
|
static { this.ɵfac = function OperationalCategoryCardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || OperationalCategoryCardComponent)(); }; }
|
|
74277
74321
|
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: OperationalCategoryCardComponent, selectors: [["symphiq-operational-category-card"]], hostVars: 1, hostBindings: function OperationalCategoryCardComponent_HostBindings(rf, ctx) { if (rf & 2) {
|
|
74278
74322
|
i0.ɵɵattribute("data-animate-progress", true);
|
|
74279
|
-
} }, inputs: { category: [1, "category"], viewMode: [1, "viewMode"] }, outputs: { categoryClick: "categoryClick" }, decls: 25, vars: 25, consts: [[1, "rounded-xl", "p-6", "transition-all", "duration-300", "group", "hover:scale-[1.02]", "active:scale-[0.98]", 3, "click", "ngClass"], [1, "flex", "items-start", "justify-between", "mb-4"], [1, "flex-1", "min-w-0", "mr-3"], [1, "text-lg", "font-bold", "mb-2", 3, "ngClass"], [1, "inline-flex", "items-center", "px-2.5", "py-1", "rounded-full", "text-xs", "font-semibold", 3, "ngClass"], [1, "flex", "flex-col", "items-end", "gap-2"], [1, "px-4", "py-2", "rounded-lg", "text-center", "min-w-[60px]", 3, "ngClass"], [1, "text-2xl", "font-bold"], [1, "text-xs", "font-medium", "opacity-90"], [1, "text-sm", "mb-4", 3, "ngClass"], [1, "grid", "transition-[grid-template-rows]", "duration-300", "ease-in-out"], [1, "overflow-hidden", "min-h-0"], [1, "transition-opacity", "duration-300"], [1, "mb-4"], [1, "flex", "flex-wrap", "gap-2", "mb-4", "px-1", "-mx-1"], [1, "flex", "items-center", "gap-1.5", "px-3", "py-1.5", "rounded-lg", "text-xs", "font-semibold", "cursor-pointer", "hover:scale-[1.03]", "transition-transform", "group", 3, "ngClass"], [1, "flex", "items-center", "gap-1.5", "px-3", "py-1.5", "rounded-lg", "text-xs", "font-semibold", "cursor-pointer", "hover:scale-[1.03]", "transition-transform", "group", "animate-pulse", 3, "ngClass"], [1, "flex", "items-center", "justify-between", "pt-3", "border-t", 3, "ngClass"], [1, "flex", "items-center", "gap-2", "mt-3", "cursor-pointer"], [1, "flex", "items-center", "justify-between", "text-xs", "mb-1.5"], [3, "ngClass"], [1, "font-bold", 3, "ngClass"], [1, "h-2", "rounded-full", "overflow-hidden", 3, "ngClass"], [1, "h-full", "transition-all", "duration-1000", "ease-out", "rounded-full", 3, "ngClass"], [1, "flex", "items-center", "gap-1.5", "px-3", "py-1.5", "rounded-lg", "text-xs", "font-semibold", "cursor-pointer", "hover:scale-[1.03]", "transition-transform", "group", 3, "click", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-3.5", "h-3.5"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"], ["size", "w-3.5 h-3.5", 1, "transform", "group-hover:translate-x-0.5", "transition-transform", 3, "icon"], [1, "flex", "items-center", "gap-1.5", "px-3", "py-1.5", "rounded-lg", "text-xs", "font-semibold", "cursor-pointer", "hover:scale-[1.03]", "transition-transform", "group", "animate-pulse", 3, "click", "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 10V3L4 14h7v7l9-11h-7z"], [1, "flex", "items-center", "justify-between", "pt-3", "border-t", 3, "click", "ngClass"], [1, "text-sm", "font-semibold", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5", "transform", "group-hover:translate-x-1", "transition-transform", "duration-200", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 5l7 7-7 7"], [1, "flex", "items-center", "gap-2", "mt-3", "cursor-pointer", 3, "click"], [1, "text-sm", "font-medium", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4", "transition-transform", "duration-200", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M19 9l-7 7-7-7"]], template: function OperationalCategoryCardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
74323
|
+
} }, inputs: { category: [1, "category"], viewMode: [1, "viewMode"] }, outputs: { categoryClick: "categoryClick" }, decls: 25, vars: 25, consts: [[1, "rounded-xl", "p-6", "transition-all", "duration-300", "group", "hover:scale-[1.02]", "active:scale-[0.98]", 3, "click", "ngClass"], [1, "flex", "items-start", "justify-between", "mb-4"], [1, "flex-1", "min-w-0", "mr-3"], [1, "text-lg", "font-bold", "mb-2", 3, "ngClass"], [1, "inline-flex", "items-center", "px-2.5", "py-1", "rounded-full", "text-xs", "font-semibold", 3, "ngClass"], [1, "flex", "flex-col", "items-end", "gap-2"], [1, "px-4", "py-2", "rounded-lg", "text-center", "min-w-[60px]", 3, "ngClass"], [1, "text-2xl", "font-bold"], [1, "text-xs", "font-medium", "opacity-90"], [1, "text-sm", "mb-4", 3, "ngClass"], [1, "grid", "transition-[grid-template-rows]", "duration-300", "ease-in-out"], [1, "overflow-hidden", "min-h-0"], [1, "transition-opacity", "duration-300"], [1, "mb-4"], [1, "flex", "flex-wrap", "gap-2", "mb-4", "px-1", "-mx-1"], [1, "flex", "items-center", "gap-1.5", "px-3", "py-1.5", "rounded-lg", "text-xs", "font-semibold", "cursor-pointer", "hover:scale-[1.03]", "transition-transform", "group", 3, "ngClass"], [1, "flex", "items-center", "gap-1.5", "px-3", "py-1.5", "rounded-lg", "text-xs", "font-semibold", "cursor-pointer", "hover:scale-[1.03]", "transition-transform", "group", "animate-pulse-slow", 3, "ngClass"], [1, "flex", "items-center", "justify-between", "pt-3", "border-t", 3, "ngClass"], [1, "flex", "items-center", "gap-2", "mt-3", "cursor-pointer"], [1, "flex", "items-center", "justify-between", "text-xs", "mb-1.5"], [3, "ngClass"], [1, "font-bold", 3, "ngClass"], [1, "h-2", "rounded-full", "overflow-hidden", 3, "ngClass"], [1, "h-full", "transition-all", "duration-1000", "ease-out", "rounded-full", 3, "ngClass"], [1, "flex", "items-center", "gap-1.5", "px-3", "py-1.5", "rounded-lg", "text-xs", "font-semibold", "cursor-pointer", "hover:scale-[1.03]", "transition-transform", "group", 3, "click", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-3.5", "h-3.5"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"], ["size", "w-3.5 h-3.5", 1, "transform", "group-hover:translate-x-0.5", "transition-transform", 3, "icon"], [1, "flex", "items-center", "gap-1.5", "px-3", "py-1.5", "rounded-lg", "text-xs", "font-semibold", "cursor-pointer", "hover:scale-[1.03]", "transition-transform", "group", "animate-pulse-slow", 3, "click", "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M13 10V3L4 14h7v7l9-11h-7z"], [1, "flex", "items-center", "justify-between", "pt-3", "border-t", 3, "click", "ngClass"], [1, "text-sm", "font-semibold", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5", "transform", "group-hover:translate-x-1", "transition-transform", "duration-200", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M9 5l7 7-7 7"], [1, "flex", "items-center", "gap-2", "mt-3", "cursor-pointer", 3, "click"], [1, "text-sm", "font-medium", 3, "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-4", "h-4", "transition-transform", "duration-200", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M19 9l-7 7-7-7"]], template: function OperationalCategoryCardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
74280
74324
|
i0.ɵɵelementStart(0, "div", 0);
|
|
74281
74325
|
i0.ɵɵlistener("click", function OperationalCategoryCardComponent_Template_div_click_0_listener($event) { return ctx.onCardClick($event); });
|
|
74282
74326
|
i0.ɵɵelementStart(1, "div", 1)(2, "div", 2)(3, "h3", 3);
|
|
@@ -74435,7 +74479,7 @@ class OperationalCategoryCardComponent {
|
|
|
74435
74479
|
<div
|
|
74436
74480
|
(click)="openGapsModal($event)"
|
|
74437
74481
|
[ngClass]="gapChipClasses()"
|
|
74438
|
-
class="flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-semibold cursor-pointer hover:scale-[1.03] transition-transform group animate-pulse">
|
|
74482
|
+
class="flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-semibold cursor-pointer hover:scale-[1.03] transition-transform group animate-pulse-slow">
|
|
74439
74483
|
<svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
74440
74484
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"/>
|
|
74441
74485
|
</svg>
|
|
@@ -84542,120 +84586,120 @@ class GapDetailModalContentComponent {
|
|
|
84542
84586
|
standalone: true,
|
|
84543
84587
|
imports: [CommonModule, RelatedGoalChipsComponent],
|
|
84544
84588
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
84545
|
-
template: `
|
|
84546
|
-
<div class="space-y-6">
|
|
84547
|
-
<!-- Header -->
|
|
84548
|
-
<div [ngClass]="headerClasses()" class="rounded-xl p-6 border">
|
|
84549
|
-
<div class="flex items-start gap-3 mb-4">
|
|
84550
|
-
<div class="flex-shrink-0">
|
|
84551
|
-
<svg class="w-8 h-8 text-orange-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
84552
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"/>
|
|
84553
|
-
</svg>
|
|
84554
|
-
</div>
|
|
84555
|
-
<div class="flex-1">
|
|
84556
|
-
<div class="flex items-center gap-3 mb-2">
|
|
84557
|
-
<h3 [ngClass]="titleClasses()" class="text-2xl font-bold">
|
|
84558
|
-
{{ gap()?.capability }}
|
|
84559
|
-
</h3>
|
|
84560
|
-
@if (gap()?.severity) {
|
|
84561
|
-
<span [ngClass]="severityBadgeClasses()" class="px-3 py-1 rounded-full text-xs font-bold">
|
|
84562
|
-
{{ gap()?.severity }}
|
|
84563
|
-
</span>
|
|
84564
|
-
}
|
|
84565
|
-
</div>
|
|
84566
|
-
<span class="inline-block px-3 py-1 rounded-full text-xs font-semibold bg-orange-100 text-orange-800 dark:bg-orange-900/30 dark:text-orange-300">
|
|
84567
|
-
Gap
|
|
84568
|
-
</span>
|
|
84569
|
-
</div>
|
|
84570
|
-
</div>
|
|
84571
|
-
</div>
|
|
84572
|
-
|
|
84573
|
-
<!-- Description -->
|
|
84574
|
-
@if (gap()?.description) {
|
|
84575
|
-
<div [ngClass]="cardClasses()" class="rounded-xl p-5 border">
|
|
84576
|
-
<h4 [ngClass]="sectionTitleClasses()" class="text-base font-bold mb-4 flex items-center gap-2 pb-3 border-b" [class]="isDark() ? 'border-slate-700' : 'border-slate-200'">
|
|
84577
|
-
<svg [ngClass]="sectionIconClasses()" class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
84578
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
|
84579
|
-
</svg>
|
|
84580
|
-
Description
|
|
84581
|
-
</h4>
|
|
84582
|
-
<p [ngClass]="descriptionClasses()" class="text-base leading-relaxed">
|
|
84583
|
-
{{ gap()?.description }}
|
|
84584
|
-
</p>
|
|
84585
|
-
</div>
|
|
84586
|
-
}
|
|
84587
|
-
|
|
84588
|
-
<!-- Impact on Funnel -->
|
|
84589
|
-
@if (gap()?.impactOnFunnel) {
|
|
84590
|
-
<div [ngClass]="cardClasses()" class="rounded-xl p-5 border">
|
|
84591
|
-
<h4 [ngClass]="sectionTitleClasses()" class="text-base font-bold mb-4 flex items-center gap-2 pb-3 border-b" [class]="isDark() ? 'border-slate-700' : 'border-slate-200'">
|
|
84592
|
-
<svg [ngClass]="sectionIconClasses()" class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
84593
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7h8m0 0v8m0-8l-8 8-4-4-6 6"/>
|
|
84594
|
-
</svg>
|
|
84595
|
-
Impact on Funnel
|
|
84596
|
-
</h4>
|
|
84597
|
-
<p [ngClass]="descriptionClasses()" class="text-base leading-relaxed">
|
|
84598
|
-
{{ gap()?.impactOnFunnel }}
|
|
84599
|
-
</p>
|
|
84600
|
-
</div>
|
|
84601
|
-
}
|
|
84602
|
-
|
|
84603
|
-
<!-- Linked Funnel Weaknesses -->
|
|
84604
|
-
@if (gap()?.linkedFunnelWeaknessIds && (gap()?.linkedFunnelWeaknessIds?.length ?? 0) > 0) {
|
|
84605
|
-
<div [ngClass]="cardClasses()" class="rounded-xl p-5 border">
|
|
84606
|
-
<h4 [ngClass]="sectionTitleClasses()" class="text-base font-bold mb-4 pb-3 border-b" [class]="isDark() ? 'border-slate-700' : 'border-slate-200'">
|
|
84607
|
-
Related Funnel Weaknesses
|
|
84608
|
-
</h4>
|
|
84609
|
-
<div class="flex flex-wrap gap-2">
|
|
84610
|
-
@for (weaknessId of gap()?.linkedFunnelWeaknessIds; track $index) {
|
|
84611
|
-
<button
|
|
84612
|
-
type="button"
|
|
84613
|
-
(click)="openWeaknessDetail(weaknessId); $event.stopPropagation()"
|
|
84614
|
-
[ngClass]="weaknessChipClasses()"
|
|
84615
|
-
class="px-3 py-1.5 rounded-lg text-sm font-medium flex items-center gap-2 transition-all duration-200 hover:scale-105 hover:shadow-lg cursor-pointer group">
|
|
84616
|
-
<span>{{ getWeaknessTitle(weaknessId) }}</span>
|
|
84617
|
-
<svg class="w-4 h-4 transition-transform duration-200 group-hover:translate-x-0.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
84618
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"/>
|
|
84619
|
-
</svg>
|
|
84620
|
-
</button>
|
|
84621
|
-
}
|
|
84622
|
-
</div>
|
|
84623
|
-
</div>
|
|
84624
|
-
}
|
|
84625
|
-
|
|
84626
|
-
<!-- Linked Goals -->
|
|
84627
|
-
@if (gap()?.linkedGoalIds && (gap()?.linkedGoalIds?.length ?? 0) > 0) {
|
|
84628
|
-
<div [ngClass]="cardClasses()" class="rounded-xl p-5 border">
|
|
84629
|
-
<h4 [ngClass]="sectionTitleClasses()" class="text-base font-bold mb-4 pb-3 border-b" [class]="isDark() ? 'border-slate-700' : 'border-slate-200'">
|
|
84630
|
-
Related Goals
|
|
84631
|
-
</h4>
|
|
84632
|
-
<symphiq-related-goal-chips
|
|
84633
|
-
[relatedGoalIds]="gap()?.linkedGoalIds ?? []"
|
|
84634
|
-
[allGoals]="allGoals()"
|
|
84635
|
-
[viewMode]="viewMode()"
|
|
84636
|
-
/>
|
|
84637
|
-
</div>
|
|
84638
|
-
}
|
|
84639
|
-
|
|
84640
|
-
<!-- Supporting Answers -->
|
|
84641
|
-
@if (gap()?.supportingAnswers && (gap()?.supportingAnswers?.length ?? 0) > 0) {
|
|
84642
|
-
<div [ngClass]="cardClasses()" class="rounded-xl p-5 border">
|
|
84643
|
-
<h4 [ngClass]="sectionTitleClasses()" class="text-base font-bold mb-4 pb-3 border-b" [class]="isDark() ? 'border-slate-700' : 'border-slate-200'">
|
|
84644
|
-
Supporting Evidence
|
|
84645
|
-
</h4>
|
|
84646
|
-
<div class="space-y-2">
|
|
84647
|
-
@for (answer of gap()?.supportingAnswers; track $index) {
|
|
84648
|
-
<div [ngClass]="answerItemClasses()" class="px-4 py-2 rounded-lg flex items-center gap-2">
|
|
84649
|
-
<svg class="w-4 h-4 flex-shrink-0 text-orange-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
84650
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
|
84651
|
-
</svg>
|
|
84652
|
-
<span [ngClass]="answerTextClasses()" class="text-sm">{{ answer.answer || answer }}</span>
|
|
84653
|
-
</div>
|
|
84654
|
-
}
|
|
84655
|
-
</div>
|
|
84656
|
-
</div>
|
|
84657
|
-
}
|
|
84658
|
-
</div>
|
|
84589
|
+
template: `
|
|
84590
|
+
<div class="space-y-6">
|
|
84591
|
+
<!-- Header -->
|
|
84592
|
+
<div [ngClass]="headerClasses()" class="rounded-xl p-6 border">
|
|
84593
|
+
<div class="flex items-start gap-3 mb-4">
|
|
84594
|
+
<div class="flex-shrink-0">
|
|
84595
|
+
<svg class="w-8 h-8 text-orange-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
84596
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"/>
|
|
84597
|
+
</svg>
|
|
84598
|
+
</div>
|
|
84599
|
+
<div class="flex-1">
|
|
84600
|
+
<div class="flex items-center gap-3 mb-2">
|
|
84601
|
+
<h3 [ngClass]="titleClasses()" class="text-2xl font-bold">
|
|
84602
|
+
{{ gap()?.capability }}
|
|
84603
|
+
</h3>
|
|
84604
|
+
@if (gap()?.severity) {
|
|
84605
|
+
<span [ngClass]="severityBadgeClasses()" class="px-3 py-1 rounded-full text-xs font-bold">
|
|
84606
|
+
{{ gap()?.severity }}
|
|
84607
|
+
</span>
|
|
84608
|
+
}
|
|
84609
|
+
</div>
|
|
84610
|
+
<span class="inline-block px-3 py-1 rounded-full text-xs font-semibold bg-orange-100 text-orange-800 dark:bg-orange-900/30 dark:text-orange-300">
|
|
84611
|
+
Gap
|
|
84612
|
+
</span>
|
|
84613
|
+
</div>
|
|
84614
|
+
</div>
|
|
84615
|
+
</div>
|
|
84616
|
+
|
|
84617
|
+
<!-- Description -->
|
|
84618
|
+
@if (gap()?.description) {
|
|
84619
|
+
<div [ngClass]="cardClasses()" class="rounded-xl p-5 border">
|
|
84620
|
+
<h4 [ngClass]="sectionTitleClasses()" class="text-base font-bold mb-4 flex items-center gap-2 pb-3 border-b" [class]="isDark() ? 'border-slate-700' : 'border-slate-200'">
|
|
84621
|
+
<svg [ngClass]="sectionIconClasses()" class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
84622
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
|
84623
|
+
</svg>
|
|
84624
|
+
Description
|
|
84625
|
+
</h4>
|
|
84626
|
+
<p [ngClass]="descriptionClasses()" class="text-base leading-relaxed">
|
|
84627
|
+
{{ gap()?.description }}
|
|
84628
|
+
</p>
|
|
84629
|
+
</div>
|
|
84630
|
+
}
|
|
84631
|
+
|
|
84632
|
+
<!-- Impact on Funnel -->
|
|
84633
|
+
@if (gap()?.impactOnFunnel) {
|
|
84634
|
+
<div [ngClass]="cardClasses()" class="rounded-xl p-5 border">
|
|
84635
|
+
<h4 [ngClass]="sectionTitleClasses()" class="text-base font-bold mb-4 flex items-center gap-2 pb-3 border-b" [class]="isDark() ? 'border-slate-700' : 'border-slate-200'">
|
|
84636
|
+
<svg [ngClass]="sectionIconClasses()" class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
84637
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7h8m0 0v8m0-8l-8 8-4-4-6 6"/>
|
|
84638
|
+
</svg>
|
|
84639
|
+
Impact on Funnel
|
|
84640
|
+
</h4>
|
|
84641
|
+
<p [ngClass]="descriptionClasses()" class="text-base leading-relaxed">
|
|
84642
|
+
{{ gap()?.impactOnFunnel }}
|
|
84643
|
+
</p>
|
|
84644
|
+
</div>
|
|
84645
|
+
}
|
|
84646
|
+
|
|
84647
|
+
<!-- Linked Funnel Weaknesses -->
|
|
84648
|
+
@if (gap()?.linkedFunnelWeaknessIds && (gap()?.linkedFunnelWeaknessIds?.length ?? 0) > 0) {
|
|
84649
|
+
<div [ngClass]="cardClasses()" class="rounded-xl p-5 border">
|
|
84650
|
+
<h4 [ngClass]="sectionTitleClasses()" class="text-base font-bold mb-4 pb-3 border-b" [class]="isDark() ? 'border-slate-700' : 'border-slate-200'">
|
|
84651
|
+
Related Funnel Weaknesses
|
|
84652
|
+
</h4>
|
|
84653
|
+
<div class="flex flex-wrap gap-2">
|
|
84654
|
+
@for (weaknessId of gap()?.linkedFunnelWeaknessIds; track $index) {
|
|
84655
|
+
<button
|
|
84656
|
+
type="button"
|
|
84657
|
+
(click)="openWeaknessDetail(weaknessId); $event.stopPropagation()"
|
|
84658
|
+
[ngClass]="weaknessChipClasses()"
|
|
84659
|
+
class="px-3 py-1.5 rounded-lg text-sm font-medium flex items-center gap-2 transition-all duration-200 hover:scale-105 hover:shadow-lg cursor-pointer group">
|
|
84660
|
+
<span>{{ getWeaknessTitle(weaknessId) }}</span>
|
|
84661
|
+
<svg class="w-4 h-4 transition-transform duration-200 group-hover:translate-x-0.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
84662
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"/>
|
|
84663
|
+
</svg>
|
|
84664
|
+
</button>
|
|
84665
|
+
}
|
|
84666
|
+
</div>
|
|
84667
|
+
</div>
|
|
84668
|
+
}
|
|
84669
|
+
|
|
84670
|
+
<!-- Linked Goals -->
|
|
84671
|
+
@if (gap()?.linkedGoalIds && (gap()?.linkedGoalIds?.length ?? 0) > 0) {
|
|
84672
|
+
<div [ngClass]="cardClasses()" class="rounded-xl p-5 border">
|
|
84673
|
+
<h4 [ngClass]="sectionTitleClasses()" class="text-base font-bold mb-4 pb-3 border-b" [class]="isDark() ? 'border-slate-700' : 'border-slate-200'">
|
|
84674
|
+
Related Goals
|
|
84675
|
+
</h4>
|
|
84676
|
+
<symphiq-related-goal-chips
|
|
84677
|
+
[relatedGoalIds]="gap()?.linkedGoalIds ?? []"
|
|
84678
|
+
[allGoals]="allGoals()"
|
|
84679
|
+
[viewMode]="viewMode()"
|
|
84680
|
+
/>
|
|
84681
|
+
</div>
|
|
84682
|
+
}
|
|
84683
|
+
|
|
84684
|
+
<!-- Supporting Answers -->
|
|
84685
|
+
@if (gap()?.supportingAnswers && (gap()?.supportingAnswers?.length ?? 0) > 0) {
|
|
84686
|
+
<div [ngClass]="cardClasses()" class="rounded-xl p-5 border">
|
|
84687
|
+
<h4 [ngClass]="sectionTitleClasses()" class="text-base font-bold mb-4 pb-3 border-b" [class]="isDark() ? 'border-slate-700' : 'border-slate-200'">
|
|
84688
|
+
Supporting Evidence
|
|
84689
|
+
</h4>
|
|
84690
|
+
<div class="space-y-2">
|
|
84691
|
+
@for (answer of gap()?.supportingAnswers; track $index) {
|
|
84692
|
+
<div [ngClass]="answerItemClasses()" class="px-4 py-2 rounded-lg flex items-center gap-2">
|
|
84693
|
+
<svg class="w-4 h-4 flex-shrink-0 text-orange-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
84694
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
|
84695
|
+
</svg>
|
|
84696
|
+
<span [ngClass]="answerTextClasses()" class="text-sm">{{ answer.answer || answer }}</span>
|
|
84697
|
+
</div>
|
|
84698
|
+
}
|
|
84699
|
+
</div>
|
|
84700
|
+
</div>
|
|
84701
|
+
}
|
|
84702
|
+
</div>
|
|
84659
84703
|
`
|
|
84660
84704
|
}]
|
|
84661
84705
|
}], null, { gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], allGoals: [{ type: i0.Input, args: [{ isSignal: true, alias: "allGoals", required: false }] }], allWeaknesses: [{ type: i0.Input, args: [{ isSignal: true, alias: "allWeaknesses", required: false }] }], currentModalState: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentModalState", required: false }] }] }); })();
|