@eric-emg/symphiq-components 1.2.342 → 1.2.344

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.
@@ -86935,6 +86935,7 @@ class PlanCardComponent {
86935
86935
  this.planInfo = input.required(...(ngDevMode ? [{ debugName: "planInfo" }] : []));
86936
86936
  this.isSelected = input(false, ...(ngDevMode ? [{ debugName: "isSelected" }] : []));
86937
86937
  this.selectedPeriodUnit = input(ChargebeeItemPricePeriodUnitEnum.YEAR, ...(ngDevMode ? [{ debugName: "selectedPeriodUnit" }] : []));
86938
+ this.monthlyComparisonPrice = input(undefined, ...(ngDevMode ? [{ debugName: "monthlyComparisonPrice" }] : []));
86938
86939
  this.planSelected = output();
86939
86940
  this.showBestValueBadge = computed(() => {
86940
86941
  return this.planInfo().bestValue === true;
@@ -87154,11 +87155,10 @@ At the end of each month, your total AI usage is calculated and automatically bi
87154
87155
  if (!this.showBestValueBadge())
87155
87156
  return null;
87156
87157
  const info = this.planInfo();
87157
- if (info.periodUnit === ChargebeeItemPricePeriodUnitEnum.YEAR) {
87158
+ const monthlyPrice = this.monthlyComparisonPrice();
87159
+ if (info.periodUnit === ChargebeeItemPricePeriodUnitEnum.YEAR && monthlyPrice) {
87158
87160
  const annualPrice = info.planItemPrice.price || 0;
87159
- const monthlyPrice = annualPrice / 12;
87160
- const monthlyPlanPrice = monthlyPrice * 1.2;
87161
- const totalMonthlyOver12 = monthlyPlanPrice * 12;
87161
+ const totalMonthlyOver12 = monthlyPrice * 12;
87162
87162
  const savings = totalMonthlyOver12 - annualPrice;
87163
87163
  if (savings > 0) {
87164
87164
  const symbol = this.getCurrencySymbol();
@@ -87169,7 +87169,7 @@ At the end of each month, your total AI usage is calculated and automatically bi
87169
87169
  return null;
87170
87170
  }
87171
87171
  static { this.ɵfac = function PlanCardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PlanCardComponent)(); }; }
87172
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PlanCardComponent, selectors: [["symphiq-plan-card"]], inputs: { viewMode: [1, "viewMode"], planInfo: [1, "planInfo"], isSelected: [1, "isSelected"], selectedPeriodUnit: [1, "selectedPeriodUnit"] }, outputs: { planSelected: "planSelected" }, decls: 45, vars: 35, consts: [[1, "relative", "rounded-2xl", "border-2", "p-6", "transition-all", "duration-200", "cursor-pointer", "hover:scale-[1.02]", 3, "click", "ngClass"], [1, "absolute", "-top-5", "left-1/2", "flex", "flex-col", "items-center", "gap-2", "z-10"], [1, "flex", "items-start", "justify-between", "mb-6"], [1, "flex-1"], [1, "text-xl", "font-bold", "mb-2", 3, "ngClass"], [1, "text-sm", "font-semibold", "mb-2", "flex", "items-center", "gap-1", 3, "ngClass"], [1, "flex", "items-baseline", "gap-2"], [1, "text-4xl", "font-bold", 3, "ngClass"], [1, "text-base", 3, "ngClass"], [1, "text-sm", "font-bold", "mt-2", "flex", "items-center", "gap-1", 3, "ngClass"], [1, "flex-shrink-0", "ml-4"], [1, "w-6", "h-6", "rounded-full", "border-2", "flex", "items-center", "justify-center", "transition-all", "duration-200", 3, "ngClass"], [1, "w-3", "h-3", "rounded-full", 3, "ngClass"], [1, "space-y-4", 3, "ngClass"], [1, "flex", "justify-between", "items-center", "py-3", "border-b", 3, "ngClass"], [1, "flex", "items-center", "gap-2"], [1, "text-sm", "font-medium", 3, "ngClass"], ["tooltipType", "markdown", "tooltipPosition", "right", 1, "w-5", "h-5", "rounded-full", "flex", "items-center", "justify-center", 3, "libSymphiqTooltip", "ngClass"], ["fill", "currentColor", "viewBox", "0 0 20 20", 1, "w-4", "h-4"], ["fill-rule", "evenodd", "d", "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-3a1 1 0 00-.867.5 1 1 0 11-1.731-1A3 3 0 0113 8a3.001 3.001 0 01-2 2.83V11a1 1 0 11-2 0v-1a1 1 0 011-1 1 1 0 100-2zm0 8a1 1 0 100-2 1 1 0 000 2z", "clip-rule", "evenodd"], [1, "text-sm", "font-semibold", "text-right", "max-w-[60%]", 3, "ngClass"], ["fill", "currentColor", "viewBox", "0 0 20 20", 1, "w-5", "h-5", 3, "ngClass"], ["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"], [1, "flex", "justify-between", "items-center", "py-3", 3, "ngClass"], [1, "pt-4", "mt-4", 3, "ngClass"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wider", "mb-2", 3, "ngClass"], [1, "text-sm", "leading-relaxed", 3, "ngClass", "innerHTML"], [1, "px-6", "py-2", "rounded-full", "text-base", "font-extrabold", "shadow-2xl", 3, "ngClass"], [1, "drop-shadow-lg"], [1, "px-3", "py-1", "rounded-full", "text-xs", "font-bold", "shadow-lg", 3, "ngClass", "savings-badge", "savings-badge-selected"], [1, "px-3", "py-1", "rounded-full", "text-xs", "font-bold", "shadow-lg", 3, "ngClass"], ["fill-rule", "evenodd", "d", "M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z", "clip-rule", "evenodd"], ["fill-rule", "evenodd", "d", "M5 2a1 1 0 011 1v1h1a1 1 0 010 2H6v1a1 1 0 01-2 0V6H3a1 1 0 010-2h1V3a1 1 0 011-1zm0 10a1 1 0 011 1v1h1a1 1 0 110 2H6v1a1 1 0 11-2 0v-1H3a1 1 0 110-2h1v-1a1 1 0 011-1zM12 2a1 1 0 01.967.744L14.146 7.2 17.5 9.134a1 1 0 010 1.732l-3.354 1.935-1.18 4.455a1 1 0 01-1.933 0L9.854 12.8 6.5 10.866a1 1 0 010-1.732l3.354-1.935 1.18-4.455A1 1 0 0112 2z", "clip-rule", "evenodd"]], template: function PlanCardComponent_Template(rf, ctx) { if (rf & 1) {
87172
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PlanCardComponent, selectors: [["symphiq-plan-card"]], inputs: { viewMode: [1, "viewMode"], planInfo: [1, "planInfo"], isSelected: [1, "isSelected"], selectedPeriodUnit: [1, "selectedPeriodUnit"], monthlyComparisonPrice: [1, "monthlyComparisonPrice"] }, outputs: { planSelected: "planSelected" }, decls: 45, vars: 35, consts: [[1, "relative", "rounded-2xl", "border-2", "p-6", "transition-all", "duration-200", "cursor-pointer", "hover:scale-[1.02]", 3, "click", "ngClass"], [1, "absolute", "-top-5", "left-1/2", "flex", "flex-col", "items-center", "gap-2", "z-10"], [1, "flex", "items-start", "justify-between", "mb-6"], [1, "flex-1"], [1, "text-xl", "font-bold", "mb-2", 3, "ngClass"], [1, "text-sm", "font-semibold", "mb-2", "flex", "items-center", "gap-1", 3, "ngClass"], [1, "flex", "items-baseline", "gap-2"], [1, "text-4xl", "font-bold", 3, "ngClass"], [1, "text-base", 3, "ngClass"], [1, "text-sm", "font-bold", "mt-2", "flex", "items-center", "gap-1", 3, "ngClass"], [1, "flex-shrink-0", "ml-4"], [1, "w-6", "h-6", "rounded-full", "border-2", "flex", "items-center", "justify-center", "transition-all", "duration-200", 3, "ngClass"], [1, "w-3", "h-3", "rounded-full", 3, "ngClass"], [1, "space-y-4", 3, "ngClass"], [1, "flex", "justify-between", "items-center", "py-3", "border-b", 3, "ngClass"], [1, "flex", "items-center", "gap-2"], [1, "text-sm", "font-medium", 3, "ngClass"], ["tooltipType", "markdown", "tooltipPosition", "right", 1, "w-5", "h-5", "rounded-full", "flex", "items-center", "justify-center", 3, "libSymphiqTooltip", "ngClass"], ["fill", "currentColor", "viewBox", "0 0 20 20", 1, "w-4", "h-4"], ["fill-rule", "evenodd", "d", "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-3a1 1 0 00-.867.5 1 1 0 11-1.731-1A3 3 0 0113 8a3.001 3.001 0 01-2 2.83V11a1 1 0 11-2 0v-1a1 1 0 011-1 1 1 0 100-2zm0 8a1 1 0 100-2 1 1 0 000 2z", "clip-rule", "evenodd"], [1, "text-sm", "font-semibold", "text-right", "max-w-[60%]", 3, "ngClass"], ["fill", "currentColor", "viewBox", "0 0 20 20", 1, "w-5", "h-5", 3, "ngClass"], ["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"], [1, "flex", "justify-between", "items-center", "py-3", 3, "ngClass"], [1, "pt-4", "mt-4", 3, "ngClass"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wider", "mb-2", 3, "ngClass"], [1, "text-sm", "leading-relaxed", 3, "ngClass", "innerHTML"], [1, "px-6", "py-2", "rounded-full", "text-base", "font-extrabold", "shadow-2xl", 3, "ngClass"], [1, "drop-shadow-lg"], [1, "px-3", "py-1", "rounded-full", "text-xs", "font-bold", "shadow-lg", 3, "ngClass", "savings-badge", "savings-badge-selected"], [1, "px-3", "py-1", "rounded-full", "text-xs", "font-bold", "shadow-lg", 3, "ngClass"], ["fill-rule", "evenodd", "d", "M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z", "clip-rule", "evenodd"], ["fill-rule", "evenodd", "d", "M5 2a1 1 0 011 1v1h1a1 1 0 010 2H6v1a1 1 0 01-2 0V6H3a1 1 0 010-2h1V3a1 1 0 011-1zm0 10a1 1 0 011 1v1h1a1 1 0 110 2H6v1a1 1 0 11-2 0v-1H3a1 1 0 110-2h1v-1a1 1 0 011-1zM12 2a1 1 0 01.967.744L14.146 7.2 17.5 9.134a1 1 0 010 1.732l-3.354 1.935-1.18 4.455a1 1 0 01-1.933 0L9.854 12.8 6.5 10.866a1 1 0 010-1.732l3.354-1.935 1.18-4.455A1 1 0 0112 2z", "clip-rule", "evenodd"]], template: function PlanCardComponent_Template(rf, ctx) { if (rf & 1) {
87173
87173
  i0.ɵɵelementStart(0, "div", 0);
87174
87174
  i0.ɵɵlistener("click", function PlanCardComponent_Template_div_click_0_listener() { return ctx.handleCardClick(); });
87175
87175
  i0.ɵɵconditionalCreate(1, PlanCardComponent_Conditional_1_Template, 5, 6, "div", 1);
@@ -87288,7 +87288,7 @@ At the end of each month, your total AI usage is calculated and automatically bi
87288
87288
  i0.ɵɵproperty("ngClass", ctx.contractTermsLabelClasses());
87289
87289
  i0.ɵɵadvance(2);
87290
87290
  i0.ɵɵproperty("ngClass", ctx.contractTermsTextClasses())("innerHTML", ctx.getContractTerms(), i0.ɵɵsanitizeHtml);
87291
- } }, dependencies: [CommonModule, i1$1.NgClass, TooltipDirective], styles: ["@keyframes _ngcontent-%COMP%_pulse-glow{0%,to{transform:translate(-50%) scale(1);box-shadow:0 0 20px #eab30899,0 0 40px #eab30866,0 0 60px #eab30833,inset 0 0 20px #ffffff4d}50%{transform:translate(-50%) scale(1.03);box-shadow:0 0 25px #eab308b3,0 0 50px #eab30880,0 0 75px #eab3084d,inset 0 0 25px #fff6}}@keyframes _ngcontent-%COMP%_pulse-glow-selected{0%,to{transform:translate(-50%) scale(1);box-shadow:0 0 20px #a855f799,0 0 40px #a855f766,0 0 60px #a855f733,inset 0 0 20px #ffffff4d}50%{transform:translate(-50%) scale(1.03);box-shadow:0 0 25px #a855f7b3,0 0 50px #a855f780,0 0 75px #a855f74d,inset 0 0 25px #fff6}}@keyframes _ngcontent-%COMP%_shimmer{0%{background-position:-200% center}to{background-position:200% center}}@keyframes _ngcontent-%COMP%_border-glow{0%,to{box-shadow:0 0 20px #eab30866,0 0 40px #eab30833,0 0 60px #eab3081a}50%{box-shadow:0 0 25px #eab30880,0 0 50px #eab3084d,0 0 75px #eab30826}}@keyframes _ngcontent-%COMP%_border-glow-selected{0%,to{box-shadow:0 0 20px #a855f766,0 0 40px #a855f733,0 0 60px #a855f71a}50%{box-shadow:0 0 25px #a855f780,0 0 50px #a855f74d,0 0 75px #a855f726}}.best-value-badge[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_pulse-glow 4s ease-in-out infinite;background:linear-gradient(135deg,#fbbf24,#f59e0b,#d946ef,#a855f7,#fbbf24);background-size:200% 200%;animation:_ngcontent-%COMP%_pulse-glow 4s ease-in-out infinite,_ngcontent-%COMP%_shimmer 6s linear infinite;position:relative;overflow:hidden;transition:all .3s ease}.best-value-badge-selected[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_pulse-glow-selected 4s ease-in-out infinite,_ngcontent-%COMP%_shimmer 6s linear infinite;background:linear-gradient(135deg,#a855f7,#9333ea,#7c3aed 50%,#a855f7 75% 100%)}.best-value-badge[_ngcontent-%COMP%]:before{content:\"\";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);animation:_ngcontent-%COMP%_shimmer 4s infinite}.best-value-card[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_border-glow 4s ease-in-out infinite;border-width:3px;transition:all .3s ease}.best-value-card-selected[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_border-glow-selected 4s ease-in-out infinite}.best-value-card[_ngcontent-%COMP%]:hover{transform:scale(1.02)}.savings-badge[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_pulse-glow 5s ease-in-out infinite}.savings-badge-selected[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_pulse-glow-selected 5s ease-in-out infinite}"], changeDetection: 0 }); }
87291
+ } }, dependencies: [CommonModule, i1$1.NgClass, TooltipDirective], styles: ["@keyframes _ngcontent-%COMP%_pulse-glow{0%,to{transform:translate(-50%) scale(1);box-shadow:0 0 20px #eab30899,0 0 40px #eab30866,0 0 60px #eab30833,inset 0 0 20px #ffffff4d}50%{transform:translate(-50%) scale(1.06);box-shadow:0 0 25px #eab308b3,0 0 50px #eab30880,0 0 75px #eab3084d,inset 0 0 25px #fff6}}@keyframes _ngcontent-%COMP%_pulse-glow-selected{0%,to{transform:translate(-50%) scale(1);box-shadow:0 0 20px #a855f799,0 0 40px #a855f766,0 0 60px #a855f733,inset 0 0 20px #ffffff4d}50%{transform:translate(-50%) scale(1.06);box-shadow:0 0 25px #a855f7b3,0 0 50px #a855f780,0 0 75px #a855f74d,inset 0 0 25px #fff6}}@keyframes _ngcontent-%COMP%_shimmer{0%{background-position:-200% center}to{background-position:200% center}}@keyframes _ngcontent-%COMP%_border-glow{0%,to{box-shadow:0 0 20px #eab30866,0 0 40px #eab30833,0 0 60px #eab3081a}50%{box-shadow:0 0 25px #eab30880,0 0 50px #eab3084d,0 0 75px #eab30826}}@keyframes _ngcontent-%COMP%_border-glow-selected{0%,to{box-shadow:0 0 20px #a855f766,0 0 40px #a855f733,0 0 60px #a855f71a}50%{box-shadow:0 0 25px #a855f780,0 0 50px #a855f74d,0 0 75px #a855f726}}.best-value-badge[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_pulse-glow 12s ease-in-out infinite;background:linear-gradient(135deg,#fbbf24,#f59e0b,#ec4899,#d946ef,#a855f7,#ec4899 75%,#f59e0b 85%,#fbbf24);background-size:300% 300%;animation:_ngcontent-%COMP%_pulse-glow 12s ease-in-out infinite,_ngcontent-%COMP%_shimmer 20s linear infinite;position:relative;overflow:hidden;transition:all .3s ease}.best-value-badge-selected[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_pulse-glow-selected 12s ease-in-out infinite,_ngcontent-%COMP%_shimmer 20s linear infinite;background:linear-gradient(135deg,#a855f7,#9333ea,#7c3aed,#8b5cf6,#9333ea,#a855f7);background-size:300% 300%}.best-value-badge[_ngcontent-%COMP%]:before{content:\"\";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);animation:_ngcontent-%COMP%_shimmer 12s infinite}.best-value-card[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_border-glow 12s ease-in-out infinite;border-width:3px;transition:all .3s ease}.best-value-card-selected[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_border-glow-selected 12s ease-in-out infinite}.best-value-card[_ngcontent-%COMP%]:hover{transform:scale(1.02)}.savings-badge[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_pulse-glow 14s ease-in-out infinite}.savings-badge-selected[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_pulse-glow-selected 14s ease-in-out infinite}"], changeDetection: 0 }); }
87292
87292
  }
