@osovitny/anatoly 3.17.84 → 3.17.86

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.
Files changed (28) hide show
  1. package/esm2022/lib/billing/billing.module.mjs +17 -7
  2. package/esm2022/lib/billing/components/braintree/braintree.component.mjs +2 -2
  3. package/esm2022/lib/billing/components/exports.mjs +8 -5
  4. package/esm2022/lib/billing/components/index.mjs +7 -4
  5. package/esm2022/lib/billing/components/order-summary/order-summary.component.mjs +152 -0
  6. package/esm2022/lib/billing/components/payment-methods/payment-methods.component.mjs +105 -0
  7. package/esm2022/lib/billing/components/payment-options/payment-options.component.mjs +97 -0
  8. package/esm2022/lib/billing/components/stripe/stripe.component.mjs +2 -2
  9. package/esm2022/lib/billing/exports.mjs +2 -1
  10. package/esm2022/lib/billing/services/payments.service.mjs +2 -2
  11. package/esm2022/lib/billing/utils.mjs +28 -0
  12. package/esm2022/lib/core/consts/app-settings.mjs +2 -2
  13. package/esm2022/lib/core/consts/formats.mjs +2 -2
  14. package/esm2022/lib/core/consts/ga.mjs +2 -2
  15. package/esm2022/lib/core/consts/storageKeys.mjs +2 -2
  16. package/esm2022/lib/core/enums/billing.mjs +2 -2
  17. package/esm2022/lib/core/enums/enums.mjs +2 -2
  18. package/fesm2022/osovitny-anatoly.mjs +779 -412
  19. package/fesm2022/osovitny-anatoly.mjs.map +1 -1
  20. package/lib/billing/billing.module.d.ts +12 -8
  21. package/lib/billing/components/exports.d.ts +7 -4
  22. package/lib/billing/components/index.d.ts +2 -2
  23. package/lib/billing/components/order-summary/order-summary.component.d.ts +22 -0
  24. package/lib/billing/components/payment-methods/payment-methods.component.d.ts +20 -0
  25. package/lib/billing/components/payment-options/payment-options.component.d.ts +18 -0
  26. package/lib/billing/exports.d.ts +1 -0
  27. package/lib/billing/utils.d.ts +3 -0
  28. package/package.json +1 -1
@@ -1,8 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, Inject, EventEmitter, Output, Pipe, APP_INITIALIZER, Injector, NgModule, Component, Input, ChangeDetectionStrategy, ViewChild, ViewEncapsulation, Directive, HostBinding, HostListener, Optional, SkipSelf } from '@angular/core';
3
- import * as dropin from 'braintree-web-drop-in';
4
- import * as i2$1 from '@angular/forms';
5
- import { FormControl, Validators, ReactiveFormsModule, FormsModule } from '@angular/forms';
6
3
  import js_beautify from 'js-beautify';
7
4
  import * as i1 from '@angular/router';
8
5
  import { NavigationEnd, NavigationStart, NavigationCancel, NavigationError, RouterModule } from '@angular/router';
@@ -25,7 +22,10 @@ import * as i1$4 from 'ngx-toastr';
25
22
  import { ToastrModule } from 'ngx-toastr';
26
23
  import * as i1$5 from '@angular/platform-browser';
27
24
  import { v4 } from 'uuid';
28
- import * as i2 from '@progress/kendo-angular-dialog';
25
+ import * as i2 from '@angular/forms';
26
+ import { FormControl, Validators, ReactiveFormsModule, FormsModule } from '@angular/forms';
27
+ import * as dropin from 'braintree-web-drop-in';
28
+ import * as i2$1 from '@progress/kendo-angular-dialog';
29
29
  import { DialogsModule } from '@progress/kendo-angular-dialog';
30
30
  import { loadStripe } from '@stripe/stripe-js';
31
31
  import * as i1$6 from '@fortawesome/angular-fontawesome';
@@ -85,7 +85,7 @@ const ClientApps = AppCoreSettings?.clientApps;
85
85
  Created:
86
86
  1 Apr 2024
87
87
 
88
- Copyright (c) 2016-2024 Osovitny Inc. All rights reserved.
88
+ Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
89
89
  </file>
90
90
  */
91
91
  function getAppSettingsById(id) {
@@ -127,7 +127,7 @@ const AppSettings = getAppSettingsByName(AppName);
127
127
  Created:
128
128
  1 Apr 2024
129
129
 
130
- Copyright (c) 2016-2024 Osovitny Inc. All rights reserved.
130
+ Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
131
131
  </file>
132
132
  */
133
133
  const dateTimeFormats = {
@@ -153,7 +153,7 @@ const timeFormats = {
153
153
  Created:
154
154
  11 Nov 2024
155
155
 
156
- Copyright (c) 2016-2024 Osovitny Inc. All rights reserved.
156
+ Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
157
157
  </file>
158
158
  */
159
159
  const GAEvents = {
@@ -592,7 +592,7 @@ class XmlFormatter {
592
592
  Created:
593
593
  11 Nov 2024
594
594
 
595
- Copyright (c) 2016-2024 Osovitny Inc. All rights reserved.
595
+ Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
596
596
  </file>
597
597
  */
598
598
  var DiscountCodeType;
@@ -643,7 +643,7 @@ var PaymentStage;
643
643
  Created:
644
644
  11 Nov 2024
645
645
 
646
- Copyright (c) 2016-2024 Osovitny Inc. All rights reserved.
646
+ Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
647
647
  </file>
648
648
  */
649
649
  var DataViewType;
@@ -1068,7 +1068,7 @@ class Stopwatch {
1068
1068
  Created:
1069
1069
  28 Apr 2024
1070
1070
 
1071
- Copyright (c) 2016-2024 Osovitny Inc. All rights reserved.
1071
+ Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
1072
1072
  </file>
1073
1073
  */
1074
1074
  const AppContextStorageKeys = {
@@ -3729,210 +3729,6 @@ class ComponentBase {
3729
3729
  }] }); })();
3730
3730
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ComponentBase, { className: "ComponentBase", filePath: "lib\\ui\\components\\base\\components\\component.ts", lineNumber: 26 }); })();
3731
3731
 
