@osovitny/anatoly 3.17.85 → 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 (25) 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/services/payments.service.mjs +2 -2
  10. package/esm2022/lib/billing/utils.mjs +2 -2
  11. package/esm2022/lib/core/consts/app-settings.mjs +2 -2
  12. package/esm2022/lib/core/consts/formats.mjs +2 -2
  13. package/esm2022/lib/core/consts/ga.mjs +2 -2
  14. package/esm2022/lib/core/consts/storageKeys.mjs +2 -2
  15. package/esm2022/lib/core/enums/billing.mjs +2 -2
  16. package/esm2022/lib/core/enums/enums.mjs +2 -2
  17. package/fesm2022/osovitny-anatoly.mjs +757 -418
  18. package/fesm2022/osovitny-anatoly.mjs.map +1 -1
  19. package/lib/billing/billing.module.d.ts +12 -8
  20. package/lib/billing/components/exports.d.ts +7 -4
  21. package/lib/billing/components/index.d.ts +2 -2
  22. package/lib/billing/components/order-summary/order-summary.component.d.ts +22 -0
  23. package/lib/billing/components/payment-methods/payment-methods.component.d.ts +20 -0
  24. package/lib/billing/components/payment-options/payment-options.component.d.ts +18 -0
  25. 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:
@@ -3987,12 +3783,675 @@ class PaymentsApiService extends ApiServiceBase {
3987
3783
  }
3988
3784
  });
3989
3785
  }
3990
- static { this.ɵfac = function PaymentsApiService_Factory(t) { return new (t || PaymentsApiService)(i0.ɵɵinject(i1$1.HttpClient)); }; }
3991
- static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: PaymentsApiService, factory: PaymentsApiService.ɵfac }); }
3786
+ static { this.ɵfac = function PaymentsApiService_Factory(t) { return new (t || PaymentsApiService)(i0.ɵɵinject(i1$1.HttpClient)); }; }
3787
+ static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: PaymentsApiService, factory: PaymentsApiService.ɵfac }); }
3788
+ }
3789
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PaymentsApiService, [{
3790
+ type: Injectable
3791
+ }], () => [{ type: i1$1.HttpClient }], null); })();
3792
+
3793
+ /*
3794
+ <file>
3795
+ Project:
3796
+ @osovitny/anatoly
3797
+
3798
+ Authors:
3799
+ Vadim Osovitny vadim.osovitny@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 }); }
3992
4441
  }
3993
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PaymentsApiService, [{
3994
- type: Injectable
3995
- }], () => [{ type: i1$1.HttpClient }], null); })();
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 }); })();
3996
4455
 
3997
4456
  /*
3998
4457
  <file>
@@ -4001,162 +4460,65 @@ class PaymentsApiService extends ApiServiceBase {
4001
4460
 
4002
4461
  Authors:
4003
4462
  Vadim Osovitny vadim.osovitny@osovitny.com
4004
- Dhruv Agarwal dhruv.agarwal@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,6 @@ class StripeDialog extends DialogBase {
4961
5323
  Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
4962
5324
  </file>
4963
5325
  */
4964
- //braintree
4965
5326
 
