@eric-emg/symphiq-components 1.2.333 → 1.2.335
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 +168 -161
- package/fesm2022/symphiq-components.mjs.map +1 -1
- package/index.d.ts +6 -6
- package/index.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -86780,7 +86780,7 @@ class BillingPeriodToggleComponent {
|
|
|
86780
86780
|
: 'text-slate-600';
|
|
86781
86781
|
}
|
|
86782
86782
|
static { this.ɵfac = function BillingPeriodToggleComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || BillingPeriodToggleComponent)(); }; }
|
|
86783
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: BillingPeriodToggleComponent, selectors: [["symphiq-billing-period-toggle"]], inputs: { viewMode: [1, "viewMode"], selectedPeriodUnit: [1, "selectedPeriodUnit"], isLoading: [1, "isLoading"] }, outputs: { periodUnitChanged: "periodUnitChanged" }, decls: 15, vars: 10, consts: [[1, "flex", "flex-col", "items-center", "gap-4", "mb-8"], [1, "flex", "items-center", "gap-3"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"], [1, "inline-flex", "rounded-xl", "p-1", "transition-all", "duration-200", 3, "ngClass"], ["type", "button", 1, "relative", "px-6", "py-3", "rounded-lg", "font-semibold", "text-sm", "transition-all", "duration-200", "disabled:cursor-not-allowed", 3, "click", "disabled", "ngClass"], [1, "relative", "z-10"], [1, "absolute", "inset-0", "rounded-lg", "shadow-lg", "opacity-20"], [1, "text-sm", 3, "ngClass"]], template: function BillingPeriodToggleComponent_Template(rf, ctx) { if (rf & 1) {
|
|
86783
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: BillingPeriodToggleComponent, selectors: [["symphiq-billing-period-toggle"]], inputs: { viewMode: [1, "viewMode"], selectedPeriodUnit: [1, "selectedPeriodUnit"], isLoading: [1, "isLoading"] }, outputs: { periodUnitChanged: "periodUnitChanged" }, decls: 15, vars: 10, consts: [[1, "flex", "flex-col", "items-center", "gap-4", "mb-8"], [1, "flex", "items-center", "gap-3"], ["fill", "none", "stroke", "currentColor", "viewBox", "0 0 24 24", 1, "w-5", "h-5", 3, "ngClass"], ["stroke-linecap", "round", "stroke-linejoin", "round", "stroke-width", "2", "d", "M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"], [1, "inline-flex", "gap-2", "rounded-xl", "p-1.5", "transition-all", "duration-200", 3, "ngClass"], ["type", "button", 1, "relative", "px-6", "py-3", "rounded-lg", "font-semibold", "text-sm", "transition-all", "duration-200", "disabled:cursor-not-allowed", 3, "click", "disabled", "ngClass"], [1, "relative", "z-10"], [1, "absolute", "inset-0", "rounded-lg", "shadow-lg", "opacity-20"], [1, "text-sm", 3, "ngClass"]], template: function BillingPeriodToggleComponent_Template(rf, ctx) { if (rf & 1) {
|
|
86784
86784
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
|
|
86785
86785
|
i0.ɵɵnamespaceSVG();
|
|
86786
86786
|
i0.ɵɵelementStart(2, "svg", 2);
|
|
@@ -86830,41 +86830,41 @@ class BillingPeriodToggleComponent {
|
|
|
86830
86830
|
standalone: true,
|
|
86831
86831
|
imports: [CommonModule],
|
|
86832
86832
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
86833
|
-
template: `
|
|
86834
|
-
<div class="flex flex-col items-center gap-4 mb-8">
|
|
86835
|
-
<div class="flex items-center gap-3">
|
|
86836
|
-
<svg [ngClass]="iconClasses()" class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
86837
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"></path>
|
|
86838
|
-
</svg>
|
|
86839
|
-
<div [ngClass]="toggleContainerClasses()" class="inline-flex rounded-xl p-1 transition-all duration-200">
|
|
86840
|
-
<button
|
|
86841
|
-
type="button"
|
|
86842
|
-
[disabled]="isLoading()"
|
|
86843
|
-
(click)="selectPeriod(periodUnitEnum.YEAR)"
|
|
86844
|
-
[ngClass]="getButtonClasses(periodUnitEnum.YEAR)"
|
|
86845
|
-
class="relative px-6 py-3 rounded-lg font-semibold text-sm transition-all duration-200 disabled:cursor-not-allowed">
|
|
86846
|
-
<span class="relative z-10">Annual contract</span>
|
|
86847
|
-
@if (selectedPeriodUnit() === periodUnitEnum.YEAR) {
|
|
86848
|
-
<div class="absolute inset-0 rounded-lg shadow-lg opacity-20"></div>
|
|
86849
|
-
}
|
|
86850
|
-
</button>
|
|
86851
|
-
<button
|
|
86852
|
-
type="button"
|
|
86853
|
-
[disabled]="isLoading()"
|
|
86854
|
-
(click)="selectPeriod(periodUnitEnum.MONTH)"
|
|
86855
|
-
[ngClass]="getButtonClasses(periodUnitEnum.MONTH)"
|
|
86856
|
-
class="relative px-6 py-3 rounded-lg font-semibold text-sm transition-all duration-200 disabled:cursor-not-allowed">
|
|
86857
|
-
<span class="relative z-10">Monthly contract</span>
|
|
86858
|
-
@if (selectedPeriodUnit() === periodUnitEnum.MONTH) {
|
|
86859
|
-
<div class="absolute inset-0 rounded-lg shadow-lg opacity-20"></div>
|
|
86860
|
-
}
|
|
86861
|
-
</button>
|
|
86862
|
-
</div>
|
|
86863
|
-
</div>
|
|
86864
|
-
<p [ngClass]="subtitleClasses()" class="text-sm">
|
|
86865
|
-
{{ getSubtitle() }}
|
|
86866
|
-
</p>
|
|
86867
|
-
</div>
|
|
86833
|
+
template: `
|
|
86834
|
+
<div class="flex flex-col items-center gap-4 mb-8">
|
|
86835
|
+
<div class="flex items-center gap-3">
|
|
86836
|
+
<svg [ngClass]="iconClasses()" class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
86837
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"></path>
|
|
86838
|
+
</svg>
|
|
86839
|
+
<div [ngClass]="toggleContainerClasses()" class="inline-flex gap-2 rounded-xl p-1.5 transition-all duration-200">
|
|
86840
|
+
<button
|
|
86841
|
+
type="button"
|
|
86842
|
+
[disabled]="isLoading()"
|
|
86843
|
+
(click)="selectPeriod(periodUnitEnum.YEAR)"
|
|
86844
|
+
[ngClass]="getButtonClasses(periodUnitEnum.YEAR)"
|
|
86845
|
+
class="relative px-6 py-3 rounded-lg font-semibold text-sm transition-all duration-200 disabled:cursor-not-allowed">
|
|
86846
|
+
<span class="relative z-10">Annual contract</span>
|
|
86847
|
+
@if (selectedPeriodUnit() === periodUnitEnum.YEAR) {
|
|
86848
|
+
<div class="absolute inset-0 rounded-lg shadow-lg opacity-20"></div>
|
|
86849
|
+
}
|
|
86850
|
+
</button>
|
|
86851
|
+
<button
|
|
86852
|
+
type="button"
|
|
86853
|
+
[disabled]="isLoading()"
|
|
86854
|
+
(click)="selectPeriod(periodUnitEnum.MONTH)"
|
|
86855
|
+
[ngClass]="getButtonClasses(periodUnitEnum.MONTH)"
|
|
86856
|
+
class="relative px-6 py-3 rounded-lg font-semibold text-sm transition-all duration-200 disabled:cursor-not-allowed">
|
|
86857
|
+
<span class="relative z-10">Monthly contract</span>
|
|
86858
|
+
@if (selectedPeriodUnit() === periodUnitEnum.MONTH) {
|
|
86859
|
+
<div class="absolute inset-0 rounded-lg shadow-lg opacity-20"></div>
|
|
86860
|
+
}
|
|
86861
|
+
</button>
|
|
86862
|
+
</div>
|
|
86863
|
+
</div>
|
|
86864
|
+
<p [ngClass]="subtitleClasses()" class="text-sm">
|
|
86865
|
+
{{ getSubtitle() }}
|
|
86866
|
+
</p>
|
|
86867
|
+
</div>
|
|
86868
86868
|
`
|
|
86869
86869
|
}]
|
|
86870
86870
|
}], null, { viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], selectedPeriodUnit: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedPeriodUnit", required: false }] }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: false }] }], periodUnitChanged: [{ type: i0.Output, args: ["periodUnitChanged"] }] }); })();
|
|
@@ -86887,8 +86887,8 @@ function PlanCardComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
|
86887
86887
|
function PlanCardComponent_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
86888
86888
|
i0.ɵɵelementStart(0, "button", 15);
|
|
86889
86889
|
i0.ɵɵnamespaceSVG();
|
|
86890
|
-
i0.ɵɵelementStart(1, "svg",
|
|
86891
|
-
i0.ɵɵelement(2, "path",
|
|
86890
|
+
i0.ɵɵelementStart(1, "svg", 25);
|
|
86891
|
+
i0.ɵɵelement(2, "path", 26);
|
|
86892
86892
|
i0.ɵɵelementEnd()();
|
|
86893
86893
|
} if (rf & 2) {
|
|
86894
86894
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
@@ -86897,8 +86897,8 @@ function PlanCardComponent_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
|
86897
86897
|
function PlanCardComponent_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
86898
86898
|
i0.ɵɵelementStart(0, "button", 15);
|
|
86899
86899
|
i0.ɵɵnamespaceSVG();
|
|
86900
|
-
i0.ɵɵelementStart(1, "svg",
|
|
86901
|
-
i0.ɵɵelement(2, "path",
|
|
86900
|
+
i0.ɵɵelementStart(1, "svg", 25);
|
|
86901
|
+
i0.ɵɵelement(2, "path", 26);
|
|
86902
86902
|
i0.ɵɵelementEnd()();
|
|
86903
86903
|
} if (rf & 2) {
|
|
86904
86904
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
@@ -86922,7 +86922,7 @@ class PlanCardComponent {
|
|
|
86922
86922
|
this.selectedPeriodUnit = input(ChargebeeItemPricePeriodUnitEnum.YEAR, ...(ngDevMode ? [{ debugName: "selectedPeriodUnit" }] : []));
|
|
86923
86923
|
this.planSelected = output();
|
|
86924
86924
|
this.showBestValueBadge = computed(() => {
|
|
86925
|
-
return this.planInfo().
|
|
86925
|
+
return this.planInfo().bestValue === true;
|
|
86926
86926
|
}, ...(ngDevMode ? [{ debugName: "showBestValueBadge" }] : []));
|
|
86927
86927
|
}
|
|
86928
86928
|
handleCardClick() {
|
|
@@ -86930,12 +86930,14 @@ class PlanCardComponent {
|
|
|
86930
86930
|
}
|
|
86931
86931
|
getPlanTitle() {
|
|
86932
86932
|
const info = this.planInfo();
|
|
86933
|
-
|
|
86934
|
-
return `${info.planItem.name} - ${periodLabel}`;
|
|
86933
|
+
return info.planItemPrice.externalName || info.planItem.externalName || info.planItem.name || 'Plan';
|
|
86935
86934
|
}
|
|
86936
86935
|
formatPrice() {
|
|
86937
86936
|
const info = this.planInfo();
|
|
86938
|
-
|
|
86937
|
+
let price = info.planItemPrice.price || 0;
|
|
86938
|
+
if (info.periodUnit === ChargebeeItemPricePeriodUnitEnum.YEAR) {
|
|
86939
|
+
price = price / 12;
|
|
86940
|
+
}
|
|
86939
86941
|
const symbol = this.getCurrencySymbol();
|
|
86940
86942
|
const formattedPrice = Math.floor(price / 100).toLocaleString();
|
|
86941
86943
|
return `${symbol}${formattedPrice}`;
|
|
@@ -87088,7 +87090,7 @@ class PlanCardComponent {
|
|
|
87088
87090
|
: 'text-slate-600';
|
|
87089
87091
|
}
|
|
87090
87092
|
static { this.ɵfac = function PlanCardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PlanCardComponent)(); }; }
|
|
87091
|
-
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: 51, vars: 34, 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-3", "left-1/2", "transform", "-translate-x-1/2", "px-4", "py-1", "rounded-full", "text-xs", "font-bold", 3, "ngClass"], [1, "flex", "items-start", "justify-between", "mb-6"], [1, "flex-1"], [1, "text-xl", "font-bold", "mb-2", 3, "ngClass"], [1, "flex", "items-baseline", "gap-2"], [1, "text-4xl", "font-bold", 3, "ngClass"], [1, "text-base", 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"], [1, "w-4", "h-4", "rounded-full", "flex", "items-center", "justify-center", 3, "ngClass"], [1, "text-sm", "font-semibold", 3, "ngClass"], [1, "text-right"], [1, "text-xs", "mt-1", 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, "pt-4", 3, "ngClass"], [1, "text-xs", "font-semibold", "uppercase", "tracking-wider", "mb-2", 3, "ngClass"], [1, "text-sm", "leading-relaxed", 3, "ngClass"], ["fill", "currentColor", "viewBox", "0 0 20 20", 1, "w-3", "h-3"], ["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"]], template: function PlanCardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
87093
|
+
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: 51, vars: 34, 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-3", "left-1/2", "transform", "-translate-x-1/2", "px-4", "py-1", "rounded-full", "text-xs", "font-bold", 3, "ngClass"], [1, "flex", "items-start", "justify-between", "mb-6"], [1, "flex-1"], [1, "text-xl", "font-bold", "mb-2", 3, "ngClass"], [1, "flex", "items-baseline", "gap-2"], [1, "text-4xl", "font-bold", 3, "ngClass"], [1, "text-base", 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"], [1, "w-4", "h-4", "rounded-full", "flex", "items-center", "justify-center", 3, "ngClass"], [1, "text-sm", "font-semibold", 3, "ngClass"], [1, "text-right"], [1, "text-xs", "mt-1", 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"], ["fill", "currentColor", "viewBox", "0 0 20 20", 1, "w-3", "h-3"], ["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"]], template: function PlanCardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
87092
87094
|
i0.ɵɵelementStart(0, "div", 0);
|
|
87093
87095
|
i0.ɵɵlistener("click", function PlanCardComponent_Template_div_click_0_listener() { return ctx.handleCardClick(); });
|
|
87094
87096
|
i0.ɵɵconditionalCreate(1, PlanCardComponent_Conditional_1_Template, 2, 1, "div", 1);
|
|
@@ -87138,7 +87140,7 @@ class PlanCardComponent {
|
|
|
87138
87140
|
i0.ɵɵelement(40, "path", 20);
|
|
87139
87141
|
i0.ɵɵelementEnd()();
|
|
87140
87142
|
i0.ɵɵnamespaceHTML();
|
|
87141
|
-
i0.ɵɵelementStart(41, "div",
|
|
87143
|
+
i0.ɵɵelementStart(41, "div", 21)(42, "span", 14);
|
|
87142
87144
|
i0.ɵɵtext(43, "Google Analytics integration");
|
|
87143
87145
|
i0.ɵɵelementEnd();
|
|
87144
87146
|
i0.ɵɵnamespaceSVG();
|
|
@@ -87146,10 +87148,10 @@ class PlanCardComponent {
|
|
|
87146
87148
|
i0.ɵɵelement(45, "path", 20);
|
|
87147
87149
|
i0.ɵɵelementEnd()();
|
|
87148
87150
|
i0.ɵɵnamespaceHTML();
|
|
87149
|
-
i0.ɵɵelementStart(46, "div",
|
|
87151
|
+
i0.ɵɵelementStart(46, "div", 22)(47, "h4", 23);
|
|
87150
87152
|
i0.ɵɵtext(48, " Contract terms ");
|
|
87151
87153
|
i0.ɵɵelementEnd();
|
|
87152
|
-
i0.ɵɵelementStart(49, "p",
|
|
87154
|
+
i0.ɵɵelementStart(49, "p", 24);
|
|
87153
87155
|
i0.ɵɵtext(50);
|
|
87154
87156
|
i0.ɵɵelementEnd()()()();
|
|
87155
87157
|
} if (rf & 2) {
|
|
@@ -87229,118 +87231,118 @@ class PlanCardComponent {
|
|
|
87229
87231
|
standalone: true,
|
|
87230
87232
|
imports: [CommonModule],
|
|
87231
87233
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
87232
|
-
template: `
|
|
87233
|
-
<div
|
|
87234
|
-
(click)="handleCardClick()"
|
|
87235
|
-
[ngClass]="cardContainerClasses()"
|
|
87236
|
-
class="relative rounded-2xl border-2 p-6 transition-all duration-200 cursor-pointer hover:scale-[1.02]">
|
|
87237
|
-
|
|
87238
|
-
@if (showBestValueBadge()) {
|
|
87239
|
-
<div [ngClass]="badgeClasses()" class="absolute -top-3 left-1/2 transform -translate-x-1/2 px-4 py-1 rounded-full text-xs font-bold">
|
|
87240
|
-
Best value
|
|
87241
|
-
</div>
|
|
87242
|
-
}
|
|
87243
|
-
|
|
87244
|
-
<div class="flex items-start justify-between mb-6">
|
|
87245
|
-
<div class="flex-1">
|
|
87246
|
-
<h3 [ngClass]="planTitleClasses()" class="text-xl font-bold mb-2">
|
|
87247
|
-
{{ getPlanTitle() }}
|
|
87248
|
-
</h3>
|
|
87249
|
-
<div class="flex items-baseline gap-2">
|
|
87250
|
-
<span [ngClass]="priceClasses()" class="text-4xl font-bold">
|
|
87251
|
-
{{ formatPrice() }}
|
|
87252
|
-
</span>
|
|
87253
|
-
<span [ngClass]="pricePeriodClasses()" class="text-base">
|
|
87254
|
-
{{ getPricePeriod() }}
|
|
87255
|
-
</span>
|
|
87256
|
-
</div>
|
|
87257
|
-
</div>
|
|
87258
|
-
<div class="flex-shrink-0 ml-4">
|
|
87259
|
-
<div [ngClass]="radioClasses()" class="w-6 h-6 rounded-full border-2 flex items-center justify-center transition-all duration-200">
|
|
87260
|
-
@if (isSelected()) {
|
|
87261
|
-
<div [ngClass]="radioInnerClasses()" class="w-3 h-3 rounded-full"></div>
|
|
87262
|
-
}
|
|
87263
|
-
</div>
|
|
87264
|
-
</div>
|
|
87265
|
-
</div>
|
|
87266
|
-
|
|
87267
|
-
<div [ngClass]="sectionClasses()" class="space-y-4">
|
|
87268
|
-
<div [ngClass]="featureRowClasses()" class="flex justify-between items-center py-3 border-b">
|
|
87269
|
-
<div class="flex items-center gap-2">
|
|
87270
|
-
<span [ngClass]="labelClasses()" class="text-sm font-medium">AI usage</span>
|
|
87271
|
-
@if (hasTooltip('aiUsage')) {
|
|
87272
|
-
<button [ngClass]="tooltipButtonClasses()" class="w-4 h-4 rounded-full flex items-center justify-center">
|
|
87273
|
-
<svg class="w-3 h-3" fill="currentColor" viewBox="0 0 20 20">
|
|
87274
|
-
<path 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"></path>
|
|
87275
|
-
</svg>
|
|
87276
|
-
</button>
|
|
87277
|
-
}
|
|
87278
|
-
</div>
|
|
87279
|
-
<span [ngClass]="valueClasses()" class="text-sm font-semibold">
|
|
87280
|
-
charged monthly based on your actual usage
|
|
87281
|
-
</span>
|
|
87282
|
-
</div>
|
|
87283
|
-
|
|
87284
|
-
<div [ngClass]="featureRowClasses()" class="flex justify-between items-center py-3 border-b">
|
|
87285
|
-
<div class="flex items-center gap-2">
|
|
87286
|
-
<span [ngClass]="labelClasses()" class="text-sm font-medium">Shops</span>
|
|
87287
|
-
@if (hasTooltip('shops')) {
|
|
87288
|
-
<button [ngClass]="tooltipButtonClasses()" class="w-4 h-4 rounded-full flex items-center justify-center">
|
|
87289
|
-
<svg class="w-3 h-3" fill="currentColor" viewBox="0 0 20 20">
|
|
87290
|
-
<path 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"></path>
|
|
87291
|
-
</svg>
|
|
87292
|
-
</button>
|
|
87293
|
-
}
|
|
87294
|
-
</div>
|
|
87295
|
-
<div class="text-right">
|
|
87296
|
-
<div [ngClass]="valueClasses()" class="text-sm font-semibold">
|
|
87297
|
-
{{ getShopsQuantity() }}
|
|
87298
|
-
</div>
|
|
87299
|
-
@if (getAdditionalShopsPrice()) {
|
|
87300
|
-
<div [ngClass]="subValueClasses()" class="text-xs mt-1">
|
|
87301
|
-
{{ getAdditionalShopsPrice() }}
|
|
87302
|
-
</div>
|
|
87303
|
-
}
|
|
87304
|
-
</div>
|
|
87305
|
-
</div>
|
|
87306
|
-
|
|
87307
|
-
<div [ngClass]="featureRowClasses()" class="flex justify-between items-center py-3 border-b">
|
|
87308
|
-
<span [ngClass]="labelClasses()" class="text-sm font-medium">Unlimited recommendations</span>
|
|
87309
|
-
<svg [ngClass]="checkIconClasses()" class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
|
|
87310
|
-
<path 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"></path>
|
|
87311
|
-
</svg>
|
|
87312
|
-
</div>
|
|
87313
|
-
|
|
87314
|
-
<div [ngClass]="featureRowClasses()" class="flex justify-between items-center py-3 border-b">
|
|
87315
|
-
<span [ngClass]="labelClasses()" class="text-sm font-medium">Unlimited seats</span>
|
|
87316
|
-
<svg [ngClass]="checkIconClasses()" class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
|
|
87317
|
-
<path 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"></path>
|
|
87318
|
-
</svg>
|
|
87319
|
-
</div>
|
|
87320
|
-
|
|
87321
|
-
<div [ngClass]="featureRowClasses()" class="flex justify-between items-center py-3
|
|
87322
|
-
<span [ngClass]="labelClasses()" class="text-sm font-medium">Google Analytics integration</span>
|
|
87323
|
-
<svg [ngClass]="checkIconClasses()" class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
|
|
87324
|
-
<path 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"></path>
|
|
87325
|
-
</svg>
|
|
87326
|
-
</div>
|
|
87327
|
-
|
|
87328
|
-
<div [ngClass]="contractTermsClasses()" class="pt-4">
|
|
87329
|
-
<h4 [ngClass]="contractTermsLabelClasses()" class="text-xs font-semibold uppercase tracking-wider mb-2">
|
|
87330
|
-
Contract terms
|
|
87331
|
-
</h4>
|
|
87332
|
-
<p [ngClass]="contractTermsTextClasses()" class="text-sm leading-relaxed">
|
|
87333
|
-
{{ getContractTerms() }}
|
|
87334
|
-
</p>
|
|
87335
|
-
</div>
|
|
87336
|
-
</div>
|
|
87337
|
-
</div>
|
|
87234
|
+
template: `
|
|
87235
|
+
<div
|
|
87236
|
+
(click)="handleCardClick()"
|
|
87237
|
+
[ngClass]="cardContainerClasses()"
|
|
87238
|
+
class="relative rounded-2xl border-2 p-6 transition-all duration-200 cursor-pointer hover:scale-[1.02]">
|
|
87239
|
+
|
|
87240
|
+
@if (showBestValueBadge()) {
|
|
87241
|
+
<div [ngClass]="badgeClasses()" class="absolute -top-3 left-1/2 transform -translate-x-1/2 px-4 py-1 rounded-full text-xs font-bold">
|
|
87242
|
+
Best value
|
|
87243
|
+
</div>
|
|
87244
|
+
}
|
|
87245
|
+
|
|
87246
|
+
<div class="flex items-start justify-between mb-6">
|
|
87247
|
+
<div class="flex-1">
|
|
87248
|
+
<h3 [ngClass]="planTitleClasses()" class="text-xl font-bold mb-2">
|
|
87249
|
+
{{ getPlanTitle() }}
|
|
87250
|
+
</h3>
|
|
87251
|
+
<div class="flex items-baseline gap-2">
|
|
87252
|
+
<span [ngClass]="priceClasses()" class="text-4xl font-bold">
|
|
87253
|
+
{{ formatPrice() }}
|
|
87254
|
+
</span>
|
|
87255
|
+
<span [ngClass]="pricePeriodClasses()" class="text-base">
|
|
87256
|
+
{{ getPricePeriod() }}
|
|
87257
|
+
</span>
|
|
87258
|
+
</div>
|
|
87259
|
+
</div>
|
|
87260
|
+
<div class="flex-shrink-0 ml-4">
|
|
87261
|
+
<div [ngClass]="radioClasses()" class="w-6 h-6 rounded-full border-2 flex items-center justify-center transition-all duration-200">
|
|
87262
|
+
@if (isSelected()) {
|
|
87263
|
+
<div [ngClass]="radioInnerClasses()" class="w-3 h-3 rounded-full"></div>
|
|
87264
|
+
}
|
|
87265
|
+
</div>
|
|
87266
|
+
</div>
|
|
87267
|
+
</div>
|
|
87268
|
+
|
|
87269
|
+
<div [ngClass]="sectionClasses()" class="space-y-4">
|
|
87270
|
+
<div [ngClass]="featureRowClasses()" class="flex justify-between items-center py-3 border-b">
|
|
87271
|
+
<div class="flex items-center gap-2">
|
|
87272
|
+
<span [ngClass]="labelClasses()" class="text-sm font-medium">AI usage</span>
|
|
87273
|
+
@if (hasTooltip('aiUsage')) {
|
|
87274
|
+
<button [ngClass]="tooltipButtonClasses()" class="w-4 h-4 rounded-full flex items-center justify-center">
|
|
87275
|
+
<svg class="w-3 h-3" fill="currentColor" viewBox="0 0 20 20">
|
|
87276
|
+
<path 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"></path>
|
|
87277
|
+
</svg>
|
|
87278
|
+
</button>
|
|
87279
|
+
}
|
|
87280
|
+
</div>
|
|
87281
|
+
<span [ngClass]="valueClasses()" class="text-sm font-semibold">
|
|
87282
|
+
charged monthly based on your actual usage
|
|
87283
|
+
</span>
|
|
87284
|
+
</div>
|
|
87285
|
+
|
|
87286
|
+
<div [ngClass]="featureRowClasses()" class="flex justify-between items-center py-3 border-b">
|
|
87287
|
+
<div class="flex items-center gap-2">
|
|
87288
|
+
<span [ngClass]="labelClasses()" class="text-sm font-medium">Shops</span>
|
|
87289
|
+
@if (hasTooltip('shops')) {
|
|
87290
|
+
<button [ngClass]="tooltipButtonClasses()" class="w-4 h-4 rounded-full flex items-center justify-center">
|
|
87291
|
+
<svg class="w-3 h-3" fill="currentColor" viewBox="0 0 20 20">
|
|
87292
|
+
<path 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"></path>
|
|
87293
|
+
</svg>
|
|
87294
|
+
</button>
|
|
87295
|
+
}
|
|
87296
|
+
</div>
|
|
87297
|
+
<div class="text-right">
|
|
87298
|
+
<div [ngClass]="valueClasses()" class="text-sm font-semibold">
|
|
87299
|
+
{{ getShopsQuantity() }}
|
|
87300
|
+
</div>
|
|
87301
|
+
@if (getAdditionalShopsPrice()) {
|
|
87302
|
+
<div [ngClass]="subValueClasses()" class="text-xs mt-1">
|
|
87303
|
+
{{ getAdditionalShopsPrice() }}
|
|
87304
|
+
</div>
|
|
87305
|
+
}
|
|
87306
|
+
</div>
|
|
87307
|
+
</div>
|
|
87308
|
+
|
|
87309
|
+
<div [ngClass]="featureRowClasses()" class="flex justify-between items-center py-3 border-b">
|
|
87310
|
+
<span [ngClass]="labelClasses()" class="text-sm font-medium">Unlimited recommendations</span>
|
|
87311
|
+
<svg [ngClass]="checkIconClasses()" class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
|
|
87312
|
+
<path 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"></path>
|
|
87313
|
+
</svg>
|
|
87314
|
+
</div>
|
|
87315
|
+
|
|
87316
|
+
<div [ngClass]="featureRowClasses()" class="flex justify-between items-center py-3 border-b">
|
|
87317
|
+
<span [ngClass]="labelClasses()" class="text-sm font-medium">Unlimited seats</span>
|
|
87318
|
+
<svg [ngClass]="checkIconClasses()" class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
|
|
87319
|
+
<path 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"></path>
|
|
87320
|
+
</svg>
|
|
87321
|
+
</div>
|
|
87322
|
+
|
|
87323
|
+
<div [ngClass]="featureRowClasses()" class="flex justify-between items-center py-3">
|
|
87324
|
+
<span [ngClass]="labelClasses()" class="text-sm font-medium">Google Analytics integration</span>
|
|
87325
|
+
<svg [ngClass]="checkIconClasses()" class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
|
|
87326
|
+
<path 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"></path>
|
|
87327
|
+
</svg>
|
|
87328
|
+
</div>
|
|
87329
|
+
|
|
87330
|
+
<div [ngClass]="contractTermsClasses()" class="pt-4 mt-4">
|
|
87331
|
+
<h4 [ngClass]="contractTermsLabelClasses()" class="text-xs font-semibold uppercase tracking-wider mb-2">
|
|
87332
|
+
Contract terms
|
|
87333
|
+
</h4>
|
|
87334
|
+
<p [ngClass]="contractTermsTextClasses()" class="text-sm leading-relaxed">
|
|
87335
|
+
{{ getContractTerms() }}
|
|
87336
|
+
</p>
|
|
87337
|
+
</div>
|
|
87338
|
+
</div>
|
|
87339
|
+
</div>
|
|
87338
87340
|
`
|
|
87339
87341
|
}]
|
|
87340
87342
|
}], 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"] }] }); })();
|
|
87341
87343
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PlanCardComponent, { className: "PlanCardComponent", filePath: "lib/components/profile-analysis-dashboard/cards/plan-card.component.ts", lineNumber: 118 }); })();
|
|
87342
87344
|
|
|
87343
|
-
const _forTrack0$1 = ($index, $item) => $item.
|
|
87345
|
+
const _forTrack0$1 = ($index, $item) => $item.planItemPrice.id;
|
|
87344
87346
|
function PlanSelectionContainerComponent_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
87345
87347
|
i0.ɵɵelementStart(0, "div", 14);
|
|
87346
87348
|
i0.ɵɵelement(1, "symphiq-indeterminate-spinner", 17);
|
|
@@ -87413,11 +87415,11 @@ class PlanSelectionContainerComponent {
|
|
|
87413
87415
|
this.periodUnitChanged.emit(period);
|
|
87414
87416
|
}
|
|
87415
87417
|
handlePlanSelection(plan) {
|
|
87416
|
-
this.selectedPlanId.set(plan.
|
|
87418
|
+
this.selectedPlanId.set(plan.planItemPrice.id);
|
|
87417
87419
|
this.planSelected.emit(plan);
|
|
87418
87420
|
}
|
|
87419
87421
|
isSelectedPlan(plan) {
|
|
87420
|
-
return this.selectedPlanId() === plan.
|
|
87422
|
+
return this.selectedPlanId() === plan.planItemPrice.id;
|
|
87421
87423
|
}
|
|
87422
87424
|
containerClasses() {
|
|
87423
87425
|
return this.viewMode() === ViewModeEnum.DARK
|
|
@@ -87586,7 +87588,7 @@ class PlanSelectionContainerComponent {
|
|
|
87586
87588
|
</div>
|
|
87587
87589
|
} @else if (planCardInfos() && planCardInfos()!.length > 0) {
|
|
87588
87590
|
<div class="flex flex-col gap-8 mb-32">
|
|
87589
|
-
@for (plan of planCardInfos(); track plan.
|
|
87591
|
+
@for (plan of planCardInfos(); track plan.planItemPrice.id) {
|
|
87590
87592
|
<symphiq-plan-card
|
|
87591
87593
|
[viewMode]="viewMode()"
|
|
87592
87594
|
[planInfo]="plan"
|
|
@@ -88935,7 +88937,7 @@ class SymphiqProfileAnalysisDashboardComponent {
|
|
|
88935
88937
|
this.isEditingCurrency = signal(false, ...(ngDevMode ? [{ debugName: "isEditingCurrency" }] : []));
|
|
88936
88938
|
this.editingCurrencySelection = signal(null, ...(ngDevMode ? [{ debugName: "editingCurrencySelection" }] : []));
|
|
88937
88939
|
this.selectedPeriodUnit = computed(() => {
|
|
88938
|
-
return this.account()?.
|
|
88940
|
+
return this.account()?.chargebeeItemPricePeriodUnit || ChargebeeItemPricePeriodUnitEnum.YEAR;
|
|
88939
88941
|
}, ...(ngDevMode ? [{ debugName: "selectedPeriodUnit" }] : []));
|
|
88940
88942
|
this.showPlanSelection = computed(() => {
|
|
88941
88943
|
return this.hasBillingCurrency() && this.planCardInfos() && this.planCardInfos().length > 0;
|
|
@@ -88974,7 +88976,10 @@ class SymphiqProfileAnalysisDashboardComponent {
|
|
|
88974
88976
|
}, ...(ngDevMode ? [{ debugName: "currencySelectionEffect" }] : []));
|
|
88975
88977
|
this.planLoadingEffect = effect(() => {
|
|
88976
88978
|
const planCardInfos = this.planCardInfos();
|
|
88977
|
-
|
|
88979
|
+
const isLoading = untracked(() => this.isPlanLoading());
|
|
88980
|
+
console.log('[planLoadingEffect] triggered', { planCardInfos: planCardInfos?.length, isPlanLoading: isLoading });
|
|
88981
|
+
if (planCardInfos && isLoading) {
|
|
88982
|
+
console.log('[planLoadingEffect] resetting isPlanLoading to false');
|
|
88978
88983
|
this.isPlanLoading.set(false);
|
|
88979
88984
|
}
|
|
88980
88985
|
}, ...(ngDevMode ? [{ debugName: "planLoadingEffect" }] : []));
|
|
@@ -89698,7 +89703,9 @@ class SymphiqProfileAnalysisDashboardComponent {
|
|
|
89698
89703
|
}
|
|
89699
89704
|
}
|
|
89700
89705
|
handlePeriodUnitChange(periodUnit) {
|
|
89706
|
+
console.log('[handlePeriodUnitChange] setting isPlanLoading to true', { periodUnit });
|
|
89701
89707
|
this.isPlanLoading.set(true);
|
|
89708
|
+
console.log('[handlePeriodUnitChange] isPlanLoading is now:', this.isPlanLoading());
|
|
89702
89709
|
this.periodUnitChanged.emit(periodUnit);
|
|
89703
89710
|
}
|
|
89704
89711
|
handlePlanSelection(plan) {
|
|
@@ -90476,7 +90483,7 @@ class SymphiqProfileAnalysisDashboardComponent {
|
|
|
90476
90483
|
type: HostListener,
|
|
90477
90484
|
args: ['window:scroll', ['$event']]
|
|
90478
90485
|
}] }); })();
|
|
90479
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqProfileAnalysisDashboardComponent, { className: "SymphiqProfileAnalysisDashboardComponent", filePath: "lib/components/profile-analysis-dashboard/symphiq-profile-analysis-dashboard.component.ts", lineNumber:
|
|
90486
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SymphiqProfileAnalysisDashboardComponent, { className: "SymphiqProfileAnalysisDashboardComponent", filePath: "lib/components/profile-analysis-dashboard/symphiq-profile-analysis-dashboard.component.ts", lineNumber: 721 }); })();
|
|
90480
90487
|
|
|
90481
90488
|
class ScrollProgressBarComponent {
|
|
90482
90489
|
constructor() {
|