3732
- /*
3733
- <file>
3734
- Project:
3735
- @osovitny/anatoly
3736
-
3737
- Authors:
3738
- Vadim Osovitny vadim.osovitny@osovitny.com
3739
- Anatoly Osovitny anatoly.osovitny@osovitny.com
3740
-
3741
- Created:
3742
- 20 Nov 2017
3743
-
3744
- Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
3745
- </file>
3746
- */
3747
- //Node
3748
- class EditComponentBase extends ComponentBase {
3749
- constructor() {
3750
- super();
3751
- //Modes
3752
- this.isAddMode = false;
3753
- this.isEditMode = false;
3754
- this.formSubmitted = false;
3755
- this.controlName = null;
3756
- this.isEditMode = QSUtils.idExists();
3757
- this.isAddMode = !this.isEditMode;
3758
- }
3759
- isControlValid(name, frmGroup = null) {
3760
- return !this.isControlInvalid(name, frmGroup);
3761
- }
3762
- isControlInvalid(name, frmGroup = null) {
3763
- if (typeof name === "undefined" || name == "") {
3764
- return false;
3765
- }
3766
- let fg = frmGroup ? frmGroup : this.formGroup;
3767
- if (!fg) {
3768
- return false;
3769
- }
3770
- let control = fg.get(name);
3771
- if (control) {
3772
- return ((this.formSubmitted && control.invalid) || (control.touched && control.invalid));
3773
- }
3774
- return false;
3775
- }
3776
- //FormGroup functions
3777
- getFormValue(name, frmGroup = null) {
3778
- let fg = frmGroup ? frmGroup : this.formGroup;
3779
- return fg.controls[name].value;
3780
- }
3781
- setFormValue(name, value, frmGroup = null) {
3782
- let fg = frmGroup ? frmGroup : this.formGroup;
3783
- fg.controls[name].setValue(value);
3784
- }
3785
- getFormGroupValue(groupName, name, frmGroup = null) {
3786
- let fg = frmGroup ? frmGroup : this.formGroup;
3787
- return fg.controls[groupName].get(name).value;
3788
- }
3789
- setFormGroupValue(groupName, name, value, frmGroup = null) {
3790
- let fg = frmGroup ? frmGroup : this.formGroup;
3791
- fg.controls[groupName].get(name).setValue(value);
3792
- }
3793
- /**
3794
- * Add control to form group
3795
- * @param name
3796
- * @param formControl
3797
- * @param frmGroup
3798
- */
3799
- addControl(name, formControl, frmGroup = null) {
3800
- let fg = frmGroup ? frmGroup : this.formGroup;
3801
- fg.addControl(name, formControl);
3802
- }
3803
- /**
3804
- * Removes control from form group
3805
- * @param name
3806
- * @param frmGroup
3807
- */
3808
- removeControl(name, frmGroup = null) {
3809
- let fg = frmGroup ? frmGroup : this.formGroup;
3810
- if (fg.get(name)) {
3811
- fg.removeControl(name);
3812
- }
3813
- }
3814
- /**
3815
- * return new form control
3816
- * @param formState
3817
- * @param validatorOrOpts
3818
- * @param asyncValidator
3819
- */
3820
- createFormControl(formState, validatorOrOpts, asyncValidator) {
3821
- return new FormControl(formState, validatorOrOpts, asyncValidator);
3822
- }
3823
- /**
3824
- * Set error to control
3825
- * @param controlName formControl name
3826
- * @param err error expect {erroname: boolean} format
3827
- * @param frmGroup
3828
- */
3829
- setControlError(controlName, err, frmGroup = null) {
3830
- let fg = frmGroup ? frmGroup : this.formGroup;
3831
- fg.get(controlName)?.setErrors(err);
3832
- }
3833
- /**
3834
- * Set {invalid: true} for the specified form
3835
- * @param controlName form control name
3836
- * @param frmGroup
3837
- */
3838
- setInValidError(controlName, frmGroup = null) {
3839
- let fg = frmGroup ? frmGroup : this.formGroup;
3840
- fg.get(controlName)?.setErrors({ invalid: true });
3841
- }
3842
- /**
3843
- * returns formgroup controls.
3844
- * main use case is used in html pages
3845
- */
3846
- get fc() {
3847
- return this.formGroup.controls;
3848
- }
3849
- get isNgModelBased() {
3850
- return this.controlName == null;
3851
- }
3852
- static { this.ɵfac = function EditComponentBase_Factory(t) { return new (t || EditComponentBase)(); }; }
3853
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EditComponentBase, selectors: [["ng-component"]], inputs: { formGroup: "formGroup", formSubmitted: "formSubmitted", controlName: "controlName" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function EditComponentBase_Template(rf, ctx) { }, encapsulation: 2 }); }
3854
- }
3855
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EditComponentBase, [{
3856
- type: Component,
3857
- args: [{
3858
- template: ''
3859
- }]
3860
- }], () => [], { formGroup: [{
3861
- type: Input
3862
- }], formSubmitted: [{
3863
- type: Input
3864
- }], controlName: [{
3865
- type: Input
3866
- }] }); })();
3867
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EditComponentBase, { className: "EditComponentBase", filePath: "lib\\ui\\components\\base\\components\\edit.component.ts", lineNumber: 28 }); })();
3868
-
3869
- /*
3870
- <file>
3871
- Project:
3872
- @osovitny/anatoly
3873
-
3874
- Authors:
3875
- Vadim Osovitny vadim.osovitny@osovitny.com
3876
- Anatoly Osovitny anatoly.osovitny@osovitny.com
3877
-
3878
- Created:
3879
- 24 Jan 2022
3880
-
3881
- Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
3882
- </file>
3883
- */
3884
- //Node
3885
- class DialogBase extends EditComponentBase {
3886
- get isOpen() {
3887
- return this._isOpen;
3888
- }
3889
- set isOpen(value) {
3890
- if (value) {
3891
- if (this.osOnBeforeOpen) {
3892
- this.osOnBeforeOpen();
3893
- }
3894
- this.opened.emit();
3895
- }
3896
- this._isOpen = value;
3897
- }
3898
- constructor() {
3899
- super();
3900
- //Private
3901
- this._isOpen = false;
3902
- //Public
3903
- this.themeColor = "primary";
3904
- //Events
3905
- this.opened = new EventEmitter();
3906
- this.closed = new EventEmitter();
3907
- }
3908
- open() {
3909
- this.isOpen = true;
3910
- }
3911
- close(returnValue = "OK") {
3912
- this.isOpen = false;
3913
- this.closed.emit(returnValue);
3914
- }
3915
- cancel() {
3916
- this.isOpen = false;
3917
- this.closed.emit(-1);
3918
- }
3919
- static { this.ɵfac = function DialogBase_Factory(t) { return new (t || DialogBase)(); }; }
3920
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DialogBase, selectors: [["ng-component"]], inputs: { isOpen: "isOpen" }, outputs: { opened: "opened", closed: "closed" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function DialogBase_Template(rf, ctx) { }, encapsulation: 2 }); }
3921
- }
3922
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DialogBase, [{
3923
- type: Component,
3924
- args: [{
3925
- template: ''
3926
- }]
3927
- }], () => [], { isOpen: [{
3928
- type: Input
3929
- }], opened: [{
3930
- type: Output
3931
- }], closed: [{
3932
- type: Output
3933
- }] }); })();
3934
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DialogBase, { className: "DialogBase", filePath: "lib\\ui\\components\\base\\dialog.ts", lineNumber: 27 }); })();
3935
-
3936
3732
  /*
3937
3733
  <file>
3938
3734
  Project:
@@ -4001,162 +3797,728 @@ class PaymentsApiService extends ApiServiceBase {
4001
3797
 
4002
3798
  Authors:
4003
3799
  Vadim Osovitny vadim.osovitny@osovitny.com
4004
- Dhruv Agarwal dhruv.agarwal@osovitny.com
3800
+ Dhruv Agarwal dhruv.agarwal@osovitny.com
3801
+
3802
+ Created:
3803
+ 11 Aug 2024
3804
+
3805
+ Details:
3806
+ https://blog.thoughtram.io/angular/2017/02/21/using-zones-in-angular-for-better-performance.html
3807
+
3808
+ Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
3809
+ </file>
3810
+ */
3811
+ //Node
3812
+ class PaymentsService {
3813
+ constructor(zone, api, ns, ga) {
3814
+ this.zone = zone;
3815
+ this.api = api;
3816
+ this.ns = ns;
3817
+ this.ga = ga;
3818
+ this.paymentInProgress = false;
3819
+ this.isPaymentFailed = false;
3820
+ this.subtotal = 0;
3821
+ this.discountCode = null;
3822
+ this.discountPercentage = null;
3823
+ this.discountAmount = null;
3824
+ this.total = 0;
3825
+ this.currency = 'USD';
3826
+ //Private Streams
3827
+ this._discountCodeApplied = new Subject();
3828
+ this._paymentAdded = new Subject();
3829
+ this._showStripeDialog = new Subject();
3830
+ this._showBraintreeDialog = new Subject();
3831
+ //Public Streams
3832
+ this.discountCodeApplied$ = this._discountCodeApplied.asObservable();
3833
+ this.paymentAdded$ = this._paymentAdded.asObservable();
3834
+ this.showStripeDialog$ = this._showStripeDialog.asObservable();
3835
+ this.showBraintreeDialog$ = this._showBraintreeDialog.asObservable();
3836
+ }
3837
+ setDefaults() {
3838
+ }
3839
+ setValues() {
3840
+ }
3841
+ //fires
3842
+ fireDiscountCodeApplied() {
3843
+ this._discountCodeApplied.next(this.discountCode);
3844
+ }
3845
+ firePaymentAdded(paymentId) {
3846
+ this._paymentAdded.next(paymentId);
3847
+ }
3848
+ //Public
3849
+ init() {
3850
+ this.setDefaults();
3851
+ this.setValues();
3852
+ }
3853
+ resetState() {
3854
+ this.subtotal = 0;
3855
+ this.total = 0;
3856
+ }
3857
+ getTotal() {
3858
+ let subtotal = this.subtotal;
3859
+ if (this.discountAmount != 0) {
3860
+ subtotal = subtotal - this.discountAmount;
3861
+ }
3862
+ else if (this.discountPercentage != 0) {
3863
+ subtotal = subtotal - (subtotal * (this.discountPercentage / 100));
3864
+ subtotal = +subtotal.toFixed(2);
3865
+ }
3866
+ return subtotal > 0 ? subtotal : 0;
3867
+ }
3868
+ //DiscountCode
3869
+ applyDiscountCode(discountCode, data) {
3870
+ if (!data) {
3871
+ return;
3872
+ }
3873
+ this.discountCode = discountCode;
3874
+ if (data.amount) {
3875
+ this.discountPercentage = 0;
3876
+ this.discountAmount = parseInt(data.amount);
3877
+ }
3878
+ else if (data.percentage) {
3879
+ this.discountPercentage = parseInt(data.percentage);
3880
+ this.discountAmount = 0;
3881
+ }
3882
+ this.fireDiscountCodeApplied();
3883
+ }
3884
+ getDiscountCodeAsString() {
3885
+ if (this.discountAmount > 0) {
3886
+ return "$" + this.discountAmount;
3887
+ }
3888
+ else if (this.discountPercentage > 0) {
3889
+ return this.discountPercentage + "%";
3890
+ }
3891
+ return '$0';
3892
+ }
3893
+ openStripePaymentDialog() {
3894
+ this._showStripeDialog.next(true);
3895
+ }
3896
+ openBraintreePaymentDialog() {
3897
+ this._showBraintreeDialog.next(true);
3898
+ }
3899
+ closeBraintreePaymentDialog() {
3900
+ this._showBraintreeDialog.next(false);
3901
+ }
3902
+ createStripeSession(title, description, image) {
3903
+ const amount = this.getTotal();
3904
+ const currency = this.currency;
3905
+ return this.api.createStripeSession(amount, currency, title, description, image);
3906
+ }
3907
+ createBraintreeToken() {
3908
+ return this.api.createBraintreeToken();
3909
+ }
3910
+ pay(paidFor, payId, payStatus, payDetails) {
3911
+ //GA
3912
+ this.ga.event(GABillingEvents.payment);
3913
+ let paidForAsString = JSON.stringify(paidFor);
3914
+ let payType = this.selectedPaymentType;
3915
+ let payMethod = this.selectedPaymentMethod;
3916
+ //Amount
3917
+ let subtotal = this.subtotal;
3918
+ let promoCode = this.discountCode;
3919
+ let total = this.getTotal();
3920
+ let currency = this.currency;
3921
+ if (total == 0) {
3922
+ payMethod = PaymentMethod.None;
3923
+ }
3924
+ this.zone.run(() => {
3925
+ this.api.pay(paidForAsString, payMethod,
3926
+ //Amount
3927
+ subtotal, promoCode, total, currency,
3928
+ //Payment method details (PayPal/Stripe/Braintree)
3929
+ payId, payStatus, payDetails, (data) => {
3930
+ if (!data || !data?.isPaymentValid) {
3931
+ this.paymentFailed(PaymentStage.External);
3932
+ return;
3933
+ }
3934
+ if (payMethod == PaymentMethod.CreditCard) {
3935
+ //this.closeBraintreePaymentDialog();
3936
+ }
3937
+ this.paymentInProgress = false;
3938
+ this.firePaymentAdded(data.paymentId);
3939
+ }, () => {
3940
+ this.paymentFailed(PaymentStage.External);
3941
+ });
3942
+ });
3943
+ }
3944
+ paymentFailed(stage) {
3945
+ this.paymentStage = stage;
3946
+ this.paymentInProgress = false;
3947
+ this.isPaymentFailed = true;
3948
+ this.ns.error("Payment Failed");
3949
+ }
3950
+ static { this.ɵfac = function PaymentsService_Factory(t) { return new (t || PaymentsService)(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(PaymentsApiService), i0.ɵɵinject(NotificationService), i0.ɵɵinject(GoogleAnalyticsService)); }; }
3951
+ static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: PaymentsService, factory: PaymentsService.ɵfac }); }
3952
+ }
3953
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PaymentsService, [{
3954
+ type: Injectable
3955
+ }], () => [{ type: i0.NgZone }, { type: PaymentsApiService }, { type: NotificationService }, { type: GoogleAnalyticsService }], null); })();
3956
+
3957
+ /*
3958
+ <file>
3959
+ Project:
3960
+ @osovitny/anatoly
3961
+
3962
+ Authors:
3963
+ Vadim Osovitny vadim.osovitny@osovitny.com
3964
+
3965
+ Created:
3966
+ 4 Jun 2024
3967
+
3968
+ Copyright (c) 2017-2025 Osovitny Inc. All rights reserved.
3969
+ </file>
3970
+ */
3971
+ //Node
3972
+ class DiscountCodesApiService extends ApiServiceBase {
3973
+ constructor(http) {
3974
+ super(http);
3975
+ this.http = http;
3976
+ this.baseUrl = `${ApiUrl}/billing/discountCodes`;
3977
+ }
3978
+ getDiscountCode(code) {
3979
+ return this.get('getDiscountCode', { code });
3980
+ }
3981
+ static { this.ɵfac = function DiscountCodesApiService_Factory(t) { return new (t || DiscountCodesApiService)(i0.ɵɵinject(i1$1.HttpClient)); }; }
3982
+ static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: DiscountCodesApiService, factory: DiscountCodesApiService.ɵfac }); }
3983
+ }
3984
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DiscountCodesApiService, [{
3985
+ type: Injectable
3986
+ }], () => [{ type: i1$1.HttpClient }], null); })();
3987
+
3988
+ /*
3989
+ <file>
3990
+ Project:
3991
+ @osovitny/anatoly
3992
+
3993
+ Authors:
3994
+ Vadim Osovitny vadim.osovitny@osovitny.com
3995
+ Anatoly Osovitny anatoly.osovitny@osovitny.com
3996
+
3997
+ Created:
3998
+ 29 May 2024
3999
+
4000
+ Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
4001
+ </file>
4002
+ */
4003
+ //Node
4004
+ const _c0$h = a0 => ({ "show": a0 });
4005
+ function OrderSummaryComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
4006
+ const _r2 = i0.ɵɵgetCurrentView();
4007
+ i0.ɵɵelementStart(0, "div", 12)(1, "div", 13)(2, "input", 14);
4008
+ i0.ɵɵlistener("ngModelChange", function OrderSummaryComponent_Conditional_17_Template_input_ngModelChange_2_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.promoCode = $event); });
4009
+ i0.ɵɵelementEnd();
4010
+ i0.ɵɵelementStart(3, "button", 15);
4011
+ i0.ɵɵlistener("click", function OrderSummaryComponent_Conditional_17_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r2); const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.onApplyPromoCode()); });
4012
+ i0.ɵɵtext(4, "Apply");
4013
+ i0.ɵɵelementEnd()()();
4014
+ } if (rf & 2) {
4015
+ const ctx_r0 = i0.ɵɵnextContext();
4016
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(2, _c0$h, ctx_r0.showPromoCode));
4017
+ i0.ɵɵadvance(2);
4018
+ i0.ɵɵproperty("ngModel", ctx_r0.promoCode);
4019
+ } }
4020
+ const _c1$1 = ["*"];
4021
+ class OrderSummaryComponent extends ComponentBase {
4022
+ constructor(ps, api, ns) {
4023
+ super();
4024
+ this.ps = ps;
4025
+ this.api = api;
4026
+ this.ns = ns;
4027
+ this.showPromoCode = false;
4028
+ }
4029
+ ngOnInit() {
4030
+ this.setDefaults();
4031
+ this.setValues();
4032
+ }
4033
+ setDefaults() { }
4034
+ setValues() { }
4035
+ //Tos
4036
+ toTotal() {
4037
+ return this.ps.getTotal();
4038
+ }
4039
+ //Events
4040
+ onTogglePromoCode() {
4041
+ this.showPromoCode = !this.showPromoCode;
4042
+ }
4043
+ onApplyPromoCode() {
4044
+ if (!this.promoCode) {
4045
+ this.ns.info("Please enter a promo code");
4046
+ return;
4047
+ }
4048
+ this.api.getDiscountCode(this.promoCode).subscribe({
4049
+ next: (data) => {
4050
+ if (!data) {
4051
+ this.ns.error("Invalid Promo Code");
4052
+ return;
4053
+ }
4054
+ switch (data.status) {
4055
+ case DiscountCodeStatus.Exist:
4056
+ this.ps.applyDiscountCode(this.promoCode, data.code);
4057
+ this.discount = this.ps.getDiscountCodeAsString();
4058
+ this.ns.success("Discount applied successfully");
4059
+ break;
4060
+ case DiscountCodeStatus.NotFound:
4061
+ this.ns.error("Invalid Promo Code");
4062
+ break;
4063
+ case DiscountCodeStatus.AlreadyUsed:
4064
+ this.ns.error("Promo Code already applied");
4065
+ break;
4066
+ default:
4067
+ this.ns.error("Invalid Promo Code");
4068
+ break;
4069
+ }
4070
+ },
4071
+ error: (e) => {
4072
+ this.ns.error();
4073
+ },
4074
+ });
4075
+ }
4076
+ static { this.ɵfac = function OrderSummaryComponent_Factory(t) { return new (t || OrderSummaryComponent)(i0.ɵɵdirectiveInject(PaymentsService), i0.ɵɵdirectiveInject(DiscountCodesApiService), i0.ɵɵdirectiveInject(NotificationService)); }; }
4077
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: OrderSummaryComponent, selectors: [["anatoly-billing-order-summary"]], features: [i0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c1$1, decls: 30, vars: 7, consts: [[1, "card"], [1, "card-header"], [1, "card-title"], [1, "card-body"], [1, "order-summary"], [1, "subtotal"], [1, "divider"], [1, "add-promo-code", 3, "ngClass", "click"], [1, "has-arrow"], ["class", "add-promo-code", 3, "ngClass"], [1, "discounts"], [1, "total"], [1, "add-promo-code", 3, "ngClass"], [1, "promo-code"], ["type", "text", "placeholder", "Promo code", 1, "input-text", 3, "ngModel", "ngModelChange"], [1, "btn", 3, "click"]], template: function OrderSummaryComponent_Template(rf, ctx) { if (rf & 1) {
4078
+ i0.ɵɵprojectionDef();
4079
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "h2");
4080
+ i0.ɵɵtext(4, "Order Summary");
4081
+ i0.ɵɵelementEnd()()();
4082
+ i0.ɵɵelementStart(5, "div", 3)(6, "div", 4);
4083
+ i0.ɵɵprojection(7);
4084
+ i0.ɵɵelementStart(8, "div", 5)(9, "span");
4085
+ i0.ɵɵtext(10, "Subtotal:");
4086
+ i0.ɵɵelementEnd();
4087
+ i0.ɵɵelementStart(11, "strong");
4088
+ i0.ɵɵtext(12);
4089
+ i0.ɵɵelementEnd()();
4090
+ i0.ɵɵelement(13, "div", 6);
4091
+ i0.ɵɵelementStart(14, "div", 7);
4092
+ i0.ɵɵlistener("click", function OrderSummaryComponent_Template_div_click_14_listener() { return ctx.onTogglePromoCode(); });
4093
+ i0.ɵɵelementStart(15, "span", 8);
4094
+ i0.ɵɵtext(16, "Add a Promo Code:");
4095
+ i0.ɵɵelementEnd()();
4096
+ i0.ɵɵtemplate(17, OrderSummaryComponent_Conditional_17_Template, 5, 4, "div", 9);
4097
+ i0.ɵɵelement(18, "div", 6);
4098
+ i0.ɵɵelementStart(19, "div", 10)(20, "span");
4099
+ i0.ɵɵtext(21, "Discounts & Savings:");
4100
+ i0.ɵɵelementEnd();
4101
+ i0.ɵɵelementStart(22, "strong");
4102
+ i0.ɵɵtext(23);
4103
+ i0.ɵɵelementEnd()();
4104
+ i0.ɵɵelement(24, "div", 6);
4105
+ i0.ɵɵelementStart(25, "div", 11)(26, "span");
4106
+ i0.ɵɵtext(27, "Total:");
4107
+ i0.ɵɵelementEnd();
4108
+ i0.ɵɵelementStart(28, "strong");
4109
+ i0.ɵɵtext(29);
4110
+ i0.ɵɵelementEnd()()()()();
4111
+ } if (rf & 2) {
4112
+ i0.ɵɵadvance(12);
4113
+ i0.ɵɵtextInterpolate1("$", ctx.ps.subtotal, "");
4114
+ i0.ɵɵadvance(2);
4115
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(5, _c0$h, ctx.showPromoCode));
4116
+ i0.ɵɵadvance(3);
4117
+ i0.ɵɵconditional(17, ctx.showPromoCode ? 17 : -1);
4118
+ i0.ɵɵadvance(6);
4119
+ i0.ɵɵtextInterpolate(ctx.discount);
4120
+ i0.ɵɵadvance(6);
4121
+ i0.ɵɵtextInterpolate1("$", ctx.toTotal(), "");
4122
+ } }, dependencies: [i1$2.NgClass, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel], encapsulation: 2 }); }
4123
+ }
4124
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(OrderSummaryComponent, [{
4125
+ type: Component,
4126
+ args: [{ selector: "anatoly-billing-order-summary", template: "<div class='card'>\r\n <div class='card-header'>\r\n <div class='card-title'>\r\n <h2>Order Summary</h2>\r\n </div>\r\n </div>\r\n <div class='card-body'>\r\n <div class='order-summary'>\r\n <ng-content></ng-content>\r\n\r\n <div class='subtotal'>\r\n <span>Subtotal:</span><strong>${{ ps.subtotal }}</strong>\r\n </div>\r\n <div class='divider'></div>\r\n <div class=\"add-promo-code\" [ngClass]=\"{ 'show': showPromoCode }\" (click)=\"onTogglePromoCode()\">\r\n <span class='has-arrow'>Add a Promo Code:</span>\r\n </div>\r\n\r\n @if (showPromoCode) {\r\n <div class=\"add-promo-code\" [ngClass]=\"{ 'show': showPromoCode }\">\r\n <div class=\"promo-code\">\r\n <input type=\"text\" [(ngModel)]=\"promoCode\" class=\"input-text\" placeholder=\"Promo code\">\r\n <button class=\"btn\" (click)=\"onApplyPromoCode()\">Apply</button>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class='divider'></div>\r\n <div class='discounts'>\r\n <span>Discounts & Savings:</span>\r\n <strong>{{ discount }}</strong>\r\n </div>\r\n <div class='divider'></div>\r\n <div class='total'>\r\n <span>Total:</span>\r\n <strong>${{ toTotal() }}</strong>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
4127
+ }], () => [{ type: PaymentsService }, { type: DiscountCodesApiService }, { type: NotificationService }], null); })();
4128
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(OrderSummaryComponent, { className: "OrderSummaryComponent", filePath: "lib\\billing\\components\\order-summary\\order-summary.component.ts", lineNumber: 31 }); })();
4129
+
4130
+ /*
4131
+ <file>
4132
+ Project:
4133
+ @osovitny/anatoly
4134
+
4135
+ Authors:
4136
+ Vadim Osovitny vadim.osovitny@osovitny.com
4137
+ Anatoly Osovitny anatoly.osovitny@osovitny.com
4138
+
4139
+ Created:
4140
+ 29 May 2024
4141
+
4142
+ Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
4143
+ </file>
4144
+ */
4145
+ //Node
4146
+ function PaymentMethodsComponent_For_9_Template(rf, ctx) { if (rf & 1) {
4147
+ const _r7 = i0.ɵɵgetCurrentView();
4148
+ i0.ɵɵelementStart(0, "li", 5);
4149
+ i0.ɵɵlistener("click", function PaymentMethodsComponent_For_9_Template_li_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r7); const item_r1 = restoredCtx.$implicit; const ctx_r6 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r6.onPaymentSelect(item_r1)); });
4150
+ i0.ɵɵelementStart(1, "div", 6);
4151
+ i0.ɵɵtext(2);
4152
+ i0.ɵɵelementEnd();
4153
+ i0.ɵɵelementStart(3, "div", 7);
4154
+ i0.ɵɵelement(4, "img", 8);
4155
+ i0.ɵɵelementEnd()();
4156
+ } if (rf & 2) {
4157
+ const item_r1 = ctx.$implicit;
4158
+ i0.ɵɵclassProp("selected", item_r1.selected);
4159
+ i0.ɵɵadvance(2);
4160
+ i0.ɵɵtextInterpolate1("Pay with ", item_r1.title, "");
4161
+ i0.ɵɵadvance(2);
4162
+ i0.ɵɵpropertyInterpolate1("src", "./dist/@lib/images/payment-icons/", item_r1.icon, ".png", i0.ɵɵsanitizeUrl)("alt", "payment-icon ", item_r1.title, "");
4163
+ } }
4164
+ class PaymentMethodsComponent extends ComponentBase {
4165
+ constructor(ps) {
4166
+ super();
4167
+ this.ps = ps;
4168
+ this.paymentMethods = [
4169
+ { id: PaymentMethod.CreditCard, title: "", icon: "cards", selected: true },
4170
+ { id: PaymentMethod.PayPal, title: "", icon: "paypal", selected: false },
4171
+ { id: PaymentMethod.Stripe, title: "", icon: "stripe", selected: false },
4172
+ { id: PaymentMethod.Venmo, title: "", icon: "venmo", selected: false },
4173
+ {
4174
+ id: PaymentMethod.ApplePay,
4175
+ title: "",
4176
+ icon: "applepay",
4177
+ selected: false,
4178
+ },
4179
+ {
4180
+ id: PaymentMethod.GooglePay,
4181
+ title: "",
4182
+ icon: "googlepay",
4183
+ selected: false,
4184
+ },
4185
+ {
4186
+ id: PaymentMethod.DigitalWallet,
4187
+ title: "",
4188
+ icon: "wallet",
4189
+ selected: false,
4190
+ },
4191
+ ];
4192
+ }
4193
+ ngOnInit() {
4194
+ this.setDefaults();
4195
+ this.setValues();
4196
+ }
4197
+ setDefaults() {
4198
+ let selectedPM = this.paymentMethods.filter((value) => value.selected == true)[0];
4199
+ this.ps.selectedPaymentMethod = selectedPM.id;
4200
+ }
4201
+ setValues() { }
4202
+ //Events
4203
+ onPaymentSelect(paymentMethod) {
4204
+ //1. Unselect items
4205
+ this.paymentMethods.forEach((payment) => (payment.selected = false));
4206
+ //2. Set selected PaymentMethod
4207
+ paymentMethod.selected = true;
4208
+ this.ps.selectedPaymentMethod = paymentMethod.id;
4209
+ }
4210
+ static { this.ɵfac = function PaymentMethodsComponent_Factory(t) { return new (t || PaymentMethodsComponent)(i0.ɵɵdirectiveInject(PaymentsService)); }; }
4211
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PaymentMethodsComponent, selectors: [["anatoly-billing-payment-methods"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 10, vars: 0, consts: [[1, "card", "p-0", "mb-3"], [1, "card-header"], [1, "card-title"], [1, "card-body"], [1, "payment__select-method"], [3, "click"], [1, "payment-name"], [1, "icon-img"], [3, "src", "alt"], [3, "selected"]], template: function PaymentMethodsComponent_Template(rf, ctx) { if (rf & 1) {
4212
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "h2");
4213
+ i0.ɵɵtext(4, "Select a payment method");
4214
+ i0.ɵɵelementEnd()()();
4215
+ i0.ɵɵelementStart(5, "div", 3)(6, "div", 4)(7, "ul");
4216
+ i0.ɵɵrepeaterCreate(8, PaymentMethodsComponent_For_9_Template, 5, 5, "li", 9, i0.ɵɵrepeaterTrackByIdentity);
4217
+ i0.ɵɵelementEnd()()()();
4218
+ } if (rf & 2) {
4219
+ i0.ɵɵadvance(8);
4220
+ i0.ɵɵrepeater(ctx.paymentMethods);
4221
+ } }, encapsulation: 2 }); }
4222
+ }
4223
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PaymentMethodsComponent, [{
4224
+ type: Component,
4225
+ args: [{ selector: "anatoly-billing-payment-methods", template: "<div class='card p-0 mb-3'>\r\n <div class='card-header'>\r\n <div class='card-title'>\r\n <h2>Select a payment method</h2>\r\n </div>\r\n </div>\r\n <div class='card-body'>\r\n <div class='payment__select-method'>\r\n <ul>\r\n @for (item of paymentMethods; track item) {\r\n <li (click)='onPaymentSelect(item)' [class.selected]='item.selected'>\r\n <div class='payment-name'>Pay with {{ item.title }}</div>\r\n <div class='icon-img'>\r\n <img src='./dist/@lib/images/payment-icons/{{item.icon}}.png' alt='payment-icon {{item.title}}'>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
4226
+ }], () => [{ type: PaymentsService }], null); })();
4227
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PaymentMethodsComponent, { className: "PaymentMethodsComponent", filePath: "lib\\billing\\components\\payment-methods\\payment-methods.component.ts", lineNumber: 29 }); })();
4228
+
4229
+ /*
4230
+ <file>
4231
+ Project:
4232
+ @osovitny/anatoly
4233
+
4234
+ Authors:
4235
+ Vadim Osovitny vadim.osovitny@osovitny.com
4236
+ Anatoly Osovitny anatoly.osovitny@osovitny.com
4237
+
4238
+ Created:
4239
+ 29 May 2024
4240
+
4241
+ Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
4242
+ </file>
4243
+ */
4244
+ //Node
4245
+ const _c0$g = a0 => ({ "active": a0 });
4246
+ class PaymentOptionsComponent extends ComponentBase {
4247
+ constructor(ps) {
4248
+ super();
4249
+ this.ps = ps;
4250
+ this.change = new EventEmitter();
4251
+ }
4252
+ ngOnInit() {
4253
+ this.setDefaults();
4254
+ this.setValues();
4255
+ }
4256
+ setDefaults() {
4257
+ this.ps.selectedPaymentType = PaymentType.FullPayment;
4258
+ }
4259
+ setValues() { }
4260
+ //Events
4261
+ onPaymentTypeSelect(pt) {
4262
+ this.ps.selectedPaymentType = pt;
4263
+ this.change.emit();
4264
+ }
4265
+ static { this.ɵfac = function PaymentOptionsComponent_Factory(t) { return new (t || PaymentOptionsComponent)(i0.ɵɵdirectiveInject(PaymentsService)); }; }
4266
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PaymentOptionsComponent, selectors: [["anatoly-billing-payment-options"]], inputs: { priceWeekly: "priceWeekly", priceUpfront: "priceUpfront", numberOfWeeks: "numberOfWeeks" }, outputs: { change: "change" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 19, vars: 9, consts: [[1, "payment-options"], [1, "pay-weekly", 3, "ngClass", "click"], [1, "info"], [1, "price"], [1, "pay-upfront", 3, "ngClass", "click"]], template: function PaymentOptionsComponent_Template(rf, ctx) { if (rf & 1) {
4267
+ i0.ɵɵelementStart(0, "div", 0)(1, "h4");
4268
+ i0.ɵɵtext(2, "Payment options");
4269
+ i0.ɵɵelementEnd();
4270
+ i0.ɵɵelementStart(3, "div", 1);
4271
+ i0.ɵɵlistener("click", function PaymentOptionsComponent_Template_div_click_3_listener() { return ctx.onPaymentTypeSelect(2); });
4272
+ i0.ɵɵelementStart(4, "div", 2)(5, "h4");
4273
+ i0.ɵɵtext(6, "Pay weekly");
4274
+ i0.ɵɵelementEnd();
4275
+ i0.ɵɵelementStart(7, "p");
4276
+ i0.ɵɵtext(8, "Cancel anytime");
4277
+ i0.ɵɵelementEnd()();
4278
+ i0.ɵɵelementStart(9, "div", 3);
4279
+ i0.ɵɵtext(10);
4280
+ i0.ɵɵelementEnd()();
4281
+ i0.ɵɵelementStart(11, "div", 4);
4282
+ i0.ɵɵlistener("click", function PaymentOptionsComponent_Template_div_click_11_listener() { return ctx.onPaymentTypeSelect(1); });
4283
+ i0.ɵɵelementStart(12, "div", 2)(13, "h4");
4284
+ i0.ɵɵtext(14, "Pay upfront");
4285
+ i0.ɵɵelementEnd();
4286
+ i0.ɵɵelementStart(15, "p");
4287
+ i0.ɵɵtext(16);
4288
+ i0.ɵɵelementEnd()();
4289
+ i0.ɵɵelementStart(17, "div", 3);
4290
+ i0.ɵɵtext(18);
4291
+ i0.ɵɵelementEnd()()();
4292
+ } if (rf & 2) {
4293
+ i0.ɵɵadvance(3);
4294
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(5, _c0$g, ctx.ps.selectedPaymentType == 2));
4295
+ i0.ɵɵadvance(7);
4296
+ i0.ɵɵtextInterpolate1("$", ctx.priceWeekly, "");
4297
+ i0.ɵɵadvance();
4298
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(7, _c0$g, ctx.ps.selectedPaymentType == 1));
4299
+ i0.ɵɵadvance(5);
4300
+ i0.ɵɵtextInterpolate1("Covers the full ", ctx.numberOfWeeks, " weeks ");
4301
+ i0.ɵɵadvance(2);
4302
+ i0.ɵɵtextInterpolate1("$", ctx.priceUpfront, "");
4303
+ } }, dependencies: [i1$2.NgClass], encapsulation: 2 }); }
4304
+ }
4305
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PaymentOptionsComponent, [{
4306
+ type: Component,
4307
+ args: [{ selector: "anatoly-billing-payment-options", template: "<div class='payment-options'>\r\n <h4>Payment options</h4>\r\n <div (click)='onPaymentTypeSelect(2)' [ngClass]='{\"active\": ps.selectedPaymentType == 2 }' class='pay-weekly'>\r\n <div class='info'>\r\n <h4>Pay weekly</h4>\r\n <p>Cancel anytime</p>\r\n </div>\r\n <div class='price'>${{ priceWeekly }}</div>\r\n </div>\r\n\r\n <div (click)='onPaymentTypeSelect(1)' [ngClass]='{\"active\": ps.selectedPaymentType == 1 }' class='pay-upfront'>\r\n <div class='info'>\r\n <h4>Pay upfront</h4>\r\n <p>Covers the full {{ numberOfWeeks }} weeks </p>\r\n </div>\r\n <div class='price'>${{ priceUpfront }}</div>\r\n </div>\r\n</div>\r\n" }]
4308
+ }], () => [{ type: PaymentsService }], { priceWeekly: [{
4309
+ type: Input
4310
+ }], priceUpfront: [{
4311
+ type: Input
4312
+ }], numberOfWeeks: [{
4313
+ type: Input
4314
+ }], change: [{
4315
+ type: Output
4316
+ }] }); })();
4317
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PaymentOptionsComponent, { className: "PaymentOptionsComponent", filePath: "lib\\billing\\components\\payment-options\\payment-options.component.ts", lineNumber: 29 }); })();
4318
+
4319
+ /*
4320
+ <file>
4321
+ Project:
4322
+ @osovitny/anatoly
4323
+
4324
+ Authors:
4325
+ Vadim Osovitny vadim.osovitny@osovitny.com
4326
+ Anatoly Osovitny anatoly.osovitny@osovitny.com
4327
+
4328
+ Created:
4329
+ 20 Nov 2017
4330
+
4331
+ Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
4332
+ </file>
4333
+ */
4334
+ //Node
4335
+ class EditComponentBase extends ComponentBase {
4336
+ constructor() {
4337
+ super();
4338
+ //Modes
4339
+ this.isAddMode = false;
4340
+ this.isEditMode = false;
4341
+ this.formSubmitted = false;
4342
+ this.controlName = null;
4343
+ this.isEditMode = QSUtils.idExists();
4344
+ this.isAddMode = !this.isEditMode;
4345
+ }
4346
+ isControlValid(name, frmGroup = null) {
4347
+ return !this.isControlInvalid(name, frmGroup);
4348
+ }
4349
+ isControlInvalid(name, frmGroup = null) {
4350
+ if (typeof name === "undefined" || name == "") {
4351
+ return false;
4352
+ }
4353
+ let fg = frmGroup ? frmGroup : this.formGroup;
4354
+ if (!fg) {
4355
+ return false;
4356
+ }
4357
+ let control = fg.get(name);
4358
+ if (control) {
4359
+ return ((this.formSubmitted && control.invalid) || (control.touched && control.invalid));
4360
+ }
4361
+ return false;
4362
+ }
4363
+ //FormGroup functions
4364
+ getFormValue(name, frmGroup = null) {
4365
+ let fg = frmGroup ? frmGroup : this.formGroup;
4366
+ return fg.controls[name].value;
4367
+ }
4368
+ setFormValue(name, value, frmGroup = null) {
4369
+ let fg = frmGroup ? frmGroup : this.formGroup;
4370
+ fg.controls[name].setValue(value);
4371
+ }
4372
+ getFormGroupValue(groupName, name, frmGroup = null) {
4373
+ let fg = frmGroup ? frmGroup : this.formGroup;
4374
+ return fg.controls[groupName].get(name).value;
4375
+ }
4376
+ setFormGroupValue(groupName, name, value, frmGroup = null) {
4377
+ let fg = frmGroup ? frmGroup : this.formGroup;
4378
+ fg.controls[groupName].get(name).setValue(value);
4379
+ }
4380
+ /**
4381
+ * Add control to form group
4382
+ * @param name
4383
+ * @param formControl
4384
+ * @param frmGroup
4385
+ */
4386
+ addControl(name, formControl, frmGroup = null) {
4387
+ let fg = frmGroup ? frmGroup : this.formGroup;
4388
+ fg.addControl(name, formControl);
4389
+ }
4390
+ /**
4391
+ * Removes control from form group
4392
+ * @param name
4393
+ * @param frmGroup
4394
+ */
4395
+ removeControl(name, frmGroup = null) {
4396
+ let fg = frmGroup ? frmGroup : this.formGroup;
4397
+ if (fg.get(name)) {
4398
+ fg.removeControl(name);
4399
+ }
4400
+ }
4401
+ /**
4402
+ * return new form control
4403
+ * @param formState
4404
+ * @param validatorOrOpts
4405
+ * @param asyncValidator
4406
+ */
4407
+ createFormControl(formState, validatorOrOpts, asyncValidator) {
4408
+ return new FormControl(formState, validatorOrOpts, asyncValidator);
4409
+ }
4410
+ /**
4411
+ * Set error to control
4412
+ * @param controlName formControl name
4413
+ * @param err error expect {erroname: boolean} format
4414
+ * @param frmGroup
4415
+ */
4416
+ setControlError(controlName, err, frmGroup = null) {
4417
+ let fg = frmGroup ? frmGroup : this.formGroup;
4418
+ fg.get(controlName)?.setErrors(err);
4419
+ }
4420
+ /**
4421
+ * Set {invalid: true} for the specified form
4422
+ * @param controlName form control name
4423
+ * @param frmGroup
4424
+ */
4425
+ setInValidError(controlName, frmGroup = null) {
4426
+ let fg = frmGroup ? frmGroup : this.formGroup;
4427
+ fg.get(controlName)?.setErrors({ invalid: true });
4428
+ }
4429
+ /**
4430
+ * returns formgroup controls.
4431
+ * main use case is used in html pages
4432
+ */
4433
+ get fc() {
4434
+ return this.formGroup.controls;
4435
+ }
4436
+ get isNgModelBased() {
4437
+ return this.controlName == null;
4438
+ }
4439
+ static { this.ɵfac = function EditComponentBase_Factory(t) { return new (t || EditComponentBase)(); }; }
4440
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EditComponentBase, selectors: [["ng-component"]], inputs: { formGroup: "formGroup", formSubmitted: "formSubmitted", controlName: "controlName" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function EditComponentBase_Template(rf, ctx) { }, encapsulation: 2 }); }
4441
+ }
4442
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EditComponentBase, [{
4443
+ type: Component,
4444
+ args: [{
4445
+ template: ''
4446
+ }]
4447
+ }], () => [], { formGroup: [{
4448
+ type: Input
4449
+ }], formSubmitted: [{
4450
+ type: Input
4451
+ }], controlName: [{
4452
+ type: Input
4453
+ }] }); })();
4454
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EditComponentBase, { className: "EditComponentBase", filePath: "lib\\ui\\components\\base\\components\\edit.component.ts", lineNumber: 28 }); })();
4455
+
4456
+ /*
4457
+ <file>
4458
+ Project:
4459
+ @osovitny/anatoly
4460
+
4461
+ Authors:
4462
+ Vadim Osovitny vadim.osovitny@osovitny.com
4463
+ Anatoly Osovitny anatoly.osovitny@osovitny.com
4005
4464
 
4006
4465
  Created:
4007
- 11 Aug 2024
4008
-
4009
- Details:
4010
- https://blog.thoughtram.io/angular/2017/02/21/using-zones-in-angular-for-better-performance.html
4466
+ 24 Jan 2022
4011
4467
 
4012
- Copyright (c) 2016-2024 Osovitny Inc. All rights reserved.
4468
+ Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
4013
4469
  </file>
4014
4470
  */