87293
87293
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PlanCardComponent, [{
87294
87294
  type: Component,
@@ -87407,15 +87407,15 @@ At the end of each month, your total AI usage is calculated and automatically bi
87407
87407
  </div>
87408
87408
  </div>
87409
87409
  </div>
87410
- `, styles: ["@keyframes pulse-glow{0%,to{transform:translate(-50%) scale(1);box-shadow:0 0 20px #eab30899,0 0 40px #eab30866,0 0 60px #eab30833,inset 0 0 20px #ffffff4d}50%{transform:translate(-50%) scale(1.03);box-shadow:0 0 25px #eab308b3,0 0 50px #eab30880,0 0 75px #eab3084d,inset 0 0 25px #fff6}}@keyframes pulse-glow-selected{0%,to{transform:translate(-50%) scale(1);box-shadow:0 0 20px #a855f799,0 0 40px #a855f766,0 0 60px #a855f733,inset 0 0 20px #ffffff4d}50%{transform:translate(-50%) scale(1.03);box-shadow:0 0 25px #a855f7b3,0 0 50px #a855f780,0 0 75px #a855f74d,inset 0 0 25px #fff6}}@keyframes shimmer{0%{background-position:-200% center}to{background-position:200% center}}@keyframes border-glow{0%,to{box-shadow:0 0 20px #eab30866,0 0 40px #eab30833,0 0 60px #eab3081a}50%{box-shadow:0 0 25px #eab30880,0 0 50px #eab3084d,0 0 75px #eab30826}}@keyframes border-glow-selected{0%,to{box-shadow:0 0 20px #a855f766,0 0 40px #a855f733,0 0 60px #a855f71a}50%{box-shadow:0 0 25px #a855f780,0 0 50px #a855f74d,0 0 75px #a855f726}}.best-value-badge{animation:pulse-glow 4s ease-in-out infinite;background:linear-gradient(135deg,#fbbf24,#f59e0b,#d946ef,#a855f7,#fbbf24);background-size:200% 200%;animation:pulse-glow 4s ease-in-out infinite,shimmer 6s linear infinite;position:relative;overflow:hidden;transition:all .3s ease}.best-value-badge-selected{animation:pulse-glow-selected 4s ease-in-out infinite,shimmer 6s linear infinite;background:linear-gradient(135deg,#a855f7,#9333ea,#7c3aed 50%,#a855f7 75% 100%)}.best-value-badge:before{content:\"\";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);animation:shimmer 4s infinite}.best-value-card{animation:border-glow 4s ease-in-out infinite;border-width:3px;transition:all .3s ease}.best-value-card-selected{animation:border-glow-selected 4s ease-in-out infinite}.best-value-card:hover{transform:scale(1.02)}.savings-badge{animation:pulse-glow 5s ease-in-out infinite}.savings-badge-selected{animation:pulse-glow-selected 5s ease-in-out infinite}\n"] }]
87411
- }], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], planInfo: [{ type: i0.Input, args: [{ isSignal: true, alias: "planInfo", required: true }] }], isSelected: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSelected", required: false }] }], selectedPeriodUnit: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedPeriodUnit", required: false }] }], planSelected: [{ type: i0.Output, args: ["planSelected"] }] }); })();
87412
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PlanCardComponent, { className: "PlanCardComponent", filePath: "lib/components/profile-analysis-dashboard/cards/plan-card.component.ts", lineNumber: 265 }); })();
87410
+ `, styles: ["@keyframes pulse-glow{0%,to{transform:translate(-50%) scale(1);box-shadow:0 0 20px #eab30899,0 0 40px #eab30866,0 0 60px #eab30833,inset 0 0 20px #ffffff4d}50%{transform:translate(-50%) scale(1.06);box-shadow:0 0 25px #eab308b3,0 0 50px #eab30880,0 0 75px #eab3084d,inset 0 0 25px #fff6}}@keyframes pulse-glow-selected{0%,to{transform:translate(-50%) scale(1);box-shadow:0 0 20px #a855f799,0 0 40px #a855f766,0 0 60px #a855f733,inset 0 0 20px #ffffff4d}50%{transform:translate(-50%) scale(1.06);box-shadow:0 0 25px #a855f7b3,0 0 50px #a855f780,0 0 75px #a855f74d,inset 0 0 25px #fff6}}@keyframes shimmer{0%{background-position:-200% center}to{background-position:200% center}}@keyframes border-glow{0%,to{box-shadow:0 0 20px #eab30866,0 0 40px #eab30833,0 0 60px #eab3081a}50%{box-shadow:0 0 25px #eab30880,0 0 50px #eab3084d,0 0 75px #eab30826}}@keyframes border-glow-selected{0%,to{box-shadow:0 0 20px #a855f766,0 0 40px #a855f733,0 0 60px #a855f71a}50%{box-shadow:0 0 25px #a855f780,0 0 50px #a855f74d,0 0 75px #a855f726}}.best-value-badge{animation:pulse-glow 12s ease-in-out infinite;background:linear-gradient(135deg,#fbbf24,#f59e0b,#ec4899,#d946ef,#a855f7,#ec4899 75%,#f59e0b 85%,#fbbf24);background-size:300% 300%;animation:pulse-glow 12s ease-in-out infinite,shimmer 20s linear infinite;position:relative;overflow:hidden;transition:all .3s ease}.best-value-badge-selected{animation:pulse-glow-selected 12s ease-in-out infinite,shimmer 20s linear infinite;background:linear-gradient(135deg,#a855f7,#9333ea,#7c3aed,#8b5cf6,#9333ea,#a855f7);background-size:300% 300%}.best-value-badge:before{content:\"\";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);animation:shimmer 12s infinite}.best-value-card{animation:border-glow 12s ease-in-out infinite;border-width:3px;transition:all .3s ease}.best-value-card-selected{animation:border-glow-selected 12s ease-in-out infinite}.best-value-card:hover{transform:scale(1.02)}.savings-badge{animation:pulse-glow 14s ease-in-out infinite}.savings-badge-selected{animation:pulse-glow-selected 14s ease-in-out infinite}\n"] }]
87411
+ }], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], planInfo: [{ type: i0.Input, args: [{ isSignal: true, alias: "planInfo", required: true }] }], isSelected: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSelected", required: false }] }], selectedPeriodUnit: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedPeriodUnit", required: false }] }], monthlyComparisonPrice: [{ type: i0.Input, args: [{ isSignal: true, alias: "monthlyComparisonPrice", required: false }] }], planSelected: [{ type: i0.Output, args: ["planSelected"] }] }); })();
87412
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PlanCardComponent, { className: "PlanCardComponent", filePath: "lib/components/profile-analysis-dashboard/cards/plan-card.component.ts", lineNumber: 270 }); })();
87413
87413
 