4966
5327
  /*
4967
5328
  <file>
@@ -4969,7 +5330,7 @@ class StripeDialog extends DialogBase {
4969
5330
  Atlas Cross
4970
5331
 
4971
5332
  Authors:
4972
- Leon Malyan leon.malyan@atlascross.io
5333
+ Leon Malyan leon.malyan@osovitny.com
4973
5334
 
4974
5335
  Created:
4975
5336
  25 May 2024
@@ -5257,37 +5618,6 @@ class CurrenciesStorageService {
5257
5618
  type: Injectable
5258
5619
  }], () => [{ type: AppContextService }, { type: CurrenciesApiService }], null); })();
5259
5620
 
5260
- /*
5261
- <file>
5262
- Project:
5263
- @osovitny/anatoly
5264
-
5265
- Authors:
5266
- Vadim Osovitny vadim.osovitny@osovitny.com
5267
-
5268
- Created:
5269
- 4 Jun 2024
5270
-
5271
- Copyright (c) 2017-2025 Osovitny Inc. All rights reserved.
5272
- </file>
5273
- */
5274
- //Node
5275
- class DiscountCodesApiService extends ApiServiceBase {
5276
- constructor(http) {
5277
- super(http);
5278
- this.http = http;
5279
- this.baseUrl = `${ApiUrl}/billing/discountCodes`;
5280
- }
5281
- getDiscountCode(code) {
5282
- return this.get('getDiscountCode', { code });
5283
- }
5284
- static { this.ɵfac = function DiscountCodesApiService_Factory(t) { return new (t || DiscountCodesApiService)(i0.ɵɵinject(i1$1.HttpClient)); }; }
5285
- static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: DiscountCodesApiService, factory: DiscountCodesApiService.ɵfac }); }
5286
- }
5287
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DiscountCodesApiService, [{
5288
- type: Injectable
5289
- }], () => [{ type: i1$1.HttpClient }], null); })();
5290
-
5291
5621
  /*
5292
5622
  <file>
5293
5623
  Project:
@@ -6638,7 +6968,7 @@ class NativeElementDirective {
6638
6968
  // sets the localization key to the control
6639
6969
  this.control.control.nativeElement = this.el.nativeElement;
6640
6970
  }
6641
- 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)); }; }
6642
6972
  static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: NativeElementDirective, selectors: [["", "formControl", ""], ["", "formControlName", ""]] }); }
6643
6973
  }
6644
6974
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NativeElementDirective, [{
@@ -6646,7 +6976,7 @@ class NativeElementDirective {
6646
6976
  args: [{
6647
6977
  selector: '[formControl], [formControlName]'
6648
6978
  }]
6649
- }], () => [{ type: i0.ElementRef }, { type: i2$1.NgControl }], null); })();
6979
+ }], () => [{ type: i0.ElementRef }, { type: i2.NgControl }], null); })();
6650
6980
 
6651
6981
  /*
6652
6982
  <file>
@@ -6919,7 +7249,7 @@ class UrlSlugComponent extends EditComponentBase {
6919
7249
  i0.ɵɵproperty("formControlName", ctx.controlName);
6920
7250
  i0.ɵɵadvance();
6921
7251
  i0.ɵɵproperty("ngIf", ctx.isGoButtonVisible);
6922
- } }, 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 }); }
6923
7253
  }
6924
7254
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(UrlSlugComponent, [{
6925
7255
  type: Component,
@@ -7013,7 +7343,7 @@ class CountryDropdownlist extends EditComponentBase {
7013
7343
  i0.ɵɵproperty("ngIf", ctx.isNgModelBased);
7014
7344
  i0.ɵɵadvance();
7015
7345
  i0.ɵɵproperty("ngIf", !ctx.isNgModelBased);
7016
- } }, 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 }); }
7017
7347
  }
7018
7348
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CountryDropdownlist, [{
7019
7349
  type: Component,
@@ -7116,7 +7446,7 @@ class TimezoneDropdownlist extends EditComponentBase {
7116
7446
  i0.ɵɵproperty("ngIf", ctx.isNgModelBased);
7117
7447
  i0.ɵɵadvance();
7118
7448
  i0.ɵɵproperty("ngIf", !ctx.isNgModelBased);
7119
- } }, 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 }); }
7120
7450
  }
7121
7451
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TimezoneDropdownlist, [{
7122
7452
  type: Component,
@@ -7491,7 +7821,7 @@ class FormsHtmlEditorComponent extends HtmlEditorComponentBase {
7491
7821
  i0.ɵɵproperty("formControlName", ctx.editorFormKey)("froalaEditor", ctx.options);
7492
7822
  i0.ɵɵadvance();
7493
7823
  i0.ɵɵproperty("formGroup", ctx.formGroup)("formSubmitted", ctx.formSubmitted)("controlName", ctx.editorFormKey);
7494
- } }, 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 }); }
7495
7825
  }
7496
7826
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FormsHtmlEditorComponent, [{
7497
7827
  type: Component,
@@ -7776,7 +8106,7 @@ class ContactUsForm extends EditComponentBase {
7776
8106
  onTopicChange(event) {
7777
8107
  this.selectedTopic = event.target.value;
7778
8108
  }
7779
- 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)); }; }
7780
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) {
7781
8111
  i0.ɵɵelementStart(0, "form", 0);
7782
8112
  i0.ɵɵlistener("ngSubmit", function ContactUsForm_Template_form_ngSubmit_0_listener() { return ctx.onSubmit(); });
@@ -7848,12 +8178,12 @@ class ContactUsForm extends EditComponentBase {
7848
8178
  i0.ɵɵproperty("formGroup", ctx.formGroup)("formSubmitted", ctx.formSubmitted);
7849
8179
  i0.ɵɵadvance(3);
7850
8180
  i0.ɵɵproperty("ngIf", ctx.showActionButtons);
7851
- } }, 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 }); }
7852
8182
  }
7853
8183
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContactUsForm, [{
7854
8184
  type: Component,
7855
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" }]
7856
- }], () => [{ 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: [{
7857
8187
  type: Input
7858
8188
  }], submit: [{
7859
8189
  type: Output
@@ -7921,7 +8251,7 @@ class ContactUsDialog extends DialogBase {
7921
8251
  i0.ɵɵtemplate(0, ContactUsDialog_kendo_dialog_0_Template, 10, 2, "kendo-dialog", 0);
7922
8252
  } if (rf & 2) {
7923
8253
  i0.ɵɵproperty("ngIf", ctx.isOpen);
7924
- } }, 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 }); }
7925
8255
  }
7926
8256
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContactUsDialog, [{
7927
8257
  type: Component,
@@ -8167,7 +8497,7 @@ class AddressComponent extends EditComponentBase {
8167
8497
  let usState = event.target.value;
8168
8498
  this.change.emit(usState);
8169
8499
  }
8170
- 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)); }; }
8171
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) {
8172
8502
  i0.ɵɵelementStart(0, "anatoly-card", 0);
8173
8503
  i0.ɵɵtemplate(1, AddressComponent_anatoly_card_header_1_Template, 1, 1, "anatoly-card-header", 1);
@@ -8228,12 +8558,12 @@ class AddressComponent extends EditComponentBase {
8228
8558
  i0.ɵɵproperty("ngForOf", ctx.countryData);
8229
8559
  i0.ɵɵadvance();
8230
8560
  i0.ɵɵproperty("formGroup", ctx.formGroup)("formSubmitted", ctx.formSubmitted);
8231
- } }, 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 }); }
8232
8562
  }
8233
8563
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AddressComponent, [{
8234
8564
  type: Component,
8235
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" }]
8236
- }], () => [{ type: i2$1.FormBuilder }, { type: CoreApiService }], { address: [{
8566
+ }], () => [{ type: i2.FormBuilder }, { type: CoreApiService }], { address: [{
8237
8567
  type: Input
8238
8568
  }], change: [{
8239
8569
  type: Output
@@ -8312,7 +8642,7 @@ class CompanyComponent extends EditComponentBase {
8312
8642
  };
8313
8643
  return JSON.stringify(data);
8314
8644
  }
8315
- 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)); }; }
8316
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) {
8317
8647
  i0.ɵɵelementStart(0, "anatoly-card", 0);
8318
8648
  i0.ɵɵtemplate(1, CompanyComponent_anatoly_card_header_1_Template, 1, 1, "anatoly-card-header", 1);
@@ -8357,12 +8687,12 @@ class CompanyComponent extends EditComponentBase {
8357
8687
  i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(20, _c0, ctx.isControlInvalid("company_websiteUrl")));
8358
8688
  i0.ɵɵadvance(4);
8359
8689
  i0.ɵɵproperty("formGroup", ctx.formGroup)("formSubmitted", ctx.formSubmitted);
8360
- } }, 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 }); }
8361
8691
  }
8362
8692
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CompanyComponent, [{
8363
8693
  type: Component,
8364
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" }]
8365
- }], () => [{ type: i2$1.FormBuilder }], { company: [{
8695
+ }], () => [{ type: i2.FormBuilder }], { company: [{
8366
8696
  type: Input
8367
8697
  }] }); })();
8368
8698
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CompanyComponent, { className: "CompanyComponent", filePath: "lib\\ui\\forms\\components\\company\\company.component.ts", lineNumber: 28 }); })();
@@ -9183,11 +9513,14 @@ class KendoModule {
9183
9513
  </file>
9184
9514
  */