4015
4471
  //Node
4016
- class PaymentsService {
4017
- constructor(zone, api, ns, ga) {
4018
- this.zone = zone;
4019
- this.api = api;
4020
- this.ns = ns;
4021
- this.ga = ga;
4022
- this.paymentInProgress = false;
4023
- this.isPaymentFailed = false;
4024
- this.subtotal = 0;
4025
- this.discountCode = null;
4026
- this.discountPercentage = null;
4027
- this.discountAmount = null;
4028
- this.total = 0;
4029
- this.currency = 'USD';
4030
- //Private Streams
4031
- this._discountCodeApplied = new Subject();
4032
- this._paymentAdded = new Subject();
4033
- this._showStripeDialog = new Subject();
4034
- this._showBraintreeDialog = new Subject();
4035
- //Public Streams
4036
- this.discountCodeApplied$ = this._discountCodeApplied.asObservable();
4037
- this.paymentAdded$ = this._paymentAdded.asObservable();
4038
- this.showStripeDialog$ = this._showStripeDialog.asObservable();
4039
- this.showBraintreeDialog$ = this._showBraintreeDialog.asObservable();
4040
- }
4041
- setDefaults() {
4042
- }
4043
- setValues() {
4044
- }
4045
- //fires
4046
- fireDiscountCodeApplied() {
4047
- this._discountCodeApplied.next(this.discountCode);
4048
- }
4049
- firePaymentAdded(paymentId) {
4050
- this._paymentAdded.next(paymentId);
4051
- }
4052
- //Public
4053
- init() {
4054
- this.setDefaults();
4055
- this.setValues();
4056
- }
4057
- resetState() {
4058
- this.subtotal = 0;
4059
- this.total = 0;
4060
- }
4061
- getTotal() {
4062
- let subtotal = this.subtotal;
4063
- if (this.discountAmount != 0) {
4064
- subtotal = subtotal - this.discountAmount;
4065
- }
4066
- else if (this.discountPercentage != 0) {
4067
- subtotal = subtotal - (subtotal * (this.discountPercentage / 100));
4068
- subtotal = +subtotal.toFixed(2);
4069
- }
4070
- return subtotal > 0 ? subtotal : 0;
4071
- }
4072
- //DiscountCode
4073
- applyDiscountCode(discountCode, data) {
4074
- if (!data) {
4075
- return;
4076
- }
4077
- this.discountCode = discountCode;
4078
- if (data.amount) {
4079
- this.discountPercentage = 0;
4080
- this.discountAmount = parseInt(data.amount);
4081
- }
4082
- else if (data.percentage) {
4083
- this.discountPercentage = parseInt(data.percentage);
4084
- this.discountAmount = 0;
4085
- }
4086
- this.fireDiscountCodeApplied();
4472
+ class DialogBase extends EditComponentBase {
4473
+ get isOpen() {
4474
+ return this._isOpen;
4087
4475
  }
4088
- getDiscountCodeAsString() {
4089
- if (this.discountAmount > 0) {
4090
- return "$" + this.discountAmount;
4091
- }
4092
- else if (this.discountPercentage > 0) {
4093
- return this.discountPercentage + "%";
4476
+ set isOpen(value) {
4477
+ if (value) {
4478
+ if (this.osOnBeforeOpen) {
4479
+ this.osOnBeforeOpen();
4480
+ }
4481
+ this.opened.emit();
4094
4482
  }
4095
- return '$0';
4096
- }
4097
- openStripePaymentDialog() {
4098
- this._showStripeDialog.next(true);
4099
- }
4100
- openBraintreePaymentDialog() {
4101
- this._showBraintreeDialog.next(true);
4102
- }
4103
- closeBraintreePaymentDialog() {
4104
- this._showBraintreeDialog.next(false);
4483
+ this._isOpen = value;
4105
4484
  }
4106
- createStripeSession(title, description, image) {
4107
- const amount = this.getTotal();
4108
- const currency = this.currency;
4109
- return this.api.createStripeSession(amount, currency, title, description, image);
4485
+ constructor() {
4486
+ super();
4487
+ //Private
4488
+ this._isOpen = false;
4489
+ //Public
4490
+ this.themeColor = "primary";
4491
+ //Events
4492
+ this.opened = new EventEmitter();
4493
+ this.closed = new EventEmitter();
4110
4494
  }
4111
- createBraintreeToken() {
4112
- return this.api.createBraintreeToken();
4495
+ open() {
4496
+ this.isOpen = true;
4113
4497
  }
4114
- pay(paidFor, payId, payStatus, payDetails) {
4115
- //GA
4116
- this.ga.event(GABillingEvents.payment);
4117
- let paidForAsString = JSON.stringify(paidFor);
4118
- let payType = this.selectedPaymentType;
4119
- let payMethod = this.selectedPaymentMethod;
4120
- //Amount
4121
- let subtotal = this.subtotal;
4122
- let promoCode = this.discountCode;
4123
- let total = this.getTotal();
4124
- let currency = this.currency;
4125
- if (total == 0) {
4126
- payMethod = PaymentMethod.None;
4127
- }
4128
- this.zone.run(() => {
4129
- this.api.pay(paidForAsString, payMethod,
4130
- //Amount
4131
- subtotal, promoCode, total, currency,
4132
- //Payment method details (PayPal/Stripe/Braintree)
4133
- payId, payStatus, payDetails, (data) => {
4134
- if (!data || !data?.isPaymentValid) {
4135
- this.paymentFailed(PaymentStage.External);
4136
- return;
4137
- }
4138
- if (payMethod == PaymentMethod.CreditCard) {
4139
- //this.closeBraintreePaymentDialog();
4140
- }
4141
- this.paymentInProgress = false;
4142
- this.firePaymentAdded(data.paymentId);
4143
- }, () => {
4144
- this.paymentFailed(PaymentStage.External);
4145
- });
4146
- });
4498
+ close(returnValue = "OK") {
4499
+ this.isOpen = false;
4500
+ this.closed.emit(returnValue);
4147
4501
  }
4148
- paymentFailed(stage) {
4149
- this.paymentStage = stage;
4150
- this.paymentInProgress = false;
4151
- this.isPaymentFailed = true;
4152
- this.ns.error("Payment Failed");
4502
+ cancel() {
4503
+ this.isOpen = false;
4504
+ this.closed.emit(-1);
4153
4505
  }
4154
- static { this.ɵfac = function PaymentsService_Factory(t) { return new (t || PaymentsService)(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(PaymentsApiService), i0.ɵɵinject(NotificationService), i0.ɵɵinject(GoogleAnalyticsService)); }; }
4155
- static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: PaymentsService, factory: PaymentsService.ɵfac }); }
4506
+ static { this.ɵfac = function DialogBase_Factory(t) { return new (t || DialogBase)(); }; }
4507
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DialogBase, selectors: [["ng-component"]], inputs: { isOpen: "isOpen" }, outputs: { opened: "opened", closed: "closed" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function DialogBase_Template(rf, ctx) { }, encapsulation: 2 }); }
4156
4508
  }
4157
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PaymentsService, [{
4158
- type: Injectable
4159
- }], () => [{ type: i0.NgZone }, { type: PaymentsApiService }, { type: NotificationService }, { type: GoogleAnalyticsService }], null); })();
4509
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DialogBase, [{
4510
+ type: Component,
4511
+ args: [{
4512
+ template: ''
4513
+ }]
4514
+ }], () => [], { isOpen: [{
4515
+ type: Input
4516
+ }], opened: [{
4517
+ type: Output
4518
+ }], closed: [{
4519
+ type: Output
4520
+ }] }); })();
4521
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DialogBase, { className: "DialogBase", filePath: "lib\\ui\\components\\base\\dialog.ts", lineNumber: 27 }); })();
4160
4522
 