87414
87414
  const _forTrack0$1 = ($index, $item) => $item.planItemPrice.id;
87415
87415
  function PlanSelectionContainerComponent_Conditional_19_Template(rf, ctx) { if (rf & 1) {
87416
87416
  i0.ɵɵelementStart(0, "div", 14);
87417
- i0.ɵɵelement(1, "symphiq-indeterminate-spinner", 17);
87418
- i0.ɵɵelementStart(2, "p", 18);
87417
+ i0.ɵɵelement(1, "symphiq-indeterminate-spinner", 18);
87418
+ i0.ɵɵelementStart(2, "p", 19);
87419
87419
  i0.ɵɵtext(3, " Loading your plan options... ");
87420
87420
  i0.ɵɵelementEnd()();
87421
87421
  } if (rf & 2) {
@@ -87427,17 +87427,17 @@ function PlanSelectionContainerComponent_Conditional_19_Template(rf, ctx) { if (
87427
87427
  } }
87428
87428
  function PlanSelectionContainerComponent_Conditional_20_For_2_Template(rf, ctx) { if (rf & 1) {
87429
87429
  const _r2 = i0.ɵɵgetCurrentView();
87430
- i0.ɵɵelementStart(0, "symphiq-plan-card", 20);
87430
+ i0.ɵɵelementStart(0, "symphiq-plan-card", 21);
87431
87431
  i0.ɵɵlistener("planSelected", function PlanSelectionContainerComponent_Conditional_20_For_2_Template_symphiq_plan_card_planSelected_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.handlePlanSelection($event)); });
87432
87432
  i0.ɵɵelementEnd();
87433
87433
  } if (rf & 2) {
87434
87434
  const plan_r3 = ctx.$implicit;
87435
87435
  const ctx_r0 = i0.ɵɵnextContext(2);
87436
- i0.ɵɵproperty("viewMode", ctx_r0.viewMode())("planInfo", plan_r3)("isSelected", ctx_r0.isSelectedPlan(plan_r3))("selectedPeriodUnit", ctx_r0.selectedPeriodUnit());
87436
+ i0.ɵɵproperty("viewMode", ctx_r0.viewMode())("planInfo", plan_r3)("isSelected", ctx_r0.isSelectedPlan(plan_r3))("selectedPeriodUnit", ctx_r0.selectedPeriodUnit())("monthlyComparisonPrice", ctx_r0.getMonthlyComparisonPrice());
87437
87437
  } }