9185
9515
  const COMPONENTS$1 = [
9516
+ OrderSummaryComponent,
9517
+ PaymentMethodsComponent,
9518
+ PaymentOptionsComponent,
9186
9519
  PaypalButtonComponent,
9187
9520
  PayPalComponent,
9188
9521
  //Dialogs
9189
9522
  BraintreeDialog,
9190
- StripeDialog
9523
+ StripeDialog,
9191
9524
  ];
9192
9525
 
9193
9526
  /*
@@ -9214,6 +9547,8 @@ class AnatolyBillingModule {
9214
9547
  PayPalScriptService,
9215
9548
  PaymentsService
9216
9549
  ], imports: [CommonModule,
9550
+ ReactiveFormsModule,
9551
+ FormsModule,
9217
9552
  FaModule,
9218
9553
  KendoModule] }); }
9219
9554
  }
@@ -9222,6 +9557,8 @@ class AnatolyBillingModule {
9222
9557
  args: [{
9223
9558
  imports: [
9224
9559
  CommonModule,
9560
+ ReactiveFormsModule,
9561
+ FormsModule,
9225
9562
  FaModule,
9226
9563
  KendoModule
9227
9564
  ],
@@ -9238,9 +9575,11 @@ class AnatolyBillingModule {
9238
9575
  ]
9239
9576
  }]
9240
9577
  }], null, null); })();
9241
- (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,
9242
9581
  FaModule,
9243
- KendoModule], exports: [PaypalButtonComponent, PayPalComponent, BraintreeDialog, StripeDialog] }); })();
9582
+ KendoModule], exports: [OrderSummaryComponent, PaymentMethodsComponent, PaymentOptionsComponent, PaypalButtonComponent, PayPalComponent, BraintreeDialog, StripeDialog] }); })();
9244
9583
 
9245
9584
  /*
9246
9585
  <file>
@@ -9516,5 +9855,5 @@ class AnatolyModule {
9516
9855
  * Generated bundle index. Do not edit.
9517
9856
  */
9518
9857
 
9519
- 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, 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 };
9520
9859
  //# sourceMappingURL=osovitny-anatoly.mjs.map