4161
4523
  /*
4162
4524
  <file>
@@ -4172,7 +4534,7 @@ class PaymentsService {
4172
4534
  Description:
4173
4535
  Credit Card payment form via braintree integration
4174
4536
 
4175
- Copyright (c) 2016-2024 Osovitny Inc. All rights reserved.
4537
+ Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
4176
4538
  </file>
4177
4539
  */
4178
4540
  //Node
@@ -4289,7 +4651,7 @@ class BraintreeDialog extends DialogBase {
4289
4651
  i0.ɵɵtemplate(0, BraintreeDialog_Conditional_0_Template, 11, 3, "div", 0);
4290
4652
  } if (rf & 2) {
4291
4653
  i0.ɵɵconditional(0, ctx.visible ? 0 : -1);
4292
- } }, dependencies: [i2.DialogComponent, i2.DialogTitleBarComponent, i2.DialogActionsComponent], encapsulation: 2 }); }
4654
+ } }, dependencies: [i2$1.DialogComponent, i2$1.DialogTitleBarComponent, i2$1.DialogActionsComponent], encapsulation: 2 }); }
4293
4655
  }
4294
4656
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(BraintreeDialog, [{
4295
4657
  type: Component,
@@ -4861,7 +5223,7 @@ class PaypalButtonComponent extends ComponentBase {
4861
5223
  Description:
4862
5224
  Credit Card payment form via stripe integration
4863
5225
 
4864
- Copyright (c) 2016-2024 Osovitny Inc. All rights reserved.
5226
+ Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
4865
5227
  </file>
4866
5228
  */
4867
5229
  //Node
@@ -4931,7 +5293,7 @@ class StripeDialog extends DialogBase {
4931
5293
  i0.ɵɵtemplate(0, StripeDialog_Conditional_0_Template, 6, 3, "div", 0);
4932
5294
  } if (rf & 2) {
4933
5295
  i0.ɵɵconditional(0, ctx.visible ? 0 : -1);
4934
- } }, dependencies: [i2.DialogComponent, i2.DialogTitleBarComponent], encapsulation: 2 }); }
5296
+ } }, dependencies: [i2$1.DialogComponent, i2$1.DialogTitleBarComponent], encapsulation: 2 }); }
4935
5297
  }