87438
87438
  function PlanSelectionContainerComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
87439
87439
  i0.ɵɵelementStart(0, "div", 15);
87440
- i0.ɵɵrepeaterCreate(1, PlanSelectionContainerComponent_Conditional_20_For_2_Template, 1, 4, "symphiq-plan-card", 19, _forTrack0$1);
87440
+ i0.ɵɵrepeaterCreate(1, PlanSelectionContainerComponent_Conditional_20_For_2_Template, 1, 5, "symphiq-plan-card", 20, _forTrack0$1);
87441
87441
  i0.ɵɵelementEnd();
87442
87442
  } if (rf & 2) {
87443
87443
  const ctx_r0 = i0.ɵɵnextContext();
@@ -87447,14 +87447,14 @@ function PlanSelectionContainerComponent_Conditional_20_Template(rf, ctx) { if (
87447
87447
  function PlanSelectionContainerComponent_Conditional_21_Template(rf, ctx) { if (rf & 1) {
87448
87448
  i0.ɵɵelementStart(0, "div", 16);
87449
87449
  i0.ɵɵnamespaceSVG();
87450
- i0.ɵɵelementStart(1, "svg", 21);
87451
- i0.ɵɵelement(2, "path", 22);
87450
+ i0.ɵɵelementStart(1, "svg", 22);
87451
+ i0.ɵɵelement(2, "path", 23);
87452
87452
  i0.ɵɵelementEnd();
87453
87453
  i0.ɵɵnamespaceHTML();
87454
- i0.ɵɵelementStart(3, "p", 23);
87454
+ i0.ɵɵelementStart(3, "p", 24);
87455
87455
  i0.ɵɵtext(4, " No plans available ");
87456
87456
  i0.ɵɵelementEnd();
87457
- i0.ɵɵelementStart(5, "p", 24);
87457
+ i0.ɵɵelementStart(5, "p", 25);
87458
87458
  i0.ɵɵtext(6, " Please contact support if this issue persists ");
87459
87459
  i0.ɵɵelementEnd()();
87460
87460
  } if (rf & 2) {
@@ -87467,6 +87467,26 @@ function PlanSelectionContainerComponent_Conditional_21_Template(rf, ctx) { if (
87467
87467
  i0.ɵɵadvance(2);
87468
87468
  i0.ɵɵproperty("ngClass", ctx_r0.emptySubtextClasses());
87469
87469
  } }
87470
+ function PlanSelectionContainerComponent_Conditional_22_Template(rf, ctx) { if (rf & 1) {
87471
+ const _r4 = i0.ɵɵgetCurrentView();
87472
+ i0.ɵɵelementStart(0, "div", 17)(1, "div", 26)(2, "div", 27)(3, "span", 28);
87473
+ i0.ɵɵtext(4, "Selected:");
87474
+ i0.ɵɵelementEnd();
87475
+ i0.ɵɵtext(5);
87476
+ i0.ɵɵelementEnd();
87477
+ i0.ɵɵelementStart(6, "button", 29);
87478
+ i0.ɵɵlistener("click", function PlanSelectionContainerComponent_Conditional_22_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.handleCheckout()); });
87479
+ i0.ɵɵtext(7, " Checkout plan ");
87480
+ i0.ɵɵelementEnd()()();
87481
+ } if (rf & 2) {
87482
+ let tmp_3_0;
87483
+ const ctx_r0 = i0.ɵɵnextContext();
87484
+ i0.ɵɵproperty("ngClass", ctx_r0.footerClasses());
87485
+ i0.ɵɵadvance(2);
87486
+ i0.ɵɵproperty("ngClass", ctx_r0.footerTextClasses());
87487
+ i0.ɵɵadvance(3);
87488
+ i0.ɵɵtextInterpolate1(" ", (tmp_3_0 = ctx_r0.selectedPlan()) == null ? null : tmp_3_0.planItemPrice == null ? null : tmp_3_0.planItemPrice.externalName, " ");
87489
+ } }
87470
87490
  class PlanSelectionContainerComponent {
87471
87491
  constructor() {
87472
87492
  this.viewMode = input(ViewModeEnum.LIGHT, ...(ngDevMode ? [{ debugName: "viewMode" }] : []));
@@ -87477,18 +87497,32 @@ class PlanSelectionContainerComponent {
87477
87497
  this.periodUnitChanged = output();
87478
87498
  this.planSelected = output();
87479
87499
  this.editCurrency = output();
87480
- this.selectedPlanId = signal(undefined, ...(ngDevMode ? [{ debugName: "selectedPlanId" }] : []));
87500
+ this.checkout = output();
87501
+ this.selectedPlan = signal(undefined, ...(ngDevMode ? [{ debugName: "selectedPlan" }] : []));
87481
87502
  }
87482
87503
  handlePeriodChange(period) {
87483
- this.selectedPlanId.set(undefined);
87504
+ this.selectedPlan.set(undefined);
87484
87505
  this.periodUnitChanged.emit(period);
87485
87506
  }
87486
87507
  handlePlanSelection(plan) {
87487
- this.selectedPlanId.set(plan.planItemPrice.id);
87508
+ this.selectedPlan.set(plan);
87488
87509
  this.planSelected.emit(plan);
87489
87510
  }
87511
+ handleCheckout() {
87512
+ const plan = this.selectedPlan();
87513
+ if (plan) {
87514
+ this.checkout.emit(plan.planItemPrice);
87515
+ }
87516
+ }
87490
87517
  isSelectedPlan(plan) {
87491
- return this.selectedPlanId() === plan.planItemPrice.id;
87518
+ return this.selectedPlan()?.planItemPrice.id === plan.planItemPrice.id;
87519
+ }
87520
+ getMonthlyComparisonPrice() {
87521
+ const plans = this.planCardInfos();
87522
+ if (plans && plans.length > 1) {
87523
+ return plans[1].planItemPrice.price;
87524
+ }
87525
+ return undefined;
87492
87526
  }
87493
87527
  containerClasses() {
87494
87528
  return this.viewMode() === ViewModeEnum.DARK
@@ -87548,8 +87582,18 @@ class PlanSelectionContainerComponent {
87548
87582
  ? 'text-slate-500'
87549
87583
  : 'text-slate-500';
87550
87584
  }
87585
+ footerClasses() {
87586
+ return this.viewMode() === ViewModeEnum.DARK
87587
+ ? 'bg-slate-800 border-slate-700'
87588
+ : 'bg-white border-slate-200';
87589
+ }
87590
+ footerTextClasses() {
87591
+ return this.viewMode() === ViewModeEnum.DARK
87592
+ ? 'text-slate-200'
87593
+ : 'text-slate-700';
87594
+ }
87551
87595
  static { this.ɵfac = function PlanSelectionContainerComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PlanSelectionContainerComponent)(); }; }
87552
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PlanSelectionContainerComponent, selectors: [["symphiq-plan-selection-container"]], inputs: { viewMode: [1, "viewMode"], selectedCurrency: [1, "selectedCurrency"], planCardInfos: [1, "planCardInfos"], isLoading: [1, "isLoading"], selectedPeriodUnit: [1, "selectedPeriodUnit"] }, outputs: { periodUnitChanged: "periodUnitChanged", planSelected: "planSelected", editCurrency: "editCurrency" }, decls: 22, vars: 12, consts: [[1, "rounded-2xl", "border", "shadow-lg", "overflow-hidden", 3, "ngClass"], [1, "px-6", "py-5", "border-b", 3, "ngClass"], [1, "flex", "items-center", "gap-3"], [1, "p-2.5", "rounded-lg", 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, "text-xl", "font-bold", 3, "ngClass"], [1, "text-sm", "mt-0.5", "flex", "items-center", "gap-2", 3, "ngClass"], [1, "font-semibold"], [1, "inline-flex", "items-center", "gap-1", "px-2", "py-0.5", "text-xs", "font-medium", "rounded-md", "transition-colors", 3, "click", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-3", "h-3"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"], [1, "p-8", 3, "ngClass"], [3, "periodUnitChanged", "viewMode", "selectedPeriodUnit", "isLoading"], [1, "flex", "flex-col", "items-center", "justify-center", "space-y-6", "min-h-[500px]", "mb-32"], [1, "flex", "flex-col", "gap-8", "mb-32", "min-h-[500px]"], [1, "text-center", "py-16", 3, "ngClass"], [3, "viewMode", "size"], [1, "text-base", "font-medium", 3, "ngClass"], [3, "viewMode", "planInfo", "isSelected", "selectedPeriodUnit"], [3, "planSelected", "viewMode", "planInfo", "isSelected", "selectedPeriodUnit"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-16", "h-16", "mx-auto", "mb-4", 3, "ngClass"], ["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"], [1, "text-lg", "font-semibold", 3, "ngClass"], [1, "text-sm", "mt-2", 3, "ngClass"]], template: function PlanSelectionContainerComponent_Template(rf, ctx) { if (rf & 1) {
87596
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PlanSelectionContainerComponent, selectors: [["symphiq-plan-selection-container"]], inputs: { viewMode: [1, "viewMode"], selectedCurrency: [1, "selectedCurrency"], planCardInfos: [1, "planCardInfos"], isLoading: [1, "isLoading"], selectedPeriodUnit: [1, "selectedPeriodUnit"] }, outputs: { periodUnitChanged: "periodUnitChanged", planSelected: "planSelected", editCurrency: "editCurrency", checkout: "checkout" }, decls: 23, vars: 13, consts: [[1, "rounded-2xl", "border", "shadow-lg", "overflow-hidden", 3, "ngClass"], [1, "px-6", "py-5", "border-b", 3, "ngClass"], [1, "flex", "items-center", "gap-3"], [1, "p-2.5", "rounded-lg", 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, "text-xl", "font-bold", 3, "ngClass"], [1, "text-sm", "mt-0.5", "flex", "items-center", "gap-2", 3, "ngClass"], [1, "font-semibold"], [1, "inline-flex", "items-center", "gap-1", "px-2", "py-0.5", "text-xs", "font-medium", "rounded-md", "transition-colors", 3, "click", "ngClass"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-3", "h-3"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"], [1, "p-8", 3, "ngClass"], [3, "periodUnitChanged", "viewMode", "selectedPeriodUnit", "isLoading"], [1, "flex", "flex-col", "items-center", "justify-center", "space-y-6", "min-h-[500px]", "mb-32"], [1, "flex", "flex-col", "gap-8", "mb-32", "min-h-[500px]"], [1, "text-center", "py-16", 3, "ngClass"], [1, "fixed", "bottom-0", "left-0", "right-0", "px-6", "py-4", "border-t", "shadow-lg", "z-50", 3, "ngClass"], [3, "viewMode", "size"], [1, "text-base", "font-medium", 3, "ngClass"], [3, "viewMode", "planInfo", "isSelected", "selectedPeriodUnit", "monthlyComparisonPrice"], [3, "planSelected", "viewMode", "planInfo", "isSelected", "selectedPeriodUnit", "monthlyComparisonPrice"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-16", "h-16", "mx-auto", "mb-4", 3, "ngClass"], ["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"], [1, "text-lg", "font-semibold", 3, "ngClass"], [1, "text-sm", "mt-2", 3, "ngClass"], [1, "max-w-4xl", "mx-auto", "flex", "items-center", "justify-between"], [3, "ngClass"], [1, "font-medium"], [1, "px-6", "py-3", "bg-gradient-to-r", "from-emerald-500", "to-cyan-500", "hover:from-emerald-600", "hover:to-cyan-600", "text-white", "font-semibold", "rounded-lg", "shadow-md", "transition-all", "duration-200", 3, "click"]], template: function PlanSelectionContainerComponent_Template(rf, ctx) { if (rf & 1) {
87553
87597
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3);
87554
87598
  i0.ɵɵnamespaceSVG();
87555
87599
  i0.ɵɵelementStart(4, "svg", 4);
@@ -87578,6 +87622,7 @@ class PlanSelectionContainerComponent {
87578
87622
  i0.ɵɵelementEnd();
87579
87623
  i0.ɵɵconditionalCreate(19, PlanSelectionContainerComponent_Conditional_19_Template, 4, 3, "div", 14)(20, PlanSelectionContainerComponent_Conditional_20_Template, 3, 0, "div", 15)(21, PlanSelectionContainerComponent_Conditional_21_Template, 7, 4, "div", 16);
87580
87624
  i0.ɵɵelementEnd()();
87625
+ i0.ɵɵconditionalCreate(22, PlanSelectionContainerComponent_Conditional_22_Template, 8, 3, "div", 17);
87581
87626
  } if (rf & 2) {
87582
87627
  i0.ɵɵproperty("ngClass", ctx.containerClasses());
87583
87628
  i0.ɵɵadvance();
@@ -87598,6 +87643,8 @@ class PlanSelectionContainerComponent {
87598
87643
  i0.ɵɵproperty("viewMode", ctx.viewMode())("selectedPeriodUnit", ctx.selectedPeriodUnit())("isLoading", ctx.isLoading());
87599
87644
  i0.ɵɵadvance();
87600
87645
  i0.ɵɵconditional(ctx.isLoading() ? 19 : ctx.planCardInfos() && ctx.planCardInfos().length > 0 ? 20 : 21);
87646
+ i0.ɵɵadvance(3);
87647
+ i0.ɵɵconditional(ctx.selectedPlan() ? 22 : -1);
87601
87648
  } }, dependencies: [CommonModule, i1$1.NgClass, BillingPeriodToggleComponent, PlanCardComponent, IndeterminateSpinnerComponent], encapsulation: 2, changeDetection: 0 }); }
87602
87649
  }
87603
87650
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PlanSelectionContainerComponent, [{
@@ -87607,85 +87654,102 @@ class PlanSelectionContainerComponent {
87607
87654
  standalone: true,
87608
87655
  imports: [CommonModule, BillingPeriodToggleComponent, PlanCardComponent, IndeterminateSpinnerComponent],
87609
87656
  changeDetection: ChangeDetectionStrategy.OnPush,
87610
- template: `
87611
- <div [ngClass]="containerClasses()" class="rounded-2xl border shadow-lg overflow-hidden">
87612
- <div [ngClass]="headerClasses()" class="px-6 py-5 border-b">
87613
- <div class="flex items-center gap-3">
87614
- <div [ngClass]="iconContainerClasses()" class="p-2.5 rounded-lg">
87615
- <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
87616
- <path 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"></path>
87617
- </svg>
87618
- </div>
87619
- <div>
87620
- <h2 [ngClass]="titleClasses()" class="text-xl font-bold">
87621
- Choose Your Plan
87622
- </h2>
87623
- <p [ngClass]="subtitleClasses()" class="text-sm mt-0.5 flex items-center gap-2">
87624
- Selected currency: <span class="font-semibold">{{ selectedCurrency() }}</span>
87625
- <button
87626
- (click)="editCurrency.emit()"
87627
- [ngClass]="editButtonClasses()"
87628
- class="inline-flex items-center gap-1 px-2 py-0.5 text-xs font-medium rounded-md transition-colors"
87629
- >
87630
- <svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
87631
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"></path>
87632
- </svg>
87633
- Edit
87634
- </button>
87635
- </p>
87636
- </div>
87637
- </div>
87638
- </div>
87639
-
87640
- <div [ngClass]="contentClasses()" class="p-8">
87641
- <symphiq-billing-period-toggle
87642
- [viewMode]="viewMode()"
87643
- [selectedPeriodUnit]="selectedPeriodUnit()"
87644
- [isLoading]="isLoading()"
87645
- (periodUnitChanged)="handlePeriodChange($event)"
87646
- />
87647
-
87648
- @if (isLoading()) {
87649
- <div class="flex flex-col items-center justify-center space-y-6 min-h-[500px] mb-32">
87650
- <symphiq-indeterminate-spinner
87651
- [viewMode]="viewMode()"
87652
- [size]="'large'"
87653
- />
87654
- <p [ngClass]="loadingTextClasses()" class="text-base font-medium">
87655
- Loading your plan options...
87656
- </p>
87657
- </div>
87658
- } @else if (planCardInfos() && planCardInfos()!.length > 0) {
87659
- <div class="flex flex-col gap-8 mb-32 min-h-[500px]">
87660
- @for (plan of planCardInfos(); track plan.planItemPrice.id) {
87661
- <symphiq-plan-card
87662
- [viewMode]="viewMode()"
87663
- [planInfo]="plan"
87664
- [isSelected]="isSelectedPlan(plan)"
87665
- [selectedPeriodUnit]="selectedPeriodUnit()"
87666
- (planSelected)="handlePlanSelection($event)"
87667
- />
87668
- }
87669
- </div>
87670
- } @else {
87671
- <div [ngClass]="emptyStateClasses()" class="text-center py-16">
87672
- <svg [ngClass]="emptyIconClasses()" class="w-16 h-16 mx-auto mb-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
87673
- <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"></path>
87674
- </svg>
87675
- <p [ngClass]="emptyTextClasses()" class="text-lg font-semibold">
87676
- No plans available
87677
- </p>
87678
- <p [ngClass]="emptySubtextClasses()" class="text-sm mt-2">
87679
- Please contact support if this issue persists
87680
- </p>
87681
- </div>
87682
- }
87683
- </div>
87684
- </div>
87657
+ template: `
87658
+ <div [ngClass]="containerClasses()" class="rounded-2xl border shadow-lg overflow-hidden">
87659
+ <div [ngClass]="headerClasses()" class="px-6 py-5 border-b">
87660
+ <div class="flex items-center gap-3">
87661
+ <div [ngClass]="iconContainerClasses()" class="p-2.5 rounded-lg">
87662
+ <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
87663
+ <path 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"></path>
87664
+ </svg>
87665
+ </div>
87666
+ <div>
87667
+ <h2 [ngClass]="titleClasses()" class="text-xl font-bold">
87668
+ Choose Your Plan
87669
+ </h2>
87670
+ <p [ngClass]="subtitleClasses()" class="text-sm mt-0.5 flex items-center gap-2">
87671
+ Selected currency: <span class="font-semibold">{{ selectedCurrency() }}</span>
87672
+ <button
87673
+ (click)="editCurrency.emit()"
87674
+ [ngClass]="editButtonClasses()"
87675
+ class="inline-flex items-center gap-1 px-2 py-0.5 text-xs font-medium rounded-md transition-colors"
87676
+ >
87677
+ <svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
87678
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"></path>
87679
+ </svg>
87680
+ Edit
87681
+ </button>
87682
+ </p>
87683
+ </div>
87684
+ </div>
87685
+ </div>
87686
+
87687
+ <div [ngClass]="contentClasses()" class="p-8">
87688
+ <symphiq-billing-period-toggle
87689
+ [viewMode]="viewMode()"
87690
+ [selectedPeriodUnit]="selectedPeriodUnit()"
87691
+ [isLoading]="isLoading()"
87692
+ (periodUnitChanged)="handlePeriodChange($event)"
87693
+ />
87694
+
87695
+ @if (isLoading()) {
87696
+ <div class="flex flex-col items-center justify-center space-y-6 min-h-[500px] mb-32">
87697
+ <symphiq-indeterminate-spinner
87698
+ [viewMode]="viewMode()"
87699
+ [size]="'large'"
87700
+ />
87701
+ <p [ngClass]="loadingTextClasses()" class="text-base font-medium">
87702
+ Loading your plan options...
87703
+ </p>
87704
+ </div>
87705
+ } @else if (planCardInfos() && planCardInfos()!.length > 0) {
87706
+ <div class="flex flex-col gap-8 mb-32 min-h-[500px]">
87707
+ @for (plan of planCardInfos(); track plan.planItemPrice.id) {
87708
+ <symphiq-plan-card
87709
+ [viewMode]="viewMode()"
87710
+ [planInfo]="plan"
87711
+ [isSelected]="isSelectedPlan(plan)"
87712
+ [selectedPeriodUnit]="selectedPeriodUnit()"
87713
+ [monthlyComparisonPrice]="getMonthlyComparisonPrice()"
87714
+ (planSelected)="handlePlanSelection($event)"
87715
+ />
87716
+ }
87717
+ </div>
87718
+ } @else {
87719
+ <div [ngClass]="emptyStateClasses()" class="text-center py-16">
87720
+ <svg [ngClass]="emptyIconClasses()" class="w-16 h-16 mx-auto mb-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
87721
+ <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"></path>
87722
+ </svg>
87723
+ <p [ngClass]="emptyTextClasses()" class="text-lg font-semibold">
87724
+ No plans available
87725
+ </p>
87726
+ <p [ngClass]="emptySubtextClasses()" class="text-sm mt-2">
87727
+ Please contact support if this issue persists
87728
+ </p>
87729
+ </div>
87730
+ }
87731
+ </div>
87732
+ </div>
87733
+
87734
+ @if (selectedPlan()) {
87735
+ <div [ngClass]="footerClasses()" class="fixed bottom-0 left-0 right-0 px-6 py-4 border-t shadow-lg z-50">
87736
+ <div class="max-w-4xl mx-auto flex items-center justify-between">
87737
+ <div [ngClass]="footerTextClasses()">
87738
+ <span class="font-medium">Selected:</span> {{ selectedPlan()?.planItemPrice?.externalName }}
87739
+ </div>
87740
+ <button
87741
+ (click)="handleCheckout()"
87742
+ class="px-6 py-3 bg-gradient-to-r from-emerald-500 to-cyan-500 hover:from-emerald-600 hover:to-cyan-600 text-white font-semibold rounded-lg shadow-md transition-all duration-200"
87743
+ >
87744
+ Checkout plan
87745
+ </button>
87746
+ </div>
87747
+ </div>
87748
+ }
87685
87749
  `
87686
87750
  }]
87687
- }], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], selectedCurrency: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedCurrency", required: false }] }], planCardInfos: [{ type: i0.Input, args: [{ isSignal: true, alias: "planCardInfos", required: false }] }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: false }] }], selectedPeriodUnit: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedPeriodUnit", required: false }] }], periodUnitChanged: [{ type: i0.Output, args: ["periodUnitChanged"] }], planSelected: [{ type: i0.Output, args: ["planSelected"] }], editCurrency: [{ type: i0.Output, args: ["editCurrency"] }] }); })();
87688
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PlanSelectionContainerComponent, { className: "PlanSelectionContainerComponent", filePath: "lib/components/profile-analysis-dashboard/cards/plan-selection-container.component.ts", lineNumber: 90 }); })();
87751
+ }], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], selectedCurrency: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedCurrency", required: false }] }], planCardInfos: [{ type: i0.Input, args: [{ isSignal: true, alias: "planCardInfos", required: false }] }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: false }] }], selectedPeriodUnit: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedPeriodUnit", required: false }] }], periodUnitChanged: [{ type: i0.Output, args: ["periodUnitChanged"] }], planSelected: [{ type: i0.Output, args: ["planSelected"] }], editCurrency: [{ type: i0.Output, args: ["editCurrency"] }], checkout: [{ type: i0.Output, args: ["checkout"] }] }); })();
87752
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PlanSelectionContainerComponent, { className: "PlanSelectionContainerComponent", filePath: "lib/components/profile-analysis-dashboard/cards/plan-selection-container.component.ts", lineNumber: 107 }); })();
87689
87753
 
87690
87754
  class SubscriptionValuePropositionCardComponent {
87691
87755
  constructor() {