4936
5298
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(StripeDialog, [{
4937
5299
  type: Component,
@@ -4961,7 +5323,34 @@ class StripeDialog extends DialogBase {
4961
5323
  Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
4962
5324
  </file>
4963
5325
  */
4964
- //braintree
5326
+
5327
+ /*
5328
+ <file>
5329
+ Project:
5330
+ Atlas Cross
5331
+
5332
+ Authors:
5333
+ Leon Malyan leon.malyan@osovitny.com
5334
+
5335
+ Created:
5336
+ 25 May 2024
5337
+
5338
+ Copyright (c) 2023-2024 Atlas Cross Inc. All rights reserved.
5339
+ </file>
5340
+ */
5341
+ class BillingUtils {
5342
+ static convert2AmountWithCurrency(amount, currency) {
5343
+ switch (currency) {
5344
+ case 'GBP':
5345
+ return '£' + amount;
5346
+ case 'EUR':
5347
+ return '€' + amount;
5348
+ case 'USD':
5349
+ return '$' + amount;
5350
+ }
5351
+ return amount;
5352
+ }
5353
+ }
4965
5354
 
4966
5355
  /*
4967
5356
  <file>
@@ -5229,37 +5618,6 @@ class CurrenciesStorageService {
5229
5618
  type: Injectable
5230
5619
  }], () => [{ type: AppContextService }, { type: CurrenciesApiService }], null); })();
5231
5620
 
5232
- /*
5233
- <file>
5234
- Project:
5235
- @osovitny/anatoly
5236
-
5237
- Authors:
5238
- Vadim Osovitny vadim.osovitny@osovitny.com
5239
-
5240
- Created:
5241
- 4 Jun 2024
5242
-
5243
- Copyright (c) 2017-2025 Osovitny Inc. All rights reserved.
5244
- </file>
5245
- */
5246
- //Node
5247
- class DiscountCodesApiService extends ApiServiceBase {
5248
- constructor(http) {
5249
- super(http);
5250
- this.http = http;
5251
- this.baseUrl = `${ApiUrl}/billing/discountCodes`;
5252
- }
5253
- getDiscountCode(code) {
5254
- return this.get('getDiscountCode', { code });
5255
- }
5256
- static { this.ɵfac = function DiscountCodesApiService_Factory(t) { return new (t || DiscountCodesApiService)(i0.ɵɵinject(i1$1.HttpClient)); }; }
5257
- static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: DiscountCodesApiService, factory: DiscountCodesApiService.ɵfac }); }
5258
- }
5259
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DiscountCodesApiService, [{
5260
- type: Injectable
5261
- }], () => [{ type: i1$1.HttpClient }], null); })();
5262
-
5263
5621
  /*
5264
5622
  <file>
5265
5623
  Project:
@@ -6610,7 +6968,7 @@ class NativeElementDirective {
6610
6968
  // sets the localization key to the control
6611
6969
  this.control.control.nativeElement = this.el.nativeElement;
6612
6970
  }
6613
- static { this.ɵfac = function NativeElementDirective_Factory(t) { return new (t || NativeElementDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i2$1.NgControl)); }; }
6971
+ static { this.ɵfac = function NativeElementDirective_Factory(t) { return new (t || NativeElementDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i2.NgControl)); }; }
6614
6972
  static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: NativeElementDirective, selectors: [["", "formControl", ""], ["", "formControlName", ""]] }); }
6615
6973
  }
6616
6974
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NativeElementDirective, [{
@@ -6618,7 +6976,7 @@ class NativeElementDirective {
6618
6976
  args: [{
6619
6977
  selector: '[formControl], [formControlName]'
6620
6978
  }]
6621
- }], () => [{ type: i0.ElementRef }, { type: i2$1.NgControl }], null); })();
6979
+ }], () => [{ type: i0.ElementRef }, { type: i2.NgControl }], null); })();
6622
6980
 
6623
6981
  /*
6624
6982
  <file>
@@ -6891,7 +7249,7 @@ class UrlSlugComponent extends EditComponentBase {
6891
7249
  i0.ɵɵproperty("formControlName", ctx.controlName);
6892
7250
  i0.ɵɵadvance();
6893
7251
  i0.ɵɵproperty("ngIf", ctx.isGoButtonVisible);
6894
- } }, dependencies: [i1$2.NgClass, i1$2.NgIf, i2$1.DefaultValueAccessor, i2$1.NgControlStatus, i2$1.NgControlStatusGroup, i2$1.FormGroupDirective, i2$1.FormControlName, NativeElementDirective, ItemValidationSummaryComponent], encapsulation: 2 }); }
7252
+ } }, dependencies: [i1$2.NgClass, i1$2.NgIf, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgControlStatusGroup, i2.FormGroupDirective, i2.FormControlName, NativeElementDirective, ItemValidationSummaryComponent], encapsulation: 2 }); }
6895
7253
  }
6896
7254
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(UrlSlugComponent, [{
6897
7255
  type: Component,
@@ -6985,7 +7343,7 @@ class CountryDropdownlist extends EditComponentBase {
6985
7343
  i0.ɵɵproperty("ngIf", ctx.isNgModelBased);
6986
7344
  i0.ɵɵadvance();
6987
7345
  i0.ɵɵproperty("ngIf", !ctx.isNgModelBased);
6988
- } }, dependencies: [i1$2.NgForOf, i1$2.NgIf, i2$1.NgSelectOption, i2$1.ɵNgSelectMultipleOption, i2$1.SelectControlValueAccessor, i2$1.NgControlStatus, i2$1.NgControlStatusGroup, i2$1.FormGroupDirective, i2$1.FormControlName, NativeElementDirective], encapsulation: 2 }); }
7346
+ } }, dependencies: [i1$2.NgForOf, i1$2.NgIf, i2.NgSelectOption, i2.ɵNgSelectMultipleOption, i2.SelectControlValueAccessor, i2.NgControlStatus, i2.NgControlStatusGroup, i2.FormGroupDirective, i2.FormControlName, NativeElementDirective], encapsulation: 2 }); }
6989
7347
  }
6990
7348
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CountryDropdownlist, [{
6991
7349
  type: Component,
@@ -7088,7 +7446,7 @@ class TimezoneDropdownlist extends EditComponentBase {
7088
7446
  i0.ɵɵproperty("ngIf", ctx.isNgModelBased);
7089
7447
  i0.ɵɵadvance();
7090
7448
  i0.ɵɵproperty("ngIf", !ctx.isNgModelBased);
7091
- } }, dependencies: [i1$2.NgForOf, i1$2.NgIf, i2$1.NgSelectOption, i2$1.ɵNgSelectMultipleOption, i2$1.SelectControlValueAccessor, i2$1.NgControlStatus, i2$1.NgControlStatusGroup, i2$1.FormGroupDirective, i2$1.FormControlName, NativeElementDirective], encapsulation: 2 }); }
7449
+ } }, dependencies: [i1$2.NgForOf, i1$2.NgIf, i2.NgSelectOption, i2.ɵNgSelectMultipleOption, i2.SelectControlValueAccessor, i2.NgControlStatus, i2.NgControlStatusGroup, i2.FormGroupDirective, i2.FormControlName, NativeElementDirective], encapsulation: 2 }); }
7092
7450
  }
7093
7451
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TimezoneDropdownlist, [{
7094
7452
  type: Component,
@@ -7463,7 +7821,7 @@ class FormsHtmlEditorComponent extends HtmlEditorComponentBase {
7463
7821
  i0.ɵɵproperty("formControlName", ctx.editorFormKey)("froalaEditor", ctx.options);
7464
7822
  i0.ɵɵadvance();
7465
7823
  i0.ɵɵproperty("formGroup", ctx.formGroup)("formSubmitted", ctx.formSubmitted)("controlName", ctx.editorFormKey);
7466
- } }, dependencies: [i1$2.NgClass, i2$1.DefaultValueAccessor, i2$1.NgControlStatus, i2$1.NgControlStatusGroup, i2$1.FormGroupDirective, i2$1.FormControlName, i3.FroalaEditorDirective, NativeElementDirective, ItemValidationSummaryComponent], encapsulation: 2 }); }
7824
+ } }, dependencies: [i1$2.NgClass, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgControlStatusGroup, i2.FormGroupDirective, i2.FormControlName, i3.FroalaEditorDirective, NativeElementDirective, ItemValidationSummaryComponent], encapsulation: 2 }); }
7467
7825
  }
7468
7826
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FormsHtmlEditorComponent, [{
7469
7827
  type: Component,
@@ -7748,7 +8106,7 @@ class ContactUsForm extends EditComponentBase {
7748
8106
  onTopicChange(event) {
7749
8107
  this.selectedTopic = event.target.value;
7750
8108
  }
7751
- static { this.ɵfac = function ContactUsForm_Factory(t) { return new (t || ContactUsForm)(i0.ɵɵdirectiveInject(i1$8.ReCaptchaV3Service), i0.ɵɵdirectiveInject(i2$1.FormBuilder), i0.ɵɵdirectiveInject(AppContextService), i0.ɵɵdirectiveInject(EmailsApiService), i0.ɵɵdirectiveInject(NotificationService)); }; }
8109
+ static { this.ɵfac = function ContactUsForm_Factory(t) { return new (t || ContactUsForm)(i0.ɵɵdirectiveInject(i1$8.ReCaptchaV3Service), i0.ɵɵdirectiveInject(i2.FormBuilder), i0.ɵɵdirectiveInject(AppContextService), i0.ɵɵdirectiveInject(EmailsApiService), i0.ɵɵdirectiveInject(NotificationService)); }; }
7752
8110
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ContactUsForm, selectors: [["anatoly-forms-contactus-form"]], inputs: { showActionButtons: "showActionButtons" }, outputs: { submit: "submit" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 39, vars: 31, consts: [["novalidate", "", 3, "formGroup", "ngSubmit"], [3, "formGroup", "visible"], [1, "contact-us"], [1, "row"], [1, "form-fields", "col-6"], [1, "form-topic", 3, "ngClass"], [1, "form-select-wrapper"], [1, "assistive-text"], ["formControlName", "topic", 1, "form-select", 3, "change"], [3, "value", 4, "ngFor", "ngForOf"], ["controlName", "topic", "controlTitle", "topic", 3, "formGroup", "formSubmitted"], [1, "form-name", 3, "ngClass"], ["formControlName", "name", "placeholder", "Name *", "type", "text", 1, "form-control"], ["controlName", "name", "controlTitle", "name", 3, "formGroup", "formSubmitted"], [1, "form-email", 3, "ngClass"], ["formControlName", "email", "placeholder", "E-mail *", "type", "text", 1, "form-control"], [4, "ngIf"], ["controlName", "email", "controlTitle", "email", 3, "formGroup", "formSubmitted"], [1, "form-subject", 3, "ngClass"], ["formControlName", "subject", "placeholder", "Subject *", "type", "text", 1, "form-control"], ["controlName", "subject", "controlTitle", "subject", 3, "formGroup", "formSubmitted"], [1, "col-6"], [1, "form-message", 3, "ngClass"], ["formControlName", "message", "name", "message", "placeholder", "Message *", "rows", "4", "type", "text"], ["controlName", "message", "controlTitle", "message", 3, "formGroup", "formSubmitted"], [1, "row", "form-footer"], [1, "col"], ["class", "btn btn-success", "type", "submit", 3, "btn-primary", 4, "ngIf"], [3, "value"], ["type", "submit", 1, "btn", "btn-success"]], template: function ContactUsForm_Template(rf, ctx) { if (rf & 1) {
7753
8111
  i0.ɵɵelementStart(0, "form", 0);
7754
8112
  i0.ɵɵlistener("ngSubmit", function ContactUsForm_Template_form_ngSubmit_0_listener() { return ctx.onSubmit(); });
@@ -7820,12 +8178,12 @@ class ContactUsForm extends EditComponentBase {
7820
8178
  i0.ɵɵproperty("formGroup", ctx.formGroup)("formSubmitted", ctx.formSubmitted);
7821
8179
  i0.ɵɵadvance(3);
7822
8180
  i0.ɵɵproperty("ngIf", ctx.showActionButtons);
7823
- } }, dependencies: [i1$2.NgClass, i1$2.NgForOf, i1$2.NgIf, i2$1.ɵNgNoValidate, i2$1.NgSelectOption, i2$1.ɵNgSelectMultipleOption, i2$1.DefaultValueAccessor, i2$1.SelectControlValueAccessor, i2$1.NgControlStatus, i2$1.NgControlStatusGroup, i2$1.FormGroupDirective, i2$1.FormControlName, NativeElementDirective, FormValidationSummaryComponent, ItemValidationSummaryComponent], encapsulation: 2 }); }
8181
+ } }, dependencies: [i1$2.NgClass, i1$2.NgForOf, i1$2.NgIf, i2.ɵNgNoValidate, i2.NgSelectOption, i2.ɵNgSelectMultipleOption, i2.DefaultValueAccessor, i2.SelectControlValueAccessor, i2.NgControlStatus, i2.NgControlStatusGroup, i2.FormGroupDirective, i2.FormControlName, NativeElementDirective, FormValidationSummaryComponent, ItemValidationSummaryComponent], encapsulation: 2 }); }
7824
8182
  }
7825
8183
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContactUsForm, [{
7826
8184
  type: Component,
7827
8185
  args: [{ selector: 'anatoly-forms-contactus-form', template: "<form (ngSubmit)='onSubmit()' [formGroup]='formGroup' novalidate>\r\n <anatoly-form-validation-summary [formGroup]='formGroup'\r\n [visible]='formSubmitted && formGroup.invalid'></anatoly-form-validation-summary>\r\n\r\n <div class='contact-us'>\r\n <div class=\"row\">\r\n <div class='form-fields col-6'>\r\n <p>What can we help you with?</p>\r\n <div [ngClass]=\"{'has-error': isControlInvalid('topic') }\" class='form-topic'>\r\n <div class='form-select-wrapper'>\r\n <label class='assistive-text'>Topic *</label>\r\n <select (change)='onTopicChange($event)' class='form-select' formControlName='topic'>\r\n <option *ngFor='let topic of topicList' [value]='topic.value'>{{ topic.value }} </option>\r\n </select>\r\n <anatoly-item-validation-summary [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'\r\n controlName='topic'\r\n controlTitle='topic'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"{'has-error': isControlInvalid('name') }\" class='form-name'>\r\n <label class='assistive-text'>Name *</label>\r\n <input class='form-control' formControlName='name' placeholder='Name *' type='text'>\r\n <anatoly-item-validation-summary [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'\r\n controlName='name'\r\n controlTitle='name'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n <div [ngClass]=\"{'has-error': isControlInvalid('email') }\" class='form-email'>\r\n <label class='assistive-text'>E-mail * </label>\r\n <input class='form-control' formControlName='email' placeholder='E-mail *' type='text' />\r\n <p *ngIf='!isUserSignedIn'>Please indicate the email used for your MailEx login if you already have an account</p>\r\n <anatoly-item-validation-summary [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'\r\n controlName='email'\r\n controlTitle='email'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n <div [ngClass]=\"{'has-error': isControlInvalid('subject') }\" class='form-subject'>\r\n <label class='assistive-text'>Subject *</label>\r\n <input class='form-control' formControlName='subject' placeholder='Subject *' type='text' />\r\n <anatoly-item-validation-summary [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'\r\n controlName='subject'\r\n controlTitle='subject'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n\r\n </div>\r\n <div class='col-6'>\r\n <div [ngClass]=\"{'has-error': isControlInvalid('message') }\" class='form-message'>\r\n <label class='assistive-text'>Message *</label>\r\n <textarea formControlName='message' name='message' placeholder='Message *' rows='4'\r\n type='text'></textarea>\r\n <anatoly-item-validation-summary [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'\r\n controlName='message'\r\n controlTitle='message'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row form-footer\">\r\n <div class=\"col\">\r\n <button *ngIf='showActionButtons'\r\n [class.btn-primary]='!formGroup.invalid'\r\n class='btn btn-success'\r\n type='submit'>\r\n Submit\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</form>\r\n" }]
7828
- }], () => [{ type: i1$8.ReCaptchaV3Service }, { type: i2$1.FormBuilder }, { type: AppContextService }, { type: EmailsApiService }, { type: NotificationService }], { showActionButtons: [{
8186
+ }], () => [{ type: i1$8.ReCaptchaV3Service }, { type: i2.FormBuilder }, { type: AppContextService }, { type: EmailsApiService }, { type: NotificationService }], { showActionButtons: [{
7829
8187
  type: Input
7830
8188
  }], submit: [{
7831
8189
  type: Output
@@ -7893,7 +8251,7 @@ class ContactUsDialog extends DialogBase {
7893
8251
  i0.ɵɵtemplate(0, ContactUsDialog_kendo_dialog_0_Template, 10, 2, "kendo-dialog", 0);
7894
8252
  } if (rf & 2) {
7895
8253
  i0.ɵɵproperty("ngIf", ctx.isOpen);
7896
- } }, dependencies: [i1$2.NgIf, i2.DialogComponent, i2.DialogActionsComponent, ContactUsForm], encapsulation: 2 }); }
8254
+ } }, dependencies: [i1$2.NgIf, i2$1.DialogComponent, i2$1.DialogActionsComponent, ContactUsForm], encapsulation: 2 }); }
7897
8255
  }
7898
8256
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContactUsDialog, [{
7899
8257
  type: Component,
@@ -8139,7 +8497,7 @@ class AddressComponent extends EditComponentBase {
8139
8497
  let usState = event.target.value;
8140
8498
  this.change.emit(usState);
8141
8499
  }
8142
- static { this.ɵfac = function AddressComponent_Factory(t) { return new (t || AddressComponent)(i0.ɵɵdirectiveInject(i2$1.FormBuilder), i0.ɵɵdirectiveInject(CoreApiService)); }; }
8500
+ static { this.ɵfac = function AddressComponent_Factory(t) { return new (t || AddressComponent)(i0.ɵɵdirectiveInject(i2.FormBuilder), i0.ɵɵdirectiveInject(CoreApiService)); }; }
8143
8501
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AddressComponent, selectors: [["anatoly-forms-address"]], inputs: { address: "address" }, outputs: { change: "change" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 29, vars: 29, consts: [["classes", "card-primary card-outline"], [3, "title", 4, "ngIf"], [1, "row", 3, "formGroup"], [1, "form-group", "col-12", 3, "ngClass"], [1, "col-form-label", "required"], ["type", "text", "formControlName", "address_street", "placeholder", "Street Address", 1, "form-control"], ["controlName", "address_street", "controlTitle", "Street", 3, "formGroup", "formSubmitted"], ["type", "text", "formControlName", "address_street2", "placeholder", "Apartment, suite, unit, building, floor, etc.", 1, "form-control"], ["controlName", "address_street2", "controlTitle", "Street2", 3, "formGroup", "formSubmitted"], [1, "form-group", "col-3", 3, "ngClass"], ["type", "text", "formControlName", "address_city", "placeholder", "City", 1, "form-control"], ["controlName", "address_city", "controlTitle", "City", 3, "formGroup", "formSubmitted"], ["class", "form-group col-3", 3, "ngClass", 4, "ngIf"], ["type", "text", "formControlName", "address_zipcode", "placeholder", "zipcode", 1, "form-control"], ["controlName", "address_zipcode", "controlTitle", "zipcode", 3, "formGroup", "formSubmitted"], ["formControlName", "address_country", "data-placeholder", "Select a Country", 1, "form-control", 3, "change"], [3, "value", 4, "ngFor", "ngForOf"], ["controlName", "address_country", "controlTitle", "Country", 3, "formGroup", "formSubmitted"], [3, "title"], ["formControlName", "address_stateOrRegion", 1, "form-control", 3, "change"], ["controlName", "address_stateOrRegion", "controlTitle", "State", 3, "formGroup", "formSubmitted"], [3, "value"]], template: function AddressComponent_Template(rf, ctx) { if (rf & 1) {
8144
8502
  i0.ɵɵelementStart(0, "anatoly-card", 0);
8145
8503
  i0.ɵɵtemplate(1, AddressComponent_anatoly_card_header_1_Template, 1, 1, "anatoly-card-header", 1);
@@ -8200,12 +8558,12 @@ class AddressComponent extends EditComponentBase {
8200
8558
  i0.ɵɵproperty("ngForOf", ctx.countryData);
8201
8559
  i0.ɵɵadvance();
8202
8560
  i0.ɵɵproperty("formGroup", ctx.formGroup)("formSubmitted", ctx.formSubmitted);
8203
- } }, dependencies: [i1$2.NgClass, i1$2.NgForOf, i1$2.NgIf, i2$1.NgSelectOption, i2$1.ɵNgSelectMultipleOption, i2$1.DefaultValueAccessor, i2$1.SelectControlValueAccessor, i2$1.NgControlStatus, i2$1.NgControlStatusGroup, i2$1.FormGroupDirective, i2$1.FormControlName, CardComponent, CardHeaderComponent, CardBodyComponent, NativeElementDirective, ItemValidationSummaryComponent], encapsulation: 2 }); }
8561
+ } }, dependencies: [i1$2.NgClass, i1$2.NgForOf, i1$2.NgIf, i2.NgSelectOption, i2.ɵNgSelectMultipleOption, i2.DefaultValueAccessor, i2.SelectControlValueAccessor, i2.NgControlStatus, i2.NgControlStatusGroup, i2.FormGroupDirective, i2.FormControlName, CardComponent, CardHeaderComponent, CardBodyComponent, NativeElementDirective, ItemValidationSummaryComponent], encapsulation: 2 }); }
8204
8562
  }
8205
8563
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AddressComponent, [{
8206
8564
  type: Component,
8207
8565
  args: [{ selector: 'anatoly-forms-address', template: "<anatoly-card classes='card-primary card-outline'>\r\n <anatoly-card-header *ngIf='isTitleVisible' [title]='title'></anatoly-card-header>\r\n <anatoly-card-body>\r\n <div class='row' [formGroup]='formGroup'>\r\n <div class='form-group col-12' [ngClass]=\"{'has-error': isControlInvalid('address_street')}\" >\r\n <label class='col-form-label required'>Street Address</label>\r\n <input type='text' class='form-control' formControlName='address_street' placeholder='Street Address'>\r\n <anatoly-item-validation-summary controlName='address_street'\r\n controlTitle='Street'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n\r\n <div class='form-group col-12' [ngClass]=\"{'has-error': isControlInvalid('address_street2')}\" >\r\n <input type='text' class='form-control' formControlName='address_street2' placeholder='Apartment, suite, unit, building, floor, etc.'>\r\n <anatoly-item-validation-summary controlName='address_street2'\r\n controlTitle='Street2'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n\r\n <div class='form-group col-3' [ngClass]=\"{'has-error': isControlInvalid('address_city')}\">\r\n <label class='col-form-label required'>City</label>\r\n <input type='text' class='form-control' formControlName='address_city' placeholder='City'>\r\n <anatoly-item-validation-summary controlName='address_city'\r\n controlTitle='City'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n\r\n <div class='form-group col-3' *ngIf=\"formGroup.value.address_country == 'US'\" [ngClass]=\"{'has-error': isControlInvalid('address_stateOrRegion')}\">\r\n <label class='col-form-label required'>State</label>\r\n <select class='form-control' (change)='onUSStateChange($event)' formControlName='address_stateOrRegion'>\r\n <option *ngFor='let state of usStateData' [value]='state.code'>{{state.name}}</option>\r\n </select>\r\n <anatoly-item-validation-summary controlName='address_stateOrRegion'\r\n controlTitle='State'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n\r\n <div class='form-group col-3' [ngClass]=\"{'has-error': isControlInvalid('address_zipcode')}\" >\r\n <label class='col-form-label required'>zipcode</label>\r\n <input type='text' class='form-control' formControlName='address_zipcode' placeholder='zipcode'>\r\n <anatoly-item-validation-summary controlName='address_zipcode'\r\n controlTitle='zipcode'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n\r\n <div class='form-group col-3' [ngClass]=\"{'has-error': isControlInvalid('address_country')}\">\r\n <label class='col-form-label required'>Country</label>\r\n <select class='form-control' (change)='onCountryChange($event)' formControlName='address_country' data-placeholder='Select a Country'>\r\n <option *ngFor='let country of countryData' [value]='country.code'>{{country.name}}</option>\r\n </select>\r\n <anatoly-item-validation-summary controlName='address_country'\r\n controlTitle='Country'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n </div>\r\n </anatoly-card-body>\r\n</anatoly-card>\r\n" }]
8208
- }], () => [{ type: i2$1.FormBuilder }, { type: CoreApiService }], { address: [{
8566
+ }], () => [{ type: i2.FormBuilder }, { type: CoreApiService }], { address: [{
8209
8567
  type: Input
8210
8568
  }], change: [{
8211
8569
  type: Output
@@ -8284,7 +8642,7 @@ class CompanyComponent extends EditComponentBase {
8284
8642
  };
8285
8643
  return JSON.stringify(data);
8286
8644
  }
8287
- static { this.ɵfac = function CompanyComponent_Factory(t) { return new (t || CompanyComponent)(i0.ɵɵdirectiveInject(i2$1.FormBuilder)); }; }
8645
+ static { this.ɵfac = function CompanyComponent_Factory(t) { return new (t || CompanyComponent)(i0.ɵɵdirectiveInject(i2.FormBuilder)); }; }
8288
8646
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CompanyComponent, selectors: [["anatoly-forms-company"]], inputs: { company: "company" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 24, vars: 22, consts: [["classes", "card-primary card-outline"], [3, "title", 4, "ngIf"], [1, "row", 3, "formGroup"], [1, "form-group", "col-6", 3, "ngClass"], [1, "col-form-label"], ["type", "text", "formControlName", "company_name", "placeholder", "Company Name", 1, "form-control"], ["controlName", "company_name", "controlTitle", "Company Name", 3, "formGroup", "formSubmitted"], ["type", "tel", "formControlName", "company_phone", "placeholder", "Company Phone", 1, "form-control"], ["controlName", "company_phone", "controlTitle", "Company Phone", 3, "formGroup", "formSubmitted"], ["type", "email", "formControlName", "company_email", "placeholder", "Company Email", 1, "form-control"], ["controlName", "company_email", "controlTitle", "Company Email", 3, "formGroup", "formSubmitted"], ["type", "url", "placeholder", "https://example.com", "pattern", "https://.*", "size", "30", "formControlName", "company_websiteUrl", 1, "form-control"], ["controlName", "company_websiteUrl", "controlTitle", "Company website url", 3, "formGroup", "formSubmitted"], [3, "title"]], template: function CompanyComponent_Template(rf, ctx) { if (rf & 1) {
8289
8647
  i0.ɵɵelementStart(0, "anatoly-card", 0);
8290
8648
  i0.ɵɵtemplate(1, CompanyComponent_anatoly_card_header_1_Template, 1, 1, "anatoly-card-header", 1);
@@ -8329,12 +8687,12 @@ class CompanyComponent extends EditComponentBase {
8329
8687
  i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(20, _c0, ctx.isControlInvalid("company_websiteUrl")));
8330
8688
  i0.ɵɵadvance(4);
8331
8689
  i0.ɵɵproperty("formGroup", ctx.formGroup)("formSubmitted", ctx.formSubmitted);
8332
- } }, dependencies: [i1$2.NgClass, i1$2.NgIf, i2$1.DefaultValueAccessor, i2$1.NgControlStatus, i2$1.NgControlStatusGroup, i2$1.PatternValidator, i2$1.FormGroupDirective, i2$1.FormControlName, CardComponent, CardHeaderComponent, CardBodyComponent, NativeElementDirective, ItemValidationSummaryComponent], encapsulation: 2 }); }
8690
+ } }, dependencies: [i1$2.NgClass, i1$2.NgIf, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgControlStatusGroup, i2.PatternValidator, i2.FormGroupDirective, i2.FormControlName, CardComponent, CardHeaderComponent, CardBodyComponent, NativeElementDirective, ItemValidationSummaryComponent], encapsulation: 2 }); }
8333
8691
  }
8334
8692
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CompanyComponent, [{
8335
8693
  type: Component,
8336
8694
  args: [{ selector: 'anatoly-forms-company', template: "<anatoly-card classes='card-primary card-outline'>\r\n <anatoly-card-header *ngIf='isTitleVisible' [title]='title'></anatoly-card-header>\r\n <anatoly-card-body>\r\n <div [formGroup]='formGroup' class='row'>\r\n <div class='form-group col-6' [ngClass]=\"{'has-error': isControlInvalid('company_name') }\">\r\n <label class='col-form-label'>Name</label>\r\n <input type='text' class='form-control' formControlName='company_name' placeholder='Company Name'>\r\n <anatoly-item-validation-summary controlName='company_name'\r\n controlTitle='Company Name'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n <div class='form-group col-6' [ngClass]=\"{'has-error': isControlInvalid('company_phone') }\">\r\n <label class='col-form-label'>Phone</label>\r\n <input type='tel' class='form-control' formControlName='company_phone' placeholder='Company Phone'>\r\n <anatoly-item-validation-summary controlName='company_phone'\r\n controlTitle='Company Phone'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n <div class='form-group col-6' [ngClass]=\"{'has-error': isControlInvalid('company_email') }\">\r\n <label class='col-form-label'>Email</label>\r\n <input type='email' class='form-control' formControlName='company_email' placeholder='Company Email'>\r\n <anatoly-item-validation-summary controlName='company_email'\r\n controlTitle='Company Email'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n <div class='form-group col-6' [ngClass]=\"{'has-error': isControlInvalid('company_websiteUrl') }\">\r\n <label class='col-form-label'>Website Url</label>\r\n <input type='url' placeholder='https://example.com' pattern='https://.*' size='30'\r\n class='form-control' formControlName='company_websiteUrl'>\r\n <anatoly-item-validation-summary controlName='company_websiteUrl'\r\n controlTitle='Company website url'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n\r\n </div>\r\n </anatoly-card-body>\r\n</anatoly-card>\r\n" }]
8337
- }], () => [{ type: i2$1.FormBuilder }], { company: [{
8695
+ }], () => [{ type: i2.FormBuilder }], { company: [{
8338
8696
  type: Input
8339
8697
  }] }); })();
8340
8698
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CompanyComponent, { className: "CompanyComponent", filePath: "lib\\ui\\forms\\components\\company\\company.component.ts", lineNumber: 28 }); })();
@@ -9155,11 +9513,14 @@ class KendoModule {
9155
9513
  </file>
9156
9514
  */
9157
9515
  const COMPONENTS$1 = [
9516
+ OrderSummaryComponent,
9517
+ PaymentMethodsComponent,
9518
+ PaymentOptionsComponent,
9158
9519
  PaypalButtonComponent,
9159
9520
  PayPalComponent,
9160
9521
  //Dialogs
9161
9522
  BraintreeDialog,
9162
- StripeDialog
9523
+ StripeDialog,
9163
9524
  ];
9164
9525
 
9165
9526
  /*
@@ -9186,6 +9547,8 @@ class AnatolyBillingModule {
9186
9547
  PayPalScriptService,
9187
9548
  PaymentsService
9188
9549
  ], imports: [CommonModule,
9550
+ ReactiveFormsModule,
9551
+ FormsModule,
9189
9552
  FaModule,
9190
9553
  KendoModule] }); }
9191
9554
  }
@@ -9194,6 +9557,8 @@ class AnatolyBillingModule {
9194
9557
  args: [{
9195
9558
  imports: [
9196
9559
  CommonModule,
9560
+ ReactiveFormsModule,
9561
+ FormsModule,
9197
9562
  FaModule,
9198
9563
  KendoModule
9199
9564
  ],
@@ -9210,9 +9575,11 @@ class AnatolyBillingModule {
9210
9575
  ]
9211
9576
  }]
9212
9577
  }], null, null); })();
9213
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(AnatolyBillingModule, { declarations: [PaypalButtonComponent, PayPalComponent, BraintreeDialog, StripeDialog], imports: [CommonModule,
9578
+ (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(AnatolyBillingModule, { declarations: [OrderSummaryComponent, PaymentMethodsComponent, PaymentOptionsComponent, PaypalButtonComponent, PayPalComponent, BraintreeDialog, StripeDialog], imports: [CommonModule,
9579
+ ReactiveFormsModule,
9580
+ FormsModule,
9214
9581
  FaModule,
9215
- KendoModule], exports: [PaypalButtonComponent, PayPalComponent, BraintreeDialog, StripeDialog] }); })();
9582
+ KendoModule], exports: [OrderSummaryComponent, PaymentMethodsComponent, PaymentOptionsComponent, PaypalButtonComponent, PayPalComponent, BraintreeDialog, StripeDialog] }); })();
9216
9583
 
9217
9584
  /*
9218
9585
  <file>
@@ -9488,5 +9855,5 @@ class AnatolyModule {
9488
9855
  * Generated bundle index. Do not edit.
9489
9856
  */
9490
9857
 
9491
- export { AddressComponent, AdminGuard, Alerts, AnatolyBillingModule, AnatolyCoreModule, AnatolyDataModule, AnatolyHttpInterceptor, AnatolyIAMModule, AnatolyIAMPagesModule, AnatolyModule, AnatolyUIModule, ApiServiceBase, ApiUrl, AppContextService, AppCoreSettings, AppName, AppSettings, AppVersion, AuthService, AuthenticationGuard, BaseGoService, BraintreeDialog, Browser, BuyAccessButtonComponent, CardBodyComponent, CardComponent, CardFooterComponent, CardHeaderComponent, CheckIconComponent, ClientApps, CompanyComponent, ComponentBase, ContactUsDialog, ContactUsForm, Convert, Copy2ClipboardComponent, CoreApiService, CountryDropdownlist, CurrenciesApiService, CurrenciesStorageService, DOM, DataPagerComponent, DataViewType, DateConvert, DefaultEditorOptions, DialogBase, DigitalMarketingService, DiscountCodeStatus, DiscountCodeType, DiscountCodesApiService, EditComponentBase, EditPageBase, EmailsApiService, EnumEditComponentBase, FileSizePipe, FormValidationSummaryComponent, FormsHtmlEditorComponent, GABillingEvents, GAEvents, GlobalErrorHandler, GoogleAnalyticsService, GridEditServiceBase, GridReadServiceBase, Guid, HoveringDirective, HtmlEditorComponent, HtmlEditorComponentBase, IdleService, InjectorInstance, IsDevMode, IsProdMode, ItemValidationSummaryComponent, L10NUrl, L10nUtils, ListBase, LoadingComponent, LoadingService, LocalStorageService, LocalizationInjectorInstance, LocalizationModule, LocalizationService, LocalizationSettingsModule, LocalizePipe, LoggingService, MSALUtils, NativeElementDirective, NodataComponent, NotificationService, PageBase, PageSpinnerComponent, PagedPageBase, PayPalComponent, PayPalScriptService, PaymentMethod, PaymentStage, PaymentType, PaymentsApiService, PaymentsService, PaypalButtonComponent, QSUtils, ReplaceTextPipe, SafeHtmlPipe, ScriptService, SessionStorageService, SignInButtonComponent, SignOutButtonComponent, SignUpButtonComponent, StarterGuard, StarterService, Stopwatch, StripeDialog, Subs, SubscribePlanButtonComponent, TimezoneDropdownlist, TransactionsApiService, UrlSlugComponent, Utils, ValidationSummaryComponent, XmlFormatter, dateFormats, dateTimeFormats, getAppSettingsById, getAppSettingsByName, is, localizationInitializerFactory, throwIfAlreadyLoaded, timeFormats, translateLoaderFactory };
9858
+ export { AddressComponent, AdminGuard, Alerts, AnatolyBillingModule, AnatolyCoreModule, AnatolyDataModule, AnatolyHttpInterceptor, AnatolyIAMModule, AnatolyIAMPagesModule, AnatolyModule, AnatolyUIModule, ApiServiceBase, ApiUrl, AppContextService, AppCoreSettings, AppName, AppSettings, AppVersion, AuthService, AuthenticationGuard, BaseGoService, BillingUtils, BraintreeDialog, Browser, BuyAccessButtonComponent, CardBodyComponent, CardComponent, CardFooterComponent, CardHeaderComponent, CheckIconComponent, ClientApps, CompanyComponent, ComponentBase, ContactUsDialog, ContactUsForm, Convert, Copy2ClipboardComponent, CoreApiService, CountryDropdownlist, CurrenciesApiService, CurrenciesStorageService, DOM, DataPagerComponent, DataViewType, DateConvert, DefaultEditorOptions, DialogBase, DigitalMarketingService, DiscountCodeStatus, DiscountCodeType, DiscountCodesApiService, EditComponentBase, EditPageBase, EmailsApiService, EnumEditComponentBase, FileSizePipe, FormValidationSummaryComponent, FormsHtmlEditorComponent, GABillingEvents, GAEvents, GlobalErrorHandler, GoogleAnalyticsService, GridEditServiceBase, GridReadServiceBase, Guid, HoveringDirective, HtmlEditorComponent, HtmlEditorComponentBase, IdleService, InjectorInstance, IsDevMode, IsProdMode, ItemValidationSummaryComponent, L10NUrl, L10nUtils, ListBase, LoadingComponent, LoadingService, LocalStorageService, LocalizationInjectorInstance, LocalizationModule, LocalizationService, LocalizationSettingsModule, LocalizePipe, LoggingService, MSALUtils, NativeElementDirective, NodataComponent, NotificationService, OrderSummaryComponent, PageBase, PageSpinnerComponent, PagedPageBase, PayPalComponent, PayPalScriptService, PaymentMethod, PaymentMethodsComponent, PaymentOptionsComponent, PaymentStage, PaymentType, PaymentsApiService, PaymentsService, PaypalButtonComponent, QSUtils, ReplaceTextPipe, SafeHtmlPipe, ScriptService, SessionStorageService, SignInButtonComponent, SignOutButtonComponent, SignUpButtonComponent, StarterGuard, StarterService, Stopwatch, StripeDialog, Subs, SubscribePlanButtonComponent, TimezoneDropdownlist, TransactionsApiService, UrlSlugComponent, Utils, ValidationSummaryComponent, XmlFormatter, dateFormats, dateTimeFormats, getAppSettingsById, getAppSettingsByName, is, localizationInitializerFactory, throwIfAlreadyLoaded, timeFormats, translateLoaderFactory };
9492
9859
  //# sourceMappingURL=osovitny-anatoly.mjs.map