Elementor Addon Elements - Version 1.11.2

Version Description

  • Fixed: Sanitized options in the editor to enforce better security policies
Download this release

Release Info

Developer wpvibes
Plugin Icon 128x128 Elementor Addon Elements
Version 1.11.2
Comparing to
See all releases

Code changes from version 1.11.1 to 1.11.2

assets/css/eae.css CHANGED
@@ -840,6 +840,22 @@ body:not(.elementor-editor-active)
840
  position: absolute;
841
  z-index: 0;
842
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
843
 
844
  /**
845
  BG Slider
@@ -5133,7 +5149,7 @@ body:not(.rtl).elementor-editor-preview
5133
  line-height: 1em;
5134
  margin-top: 15px;
5135
  color: #73b9dc;
5136
- font-size : 20px;
5137
  }
5138
  .eae-overlay-icon {
5139
  line-height: 1em;
@@ -5530,94 +5546,89 @@ body.elementor-editor-preview
5530
  border-width: 0px !important;
5531
  }
5532
 
5533
-
5534
-
5535
  /*EAE-Content Switch*/
5536
- .eae-content-switcher-wrapper{
5537
  display: block;
5538
  text-align: center;
5539
  }
5540
 
5541
- .eae-cs-layout-skin1 .eae-cs-switch-wrapper{
5542
- display : inline-flex;
5543
- flex-wrap : wrap;
5544
  padding: 8px 12px;
5545
- background :#54595F;
5546
- border-radius : 50px;
5547
  }
5548
 
5549
-
5550
  /*Skin1 Head*/
5551
- .eae-cs-switch-container{
5552
  display: block;
5553
  text-align: center;
5554
  }
5555
- .eae-cs-layout-skin1 .eae-cs-label-wrapper{
5556
  display: inline-block;
5557
  overflow: hidden;
5558
-
5559
  }
5560
- .eae-cs-layout-skin1 .eae-content-switch-button{
5561
  border-radius: 50px;
5562
- padding : 8px 12px;
5563
- background-color: #7A7A7A;
5564
- color : #ffffff;
5565
  overflow: hidden;
5566
- display : block;
5567
  min-width: 150px;
5568
- position : relative;
5569
- text-align : center;
5570
- margin : 3px;
5571
  }
5572
- .eae-cs-layout-skin1 .eae-content-switch-button:before{
5573
  height: 100%;
5574
  top: 0;
5575
- left : 0;
5576
  z-index: 0;
5577
- content: '';
5578
  width: 0;
5579
  position: absolute;
5580
  right: 0;
5581
  transition: all 300ms ease-out;
5582
  }
5583
- .eae-cs-layout-skin1 .eae-content-switch-button.active:before{
5584
- width :100%;
5585
- left : 0 ;
5586
- right : auto;
5587
- background-color : #61CE70;
5588
  }
5589
- .eae-cs-layout-skin1 .eae-content-switch-label{
5590
  position: relative;
5591
  }
5592
  /*COntent Switcher Content CSS
5593
  */
5594
- .eae-cs-content-section{
5595
- display : none;
5596
  }
5597
- .eae-cs-content-section.active{
5598
  display: block;
5599
  }
5600
 
5601
- @media only screen and (max-width: 768px){
5602
  .eae-cs-switch-wrapper {
5603
  display: inline-block !important;
5604
-
5605
  }
5606
  }
5607
 
5608
  /*SKin 2*/
5609
- .eae-cs-layout-skin2 .eae-cs-switch-wrapper{
5610
  display: inline-flex;
5611
  flex-wrap: wrap;
5612
  padding: 0px;
5613
  background: none;
5614
  }
5615
- .eae-cs-layout-skin2 .eae-cs-label-wrapper{
5616
  display: inline-block;
5617
  }
5618
 
5619
- .eae-cs-layout-skin2 .eae-content-switch-button{
5620
- width : auto;
5621
  margin: 3px 8px;
5622
  padding: 10px 12px;
5623
  background-color: #e2e2e2;
@@ -5625,37 +5636,35 @@ body.elementor-editor-preview
5625
  display: block;
5626
  position: relative;
5627
  text-align: center;
5628
- border-radius : 5px;
5629
- border : 1px solid rgba(130,130,130,0.26);
5630
- color : rgba(71,71,71,0.44);
5631
  }
5632
 
5633
- .eae-cs-layout-skin2 .eae-content-switch-button.active{
5634
- box-shadow: 0px 10px 34px -9px rgba(0,0,0,0.38);
5635
- background-color : white;
5636
- color : #575757;
5637
- border-color : white;
5638
  }
5639
- h5.eae-cs-label{
5640
- margin : 0px;
5641
  }
5642
 
5643
  /*SKin 3*/
5644
- .eae-cs-layout-skin3 .eae-cs-switch-wrapper{
5645
  display: block;
5646
  justify-content: center;
5647
  align-items: center;
5648
  }
5649
- .eae-content-switch-label.primary-label{
5650
- margin-right : 30px;
5651
  }
5652
- .eae-content-switch-label.secondary-label{
5653
- margin-left : 30px;
5654
  }
5655
 
5656
-
5657
-
5658
- .eae-cs-layout-skin3 .eae-cs-switch-label{
5659
  position: relative;
5660
  display: inline-block;
5661
  width: 4.5em;
@@ -5663,35 +5672,41 @@ h5.eae-cs-label{
5663
  vertical-align: middle;
5664
  }
5665
 
5666
- .eae-cs-layout-skin3 .eae-content-switch-label{
5667
- margin : 0px;
5668
- display : inline-block;
5669
  }
5670
  .eae-cs-layout-skin3 .eae-cs-switch-button {
5671
- display : inline-block;
5672
  }
5673
- .eae-cs-layout-skin3 .eae-cs-label{
5674
- display : inline-block;
5675
  }
5676
- .eae-cs-layout-skin3 .eae-cs-switch-label input.eae-content-toggle-switch{
5677
  display: none;
5678
  }
5679
 
5680
- .eae-cs-layout-skin3 .eae-cs-switch-label input.eae-content-toggle-switch + span {
 
 
 
5681
  position: absolute;
5682
  cursor: pointer;
5683
  top: 0;
5684
  left: 0;
5685
  right: 0;
5686
  bottom: 0;
5687
- -webkit-transition: .4s;
5688
- transition: .4s;
5689
  -webkit-border-radius: 1.5em;
5690
  border-radius: 1.5em;
5691
  background: #2e394d;
5692
  border: 2px solid #2e394d;
5693
  }
5694
- .eae-cs-layout-skin3 .eae-cs-switch-label input.eae-content-toggle-switch + span:before {
 
 
 
5695
  position: absolute;
5696
  content: "";
5697
  height: 28px;
@@ -5699,127 +5714,140 @@ h5.eae-cs-label{
5699
  left: 4px;
5700
  transform: translateY(-52%);
5701
  top: 50%;
5702
- transition: .4s;
5703
- transition: .4s;
5704
  -webkit-border-radius: 50%;
5705
  border-radius: 50%;
5706
  background: #88cf8f;
5707
  border: 2px solid #88cf8f;
5708
  }
5709
- body.rtl .eae-cs-layout-skin3 .eae-cs-switch-label input.eae-content-toggle-switch + span:before{
5710
- left : unset;
5711
- right : 4px;
 
 
 
 
5712
  }
5713
 
5714
- .eae-cs-layout-skin3 .eae-cs-switch-label input:checked.eae-content-toggle-switch + span:before{
5715
- transform: translate(36px,-52%)
 
 
 
5716
  }
5717
- body.rtl .eae-cs-layout-skin3 .eae-cs-switch-label input:checked.eae-content-toggle-switch + span:before{
5718
- transform: translate(-36px,-52%)
 
 
 
 
5719
  }
5720
 
5721
-
5722
- .eae-content-switch-label.active{
5723
- color : #61CE70;
5724
  }
5725
 
5726
  /*Skin 4 Cs*/
5727
- .eae-cs-layout-skin4 .eae-cs-switch-wrapper{
5728
  display: block;
5729
  /*justify-content: center;*/
5730
  /*align-items: center;*/
5731
  }
5732
- .eae-cs-layout-skin4 .eae-content-switch-label.primary-label{
5733
- margin-right : 30px;
5734
  }
5735
- .eae-cs-layout-skin4 .eae-content-switch-label.secondary-label{
5736
- margin-left : 30px;
5737
  }
5738
 
5739
- .eae-cs-layout-skin4 .eae-content-switch-label{
5740
  display: inline-block;
5741
  }
5742
- .eae-cs-layout-skin4 .eae-cs-switch-label{
5743
  position: relative;
5744
  display: inline-block;
5745
  width: 70px;
5746
  height: 20px;
5747
  vertical-align: middle;
5748
  }
5749
- .eae-cs-layout-skin4 .eae-cs-label{
5750
- display : inline-block;
5751
  }
5752
- .eae-cs-layout-skin4 .eae-content-toggle-switch{
5753
- display : none;
5754
  }
5755
- .eae-cs-layout-skin4 .eae-content-toggle-switcher{
5756
  position: absolute;
5757
  cursor: pointer;
5758
  top: 0;
5759
  left: 0;
5760
  right: 0;
5761
  bottom: 0;
5762
- -webkit-transition: .4s;
5763
- transition: .4s;
5764
  -webkit-border-radius: 1.5em;
5765
  border-radius: 1.5em;
5766
  background: #2e394d;
5767
  border: 2px solid #2e394d;
5768
  }
5769
- .eae-cs-layout-skin4 .eae-cs-switch-button{
5770
- display : inline-block;
5771
  }
5772
- .eae-cs-layout-skin4 .eae-content-toggle-switcher:before{
5773
  position: absolute;
5774
  content: "";
5775
  height: 34px;
5776
  width: 34px;
5777
  left: -12px;
5778
- top : 50%;
5779
  transform: translateY(-50%);
5780
  border-radius: 50%;
5781
- border : 2px solid #88cf8f;
5782
  background: #88cf8f;
5783
- -webkit-transition: .4s;
5784
- transition: .4s;
5785
- -webkit-box-shadow: 3px 3px 6px 1px rgba(0,0,0,.2);
5786
- box-shadow: 3px 3px 6px 1px rgba(0,0,0,.2);
5787
  }
5788
- .eae-cs-layout-skin4 .eae-cs-switch-container{
5789
- padding : 15px 0px;
5790
  }
5791
- body.rtl .eae-cs-layout-skin4 .eae-content-toggle-switcher:before{
5792
- right : -12px !important;
5793
  }
5794
- .eae-cs-layout-skin4 input:checked + .eae-content-toggle-switcher:before{
5795
- transform : translate(55px,-50%);
5796
  }
5797
 
5798
- body.rtl .eae-cs-layout-skin4 input:checked + .eae-content-toggle-switcher:before{
5799
- transform : translate(-55px,-50%);
 
 
 
5800
  }
5801
 
5802
  /* Thumb Gallery */
5803
 
5804
- .eae-swiper-outer-wrapper{
5805
  position: relative;
5806
  }
5807
- .eae-swiper-container{
5808
  position: relative;
5809
  }
5810
- .eae-thumb-container{
5811
  position: absolute;
5812
  }
5813
 
5814
- .eae-swiper-outer-wrapper .eae-swiper-slide{
5815
  height: 400px;
5816
  background-size: cover;
5817
  background-repeat: no-repeat;
5818
- background-position: right;
5819
  }
5820
 
5821
- .eae-swiper-outer-wrapper .eae-swiper-slide .eae-slide-inner{
5822
- color: #7A7A7A;
5823
  /* color: #000000; */
5824
  display: flex;
5825
  position: absolute;
@@ -5829,24 +5857,24 @@ body.rtl .eae-cs-layout-skin4 input:checked + .eae-content-toggle-switcher:befor
5829
  right: 0;
5830
  padding: 20px;
5831
  }
5832
- .eae-slide-inner .eae-slide-content{
5833
- padding : 20px 30px;
5834
  }
5835
- .eae-slide-inner .eae-slide-heading{
5836
  font-size: 35px;
5837
  font-weight: bold;
5838
  line-height: 1;
5839
  }
5840
- .eae-slide-inner .eae-slide-text{
5841
  font-size: 17px;
5842
  line-height: 1.4;
5843
  }
5844
 
5845
- .eae-slide-inner .eae-slide-button{
5846
  display: inline-block;
5847
  }
5848
 
5849
- .eae-slide-inner .eae-slide-btn{
5850
  display: inline-block;
5851
  font-size: 15px;
5852
  padding: 12px 24px;
@@ -5855,61 +5883,62 @@ body.rtl .eae-cs-layout-skin4 input:checked + .eae-content-toggle-switcher:befor
5855
  transition: all 0.3s;
5856
  }
5857
 
5858
- .eae-slide-inner .eae-slide-heading:not(:last-child), .eae-slide-inner .eae-slide-text:not(:last-child){
 
5859
  margin-bottom: 30px;
5860
  }
5861
 
5862
- .eae--hr-position-left .eae-slide-inner{
5863
  -webkit-box-pack: start;
5864
  justify-content: flex-start;
5865
  }
5866
 
5867
- .eae--hr-position-right .eae-slide-inner{
5868
  -webkit-box-pack: end;
5869
  justify-content: flex-end;
5870
  }
5871
 
5872
- .eae--hr-position-center .eae-slide-inner{
5873
  -webkit-box-pack: center;
5874
  justify-content: center;
5875
  }
5876
 
5877
- .eae--vr-position-top .eae-slide-inner{
5878
  -webkit-box-pack: start;
5879
  align-items: flex-start;
5880
  }
5881
 
5882
- .eae--vr-position-middle .eae-slide-inner{
5883
  -webkit-box-align: center;
5884
  align-items: center;
5885
  }
5886
 
5887
- .eae--vr-position-bottom .eae-slide-inner{
5888
  -webkit-box-pack: end;
5889
  align-items: flex-end;
5890
  }
5891
 
5892
- .eae-swiper-button-prev{
5893
  left: 10px;
5894
  }
5895
- .eae-swiper-button-next{
5896
  right: 10px;
5897
  }
5898
- .eae-swiper-button{
5899
- position:absolute;
5900
  display: inline-flex;
5901
  z-index: 1;
5902
  cursor: pointer;
5903
- color:#7A7A7A;
5904
  top: 50%;
5905
  transform: translateY(-50%);
5906
  }
5907
 
5908
- .eae-swiper-pagination .swiper-pagination-bullet{
5909
  margin-bottom: 5px !important;
5910
  }
5911
 
5912
- .eae-swiper-outer-wrapper .eae-swiper-slide .eae-background-overlay{
5913
  width: 100%;
5914
  height: 100%;
5915
  /* top: 0;
@@ -5965,19 +5994,17 @@ body.rtl .eae-cs-layout-skin4 input:checked + .eae-content-toggle-switcher:befor
5965
 
5966
  /* Chart */
5967
 
5968
- .eae-chart-outer-container{
5969
  position: relative;
5970
  }
5971
- .eae-chart-overlay{
5972
  width: 100%;
5973
- height: 100%;
5974
  position: absolute;
5975
  }
5976
 
5977
-
5978
-
5979
  /* Data Table */
5980
- .eae-table{
5981
  width: 100%;
5982
  height: auto;
5983
  margin: 0;
@@ -5985,76 +6012,75 @@ body.rtl .eae-cs-layout-skin4 input:checked + .eae-content-toggle-switcher:befor
5985
  border: none;
5986
  border-collapse: collapse;
5987
  }
5988
- .eae-table tr{
5989
  border-style: none;
5990
  }
5991
- .eae-table__body_row_column{
5992
  border: none;
5993
  overflow: hidden;
5994
  }
5995
- .eae-table__head_column{
5996
- transition: all .3s ease-in-out;
5997
  }
5998
- .eae-table__body_row_column{
5999
- transition: all .3s ease-in-out;
6000
  }
6001
 
6002
  /* thead icon */
6003
- .eae-head-icon{
6004
  vertical-align: middle;
6005
  }
6006
- .eae-table__head-column-wrapper .eae-head-img{
6007
  width: 50px;
6008
  display: inline-block;
6009
  }
6010
- .eae-table__head-column-wrapper .eae-lottie-animation svg{
6011
  width: 70px !important;
6012
  line-height: 0;
6013
  }
6014
- .eae-head-icon-before{
6015
  margin-right: 5px;
6016
  }
6017
- .eae-head-icon-after{
6018
  margin-left: 5px;
6019
  }
6020
 
6021
  /* tbody icon */
6022
- .eae-table__col-inner{
6023
  display: block;
6024
  }
6025
- .eae-body-icon{
6026
  vertical-align: middle;
6027
  }
6028
- .eae-table__body-column-wrapper .eae-body-image{
6029
  width: 70px;
6030
  display: inline-block;
6031
  }
6032
- .eae-table__body-column-wrapper .eae-table-lottie-animation svg{
6033
  width: 70px !important;
6034
  line-height: 0;
6035
  }
6036
- .eae-body-icon-before{
6037
  margin-right: 5px;
6038
  }
6039
- .eae-body-icon-after{
6040
  margin-left: 5px;
6041
  }
6042
- .eae-table-body__text{
6043
  vertical-align: middle;
6044
  }
6045
 
6046
-
6047
  /* Table Search */
6048
- .eae-table .eae-table-search-hide{
6049
  display: none;
6050
  }
6051
- .eae-table-search-wrap{
6052
  padding: 0;
6053
  margin: 0;
6054
  margin-bottom: 10px;
6055
  }
6056
 
6057
- .eae-search-wrap{
6058
  padding: 0;
6059
  margin: 0;
6060
  width: 50%;
@@ -6065,7 +6091,7 @@ body.rtl .eae-cs-layout-skin4 input:checked + .eae-content-toggle-switcher:befor
6065
  align-items: center;
6066
  }
6067
 
6068
- .eae-table-search-wrap .eae-table-search-field{
6069
  margin: 0;
6070
  padding: 0;
6071
  border: 0;
@@ -6073,27 +6099,27 @@ body.rtl .eae-cs-layout-skin4 input:checked + .eae-content-toggle-switcher:befor
6073
  background-color: #eceeef;
6074
  width: 100%;
6075
  font-size: 15px;
6076
- color: #7A7A7A;
6077
  padding: 10px;
6078
- line-height: 0;
6079
  display: inline-block;
6080
  box-sizing: border-box;
6081
  }
6082
 
6083
- .eae-table-search-wrap .eae-table-search-field:focus{
6084
  background-color: #eceeef;
6085
  }
6086
- ::placeholder{
6087
  opacity: 0.5;
6088
  }
6089
- .eae-search-wrap .eae-search-icon{
6090
  background-color: #eceeef;
6091
  padding: 0;
6092
  margin: 0;
6093
  padding: 10px;
6094
  }
6095
- .eae-search-wrap .eae-search-icon i{
6096
- color: #7A7A7A73;
6097
  display: flex;
6098
  align-items: center;
6099
  left: 0px;
@@ -6101,50 +6127,59 @@ body.rtl .eae-cs-layout-skin4 input:checked + .eae-content-toggle-switcher:befor
6101
  }
6102
 
6103
  /* Sorting icon */
6104
- .eae-table__sortable .eae-table__sortable-head{
6105
  cursor: pointer;
6106
  }
6107
 
6108
- .eae-table__head__wrapper{
6109
  display: flex;
6110
  justify-content: center;
6111
  align-items: center;
6112
  }
6113
 
6114
- .eae-sort-icon{
6115
  padding: 0;
6116
  margin: 0;
6117
  align-self: center;
6118
  }
6119
- .eae-table__head-column-wrapper{
6120
  flex-grow: 3;
6121
  display: inline-block;
6122
  width: 100%;
6123
  }
6124
- .eae-icon-sort-icon{
6125
  vertical-align: middle;
6126
  display: inline-block;
6127
  }
6128
- .eae-icon{
6129
  padding: 0;
6130
  margin: 0;
6131
  }
6132
- .eae-table__head__wrapper .eae-sort-icon .eae-icon{
6133
  font-size: 25px;
6134
- }
6135
 
6136
  .eae-table__sortable .eae-table__head__wrapper .eae-sort-icon-down,
6137
- .eae-table__sortable .eae-table__head__wrapper .eae-sort-icon-up{
6138
  display: none;
6139
  }
6140
- .eae-table__sortable .eae-table__sort-Desc .eae-table__head__wrapper .eae-icon-sort-icon,
6141
- .eae-table__sortable .eae-table__sort-Asc .eae-table__head__wrapper .eae-icon-sort-icon{
 
 
 
 
 
 
6142
  display: none;
6143
  }
6144
- .eae-table__sortable .eae-table__sort-Desc .eae-table__head__wrapper .eae-sort-icon-down,
6145
- .eae-table__sortable .eae-table__sort-Asc .eae-table__head__wrapper .eae-sort-icon-up{
 
 
 
 
 
 
6146
  display: block;
6147
  }
6148
-
6149
-
6150
-
840
  position: absolute;
841
  z-index: 0;
842
  }
843
+ body:not(.elementor-editor-active)
844
+ .eae-particle-wrapper
845
+ .tsparticles-canvas-el {
846
+ height: 100%;
847
+ position: absolute !important;
848
+ z-index: 0 !important;
849
+ }
850
+ body.elementor-editor-active .eae-particle-areas .tsparticles-canvas-el {
851
+ z-index: 0 !important;
852
+ height: 100%;
853
+ width: 100%;
854
+ position: absolute !important;
855
+ }
856
+ /* body.elementor-editor-active .eae-particle-areas {
857
+
858
+ } */
859
 
860
  /**
861
  BG Slider
5149
  line-height: 1em;
5150
  margin-top: 15px;
5151
  color: #73b9dc;
5152
+ font-size: 20px;
5153
  }
5154
  .eae-overlay-icon {
5155
  line-height: 1em;
5546
  border-width: 0px !important;
5547
  }
5548
 
 
 
5549
  /*EAE-Content Switch*/
5550
+ .eae-content-switcher-wrapper {
5551
  display: block;
5552
  text-align: center;
5553
  }
5554
 
5555
+ .eae-cs-layout-skin1 .eae-cs-switch-wrapper {
5556
+ display: inline-flex;
5557
+ flex-wrap: wrap;
5558
  padding: 8px 12px;
5559
+ background: #54595f;
5560
+ border-radius: 50px;
5561
  }
5562
 
 
5563
  /*Skin1 Head*/
5564
+ .eae-cs-switch-container {
5565
  display: block;
5566
  text-align: center;
5567
  }
5568
+ .eae-cs-layout-skin1 .eae-cs-label-wrapper {
5569
  display: inline-block;
5570
  overflow: hidden;
 
5571
  }
5572
+ .eae-cs-layout-skin1 .eae-content-switch-button {
5573
  border-radius: 50px;
5574
+ padding: 8px 12px;
5575
+ background-color: #7a7a7a;
5576
+ color: #ffffff;
5577
  overflow: hidden;
5578
+ display: block;
5579
  min-width: 150px;
5580
+ position: relative;
5581
+ text-align: center;
5582
+ margin: 3px;
5583
  }
5584
+ .eae-cs-layout-skin1 .eae-content-switch-button:before {
5585
  height: 100%;
5586
  top: 0;
5587
+ left: 0;
5588
  z-index: 0;
5589
+ content: "";
5590
  width: 0;
5591
  position: absolute;
5592
  right: 0;
5593
  transition: all 300ms ease-out;
5594
  }
5595
+ .eae-cs-layout-skin1 .eae-content-switch-button.active:before {
5596
+ width: 100%;
5597
+ left: 0;
5598
+ right: auto;
5599
+ background-color: #61ce70;
5600
  }
5601
+ .eae-cs-layout-skin1 .eae-content-switch-label {
5602
  position: relative;
5603
  }
5604
  /*COntent Switcher Content CSS
5605
  */
5606
+ .eae-cs-content-section {
5607
+ display: none;
5608
  }
5609
+ .eae-cs-content-section.active {
5610
  display: block;
5611
  }
5612
 
5613
+ @media only screen and (max-width: 768px) {
5614
  .eae-cs-switch-wrapper {
5615
  display: inline-block !important;
 
5616
  }
5617
  }
5618
 
5619
  /*SKin 2*/
5620
+ .eae-cs-layout-skin2 .eae-cs-switch-wrapper {
5621
  display: inline-flex;
5622
  flex-wrap: wrap;
5623
  padding: 0px;
5624
  background: none;
5625
  }
5626
+ .eae-cs-layout-skin2 .eae-cs-label-wrapper {
5627
  display: inline-block;
5628
  }
5629
 
5630
+ .eae-cs-layout-skin2 .eae-content-switch-button {
5631
+ width: auto;
5632
  margin: 3px 8px;
5633
  padding: 10px 12px;
5634
  background-color: #e2e2e2;
5636
  display: block;
5637
  position: relative;
5638
  text-align: center;
5639
+ border-radius: 5px;
5640
+ border: 1px solid rgba(130, 130, 130, 0.26);
5641
+ color: rgba(71, 71, 71, 0.44);
5642
  }
5643
 
5644
+ .eae-cs-layout-skin2 .eae-content-switch-button.active {
5645
+ box-shadow: 0px 10px 34px -9px rgba(0, 0, 0, 0.38);
5646
+ background-color: white;
5647
+ color: #575757;
5648
+ border-color: white;
5649
  }
5650
+ h5.eae-cs-label {
5651
+ margin: 0px;
5652
  }
5653
 
5654
  /*SKin 3*/
5655
+ .eae-cs-layout-skin3 .eae-cs-switch-wrapper {
5656
  display: block;
5657
  justify-content: center;
5658
  align-items: center;
5659
  }
5660
+ .eae-content-switch-label.primary-label {
5661
+ margin-right: 30px;
5662
  }
5663
+ .eae-content-switch-label.secondary-label {
5664
+ margin-left: 30px;
5665
  }
5666
 
5667
+ .eae-cs-layout-skin3 .eae-cs-switch-label {
 
 
5668
  position: relative;
5669
  display: inline-block;
5670
  width: 4.5em;
5672
  vertical-align: middle;
5673
  }
5674
 
5675
+ .eae-cs-layout-skin3 .eae-content-switch-label {
5676
+ margin: 0px;
5677
+ display: inline-block;
5678
  }
5679
  .eae-cs-layout-skin3 .eae-cs-switch-button {
5680
+ display: inline-block;
5681
  }
5682
+ .eae-cs-layout-skin3 .eae-cs-label {
5683
+ display: inline-block;
5684
  }
5685
+ .eae-cs-layout-skin3 .eae-cs-switch-label input.eae-content-toggle-switch {
5686
  display: none;
5687
  }
5688
 
5689
+ .eae-cs-layout-skin3
5690
+ .eae-cs-switch-label
5691
+ input.eae-content-toggle-switch
5692
+ + span {
5693
  position: absolute;
5694
  cursor: pointer;
5695
  top: 0;
5696
  left: 0;
5697
  right: 0;
5698
  bottom: 0;
5699
+ -webkit-transition: 0.4s;
5700
+ transition: 0.4s;
5701
  -webkit-border-radius: 1.5em;
5702
  border-radius: 1.5em;
5703
  background: #2e394d;
5704
  border: 2px solid #2e394d;
5705
  }
5706
+ .eae-cs-layout-skin3
5707
+ .eae-cs-switch-label
5708
+ input.eae-content-toggle-switch
5709
+ + span:before {
5710
  position: absolute;
5711
  content: "";
5712
  height: 28px;
5714
  left: 4px;
5715
  transform: translateY(-52%);
5716
  top: 50%;
5717
+ transition: 0.4s;
5718
+ transition: 0.4s;
5719
  -webkit-border-radius: 50%;
5720
  border-radius: 50%;
5721
  background: #88cf8f;
5722
  border: 2px solid #88cf8f;
5723
  }
5724
+ body.rtl
5725
+ .eae-cs-layout-skin3
5726
+ .eae-cs-switch-label
5727
+ input.eae-content-toggle-switch
5728
+ + span:before {
5729
+ left: unset;
5730
+ right: 4px;
5731
  }
5732
 
5733
+ .eae-cs-layout-skin3
5734
+ .eae-cs-switch-label
5735
+ input:checked.eae-content-toggle-switch
5736
+ + span:before {
5737
+ transform: translate(36px, -52%);
5738
  }
5739
+ body.rtl
5740
+ .eae-cs-layout-skin3
5741
+ .eae-cs-switch-label
5742
+ input:checked.eae-content-toggle-switch
5743
+ + span:before {
5744
+ transform: translate(-36px, -52%);
5745
  }
5746
 
5747
+ .eae-content-switch-label.active {
5748
+ color: #61ce70;
 
5749
  }
5750
 
5751
  /*Skin 4 Cs*/
5752
+ .eae-cs-layout-skin4 .eae-cs-switch-wrapper {
5753
  display: block;
5754
  /*justify-content: center;*/
5755
  /*align-items: center;*/
5756
  }
5757
+ .eae-cs-layout-skin4 .eae-content-switch-label.primary-label {
5758
+ margin-right: 30px;
5759
  }
5760
+ .eae-cs-layout-skin4 .eae-content-switch-label.secondary-label {
5761
+ margin-left: 30px;
5762
  }
5763
 
5764
+ .eae-cs-layout-skin4 .eae-content-switch-label {
5765
  display: inline-block;
5766
  }
5767
+ .eae-cs-layout-skin4 .eae-cs-switch-label {
5768
  position: relative;
5769
  display: inline-block;
5770
  width: 70px;
5771
  height: 20px;
5772
  vertical-align: middle;
5773
  }
5774
+ .eae-cs-layout-skin4 .eae-cs-label {
5775
+ display: inline-block;
5776
  }
5777
+ .eae-cs-layout-skin4 .eae-content-toggle-switch {
5778
+ display: none;
5779
  }
5780
+ .eae-cs-layout-skin4 .eae-content-toggle-switcher {
5781
  position: absolute;
5782
  cursor: pointer;
5783
  top: 0;
5784
  left: 0;
5785
  right: 0;
5786
  bottom: 0;
5787
+ -webkit-transition: 0.4s;
5788
+ transition: 0.4s;
5789
  -webkit-border-radius: 1.5em;
5790
  border-radius: 1.5em;
5791
  background: #2e394d;
5792
  border: 2px solid #2e394d;
5793
  }
5794
+ .eae-cs-layout-skin4 .eae-cs-switch-button {
5795
+ display: inline-block;
5796
  }
5797
+ .eae-cs-layout-skin4 .eae-content-toggle-switcher:before {
5798
  position: absolute;
5799
  content: "";
5800
  height: 34px;
5801
  width: 34px;
5802
  left: -12px;
5803
+ top: 50%;
5804
  transform: translateY(-50%);
5805
  border-radius: 50%;
5806
+ border: 2px solid #88cf8f;
5807
  background: #88cf8f;
5808
+ -webkit-transition: 0.4s;
5809
+ transition: 0.4s;
5810
+ -webkit-box-shadow: 3px 3px 6px 1px rgba(0, 0, 0, 0.2);
5811
+ box-shadow: 3px 3px 6px 1px rgba(0, 0, 0, 0.2);
5812
  }
5813
+ .eae-cs-layout-skin4 .eae-cs-switch-container {
5814
+ padding: 15px 0px;
5815
  }
5816
+ body.rtl .eae-cs-layout-skin4 .eae-content-toggle-switcher:before {
5817
+ right: -12px !important;
5818
  }
5819
+ .eae-cs-layout-skin4 input:checked + .eae-content-toggle-switcher:before {
5820
+ transform: translate(55px, -50%);
5821
  }
5822
 
5823
+ body.rtl
5824
+ .eae-cs-layout-skin4
5825
+ input:checked
5826
+ + .eae-content-toggle-switcher:before {
5827
+ transform: translate(-55px, -50%);
5828
  }
5829
 
5830
  /* Thumb Gallery */
5831
 
5832
+ .eae-swiper-outer-wrapper {
5833
  position: relative;
5834
  }
5835
+ .eae-swiper-container {
5836
  position: relative;
5837
  }
5838
+ .eae-thumb-container {
5839
  position: absolute;
5840
  }
5841
 
5842
+ .eae-swiper-outer-wrapper .eae-swiper-slide {
5843
  height: 400px;
5844
  background-size: cover;
5845
  background-repeat: no-repeat;
5846
+ background-position: right;
5847
  }
5848
 
5849
+ .eae-swiper-outer-wrapper .eae-swiper-slide .eae-slide-inner {
5850
+ color: #7a7a7a;
5851
  /* color: #000000; */
5852
  display: flex;
5853
  position: absolute;
5857
  right: 0;
5858
  padding: 20px;
5859
  }
5860
+ .eae-slide-inner .eae-slide-content {
5861
+ padding: 20px 30px;
5862
  }
5863
+ .eae-slide-inner .eae-slide-heading {
5864
  font-size: 35px;
5865
  font-weight: bold;
5866
  line-height: 1;
5867
  }
5868
+ .eae-slide-inner .eae-slide-text {
5869
  font-size: 17px;
5870
  line-height: 1.4;
5871
  }
5872
 
5873
+ .eae-slide-inner .eae-slide-button {
5874
  display: inline-block;
5875
  }
5876
 
5877
+ .eae-slide-inner .eae-slide-btn {
5878
  display: inline-block;
5879
  font-size: 15px;
5880
  padding: 12px 24px;
5883
  transition: all 0.3s;
5884
  }
5885
 
5886
+ .eae-slide-inner .eae-slide-heading:not(:last-child),
5887
+ .eae-slide-inner .eae-slide-text:not(:last-child) {
5888
  margin-bottom: 30px;
5889
  }
5890
 
5891
+ .eae--hr-position-left .eae-slide-inner {
5892
  -webkit-box-pack: start;
5893
  justify-content: flex-start;
5894
  }
5895
 
5896
+ .eae--hr-position-right .eae-slide-inner {
5897
  -webkit-box-pack: end;
5898
  justify-content: flex-end;
5899
  }
5900
 
5901
+ .eae--hr-position-center .eae-slide-inner {
5902
  -webkit-box-pack: center;
5903
  justify-content: center;
5904
  }
5905
 
5906
+ .eae--vr-position-top .eae-slide-inner {
5907
  -webkit-box-pack: start;
5908
  align-items: flex-start;
5909
  }
5910
 
5911
+ .eae--vr-position-middle .eae-slide-inner {
5912
  -webkit-box-align: center;
5913
  align-items: center;
5914
  }
5915
 
5916
+ .eae--vr-position-bottom .eae-slide-inner {
5917
  -webkit-box-pack: end;
5918
  align-items: flex-end;
5919
  }
5920
 
5921
+ .eae-swiper-button-prev {
5922
  left: 10px;
5923
  }
5924
+ .eae-swiper-button-next {
5925
  right: 10px;
5926
  }
5927
+ .eae-swiper-button {
5928
+ position: absolute;
5929
  display: inline-flex;
5930
  z-index: 1;
5931
  cursor: pointer;
5932
+ color: #7a7a7a;
5933
  top: 50%;
5934
  transform: translateY(-50%);
5935
  }
5936
 
5937
+ .swiper-pagination-bullet {
5938
  margin-bottom: 5px !important;
5939
  }
5940
 
5941
+ .eae-swiper-outer-wrapper .eae-swiper-slide .eae-background-overlay {
5942
  width: 100%;
5943
  height: 100%;
5944
  /* top: 0;
5994
 
5995
  /* Chart */
5996
 
5997
+ .eae-chart-outer-container {
5998
  position: relative;
5999
  }
6000
+ .eae-chart-overlay {
6001
  width: 100%;
6002
+ height: 100%;
6003
  position: absolute;
6004
  }
6005
 
 
 
6006
  /* Data Table */
6007
+ .eae-table {
6008
  width: 100%;
6009
  height: auto;
6010
  margin: 0;
6012
  border: none;
6013
  border-collapse: collapse;
6014
  }
6015
+ .eae-table tr {
6016
  border-style: none;
6017
  }
6018
+ .eae-table__body_row_column {
6019
  border: none;
6020
  overflow: hidden;
6021
  }
6022
+ .eae-table__head_column {
6023
+ transition: all 0.3s ease-in-out;
6024
  }
6025
+ .eae-table__body_row_column {
6026
+ transition: all 0.3s ease-in-out;
6027
  }
6028
 
6029
  /* thead icon */
6030
+ .eae-head-icon {
6031
  vertical-align: middle;
6032
  }
6033
+ .eae-table__head-column-wrapper .eae-head-img {
6034
  width: 50px;
6035
  display: inline-block;
6036
  }
6037
+ .eae-table__head-column-wrapper .eae-lottie-animation svg {
6038
  width: 70px !important;
6039
  line-height: 0;
6040
  }
6041
+ .eae-head-icon-before {
6042
  margin-right: 5px;
6043
  }
6044
+ .eae-head-icon-after {
6045
  margin-left: 5px;
6046
  }
6047
 
6048
  /* tbody icon */
6049
+ .eae-table__col-inner {
6050
  display: block;
6051
  }
6052
+ .eae-body-icon {
6053
  vertical-align: middle;
6054
  }
6055
+ .eae-table__body-column-wrapper .eae-body-image {
6056
  width: 70px;
6057
  display: inline-block;
6058
  }
6059
+ .eae-table__body-column-wrapper .eae-table-lottie-animation svg {
6060
  width: 70px !important;
6061
  line-height: 0;
6062
  }
6063
+ .eae-body-icon-before {
6064
  margin-right: 5px;
6065
  }
6066
+ .eae-body-icon-after {
6067
  margin-left: 5px;
6068
  }
6069
+ .eae-table-body__text {
6070
  vertical-align: middle;
6071
  }
6072
 
 
6073
  /* Table Search */
6074
+ .eae-table .eae-table-search-hide {
6075
  display: none;
6076
  }
6077
+ .eae-table-search-wrap {
6078
  padding: 0;
6079
  margin: 0;
6080
  margin-bottom: 10px;
6081
  }
6082
 
6083
+ .eae-search-wrap {
6084
  padding: 0;
6085
  margin: 0;
6086
  width: 50%;
6091
  align-items: center;
6092
  }
6093
 
6094
+ .eae-table-search-wrap .eae-table-search-field {
6095
  margin: 0;
6096
  padding: 0;
6097
  border: 0;
6099
  background-color: #eceeef;
6100
  width: 100%;
6101
  font-size: 15px;
6102
+ color: #7a7a7a;
6103
  padding: 10px;
6104
+ line-height: 0;
6105
  display: inline-block;
6106
  box-sizing: border-box;
6107
  }
6108
 
6109
+ .eae-table-search-wrap .eae-table-search-field:focus {
6110
  background-color: #eceeef;
6111
  }
6112
+ ::placeholder {
6113
  opacity: 0.5;
6114
  }
6115
+ .search-icon {
6116
  background-color: #eceeef;
6117
  padding: 0;
6118
  margin: 0;
6119
  padding: 10px;
6120
  }
6121
+ .search-icon i {
6122
+ color: #7a7a7a73;
6123
  display: flex;
6124
  align-items: center;
6125
  left: 0px;
6127
  }
6128
 
6129
  /* Sorting icon */
6130
+ .eae-table__sortable .eae-table__sortable-head {
6131
  cursor: pointer;
6132
  }
6133
 
6134
+ .eae-table__head__wrapper {
6135
  display: flex;
6136
  justify-content: center;
6137
  align-items: center;
6138
  }
6139
 
6140
+ .eae-sort-icon {
6141
  padding: 0;
6142
  margin: 0;
6143
  align-self: center;
6144
  }
6145
+ .eae-table__head-column-wrapper {
6146
  flex-grow: 3;
6147
  display: inline-block;
6148
  width: 100%;
6149
  }
6150
+ .eae-icon-sort-icon {
6151
  vertical-align: middle;
6152
  display: inline-block;
6153
  }
6154
+ .eae-icon {
6155
  padding: 0;
6156
  margin: 0;
6157
  }
6158
+ .eae-table__head__wrapper .eae-sort-icon .eae-icon {
6159
  font-size: 25px;
6160
+ }
6161
 
6162
  .eae-table__sortable .eae-table__head__wrapper .eae-sort-icon-down,
6163
+ .eae-table__sortable .eae-table__head__wrapper .eae-sort-icon-up {
6164
  display: none;
6165
  }
6166
+ .eae-table__sortable
6167
+ .eae-table__sort-Desc
6168
+ .eae-table__head__wrapper
6169
+ .eae-icon-sort-icon,
6170
+ .eae-table__sortable
6171
+ .eae-table__sort-Asc
6172
+ .eae-table__head__wrapper
6173
+ .eae-icon-sort-icon {
6174
  display: none;
6175
  }
6176
+ .eae-table__sortable
6177
+ .eae-table__sort-Desc
6178
+ .eae-table__head__wrapper
6179
+ .eae-sort-icon-down,
6180
+ .eae-table__sortable
6181
+ .eae-table__sort-Asc
6182
+ .eae-table__head__wrapper
6183
+ .eae-sort-icon-up {
6184
  display: block;
6185
  }
 
 
 
assets/css/eae.min.css CHANGED
@@ -1 +1 @@
1
- .elementor-widget-wts-textseparator .elementor-widget-container{overflow:hidden}.wts-eae-textseparator{align-items:center;display:flex;flex-flow:row nowrap;margin:auto}body.rtl .wts-eae-textseparator{flex-direction:row-reverse}.eae-separator-icon-inner i{height:1em;width:1em;text-align:center;position:relative;display:block}.eae-separator-icon-inner i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);-ms-transform:translateX(-50%);-o-transform:translateX(-50%);transform:translateX(-50%)}.wts-eae-textseparator .eae-sep-holder{flex:1 1 auto;height:1px;min-width:10%;position:relative}.wts-eae-textseparator .eae-sep-holder .eae-sep-lines{border-top-width:1px;display:block;height:1px;position:relative;top:1px;width:100%}.eae-separator-title{margin:0;-moz-box-flex:0;flex:0 1 auto;line-height:1em;margin:0;overflow-wrap:break-word}.sep-align-right .sep-right{display:none}.sep-align-left .sep-left{display:none}.eae-icon-view-stacked i{color:#fff}.eae-icon-view-framed .eae-separator-icon-inner{border:1px solid}.eae-icon-shape-circle .eae-separator-icon-inner{border-radius:50%}.eae-separator-icon-wrapper,.eae-separator-title{margin:0 5px!important}.eae-separator-icon-inner{line-height:1}.wts-price-box-wrapper .eae-pt-heading,.wts-price-box-wrapper .eae-pt-sub-heading{margin:5px 0;text-align:center}.plan-price-shape{display:table;height:6em;margin:auto;width:6em}.eae-pt-price-box-shape-circle .plan-price-shape,.eae-pt-price-box-shape-square .plan-price-shape{border:1px solid}.eae-pt-price-box-shape-circle .plan-price-shape{border-radius:50%}.plan-price-block{padding:10px 0}.plan-price-shape-inner{display:table-cell;vertical-align:middle;padding:10px}.plan-price-shape-inner>span{display:block;font-size:1em;text-align:center}.eae-pt-feature-list{list-style:outside none none;text-align:center;margin:10px 0}.eae-pt-button-wrapper>a{text-align:center;display:inline-block;line-height:1}.eae-pt-button-wrapper{text-align:center}.wts-price-box-wrapper .heading-wrapper,.wts-price-box-wrapper .plan-features-wrapper{padding:10px 5px}.eae-pt-button-wrapper{padding:15px 0}.eae-pt-button-wrapper a{padding:5px 15px;border-radius:3px}.eae-pt-align-icon-right{float:right}.strike-feature{text-decoration:line-through}.eae-flip-box{width:100%;text-align:center}.eae-flip-box-wrapper{display:inline-block;width:100%}.eae-flip-box-inner{width:100%;height:200px;position:relative;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transform-style:preserve-3d}.eae-flip-box-inner .eae-flip-box-back,.eae-flip-box-inner .eae-flip-box-front{width:100%;height:100%;position:absolute;top:0;left:0;text-align:center;padding:10px;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:all .6s ease 0s;-moz-transition:all .6s ease 0s;-ms-transition:all .6s ease 0s;-o-transition:all .6s ease 0s;transition:all .6s ease 0s}.eae-flip-box-front{z-index:2}.eae-flip-box-back{z-index:1}.eae-fb-animate-vertical .eae-flip-box-inner .eae-flip-box-front{-webkit-transform:perspective(1000px) rotateX(0);-ms-transform:perspective(1000px) rotateX(0);transform:perspective(1000px) rotateX(0)}.eae-fb-animate-vertical .eae-flip-box-inner .eae-flip-box-back{-webkit-transform:perspective(1000px) rotateX(180deg);transform:perspective(1000px) rotateX(180deg);-ms-transform:perspective(1000px) rotateX(180deg)}.eae-fb-animate-vertical .eae-flip-box-inner:hover .eae-flip-box-front{-webkit-transform:perspective(1000px) rotateX(180deg);transform:perspective(1000px) rotateX(180deg);-ms-transform:perspective(1000px) rotateX(180deg)}.eae-fb-animate-vertical .eae-flip-box-inner:hover .eae-flip-box-back{-webkit-transform:perspective(1000px) rotateX(0);transform:perspective(1000px) rotateX(0);-ms-transform:perspective(1000px) rotateX(0)}.eae-fb-animate-horizontal .eae-flip-box-inner .eae-flip-box-front{-webkit-transform:perspective(1000px) rotateY(0);transform:perspective(1000px) rotateY(0);-ms-transform:perspective(1000px) rotateY(0)}.eae-fb-animate-horizontal .eae-flip-box-inner .eae-flip-box-back{-webkit-transform:perspective(1000px) rotateY(180deg);transform:perspective(1000px) rotateY(180deg);-ms-transform:perspective(1000px) rotateY(180deg)}.eae-fb-animate-horizontal .eae-flip-box-inner:hover .eae-flip-box-front{-webkit-transform:perspective(1000px) rotateY(180deg);transform:perspective(1000px) rotateY(180deg);-ms-transform:perspective(1000px) rotateY(180deg)}.eae-fb-animate-horizontal .eae-flip-box-inner:hover .eae-flip-box-back{-webkit-transform:perspective(1000px) rotateY(0);transform:perspective(1000px) rotateY(0);-ms-transform:perspective(1000px) rotateY(0)}.eae-fb-animate-fade .eae-flip-box-inner .eae-flip-box-front{opacity:1}.eae-fb-animate-fade .eae-flip-box-inner .eae-flip-box-back{opacity:0}.eae-fb-animate-fade .eae-flip-box-inner:hover .eae-flip-box-front{opacity:0}.eae-fb-animate-fade .eae-flip-box-inner:hover .eae-flip-box-back{opacity:1}.eae-flip-box-wrapper:focus .eae-flip-box-back,.eae-flip-box-wrapper:hover .eae-flip-box-back{z-index:2}.eae-flip-box-wrapper:focus .eae-flip-box-front,.eae-flip-box-wrapper:hover .eae-flip-box-front{z-index:1}.fade .eae-flip-box-wrapper .eae-flip-box-front{opacity:1;transition:1s}.fade .eae-flip-box-wrapper .eae-flip-box-back{opacity:0;transition:1s}.fade .eae-flip-box-wrapper:focus .eae-flip-box-front,.fade .eae-flip-box-wrapper:hover .eae-flip-box-front{opacity:0}.fade .eae-flip-box-wrapper:focus .eae-flip-box-back,.fade .eae-flip-box-wrapper:hover .eae-flip-box-back{opacity:1}.eae-fb-animate-flip .eae-flip-box-wrapper{perspective:800px}.eae-fb-animate-flip .eae-flip-box-inner{transform-style:preserve-3d;transform:rotateX(0) rotateY(0) rotateZ(0);transition:1s}.eae-fb-animate-flip .eae-flip-box-front{transform:translate3d(0,0,1px)}.eae-fb-animate-flip .eae-flip-box-back{transform:rotateY(180deg) translate3d(0,0,0)}.eae-fb-animate-flip .eae-flip-box-wrapper:focus .eae-flip-box-inner,.eae-fb-animate-flip .eae-flip-box-wrapper:hover .eae-flip-box-inner{transform:rotateY(180deg)}.up .eae-flip-box-front{transform:translate3d(0,0,1px)}.up .eae-flip-box-back{transform:rotateX(180deg) translate3d(0,0,0)}.up .eae-flip-box-wrapper:focus .eae-flip-box-inner,.up .eae-flip-box-wrapper:hover .eae-flip-box-inner{transform:rotateX(180deg)}.box .eae-flip-box-front{transform:translate3d(0,0,100px) scale(.85,.85)}.box .eae-flip-box-back{transform:rotateY(180deg) translate3d(0,0,100px) scale(.85,.85)}.box.up .eae-flip-box-back{transform:rotateX(180deg) translate3d(0,0,100px) scale(.85,.85)}.hideback .eae-flip-box-back,.hideback .eae-flip-box-front{backface-visibility:hidden}.eae-fb-animate-nananana .eae-flip-box-wrapper:focus .eae-flip-box-front,.eae-fb-animate-nananana .eae-flip-box-wrapper:hover .eae-flip-box-front{z-index:10;animation:batman 1s 2 alternate linear}.eae-fb-animate-flipcard .eae-flip-box-back,.eae-fb-animate-flipcard .eae-flip-box-front{transition:transform .4s ease;transform-origin:center center -150px;-webkit-transform-origin:center center -150px}.flipcard-rotate-top-down .eae-flip-box-front{transform:perspective(0) rotateX(0) rotateY(0) rotateZ(0)}.flipcard-rotate-top-down .eae-flip-box-back{transform:perspective(0) rotateX(90deg) rotateY(0) rotateZ(0)}.eae-fb-animate-flipcard.flipcard-rotate-top-down .eae-flip-box-wrapper:hover .eae-flip-box-front{transform:perspective(0) rotateX(-90deg) rotateY(0) rotateZ(0)}.eae-fb-animate-flipcard.flipcard-rotate-top-down .eae-flip-box-wrapper:hover .eae-flip-box-back{z-index:99999;transform:perspective(0) rotateX(0) rotateY(0) rotateZ(0)}.flipcard-rotate-down-top .eae-flip-box-front{transform:perspective(0) rotateX(0) rotateY(0) rotateZ(0)}.flipcard-rotate-down-top .eae-flip-box-back{transform:perspective(0) rotateX(-90deg) rotateY(0) rotateZ(0)}.eae-fb-animate-flipcard.flipcard-rotate-down-top .eae-flip-box-wrapper:hover .eae-flip-box-front{transform:perspective(0) rotateX(90deg) rotateY(0) rotateZ(0)}.eae-fb-animate-flipcard.flipcard-rotate-down-top .eae-flip-box-wrapper:hover .eae-flip-box-back{z-index:99999;transform:perspective(0) rotateX(0) rotateY(0) rotateZ(0)}.flipcard-rotate-left-right .eae-flip-box-front{transform:perspective(0) rotateX(0) rotateY(0) rotateZ(0)}.flipcard-rotate-left-right .eae-flip-box-back{transform:perspective(0) rotateX(0) rotateY(-90deg) rotateZ(0)}.eae-fb-animate-flipcard.flipcard-rotate-left-right .eae-flip-box-wrapper:hover .eae-flip-box-front{transform:perspective(0) rotateX(0) rotateY(90deg) rotateZ(0)}.eae-fb-animate-flipcard.flipcard-rotate-left-right .eae-flip-box-wrapper:hover .eae-flip-box-back{z-index:99999;transform:perspective(0) rotateX(0) rotateY(0) rotateZ(0)}.flipcard-rotate-right-left .eae-flip-box-front{transform:perspective(0) rotateX(0) rotateY(0) rotateZ(0)}.flipcard-rotate-right-left .eae-flip-box-back{transform:perspective(0) rotateX(0) rotateY(90deg) rotateZ(0)}.eae-fb-animate-flipcard.flipcard-rotate-right-left .eae-flip-box-wrapper:hover .eae-flip-box-front{transform:perspective(0) rotateX(0) rotateY(-90deg) rotateZ(0)}.eae-fb-animate-flipcard.flipcard-rotate-right-left .eae-flip-box-wrapper:hover .eae-flip-box-back{z-index:99999;transform:perspective(0) rotateX(0) rotateY(0) rotateZ(0)}@keyframes batman{0%{transform:scale(1,1) rotateZ(0)}100%{transform:scale(0,0) rotateZ(720deg);opacity:0}}.eae-flip-box-back i,.eae-flip-box-front i{font-size:32px;height:1em;width:1em;position:relative;display:block}.eae-flip-box-back i:before,.eae-flip-box-front i:before{position:absolute;left:50%;-webkit-transform:translate(-50%);-moz-transform:translate(-50%);-ms-transform:translate(-50%);-o-transform:translate(-50%);transform:translate(-50%)}.eae-fb-icon-view-framed{border:1px solid #92be43}.eae-fb-icon-shape-circle{border-radius:50%}.eae-flip-box-wrapper .icon-wrapper{display:inline-block;padding:10px;line-height:1}.eae-flip-box-wrapper .back-icon-title,.eae-flip-box-wrapper .front-icon-title{margin:10px auto;color:#fff}.eae-flip-box-wrapper .flipbox-content{display:block;position:relative;top:50%;transform:translateY(-50%);-ms-transform:translateY(-50%)}.flipbox-content p{margin-bottom:10px}.eae-fb-button{display:inline-block;padding:5px 10px}.eae-flip-box-front{background:#a0ce4e}.eae-flip-box-back{background:#73b9dc}@media only screen and (max-width:768px){.eae-flip-box-back,.eae-flip-box-front,.flipbox-content{cursor:pointer;overflow:visible!important;transform-style:preserve-3d;-webkit-transform-style:preserve-3d}}.elementor-widget-wts-shape-separator svg{display:block}.wts-eae-pl-wrapper ul{margin:0}.wts-eae-pl-wrapper ul li{list-style:none;overflow:hidden;margin-bottom:10px}.eae-pl-img-align-none .eae-pl-image-wrapper a{text-align:center}.eae-pl-title{margin:0}.eae-pl-title a{display:block}.eae-pl-readmore a{display:inline-block;border-radius:2px;color:#fff;padding:4px 8px}.eae-at-animation-text-wrapper{display:inline-block;position:relative;text-align:left}.eae-at-animation-text-wrapper .eae-at-animation-text{display:inline-block;position:absolute;white-space:nowrap;left:0;top:0}[data-elementor-device-mode=mobile] .eae-at-animation-text{white-space:normal}.eae-at-animation-text-wrapper .eae-at-animation-text.is-visible{position:relative}.no-js .eae-at-animation-text-wrapper .eae-at-animation-text{opacity:0}.no-js .eae-at-animation-text-wrapper .eae-at-animation-text.is-visible{opacity:1}.eae-animtext-wrapper{font-size:40px}.eae-st-rest-text{display:inline-block}.eae-st-split-text{display:inline-block}body.rtl .eae-st-transform-text-title{display:flex;flex-direction:row-reverse}body.rtl .eae-text-align-left .eae-st-transform-text-title{justify-content:flex-start}body.rtl .eae-text-align-right .eae-st-transform-text-title{justify-content:flex-end}body.rtl .eae-text-align-center .eae-st-transform-text-title{justify-content:center}.eae-at-animation.type .eae-at-animation-text-wrapper{vertical-align:bottom;overflow:hidden}.eae-at-animation.type .eae-at-animation-text-wrapper::after{content:"";position:absolute;right:0;top:50%;bottom:auto;-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);height:90%;width:1px}.eae-at-animation.type .eae-at-animation-text-wrapper.waiting::after{-webkit-animation:cd-pulse 1s infinite;-moz-animation:cd-pulse 1s infinite;animation:cd-pulse 1s infinite}.eae-at-animation.type .eae-at-animation-text-wrapper.selected::after{visibility:hidden}.eae-at-animation.type .eae-at-animation-text{visibility:hidden}.eae-at-animation.type .eae-at-animation-text.is-visible{visibility:visible}.eae-at-animation.type i{position:absolute;visibility:hidden}.eae-at-animation.type i.in{position:relative;visibility:visible}@-webkit-keyframes cd-pulse{0%{-webkit-transform:translateY(-50%) scale(1);opacity:1}40%{-webkit-transform:translateY(-50%) scale(.9);opacity:0}100%{-webkit-transform:translateY(-50%) scale(0);opacity:0}}@-moz-keyframes cd-pulse{0%{-moz-transform:translateY(-50%) scale(1);opacity:1}40%{-moz-transform:translateY(-50%) scale(.9);opacity:0}100%{-moz-transform:translateY(-50%) scale(0);opacity:0}}@keyframes cd-pulse{0%{-webkit-transform:translateY(-50%) scale(1);-moz-transform:translateY(-50%) scale(1);-ms-transform:translateY(-50%) scale(1);-o-transform:translateY(-50%) scale(1);transform:translateY(-50%) scale(1);opacity:1}40%{-webkit-transform:translateY(-50%) scale(.9);-moz-transform:translateY(-50%) scale(.9);-ms-transform:translateY(-50%) scale(.9);-o-transform:translateY(-50%) scale(.9);transform:translateY(-50%) scale(.9);opacity:0}100%{-webkit-transform:translateY(-50%) scale(0);-moz-transform:translateY(-50%) scale(0);-ms-transform:translateY(-50%) scale(0);-o-transform:translateY(-50%) scale(0);transform:translateY(-50%) scale(0);opacity:0}}.eae-img-comp-container{width:100%;position:relative;text-align:center}.eae-img-comp-container img{vertical-align:middle}.eae-img-comp-img{position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden;transform:translateZ(0);backface-visibility:hidden}.eae-img-comp-img img{display:block;max-width:100%;width:100%}.eae-img-comp-slider{position:absolute;z-index:9;width:40px;height:40px;background-color:#2196f3;opacity:1;border-radius:50%}.icon-horizontal{cursor:ew-resize}.icon-vertical{cursor:n-resize}.mode-horizontal .eae-img-comp-overlay img{position:absolute;left:0;top:0;display:block;width:auto;height:100%!important;max-width:none!important}.mode-vertical .eae-img-comp-overlay img{position:absolute;left:0;top:0;display:block;width:100%;height:auto!important;max-width:none!important}.eae-img-comp-slider svg,.eae-slider-icon{top:50%;transform:translateY(-50%) translateX(-50%);position:absolute;left:50%;color:#fff}.elementor-widget-wts-ab-image{text-align:center}.elementor-widget-wts-ab-image .elementor-widget-container{display:inline-block;margin:0 auto!important;overflow:hidden}.eae-text-before{position:absolute!important;padding:10px;transition:transform .3s .7s,opacity .3s .7s;color:#d36118;z-index:0;background:rgba(255,255,255,.5);margin:20px}.eae-text-after{position:absolute!important;padding:10px;transition:transform .3s .7s,opacity .3s .7s;color:#d36118;z-index:0;background:rgba(255,255,255,.5);margin:20px}.divTest{display:inline-block;background-color:#00a0d2;padding:20px}.eae-particle-wrapper{position:absolute;left:0;top:0}.eae-particle-wrapper.eae-particle-area{width:100%;height:100%}body:not(.elementor-editor-active) .eae-particle-wrapper{width:100%;height:100%}body:not(.elementor-editor-active) .eae-particle-wrapper .particles-js-canvas-el{height:100%;position:absolute;z-index:0}.eae-section-bs{position:absolute;width:100%;height:100%;top:0}.eae-section-bs-inner{width:100%;height:100%!important}.eae-popup.mfp-bg{top:0;left:0;width:100%;height:100%;z-index:1042;overflow:hidden;position:fixed;background:#0b0b0b;opacity:.8}.eae-popup-link{padding:12px 24px;color:#fff;display:inline-flex;line-height:1}.eae-popup-link svg{fill:#fff}.eae-popup-link:hover{color:#fff}.eae-popup.mfp-wrap{top:0;left:0;width:100%;height:100%;z-index:1043;position:fixed;outline:0!important;-webkit-backface-visibility:hidden}.eae-popup .mfp-container{text-align:center;position:absolute;width:100%;height:100%;left:0;top:0;padding:0 8px;box-sizing:border-box}.eae-popup .mfp-container:before{content:"";display:inline-block;height:100%;vertical-align:middle}.eae-popup .mfp-align-top .mfp-container:before{display:none}.eae-popup .mfp-content{position:relative;display:inline-block;vertical-align:middle;margin:0 auto;text-align:left;z-index:1045}.eae-modal-content{padding:20px}.eae-pop-btn-align-left .eae-popup-wrapper{text-align:left}.eae-pop-btn-align-right .eae-popup-wrapper{text-align:right}.eae-pop-btn-align-center .eae-popup-wrapper{text-align:center}.eae-pop-btn-align-justify .eae-popup-wrapper{text-align:center}.eae-pop-btn-align-justify .eae-popup-wrapper a{display:block}.eae-popup .mfp-ajax-holder .mfp-content,.eae-popup .mfp-inline-holder .mfp-content{width:50%;background-color:#fff;cursor:auto;overflow:hidden}.eae-popup .mfp-ajax-cur{cursor:progress}.eae-popup .mfp-zoom-out-cur,.eae-popup .mfp-zoom-out-cur .mfp-image-holder .eae-close{cursor:-moz-zoom-out;cursor:-webkit-zoom-out;cursor:zoom-out}.eae-popup .mfp-zoom{cursor:pointer;cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in}.eae-popup.mfp-auto-cursor .mfp-content{cursor:auto}.eae-popup .eae-close,.eae-popup .mfp-arrow,.eae-popup .mfp-counter,.eae-popup .mfp-preloader{-webkit-user-select:none;-moz-user-select:none;user-select:none}.mfp-loading.mfp-figure{display:none}.mfp-hide{display:none!important}.eae-popup .mfp-preloader{color:#ccc;position:absolute;top:50%;width:auto;text-align:center;margin-top:-.8em;left:8px;right:8px;z-index:1044}.eae-popup .mfp-preloader a{color:#ccc}.eae-popup .mfp-preloader a:hover{color:#fff}.mfp-s-ready .mfp-preloader{display:none}.mfp-s-error .mfp-content{display:none}button.eae-close,button.mfp-arrow{overflow:visible;cursor:pointer;background:0 0;border:0;-webkit-appearance:none;display:block;outline:0;padding:0;z-index:1046;box-shadow:none;touch-action:manipulation}button::-moz-focus-inner{padding:0;border:0}.eae-popup .eae-close{width:28px;height:28px;line-height:1em;position:absolute;right:10px;top:10px;text-decoration:none;text-align:center;opacity:1;color:#fff;font-size:28px;z-index:1500}.eae-close:focus,.eae-close:hover{opacity:1;cursor:pointer}.eae-close:active{top:1px}.eae-close:before{top:50%;left:50%;position:absolute;transform:translate(-50%,-50%)}.eae-popup.eae-close-btn-in .eae-close{color:#fff}.mfp-iframe-holder .eae-close,.mfp-image-holder .eae-close{color:#fff;right:-6px;text-align:right;padding-right:6px;width:100%}.mfp-counter{position:absolute;top:0;right:0;color:#ccc;font-size:12px;line-height:18px;white-space:nowrap}.mfp-arrow{position:absolute;opacity:.65;margin:0;top:50%;margin-top:-55px;padding:0;width:90px;height:110px;-webkit-tap-highlight-color:transparent}.mfp-arrow:active{margin-top:-54px}.mfp-arrow:focus,.mfp-arrow:hover{opacity:1}.mfp-arrow:after,.mfp-arrow:before{content:"";display:block;width:0;height:0;position:absolute;left:0;top:0;margin-top:35px;margin-left:35px;border:medium inset transparent}.mfp-arrow:after{border-top-width:13px;border-bottom-width:13px;top:8px}.mfp-arrow:before{border-top-width:21px;border-bottom-width:21px;opacity:.7}.mfp-arrow-left{left:0}.mfp-arrow-left:after{border-right:17px solid #fff;margin-left:31px}.mfp-arrow-left:before{margin-left:25px;border-right:27px solid #3f3f3f}.mfp-arrow-right{right:0}.mfp-arrow-right:after{border-left:17px solid #fff;margin-left:39px}.mfp-arrow-right:before{border-left:27px solid #3f3f3f}.mfp-iframe-holder{padding-top:40px;padding-bottom:40px}.mfp-iframe-holder .mfp-content{line-height:0;width:100%;max-width:900px}.mfp-iframe-holder .eae-close{top:-40px}.mfp-iframe-scaler{width:100%;height:0;overflow:hidden;padding-top:56.25%}.mfp-iframe-scaler iframe{position:absolute;display:block;top:0;left:0;width:100%;height:100%;box-shadow:0 0 8px rgba(0,0,0,.6);background:#000}img.mfp-img{width:auto;max-width:100%;height:auto;display:block;line-height:0;box-sizing:border-box;padding:40px 0 40px;margin:0 auto}.eae-popup .mfp-figure{line-height:0}.eae-popup .mfp-figure:after{content:"";position:absolute;left:0;top:40px;bottom:40px;display:block;right:0;width:auto;height:auto;z-index:-1;box-shadow:0 0 8px rgba(0,0,0,.6);background:#444}.eae-popup .mfp-figure small{color:#bdbdbd;display:block;font-size:12px;line-height:14px}.eae-popup .mfp-figure figure{margin:0}.eae-popup .mfp-bottom-bar{margin-top:-36px;position:absolute;top:100%;left:0;width:100%;cursor:auto}.eae-popup .mfp-title{text-align:left;line-height:1;word-wrap:break-word;color:#fff;background-color:#4054b2;padding:20px 20px 20px 20px}.eae-popup .mfp-image-holder .mfp-content{max-width:100%}.eae-popup .mfp-gallery .mfp-image-holder .mfp-figure{cursor:pointer}@media screen and (max-width:800px) and (orientation:landscape),screen and (max-height:300px){.mfp-img-mobile .mfp-image-holder{padding-left:0;padding-right:0}.mfp-img-mobile img.mfp-img{padding:0}.mfp-img-mobile .mfp-figure:after{top:0;bottom:0}.mfp-img-mobile .mfp-figure small{display:inline;margin-left:5px}.mfp-img-mobile .mfp-bottom-bar{background:rgba(0,0,0,.6);bottom:0;margin:0;top:auto;padding:3px 5px;position:fixed;box-sizing:border-box}.mfp-img-mobile .mfp-bottom-bar:empty{padding:0}.mfp-img-mobile .mfp-counter{right:5px;top:3px}.mfp-img-mobile .eae-close{top:0;right:0;width:35px;height:35px;line-height:35px;background:rgba(0,0,0,.6);position:fixed;text-align:center;padding:0}}.elementor-element.eae-animated-gradient-yes,.elementor-element.eae-animated-gradient-yes .animated-gradient{background-size:400% 400%!important;-webkit-animation:AnimateGradient 15s ease-in-out infinite;-moz-animation:AnimateGradient 15s ease-in-out infinite;animation:AnimateGradient 15s ease-in-out infinite}.animated-gradient{position:absolute;top:0;left:0;height:100%;width:100%}@-webkit-keyframes AnimateGradient{0%{background-position:0 50%}50%{background-position:100% 50%}100%{background-position:0 50%}}@-moz-keyframes AnimateGradient{0%{background-position:0 50%}50%{background-position:100% 50%}100%{background-position:0 50%}}@keyframes AnimateGradient{0%{background-position:0 50%}50%{background-position:100% 50%}100%{background-position:0 50%}}.eae-swiper-outer-wrapper .swiper-slide{height:auto;overflow:inherit}.eae-swiper-outer-wrapper .swiper-slide-wrapper,.eae-swiper-outer-wrapper .testimonial-wrapper{height:100%}.eae-grid{display:flex;flex-wrap:wrap;flex-direction:row}.eae-masonry- .eae-grid-item{position:relative;height:100%}.eae-masonry- .eae-grid-item .testimonial-wrapper{height:100%}.eae-grid-container{transition:.1s all ease}.eae-grid-container{display:inline-block}.wrapper .content{margin:10px 0}.skin-2.testimonial-wrapper{display:flex;flex-direction:column;background-color:#9c989821;min-height:300px;padding:10px 20px;box-shadow:0 0 5px rgba(0,0,0,.15);color:#696969}.skin-2 .content-wrapper{padding:10px;position:relative;background-color:#fff;border-radius:10px;color:#77778e}.skin-2 i.after-content,.skin-2 i.before-content{position:absolute}.skin-2 i.before-content{top:10px;left:20px}.skin-2 i.after-content{bottom:10px;right:20px}.skin-2 blockquote{position:relative;font-size:14px;padding:10px;font-weight:500;text-align:left;margin:0;line-height:1.6em;font-style:italic}.skin-2 blockquote::after,.skin-2 blockquote::before{font-family:FontAwesome;content:"\201C";position:absolute;font-size:50px;opacity:.3;font-style:normal}.skin-2 blockquote::before{top:10px;left:20px}.skin-2 blockquote::after{content:"\201D";right:20px}.skin-2 .image-wrapper{position:relative;max-width:100%;text-align:center}.skin-2 img{width:100px;border-radius:25%}.skin-2 .detail-wrapper{text-align:center}.skin-2 .company,.skin-2 .designation,.skin-2 .rating-wrapper,.skin-2 .title{padding:5px 0}.skin-2 .rating-wrapper{color:navy}.skin-2 .title{font-weight:800;color:#000}.skin-2 blockquote p{margin:10px 0!important}.skin-1.testimonial-wrapper{display:flex;flex-direction:column;background-color:#fff;box-shadow:0 0 5px rgba(0,0,0,.15);color:#000}.skin-1 .content-wrapper{order:0}.skin-1 .image-wrapper{order:1;text-align:center;margin:15px 0}.skin-1 .detail-wrapper{order:2}.skin-1 .content-wrapper{padding:10px;position:relative}.skin-1 i.after-content,.skin-1 i.before-content{position:absolute}.skin-1 i.before-content{top:10px;left:20px}.skin-1 i.after-content{bottom:10px;right:20px}.skin-1 blockquote{position:relative;background-color:#fff;font-size:14px;padding:10px;font-weight:500;text-align:left;margin:0;line-height:1.6em;font-style:italic}.skin-1 blockquote::after,.skin-1 blockquote::before{font-family:FontAwesome;content:"\201C";position:absolute;font-size:50px;opacity:.3;font-style:normal}.skin-1 blockquote::before{top:10px;left:20px}.skin-1 blockquote::after{content:"\201D";right:20px}.skin-1 .image-wrapper{position:relative;max-width:100%}.skin-1 img{width:100px;height:auto;border-radius:50%}.skin-1 .detail-wrapper{display:flex;flex-direction:row-reverse;justify-content:space-between;padding:10px;background-color:rgba(157,163,156,.18)}.skin-1 .designation,.skin-1 .rating-wrapper,.skin-1 .title{margin:0 5px}.skin-1 .title-wrapper{display:flex;flex-direction:row}.skin-1 .rating-wrapper{color:#fecc1f}.skin-4.testimonial-wrapper{flex-direction:column;display:flex;background-color:#bfbfb6bd;min-height:300px;padding:10px 0;box-shadow:0 0 5px rgba(0,0,0,.15);color:#77778e}.skin-4 .content-wrapper{padding:10px;position:relative}.skin-4 .content-wrapper{order:2;color:#3c3c3c}.skin-4 i.after-content,.skin-4 i.before-content{position:absolute}.skin-4 i.before-content{top:10px;left:20px}.skin-4 i.after-content{bottom:10px;right:20px}.skin-4 blockquote{position:relative;font-size:14px;padding:10px;font-weight:500;text-align:left;margin:0;line-height:1.6em;font-style:italic}.skin-4 blockquote::after,.skin-4 blockquote::before{font-family:FontAwesome;content:"\201C";position:absolute;font-size:50px;opacity:.3;font-style:normal}.skin-4 blockquote::before{top:10px;left:20px}.skin-4 blockquote::after{content:"\201D";right:20px}.skin-4 .image-wrapper{position:relative;max-width:100%;text-align:center}.skin-4 img{width:100px;border-radius:50%}.skin-4 .detail-wrapper{text-align:center}.skin-2 .designation,.skin-2 .title,.skin-4 .rating-wrapper{padding:5px 0}.skin-4 .rating-wrapper{color:#690a69}.skin-4 .title{font-weight:800;color:#000}.skin-3.testimonial-wrapper{display:flex;flex-direction:row;background-color:#9c989821;box-shadow:0 0 5px rgba(0,0,0,.15);color:#000;overflow:hidden}.skin-3 .content-section{display:flex;flex-direction:column;align-self:center}.skin-3 .content-wrapper{padding:10px;position:relative}.skin-2 i.after-content,.skin-3 i.before-content{position:absolute}.skin-3 i.before-content{top:10px;left:20px}.skin-3 i.after-content{bottom:10px;right:20px}.skin-3 blockquote{position:relative;font-size:18px;padding:10px;font-weight:500;text-align:left;margin:0;line-height:1.6em;font-style:italic}.skin-3 blockquote::after,.skin-3 blockquote::before{font-family:FontAwesome;content:"\201C";position:absolute;font-size:50px;opacity:.3;font-style:normal}.skin-3 blockquote::before{top:10px;left:20px}.skin-3 blockquote::after{content:"\201D";right:20px}.skin-3 .image-wrapper{position:relative;max-width:30%;max-height:250px;text-align:center;align-self:center}.skin-3 img{width:100%}.testimonial-wrapper .skin-3 .eae-person-avatar{border-radius:50%}.skin-3 .detail-wrapper{text-align:left;padding-left:20px}.skin-3 .designation,.skin-3 .rating-wrapper,.skin-3 .title{padding:3px 0}.skin-3 .rating-wrapper{color:#800040}.skin-3 .title{font-weight:800}.eae-swiper-outer-wrapper .swiper-button-prev{-webkit-mask:url(arrow-left.svg) no-repeat 100% 100%;mask:url(arrow-left.svg) no-repeat 100% 100%;-webkit-mask-size:cover;mask-size:cover;background-image:none;background-color:#007aff;transform:translateY(-50%);margin-top:0}.eae-swiper-outer-wrapper .swiper-container-rtl .swiper-button-prev{-webkit-mask:url(arrow-right.svg) no-repeat 100% 100%;mask:url(arrow-right.svg) no-repeat 100% 100%}.eae-swiper-outer-wrapper .swiper-button-next{-webkit-mask:url(arrow-right.svg) no-repeat 100% 100%;mask:url(arrow-right.svg) no-repeat 100% 100%;-webkit-mask-size:cover;mask-size:cover;background-image:none;background-color:#007aff;transform:translateY(-50%);margin-top:0}.eae-swiper-outer-wrapper .swiper-container-rtl .swiper-button-next{-webkit-mask:url(arrow-left.svg) no-repeat 100% 100%;mask:url(arrow-left.svg) no-repeat 100% 100%}.elementor-widget-wts-testimonial-slider .eae-swiper-outer-wrapper .swiper-button-next,.elementor-widget-wts-testimonial-slider .eae-swiper-outer-wrapper .swiper-button-prev{-webkit-mask:none;mask:none;-webkit-mask-size:unset;mask-size:unset;background-image:none;background-color:unset;width:auto;height:auto;transform:translateY(-50%);margin-top:0}.swiper-container .swiper-button-next i,.swiper-container .swiper-button-prev i{width:1em;height:1em;text-align:center;position:relative}.elementor-widget-wts-testimonial-slider .eae-swiper-outer-wrapper .eae-swiper-button-wrapper{position:absolute;height:auto;line-height:0}.eae-hpos-right.eae-vpos-top .eae-swiper-button-wrapper{bottom:auto;top:0;width:auto;right:0}.eae-vpos-top.eae-hpos-left .eae-swiper-button-wrapper{bottom:auto;top:0;width:auto;left:0}.eeae-hpos-right.eae-vpos-bottom .eae-swiper-button-wrapper{bottom:0;top:auto;width:auto;right:0}.eae-vpos-bottom.eae-hpos-left .eae-swiper-button-wrapper{bottom:0;top:auto;width:auto;left:0}.eae-hpos-right.eae-vpos-middle .eae-swiper-button-wrapper{bottom:auto;top:50%;width:auto;right:0}.eae-hpos-left.eae-vpos-middle .eae-swiper-button-wrapper{bottom:auto;top:50%;width:auto;left:0}.eae-hpos-left .swiper-button-next,.eae-hpos-left .swiper-button-prev,.eae-hpos-right .swiper-button-next,.eae-hpos-right .swiper-button-prev{position:relative;display:inline-block;right:auto;left:auto}.eae-hpos-right.eae-vpos-bottom .swiper-button-next,.eae-hpos-right.eae-vpos-bottom .swiper-button-prev{top:auto;bottom:0;transform:unset}.eae-hpos-right.eae-vpos-top .swiper-button-next,.eae-hpos-right.eae-vpos-top .swiper-button-prev{top:0;bottom:auto;transform:unset}.eae-hpos-left.eae-vpos-top .swiper-button-next,.eae-hpos-left.eae-vpos-top .swiper-button-prev{top:0;bottom:auto;transform:unset}.eae-hpos-left.eae-vpos-bottom .swiper-button-next,.eae-hpos-left.eae-vpos-bottom .swiper-button-prev{top:auto;bottom:0;transform:unset}.eae-hpos-center.eae-vpos-bottom .swiper-button-next,.eae-hpos-center.eae-vpos-bottom .swiper-button-prev{top:auto;bottom:0;transform:unset}.eae-hpos-center.eae-vpos-top .swiper-button-next,.eae-hpos-center.eae-vpos-top .swiper-button-prev{top:0;bottom:auto;transform:unset}@media all and (max-width:900px){.mfp-arrow{-webkit-transform:scale(.75);transform:scale(.75)}.mfp-arrow-left{-webkit-transform-origin:0;transform-origin:0}.mfp-arrow-right{-webkit-transform-origin:100%;transform-origin:100%}.mfp-container{padding-left:6px;padding-right:6px}}.eae-info-circle{position:relative;width:90%;margin:0 auto;border-radius:50%;display:block}.eae-info-circle:before{content:"";display:block;position:absolute;top:4%;left:4%;width:92%;height:92%;border-radius:50%;z-index:1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;pointer-events:none}.eae-info-circle:after{content:"";display:block;padding-top:100%}.eae-info-circle .eae-ic-icon-wrap{position:absolute;display:inline-block;top:50%;left:50%;z-index:2;line-height:1em;vertical-align:middle;overflow:hidden;max-width:100%}.eae-info-circle .eae-info-circle-item{top:0;left:0;width:100%;height:100%;display:block}.eae-info-circle .eae-info-circle-item.eae-active .eae-info-circle-item__content-wrap{visibility:visible;opacity:1;display:flex}.eae-info-circle .eae-info-circle-item__content-wrap{visibility:visible;display:none;height:91%;width:91%;opacity:0;top:50%;transform:translateY(-50%) translateX(-50%);position:absolute;left:50%;border-radius:50%;overflow:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.eae-info-circle .eae-info-circle-item__content-wrap:before{content:"";display:inline-block;height:100%;vertical-align:middle}.eae-info-circle .eae-info-circle-item__content{display:inline-block;top:50%;transform:translateY(-50%) translateX(-50%);position:absolute;left:50%;vertical-align:middle;z-index:1;max-height:100%;overflow:auto;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;text-align:center;width:75%}@media screen and (max-width:767px){.eae-info-circle.eae-info-circle .eae-info-circle-item__content-wrap:before{display:none}.eae-info-circle:after,.eae-info-circle:before{display:none}.eae-info-circle{width:100%!important}.eae-info-circle-wrapper:after,.eae-info-circle-wrapper:before{display:none}.eae-info-circle .eae-ic-icon-wrap{display:block;text-align:center;position:relative!important;left:unset!important;margin-left:0!important;margin-top:0!important;margin-bottom:10px}.eae-info-circle-item{position:relative!important;border-radius:0!important;padding:0;margin:10px 0}.eae-info-circle .eae-info-circle-item__content-wrap{visibility:visible;opacity:1!important;display:flex!important;border-radius:0!important;border:none!important;margin:0!important;padding-right:0!important;padding-left:0!important;padding-bottom:0!important;width:100%;height:auto;line-height:1.5em;position:relative;top:unset;left:unset;transform:unset}.eae-info-circle .eae-info-circle-item__content{position:relative;top:unset;left:unset;transform:unset;width:100%;padding:10px}}.eae-icon-wrap i{height:1.25em;width:1.25em;line-height:1.25em;display:block}.eae-icon-wrap i img{top:50%;left:50%;transform:translateX(-50%) translateY(-50%);position:absolute}.eae-icon{display:inline-block;text-align:center;vertical-align:middle;max-width:100%;overflow:hidden;padding:10px}.eae-icon-shape-circle:not(.elementor-element){border-radius:50%}.eae-icon-view-framed:not(.elementor-element){border-width:1px;border-style:solid}.eae-icon-wrapper{display:flex}.eae-icon-wrapper .eae-icon{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);line-height:1}.eae-timeline{position:relative;display:inline-block;width:100%}.eae-timline-progress-bar{width:4px;background-color:#f45b69;top:0;bottom:50px;position:absolute;transform:translateX(-50%)}.eae-timeline-item{position:relative;display:flex;flex-direction:row;padding-bottom:50px}.eae-timeline-item:last-child{padding-bottom:0!important}.eae-tl-top .eae-timeline-item{align-items:flex-start}.eae-tl-top .eae-tl-item-content::before{top:10px}.eae-timeline-item.image-position-row .eae-tl-item-image,.eae-timeline-item.image-position-row-reverse .eae-tl-item-image{margin-top:0;margin-bottom:0}.eae-tl-item-meta-wrapper-inner{display:none}.eae-tl-bottom .eae-timeline-item{align-items:flex-end}.eae-tl-bottom .eae-tl-item-content::before{bottom:10px}.eae-tl-center .eae-timeline-item{align-items:center}.eae-tl-center .eae-tl-item-content::before{bottom:calc(50% - 5px)}.eae-layout-center .eae-timline-progress-bar{left:50%}.eae-layout-center .eae-timeline-item:nth-child(odd){flex-direction:row-reverse}.eae-layout-center .eae-timeline-item:nth-child(odd) .eae-tl-item-meta-wrapper{margin-right:0;margin-left:0;justify-content:flex-start}body.rtl[data-elementor-device-mode=tablet] .eae-layout-center .eae-timeline-item:nth-child(even) .eae-tl-content-wrapper,body:not(.rtl)[data-elementor-device-mode=tablet] .eae-layout-center .eae-timeline-item:nth-child(odd) .eae-tl-content-wrapper{padding-right:20px;padding-left:0}body.rtl[data-elementor-device-mode=tablet] .eae-layout-center .eae-timeline-item:nth-child(odd) .eae-tl-content-wrapper,body:not(.rtl)[data-elementor-device-mode=tablet] .eae-layout-center .eae-timeline-item:nth-child(even) .eae-tl-content-wrapper{padding-right:0;padding-left:20px}body:not(.rtl) .eae-layout-left .eae-tl-content-wrapper{padding-right:10px;padding-left:20px}body.rtl .eae-layout-left .eae-tl-content-wrapper{padding-right:20px;padding-left:10px}.eae-layout-left .eae-timline-progress-bar{display:none}.eae-layout-left .eae-tl-item-meta-wrapper{display:none}.eae-layout-left .eae-tl-item-meta-wrapper-inner{display:block}.eae-layout-right .eae-timline-progress-bar{display:none}body:not(.rtl) .eae-layout-right .eae-tl-content-wrapper{padding-right:20px;padding-left:10px}body.rtl .eae-layout-right .eae-tl-content-wrapper{padding-right:10px;padding-left:20px}.eae-layout-right .eae-tl-icon-wrapper{order:3}.eae-layout-right .eae-tl-item-meta-wrapper{display:none}.eae-layout-right .eae-tl-item-meta-wrapper-inner{display:block}.eae-tl-item-meta-wrapper{flex-grow:1;order:0;flex-basis:50%;flex-direction:initial;justify-content:flex-end;display:flex;align-items:center;margin-right:0}.eae-tl-item-meta{padding:0 20px}.eae-tl-icon-wrapper{height:auto;width:auto;flex-grow:0;flex-shrink:0;order:1;margin-left:0;margin-right:0;min-width:10px;min-height:10px;border-radius:999px;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.eae-tl-content-wrapper{flex-grow:1;order:2;flex-basis:50%;position:relative;padding-right:0;padding-left:20px}.eae-tl-item-content{background:#f4f4f4;padding:25px;overflow:hidden;text-align:center;display:flex;flex-direction:row}.eae-tl-content{display:inline-block;position:relative;padding:10px;width:100%;color:#000}.eae-timeline-item.custom-image-style-yes.image-position-row .eae-content-inner,.eae-timeline-item.custom-image-style-yes.image-position-row-reverse .eae-content-inner,.image-position-row .eae-timeline .eae-timeline-item:not(.custom-image-style-yes) .eae-content-inner,.image-position-row-reverse .eae-timeline .eae-timeline-item:not(.custom-image-style-yes) .eae-content-inner{position:relative;left:50%;top:50%;transform:translate(-50%,-50%);line-height:1;width:100%}.custom-image-style-.image-position-row .eae-content-inner,.custom-image-style-.image-position-row-reverse .eae-content-inner,.custom-image-style-no.image-position-row .eae-content-inner,.custom-image-style-no.image-position-row-reverse .eae-content-inner{left:unset;top:unset;transform:unset}.eae-tl-item-image{display:inline-block}.image-position-row .eae-tl-item-image img,.image-position-row-reverse .eae-tl-item-image img{object-fit:cover;height:100%!important}.image-position-row .eae-tl-item-image,.image-position-row-reverse .eae-tl-item-image{margin:0}.image-position-column .eae-tl-item-image{margin:auto}.custom-image-style-.image-position-column .eae-tl-item-image,.custom-image-style-no.image-position-column .eae-tl-item-image{margin:0 auto}.eae-pb-inner-line{width:100%;background-color:#3d5ac3}.eae-tl-item-content::before{content:"";position:absolute;width:0;height:0;border-style:solid;border-width:8px 16px 8px 0;border-color:transparent #f4f4f4 transparent transparent}.eae-icon-wrapper{display:flex}.elementor-widget-bpel-timeline .eae-icon-wrapper{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);line-height:1}.eae-tl-read-more{display:inline-block;padding:5px;border:2px solid #000}.image-position-row .eae-timeline.eae-timeline-alternate-yes .eae-timeline-item:nth-child(odd):not(.custom-image-style-yes) .eae-tl-item-content{flex-direction:row-reverse!important}.image-position-row-reverse .eae-timeline.eae-timeline-alternate-yes .eae-timeline-item:nth-child(odd):not(.custom-image-style-yes) .eae-tl-item-content{flex-direction:row!important}@media screen and (min-width:1024px){.eae-layout-center .eae-timeline-item:nth-child(odd) .eae-tl-content-wrapper,body.rtl .eae-layout-center .eae-timeline-item:nth-child(even) .eae-tl-content-wrapper{padding-right:20px;padding-left:0}.eae-layout-center .eae-timeline-item:nth-child(even) .eae-tl-content-wrapper,body.rtl .eae-layout-center .eae-timeline-item:nth-child(odd) .eae-tl-content-wrapper{padding-right:0;padding-left:20px}.eae-layout-center .eae-timeline-item:nth-child(odd) .eae-tl-item-content::before,.eae-layout-right .eae-tl-item-content::before,body.rtl .eae-layout-center .eae-timeline-item:nth-child(even) .eae-tl-item-content::before,body.rtl .eae-layout-left .eae-tl-item-content::before{right:4px;left:unset;border-width:8px 0 8px 16px;border-color:transparent transparent transparent #f4f4f4}.eae-layout-center .eae-timeline-item:nth-child(even) .eae-tl-item-content::before,.eae-layout-left .eae-tl-item-content::before,body.rtl .eae-layout-center .eae-timeline-item:nth-child(odd) .eae-tl-item-content::before,body.rtl .eae-layout-right .eae-tl-item-content::before{left:4px;right:unset;border-width:8px 16px 8px 0;border-color:transparent #f4f4f4 transparent transparent}}@media screen and (max-width:1023px) and (min-width:768px){.image-position-row .eae-timeline.eae-timeline-alternate-yes .eae-timeline-item:nth-child(odd):not(.custom-image-style-yes) .eae-tl-item-content{flex-direction:row-reverse!important}.image-position-row-reverse .eae-timeline.eae-timeline-alternate-yes .eae-timeline-item:nth-child(odd):not(.custom-image-style-yes) .eae-tl-item-content{flex-direction:row!important}.eae-tl-res-style-mobile-tablet .eae-tl-item-meta-wrapper{display:none}.eae-tl-res-style-mobile-tablet .eae-tl-item-meta-wrapper-inner{display:block}.eae-tl-res-style-mobile-tablet.eae-tl-res-layout-left .eae-timeline-item{flex-direction:row!important}.eae-tl-res-style-mobile-tablet.eae-tl-res-layout-right .eae-timeline-item{flex-direction:row-reverse!important}.eae-layout-center.eae-tl-res-style-mobile-tablet.eae-tl-res-layout-left .eae-timeline-item .eae-tl-item-content::before,.eae-timeline.eae-layout-center.eae-tl-res-style-mobile .eae-timeline-item:nth-child(even) .eae-tl-item-content::before,body.rtl .eae-layout-center.eae-tl-res-style-mobile-tablet.eae-tl-res-layout-right .eae-timeline-item .eae-tl-item-content::before,body.rtl .eae-layout-right .eae-timeline-item .eae-tl-item-content::before,body.rtl .eae-layout-right .eae-tl-item-content::before,body.rtl .eae-timeline.eae-layout-center.eae-tl-res-style-mobile .eae-timeline-item:nth-child(odd) .eae-tl-item-content::before,body:not(.rtl) .eae-layout-left .eae-timeline-item .eae-tl-item-content::before,body:not(.rtl) .eae-layout-left .eae-tl-item-content::before{left:4px!important;border-width:8px 16px 8px 0!important;border-color:transparent #f4f4f4 transparent transparent!important}body.rtl .eae-timeline.eae-layout-center.eae-tl-res-style-mobile .eae-timeline-item:nth-child(odd) .eae-tl-item-content::before{left:4px!important;right:unset!important;border-width:8px 16px 8px 0!important;border-color:transparent #f4f4f4 transparent transparent!important}.eae-timeline.eae-layout-center.eae-tl-res-style-mobile .eae-timeline-item:nth-child(odd) .eae-tl-item-content::before,body.rtl .eae-layout-center.eae-tl-res-style-mobile-tablet.eae-tl-res-layout-left .eae-timeline-item .eae-tl-item-content::before,body.rtl .eae-layout-left .eae-timeline-item .eae-tl-item-content::before,body.rtl .eae-layout-left .eae-tl-item-content::before,body.rtl .eae-timeline.eae-layout-center.eae-tl-res-style-mobile .eae-timeline-item:nth-child(even) .eae-tl-item-content::before,body:not(.rtl) .eae-layout-center.eae-tl-res-style-mobile-tablet.eae-tl-res-layout-right .eae-timeline-item .eae-tl-item-content::before,body:not(.rtl) .eae-layout-right .eae-timeline-item .eae-tl-item-content::before,body:not(.rtl) .eae-layout-right .eae-tl-item-content::before,body:not(.rtl) .eae-tl-res-style-mobile-tablet.eae-tl-res-layout-right .eae-timeline-item .eae-tl-item-content::before{right:4px!important;border-width:8px 0 8px 16px!important;border-color:transparent transparent transparent #f4f4f4!important}.eae-tl-res-style-mobile-tablet.eae-layout-center.eae-tl-res-layout-left .eae-timeline-item .eae-tl-content-wrapper,body.rtl .eae-tl-res-style-mobile-tablet.eae-layout-center.eae-tl-res-layout-right .eae-timeline-item .eae-tl-content-wrapper{padding-right:0!important;padding-left:20px!important}.eae-tl-res-style-mobile-tablet.eae-layout-center.eae-tl-res-layout-right .eae-timeline-item .eae-tl-content-wrapper,body.rtl .eae-tl-res-style-mobile-tablet.eae-layout-center.eae-tl-res-layout-left .eae-timeline-item .eae-tl-content-wrapper{padding-right:20px!important;padding-left:0!important}.eae-tl-res-style-mobile-tablet.eae-layout-center.eae-tl-res-layout-left .eae-timline-progress-bar{left:13px}.eae-tl-res-style-mobile-tablet.eae-layout-center.eae-tl-res-layout-right .eae-timline-progress-bar{left:calc(100% - 13px)}}@media screen and (max-width:767px){.eae-tl-item-meta-wrapper{display:none}.eae-tl-item-meta-wrapper-inner{display:block}.elementor-widget-bpel-timeline:not(.image-position-column) .eae-timeline .eae-tl-item-content{flex-direction:column-reverse!important}.eae-tl-item-image,.elementor-widget-bpel-timeline:not(.image-position-column) .eae-tl-content{width:100%!important}.eae-tl-res-style-mobile-tablet.eae-tl-res-layout-left .eae-timeline-item,.eae-tl-res-style-mobile.eae-tl-res-layout-left .eae-timeline-item{flex-direction:row!important}.eae-tl-res-style-mobile-tablet.eae-tl-res-layout-right .eae-timeline-item,.eae-tl-res-style-mobile.eae-tl-res-layout-right .eae-timeline-item{flex-direction:row-reverse!important}.eae-timeline.eae-layout-center.eae-tl-center.eae-tl-res-style-mobile-tablet.eae-tl-res-layout-left .eae-timeline-item:nth-child(odd) .eae-tl-item-content::before,.eae-timeline.eae-layout-center.eae-tl-center.eae-tl-res-style-mobile.eae-tl-res-layout-left .eae-timeline-item:nth-child(odd) .eae-tl-item-content::before,body.rtl .eae-timeline.eae-layout-right .eae-timeline-item .eae-tl-item-content::before,body.rtl .eae-timeline.eae-tl-res-style-mobile.eae-tl-res-layout-right .eae-timeline-item .eae-tl-item-content::before,body:not(.rtl) .eae-layout-left .eae-timeline-item .eae-tl-item-content::before,body:not(.rtl) .eae-tl-res-style-mobile-tablet.eae-tl-res-layout-left .eae-timeline-item .eae-tl-item-content::before,body:not(.rtl) .eae-tl-res-style-mobile.eae-tl-res-layout-left .eae-timeline-item .eae-tl-item-content::before{left:4px!important;border-width:8px 16px 8px 0!important;border-color:transparent #f4f4f4 transparent transparent!important}body.rtl .eae-layout-left .eae-timeline-item .eae-tl-item-content::before,body.rtl .eae-tl-res-style-mobile.eae-tl-res-layout-left .eae-timeline-item .eae-tl-item-content::before,body:not(.rtl) .eae-layout-right .eae-timeline-item .eae-tl-item-content::before,body:not(.rtl) .eae-tl-res-style-mobile-tablet.eae-tl-res-layout-right .eae-timeline-item .eae-tl-item-content::before,body:not(.rtl) .eae-tl-res-style-mobile.eae-tl-res-layout-right .eae-timeline-item .eae-tl-item-content::before{right:4px!important;border-width:8px 0 8px 16px!important;border-color:transparent transparent transparent #f4f4f4!important}.eae-timeline.eae-tl-res-style-mobile-tablet.eae-layout-center.eae-tl-res-layout-right .eae-timeline-item .eae-tl-content-wrapper,body:not(.rtl) .eae-tl-res-style-mobile-tablet.eae-layout-center.eae-tl-res-layout-left .eae-timeline-item .eae-tl-content-wrapper body.rtl .eae-timeline.eae-tl-res-style-mobile.eae-layout-center.eae-tl-res-layout-right .eae-timeline-item .eae-tl-content-wrapper,body:not(.rtl) .eae-tl-res-style-mobile.eae-layout-center.eae-tl-res-layout-left .eae-timeline-item .eae-tl-content-wrapper{padding-right:0!important;padding-left:20px!important}body.rtl .eae-tl-res-style-mobile-tablet.eae-layout-center.eae-tl-res-layout-left .eae-timeline-item .eae-tl-content-wrapper,body.rtl .eae-tl-res-style-mobile.eae-layout-center.eae-tl-res-layout-left .eae-timeline-item .eae-tl-content-wrapper,body:not(.rtl) .eae-tl-res-style-mobile-tablet.eae-layout-center.eae-tl-res-layout-right .eae-timeline-item .eae-tl-content-wrapper,body:not(.rtl) .eae-tl-res-style-mobile.eae-layout-center.eae-tl-res-layout-right .eae-timeline-item .eae-tl-content-wrapper{padding-right:20px!important;padding-left:0!important}.eae-tl-res-style-mobile-tablet.eae-layout-center.eae-tl-res-layout-left .eae-timline-progress-bar,.eae-tl-res-style-mobile.eae-layout-center.eae-tl-res-layout-left .eae-timline-progress-bar{left:13px}.eae-tl-res-style-mobile-tablet.eae-layout-center.eae-tl-res-layout-right .eae-timline-progress-bar,.eae-tl-res-style-mobile.eae-layout-center.eae-tl-res-layout-right .eae-timline-progress-bar{left:calc(100% - 13px)}body.rtl .eae-layout-center.eae-timeline.eae-tl-res-style-mobile-tablet.eae-tl-res-layout-right .eae-timeline-item .eae-tl-content-wrapper .eae-tl-item-content::before{left:4px;right:unset}body.rtl .eae-layout-center.eae-timeline.eae-tl-res-style-mobile-tablet.eae-tl-res-layout-left .eae-timeline-item .eae-tl-content-wrapper .eae-tl-item-content::before{left:unset;right:4px;border-width:8px 0 8px 16px!important;border-color:transparent transparent transparent #f4f4f4!important}}[data-element_type="eae-evergreen-timer.skin1"] .eae-evergreen-wrapper{display:block;text-align:center}[data-element_type="eae-evergreen-timer.skin1"] #eaeclockdiv{font-family:sans-serif;color:#fff;display:inline-block;font-weight:100;text-align:center;font-size:30px}[data-element_type="eae-evergreen-timer.skin1"] .eae-time-wrapper{padding:10px;border-radius:3px;background:#00bf96;display:inline-block;overflow:hidden}[data-element_type="eae-evergreen-timer.skin1"] #eaeclockdiv div>span{padding:15px;width:100%;background:#00816a;display:inline-block}[data-element_type="eae-evergreen-timer.skin1"] .smalltext{padding:7px;font-size:16px}[data-element_type="eae-evergreen-timer.skin1"] .eae-egt-hide{display:none}.eae-egt-message{display:none}@media screen and (max-width:767px){[data-element_type="eae-evergreen-timer.skin1"] #eaeclockdiv div>span{padding:5px}[data-element_type="eae-evergreen-timer.skin1"] .eae-time-wrapper{padding:5px}}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}[data-element_type="eae-evergreen-timer.skin2"] .eae-evergreen-wrapper{display:inline-block;width:100%;text-align:center;margin:auto}[data-element_type="eae-evergreen-timer.skin2"] .timer-container{display:inline-block}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper a{cursor:pointer;text-decoration:none;color:#ccc}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper a:hover{color:#fff}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul{list-style:none}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper.clearfix:after,[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper.clearfix:before{content:" ";display:table}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper.clearfix:after{clear:both}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper{font:normal 11px "Helvetica Neue",Helvetica,sans-serif;-webkit-user-select:none}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-meridium{background:0 0!important;box-shadow:0 0 0!important;font-size:36px!important}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-meridium a{color:#313333}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper{text-align:center;position:relative;width:100%;margin:1em}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper:after,[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper:before{content:" ";display:table}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper:after{clear:both}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul{position:relative;float:left;margin:5px;width:60px;height:90px;font-size:80px;font-weight:700;line-height:87px;border-radius:6px;background:#000}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li{z-index:1;position:absolute;left:0;top:0;width:100%;height:100%;line-height:87px;text-decoration:none!important}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li:first-child{z-index:2}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li a{display:block;height:100%;-webkit-perspective:200px;-moz-perspective:200px;perspective:200px;margin:0!important;overflow:visible!important;cursor:default!important}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li a div{z-index:1;position:absolute;left:0;width:100%;height:50%;font-size:80px;overflow:hidden;outline:1px solid transparent}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li a div .shadow{position:absolute;width:100%;height:100%;z-index:2}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li a div.up{-webkit-transform-origin:50% 100%;-moz-transform-origin:50% 100%;-ms-transform-origin:50% 100%;-o-transform-origin:50% 100%;transform-origin:50% 100%;top:0}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li a div.up:after{content:"";position:absolute;top:44px;left:0;z-index:5;width:100%;height:3px;background-color:#000;background-color:rgba(0,0,0,.4)}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li a div.down{-webkit-transform-origin:50% 0;-moz-transform-origin:50% 0;-ms-transform-origin:50% 0;-o-transform-origin:50% 0;transform-origin:50% 0;bottom:0;border-bottom-left-radius:6px;border-bottom-right-radius:6px}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li a div div.inn{position:absolute;left:0;z-index:1;width:100%;height:200%;color:#ccc;text-shadow:0 1px 2px #000;text-align:center;background-color:#333;border-radius:6px;font-size:70px}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li a div.up div.inn{top:0}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li a div.down div.inn{bottom:0}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul.play li.flip-clock-before{z-index:3}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper .flip{box-shadow:0 2px 5px rgba(0,0,0,.7)}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul.play li.flip-clock-active{-webkit-animation:asd 10ms .49s linear both;-moz-animation:asd 10ms .49s linear both;animation:asd 10ms .49s linear both;z-index:5}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-divider{float:left;display:inline-block;position:relative;width:20px;height:100px}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-divider:first-child{width:0}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-dot{display:block;background:#323434;width:10px;height:10px;position:absolute;border-radius:50%;box-shadow:0 0 5px rgba(0,0,0,.5);left:5px}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-divider .flip-clock-label{position:absolute;top:-1.5em;right:-86px;color:#000;text-shadow:none}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-divider.minutes .flip-clock-label{right:-88px}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-divider.seconds .flip-clock-label{right:-91px}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-dot.top{top:30%}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-dot.bottom{bottom:30%}@-webkit-keyframes asd{0%{z-index:2}100%{z-index:4}}@-moz-keyframes asd{0%{z-index:2}100%{z-index:4}}@-o-keyframes asd{0%{z-index:2}100%{z-index:4}}@keyframes asd{0%{z-index:2}100%{z-index:4}}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul.play li.flip-clock-active .down{z-index:2;-webkit-animation:turn .5s .5s linear both;-moz-animation:turn .5s .5s linear both;animation:turn .5s .5s linear both}@-webkit-keyframes turn{0%{-webkit-transform:rotateX(90deg)}100%{-webkit-transform:rotateX(0)}}@-moz-keyframes turn{0%{-moz-transform:rotateX(90deg)}100%{-moz-transform:rotateX(0)}}@-o-keyframes turn{0%{-o-transform:rotateX(90deg)}100%{-o-transform:rotateX(0)}}@keyframes turn{0%{transform:rotateX(90deg)}100%{transform:rotateX(0)}}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul.play li.flip-clock-before .up{z-index:2;-webkit-animation:turn2 .5s linear both;-moz-animation:turn2 .5s linear both;animation:turn2 .5s linear both}@-webkit-keyframes turn2{0%{-webkit-transform:rotateX(0)}100%{-webkit-transform:rotateX(-90deg)}}@-moz-keyframes turn2{0%{-moz-transform:rotateX(0)}100%{-moz-transform:rotateX(-90deg)}}@-o-keyframes turn2{0%{-o-transform:rotateX(0)}100%{-o-transform:rotateX(-90deg)}}@keyframes turn2{0%{transform:rotateX(0)}100%{transform:rotateX(-90deg)}}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li.flip-clock-active{z-index:3}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul.play li.flip-clock-before .up .shadow{background:-moz-linear-gradient(top,rgba(0,0,0,.1) 0,#000 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,rgba(0,0,0,.1)),color-stop(100%,#000));background:linear,top,rgba(0,0,0,.1) 0,#000 100%;background:-o-linear-gradient(top,rgba(0,0,0,.1) 0,#000 100%);background:-ms-linear-gradient(top,rgba(0,0,0,.1) 0,#000 100%);background:linear,to bottom,rgba(0,0,0,.1) 0,#000 100%;-webkit-animation:show .5s linear both;-moz-animation:show .5s linear both;animation:show .5s linear both}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul.play li.flip-clock-active .up .shadow{background:-moz-linear-gradient(top,rgba(0,0,0,.1) 0,#000 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,rgba(0,0,0,.1)),color-stop(100%,#000));background:linear,top,rgba(0,0,0,.1) 0,#000 100%;background:-o-linear-gradient(top,rgba(0,0,0,.1) 0,#000 100%);background:-ms-linear-gradient(top,rgba(0,0,0,.1) 0,#000 100%);background:linear,to bottom,rgba(0,0,0,.1) 0,#000 100%;-webkit-animation:hide .5s .3s linear both;-moz-animation:hide .5s .3s linear both;animation:hide .5s .3s linear both}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul.play li.flip-clock-before .down .shadow{background:-moz-linear-gradient(top,#000 0,rgba(0,0,0,.1) 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#000),color-stop(100%,rgba(0,0,0,.1)));background:linear,top,#000 0,rgba(0,0,0,.1) 100%;background:-o-linear-gradient(top,#000 0,rgba(0,0,0,.1) 100%);background:-ms-linear-gradient(top,#000 0,rgba(0,0,0,.1) 100%);background:linear,to bottom,#000 0,rgba(0,0,0,.1) 100%;-webkit-animation:show .5s linear both;-moz-animation:show .5s linear both;animation:show .5s linear both}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul.play li.flip-clock-active .down .shadow{background:-moz-linear-gradient(top,#000 0,rgba(0,0,0,.1) 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#000),color-stop(100%,rgba(0,0,0,.1)));background:linear,top,#000 0,rgba(0,0,0,.1) 100%;background:-o-linear-gradient(top,#000 0,rgba(0,0,0,.1) 100%);background:-ms-linear-gradient(top,#000 0,rgba(0,0,0,.1) 100%);background:linear,to bottom,#000 0,rgba(0,0,0,.1) 100%;-webkit-animation:hide .5s .3s linear both;-moz-animation:hide .5s .3s linear both;animation:hide .5s .2s linear both}@-webkit-keyframes show{0%{opacity:0}100%{opacity:1}}@-moz-keyframes show{0%{opacity:0}100%{opacity:1}}@-o-keyframes show{0%{opacity:0}100%{opacity:1}}@keyframes show{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes hide{0%{opacity:1}100%{opacity:0}}@-moz-keyframes hide{0%{opacity:1}100%{opacity:0}}@-o-keyframes hide{0%{opacity:1}100%{opacity:0}}@keyframes hide{0%{opacity:1}100%{opacity:0}}@media screen and (max-width:767px){[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-divider{width:15px}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-dot{height:5px;width:5px}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul{height:40px}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-divider{height:50px}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li{line-height:37px}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li a div div.inn{font-size:24px}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul{margin:2px}}[data-element_type="eae-evergreen-timer.skin3"] #timer{font-family:sans-serif;color:#fff;display:inline-block;font-weight:100;text-align:center;font-size:30px}[data-element_type="eae-evergreen-timer.skin3"] .desc{display:flex;justify-content:center}[data-element_type="eae-evergreen-timer.skin3"].eae-egt-content-align-right .desc{justify-content:flex-end}[data-element_type="eae-evergreen-timer.skin3"].eae-egt-content-align-left .desc{justify-content:flex-start}[data-element_type="eae-evergreen-timer.skin3"] .desc .egt-time-text{display:inline-block;padding:0 50px 0 50px}[data-element_type="eae-evergreen-timer.skin3"] .eae-time-wrapper{padding:50px;border-radius:3px;background:#00bf96;display:inline-block;overflow:hidden;margin:5px;line-height:1em}[data-element_type="eae-evergreen-timer.skin3"] #timer span:nth-child(1){background:khaki}[data-element_type="eae-evergreen-timer.skin3"] #timer span:nth-child(2){background:#cd5c5c}[data-element_type="eae-evergreen-timer.skin3"] #timer span:nth-child(3){background:#5f9ea0}[data-element_type="eae-evergreen-timer.skin3"] #timer span:nth-child(4){background:#6495ed}[data-element_type="eae-evergreen-timer.skin3"] .fade{animation:flip .7s ease forwards}@keyframes flip{0%{transform:rotateY(0) scaleY(1.1);opacity:.5}50%{transform:rotateY(180deg) scaleY(1.3);opacity:0}100%{transform:rotateY(0);opacity:1}}@media screen and (max-width:767px){[data-element_type="eae-evergreen-timer.skin3"] #timer span{font-size:22px}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-divider .flip-clock-label{top:-1.5em;right:-42px}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-divider.minutes .flip-clock-label{right:-48px}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-divider.seconds .flip-clock-label{right:-51px}}[data-element_type="eae-evergreen-timer.skin4"] .eae-evergreen-wrapper{width:100%}[data-element_type="eae-evergreen-timer.skin4"] .container{margin:0 auto}[data-element_type="eae-evergreen-timer.skin4"] .special{position:relative;width:840px;height:47px}[data-element_type="eae-evergreen-timer.skin4"] #counter{position:absolute;z-index:4000}[data-element_type="eae-evergreen-timer.skin4"] .digit-separator{position:relative;float:left;width:17px;height:44px;overflow:hidden;background-image:url(../digit-sep-svg.svg);background-repeat:no-repeat;background-position:0 0;background-color:#4054b2}[data-element_type="eae-evergreen-timer.skin4"] .digit{background-image:url(../digits-svg-alpha.svg);background-color:#4054b2}.eae-ct-wrapper *{box-sizing:border-box;margin:0;outline:0}article.eae-ct-wrapper{width:100%;max-width:1000px;margin:0 auto;position:relative}.eae-ct-wrapper tbody tr.eae-ct-header td,.eae-ct-wrapper th{position:relative}.eae-ct-wrapper ul{display:none;top:0;z-index:10;padding-bottom:14px}.eae-ct-wrapper li{list-style:none;flex:1;position:relative}.eae-ct-wrapper li:hover{cursor:pointer}.eae-ct-wrapper .eae-ct-heading{width:100%;padding:10px;background:#fff;font-size:20px;font-weight:700;height:60px;color:#999;text-align:center}.eae-ct-wrapper li.eae-ct-heading .eae-ct-heading-inner{position:absolute;align-self:center;top:50%;left:50%;transform:translate(-50%,-50%);width:100%}.eae-ct-wrapper li.eae-ct-heading.active{background:#f5f5f5}.eae-ct-wrapper table{border-collapse:collapse;table-layout:fixed;width:100%}.eae-ct-wrapper th{background:#f5f5f5;display:none}.eae-ct-wrapper td,.eae-ct-wrapper th{height:53px;vertical-align:middle}.eae-ct-wrapper table{border:none}.eae-ct-wrapper table td,.eae-ct-wrapper table th{border:none}.eae-ct-wrapper table tr td:first-child,.eae-ct-wrapper table tr td:last-child,.eae-ct-wrapper td,.eae-ct-wrapper th{padding:10px;empty-cells:show}.eae-ct-wrapper td,.eae-ct-wrapper th{text-align:center}.eae-ct-wrapper td+td,.eae-ct-wrapper th+th{text-align:center}.eae-ct-wrapper tr:first-child{background:0 0!important}.eae-ct-wrapper ul li:nth-child(1){display:table-cell}.eae-ct-wrapper tr td:nth-child(2){display:table-cell}.eae-ct-wrapper td:nth-child(1){display:table-cell}.eae-ct-wrapper td{display:none}.eae-ct-wrapper .sep{background:#f5f5f5;font-weight:700}.eae-ct-price-wrapper{display:flex;justify-content:center}.eae-ct-tt-type-icon .eae-ct-feature .tooltip{float:right}.eae-ct-wrapper .tooltiptext::before{content:"";border-width:5px 5px 0 5px;border-color:#fff;border-left-color:transparent;border-right-color:transparent;border-bottom-color:transparent;bottom:-10px;width:0;height:0;border-style:solid;position:absolute;margin:5px;left:42%}.eae-ct-wrapper .eae-ct-price{font-size:28px;font-weight:700;line-height:1em}.eae-ct-wrapper .eae-ct-currency{align-self:flex-start;margin-right:3px}.eae-ct-wrapper .eae-ct-fractional-price{align-self:flex-start;margin-left:3px}.eae-ct-wrapper .eae-ct-duration{align-self:flex-start}.eae-ct-wrapper .eae-ct-original-price{margin-right:5px;text-decoration:line-through;align-self:flex-end}.eae-ct-wrapper .tick{font-size:18px;color:#2ca01c}.feature-heading-blank.eae-ct-wrapper .hide{border:unset!important;background:unset!important}.eae-ct-wrapper .hide.eae-ct-hide.eae-fbox-heading{border:0 solid #000}.eae-ct-ribbons-yes .eae-ct-ribbons-wrapper{position:absolute;top:0;width:100px;overflow:hidden;height:100px;z-index:998;padding:8px 12px}.eae-ct-ribbons-h-top.eae-ct-ribbons-yes .eae-ct-ribbons-wrapper{position:absolute;top:0;width:100%;overflow:hidden;height:50px;z-index:999;padding:8px 12px}.eae-ct-ribbons-h-top.eae-ct-ribbons-yes .eae-ct-ribbons-wrapper-top{background-color:rgba(63,195,135,.8);color:#fff;transform:translateY(-100%);position:absolute;width:100%;top:0;left:0}.eae-ct-ribbons-h-left.eae-ct-ribbons-yes .eae-ct-ribbons-wrapper{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);left:0;right:auto}.eae-ct-ribbons-h-right.eae-ct-ribbons-yes .eae-ct-ribbons-wrapper{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(90deg);left:auto;right:0}.eae-ct-ribbons-yes .eae-ct-ribbons-wrapper span.eae-ct-ribbons-inner{position:absolute;text-align:center;left:0;top:0;width:200%;-webkit-transform:translateY(-50%) translateX(-50%) translateX(35px) rotate(-45deg);-ms-transform:translateY(-50%) translateX(-50%) translateX(35px) rotate(-45deg);transform:translateY(-50%) translateX(-50%) translateX(35px) rotate(-45deg);margin-top:35px;font-size:13px;line-height:2;font-weight:800;text-transform:uppercase;background:rgba(63,195,135,.8);padding:8px 12px;color:#fff}.eae-ct-wrapper .tooltip{position:relative;display:inline-block}.eae-ct-wrapper .tooltip .tooltiptext{visibility:hidden;min-width:120px;background-color:#000;color:#fff;text-align:center;border-radius:6px;padding:5px 0;position:absolute;z-index:1;bottom:120%;left:50%;margin-left:-60px}.eae-ct-wrapper .tooltip:hover .tooltiptext{visibility:visible}.eae-ct-heading-tooltip{text-decoration-line:underline;text-decoration-style:dotted}.eae-ct-btn{padding:10px 15px 10px 15px;color:#fff;display:inline-block;line-height:1em}.eae-ct-btn:hover{color:#fff}.eae-ct-wrapper i.fa.fa-check,.eae-ct-wrapper i.fas.fa-check{color:#38f146}.eae-ct-wrapper i.fa.fa-close,.eae-ct-wrapper i.fas.fa-times{color:red}.button-heading-blank.eae-ct-wrapper tr:last-child td:first-child{background:0 0!important;border:none!important}.eae-ct-wrapper tr:last-child{background:0 0!important}.eae-ct-wrapper tbody tr:nth-child(2){background:0 0!important}@media (min-width:767px){.eae-ct-wrapper .eae-ct-header,.eae-ct-wrapper td{width:330px}.eae-ct-wrapper td+td,.eae-ct-wrapper th+th{width:auto}}.eae-tab-format-all .eae-ct-wrapper ul{display:flex}.hide.eae-ct-hide{display:table-cell}@media (min-width:1023px){.eae-tab-format-all tbody tr.eae-ct-header{display:none}.eae-tab-format-mobile .eae-ct-wrapper td,.eae-tab-format-mobile .eae-ct-wrapper th,.eae-tab-format-tab-mob .eae-ct-wrapper td,.eae-tab-format-tab-mob .eae-ct-wrapper th{display:table-cell!important}.eae-tab-format-all .hide.eae-ct-hide{display:table-cell}.eae-tab-format-mobile .hide.eae-ct-hide,.eae-tab-format-tab-mob .hide.eae-ct-hide{display:none!important}}@media (max-width:1023px){.eae-tab-format-tab-mob .eae-ct-wrapper ul{display:flex}.eae-tab-format-all tbody tr.eae-ct-header,.eae-tab-format-tab-mob tbody tr.eae-ct-header{display:none}.eae-tab-format-all .hide.eae-ct-hide{display:table-cell}.eae-tab-format-tab-mob .hide.eae-ct-hide{display:table-cell}}@media (max-width:1023px) and (min-width:768px){.eae-tab-format-mobile .eae-ct-wrapper td,.eae-tab-format-mobile .eae-ct-wrapper th{display:table-cell!important}.eae-tab-format-all tbody tr.eae-ct-header,.eae-tab-format-tab-mob tbody tr.eae-ct-header{display:none}.eae-tab-format-tab-mob .hide.eae-ct-hide{display:table-cell}}@media (max-width:767px){.eae-tab-format-mobile .eae-ct-wrapper ul{display:flex}.eae-tab-format-mobile tbody tr.eae-ct-header{display:none}.eae-tab-format-all tbody tr.eae-ct-header,.eae-tab-format-mobile tbody tr.eae-ct-header{display:none}.eae-tab-format-mobile .hide.eae-ct-hide{display:table-cell}}.eae-progress-bar-wrapper{display:flex;flex-direction:column;align-items:flex-start;margin:15px 0}.eae-progress-bar-wrapper.eae-progress-bar{width:100%;position:relative;box-sizing:border-box}.eae-pb-bar,.eae-pb-bar-inner,.eae-pb-bar-skill,.eae-pb-bar-value{box-sizing:border-box}.eae-pb-bar{position:relative;height:100%;width:100%;overflow:hidden}.eae-pb-bar--no-overflow{overflow:visible}.eae-pb-bar-inner{position:absolute;top:0;left:0;height:100%;-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:left center;transform-origin:left center}body.rtl .eae-pb-bar .eae-pb-bar-inner{position:absolute;top:0;right:0!important;height:100%;-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:right center;transform-origin:right center}.eae-pb-bar-inner.js-animated{transition-property:all;transition-duration:1.5s;transition-timing-function:cubic-bezier(.1,1.14,.31,1.06);transition-delay:1.5s;-webkit-transform:scaleX(1);transform:scaleX(1)}body.rtl .eae-pb-bar .eae-pb-bar-inner.js-animated{transition-property:all;transition-duration:1.5s;transition-timing-function:cubic-bezier(.1,1.14,.31,1.06);transition-delay:1.5s;-webkit-transform:scaleX(1);transform:scaleX(1)}.eae-pb-bar-skill,.eae-pb-bar-value{font-size:14px;letter-spacing:1px}body:not(.rtl) .eae-pb-bar-value--aligned-value{-webkit-transform:translateX(-50%);transform:translateX(-50%)}body.rtl .eae-pb-bar-value--aligned-value{-webkit-transform:translateX(50%);transform:translateX(50%)}.eae-progress-bar-skin1{height:20px;padding:4px;border:1px solid #ddd;border-radius:20px}.eae-pb-bar-skin1{border-radius:20px}.eae-pb-bar-inner-skin1{background-color:#00bfb3;background-size:200%;background-position:0 0;border-radius:20px}.eae-pb-bar-skill-skin1{position:absolute;bottom:20px;left:0;opacity:0}body.rtl .eae-pb-bar-skill-skin1{right:0}.eae-pb-bar-skill-skin1.js-animated{transition-property:all;transition-duration:.5s;transition-timing-function:linear;transition-delay:.5s;left:0;opacity:1}body.rtl .eae-pb-bar-skill-skin1.js-animated{right:0!important}.eae-pb-bar-value-skin1{position:absolute;bottom:20px;opacity:1}body:not(.rtl) .eae-pb-bar-value-skin1{right:0}body.rtl .eae-pb-bar-value-skin1{left:0!important}.eae-pb-bar-value-skin1.js-animated{transition-property:all;transition-duration:.5s;transition-timing-function:linear;transition-delay:.5s;opacity:1}body:not(.rtl) .eae-pb-bar-value-skin1.js-animated{right:0}.eae-progress-bar-skin2{height:15px;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12),0 1px 5px 0 rgba(0,0,0,.2);border-radius:3px}@-webkit-keyframes progress-2-bg-animation-rtl{100%{background-position:0 0,0 0}0%{background-position:0 0,42px 0}}@keyframes progress-2-bg-animation-rtl{100%{background-position:0 0,0 0}0%{background-position:0 0,42px 0}}@-webkit-keyframes progress-2-bg-animation{0%{background-position:0 0,0 0}1000%{background-position:0 0,42px 0}}@keyframes progress-2-bg-animation{0%{background-position:0 0,0 0}100%{background-position:0 0,42px 0}}.eae-pb-bar-inner-skin2{background-image:linear-gradient(to top,rgba(255,255,255,.15),rgba(0,0,0,.2)),linear-gradient(135deg,#5eeb5b,#5eeb5b 33%,#358600 33%,#358600 66%,#5eeb5b 66%);background-size:100% 100%,42px 100%;background-position:0 0,0 0;border-radius:3px}body:not(.rtl) .eae-pb-bar-inner-skin2.js-animated{-webkit-animation:progress-2-bg-animation 1.5s linear 0s infinite;animation:progress-2-bg-animation 1.5s linear 0s infinite}body.rtl .eae-pb-bar-inner-skin2.js-animated{-webkit-animation:progress-2-bg-animation-rtl 1.5s linear 0s infinite;animation:progress-2-bg-animation-rtl 1.5s linear 0s infinite}.eae-pb-bar-skill-skin2{position:absolute;opacity:0}body:not(.rtl) .eae-pb-bar-skill-skin2{left:0}body.rtl .eae-pb-bar-skill-skin2{right:0}.eae-pb-bar-skill-skin2.js-animated{transition-property:all;transition-duration:.5s;transition-timing-function:linear;transition-delay:.5s;bottom:20px;opacity:1}.eae-pb-bar-value-skin2{position:absolute;opacity:0}body:not(.rtl) .eae-pb-bar-value-skin2{right:0}body.rtl .eae-pb-bar-value-skin2{left:0}.eae-pb-bar-value-skin2.js-animated{transition-property:all;transition-duration:.5s;transition-timing-function:linear;transition-delay:.5s;bottom:20px;opacity:1}.eae-progress-bar-skin3{height:5px;background-color:#efefef}.eae-pb-bar-inner-skin3,.eae-pb-bar-value-skin3{background-color:#f40076}.eae-pb-bar-inner:after,.eae-pb-bar-value-skin3:after{border-top-color:#f40076}.eae-pb-bar-skill-skin3{position:absolute;bottom:10px;left:-10px;opacity:0}.eae-pb-bar-skill-skin3.js-animated{transition-property:all;transition-duration:.5s;transition-timing-function:linear;transition-delay:.5s;opacity:1}body:not(.rtl) .eae-pb-bar-skill-skin3.js-animated{left:0}body.rtl .eae-pb-bar-skill-skin3.js-animated{right:0}.eae-pb-bar-value-skin3{position:absolute;display:inline-block;padding:0 8px;font-size:14px;color:#fff;opacity:0}.eae-pb-bar-value-skin3:after{position:absolute;left:50%;bottom:-10px;display:block;width:0;height:0;content:"";-webkit-transform:translateX(-50%);transform:translateX(-50%);border-width:5px;border-style:solid;border-color:#f40076 transparent transparent transparent}.eae-pb-bar-inner-skin3.js-animated{transition-property:all;transition-duration:1.5s;transition-timing-function:cubic-bezier(.1,1.14,.31,1.06);transition-delay:1.5s;-webkit-transform:scaleX(1);transform:scaleX(1)}.eae-pb-bar-value-skin3.js-animated{transition-property:all;transition-duration:1.5s;transition-timing-function:cubic-bezier(.1,1.14,.31,1.06);transition-delay:2s;bottom:14px;opacity:1}.eae-progress-bar-skin4{height:3px;background-color:#efefef}.eae-pb-bar-inner-skin4{background-color:#000}.eae-pb-bar-inner-skin4:after{position:absolute;top:50%;display:block;width:8px;height:8px;content:"";-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:#000;border-radius:50%}body:not(.rtl) .eae-pb-bar-inner-skin4:after{right:0}body.rtl .eae-pb-bar-inner-skin4:after{left:0}.eae-pb-bar-value-skin4{position:absolute;bottom:2px;font-size:14px;opacity:0}.eae-pb-bar-value-skin4.js-animated{transition-property:all;transition-duration:1.5s;transition-timing-function:linear;transition-delay:1.5s;opacity:1}.eae-pb-bar-skill-skin4{position:absolute;bottom:2px;left:-20px;opacity:0}.eae-pb-bar-skill-skin4.js-animated{transition-property:all;transition-duration:.5s;transition-timing-function:linear;transition-delay:.5s;opacity:1}body:not(.rtl) .eae-pb-bar-skill-skin4.js-animated{left:0}body.rtl .eae-pb-bar-skill-skin4.js-animated{right:0}.eae-progress-bar-skin5{height:30px;background-color:#f7f7f7}.eae-pb-bar-inner-skin5{background-color:#57b8ff}.eae-pb-bar-skill-skin5{position:absolute;top:50%;color:#fff;-webkit-transform:translateY(-50%);transform:translateY(-50%);opacity:0}body:not(.rtl) .eae-pb-bar-skill-skin5{left:10px}body:not(.rtl) .eae-pb-bar-skill-skin5{right:10px}.eae-pb-bar-skill-skin5.js-animated{transition-property:all;transition-duration:.5s;transition-timing-function:linear;transition-delay:.5s;opacity:1}.eae-pb-bar-value-skin5{position:absolute;top:50%;color:#fff;opacity:0;z-index:10}body:not(.rtl) .eae-pb-bar-value-skin5{-webkit-transform:translateX(-100%) translateX(-10px) translateY(-50%);transform:translateX(-100%) translateX(-10px) translateY(-50%)}body.rtl .eae-pb-bar-value-skin5{-webkit-transform:translateX(100%) translateX(10px) translateY(-50%);transform:translateX(100%) translateX(10px) translateY(-50%)}.eae-pb-bar-value-skin5.js-animated{transition-property:all;transition-duration:1.5s;transition-timing-function:linear;transition-delay:1.5s;opacity:1}.eae-dual-button-wrapper .eae-button-1-wrapper,.eae-dual-button-wrapper .eae-button-2-wrapper{overflow:hidden}.eae-dual-button-wrapper.button-style-horizontal{display:flex;flex-direction:row;position:relative}.eae-dual-button-main-wrapper{display:flex;flex-direction:row;justify-content:center}.eae-dual-button-wrapper a{min-width:0}.eae-dual-button-wrapper.button-style-vertical{display:inline-flex;flex-direction:column;position:relative}.eae-button-1.icon-before,.eae-button-2.icon-before{display:flex;flex-direction:row}body.rtl .eae-button-1.icon-before,body.rtl .eae-button-2.icon-before{display:flex;flex-direction:row-reverse}.eae-button-1.icon-after,.eae-button-2.icon-after{display:flex;flex-direction:row-reverse}body.rtl .eae-button-1.icon-after,body.rtl .eae-button-2.icon-after{display:flex;flex-direction:row}.eae-button-1-wrapper .eae-button-1,.eae-button-2-wrapper .eae-button-2{color:#000;align-items:center}.eae-button-1-wrapper:hover .eae-button-1,.eae-button-2-wrapper:hover .eae-button-2{color:#000}.eae-dual-button-wrapper.button-style-vertical .eae-button-1.icon-after,.eae-dual-button-wrapper.button-style-vertical .eae-button-1.icon-before,.eae-dual-button-wrapper.button-style-vertical .eae-button-2.icon-after,.eae-dual-button-wrapper.button-style-vertical .eae-button-2.icon-before{justify-content:center}.eae-button-1.icon-up,.eae-button-2.icon-up{display:flex;flex-direction:column;text-align:center}.eae-button-1.icon-down,.eae-button-2.icon-down{display:flex;flex-direction:column-reverse;text-align:center}.eae-button-1-wrapper{background:#ffb6c1;display:flex;justify-content:center;width:100%;line-height:1}.eae-button-2-wrapper{background:orange;display:flex;justify-content:center;width:100%;line-height:1}.eae-button-1.icon-up .icon-wrapper,.eae-button-2.icon-down .icon-wrapper,.eae-button-2.icon-up .icon-wrapper{text-align:center}.eae-button-1.icon-up .eae-button-text,.eae-button-2.icon-down .eae-button-text,.eae-button-2.icon-up .eae-button-text{text-align:center}.eae-button-1.icon-before i,.eae-button-2.icon-after i,.eae-button-2.icon-before i{align-self:center;margin:0 10px 0 0}.eae-button-1.icon-after i,.eae-button-2.icon-after i{align-self:center;margin:0 0 0 10px}.eae-button-1.icon-down i,.eae-button-1.icon-up i,.eae-button-2.icon-down i,.eae-button-2.icon-up i{align-self:center;margin:5px 0}.eae-dual-button-wrapper.button-style-horizontal .eae-button-1-wrapper,.eae-dual-button-wrapper.button-style-horizontal .eae-button-2-wrapper{padding:12px 30px}.eae-dual-button-wrapper.button-style-vertical .eae-button-1-wrapper,.eae-dual-button-wrapper.button-style-vertical .eae-button-2-wrapper{padding:20px 30px}.eae-button1,.eae-button2{position:relative;display:flex}.eae-dual-button-wrapper.button-style-horizontal .eae-button1,.eae-dual-button-wrapper.button-style-horizontal .eae-button2{min-width:150px}.eae-dual-button-wrapper.button-style-vertical .eae-button1{display:flex;flex-direction:column}.eae-button-separator-wrapper .eae-button-separator{width:40px;height:40px;line-height:40px;border-radius:50%;z-index:1;box-shadow:0 0 0 6px rgba(255,255,255,.2);background:#fafaf8;color:#444;text-transform:uppercase;text-align:center;vertical-align:middle;font-weight:400;font-size:14px;position:absolute;transform:translateY(-50%)}.eae-button-separator span{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%)}body.rtl.elementor-editor-active .eae-dual-button-main-wrapper .button-style-horizontal .eae-button1 .eae-button-separator-wrapper.not-rtl .eae-button-separator{display:none!important}body:not(.rtl).elementor-editor-active .eae-dual-button-main-wrapper .button-style-horizontal .eae-button2 .eae-button-separator-wrapper.rtl .eae-button-separator,body:not(.rtl).elementor-editor-preview .eae-dual-button-main-wrapper .button-style-horizontal .eae-button2 .eae-button-separator-wrapper.rtl .eae-button-separator{display:none!important}.eae-sweep-right{vertical-align:middle;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);box-shadow:0 0 1px transparent;position:relative;-webkit-transition-property:color;transition-property:color;-webkit-transition-duration:.3s;transition-duration:.3s}.eae-sweep-right:before{content:"";position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;background:#2098d1;-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:0 50%;transform-origin:0 50%;-webkit-transition-property:transform;transition-property:transform;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}.eae-sweep-right:active,.eae-sweep-right:focus,.eae-sweep-right:hover{color:#fff}.eae-sweep-right:active:before,.eae-sweep-right:focus:before,.eae-sweep-right:hover:before{-webkit-transform:scaleX(1);transform:scaleX(1)}.eae-sweep-left{vertical-align:middle;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);box-shadow:0 0 1px transparent;position:relative;-webkit-transition-property:color;transition-property:color;-webkit-transition-duration:.3s;transition-duration:.3s}.eae-sweep-left:before{content:"";position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;background:#2098d1;-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:100% 50%;transform-origin:100% 50%;-webkit-transition-property:transform;transition-property:transform;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}.eae-sweep-left:active,.eae-sweep-left:focus,.eae-sweep-left:hover{color:#fff}.eae-sweep-left:active:before,.eae-sweep-left:focus:before,.eae-sweep-left:hover:before{-webkit-transform:scaleX(1);transform:scaleX(1)}.eae-sweep-bottom{vertical-align:middle;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);box-shadow:0 0 1px transparent;position:relative;-webkit-transition-property:color;transition-property:color;-webkit-transition-duration:.3s;transition-duration:.3s}.eae-sweep-bottom:before{content:"";position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;background:#2098d1;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:50% 0;transform-origin:50% 0;-webkit-transition-property:transform;transition-property:transform;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}.eae-sweep-bottom:active,.eae-sweep-bottom:focus,.eae-sweep-bottom:hover{color:#fff}.eae-sweep-bottom:active:before,.eae-sweep-bottom:focus:before,.eae-sweep-bottom:hover:before{-webkit-transform:scaleY(1);transform:scaleY(1)}.eae-sweep-top{vertical-align:middle;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);box-shadow:0 0 1px transparent;position:relative;-webkit-transition-property:color;transition-property:color;-webkit-transition-duration:.3s;transition-duration:.3s}.eae-sweep-top:before{content:"";position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;background:#2098d1;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transition-property:transform;transition-property:transform;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}.eae-sweep-top:active,.eae-sweep-top:focus,.eae-sweep-top:hover{color:#fff}.eae-sweep-top:active:before,.eae-sweep-top:focus:before,.eae-sweep-top:hover:before{-webkit-transform:scaleY(1);transform:scaleY(1)}.eae-bounce-right{vertical-align:middle;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);box-shadow:0 0 1px transparent;position:relative;-webkit-transition-property:color;transition-property:color;-webkit-transition-duration:.5s;transition-duration:.5s}.eae-bounce-right:before{content:"";position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;background:#2098d1;-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:0 50%;transform-origin:0 50%;-webkit-transition-property:transform;transition-property:transform;-webkit-transition-duration:.5s;transition-duration:.5s;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}.eae-bounce-right:active,.eae-bounce-right:focus,.eae-bounce-right:hover{color:#fff}.eae-bounce-right:active:before,.eae-bounce-right:focus:before,.eae-bounce-right:hover:before{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transition-timing-function:cubic-bezier(.52,1.64,.37,.66);transition-timing-function:cubic-bezier(.52,1.64,.37,.66)}.eae-bounce-left{vertical-align:middle;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);box-shadow:0 0 1px transparent;position:relative;-webkit-transition-property:color;transition-property:color;-webkit-transition-duration:.5s;transition-duration:.5s}.eae-bounce-left:before{content:"";position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;background:#2098d1;-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:100% 50%;transform-origin:100% 50%;-webkit-transition-property:transform;transition-property:transform;-webkit-transition-duration:.5s;transition-duration:.5s;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}.eae-bounce-left:active,.eae-bounce-left:focus,.eae-bounce-left:hover{color:#fff}.eae-bounce-left:active:before,.eae-bounce-left:focus:before,.eae-bounce-left:hover:before{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transition-timing-function:cubic-bezier(.52,1.64,.37,.66);transition-timing-function:cubic-bezier(.52,1.64,.37,.66)}.eae-bounce-bottom{vertical-align:middle;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);box-shadow:0 0 1px transparent;position:relative;-webkit-transition-property:color;transition-property:color;-webkit-transition-duration:.5s;transition-duration:.5s}.eae-bounce-bottom:before{content:"";position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;background:#2098d1;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:50% 0;transform-origin:50% 0;-webkit-transition-property:transform;transition-property:transform;-webkit-transition-duration:.5s;transition-duration:.5s;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}.eae-bounce-bottom:active,.eae-bounce-bottom:focus,.eae-bounce-bottom:hover{color:#fff}.eae-bounce-bottom:active:before,.eae-bounce-bottom:focus:before,.eae-bounce-bottom:hover:before{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition-timing-function:cubic-bezier(.52,1.64,.37,.66);transition-timing-function:cubic-bezier(.52,1.64,.37,.66)}.eae-bounce-top{vertical-align:middle;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);box-shadow:0 0 1px transparent;position:relative;-webkit-transition-property:color;transition-property:color;-webkit-transition-duration:.5s;transition-duration:.5s}.eae-bounce-top:before{content:"";position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;background:#2098d1;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transition-property:transform;transition-property:transform;-webkit-transition-duration:.5s;transition-duration:.5s;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}.eae-bounce-top:active,.eae-bounce-top:focus,.eae-bounce-top:hover{color:#fff}.eae-bounce-top:active:before,.eae-bounce-top:focus:before,.eae-bounce-top:hover:before{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition-timing-function:cubic-bezier(.52,1.64,.37,.66);transition-timing-function:cubic-bezier(.52,1.64,.37,.66)}.eae-markers .marker{display:none}.eae-markers p{margin-bottom:0}.eae-fg-wrapper{display:flex;flex-direction:column;overflow:hidden}.eae-gallery-filter{display:flex;flex-direction:row;justify-content:center;flex-wrap:wrap}.eae-filter-label{padding:5px 10px;background-color:#a0ce4e;color:#fff;margin:0 3px 0 3px}.eae-filter-label.current{background-color:#73b9dc}.eae-fg-image{display:flex;flex-wrap:wrap;flex-direction:row}.eae-fg-wrapper .eae-gallery-item-inner img{width:100%;height:auto;display:block!important;transition:all .5s ease;-webkit-transition:all .5s ease}.eae-gallery-item{height:auto}.eae-gallery-filter a{color:#fff;text-decoration:none}.eae-gallery-filter a.current{font-weight:700}.eae-gallery-item-inner{position:relative;overflow:hidden}.eae-overlay-always .eae-gallery-item .eae-grid-overlay{display:block}.eae-overlay-hover .eae-gallery-item-inner:hover .eae-grid-overlay{display:block}.eae-overlay-hide-on-hover .eae-gallery-item-inner:hover .eae-grid-overlay{display:none}.eae-overlay-hide-on-hover .eae-grid-overlay{display:block}.eae-grid-overlay{position:absolute;top:0;left:0;display:none;z-index:99;background:rgba(0,0,0,.5);height:100%;width:100%}.eae-grid-overlay-inner{display:block;position:relative;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center}.eae-fg-wrapper .eae-icon-wrapper{display:flex;justify-content:center}.eae-overlay-caption{display:block;line-height:1em;margin-top:15px;color:#73b9dc;font-size:20px}.eae-overlay-icon{line-height:1em;padding:.5em;display:inline-block}.eae-overlay-icon svg{height:auto}.eae-icon-view-framed .eae-overlay-icon{padding:.5em;color:#73b9dc;border:3px solid #73b9dc;background-color:transparent}.eae-icon-view-stacked .eae-overlay-icon{padding:.5em;color:#fff;background-color:#818a91}.eae-hover-direction-effect .eae-grid-overlay{position:absolute;z-index:99;background:rgba(0,0,0,.5);height:100%;width:100%}.eae-fg-wrapper.eae-image-ratio-yes .eae-gallery-item-inner .eae-fg-img-wrapper{position:relative;top:0;overflow:hidden;left:0;right:0;border:0}.eae-fg-wrapper.eae-image-ratio-yes .eae-gallery-item-inner .eae-fg-img-wrapper img{height:100%;width:100%;display:block;position:absolute;top:0;left:0;object-fit:cover}.wts-eae-ribbons-badges-wrapper{display:none}.wts-eae-enable-ribbons-badges-yes .elementor-column-wrap>.wts-eae-ribbons-badges-wrapper{display:block}.wts-eae-enable-ribbons-badges-yes.wts-eae-badge-type-ribbon>.wts-eae-ribbons-badges-wrapper{position:absolute;top:0;left:auto;right:0;-ms-transform:rotate(90deg);width:150px;overflow:hidden;height:150px;z-index:999;padding:8px 12px}.wts-eae-badge-h-left.wts-eae-enable-ribbons-badges-yes.wts-eae-badge-type-ribbon>.wts-eae-ribbons-badges-wrapper{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);left:0;right:auto}.wts-eae-badge-h-right.wts-eae-enable-ribbons-badges-yes.wts-eae-badge-type-ribbon>.wts-eae-ribbons-badges-wrapper{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(90deg);left:auto;right:0}.wts-eae-enable-ribbons-badges-yes.wts-eae-badge-type-ribbon>.wts-eae-ribbons-badges-wrapper span.wts-eae-ribbons-badges-inner{position:absolute;text-align:center;left:0;top:0;width:200%;-webkit-transform:translateY(-50%) translateX(-50%) translateX(35px) rotate(-45deg);-ms-transform:translateY(-50%) translateX(-50%) translateX(35px) rotate(-45deg);transform:translateY(-50%) translateX(-50%) translateX(35px) rotate(-45deg);margin-top:35px;font-size:13px;line-height:2;font-weight:800;text-transform:uppercase;background:rgba(63,195,135,.8);padding:8px 12px}.wts-eae-enable-ribbons-badges-yes.wts-eae-badge-type-badge>.wts-eae-ribbons-badges-wrapper span.wts-eae-ribbons-badges-inner{min-height:3.236em;min-width:3.236em;padding:0;font-size:1em;font-weight:700;position:absolute;text-align:center;line-height:3.236;top:-.5em;left:-.5em;margin:0;border-radius:100%;background-color:#77a464;color:#fff;font-size:.857em;z-index:9}.wts-eae-badge-h-left.wts-eae-badge-v-bottom.wts-eae-enable-ribbons-badges-yes>.wts-eae-ribbons-badges-wrapper span.wts-eae-ribbons-badges-inner{left:20px;right:auto;top:auto;bottom:20px}.wts-eae-badge-h-left.wts-eae-badge-v-top.wts-eae-enable-ribbons-badges-yes>.wts-eae-ribbons-badges-wrapper span.wts-eae-ribbons-badges-inner{left:20px;right:auto;top:20px;bottom:auto}.wts-eae-badge-h-right.wts-eae-badge-v-bottom.wts-eae-enable-ribbons-badges-yes>.wts-eae-ribbons-badges-wrapper span.wts-eae-ribbons-badges-inner{left:auto;right:20px;top:auto;bottom:20px}.wts-eae-badge-h-right.wts-eae-badge-v-top.wts-eae-enable-ribbons-badges-yes>.wts-eae-ribbons-badges-wrapper span.wts-eae-ribbons-badges-inner{left:auto;right:20px;top:20px;bottom:auto}.eae-flip-box-back svg,.eae-flip-box-front svg{width:25px;height:auto}.wts-eae-textseparator svg{width:25px;height:auto}.eae-img-comp-slider svg{width:22px;height:auto}.eae-popup-link svg{display:inline-block;width:1em}.eae-popup svg:focus,.eae-popup svg:hover{opacity:1;cursor:pointer}.eae-popup svg:active{top:1px}.eae-popup svg.eae-close{width:28px;height:28px;line-height:1em;text-decoration:none;text-align:center;opacity:1;background-color:#fff}.eae-dual-button-wrapper svg{width:1em;height:auto;display:block}eae-button-separator i{position:relative;display:block}.eae-button-1.icon-before svg,.eae-button-2.icon-after svg,.eae-button-2.icon-before svg{align-self:center;margin:0 10px 0 0}.eae-button-1.icon-after svg,.eae-button-2.icon-after svg{align-self:center;margin:0 0 0 10px}.eae-button-1.icon-down svg,.eae-button-1.icon-up svg,.eae-button-2.icon-down svg,.eae-button-2.icon-up svg{align-self:center;margin:5px 0}.eae-pt-button-wrapper a svg{width:1em}.eae-pt-action-button .eae-pt-align-icon-left{float:left}.eae-pt-action-button .eae-pt-align-icon-right{float:right}.eae-icon-wrap svg{width:20px;height:auto;font-size:20px;display:block}.eae-info-circle .eae-icon-wrap svg{width:20px;height:auto;font-size:20px}.eae-icon-view-stacked svg{fill:#fff}.ae-link-yes{cursor:pointer}.eae-element-unfold-content{padding:10px 0;background-color:#d3d3d3c4;width:100%;position:absolute;left:0;bottom:0;z-index:999}a.eae-unfold-link{background-color:#61ce70;color:#fff;display:inline-block;overflow:hidden}a.eae-unfold-link svg{background-color:#fff}.eae-unfold-button-icon{vertical-align:middle}.eae-fold-yes .elementor-column-wrap,.eae-fold-yes.elementor-section .elementor-container,.eae-fold-yes.elementor-widget{overflow:hidden}body.elementor-editor-active .elementor.elementor-edit-mode .elementor-element.elementor-section.eae-widget-unfold-yes .elementor-container,body.elementor-editor-preview .elementor.elementor-edit-mode .elementor-element.elementor-section.eae-widget-unfold-yes .elementor-container{overflow:hidden}body.elementor-editor-active .elementor.elementor-edit-mode .elementor-element.elementor-column.eae-widget-unfold-yes .elementor-column-wrap,body.elementor-editor-preview .elementor.elementor-edit-mode .elementor-element.elementor-column.eae-widget-unfold-yes .elementor-column-wrap{overflow:hidden}body.elementor-editor-active .elementor.elementor-edit-mode .elementor-element.elementor-widget.eae-widget-unfold-yes,body.elementor-editor-preview .elementor.elementor-edit-mode .elementor-element.elementor-widget.eae-widget-unfold-yes{overflow:hidden}.eae-widget-unfold-yes .elementor-widget-container .eae-fold-yes.eae-rc{display:none!important}.eae-unfold-button-icon svg{line-height:1em;text-decoration:none;-webkit-mask-repeat:no-repeat!important;text-align:center;opacity:1}.eae-fold-icon-type-svg .eae-unfold-button-icon,.eae-unfold-icon-type-svg .eae-unfold-button-icon{-webkit-mask-size:cover!important;background-image:none;transform:translateY(-50%)}.elementor-section.elementor-section-items-bottom.eae-widget-unfold-yes>.elementor-container,.elementor-section.elementor-section-items-middle.eae-widget-unfold-yes>.elementor-container{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:start}.elementor-section.elementor-section-content-bottom.eae-widget-unfold-yes>.elementor-container,.elementor-section.elementor-section-content-middle.eae-widget-unfold-yes>.elementor-container{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:start}.elementor-widget-wts-modal-popup.eae-pop-btn-type-image .eae-popup-link{padding:0;background-color:transparent;overflow:hidden}[data-elementor-device-mode=tablet] .eae-tab-format-mobile .eae-ct-hide.eae-fbox-heading{display:none!important}.eae-timeline-item .eae-icon-view-stacked{border-width:0!important}.eae-content-switcher-wrapper{display:block;text-align:center}.eae-cs-layout-skin1 .eae-cs-switch-wrapper{display:inline-flex;flex-wrap:wrap;padding:8px 12px;background:#54595f;border-radius:50px}.eae-cs-switch-container{display:block;text-align:center}.eae-cs-layout-skin1 .eae-cs-label-wrapper{display:inline-block;overflow:hidden}.eae-cs-layout-skin1 .eae-content-switch-button{border-radius:50px;padding:8px 12px;background-color:#7a7a7a;color:#fff;overflow:hidden;display:block;min-width:150px;position:relative;text-align:center;margin:3px}.eae-cs-layout-skin1 .eae-content-switch-button:before{height:100%;top:0;left:0;z-index:0;content:'';width:0;position:absolute;right:0;transition:all .3s ease-out}.eae-cs-layout-skin1 .eae-content-switch-button.active:before{width:100%;left:0;right:auto;background-color:#61ce70}.eae-cs-layout-skin1 .eae-content-switch-label{position:relative}.eae-cs-content-section{display:none}.eae-cs-content-section.active{display:block}@media only screen and (max-width:768px){.eae-cs-switch-wrapper{display:inline-block!important}}.eae-cs-layout-skin2 .eae-cs-switch-wrapper{display:inline-flex;flex-wrap:wrap;padding:0;background:0 0}.eae-cs-layout-skin2 .eae-cs-label-wrapper{display:inline-block}.eae-cs-layout-skin2 .eae-content-switch-button{width:auto;margin:3px 8px;padding:10px 12px;background-color:#e2e2e2;overflow:hidden;display:block;position:relative;text-align:center;border-radius:5px;border:1px solid rgba(130,130,130,.26);color:rgba(71,71,71,.44)}.eae-cs-layout-skin2 .eae-content-switch-button.active{box-shadow:0 10px 34px -9px rgba(0,0,0,.38);background-color:#fff;color:#575757;border-color:#fff}h5.eae-cs-label{margin:0}.eae-cs-layout-skin3 .eae-cs-switch-wrapper{display:block;justify-content:center;align-items:center}.eae-content-switch-label.primary-label{margin-right:30px}.eae-content-switch-label.secondary-label{margin-left:30px}.eae-cs-layout-skin3 .eae-cs-switch-label{position:relative;display:inline-block;width:4.5em;height:2.3em;vertical-align:middle}.eae-cs-layout-skin3 .eae-content-switch-label{margin:0;display:inline-block}.eae-cs-layout-skin3 .eae-cs-switch-button{display:inline-block}.eae-cs-layout-skin3 .eae-cs-label{display:inline-block}.eae-cs-layout-skin3 .eae-cs-switch-label input.eae-content-toggle-switch{display:none}.eae-cs-layout-skin3 .eae-cs-switch-label input.eae-content-toggle-switch+span{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;-webkit-transition:.4s;transition:.4s;-webkit-border-radius:1.5em;border-radius:1.5em;background:#2e394d;border:2px solid #2e394d}.eae-cs-layout-skin3 .eae-cs-switch-label input.eae-content-toggle-switch+span:before{position:absolute;content:"";height:28px;width:28px;left:4px;transform:translateY(-52%);top:50%;transition:.4s;transition:.4s;-webkit-border-radius:50%;border-radius:50%;background:#88cf8f;border:2px solid #88cf8f}body.rtl .eae-cs-layout-skin3 .eae-cs-switch-label input.eae-content-toggle-switch+span:before{left:unset;right:4px}.eae-cs-layout-skin3 .eae-cs-switch-label input:checked.eae-content-toggle-switch+span:before{transform:translate(36px,-52%)}body.rtl .eae-cs-layout-skin3 .eae-cs-switch-label input:checked.eae-content-toggle-switch+span:before{transform:translate(-36px,-52%)}.eae-content-switch-label.active{color:#61ce70}.eae-cs-layout-skin4 .eae-cs-switch-wrapper{display:block}.eae-cs-layout-skin4 .eae-content-switch-label.primary-label{margin-right:30px}.eae-cs-layout-skin4 .eae-content-switch-label.secondary-label{margin-left:30px}.eae-cs-layout-skin4 .eae-content-switch-label{display:inline-block}.eae-cs-layout-skin4 .eae-cs-switch-label{position:relative;display:inline-block;width:70px;height:20px;vertical-align:middle}.eae-cs-layout-skin4 .eae-cs-label{display:inline-block}.eae-cs-layout-skin4 .eae-content-toggle-switch{display:none}.eae-cs-layout-skin4 .eae-content-toggle-switcher{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;-webkit-transition:.4s;transition:.4s;-webkit-border-radius:1.5em;border-radius:1.5em;background:#2e394d;border:2px solid #2e394d}.eae-cs-layout-skin4 .eae-cs-switch-button{display:inline-block}.eae-cs-layout-skin4 .eae-content-toggle-switcher:before{position:absolute;content:"";height:34px;width:34px;left:-12px;top:50%;transform:translateY(-50%);border-radius:50%;border:2px solid #88cf8f;background:#88cf8f;-webkit-transition:.4s;transition:.4s;-webkit-box-shadow:3px 3px 6px 1px rgba(0,0,0,.2);box-shadow:3px 3px 6px 1px rgba(0,0,0,.2)}.eae-cs-layout-skin4 .eae-cs-switch-container{padding:15px 0}body.rtl .eae-cs-layout-skin4 .eae-content-toggle-switcher:before{right:-12px!important}.eae-cs-layout-skin4 input:checked+.eae-content-toggle-switcher:before{transform:translate(55px,-50%)}body.rtl .eae-cs-layout-skin4 input:checked+.eae-content-toggle-switcher:before{transform:translate(-55px,-50%)}.eae-swiper-outer-wrapper{position:relative}.eae-swiper-container{position:relative}.eae-thumb-container{position:absolute}.eae-swiper-outer-wrapper .eae-swiper-slide{height:400px;background-size:cover;background-repeat:no-repeat;background-position:right}.eae-swiper-outer-wrapper .eae-swiper-slide .eae-slide-inner{color:#7a7a7a;display:flex;position:absolute;top:0;left:0;bottom:0;right:0;padding:20px}.eae-slide-inner .eae-slide-content{padding:20px 30px}.eae-slide-inner .eae-slide-heading{font-size:35px;font-weight:700;line-height:1}.eae-slide-inner .eae-slide-text{font-size:17px;line-height:1.4}.eae-slide-inner .eae-slide-button{display:inline-block}.eae-slide-inner .eae-slide-btn{display:inline-block;font-size:15px;padding:12px 24px;border-radius:3px;cursor:pointer;transition:all .3s}.eae-slide-inner .eae-slide-heading:not(:last-child),.eae-slide-inner .eae-slide-text:not(:last-child){margin-bottom:30px}.eae--hr-position-left .eae-slide-inner{-webkit-box-pack:start;justify-content:flex-start}.eae--hr-position-right .eae-slide-inner{-webkit-box-pack:end;justify-content:flex-end}.eae--hr-position-center .eae-slide-inner{-webkit-box-pack:center;justify-content:center}.eae--vr-position-top .eae-slide-inner{-webkit-box-pack:start;align-items:flex-start}.eae--vr-position-middle .eae-slide-inner{-webkit-box-align:center;align-items:center}.eae--vr-position-bottom .eae-slide-inner{-webkit-box-pack:end;align-items:flex-end}.eae-swiper-button-prev{left:10px}.eae-swiper-button-next{right:10px}.eae-swiper-button{position:absolute;display:inline-flex;z-index:1;cursor:pointer;color:#7a7a7a;top:50%;transform:translateY(-50%)}.eae-swiper-pagination .swiper-pagination-bullet{margin-bottom:5px!important}.eae-swiper-outer-wrapper .eae-swiper-slide .eae-background-overlay{width:100%;height:100%;position:absolute}.eae-swiper-outer-wrapper .eae-gallery-thumbs{box-sizing:border-box;text-align:center}.eae-swiper-outer-wrapper .eae-gallery-thumbs .eae-thumb-slide{background-size:cover;background-position:center;height:100%;opacity:.7}.eae-swiper-outer-wrapper .eae-gallery-thumbs .swiper-slide-thumb-active{opacity:1}.eae-chart-outer-container{position:relative}.eae-chart-overlay{width:100%;height:100%;position:absolute}.eae-table{width:100%;height:auto;margin:0;padding:0;border:none;border-collapse:collapse}.eae-table tr{border-style:none}.eae-table__body_row_column{border:none;overflow:hidden}.eae-table__head_column{transition:all .3s ease-in-out}.eae-table__body_row_column{transition:all .3s ease-in-out}.eae-head-icon{vertical-align:middle}.eae-table__head-column-wrapper .eae-head-img{width:50px;display:inline-block}.eae-table__head-column-wrapper .eae-lottie-animation svg{width:70px!important;line-height:0}.eae-head-icon-before{margin-right:5px}.eae-head-icon-after{margin-left:5px}.eae-table__col-inner{display:block}.eae-body-icon{vertical-align:middle}.eae-table__body-column-wrapper .eae-body-image{width:70px;display:inline-block}.eae-table__body-column-wrapper .eae-table-lottie-animation svg{width:70px!important;line-height:0}.eae-body-icon-before{margin-right:5px}.eae-body-icon-after{margin-left:5px}.eae-table-body__text{vertical-align:middle}.eae-table .eae-table-search-hide{display:none}.eae-table-search-wrap{padding:0;margin:0;margin-bottom:10px}.eae-search-wrap{padding:0;margin:0;width:50%;display:inline-flex;align-items:center;box-sizing:border-box;overflow:hidden;align-items:center}.eae-table-search-wrap .eae-table-search-field{margin:0;padding:0;border:0;outline:0;background-color:#eceeef;width:100%;font-size:15px;color:#7a7a7a;padding:10px;line-height:0;display:inline-block;box-sizing:border-box}.eae-table-search-wrap .eae-table-search-field:focus{background-color:#eceeef}::placeholder{opacity:.5}.eae-search-wrap .eae-search-icon{background-color:#eceeef;padding:0;margin:0;padding:10px}.eae-search-wrap .eae-search-icon i{color:#7a7A7A73;display:flex;align-items:center;left:0;font-size:20px}.eae-table__sortable .eae-table__sortable-head{cursor:pointer}.eae-table__head__wrapper{display:flex;justify-content:center;align-items:center}.eae-sort-icon{padding:0;margin:0;align-self:center}.eae-table__head-column-wrapper{flex-grow:3;display:inline-block;width:100%}.eae-icon-sort-icon{vertical-align:middle;display:inline-block}.eae-icon{padding:0;margin:0}.eae-table__head__wrapper .eae-sort-icon .eae-icon{font-size:25px}.eae-table__sortable .eae-table__head__wrapper .eae-sort-icon-down,.eae-table__sortable .eae-table__head__wrapper .eae-sort-icon-up{display:none}.eae-table__sortable .eae-table__sort-Asc .eae-table__head__wrapper .eae-icon-sort-icon,.eae-table__sortable .eae-table__sort-Desc .eae-table__head__wrapper .eae-icon-sort-icon{display:none}.eae-table__sortable .eae-table__sort-Asc .eae-table__head__wrapper .eae-sort-icon-up,.eae-table__sortable .eae-table__sort-Desc .eae-table__head__wrapper .eae-sort-icon-down{display:block}
1
+ .elementor-widget-wts-textseparator .elementor-widget-container{overflow:hidden}.wts-eae-textseparator{align-items:center;display:flex;flex-flow:row nowrap;margin:auto}body.rtl .wts-eae-textseparator{flex-direction:row-reverse}.eae-separator-icon-inner i{height:1em;width:1em;text-align:center;position:relative;display:block}.eae-separator-icon-inner i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);-ms-transform:translateX(-50%);-o-transform:translateX(-50%);transform:translateX(-50%)}.wts-eae-textseparator .eae-sep-holder{flex:1 1 auto;height:1px;min-width:10%;position:relative}.wts-eae-textseparator .eae-sep-holder .eae-sep-lines{border-top-width:1px;display:block;height:1px;position:relative;top:1px;width:100%}.eae-separator-title{margin:0;-moz-box-flex:0;flex:0 1 auto;line-height:1em;margin:0;overflow-wrap:break-word}.sep-align-right .sep-right{display:none}.sep-align-left .sep-left{display:none}.eae-icon-view-stacked i{color:#fff}.eae-icon-view-framed .eae-separator-icon-inner{border:1px solid}.eae-icon-shape-circle .eae-separator-icon-inner{border-radius:50%}.eae-separator-icon-wrapper,.eae-separator-title{margin:0 5px!important}.eae-separator-icon-inner{line-height:1}.wts-price-box-wrapper .eae-pt-heading,.wts-price-box-wrapper .eae-pt-sub-heading{margin:5px 0;text-align:center}.plan-price-shape{display:table;height:6em;margin:auto;width:6em}.eae-pt-price-box-shape-circle .plan-price-shape,.eae-pt-price-box-shape-square .plan-price-shape{border:1px solid}.eae-pt-price-box-shape-circle .plan-price-shape{border-radius:50%}.plan-price-block{padding:10px 0}.plan-price-shape-inner{display:table-cell;vertical-align:middle;padding:10px}.plan-price-shape-inner>span{display:block;font-size:1em;text-align:center}.eae-pt-feature-list{list-style:outside none none;text-align:center;margin:10px 0}.eae-pt-button-wrapper>a{text-align:center;display:inline-block;line-height:1}.eae-pt-button-wrapper{text-align:center}.wts-price-box-wrapper .heading-wrapper,.wts-price-box-wrapper .plan-features-wrapper{padding:10px 5px}.eae-pt-button-wrapper{padding:15px 0}.eae-pt-button-wrapper a{padding:5px 15px;border-radius:3px}.eae-pt-align-icon-right{float:right}.strike-feature{text-decoration:line-through}.eae-flip-box{width:100%;text-align:center}.eae-flip-box-wrapper{display:inline-block;width:100%}.eae-flip-box-inner{width:100%;height:200px;position:relative;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transform-style:preserve-3d}.eae-flip-box-inner .eae-flip-box-back,.eae-flip-box-inner .eae-flip-box-front{width:100%;height:100%;position:absolute;top:0;left:0;text-align:center;padding:10px;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:all .6s ease 0s;-moz-transition:all .6s ease 0s;-ms-transition:all .6s ease 0s;-o-transition:all .6s ease 0s;transition:all .6s ease 0s}.eae-flip-box-front{z-index:2}.eae-flip-box-back{z-index:1}.eae-fb-animate-vertical .eae-flip-box-inner .eae-flip-box-front{-webkit-transform:perspective(1000px) rotateX(0);-ms-transform:perspective(1000px) rotateX(0);transform:perspective(1000px) rotateX(0)}.eae-fb-animate-vertical .eae-flip-box-inner .eae-flip-box-back{-webkit-transform:perspective(1000px) rotateX(180deg);transform:perspective(1000px) rotateX(180deg);-ms-transform:perspective(1000px) rotateX(180deg)}.eae-fb-animate-vertical .eae-flip-box-inner:hover .eae-flip-box-front{-webkit-transform:perspective(1000px) rotateX(180deg);transform:perspective(1000px) rotateX(180deg);-ms-transform:perspective(1000px) rotateX(180deg)}.eae-fb-animate-vertical .eae-flip-box-inner:hover .eae-flip-box-back{-webkit-transform:perspective(1000px) rotateX(0);transform:perspective(1000px) rotateX(0);-ms-transform:perspective(1000px) rotateX(0)}.eae-fb-animate-horizontal .eae-flip-box-inner .eae-flip-box-front{-webkit-transform:perspective(1000px) rotateY(0);transform:perspective(1000px) rotateY(0);-ms-transform:perspective(1000px) rotateY(0)}.eae-fb-animate-horizontal .eae-flip-box-inner .eae-flip-box-back{-webkit-transform:perspective(1000px) rotateY(180deg);transform:perspective(1000px) rotateY(180deg);-ms-transform:perspective(1000px) rotateY(180deg)}.eae-fb-animate-horizontal .eae-flip-box-inner:hover .eae-flip-box-front{-webkit-transform:perspective(1000px) rotateY(180deg);transform:perspective(1000px) rotateY(180deg);-ms-transform:perspective(1000px) rotateY(180deg)}.eae-fb-animate-horizontal .eae-flip-box-inner:hover .eae-flip-box-back{-webkit-transform:perspective(1000px) rotateY(0);transform:perspective(1000px) rotateY(0);-ms-transform:perspective(1000px) rotateY(0)}.eae-fb-animate-fade .eae-flip-box-inner .eae-flip-box-front{opacity:1}.eae-fb-animate-fade .eae-flip-box-inner .eae-flip-box-back{opacity:0}.eae-fb-animate-fade .eae-flip-box-inner:hover .eae-flip-box-front{opacity:0}.eae-fb-animate-fade .eae-flip-box-inner:hover .eae-flip-box-back{opacity:1}.eae-flip-box-wrapper:focus .eae-flip-box-back,.eae-flip-box-wrapper:hover .eae-flip-box-back{z-index:2}.eae-flip-box-wrapper:focus .eae-flip-box-front,.eae-flip-box-wrapper:hover .eae-flip-box-front{z-index:1}.fade .eae-flip-box-wrapper .eae-flip-box-front{opacity:1;transition:1s}.fade .eae-flip-box-wrapper .eae-flip-box-back{opacity:0;transition:1s}.fade .eae-flip-box-wrapper:focus .eae-flip-box-front,.fade .eae-flip-box-wrapper:hover .eae-flip-box-front{opacity:0}.fade .eae-flip-box-wrapper:focus .eae-flip-box-back,.fade .eae-flip-box-wrapper:hover .eae-flip-box-back{opacity:1}.eae-fb-animate-flip .eae-flip-box-wrapper{perspective:800px}.eae-fb-animate-flip .eae-flip-box-inner{transform-style:preserve-3d;transform:rotateX(0) rotateY(0) rotateZ(0);transition:1s}.eae-fb-animate-flip .eae-flip-box-front{transform:translate3d(0,0,1px)}.eae-fb-animate-flip .eae-flip-box-back{transform:rotateY(180deg) translate3d(0,0,0)}.eae-fb-animate-flip .eae-flip-box-wrapper:focus .eae-flip-box-inner,.eae-fb-animate-flip .eae-flip-box-wrapper:hover .eae-flip-box-inner{transform:rotateY(180deg)}.up .eae-flip-box-front{transform:translate3d(0,0,1px)}.up .eae-flip-box-back{transform:rotateX(180deg) translate3d(0,0,0)}.up .eae-flip-box-wrapper:focus .eae-flip-box-inner,.up .eae-flip-box-wrapper:hover .eae-flip-box-inner{transform:rotateX(180deg)}.box .eae-flip-box-front{transform:translate3d(0,0,100px) scale(.85,.85)}.box .eae-flip-box-back{transform:rotateY(180deg) translate3d(0,0,100px) scale(.85,.85)}.box.up .eae-flip-box-back{transform:rotateX(180deg) translate3d(0,0,100px) scale(.85,.85)}.hideback .eae-flip-box-back,.hideback .eae-flip-box-front{backface-visibility:hidden}.eae-fb-animate-nananana .eae-flip-box-wrapper:focus .eae-flip-box-front,.eae-fb-animate-nananana .eae-flip-box-wrapper:hover .eae-flip-box-front{z-index:10;animation:batman 1s 2 alternate linear}.eae-fb-animate-flipcard .eae-flip-box-back,.eae-fb-animate-flipcard .eae-flip-box-front{transition:transform .4s ease;transform-origin:center center -150px;-webkit-transform-origin:center center -150px}.flipcard-rotate-top-down .eae-flip-box-front{transform:perspective(0) rotateX(0) rotateY(0) rotateZ(0)}.flipcard-rotate-top-down .eae-flip-box-back{transform:perspective(0) rotateX(90deg) rotateY(0) rotateZ(0)}.eae-fb-animate-flipcard.flipcard-rotate-top-down .eae-flip-box-wrapper:hover .eae-flip-box-front{transform:perspective(0) rotateX(-90deg) rotateY(0) rotateZ(0)}.eae-fb-animate-flipcard.flipcard-rotate-top-down .eae-flip-box-wrapper:hover .eae-flip-box-back{z-index:99999;transform:perspective(0) rotateX(0) rotateY(0) rotateZ(0)}.flipcard-rotate-down-top .eae-flip-box-front{transform:perspective(0) rotateX(0) rotateY(0) rotateZ(0)}.flipcard-rotate-down-top .eae-flip-box-back{transform:perspective(0) rotateX(-90deg) rotateY(0) rotateZ(0)}.eae-fb-animate-flipcard.flipcard-rotate-down-top .eae-flip-box-wrapper:hover .eae-flip-box-front{transform:perspective(0) rotateX(90deg) rotateY(0) rotateZ(0)}.eae-fb-animate-flipcard.flipcard-rotate-down-top .eae-flip-box-wrapper:hover .eae-flip-box-back{z-index:99999;transform:perspective(0) rotateX(0) rotateY(0) rotateZ(0)}.flipcard-rotate-left-right .eae-flip-box-front{transform:perspective(0) rotateX(0) rotateY(0) rotateZ(0)}.flipcard-rotate-left-right .eae-flip-box-back{transform:perspective(0) rotateX(0) rotateY(-90deg) rotateZ(0)}.eae-fb-animate-flipcard.flipcard-rotate-left-right .eae-flip-box-wrapper:hover .eae-flip-box-front{transform:perspective(0) rotateX(0) rotateY(90deg) rotateZ(0)}.eae-fb-animate-flipcard.flipcard-rotate-left-right .eae-flip-box-wrapper:hover .eae-flip-box-back{z-index:99999;transform:perspective(0) rotateX(0) rotateY(0) rotateZ(0)}.flipcard-rotate-right-left .eae-flip-box-front{transform:perspective(0) rotateX(0) rotateY(0) rotateZ(0)}.flipcard-rotate-right-left .eae-flip-box-back{transform:perspective(0) rotateX(0) rotateY(90deg) rotateZ(0)}.eae-fb-animate-flipcard.flipcard-rotate-right-left .eae-flip-box-wrapper:hover .eae-flip-box-front{transform:perspective(0) rotateX(0) rotateY(-90deg) rotateZ(0)}.eae-fb-animate-flipcard.flipcard-rotate-right-left .eae-flip-box-wrapper:hover .eae-flip-box-back{z-index:99999;transform:perspective(0) rotateX(0) rotateY(0) rotateZ(0)}@keyframes batman{0%{transform:scale(1,1) rotateZ(0)}100%{transform:scale(0,0) rotateZ(720deg);opacity:0}}.eae-flip-box-back i,.eae-flip-box-front i{font-size:32px;height:1em;width:1em;position:relative;display:block}.eae-flip-box-back i:before,.eae-flip-box-front i:before{position:absolute;left:50%;-webkit-transform:translate(-50%);-moz-transform:translate(-50%);-ms-transform:translate(-50%);-o-transform:translate(-50%);transform:translate(-50%)}.eae-fb-icon-view-framed{border:1px solid #92be43}.eae-fb-icon-shape-circle{border-radius:50%}.eae-flip-box-wrapper .icon-wrapper{display:inline-block;padding:10px;line-height:1}.eae-flip-box-wrapper .back-icon-title,.eae-flip-box-wrapper .front-icon-title{margin:10px auto;color:#fff}.eae-flip-box-wrapper .flipbox-content{display:block;position:relative;top:50%;transform:translateY(-50%);-ms-transform:translateY(-50%)}.flipbox-content p{margin-bottom:10px}.eae-fb-button{display:inline-block;padding:5px 10px}.eae-flip-box-front{background:#a0ce4e}.eae-flip-box-back{background:#73b9dc}@media only screen and (max-width:768px){.eae-flip-box-back,.eae-flip-box-front,.flipbox-content{cursor:pointer;overflow:visible!important;transform-style:preserve-3d;-webkit-transform-style:preserve-3d}}.elementor-widget-wts-shape-separator svg{display:block}.wts-eae-pl-wrapper ul{margin:0}.wts-eae-pl-wrapper ul li{list-style:none;overflow:hidden;margin-bottom:10px}.eae-pl-img-align-none .eae-pl-image-wrapper a{text-align:center}.eae-pl-title{margin:0}.eae-pl-title a{display:block}.eae-pl-readmore a{display:inline-block;border-radius:2px;color:#fff;padding:4px 8px}.eae-at-animation-text-wrapper{display:inline-block;position:relative;text-align:left}.eae-at-animation-text-wrapper .eae-at-animation-text{display:inline-block;position:absolute;white-space:nowrap;left:0;top:0}[data-elementor-device-mode=mobile] .eae-at-animation-text{white-space:normal}.eae-at-animation-text-wrapper .eae-at-animation-text.is-visible{position:relative}.no-js .eae-at-animation-text-wrapper .eae-at-animation-text{opacity:0}.no-js .eae-at-animation-text-wrapper .eae-at-animation-text.is-visible{opacity:1}.eae-animtext-wrapper{font-size:40px}.eae-st-rest-text{display:inline-block}.eae-st-split-text{display:inline-block}body.rtl .eae-st-transform-text-title{display:flex;flex-direction:row-reverse}body.rtl .eae-text-align-left .eae-st-transform-text-title{justify-content:flex-start}body.rtl .eae-text-align-right .eae-st-transform-text-title{justify-content:flex-end}body.rtl .eae-text-align-center .eae-st-transform-text-title{justify-content:center}.eae-at-animation.type .eae-at-animation-text-wrapper{vertical-align:bottom;overflow:hidden}.eae-at-animation.type .eae-at-animation-text-wrapper::after{content:"";position:absolute;right:0;top:50%;bottom:auto;-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);height:90%;width:1px}.eae-at-animation.type .eae-at-animation-text-wrapper.waiting::after{-webkit-animation:cd-pulse 1s infinite;-moz-animation:cd-pulse 1s infinite;animation:cd-pulse 1s infinite}.eae-at-animation.type .eae-at-animation-text-wrapper.selected::after{visibility:hidden}.eae-at-animation.type .eae-at-animation-text{visibility:hidden}.eae-at-animation.type .eae-at-animation-text.is-visible{visibility:visible}.eae-at-animation.type i{position:absolute;visibility:hidden}.eae-at-animation.type i.in{position:relative;visibility:visible}@-webkit-keyframes cd-pulse{0%{-webkit-transform:translateY(-50%) scale(1);opacity:1}40%{-webkit-transform:translateY(-50%) scale(.9);opacity:0}100%{-webkit-transform:translateY(-50%) scale(0);opacity:0}}@-moz-keyframes cd-pulse{0%{-moz-transform:translateY(-50%) scale(1);opacity:1}40%{-moz-transform:translateY(-50%) scale(.9);opacity:0}100%{-moz-transform:translateY(-50%) scale(0);opacity:0}}@keyframes cd-pulse{0%{-webkit-transform:translateY(-50%) scale(1);-moz-transform:translateY(-50%) scale(1);-ms-transform:translateY(-50%) scale(1);-o-transform:translateY(-50%) scale(1);transform:translateY(-50%) scale(1);opacity:1}40%{-webkit-transform:translateY(-50%) scale(.9);-moz-transform:translateY(-50%) scale(.9);-ms-transform:translateY(-50%) scale(.9);-o-transform:translateY(-50%) scale(.9);transform:translateY(-50%) scale(.9);opacity:0}100%{-webkit-transform:translateY(-50%) scale(0);-moz-transform:translateY(-50%) scale(0);-ms-transform:translateY(-50%) scale(0);-o-transform:translateY(-50%) scale(0);transform:translateY(-50%) scale(0);opacity:0}}.eae-img-comp-container{width:100%;position:relative;text-align:center}.eae-img-comp-container img{vertical-align:middle}.eae-img-comp-img{position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden;transform:translateZ(0);backface-visibility:hidden}.eae-img-comp-img img{display:block;max-width:100%;width:100%}.eae-img-comp-slider{position:absolute;z-index:9;width:40px;height:40px;background-color:#2196f3;opacity:1;border-radius:50%}.icon-horizontal{cursor:ew-resize}.icon-vertical{cursor:n-resize}.mode-horizontal .eae-img-comp-overlay img{position:absolute;left:0;top:0;display:block;width:auto;height:100%!important;max-width:none!important}.mode-vertical .eae-img-comp-overlay img{position:absolute;left:0;top:0;display:block;width:100%;height:auto!important;max-width:none!important}.eae-img-comp-slider svg,.eae-slider-icon{top:50%;transform:translateY(-50%) translateX(-50%);position:absolute;left:50%;color:#fff}.elementor-widget-wts-ab-image{text-align:center}.elementor-widget-wts-ab-image .elementor-widget-container{display:inline-block;margin:0 auto!important;overflow:hidden}.eae-text-before{position:absolute!important;padding:10px;transition:transform .3s .7s,opacity .3s .7s;color:#d36118;z-index:0;background:rgba(255,255,255,.5);margin:20px}.eae-text-after{position:absolute!important;padding:10px;transition:transform .3s .7s,opacity .3s .7s;color:#d36118;z-index:0;background:rgba(255,255,255,.5);margin:20px}.divTest{display:inline-block;background-color:#00a0d2;padding:20px}.eae-particle-wrapper{position:absolute;left:0;top:0}.eae-particle-wrapper.eae-particle-area{width:100%;height:100%}body:not(.elementor-editor-active) .eae-particle-wrapper{width:100%;height:100%}body:not(.elementor-editor-active) .eae-particle-wrapper .particles-js-canvas-el{height:100%;position:absolute;z-index:0}body:not(.elementor-editor-active) .eae-particle-wrapper .tsparticles-canvas-el{height:100%;position:absolute!important;z-index:0!important}body.elementor-editor-active .eae-particle-areas .tsparticles-canvas-el{z-index:0!important;height:100%;width:100%;position:absolute!important}.eae-section-bs{position:absolute;width:100%;height:100%;top:0}.eae-section-bs-inner{width:100%;height:100%!important}.eae-popup.mfp-bg{top:0;left:0;width:100%;height:100%;z-index:1042;overflow:hidden;position:fixed;background:#0b0b0b;opacity:.8}.eae-popup-link{padding:12px 24px;color:#fff;display:inline-flex;line-height:1}.eae-popup-link svg{fill:#fff}.eae-popup-link:hover{color:#fff}.eae-popup.mfp-wrap{top:0;left:0;width:100%;height:100%;z-index:1043;position:fixed;outline:0!important;-webkit-backface-visibility:hidden}.eae-popup .mfp-container{text-align:center;position:absolute;width:100%;height:100%;left:0;top:0;padding:0 8px;box-sizing:border-box}.eae-popup .mfp-container:before{content:"";display:inline-block;height:100%;vertical-align:middle}.eae-popup .mfp-align-top .mfp-container:before{display:none}.eae-popup .mfp-content{position:relative;display:inline-block;vertical-align:middle;margin:0 auto;text-align:left;z-index:1045}.eae-modal-content{padding:20px}.eae-pop-btn-align-left .eae-popup-wrapper{text-align:left}.eae-pop-btn-align-right .eae-popup-wrapper{text-align:right}.eae-pop-btn-align-center .eae-popup-wrapper{text-align:center}.eae-pop-btn-align-justify .eae-popup-wrapper{text-align:center}.eae-pop-btn-align-justify .eae-popup-wrapper a{display:block}.eae-popup .mfp-ajax-holder .mfp-content,.eae-popup .mfp-inline-holder .mfp-content{width:50%;background-color:#fff;cursor:auto;overflow:hidden}.eae-popup .mfp-ajax-cur{cursor:progress}.eae-popup .mfp-zoom-out-cur,.eae-popup .mfp-zoom-out-cur .mfp-image-holder .eae-close{cursor:-moz-zoom-out;cursor:-webkit-zoom-out;cursor:zoom-out}.eae-popup .mfp-zoom{cursor:pointer;cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in}.eae-popup.mfp-auto-cursor .mfp-content{cursor:auto}.eae-popup .eae-close,.eae-popup .mfp-arrow,.eae-popup .mfp-counter,.eae-popup .mfp-preloader{-webkit-user-select:none;-moz-user-select:none;user-select:none}.mfp-loading.mfp-figure{display:none}.mfp-hide{display:none!important}.eae-popup .mfp-preloader{color:#ccc;position:absolute;top:50%;width:auto;text-align:center;margin-top:-.8em;left:8px;right:8px;z-index:1044}.eae-popup .mfp-preloader a{color:#ccc}.eae-popup .mfp-preloader a:hover{color:#fff}.mfp-s-ready .mfp-preloader{display:none}.mfp-s-error .mfp-content{display:none}button.eae-close,button.mfp-arrow{overflow:visible;cursor:pointer;background:0 0;border:0;-webkit-appearance:none;display:block;outline:0;padding:0;z-index:1046;box-shadow:none;touch-action:manipulation}button::-moz-focus-inner{padding:0;border:0}.eae-popup .eae-close{width:28px;height:28px;line-height:1em;position:absolute;right:10px;top:10px;text-decoration:none;text-align:center;opacity:1;color:#fff;font-size:28px;z-index:1500}.eae-close:focus,.eae-close:hover{opacity:1;cursor:pointer}.eae-close:active{top:1px}.eae-close:before{top:50%;left:50%;position:absolute;transform:translate(-50%,-50%)}.eae-popup.eae-close-btn-in .eae-close{color:#fff}.mfp-iframe-holder .eae-close,.mfp-image-holder .eae-close{color:#fff;right:-6px;text-align:right;padding-right:6px;width:100%}.mfp-counter{position:absolute;top:0;right:0;color:#ccc;font-size:12px;line-height:18px;white-space:nowrap}.mfp-arrow{position:absolute;opacity:.65;margin:0;top:50%;margin-top:-55px;padding:0;width:90px;height:110px;-webkit-tap-highlight-color:transparent}.mfp-arrow:active{margin-top:-54px}.mfp-arrow:focus,.mfp-arrow:hover{opacity:1}.mfp-arrow:after,.mfp-arrow:before{content:"";display:block;width:0;height:0;position:absolute;left:0;top:0;margin-top:35px;margin-left:35px;border:medium inset transparent}.mfp-arrow:after{border-top-width:13px;border-bottom-width:13px;top:8px}.mfp-arrow:before{border-top-width:21px;border-bottom-width:21px;opacity:.7}.mfp-arrow-left{left:0}.mfp-arrow-left:after{border-right:17px solid #fff;margin-left:31px}.mfp-arrow-left:before{margin-left:25px;border-right:27px solid #3f3f3f}.mfp-arrow-right{right:0}.mfp-arrow-right:after{border-left:17px solid #fff;margin-left:39px}.mfp-arrow-right:before{border-left:27px solid #3f3f3f}.mfp-iframe-holder{padding-top:40px;padding-bottom:40px}.mfp-iframe-holder .mfp-content{line-height:0;width:100%;max-width:900px}.mfp-iframe-holder .eae-close{top:-40px}.mfp-iframe-scaler{width:100%;height:0;overflow:hidden;padding-top:56.25%}.mfp-iframe-scaler iframe{position:absolute;display:block;top:0;left:0;width:100%;height:100%;box-shadow:0 0 8px rgba(0,0,0,.6);background:#000}img.mfp-img{width:auto;max-width:100%;height:auto;display:block;line-height:0;box-sizing:border-box;padding:40px 0 40px;margin:0 auto}.eae-popup .mfp-figure{line-height:0}.eae-popup .mfp-figure:after{content:"";position:absolute;left:0;top:40px;bottom:40px;display:block;right:0;width:auto;height:auto;z-index:-1;box-shadow:0 0 8px rgba(0,0,0,.6);background:#444}.eae-popup .mfp-figure small{color:#bdbdbd;display:block;font-size:12px;line-height:14px}.eae-popup .mfp-figure figure{margin:0}.eae-popup .mfp-bottom-bar{margin-top:-36px;position:absolute;top:100%;left:0;width:100%;cursor:auto}.eae-popup .mfp-title{text-align:left;line-height:1;word-wrap:break-word;color:#fff;background-color:#4054b2;padding:20px 20px 20px 20px}.eae-popup .mfp-image-holder .mfp-content{max-width:100%}.eae-popup .mfp-gallery .mfp-image-holder .mfp-figure{cursor:pointer}@media screen and (max-width:800px) and (orientation:landscape),screen and (max-height:300px){.mfp-img-mobile .mfp-image-holder{padding-left:0;padding-right:0}.mfp-img-mobile img.mfp-img{padding:0}.mfp-img-mobile .mfp-figure:after{top:0;bottom:0}.mfp-img-mobile .mfp-figure small{display:inline;margin-left:5px}.mfp-img-mobile .mfp-bottom-bar{background:rgba(0,0,0,.6);bottom:0;margin:0;top:auto;padding:3px 5px;position:fixed;box-sizing:border-box}.mfp-img-mobile .mfp-bottom-bar:empty{padding:0}.mfp-img-mobile .mfp-counter{right:5px;top:3px}.mfp-img-mobile .eae-close{top:0;right:0;width:35px;height:35px;line-height:35px;background:rgba(0,0,0,.6);position:fixed;text-align:center;padding:0}}.elementor-element.eae-animated-gradient-yes,.elementor-element.eae-animated-gradient-yes .animated-gradient{background-size:400% 400%!important;-webkit-animation:AnimateGradient 15s ease-in-out infinite;-moz-animation:AnimateGradient 15s ease-in-out infinite;animation:AnimateGradient 15s ease-in-out infinite}.animated-gradient{position:absolute;top:0;left:0;height:100%;width:100%}@-webkit-keyframes AnimateGradient{0%{background-position:0 50%}50%{background-position:100% 50%}100%{background-position:0 50%}}@-moz-keyframes AnimateGradient{0%{background-position:0 50%}50%{background-position:100% 50%}100%{background-position:0 50%}}@keyframes AnimateGradient{0%{background-position:0 50%}50%{background-position:100% 50%}100%{background-position:0 50%}}.eae-swiper-outer-wrapper .swiper-slide{height:auto;overflow:inherit}.eae-swiper-outer-wrapper .swiper-slide-wrapper,.eae-swiper-outer-wrapper .testimonial-wrapper{height:100%}.eae-grid{display:flex;flex-wrap:wrap;flex-direction:row}.eae-masonry- .eae-grid-item{position:relative;height:100%}.eae-masonry- .eae-grid-item .testimonial-wrapper{height:100%}.eae-grid-container{transition:.1s all ease}.eae-grid-container{display:inline-block}.wrapper .content{margin:10px 0}.skin-2.testimonial-wrapper{display:flex;flex-direction:column;background-color:#9c989821;min-height:300px;padding:10px 20px;box-shadow:0 0 5px rgba(0,0,0,.15);color:#696969}.skin-2 .content-wrapper{padding:10px;position:relative;background-color:#fff;border-radius:10px;color:#77778e}.skin-2 i.after-content,.skin-2 i.before-content{position:absolute}.skin-2 i.before-content{top:10px;left:20px}.skin-2 i.after-content{bottom:10px;right:20px}.skin-2 blockquote{position:relative;font-size:14px;padding:10px;font-weight:500;text-align:left;margin:0;line-height:1.6em;font-style:italic}.skin-2 blockquote::after,.skin-2 blockquote::before{font-family:FontAwesome;content:"\201C";position:absolute;font-size:50px;opacity:.3;font-style:normal}.skin-2 blockquote::before{top:10px;left:20px}.skin-2 blockquote::after{content:"\201D";right:20px}.skin-2 .image-wrapper{position:relative;max-width:100%;text-align:center}.skin-2 img{width:100px;border-radius:25%}.skin-2 .detail-wrapper{text-align:center}.skin-2 .company,.skin-2 .designation,.skin-2 .rating-wrapper,.skin-2 .title{padding:5px 0}.skin-2 .rating-wrapper{color:navy}.skin-2 .title{font-weight:800;color:#000}.skin-2 blockquote p{margin:10px 0!important}.skin-1.testimonial-wrapper{display:flex;flex-direction:column;background-color:#fff;box-shadow:0 0 5px rgba(0,0,0,.15);color:#000}.skin-1 .content-wrapper{order:0}.skin-1 .image-wrapper{order:1;text-align:center;margin:15px 0}.skin-1 .detail-wrapper{order:2}.skin-1 .content-wrapper{padding:10px;position:relative}.skin-1 i.after-content,.skin-1 i.before-content{position:absolute}.skin-1 i.before-content{top:10px;left:20px}.skin-1 i.after-content{bottom:10px;right:20px}.skin-1 blockquote{position:relative;background-color:#fff;font-size:14px;padding:10px;font-weight:500;text-align:left;margin:0;line-height:1.6em;font-style:italic}.skin-1 blockquote::after,.skin-1 blockquote::before{font-family:FontAwesome;content:"\201C";position:absolute;font-size:50px;opacity:.3;font-style:normal}.skin-1 blockquote::before{top:10px;left:20px}.skin-1 blockquote::after{content:"\201D";right:20px}.skin-1 .image-wrapper{position:relative;max-width:100%}.skin-1 img{width:100px;height:auto;border-radius:50%}.skin-1 .detail-wrapper{display:flex;flex-direction:row-reverse;justify-content:space-between;padding:10px;background-color:rgba(157,163,156,.18)}.skin-1 .designation,.skin-1 .rating-wrapper,.skin-1 .title{margin:0 5px}.skin-1 .title-wrapper{display:flex;flex-direction:row}.skin-1 .rating-wrapper{color:#fecc1f}.skin-4.testimonial-wrapper{flex-direction:column;display:flex;background-color:#bfbfb6bd;min-height:300px;padding:10px 0;box-shadow:0 0 5px rgba(0,0,0,.15);color:#77778e}.skin-4 .content-wrapper{padding:10px;position:relative}.skin-4 .content-wrapper{order:2;color:#3c3c3c}.skin-4 i.after-content,.skin-4 i.before-content{position:absolute}.skin-4 i.before-content{top:10px;left:20px}.skin-4 i.after-content{bottom:10px;right:20px}.skin-4 blockquote{position:relative;font-size:14px;padding:10px;font-weight:500;text-align:left;margin:0;line-height:1.6em;font-style:italic}.skin-4 blockquote::after,.skin-4 blockquote::before{font-family:FontAwesome;content:"\201C";position:absolute;font-size:50px;opacity:.3;font-style:normal}.skin-4 blockquote::before{top:10px;left:20px}.skin-4 blockquote::after{content:"\201D";right:20px}.skin-4 .image-wrapper{position:relative;max-width:100%;text-align:center}.skin-4 img{width:100px;border-radius:50%}.skin-4 .detail-wrapper{text-align:center}.skin-2 .designation,.skin-2 .title,.skin-4 .rating-wrapper{padding:5px 0}.skin-4 .rating-wrapper{color:#690a69}.skin-4 .title{font-weight:800;color:#000}.skin-3.testimonial-wrapper{display:flex;flex-direction:row;background-color:#9c989821;box-shadow:0 0 5px rgba(0,0,0,.15);color:#000;overflow:hidden}.skin-3 .content-section{display:flex;flex-direction:column;align-self:center}.skin-3 .content-wrapper{padding:10px;position:relative}.skin-2 i.after-content,.skin-3 i.before-content{position:absolute}.skin-3 i.before-content{top:10px;left:20px}.skin-3 i.after-content{bottom:10px;right:20px}.skin-3 blockquote{position:relative;font-size:18px;padding:10px;font-weight:500;text-align:left;margin:0;line-height:1.6em;font-style:italic}.skin-3 blockquote::after,.skin-3 blockquote::before{font-family:FontAwesome;content:"\201C";position:absolute;font-size:50px;opacity:.3;font-style:normal}.skin-3 blockquote::before{top:10px;left:20px}.skin-3 blockquote::after{content:"\201D";right:20px}.skin-3 .image-wrapper{position:relative;max-width:30%;max-height:250px;text-align:center;align-self:center}.skin-3 img{width:100%}.testimonial-wrapper .skin-3 .eae-person-avatar{border-radius:50%}.skin-3 .detail-wrapper{text-align:left;padding-left:20px}.skin-3 .designation,.skin-3 .rating-wrapper,.skin-3 .title{padding:3px 0}.skin-3 .rating-wrapper{color:#800040}.skin-3 .title{font-weight:800}.eae-swiper-outer-wrapper .swiper-button-prev{-webkit-mask:url(arrow-left.svg) no-repeat 100% 100%;mask:url(arrow-left.svg) no-repeat 100% 100%;-webkit-mask-size:cover;mask-size:cover;background-image:none;background-color:#007aff;transform:translateY(-50%);margin-top:0}.eae-swiper-outer-wrapper .swiper-container-rtl .swiper-button-prev{-webkit-mask:url(arrow-right.svg) no-repeat 100% 100%;mask:url(arrow-right.svg) no-repeat 100% 100%}.eae-swiper-outer-wrapper .swiper-button-next{-webkit-mask:url(arrow-right.svg) no-repeat 100% 100%;mask:url(arrow-right.svg) no-repeat 100% 100%;-webkit-mask-size:cover;mask-size:cover;background-image:none;background-color:#007aff;transform:translateY(-50%);margin-top:0}.eae-swiper-outer-wrapper .swiper-container-rtl .swiper-button-next{-webkit-mask:url(arrow-left.svg) no-repeat 100% 100%;mask:url(arrow-left.svg) no-repeat 100% 100%}.elementor-widget-wts-testimonial-slider .eae-swiper-outer-wrapper .swiper-button-next,.elementor-widget-wts-testimonial-slider .eae-swiper-outer-wrapper .swiper-button-prev{-webkit-mask:none;mask:none;-webkit-mask-size:unset;mask-size:unset;background-image:none;background-color:unset;width:auto;height:auto;transform:translateY(-50%);margin-top:0}.swiper-container .swiper-button-next i,.swiper-container .swiper-button-prev i{width:1em;height:1em;text-align:center;position:relative}.elementor-widget-wts-testimonial-slider .eae-swiper-outer-wrapper .eae-swiper-button-wrapper{position:absolute;height:auto;line-height:0}.eae-hpos-right.eae-vpos-top .eae-swiper-button-wrapper{bottom:auto;top:0;width:auto;right:0}.eae-vpos-top.eae-hpos-left .eae-swiper-button-wrapper{bottom:auto;top:0;width:auto;left:0}.eeae-hpos-right.eae-vpos-bottom .eae-swiper-button-wrapper{bottom:0;top:auto;width:auto;right:0}.eae-vpos-bottom.eae-hpos-left .eae-swiper-button-wrapper{bottom:0;top:auto;width:auto;left:0}.eae-hpos-right.eae-vpos-middle .eae-swiper-button-wrapper{bottom:auto;top:50%;width:auto;right:0}.eae-hpos-left.eae-vpos-middle .eae-swiper-button-wrapper{bottom:auto;top:50%;width:auto;left:0}.eae-hpos-left .swiper-button-next,.eae-hpos-left .swiper-button-prev,.eae-hpos-right .swiper-button-next,.eae-hpos-right .swiper-button-prev{position:relative;display:inline-block;right:auto;left:auto}.eae-hpos-right.eae-vpos-bottom .swiper-button-next,.eae-hpos-right.eae-vpos-bottom .swiper-button-prev{top:auto;bottom:0;transform:unset}.eae-hpos-right.eae-vpos-top .swiper-button-next,.eae-hpos-right.eae-vpos-top .swiper-button-prev{top:0;bottom:auto;transform:unset}.eae-hpos-left.eae-vpos-top .swiper-button-next,.eae-hpos-left.eae-vpos-top .swiper-button-prev{top:0;bottom:auto;transform:unset}.eae-hpos-left.eae-vpos-bottom .swiper-button-next,.eae-hpos-left.eae-vpos-bottom .swiper-button-prev{top:auto;bottom:0;transform:unset}.eae-hpos-center.eae-vpos-bottom .swiper-button-next,.eae-hpos-center.eae-vpos-bottom .swiper-button-prev{top:auto;bottom:0;transform:unset}.eae-hpos-center.eae-vpos-top .swiper-button-next,.eae-hpos-center.eae-vpos-top .swiper-button-prev{top:0;bottom:auto;transform:unset}@media all and (max-width:900px){.mfp-arrow{-webkit-transform:scale(.75);transform:scale(.75)}.mfp-arrow-left{-webkit-transform-origin:0;transform-origin:0}.mfp-arrow-right{-webkit-transform-origin:100%;transform-origin:100%}.mfp-container{padding-left:6px;padding-right:6px}}.eae-info-circle{position:relative;width:90%;margin:0 auto;border-radius:50%;display:block}.eae-info-circle:before{content:"";display:block;position:absolute;top:4%;left:4%;width:92%;height:92%;border-radius:50%;z-index:1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;pointer-events:none}.eae-info-circle:after{content:"";display:block;padding-top:100%}.eae-info-circle .eae-ic-icon-wrap{position:absolute;display:inline-block;top:50%;left:50%;z-index:2;line-height:1em;vertical-align:middle;overflow:hidden;max-width:100%}.eae-info-circle .eae-info-circle-item{top:0;left:0;width:100%;height:100%;display:block}.eae-info-circle .eae-info-circle-item.eae-active .eae-info-circle-item__content-wrap{visibility:visible;opacity:1;display:flex}.eae-info-circle .eae-info-circle-item__content-wrap{visibility:visible;display:none;height:91%;width:91%;opacity:0;top:50%;transform:translateY(-50%) translateX(-50%);position:absolute;left:50%;border-radius:50%;overflow:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.eae-info-circle .eae-info-circle-item__content-wrap:before{content:"";display:inline-block;height:100%;vertical-align:middle}.eae-info-circle .eae-info-circle-item__content{display:inline-block;top:50%;transform:translateY(-50%) translateX(-50%);position:absolute;left:50%;vertical-align:middle;z-index:1;max-height:100%;overflow:auto;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;text-align:center;width:75%}@media screen and (max-width:767px){.eae-info-circle.eae-info-circle .eae-info-circle-item__content-wrap:before{display:none}.eae-info-circle:after,.eae-info-circle:before{display:none}.eae-info-circle{width:100%!important}.eae-info-circle-wrapper:after,.eae-info-circle-wrapper:before{display:none}.eae-info-circle .eae-ic-icon-wrap{display:block;text-align:center;position:relative!important;left:unset!important;margin-left:0!important;margin-top:0!important;margin-bottom:10px}.eae-info-circle-item{position:relative!important;border-radius:0!important;padding:0;margin:10px 0}.eae-info-circle .eae-info-circle-item__content-wrap{visibility:visible;opacity:1!important;display:flex!important;border-radius:0!important;border:none!important;margin:0!important;padding-right:0!important;padding-left:0!important;padding-bottom:0!important;width:100%;height:auto;line-height:1.5em;position:relative;top:unset;left:unset;transform:unset}.eae-info-circle .eae-info-circle-item__content{position:relative;top:unset;left:unset;transform:unset;width:100%;padding:10px}}.eae-icon-wrap i{height:1.25em;width:1.25em;line-height:1.25em;display:block}.eae-icon-wrap i img{top:50%;left:50%;transform:translateX(-50%) translateY(-50%);position:absolute}.eae-icon{display:inline-block;text-align:center;vertical-align:middle;max-width:100%;overflow:hidden;padding:10px}.eae-icon-shape-circle:not(.elementor-element){border-radius:50%}.eae-icon-view-framed:not(.elementor-element){border-width:1px;border-style:solid}.eae-icon-wrapper{display:flex}.eae-icon-wrapper .eae-icon{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);line-height:1}.eae-timeline{position:relative;display:inline-block;width:100%}.eae-timline-progress-bar{width:4px;background-color:#f45b69;top:0;bottom:50px;position:absolute;transform:translateX(-50%)}.eae-timeline-item{position:relative;display:flex;flex-direction:row;padding-bottom:50px}.eae-timeline-item:last-child{padding-bottom:0!important}.eae-tl-top .eae-timeline-item{align-items:flex-start}.eae-tl-top .eae-tl-item-content::before{top:10px}.eae-timeline-item.image-position-row .eae-tl-item-image,.eae-timeline-item.image-position-row-reverse .eae-tl-item-image{margin-top:0;margin-bottom:0}.eae-tl-item-meta-wrapper-inner{display:none}.eae-tl-bottom .eae-timeline-item{align-items:flex-end}.eae-tl-bottom .eae-tl-item-content::before{bottom:10px}.eae-tl-center .eae-timeline-item{align-items:center}.eae-tl-center .eae-tl-item-content::before{bottom:calc(50% - 5px)}.eae-layout-center .eae-timline-progress-bar{left:50%}.eae-layout-center .eae-timeline-item:nth-child(odd){flex-direction:row-reverse}.eae-layout-center .eae-timeline-item:nth-child(odd) .eae-tl-item-meta-wrapper{margin-right:0;margin-left:0;justify-content:flex-start}body.rtl[data-elementor-device-mode=tablet] .eae-layout-center .eae-timeline-item:nth-child(even) .eae-tl-content-wrapper,body:not(.rtl)[data-elementor-device-mode=tablet] .eae-layout-center .eae-timeline-item:nth-child(odd) .eae-tl-content-wrapper{padding-right:20px;padding-left:0}body.rtl[data-elementor-device-mode=tablet] .eae-layout-center .eae-timeline-item:nth-child(odd) .eae-tl-content-wrapper,body:not(.rtl)[data-elementor-device-mode=tablet] .eae-layout-center .eae-timeline-item:nth-child(even) .eae-tl-content-wrapper{padding-right:0;padding-left:20px}body:not(.rtl) .eae-layout-left .eae-tl-content-wrapper{padding-right:10px;padding-left:20px}body.rtl .eae-layout-left .eae-tl-content-wrapper{padding-right:20px;padding-left:10px}.eae-layout-left .eae-timline-progress-bar{display:none}.eae-layout-left .eae-tl-item-meta-wrapper{display:none}.eae-layout-left .eae-tl-item-meta-wrapper-inner{display:block}.eae-layout-right .eae-timline-progress-bar{display:none}body:not(.rtl) .eae-layout-right .eae-tl-content-wrapper{padding-right:20px;padding-left:10px}body.rtl .eae-layout-right .eae-tl-content-wrapper{padding-right:10px;padding-left:20px}.eae-layout-right .eae-tl-icon-wrapper{order:3}.eae-layout-right .eae-tl-item-meta-wrapper{display:none}.eae-layout-right .eae-tl-item-meta-wrapper-inner{display:block}.eae-tl-item-meta-wrapper{flex-grow:1;order:0;flex-basis:50%;flex-direction:initial;justify-content:flex-end;display:flex;align-items:center;margin-right:0}.eae-tl-item-meta{padding:0 20px}.eae-tl-icon-wrapper{height:auto;width:auto;flex-grow:0;flex-shrink:0;order:1;margin-left:0;margin-right:0;min-width:10px;min-height:10px;border-radius:999px;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.eae-tl-content-wrapper{flex-grow:1;order:2;flex-basis:50%;position:relative;padding-right:0;padding-left:20px}.eae-tl-item-content{background:#f4f4f4;padding:25px;overflow:hidden;text-align:center;display:flex;flex-direction:row}.eae-tl-content{display:inline-block;position:relative;padding:10px;width:100%;color:#000}.eae-timeline-item.custom-image-style-yes.image-position-row .eae-content-inner,.eae-timeline-item.custom-image-style-yes.image-position-row-reverse .eae-content-inner,.image-position-row .eae-timeline .eae-timeline-item:not(.custom-image-style-yes) .eae-content-inner,.image-position-row-reverse .eae-timeline .eae-timeline-item:not(.custom-image-style-yes) .eae-content-inner{position:relative;left:50%;top:50%;transform:translate(-50%,-50%);line-height:1;width:100%}.custom-image-style-.image-position-row .eae-content-inner,.custom-image-style-.image-position-row-reverse .eae-content-inner,.custom-image-style-no.image-position-row .eae-content-inner,.custom-image-style-no.image-position-row-reverse .eae-content-inner{left:unset;top:unset;transform:unset}.eae-tl-item-image{display:inline-block}.image-position-row .eae-tl-item-image img,.image-position-row-reverse .eae-tl-item-image img{object-fit:cover;height:100%!important}.image-position-row .eae-tl-item-image,.image-position-row-reverse .eae-tl-item-image{margin:0}.image-position-column .eae-tl-item-image{margin:auto}.custom-image-style-.image-position-column .eae-tl-item-image,.custom-image-style-no.image-position-column .eae-tl-item-image{margin:0 auto}.eae-pb-inner-line{width:100%;background-color:#3d5ac3}.eae-tl-item-content::before{content:"";position:absolute;width:0;height:0;border-style:solid;border-width:8px 16px 8px 0;border-color:transparent #f4f4f4 transparent transparent}.eae-icon-wrapper{display:flex}.elementor-widget-bpel-timeline .eae-icon-wrapper{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);line-height:1}.eae-tl-read-more{display:inline-block;padding:5px;border:2px solid #000}.image-position-row .eae-timeline.eae-timeline-alternate-yes .eae-timeline-item:nth-child(odd):not(.custom-image-style-yes) .eae-tl-item-content{flex-direction:row-reverse!important}.image-position-row-reverse .eae-timeline.eae-timeline-alternate-yes .eae-timeline-item:nth-child(odd):not(.custom-image-style-yes) .eae-tl-item-content{flex-direction:row!important}@media screen and (min-width:1024px){.eae-layout-center .eae-timeline-item:nth-child(odd) .eae-tl-content-wrapper,body.rtl .eae-layout-center .eae-timeline-item:nth-child(even) .eae-tl-content-wrapper{padding-right:20px;padding-left:0}.eae-layout-center .eae-timeline-item:nth-child(even) .eae-tl-content-wrapper,body.rtl .eae-layout-center .eae-timeline-item:nth-child(odd) .eae-tl-content-wrapper{padding-right:0;padding-left:20px}.eae-layout-center .eae-timeline-item:nth-child(odd) .eae-tl-item-content::before,.eae-layout-right .eae-tl-item-content::before,body.rtl .eae-layout-center .eae-timeline-item:nth-child(even) .eae-tl-item-content::before,body.rtl .eae-layout-left .eae-tl-item-content::before{right:4px;left:unset;border-width:8px 0 8px 16px;border-color:transparent transparent transparent #f4f4f4}.eae-layout-center .eae-timeline-item:nth-child(even) .eae-tl-item-content::before,.eae-layout-left .eae-tl-item-content::before,body.rtl .eae-layout-center .eae-timeline-item:nth-child(odd) .eae-tl-item-content::before,body.rtl .eae-layout-right .eae-tl-item-content::before{left:4px;right:unset;border-width:8px 16px 8px 0;border-color:transparent #f4f4f4 transparent transparent}}@media screen and (max-width:1023px) and (min-width:768px){.image-position-row .eae-timeline.eae-timeline-alternate-yes .eae-timeline-item:nth-child(odd):not(.custom-image-style-yes) .eae-tl-item-content{flex-direction:row-reverse!important}.image-position-row-reverse .eae-timeline.eae-timeline-alternate-yes .eae-timeline-item:nth-child(odd):not(.custom-image-style-yes) .eae-tl-item-content{flex-direction:row!important}.eae-tl-res-style-mobile-tablet .eae-tl-item-meta-wrapper{display:none}.eae-tl-res-style-mobile-tablet .eae-tl-item-meta-wrapper-inner{display:block}.eae-tl-res-style-mobile-tablet.eae-tl-res-layout-left .eae-timeline-item{flex-direction:row!important}.eae-tl-res-style-mobile-tablet.eae-tl-res-layout-right .eae-timeline-item{flex-direction:row-reverse!important}.eae-layout-center.eae-tl-res-style-mobile-tablet.eae-tl-res-layout-left .eae-timeline-item .eae-tl-item-content::before,.eae-timeline.eae-layout-center.eae-tl-res-style-mobile .eae-timeline-item:nth-child(even) .eae-tl-item-content::before,body.rtl .eae-layout-center.eae-tl-res-style-mobile-tablet.eae-tl-res-layout-right .eae-timeline-item .eae-tl-item-content::before,body.rtl .eae-layout-right .eae-timeline-item .eae-tl-item-content::before,body.rtl .eae-layout-right .eae-tl-item-content::before,body.rtl .eae-timeline.eae-layout-center.eae-tl-res-style-mobile .eae-timeline-item:nth-child(odd) .eae-tl-item-content::before,body:not(.rtl) .eae-layout-left .eae-timeline-item .eae-tl-item-content::before,body:not(.rtl) .eae-layout-left .eae-tl-item-content::before{left:4px!important;border-width:8px 16px 8px 0!important;border-color:transparent #f4f4f4 transparent transparent!important}body.rtl .eae-timeline.eae-layout-center.eae-tl-res-style-mobile .eae-timeline-item:nth-child(odd) .eae-tl-item-content::before{left:4px!important;right:unset!important;border-width:8px 16px 8px 0!important;border-color:transparent #f4f4f4 transparent transparent!important}.eae-timeline.eae-layout-center.eae-tl-res-style-mobile .eae-timeline-item:nth-child(odd) .eae-tl-item-content::before,body.rtl .eae-layout-center.eae-tl-res-style-mobile-tablet.eae-tl-res-layout-left .eae-timeline-item .eae-tl-item-content::before,body.rtl .eae-layout-left .eae-timeline-item .eae-tl-item-content::before,body.rtl .eae-layout-left .eae-tl-item-content::before,body.rtl .eae-timeline.eae-layout-center.eae-tl-res-style-mobile .eae-timeline-item:nth-child(even) .eae-tl-item-content::before,body:not(.rtl) .eae-layout-center.eae-tl-res-style-mobile-tablet.eae-tl-res-layout-right .eae-timeline-item .eae-tl-item-content::before,body:not(.rtl) .eae-layout-right .eae-timeline-item .eae-tl-item-content::before,body:not(.rtl) .eae-layout-right .eae-tl-item-content::before,body:not(.rtl) .eae-tl-res-style-mobile-tablet.eae-tl-res-layout-right .eae-timeline-item .eae-tl-item-content::before{right:4px!important;border-width:8px 0 8px 16px!important;border-color:transparent transparent transparent #f4f4f4!important}.eae-tl-res-style-mobile-tablet.eae-layout-center.eae-tl-res-layout-left .eae-timeline-item .eae-tl-content-wrapper,body.rtl .eae-tl-res-style-mobile-tablet.eae-layout-center.eae-tl-res-layout-right .eae-timeline-item .eae-tl-content-wrapper{padding-right:0!important;padding-left:20px!important}.eae-tl-res-style-mobile-tablet.eae-layout-center.eae-tl-res-layout-right .eae-timeline-item .eae-tl-content-wrapper,body.rtl .eae-tl-res-style-mobile-tablet.eae-layout-center.eae-tl-res-layout-left .eae-timeline-item .eae-tl-content-wrapper{padding-right:20px!important;padding-left:0!important}.eae-tl-res-style-mobile-tablet.eae-layout-center.eae-tl-res-layout-left .eae-timline-progress-bar{left:13px}.eae-tl-res-style-mobile-tablet.eae-layout-center.eae-tl-res-layout-right .eae-timline-progress-bar{left:calc(100% - 13px)}}@media screen and (max-width:767px){.eae-tl-item-meta-wrapper{display:none}.eae-tl-item-meta-wrapper-inner{display:block}.elementor-widget-bpel-timeline:not(.image-position-column) .eae-timeline .eae-tl-item-content{flex-direction:column-reverse!important}.eae-tl-item-image,.elementor-widget-bpel-timeline:not(.image-position-column) .eae-tl-content{width:100%!important}.eae-tl-res-style-mobile-tablet.eae-tl-res-layout-left .eae-timeline-item,.eae-tl-res-style-mobile.eae-tl-res-layout-left .eae-timeline-item{flex-direction:row!important}.eae-tl-res-style-mobile-tablet.eae-tl-res-layout-right .eae-timeline-item,.eae-tl-res-style-mobile.eae-tl-res-layout-right .eae-timeline-item{flex-direction:row-reverse!important}.eae-timeline.eae-layout-center.eae-tl-center.eae-tl-res-style-mobile-tablet.eae-tl-res-layout-left .eae-timeline-item:nth-child(odd) .eae-tl-item-content::before,.eae-timeline.eae-layout-center.eae-tl-center.eae-tl-res-style-mobile.eae-tl-res-layout-left .eae-timeline-item:nth-child(odd) .eae-tl-item-content::before,body.rtl .eae-timeline.eae-layout-right .eae-timeline-item .eae-tl-item-content::before,body.rtl .eae-timeline.eae-tl-res-style-mobile.eae-tl-res-layout-right .eae-timeline-item .eae-tl-item-content::before,body:not(.rtl) .eae-layout-left .eae-timeline-item .eae-tl-item-content::before,body:not(.rtl) .eae-tl-res-style-mobile-tablet.eae-tl-res-layout-left .eae-timeline-item .eae-tl-item-content::before,body:not(.rtl) .eae-tl-res-style-mobile.eae-tl-res-layout-left .eae-timeline-item .eae-tl-item-content::before{left:4px!important;border-width:8px 16px 8px 0!important;border-color:transparent #f4f4f4 transparent transparent!important}body.rtl .eae-layout-left .eae-timeline-item .eae-tl-item-content::before,body.rtl .eae-tl-res-style-mobile.eae-tl-res-layout-left .eae-timeline-item .eae-tl-item-content::before,body:not(.rtl) .eae-layout-right .eae-timeline-item .eae-tl-item-content::before,body:not(.rtl) .eae-tl-res-style-mobile-tablet.eae-tl-res-layout-right .eae-timeline-item .eae-tl-item-content::before,body:not(.rtl) .eae-tl-res-style-mobile.eae-tl-res-layout-right .eae-timeline-item .eae-tl-item-content::before{right:4px!important;border-width:8px 0 8px 16px!important;border-color:transparent transparent transparent #f4f4f4!important}.eae-timeline.eae-tl-res-style-mobile-tablet.eae-layout-center.eae-tl-res-layout-right .eae-timeline-item .eae-tl-content-wrapper,body:not(.rtl) .eae-tl-res-style-mobile-tablet.eae-layout-center.eae-tl-res-layout-left .eae-timeline-item .eae-tl-content-wrapper body.rtl .eae-timeline.eae-tl-res-style-mobile.eae-layout-center.eae-tl-res-layout-right .eae-timeline-item .eae-tl-content-wrapper,body:not(.rtl) .eae-tl-res-style-mobile.eae-layout-center.eae-tl-res-layout-left .eae-timeline-item .eae-tl-content-wrapper{padding-right:0!important;padding-left:20px!important}body.rtl .eae-tl-res-style-mobile-tablet.eae-layout-center.eae-tl-res-layout-left .eae-timeline-item .eae-tl-content-wrapper,body.rtl .eae-tl-res-style-mobile.eae-layout-center.eae-tl-res-layout-left .eae-timeline-item .eae-tl-content-wrapper,body:not(.rtl) .eae-tl-res-style-mobile-tablet.eae-layout-center.eae-tl-res-layout-right .eae-timeline-item .eae-tl-content-wrapper,body:not(.rtl) .eae-tl-res-style-mobile.eae-layout-center.eae-tl-res-layout-right .eae-timeline-item .eae-tl-content-wrapper{padding-right:20px!important;padding-left:0!important}.eae-tl-res-style-mobile-tablet.eae-layout-center.eae-tl-res-layout-left .eae-timline-progress-bar,.eae-tl-res-style-mobile.eae-layout-center.eae-tl-res-layout-left .eae-timline-progress-bar{left:13px}.eae-tl-res-style-mobile-tablet.eae-layout-center.eae-tl-res-layout-right .eae-timline-progress-bar,.eae-tl-res-style-mobile.eae-layout-center.eae-tl-res-layout-right .eae-timline-progress-bar{left:calc(100% - 13px)}body.rtl .eae-layout-center.eae-timeline.eae-tl-res-style-mobile-tablet.eae-tl-res-layout-right .eae-timeline-item .eae-tl-content-wrapper .eae-tl-item-content::before{left:4px;right:unset}body.rtl .eae-layout-center.eae-timeline.eae-tl-res-style-mobile-tablet.eae-tl-res-layout-left .eae-timeline-item .eae-tl-content-wrapper .eae-tl-item-content::before{left:unset;right:4px;border-width:8px 0 8px 16px!important;border-color:transparent transparent transparent #f4f4f4!important}}[data-element_type="eae-evergreen-timer.skin1"] .eae-evergreen-wrapper{display:block;text-align:center}[data-element_type="eae-evergreen-timer.skin1"] #eaeclockdiv{font-family:sans-serif;color:#fff;display:inline-block;font-weight:100;text-align:center;font-size:30px}[data-element_type="eae-evergreen-timer.skin1"] .eae-time-wrapper{padding:10px;border-radius:3px;background:#00bf96;display:inline-block;overflow:hidden}[data-element_type="eae-evergreen-timer.skin1"] #eaeclockdiv div>span{padding:15px;width:100%;background:#00816a;display:inline-block}[data-element_type="eae-evergreen-timer.skin1"] .smalltext{padding:7px;font-size:16px}[data-element_type="eae-evergreen-timer.skin1"] .eae-egt-hide{display:none}.eae-egt-message{display:none}@media screen and (max-width:767px){[data-element_type="eae-evergreen-timer.skin1"] #eaeclockdiv div>span{padding:5px}[data-element_type="eae-evergreen-timer.skin1"] .eae-time-wrapper{padding:5px}}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}[data-element_type="eae-evergreen-timer.skin2"] .eae-evergreen-wrapper{display:inline-block;width:100%;text-align:center;margin:auto}[data-element_type="eae-evergreen-timer.skin2"] .timer-container{display:inline-block}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper a{cursor:pointer;text-decoration:none;color:#ccc}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper a:hover{color:#fff}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul{list-style:none}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper.clearfix:after,[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper.clearfix:before{content:" ";display:table}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper.clearfix:after{clear:both}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper{font:normal 11px "Helvetica Neue",Helvetica,sans-serif;-webkit-user-select:none}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-meridium{background:0 0!important;box-shadow:0 0 0!important;font-size:36px!important}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-meridium a{color:#313333}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper{text-align:center;position:relative;width:100%;margin:1em}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper:after,[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper:before{content:" ";display:table}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper:after{clear:both}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul{position:relative;float:left;margin:5px;width:60px;height:90px;font-size:80px;font-weight:700;line-height:87px;border-radius:6px;background:#000}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li{z-index:1;position:absolute;left:0;top:0;width:100%;height:100%;line-height:87px;text-decoration:none!important}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li:first-child{z-index:2}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li a{display:block;height:100%;-webkit-perspective:200px;-moz-perspective:200px;perspective:200px;margin:0!important;overflow:visible!important;cursor:default!important}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li a div{z-index:1;position:absolute;left:0;width:100%;height:50%;font-size:80px;overflow:hidden;outline:1px solid transparent}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li a div .shadow{position:absolute;width:100%;height:100%;z-index:2}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li a div.up{-webkit-transform-origin:50% 100%;-moz-transform-origin:50% 100%;-ms-transform-origin:50% 100%;-o-transform-origin:50% 100%;transform-origin:50% 100%;top:0}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li a div.up:after{content:"";position:absolute;top:44px;left:0;z-index:5;width:100%;height:3px;background-color:#000;background-color:rgba(0,0,0,.4)}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li a div.down{-webkit-transform-origin:50% 0;-moz-transform-origin:50% 0;-ms-transform-origin:50% 0;-o-transform-origin:50% 0;transform-origin:50% 0;bottom:0;border-bottom-left-radius:6px;border-bottom-right-radius:6px}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li a div div.inn{position:absolute;left:0;z-index:1;width:100%;height:200%;color:#ccc;text-shadow:0 1px 2px #000;text-align:center;background-color:#333;border-radius:6px;font-size:70px}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li a div.up div.inn{top:0}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li a div.down div.inn{bottom:0}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul.play li.flip-clock-before{z-index:3}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper .flip{box-shadow:0 2px 5px rgba(0,0,0,.7)}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul.play li.flip-clock-active{-webkit-animation:asd 10ms .49s linear both;-moz-animation:asd 10ms .49s linear both;animation:asd 10ms .49s linear both;z-index:5}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-divider{float:left;display:inline-block;position:relative;width:20px;height:100px}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-divider:first-child{width:0}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-dot{display:block;background:#323434;width:10px;height:10px;position:absolute;border-radius:50%;box-shadow:0 0 5px rgba(0,0,0,.5);left:5px}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-divider .flip-clock-label{position:absolute;top:-1.5em;right:-86px;color:#000;text-shadow:none}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-divider.minutes .flip-clock-label{right:-88px}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-divider.seconds .flip-clock-label{right:-91px}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-dot.top{top:30%}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-dot.bottom{bottom:30%}@-webkit-keyframes asd{0%{z-index:2}100%{z-index:4}}@-moz-keyframes asd{0%{z-index:2}100%{z-index:4}}@-o-keyframes asd{0%{z-index:2}100%{z-index:4}}@keyframes asd{0%{z-index:2}100%{z-index:4}}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul.play li.flip-clock-active .down{z-index:2;-webkit-animation:turn .5s .5s linear both;-moz-animation:turn .5s .5s linear both;animation:turn .5s .5s linear both}@-webkit-keyframes turn{0%{-webkit-transform:rotateX(90deg)}100%{-webkit-transform:rotateX(0)}}@-moz-keyframes turn{0%{-moz-transform:rotateX(90deg)}100%{-moz-transform:rotateX(0)}}@-o-keyframes turn{0%{-o-transform:rotateX(90deg)}100%{-o-transform:rotateX(0)}}@keyframes turn{0%{transform:rotateX(90deg)}100%{transform:rotateX(0)}}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul.play li.flip-clock-before .up{z-index:2;-webkit-animation:turn2 .5s linear both;-moz-animation:turn2 .5s linear both;animation:turn2 .5s linear both}@-webkit-keyframes turn2{0%{-webkit-transform:rotateX(0)}100%{-webkit-transform:rotateX(-90deg)}}@-moz-keyframes turn2{0%{-moz-transform:rotateX(0)}100%{-moz-transform:rotateX(-90deg)}}@-o-keyframes turn2{0%{-o-transform:rotateX(0)}100%{-o-transform:rotateX(-90deg)}}@keyframes turn2{0%{transform:rotateX(0)}100%{transform:rotateX(-90deg)}}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li.flip-clock-active{z-index:3}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul.play li.flip-clock-before .up .shadow{background:-moz-linear-gradient(top,rgba(0,0,0,.1) 0,#000 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,rgba(0,0,0,.1)),color-stop(100%,#000));background:linear,top,rgba(0,0,0,.1) 0,#000 100%;background:-o-linear-gradient(top,rgba(0,0,0,.1) 0,#000 100%);background:-ms-linear-gradient(top,rgba(0,0,0,.1) 0,#000 100%);background:linear,to bottom,rgba(0,0,0,.1) 0,#000 100%;-webkit-animation:show .5s linear both;-moz-animation:show .5s linear both;animation:show .5s linear both}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul.play li.flip-clock-active .up .shadow{background:-moz-linear-gradient(top,rgba(0,0,0,.1) 0,#000 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,rgba(0,0,0,.1)),color-stop(100%,#000));background:linear,top,rgba(0,0,0,.1) 0,#000 100%;background:-o-linear-gradient(top,rgba(0,0,0,.1) 0,#000 100%);background:-ms-linear-gradient(top,rgba(0,0,0,.1) 0,#000 100%);background:linear,to bottom,rgba(0,0,0,.1) 0,#000 100%;-webkit-animation:hide .5s .3s linear both;-moz-animation:hide .5s .3s linear both;animation:hide .5s .3s linear both}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul.play li.flip-clock-before .down .shadow{background:-moz-linear-gradient(top,#000 0,rgba(0,0,0,.1) 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#000),color-stop(100%,rgba(0,0,0,.1)));background:linear,top,#000 0,rgba(0,0,0,.1) 100%;background:-o-linear-gradient(top,#000 0,rgba(0,0,0,.1) 100%);background:-ms-linear-gradient(top,#000 0,rgba(0,0,0,.1) 100%);background:linear,to bottom,#000 0,rgba(0,0,0,.1) 100%;-webkit-animation:show .5s linear both;-moz-animation:show .5s linear both;animation:show .5s linear both}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul.play li.flip-clock-active .down .shadow{background:-moz-linear-gradient(top,#000 0,rgba(0,0,0,.1) 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#000),color-stop(100%,rgba(0,0,0,.1)));background:linear,top,#000 0,rgba(0,0,0,.1) 100%;background:-o-linear-gradient(top,#000 0,rgba(0,0,0,.1) 100%);background:-ms-linear-gradient(top,#000 0,rgba(0,0,0,.1) 100%);background:linear,to bottom,#000 0,rgba(0,0,0,.1) 100%;-webkit-animation:hide .5s .3s linear both;-moz-animation:hide .5s .3s linear both;animation:hide .5s .2s linear both}@-webkit-keyframes show{0%{opacity:0}100%{opacity:1}}@-moz-keyframes show{0%{opacity:0}100%{opacity:1}}@-o-keyframes show{0%{opacity:0}100%{opacity:1}}@keyframes show{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes hide{0%{opacity:1}100%{opacity:0}}@-moz-keyframes hide{0%{opacity:1}100%{opacity:0}}@-o-keyframes hide{0%{opacity:1}100%{opacity:0}}@keyframes hide{0%{opacity:1}100%{opacity:0}}@media screen and (max-width:767px){[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-divider{width:15px}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-dot{height:5px;width:5px}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul{height:40px}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-divider{height:50px}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li{line-height:37px}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul li a div div.inn{font-size:24px}[data-element_type="eae-evergreen-timer.skin2"] .eae-flip-clock-wrapper ul{margin:2px}}[data-element_type="eae-evergreen-timer.skin3"] #timer{font-family:sans-serif;color:#fff;display:inline-block;font-weight:100;text-align:center;font-size:30px}[data-element_type="eae-evergreen-timer.skin3"] .desc{display:flex;justify-content:center}[data-element_type="eae-evergreen-timer.skin3"].eae-egt-content-align-right .desc{justify-content:flex-end}[data-element_type="eae-evergreen-timer.skin3"].eae-egt-content-align-left .desc{justify-content:flex-start}[data-element_type="eae-evergreen-timer.skin3"] .desc .egt-time-text{display:inline-block;padding:0 50px 0 50px}[data-element_type="eae-evergreen-timer.skin3"] .eae-time-wrapper{padding:50px;border-radius:3px;background:#00bf96;display:inline-block;overflow:hidden;margin:5px;line-height:1em}[data-element_type="eae-evergreen-timer.skin3"] #timer span:nth-child(1){background:khaki}[data-element_type="eae-evergreen-timer.skin3"] #timer span:nth-child(2){background:#cd5c5c}[data-element_type="eae-evergreen-timer.skin3"] #timer span:nth-child(3){background:#5f9ea0}[data-element_type="eae-evergreen-timer.skin3"] #timer span:nth-child(4){background:#6495ed}[data-element_type="eae-evergreen-timer.skin3"] .fade{animation:flip .7s ease forwards}@keyframes flip{0%{transform:rotateY(0) scaleY(1.1);opacity:.5}50%{transform:rotateY(180deg) scaleY(1.3);opacity:0}100%{transform:rotateY(0);opacity:1}}@media screen and (max-width:767px){[data-element_type="eae-evergreen-timer.skin3"] #timer span{font-size:22px}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-divider .flip-clock-label{top:-1.5em;right:-42px}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-divider.minutes .flip-clock-label{right:-48px}[data-element_type="eae-evergreen-timer.skin2"] .flip-clock-divider.seconds .flip-clock-label{right:-51px}}[data-element_type="eae-evergreen-timer.skin4"] .eae-evergreen-wrapper{width:100%}[data-element_type="eae-evergreen-timer.skin4"] .container{margin:0 auto}[data-element_type="eae-evergreen-timer.skin4"] .special{position:relative;width:840px;height:47px}[data-element_type="eae-evergreen-timer.skin4"] #counter{position:absolute;z-index:4000}[data-element_type="eae-evergreen-timer.skin4"] .digit-separator{position:relative;float:left;width:17px;height:44px;overflow:hidden;background-image:url(../digit-sep-svg.svg);background-repeat:no-repeat;background-position:0 0;background-color:#4054b2}[data-element_type="eae-evergreen-timer.skin4"] .digit{background-image:url(../digits-svg-alpha.svg);background-color:#4054b2}.eae-ct-wrapper *{box-sizing:border-box;margin:0;outline:0}article.eae-ct-wrapper{width:100%;max-width:1000px;margin:0 auto;position:relative}.eae-ct-wrapper tbody tr.eae-ct-header td,.eae-ct-wrapper th{position:relative}.eae-ct-wrapper ul{display:none;top:0;z-index:10;padding-bottom:14px}.eae-ct-wrapper li{list-style:none;flex:1;position:relative}.eae-ct-wrapper li:hover{cursor:pointer}.eae-ct-wrapper .eae-ct-heading{width:100%;padding:10px;background:#fff;font-size:20px;font-weight:700;height:60px;color:#999;text-align:center}.eae-ct-wrapper li.eae-ct-heading .eae-ct-heading-inner{position:absolute;align-self:center;top:50%;left:50%;transform:translate(-50%,-50%);width:100%}.eae-ct-wrapper li.eae-ct-heading.active{background:#f5f5f5}.eae-ct-wrapper table{border-collapse:collapse;table-layout:fixed;width:100%}.eae-ct-wrapper th{background:#f5f5f5;display:none}.eae-ct-wrapper td,.eae-ct-wrapper th{height:53px;vertical-align:middle}.eae-ct-wrapper table{border:none}.eae-ct-wrapper table td,.eae-ct-wrapper table th{border:none}.eae-ct-wrapper table tr td:first-child,.eae-ct-wrapper table tr td:last-child,.eae-ct-wrapper td,.eae-ct-wrapper th{padding:10px;empty-cells:show}.eae-ct-wrapper td,.eae-ct-wrapper th{text-align:center}.eae-ct-wrapper td+td,.eae-ct-wrapper th+th{text-align:center}.eae-ct-wrapper tr:first-child{background:0 0!important}.eae-ct-wrapper ul li:nth-child(1){display:table-cell}.eae-ct-wrapper tr td:nth-child(2){display:table-cell}.eae-ct-wrapper td:nth-child(1){display:table-cell}.eae-ct-wrapper td{display:none}.eae-ct-wrapper .sep{background:#f5f5f5;font-weight:700}.eae-ct-price-wrapper{display:flex;justify-content:center}.eae-ct-tt-type-icon .eae-ct-feature .tooltip{float:right}.eae-ct-wrapper .tooltiptext::before{content:"";border-width:5px 5px 0 5px;border-color:#fff;border-left-color:transparent;border-right-color:transparent;border-bottom-color:transparent;bottom:-10px;width:0;height:0;border-style:solid;position:absolute;margin:5px;left:42%}.eae-ct-wrapper .eae-ct-price{font-size:28px;font-weight:700;line-height:1em}.eae-ct-wrapper .eae-ct-currency{align-self:flex-start;margin-right:3px}.eae-ct-wrapper .eae-ct-fractional-price{align-self:flex-start;margin-left:3px}.eae-ct-wrapper .eae-ct-duration{align-self:flex-start}.eae-ct-wrapper .eae-ct-original-price{margin-right:5px;text-decoration:line-through;align-self:flex-end}.eae-ct-wrapper .tick{font-size:18px;color:#2ca01c}.feature-heading-blank.eae-ct-wrapper .hide{border:unset!important;background:unset!important}.eae-ct-wrapper .hide.eae-ct-hide.eae-fbox-heading{border:0 solid #000}.eae-ct-ribbons-yes .eae-ct-ribbons-wrapper{position:absolute;top:0;width:100px;overflow:hidden;height:100px;z-index:998;padding:8px 12px}.eae-ct-ribbons-h-top.eae-ct-ribbons-yes .eae-ct-ribbons-wrapper{position:absolute;top:0;width:100%;overflow:hidden;height:50px;z-index:999;padding:8px 12px}.eae-ct-ribbons-h-top.eae-ct-ribbons-yes .eae-ct-ribbons-wrapper-top{background-color:rgba(63,195,135,.8);color:#fff;transform:translateY(-100%);position:absolute;width:100%;top:0;left:0}.eae-ct-ribbons-h-left.eae-ct-ribbons-yes .eae-ct-ribbons-wrapper{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);left:0;right:auto}.eae-ct-ribbons-h-right.eae-ct-ribbons-yes .eae-ct-ribbons-wrapper{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(90deg);left:auto;right:0}.eae-ct-ribbons-yes .eae-ct-ribbons-wrapper span.eae-ct-ribbons-inner{position:absolute;text-align:center;left:0;top:0;width:200%;-webkit-transform:translateY(-50%) translateX(-50%) translateX(35px) rotate(-45deg);-ms-transform:translateY(-50%) translateX(-50%) translateX(35px) rotate(-45deg);transform:translateY(-50%) translateX(-50%) translateX(35px) rotate(-45deg);margin-top:35px;font-size:13px;line-height:2;font-weight:800;text-transform:uppercase;background:rgba(63,195,135,.8);padding:8px 12px;color:#fff}.eae-ct-wrapper .tooltip{position:relative;display:inline-block}.eae-ct-wrapper .tooltip .tooltiptext{visibility:hidden;min-width:120px;background-color:#000;color:#fff;text-align:center;border-radius:6px;padding:5px 0;position:absolute;z-index:1;bottom:120%;left:50%;margin-left:-60px}.eae-ct-wrapper .tooltip:hover .tooltiptext{visibility:visible}.eae-ct-heading-tooltip{text-decoration-line:underline;text-decoration-style:dotted}.eae-ct-btn{padding:10px 15px 10px 15px;color:#fff;display:inline-block;line-height:1em}.eae-ct-btn:hover{color:#fff}.eae-ct-wrapper i.fa.fa-check,.eae-ct-wrapper i.fas.fa-check{color:#38f146}.eae-ct-wrapper i.fa.fa-close,.eae-ct-wrapper i.fas.fa-times{color:red}.button-heading-blank.eae-ct-wrapper tr:last-child td:first-child{background:0 0!important;border:none!important}.eae-ct-wrapper tr:last-child{background:0 0!important}.eae-ct-wrapper tbody tr:nth-child(2){background:0 0!important}@media (min-width:767px){.eae-ct-wrapper .eae-ct-header,.eae-ct-wrapper td{width:330px}.eae-ct-wrapper td+td,.eae-ct-wrapper th+th{width:auto}}.eae-tab-format-all .eae-ct-wrapper ul{display:flex}.hide.eae-ct-hide{display:table-cell}@media (min-width:1023px){.eae-tab-format-all tbody tr.eae-ct-header{display:none}.eae-tab-format-mobile .eae-ct-wrapper td,.eae-tab-format-mobile .eae-ct-wrapper th,.eae-tab-format-tab-mob .eae-ct-wrapper td,.eae-tab-format-tab-mob .eae-ct-wrapper th{display:table-cell!important}.eae-tab-format-all .hide.eae-ct-hide{display:table-cell}.eae-tab-format-mobile .hide.eae-ct-hide,.eae-tab-format-tab-mob .hide.eae-ct-hide{display:none!important}}@media (max-width:1023px){.eae-tab-format-tab-mob .eae-ct-wrapper ul{display:flex}.eae-tab-format-all tbody tr.eae-ct-header,.eae-tab-format-tab-mob tbody tr.eae-ct-header{display:none}.eae-tab-format-all .hide.eae-ct-hide{display:table-cell}.eae-tab-format-tab-mob .hide.eae-ct-hide{display:table-cell}}@media (max-width:1023px) and (min-width:768px){.eae-tab-format-mobile .eae-ct-wrapper td,.eae-tab-format-mobile .eae-ct-wrapper th{display:table-cell!important}.eae-tab-format-all tbody tr.eae-ct-header,.eae-tab-format-tab-mob tbody tr.eae-ct-header{display:none}.eae-tab-format-tab-mob .hide.eae-ct-hide{display:table-cell}}@media (max-width:767px){.eae-tab-format-mobile .eae-ct-wrapper ul{display:flex}.eae-tab-format-mobile tbody tr.eae-ct-header{display:none}.eae-tab-format-all tbody tr.eae-ct-header,.eae-tab-format-mobile tbody tr.eae-ct-header{display:none}.eae-tab-format-mobile .hide.eae-ct-hide{display:table-cell}}.eae-progress-bar-wrapper{display:flex;flex-direction:column;align-items:flex-start;margin:15px 0}.eae-progress-bar-wrapper.eae-progress-bar{width:100%;position:relative;box-sizing:border-box}.eae-pb-bar,.eae-pb-bar-inner,.eae-pb-bar-skill,.eae-pb-bar-value{box-sizing:border-box}.eae-pb-bar{position:relative;height:100%;width:100%;overflow:hidden}.eae-pb-bar--no-overflow{overflow:visible}.eae-pb-bar-inner{position:absolute;top:0;left:0;height:100%;-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:left center;transform-origin:left center}body.rtl .eae-pb-bar .eae-pb-bar-inner{position:absolute;top:0;right:0!important;height:100%;-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:right center;transform-origin:right center}.eae-pb-bar-inner.js-animated{transition-property:all;transition-duration:1.5s;transition-timing-function:cubic-bezier(.1,1.14,.31,1.06);transition-delay:1.5s;-webkit-transform:scaleX(1);transform:scaleX(1)}body.rtl .eae-pb-bar .eae-pb-bar-inner.js-animated{transition-property:all;transition-duration:1.5s;transition-timing-function:cubic-bezier(.1,1.14,.31,1.06);transition-delay:1.5s;-webkit-transform:scaleX(1);transform:scaleX(1)}.eae-pb-bar-skill,.eae-pb-bar-value{font-size:14px;letter-spacing:1px}body:not(.rtl) .eae-pb-bar-value--aligned-value{-webkit-transform:translateX(-50%);transform:translateX(-50%)}body.rtl .eae-pb-bar-value--aligned-value{-webkit-transform:translateX(50%);transform:translateX(50%)}.eae-progress-bar-skin1{height:20px;padding:4px;border:1px solid #ddd;border-radius:20px}.eae-pb-bar-skin1{border-radius:20px}.eae-pb-bar-inner-skin1{background-color:#00bfb3;background-size:200%;background-position:0 0;border-radius:20px}.eae-pb-bar-skill-skin1{position:absolute;bottom:20px;left:0;opacity:0}body.rtl .eae-pb-bar-skill-skin1{right:0}.eae-pb-bar-skill-skin1.js-animated{transition-property:all;transition-duration:.5s;transition-timing-function:linear;transition-delay:.5s;left:0;opacity:1}body.rtl .eae-pb-bar-skill-skin1.js-animated{right:0!important}.eae-pb-bar-value-skin1{position:absolute;bottom:20px;opacity:1}body:not(.rtl) .eae-pb-bar-value-skin1{right:0}body.rtl .eae-pb-bar-value-skin1{left:0!important}.eae-pb-bar-value-skin1.js-animated{transition-property:all;transition-duration:.5s;transition-timing-function:linear;transition-delay:.5s;opacity:1}body:not(.rtl) .eae-pb-bar-value-skin1.js-animated{right:0}.eae-progress-bar-skin2{height:15px;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.12),0 1px 5px 0 rgba(0,0,0,.2);border-radius:3px}@-webkit-keyframes progress-2-bg-animation-rtl{100%{background-position:0 0,0 0}0%{background-position:0 0,42px 0}}@keyframes progress-2-bg-animation-rtl{100%{background-position:0 0,0 0}0%{background-position:0 0,42px 0}}@-webkit-keyframes progress-2-bg-animation{0%{background-position:0 0,0 0}1000%{background-position:0 0,42px 0}}@keyframes progress-2-bg-animation{0%{background-position:0 0,0 0}100%{background-position:0 0,42px 0}}.eae-pb-bar-inner-skin2{background-image:linear-gradient(to top,rgba(255,255,255,.15),rgba(0,0,0,.2)),linear-gradient(135deg,#5eeb5b,#5eeb5b 33%,#358600 33%,#358600 66%,#5eeb5b 66%);background-size:100% 100%,42px 100%;background-position:0 0,0 0;border-radius:3px}body:not(.rtl) .eae-pb-bar-inner-skin2.js-animated{-webkit-animation:progress-2-bg-animation 1.5s linear 0s infinite;animation:progress-2-bg-animation 1.5s linear 0s infinite}body.rtl .eae-pb-bar-inner-skin2.js-animated{-webkit-animation:progress-2-bg-animation-rtl 1.5s linear 0s infinite;animation:progress-2-bg-animation-rtl 1.5s linear 0s infinite}.eae-pb-bar-skill-skin2{position:absolute;opacity:0}body:not(.rtl) .eae-pb-bar-skill-skin2{left:0}body.rtl .eae-pb-bar-skill-skin2{right:0}.eae-pb-bar-skill-skin2.js-animated{transition-property:all;transition-duration:.5s;transition-timing-function:linear;transition-delay:.5s;bottom:20px;opacity:1}.eae-pb-bar-value-skin2{position:absolute;opacity:0}body:not(.rtl) .eae-pb-bar-value-skin2{right:0}body.rtl .eae-pb-bar-value-skin2{left:0}.eae-pb-bar-value-skin2.js-animated{transition-property:all;transition-duration:.5s;transition-timing-function:linear;transition-delay:.5s;bottom:20px;opacity:1}.eae-progress-bar-skin3{height:5px;background-color:#efefef}.eae-pb-bar-inner-skin3,.eae-pb-bar-value-skin3{background-color:#f40076}.eae-pb-bar-inner:after,.eae-pb-bar-value-skin3:after{border-top-color:#f40076}.eae-pb-bar-skill-skin3{position:absolute;bottom:10px;left:-10px;opacity:0}.eae-pb-bar-skill-skin3.js-animated{transition-property:all;transition-duration:.5s;transition-timing-function:linear;transition-delay:.5s;opacity:1}body:not(.rtl) .eae-pb-bar-skill-skin3.js-animated{left:0}body.rtl .eae-pb-bar-skill-skin3.js-animated{right:0}.eae-pb-bar-value-skin3{position:absolute;display:inline-block;padding:0 8px;font-size:14px;color:#fff;opacity:0}.eae-pb-bar-value-skin3:after{position:absolute;left:50%;bottom:-10px;display:block;width:0;height:0;content:"";-webkit-transform:translateX(-50%);transform:translateX(-50%);border-width:5px;border-style:solid;border-color:#f40076 transparent transparent transparent}.eae-pb-bar-inner-skin3.js-animated{transition-property:all;transition-duration:1.5s;transition-timing-function:cubic-bezier(.1,1.14,.31,1.06);transition-delay:1.5s;-webkit-transform:scaleX(1);transform:scaleX(1)}.eae-pb-bar-value-skin3.js-animated{transition-property:all;transition-duration:1.5s;transition-timing-function:cubic-bezier(.1,1.14,.31,1.06);transition-delay:2s;bottom:14px;opacity:1}.eae-progress-bar-skin4{height:3px;background-color:#efefef}.eae-pb-bar-inner-skin4{background-color:#000}.eae-pb-bar-inner-skin4:after{position:absolute;top:50%;display:block;width:8px;height:8px;content:"";-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:#000;border-radius:50%}body:not(.rtl) .eae-pb-bar-inner-skin4:after{right:0}body.rtl .eae-pb-bar-inner-skin4:after{left:0}.eae-pb-bar-value-skin4{position:absolute;bottom:2px;font-size:14px;opacity:0}.eae-pb-bar-value-skin4.js-animated{transition-property:all;transition-duration:1.5s;transition-timing-function:linear;transition-delay:1.5s;opacity:1}.eae-pb-bar-skill-skin4{position:absolute;bottom:2px;left:-20px;opacity:0}.eae-pb-bar-skill-skin4.js-animated{transition-property:all;transition-duration:.5s;transition-timing-function:linear;transition-delay:.5s;opacity:1}body:not(.rtl) .eae-pb-bar-skill-skin4.js-animated{left:0}body.rtl .eae-pb-bar-skill-skin4.js-animated{right:0}.eae-progress-bar-skin5{height:30px;background-color:#f7f7f7}.eae-pb-bar-inner-skin5{background-color:#57b8ff}.eae-pb-bar-skill-skin5{position:absolute;top:50%;color:#fff;-webkit-transform:translateY(-50%);transform:translateY(-50%);opacity:0}body:not(.rtl) .eae-pb-bar-skill-skin5{left:10px}body:not(.rtl) .eae-pb-bar-skill-skin5{right:10px}.eae-pb-bar-skill-skin5.js-animated{transition-property:all;transition-duration:.5s;transition-timing-function:linear;transition-delay:.5s;opacity:1}.eae-pb-bar-value-skin5{position:absolute;top:50%;color:#fff;opacity:0;z-index:10}body:not(.rtl) .eae-pb-bar-value-skin5{-webkit-transform:translateX(-100%) translateX(-10px) translateY(-50%);transform:translateX(-100%) translateX(-10px) translateY(-50%)}body.rtl .eae-pb-bar-value-skin5{-webkit-transform:translateX(100%) translateX(10px) translateY(-50%);transform:translateX(100%) translateX(10px) translateY(-50%)}.eae-pb-bar-value-skin5.js-animated{transition-property:all;transition-duration:1.5s;transition-timing-function:linear;transition-delay:1.5s;opacity:1}.eae-dual-button-wrapper .eae-button-1-wrapper,.eae-dual-button-wrapper .eae-button-2-wrapper{overflow:hidden}.eae-dual-button-wrapper.button-style-horizontal{display:flex;flex-direction:row;position:relative}.eae-dual-button-main-wrapper{display:flex;flex-direction:row;justify-content:center}.eae-dual-button-wrapper a{min-width:0}.eae-dual-button-wrapper.button-style-vertical{display:inline-flex;flex-direction:column;position:relative}.eae-button-1.icon-before,.eae-button-2.icon-before{display:flex;flex-direction:row}body.rtl .eae-button-1.icon-before,body.rtl .eae-button-2.icon-before{display:flex;flex-direction:row-reverse}.eae-button-1.icon-after,.eae-button-2.icon-after{display:flex;flex-direction:row-reverse}body.rtl .eae-button-1.icon-after,body.rtl .eae-button-2.icon-after{display:flex;flex-direction:row}.eae-button-1-wrapper .eae-button-1,.eae-button-2-wrapper .eae-button-2{color:#000;align-items:center}.eae-button-1-wrapper:hover .eae-button-1,.eae-button-2-wrapper:hover .eae-button-2{color:#000}.eae-dual-button-wrapper.button-style-vertical .eae-button-1.icon-after,.eae-dual-button-wrapper.button-style-vertical .eae-button-1.icon-before,.eae-dual-button-wrapper.button-style-vertical .eae-button-2.icon-after,.eae-dual-button-wrapper.button-style-vertical .eae-button-2.icon-before{justify-content:center}.eae-button-1.icon-up,.eae-button-2.icon-up{display:flex;flex-direction:column;text-align:center}.eae-button-1.icon-down,.eae-button-2.icon-down{display:flex;flex-direction:column-reverse;text-align:center}.eae-button-1-wrapper{background:#ffb6c1;display:flex;justify-content:center;width:100%;line-height:1}.eae-button-2-wrapper{background:orange;display:flex;justify-content:center;width:100%;line-height:1}.eae-button-1.icon-up .icon-wrapper,.eae-button-2.icon-down .icon-wrapper,.eae-button-2.icon-up .icon-wrapper{text-align:center}.eae-button-1.icon-up .eae-button-text,.eae-button-2.icon-down .eae-button-text,.eae-button-2.icon-up .eae-button-text{text-align:center}.eae-button-1.icon-before i,.eae-button-2.icon-after i,.eae-button-2.icon-before i{align-self:center;margin:0 10px 0 0}.eae-button-1.icon-after i,.eae-button-2.icon-after i{align-self:center;margin:0 0 0 10px}.eae-button-1.icon-down i,.eae-button-1.icon-up i,.eae-button-2.icon-down i,.eae-button-2.icon-up i{align-self:center;margin:5px 0}.eae-dual-button-wrapper.button-style-horizontal .eae-button-1-wrapper,.eae-dual-button-wrapper.button-style-horizontal .eae-button-2-wrapper{padding:12px 30px}.eae-dual-button-wrapper.button-style-vertical .eae-button-1-wrapper,.eae-dual-button-wrapper.button-style-vertical .eae-button-2-wrapper{padding:20px 30px}.eae-button1,.eae-button2{position:relative;display:flex}.eae-dual-button-wrapper.button-style-horizontal .eae-button1,.eae-dual-button-wrapper.button-style-horizontal .eae-button2{min-width:150px}.eae-dual-button-wrapper.button-style-vertical .eae-button1{display:flex;flex-direction:column}.eae-button-separator-wrapper .eae-button-separator{width:40px;height:40px;line-height:40px;border-radius:50%;z-index:1;box-shadow:0 0 0 6px rgba(255,255,255,.2);background:#fafaf8;color:#444;text-transform:uppercase;text-align:center;vertical-align:middle;font-weight:400;font-size:14px;position:absolute;transform:translateY(-50%)}.eae-button-separator span{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%)}body.rtl.elementor-editor-active .eae-dual-button-main-wrapper .button-style-horizontal .eae-button1 .eae-button-separator-wrapper.not-rtl .eae-button-separator{display:none!important}body:not(.rtl).elementor-editor-active .eae-dual-button-main-wrapper .button-style-horizontal .eae-button2 .eae-button-separator-wrapper.rtl .eae-button-separator,body:not(.rtl).elementor-editor-preview .eae-dual-button-main-wrapper .button-style-horizontal .eae-button2 .eae-button-separator-wrapper.rtl .eae-button-separator{display:none!important}.eae-sweep-right{vertical-align:middle;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);box-shadow:0 0 1px transparent;position:relative;-webkit-transition-property:color;transition-property:color;-webkit-transition-duration:.3s;transition-duration:.3s}.eae-sweep-right:before{content:"";position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;background:#2098d1;-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:0 50%;transform-origin:0 50%;-webkit-transition-property:transform;transition-property:transform;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}.eae-sweep-right:active,.eae-sweep-right:focus,.eae-sweep-right:hover{color:#fff}.eae-sweep-right:active:before,.eae-sweep-right:focus:before,.eae-sweep-right:hover:before{-webkit-transform:scaleX(1);transform:scaleX(1)}.eae-sweep-left{vertical-align:middle;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);box-shadow:0 0 1px transparent;position:relative;-webkit-transition-property:color;transition-property:color;-webkit-transition-duration:.3s;transition-duration:.3s}.eae-sweep-left:before{content:"";position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;background:#2098d1;-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:100% 50%;transform-origin:100% 50%;-webkit-transition-property:transform;transition-property:transform;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}.eae-sweep-left:active,.eae-sweep-left:focus,.eae-sweep-left:hover{color:#fff}.eae-sweep-left:active:before,.eae-sweep-left:focus:before,.eae-sweep-left:hover:before{-webkit-transform:scaleX(1);transform:scaleX(1)}.eae-sweep-bottom{vertical-align:middle;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);box-shadow:0 0 1px transparent;position:relative;-webkit-transition-property:color;transition-property:color;-webkit-transition-duration:.3s;transition-duration:.3s}.eae-sweep-bottom:before{content:"";position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;background:#2098d1;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:50% 0;transform-origin:50% 0;-webkit-transition-property:transform;transition-property:transform;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}.eae-sweep-bottom:active,.eae-sweep-bottom:focus,.eae-sweep-bottom:hover{color:#fff}.eae-sweep-bottom:active:before,.eae-sweep-bottom:focus:before,.eae-sweep-bottom:hover:before{-webkit-transform:scaleY(1);transform:scaleY(1)}.eae-sweep-top{vertical-align:middle;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);box-shadow:0 0 1px transparent;position:relative;-webkit-transition-property:color;transition-property:color;-webkit-transition-duration:.3s;transition-duration:.3s}.eae-sweep-top:before{content:"";position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;background:#2098d1;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transition-property:transform;transition-property:transform;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}.eae-sweep-top:active,.eae-sweep-top:focus,.eae-sweep-top:hover{color:#fff}.eae-sweep-top:active:before,.eae-sweep-top:focus:before,.eae-sweep-top:hover:before{-webkit-transform:scaleY(1);transform:scaleY(1)}.eae-bounce-right{vertical-align:middle;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);box-shadow:0 0 1px transparent;position:relative;-webkit-transition-property:color;transition-property:color;-webkit-transition-duration:.5s;transition-duration:.5s}.eae-bounce-right:before{content:"";position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;background:#2098d1;-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:0 50%;transform-origin:0 50%;-webkit-transition-property:transform;transition-property:transform;-webkit-transition-duration:.5s;transition-duration:.5s;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}.eae-bounce-right:active,.eae-bounce-right:focus,.eae-bounce-right:hover{color:#fff}.eae-bounce-right:active:before,.eae-bounce-right:focus:before,.eae-bounce-right:hover:before{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transition-timing-function:cubic-bezier(.52,1.64,.37,.66);transition-timing-function:cubic-bezier(.52,1.64,.37,.66)}.eae-bounce-left{vertical-align:middle;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);box-shadow:0 0 1px transparent;position:relative;-webkit-transition-property:color;transition-property:color;-webkit-transition-duration:.5s;transition-duration:.5s}.eae-bounce-left:before{content:"";position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;background:#2098d1;-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:100% 50%;transform-origin:100% 50%;-webkit-transition-property:transform;transition-property:transform;-webkit-transition-duration:.5s;transition-duration:.5s;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}.eae-bounce-left:active,.eae-bounce-left:focus,.eae-bounce-left:hover{color:#fff}.eae-bounce-left:active:before,.eae-bounce-left:focus:before,.eae-bounce-left:hover:before{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transition-timing-function:cubic-bezier(.52,1.64,.37,.66);transition-timing-function:cubic-bezier(.52,1.64,.37,.66)}.eae-bounce-bottom{vertical-align:middle;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);box-shadow:0 0 1px transparent;position:relative;-webkit-transition-property:color;transition-property:color;-webkit-transition-duration:.5s;transition-duration:.5s}.eae-bounce-bottom:before{content:"";position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;background:#2098d1;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:50% 0;transform-origin:50% 0;-webkit-transition-property:transform;transition-property:transform;-webkit-transition-duration:.5s;transition-duration:.5s;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}.eae-bounce-bottom:active,.eae-bounce-bottom:focus,.eae-bounce-bottom:hover{color:#fff}.eae-bounce-bottom:active:before,.eae-bounce-bottom:focus:before,.eae-bounce-bottom:hover:before{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition-timing-function:cubic-bezier(.52,1.64,.37,.66);transition-timing-function:cubic-bezier(.52,1.64,.37,.66)}.eae-bounce-top{vertical-align:middle;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);box-shadow:0 0 1px transparent;position:relative;-webkit-transition-property:color;transition-property:color;-webkit-transition-duration:.5s;transition-duration:.5s}.eae-bounce-top:before{content:"";position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;background:#2098d1;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transition-property:transform;transition-property:transform;-webkit-transition-duration:.5s;transition-duration:.5s;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}.eae-bounce-top:active,.eae-bounce-top:focus,.eae-bounce-top:hover{color:#fff}.eae-bounce-top:active:before,.eae-bounce-top:focus:before,.eae-bounce-top:hover:before{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition-timing-function:cubic-bezier(.52,1.64,.37,.66);transition-timing-function:cubic-bezier(.52,1.64,.37,.66)}.eae-markers .marker{display:none}.eae-markers p{margin-bottom:0}.eae-fg-wrapper{display:flex;flex-direction:column;overflow:hidden}.eae-gallery-filter{display:flex;flex-direction:row;justify-content:center;flex-wrap:wrap}.eae-filter-label{padding:5px 10px;background-color:#a0ce4e;color:#fff;margin:0 3px 0 3px}.eae-filter-label.current{background-color:#73b9dc}.eae-fg-image{display:flex;flex-wrap:wrap;flex-direction:row}.eae-fg-wrapper .eae-gallery-item-inner img{width:100%;height:auto;display:block!important;transition:all .5s ease;-webkit-transition:all .5s ease}.eae-gallery-item{height:auto}.eae-gallery-filter a{color:#fff;text-decoration:none}.eae-gallery-filter a.current{font-weight:700}.eae-gallery-item-inner{position:relative;overflow:hidden}.eae-overlay-always .eae-gallery-item .eae-grid-overlay{display:block}.eae-overlay-hover .eae-gallery-item-inner:hover .eae-grid-overlay{display:block}.eae-overlay-hide-on-hover .eae-gallery-item-inner:hover .eae-grid-overlay{display:none}.eae-overlay-hide-on-hover .eae-grid-overlay{display:block}.eae-grid-overlay{position:absolute;top:0;left:0;display:none;z-index:99;background:rgba(0,0,0,.5);height:100%;width:100%}.eae-grid-overlay-inner{display:block;position:relative;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center}.eae-fg-wrapper .eae-icon-wrapper{display:flex;justify-content:center}.eae-overlay-caption{display:block;line-height:1em;margin-top:15px;color:#73b9dc;font-size:20px}.eae-overlay-icon{line-height:1em;padding:.5em;display:inline-block}.eae-overlay-icon svg{height:auto}.eae-icon-view-framed .eae-overlay-icon{padding:.5em;color:#73b9dc;border:3px solid #73b9dc;background-color:transparent}.eae-icon-view-stacked .eae-overlay-icon{padding:.5em;color:#fff;background-color:#818a91}.eae-hover-direction-effect .eae-grid-overlay{position:absolute;z-index:99;background:rgba(0,0,0,.5);height:100%;width:100%}.eae-fg-wrapper.eae-image-ratio-yes .eae-gallery-item-inner .eae-fg-img-wrapper{position:relative;top:0;overflow:hidden;left:0;right:0;border:0}.eae-fg-wrapper.eae-image-ratio-yes .eae-gallery-item-inner .eae-fg-img-wrapper img{height:100%;width:100%;display:block;position:absolute;top:0;left:0;object-fit:cover}.wts-eae-ribbons-badges-wrapper{display:none}.wts-eae-enable-ribbons-badges-yes .elementor-column-wrap>.wts-eae-ribbons-badges-wrapper{display:block}.wts-eae-enable-ribbons-badges-yes.wts-eae-badge-type-ribbon>.wts-eae-ribbons-badges-wrapper{position:absolute;top:0;left:auto;right:0;-ms-transform:rotate(90deg);width:150px;overflow:hidden;height:150px;z-index:999;padding:8px 12px}.wts-eae-badge-h-left.wts-eae-enable-ribbons-badges-yes.wts-eae-badge-type-ribbon>.wts-eae-ribbons-badges-wrapper{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);left:0;right:auto}.wts-eae-badge-h-right.wts-eae-enable-ribbons-badges-yes.wts-eae-badge-type-ribbon>.wts-eae-ribbons-badges-wrapper{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(90deg);left:auto;right:0}.wts-eae-enable-ribbons-badges-yes.wts-eae-badge-type-ribbon>.wts-eae-ribbons-badges-wrapper span.wts-eae-ribbons-badges-inner{position:absolute;text-align:center;left:0;top:0;width:200%;-webkit-transform:translateY(-50%) translateX(-50%) translateX(35px) rotate(-45deg);-ms-transform:translateY(-50%) translateX(-50%) translateX(35px) rotate(-45deg);transform:translateY(-50%) translateX(-50%) translateX(35px) rotate(-45deg);margin-top:35px;font-size:13px;line-height:2;font-weight:800;text-transform:uppercase;background:rgba(63,195,135,.8);padding:8px 12px}.wts-eae-enable-ribbons-badges-yes.wts-eae-badge-type-badge>.wts-eae-ribbons-badges-wrapper span.wts-eae-ribbons-badges-inner{min-height:3.236em;min-width:3.236em;padding:0;font-size:1em;font-weight:700;position:absolute;text-align:center;line-height:3.236;top:-.5em;left:-.5em;margin:0;border-radius:100%;background-color:#77a464;color:#fff;font-size:.857em;z-index:9}.wts-eae-badge-h-left.wts-eae-badge-v-bottom.wts-eae-enable-ribbons-badges-yes>.wts-eae-ribbons-badges-wrapper span.wts-eae-ribbons-badges-inner{left:20px;right:auto;top:auto;bottom:20px}.wts-eae-badge-h-left.wts-eae-badge-v-top.wts-eae-enable-ribbons-badges-yes>.wts-eae-ribbons-badges-wrapper span.wts-eae-ribbons-badges-inner{left:20px;right:auto;top:20px;bottom:auto}.wts-eae-badge-h-right.wts-eae-badge-v-bottom.wts-eae-enable-ribbons-badges-yes>.wts-eae-ribbons-badges-wrapper span.wts-eae-ribbons-badges-inner{left:auto;right:20px;top:auto;bottom:20px}.wts-eae-badge-h-right.wts-eae-badge-v-top.wts-eae-enable-ribbons-badges-yes>.wts-eae-ribbons-badges-wrapper span.wts-eae-ribbons-badges-inner{left:auto;right:20px;top:20px;bottom:auto}.eae-flip-box-back svg,.eae-flip-box-front svg{width:25px;height:auto}.wts-eae-textseparator svg{width:25px;height:auto}.eae-img-comp-slider svg{width:22px;height:auto}.eae-popup-link svg{display:inline-block;width:1em}.eae-popup svg:focus,.eae-popup svg:hover{opacity:1;cursor:pointer}.eae-popup svg:active{top:1px}.eae-popup svg.eae-close{width:28px;height:28px;line-height:1em;text-decoration:none;text-align:center;opacity:1;background-color:#fff}.eae-dual-button-wrapper svg{width:1em;height:auto;display:block}eae-button-separator i{position:relative;display:block}.eae-button-1.icon-before svg,.eae-button-2.icon-after svg,.eae-button-2.icon-before svg{align-self:center;margin:0 10px 0 0}.eae-button-1.icon-after svg,.eae-button-2.icon-after svg{align-self:center;margin:0 0 0 10px}.eae-button-1.icon-down svg,.eae-button-1.icon-up svg,.eae-button-2.icon-down svg,.eae-button-2.icon-up svg{align-self:center;margin:5px 0}.eae-pt-button-wrapper a svg{width:1em}.eae-pt-action-button .eae-pt-align-icon-left{float:left}.eae-pt-action-button .eae-pt-align-icon-right{float:right}.eae-icon-wrap svg{width:20px;height:auto;font-size:20px;display:block}.eae-info-circle .eae-icon-wrap svg{width:20px;height:auto;font-size:20px}.eae-icon-view-stacked svg{fill:#fff}.ae-link-yes{cursor:pointer}.eae-element-unfold-content{padding:10px 0;background-color:#d3d3d3c4;width:100%;position:absolute;left:0;bottom:0;z-index:999}a.eae-unfold-link{background-color:#61ce70;color:#fff;display:inline-block;overflow:hidden}a.eae-unfold-link svg{background-color:#fff}.eae-unfold-button-icon{vertical-align:middle}.eae-fold-yes .elementor-column-wrap,.eae-fold-yes.elementor-section .elementor-container,.eae-fold-yes.elementor-widget{overflow:hidden}body.elementor-editor-active .elementor.elementor-edit-mode .elementor-element.elementor-section.eae-widget-unfold-yes .elementor-container,body.elementor-editor-preview .elementor.elementor-edit-mode .elementor-element.elementor-section.eae-widget-unfold-yes .elementor-container{overflow:hidden}body.elementor-editor-active .elementor.elementor-edit-mode .elementor-element.elementor-column.eae-widget-unfold-yes .elementor-column-wrap,body.elementor-editor-preview .elementor.elementor-edit-mode .elementor-element.elementor-column.eae-widget-unfold-yes .elementor-column-wrap{overflow:hidden}body.elementor-editor-active .elementor.elementor-edit-mode .elementor-element.elementor-widget.eae-widget-unfold-yes,body.elementor-editor-preview .elementor.elementor-edit-mode .elementor-element.elementor-widget.eae-widget-unfold-yes{overflow:hidden}.eae-widget-unfold-yes .elementor-widget-container .eae-fold-yes.eae-rc{display:none!important}.eae-unfold-button-icon svg{line-height:1em;text-decoration:none;-webkit-mask-repeat:no-repeat!important;text-align:center;opacity:1}.eae-fold-icon-type-svg .eae-unfold-button-icon,.eae-unfold-icon-type-svg .eae-unfold-button-icon{-webkit-mask-size:cover!important;background-image:none;transform:translateY(-50%)}.elementor-section.elementor-section-items-bottom.eae-widget-unfold-yes>.elementor-container,.elementor-section.elementor-section-items-middle.eae-widget-unfold-yes>.elementor-container{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:start}.elementor-section.elementor-section-content-bottom.eae-widget-unfold-yes>.elementor-container,.elementor-section.elementor-section-content-middle.eae-widget-unfold-yes>.elementor-container{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:start}.elementor-widget-wts-modal-popup.eae-pop-btn-type-image .eae-popup-link{padding:0;background-color:transparent;overflow:hidden}[data-elementor-device-mode=tablet] .eae-tab-format-mobile .eae-ct-hide.eae-fbox-heading{display:none!important}.eae-timeline-item .eae-icon-view-stacked{border-width:0!important}.eae-content-switcher-wrapper{display:block;text-align:center}.eae-cs-layout-skin1 .eae-cs-switch-wrapper{display:inline-flex;flex-wrap:wrap;padding:8px 12px;background:#54595f;border-radius:50px}.eae-cs-switch-container{display:block;text-align:center}.eae-cs-layout-skin1 .eae-cs-label-wrapper{display:inline-block;overflow:hidden}.eae-cs-layout-skin1 .eae-content-switch-button{border-radius:50px;padding:8px 12px;background-color:#7a7a7a;color:#fff;overflow:hidden;display:block;min-width:150px;position:relative;text-align:center;margin:3px}.eae-cs-layout-skin1 .eae-content-switch-button:before{height:100%;top:0;left:0;z-index:0;content:"";width:0;position:absolute;right:0;transition:all .3s ease-out}.eae-cs-layout-skin1 .eae-content-switch-button.active:before{width:100%;left:0;right:auto;background-color:#61ce70}.eae-cs-layout-skin1 .eae-content-switch-label{position:relative}.eae-cs-content-section{display:none}.eae-cs-content-section.active{display:block}@media only screen and (max-width:768px){.eae-cs-switch-wrapper{display:inline-block!important}}.eae-cs-layout-skin2 .eae-cs-switch-wrapper{display:inline-flex;flex-wrap:wrap;padding:0;background:0 0}.eae-cs-layout-skin2 .eae-cs-label-wrapper{display:inline-block}.eae-cs-layout-skin2 .eae-content-switch-button{width:auto;margin:3px 8px;padding:10px 12px;background-color:#e2e2e2;overflow:hidden;display:block;position:relative;text-align:center;border-radius:5px;border:1px solid rgba(130,130,130,.26);color:rgba(71,71,71,.44)}.eae-cs-layout-skin2 .eae-content-switch-button.active{box-shadow:0 10px 34px -9px rgba(0,0,0,.38);background-color:#fff;color:#575757;border-color:#fff}h5.eae-cs-label{margin:0}.eae-cs-layout-skin3 .eae-cs-switch-wrapper{display:block;justify-content:center;align-items:center}.eae-content-switch-label.primary-label{margin-right:30px}.eae-content-switch-label.secondary-label{margin-left:30px}.eae-cs-layout-skin3 .eae-cs-switch-label{position:relative;display:inline-block;width:4.5em;height:2.3em;vertical-align:middle}.eae-cs-layout-skin3 .eae-content-switch-label{margin:0;display:inline-block}.eae-cs-layout-skin3 .eae-cs-switch-button{display:inline-block}.eae-cs-layout-skin3 .eae-cs-label{display:inline-block}.eae-cs-layout-skin3 .eae-cs-switch-label input.eae-content-toggle-switch{display:none}.eae-cs-layout-skin3 .eae-cs-switch-label input.eae-content-toggle-switch+span{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;-webkit-transition:.4s;transition:.4s;-webkit-border-radius:1.5em;border-radius:1.5em;background:#2e394d;border:2px solid #2e394d}.eae-cs-layout-skin3 .eae-cs-switch-label input.eae-content-toggle-switch+span:before{position:absolute;content:"";height:28px;width:28px;left:4px;transform:translateY(-52%);top:50%;transition:.4s;transition:.4s;-webkit-border-radius:50%;border-radius:50%;background:#88cf8f;border:2px solid #88cf8f}body.rtl .eae-cs-layout-skin3 .eae-cs-switch-label input.eae-content-toggle-switch+span:before{left:unset;right:4px}.eae-cs-layout-skin3 .eae-cs-switch-label input:checked.eae-content-toggle-switch+span:before{transform:translate(36px,-52%)}body.rtl .eae-cs-layout-skin3 .eae-cs-switch-label input:checked.eae-content-toggle-switch+span:before{transform:translate(-36px,-52%)}.eae-content-switch-label.active{color:#61ce70}.eae-cs-layout-skin4 .eae-cs-switch-wrapper{display:block}.eae-cs-layout-skin4 .eae-content-switch-label.primary-label{margin-right:30px}.eae-cs-layout-skin4 .eae-content-switch-label.secondary-label{margin-left:30px}.eae-cs-layout-skin4 .eae-content-switch-label{display:inline-block}.eae-cs-layout-skin4 .eae-cs-switch-label{position:relative;display:inline-block;width:70px;height:20px;vertical-align:middle}.eae-cs-layout-skin4 .eae-cs-label{display:inline-block}.eae-cs-layout-skin4 .eae-content-toggle-switch{display:none}.eae-cs-layout-skin4 .eae-content-toggle-switcher{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;-webkit-transition:.4s;transition:.4s;-webkit-border-radius:1.5em;border-radius:1.5em;background:#2e394d;border:2px solid #2e394d}.eae-cs-layout-skin4 .eae-cs-switch-button{display:inline-block}.eae-cs-layout-skin4 .eae-content-toggle-switcher:before{position:absolute;content:"";height:34px;width:34px;left:-12px;top:50%;transform:translateY(-50%);border-radius:50%;border:2px solid #88cf8f;background:#88cf8f;-webkit-transition:.4s;transition:.4s;-webkit-box-shadow:3px 3px 6px 1px rgba(0,0,0,.2);box-shadow:3px 3px 6px 1px rgba(0,0,0,.2)}.eae-cs-layout-skin4 .eae-cs-switch-container{padding:15px 0}body.rtl .eae-cs-layout-skin4 .eae-content-toggle-switcher:before{right:-12px!important}.eae-cs-layout-skin4 input:checked+.eae-content-toggle-switcher:before{transform:translate(55px,-50%)}body.rtl .eae-cs-layout-skin4 input:checked+.eae-content-toggle-switcher:before{transform:translate(-55px,-50%)}.eae-swiper-outer-wrapper{position:relative}.eae-swiper-container{position:relative}.eae-thumb-container{position:absolute}.eae-swiper-outer-wrapper .eae-swiper-slide{height:400px;background-size:cover;background-repeat:no-repeat;background-position:right}.eae-swiper-outer-wrapper .eae-swiper-slide .eae-slide-inner{color:#7a7a7a;display:flex;position:absolute;top:0;left:0;bottom:0;right:0;padding:20px}.eae-slide-inner .eae-slide-content{padding:20px 30px}.eae-slide-inner .eae-slide-heading{font-size:35px;font-weight:700;line-height:1}.eae-slide-inner .eae-slide-text{font-size:17px;line-height:1.4}.eae-slide-inner .eae-slide-button{display:inline-block}.eae-slide-inner .eae-slide-btn{display:inline-block;font-size:15px;padding:12px 24px;border-radius:3px;cursor:pointer;transition:all .3s}.eae-slide-inner .eae-slide-heading:not(:last-child),.eae-slide-inner .eae-slide-text:not(:last-child){margin-bottom:30px}.eae--hr-position-left .eae-slide-inner{-webkit-box-pack:start;justify-content:flex-start}.eae--hr-position-right .eae-slide-inner{-webkit-box-pack:end;justify-content:flex-end}.eae--hr-position-center .eae-slide-inner{-webkit-box-pack:center;justify-content:center}.eae--vr-position-top .eae-slide-inner{-webkit-box-pack:start;align-items:flex-start}.eae--vr-position-middle .eae-slide-inner{-webkit-box-align:center;align-items:center}.eae--vr-position-bottom .eae-slide-inner{-webkit-box-pack:end;align-items:flex-end}.eae-swiper-button-prev{left:10px}.eae-swiper-button-next{right:10px}.eae-swiper-button{position:absolute;display:inline-flex;z-index:1;cursor:pointer;color:#7a7a7a;top:50%;transform:translateY(-50%)}.swiper-pagination-bullet{margin-bottom:5px!important}.eae-swiper-outer-wrapper .eae-swiper-slide .eae-background-overlay{width:100%;height:100%;position:absolute}.eae-swiper-outer-wrapper .eae-gallery-thumbs{box-sizing:border-box;text-align:center}.eae-swiper-outer-wrapper .eae-gallery-thumbs .eae-thumb-slide{background-size:cover;background-position:center;height:100%;opacity:.7}.eae-swiper-outer-wrapper .eae-gallery-thumbs .swiper-slide-thumb-active{opacity:1}.eae-chart-outer-container{position:relative}.eae-chart-overlay{width:100%;height:100%;position:absolute}.eae-table{width:100%;height:auto;margin:0;padding:0;border:none;border-collapse:collapse}.eae-table tr{border-style:none}.eae-table__body_row_column{border:none;overflow:hidden}.eae-table__head_column{transition:all .3s ease-in-out}.eae-table__body_row_column{transition:all .3s ease-in-out}.eae-head-icon{vertical-align:middle}.eae-table__head-column-wrapper .eae-head-img{width:50px;display:inline-block}.eae-table__head-column-wrapper .eae-lottie-animation svg{width:70px!important;line-height:0}.eae-head-icon-before{margin-right:5px}.eae-head-icon-after{margin-left:5px}.eae-table__col-inner{display:block}.eae-body-icon{vertical-align:middle}.eae-table__body-column-wrapper .eae-body-image{width:70px;display:inline-block}.eae-table__body-column-wrapper .eae-table-lottie-animation svg{width:70px!important;line-height:0}.eae-body-icon-before{margin-right:5px}.eae-body-icon-after{margin-left:5px}.eae-table-body__text{vertical-align:middle}.eae-table .eae-table-search-hide{display:none}.eae-table-search-wrap{padding:0;margin:0;margin-bottom:10px}.eae-search-wrap{padding:0;margin:0;width:50%;display:inline-flex;align-items:center;box-sizing:border-box;overflow:hidden;align-items:center}.eae-table-search-wrap .eae-table-search-field{margin:0;padding:0;border:0;outline:0;background-color:#eceeef;width:100%;font-size:15px;color:#7a7a7a;padding:10px;line-height:0;display:inline-block;box-sizing:border-box}.eae-table-search-wrap .eae-table-search-field:focus{background-color:#eceeef}::placeholder{opacity:.5}.search-icon{background-color:#eceeef;padding:0;margin:0;padding:10px}.search-icon i{color:#7a7a7a73;display:flex;align-items:center;left:0;font-size:20px}.eae-table__sortable .eae-table__sortable-head{cursor:pointer}.eae-table__head__wrapper{display:flex;justify-content:center;align-items:center}.eae-sort-icon{padding:0;margin:0;align-self:center}.eae-table__head-column-wrapper{flex-grow:3;display:inline-block;width:100%}.eae-icon-sort-icon{vertical-align:middle;display:inline-block}.eae-icon{padding:0;margin:0}.eae-table__head__wrapper .eae-sort-icon .eae-icon{font-size:25px}.eae-table__sortable .eae-table__head__wrapper .eae-sort-icon-down,.eae-table__sortable .eae-table__head__wrapper .eae-sort-icon-up{display:none}.eae-table__sortable .eae-table__sort-Asc .eae-table__head__wrapper .eae-icon-sort-icon,.eae-table__sortable .eae-table__sort-Desc .eae-table__head__wrapper .eae-icon-sort-icon{display:none}.eae-table__sortable .eae-table__sort-Asc .eae-table__head__wrapper .eae-sort-icon-up,.eae-table__sortable .eae-table__sort-Desc .eae-table__head__wrapper .eae-sort-icon-down{display:block}
assets/js/eae.js CHANGED
@@ -432,7 +432,7 @@ var breakpoints = eae.breakpoints;
432
  };
433
 
434
  var ParticlesBG = function ($scope, $) {
435
-
436
  if ($scope.hasClass('eae-particle-yes')) {
437
  id = $scope.data('id');
438
  element_type = $scope.data('element_type');
@@ -449,7 +449,6 @@ var breakpoints = eae.breakpoints;
449
  } else {
450
  $scope.prepend('<div class="eae-particle-wrapper " id="eae-particle-' + id + '"></div>');
451
  }
452
-
453
  particlesJS('eae-particle-' + id, pdata);
454
  }
455
 
@@ -472,6 +471,87 @@ var breakpoints = eae.breakpoints;
472
 
473
  };
474
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
475
 
476
  /*EAE Animated Gradient Background*/
477
 
432
  };
433
 
434
  var ParticlesBG = function ($scope, $) {
435
+ console.log("Called");
436
  if ($scope.hasClass('eae-particle-yes')) {
437
  id = $scope.data('id');
438
  element_type = $scope.data('element_type');
449
  } else {
450
  $scope.prepend('<div class="eae-particle-wrapper " id="eae-particle-' + id + '"></div>');
451
  }
 
452
  particlesJS('eae-particle-' + id, pdata);
453
  }
454
 
471
 
472
  };
473
 
474
+ // var ParticlesBG = function ($scope, $) {
475
+
476
+ // if ($scope.hasClass('eae-particle-yes')) {
477
+ // const wId = $scope.data('id');
478
+ // const wrapper = document.querySelector('.elementor-element-'+wId);
479
+ // //outerWrapper = wrapper.querySelector('.fv-dp-outer-wrapper');
480
+ // id = $scope.data('id');
481
+
482
+ // element_type = wrapper.getAttribute('data-element_type');
483
+ // is_edit_mode = wrapper.classList.contains('elementor-element-edit-mode');
484
+ // console.log(is_edit_mode);
485
+ // pdata = wrapper.getAttribute('data-eae-particle');
486
+ // if(is_edit_mode){
487
+ // pdata_wrapper = wrapper.querySelector('.eae-particle-wrapper').getAttribute('data-eae-pdata');
488
+ // pdata_wrapper = JSON.parse(pdata_wrapper);
489
+ // }
490
+
491
+ // if (typeof pdata != 'undefined' && pdata != null) {
492
+ // var bsElement = wrapper.querySelector('.eae-section-bs');
493
+ // if (bsElement) {
494
+ // console.log("BS Inner");
495
+ // var particleDiv = document.createElement("div");
496
+ // particleDiv.setAttribute('class' , 'eae-particle-wrapper');
497
+ // particleDiv.setAttribute('id' , "eae-particle-" + id);
498
+ // var bsElement = wrapper.querySelector('.eae-section-bs');
499
+ // bsElement.after(particleDiv);
500
+ // tsParticles.load("eae-particle-" + id, JSON.parse(pdata));
501
+ // } else {
502
+ // if (element_type == 'column') {
503
+ // var particleDiv = document.createElement("div");
504
+ // particleDiv.setAttribute('class' , 'eae-particle-wrapper');
505
+ // particleDiv.setAttribute('id' , "eae-particle-" + id);
506
+ // wrapper.prepend(particleDiv);
507
+ // } else {
508
+ // var particleDiv = document.createElement("div");
509
+ // particleDiv.setAttribute('class' , 'eae-particle-wrapper');
510
+ // particleDiv.setAttribute('id' , "eae-particle-" + id);
511
+ // wrapper.prepend(particleDiv);
512
+ // }
513
+ // //console.log(tsParticles.load('particles' , {}));
514
+ // // pdata = JSON.parse(pdata);
515
+ // tsParticles.load("eae-particle-" + id, JSON.parse(pdata));
516
+ // //particlesJS('eae-particle-' + id, pdata);
517
+ // }
518
+ // } else if (typeof pdata_wrapper != 'undefined' && pdata_wrapper != null) {
519
+ // console.log('Editor');
520
+ // console.log(element_type);
521
+ // // $scope.prepend('<div class="eae-particle-wrapper" id="eae-particle-'+ id +'"></div>');
522
+ // //console.log('calling particle js else', JSON.parse(pdata_wrapper));
523
+ // var bsElement = wrapper.querySelector('.eae-section-bs');
524
+ // if (bsElement) {
525
+ // console.log("BS Inner");
526
+ // var particleDiv = document.createElement("div");
527
+ // particleDiv.setAttribute('class' , 'eae-particle-areas');
528
+ // particleDiv.setAttribute('id' , "eae-particle-" + id);
529
+ // var bsElement = wrapper.querySelector('.eae-section-bs');
530
+ // bsElement.after(particleDiv);
531
+ // tsParticles.load("eae-particle-" + id, pdata_wrapper);
532
+ // }else{
533
+ // if (element_type == 'column') {
534
+ // $scope.prepend('<div class="eae-particle-wrapper eae-particle-area" id="eae-particle-' + id + '"></div>');
535
+ // }
536
+ // else{
537
+ // console.log('Editor Section');
538
+ // console.log(pdata_wrapper);
539
+ // var particleDiv = document.createElement("div");
540
+ // particleDiv.setAttribute('class' , 'eae-particle-areas');
541
+ // particleDiv.setAttribute('id' , "eae-particle-" + id);
542
+ // wrapper.prepend(particleDiv);
543
+ // // $scope.prepend('<div class="eae-particle-wrapper eae-particle-area" id="eae-particle-' + id + '"></div>');
544
+ // }
545
+ // tsParticles.load("eae-particle-" + id, pdata_wrapper);
546
+ // }
547
+
548
+ // //particlesJS('eae-particle-' + id, JSON.parse(pdata_wrapper));
549
+ // }
550
+
551
+ // }
552
+
553
+ // };
554
+
555
 
556
  /*EAE Animated Gradient Background*/
557
 
assets/js/eae.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(window).on("elementor/frontend/init",(function(){elementorFrontend.hooks.addAction("frontend/element_ready/wts-gmap.default",(function(e){map=function(a){$wrapper=e.find(".eae-markers");var t=$wrapper.data("zoom"),i=a.find(".marker"),n=$wrapper.data("style"),r=($wrapper.data("scroll"),{zoom:t,center:new google.maps.LatLng(0,0),mapTypeId:google.maps.MapTypeId.ROADMAP,styles:n}),d=new google.maps.Map(a[0],r);return d.markers=[],i.each((function(){!function(a,t){var i=$wrapper.data("animate");$wrapper.data("show-info-window-onload");$wrapper=e.find(".eae-markers");var n=new google.maps.LatLng(a.attr("data-lat"),a.attr("data-lng"));if(icon_img=a.attr("data-icon"),""!=icon_img)var r={url:a.attr("data-icon"),scaledSize:new google.maps.Size(a.attr("data-icon-size"),a.attr("data-icon-size"))};var d=new google.maps.Marker({position:n,map:t,icon:r,animation:google.maps.Animation.DROP});"animate-yes"==i&&"yes"!=a.data("info-window")&&d.setAnimation(google.maps.Animation.BOUNCE);"animate-yes"==i&&google.maps.event.addListener(d,"click",(function(){d.setAnimation(null)}));if(t.markers.push(d),a.html()){var s=new google.maps.InfoWindow({content:a.html()});"yes"==a.data("info-window")&&s.open(t,d),google.maps.event.addListener(d,"click",(function(){s.open(t,d)}))}"animate-yes"==i&&google.maps.event.addListener(s,"closeclick",(function(){d.setAnimation(google.maps.Animation.BOUNCE)}))}(jQuery(this),d)})),function(e,a){var t=new google.maps.LatLngBounds;jQuery.each(e.markers,(function(e,a){var i=new google.maps.LatLng(a.position.lat(),a.position.lng());t.extend(i)})),1==e.markers.length?(e.setCenter(t.getCenter()),e.setZoom(a)):e.fitBounds(t)}(d,t),d}(e.find(".eae-markers"))})),elementorFrontend.hooks.addAction("frontend/element_ready/global",(function(e){var a,t,i,n,r,d,s,o=[],l=[],c=e.children(".eae-section-bs").children(".eae-section-bs-inner");c&&c.data("eae-bg-slider")&&(slider_images=c.data("eae-bg-slider"),a=c.data("eae-bg-slider-transition"),t=c.data("eae-bg-slider-animation"),n=("yes"==(i=c.data("eae-bg-custom-overlay"))||c.data("eae-bg-slider-overlay"),eae_editor.plugin_url+"assets/lib/vegas/overlays/"+c.data("eae-bg-slider-overlay")),r=c.data("eae-bg-slider-cover"),d=c.data("eae-bs-slider-delay"),s=c.data("eae-bs-slider-timer"),"undefined"!=typeof slider_images&&(o=slider_images.split(","),jQuery.each(o,(function(e,a){var t=[];t.src=a,l.push(t)})),c.vegas({slides:l,transition:a,animation:t,overlay:n,cover:r,delay:d,timer:s,init:function(){"yes"==i&&c.children(".vegas-overlay").css("background-image","")}})))}))}));var isEditMode=!1,breakpoints=eae.breakpoints;!function(e){e(window).on("elementor/frontend/init",(function(){var a=function(e,a){function t(e){$icons=a(document).find(e).find(".eae-ic-icon-wrap"),window.innerWidth<767?$icons.each((function(e,t){a(t).css("top",a(t).height()/2+8+"px"),a(t).next(".eae-info-circle-item__content-wrap").css("padding-top",a(t).height()/2+8+"px")})):$icons.each((function(e,t){a(t).css("margin-left",-.5*a(t).outerWidth()),a(t).css("margin-top",-.5*a(t).outerHeight()),$a=function(e){return e=(e-90)*Math.PI/180,{x:50+45*Math.cos(e),y:50+45*Math.sin(e)}}($angle),$b=360/$icons.length,a(t).css("left",$a.x+"%"),a(t).css("top",$a.y+"%"),$angle+=$b}))}$wrap_class=".elementor-element-"+e.data("id"),$angle=0,t(e);var i=null;function n(){"yes"==e.find(".eae-info-circle").data("autoplay")&&(i=setInterval(r,$autoplayDuration))}function r(){e.find(".eae-active").next().length>0?e.find(".eae-active").next().addClass("eae-active").siblings().removeClass("eae-active"):e.find(".eae-info-circle-item").eq(0).addClass("eae-active").siblings().removeClass("eae-active")}$autoplayDuration=e.find(".eae-info-circle").data("delay"),n(),e.find(".eae-ic-icon-wrap").hover((function(){clearInterval(i)}),(function(){n()})),e.find(".eae-info-circle-item").length>0&&a(e.find(".eae-info-circle-item")[0]).addClass("eae-active"),e.find(".eae-ic-icon-wrap").on("click",(function(){e.find(".eae-info-circle-item").removeClass("eae-active"),a(this).parent().addClass("eae-active")})),e.hasClass("eae-mouseenter-yes")&&e.find(".eae-ic-icon-wrap").on("mouseenter",(function(){e.find(".eae-info-circle-item").removeClass("eae-active"),a(this).parent().addClass("eae-active")})),window.addEventListener("resize",t.bind(this,$wrap_class))},t=function(e,a){function t(){var t=e.find(".eae-timline-progress-bar"),i=e.find(".eae-timeline-item"),n=e.find(".eae-timeline");const r=n.data("top-offset");var d=a(n).height(),s=a(i).last().find(".eae-tl-icon-wrapper").offset().top-a(i[0]).parent().offset().top,o=e.find(".eae-tl-icon-wrapper");a(t).css("top",a(i[0]).find(".eae-tl-icon-wrapper").offset().top-a(i[0]).parent().offset().top),a(t).css("bottom",d-s),a(t).css("left",o.eq(0)[0].offsetLeft+o.eq(0).width()/2),a(t).css("display","block"),i.each((function(e,t){new Waypoint({element:a(t),handler:function(e){"down"==e?a(t).addClass("eae-tl-item-focused"):a(t).removeClass("eae-tl-item-focused")},offset:r})}))}t(),window.addEventListener("resize",t),window.addEventListener("scroll",(function(){e.find(".eae-timline-progress-bar");const t=e.find(".eae-timeline").data("top-offset");e.find(".eae-pb-inner-line").css("height",a(window).scrollTop()-e.find(".eae-timeline").offset().top+t),e.find(".eae-pb-inner-line").css("max-height",e.find(".eae-pb-inner-line").parent().height())}))};function i(e,a,t){var i=new Date;i.setTime(i.getTime()+60*t*60*1e3);var n="expires="+i.toUTCString();document.cookie=e+"="+a+";"+n+";path=/"}function n(e){for(var a=e+"=",t=decodeURIComponent(document.cookie).split(";"),i=0;i<t.length;i++){for(var n=t[i];" "==n.charAt(0);)n=n.substring(1);if(0==n.indexOf(a))return n.substring(a.length,n.length)}return""}var r=function(e,a){$is_rtl=jQuery("body").hasClass("rtl"),$wrapper=e.find(".eae-progress-bar");$wrapper.attr("data-skill");var t=$wrapper.attr("data-value"),i=$wrapper.attr("data-skin"),n=$wrapper.find(".eae-pb-bar-skill"),r=$wrapper.find(".eae-pb-bar-value"),d=$wrapper.find(".eae-pb-bar"),s=$wrapper.find(".eae-pb-bar-inner");"skin1"===i&&a(s).attr("style","width : "+t+"%"),"skin2"===i&&a(s).attr("style","width : "+t+"%"),"skin3"===i&&(a(r).addClass("eae-pb-bar-value--aligned-value"),$is_rtl?a(r).attr("style","right :"+t+"%"):a(r).attr("style","left :"+t+"%"),a(s).attr("style","width :"+t+"%")),"skin4"===i&&(a(r).addClass("eae-pb-bar-value--aligned-value"),$is_rtl?a(r).attr("style","right :"+t+"%"):a(r).attr("style","left :"+t+"%"),a(s).attr("style","width :"+t+"%"),a(d).addClass("eae-pb-bar--no-overflow")),"skin5"===i&&(a(r).addClass("eae-pb-bar-value--aligned-value"),$is_rtl?a(r).attr("style","right :"+t+"%"):a(r).attr("style","left :"+t+"%"),a(s).attr("style","width :"+t+"%")),$wrapper.each((function(e,t){new Waypoint({element:t,skill_value:a(t).find(".eae-pb-bar-skill"),valueElem:a(t).find(".eae-pb-bar-value"),prgBar:a(t).find(".eae-pb-bar-bar"),prgInner:a(t).find(".eae-pb-bar-inner"),handler:function(e){"down"==e&&(a(r).hasClass("js-animated")||a(r).addClass("js-animated"),a(s).hasClass("js-animated")||a(s).addClass("js-animated"),a(n).hasClass("js-animated")||a(n).addClass("js-animated"))},offset:"bottom-in-view"})}))},d=function(e,a){var t=e.find(".eae-content-switcher-wrapper"),i=(e.data("id"),t.find(".eae-content-switch-button"));i.each((function(e,n){a(this).on("click",(function(e){e.preventDefault();let n=a(this).find(".eae-content-switch-label");if(!a(this).hasClass("active")){a(i).removeClass("active");let e=a(n).attr("id");a(this).addClass("active");var r=a(t).find(".eae-cs-content-section");a(r).removeClass("active");let d=a(t).find(".eae-content-section-"+e);a(d).addClass("active")}}))}))},s=function(e,a){let t=e.find(".eae-content-switcher-wrapper"),i=(e.data("id"),t.find(".eae-cs-switch-label")),n=t.find(".eae-content-switch-label.primary-label");const r=a(n).attr("item_id");let d=t.find(".eae-content-switch-label.secondary-label");const s=a(d).attr("item_id");let o=t.find(".eae-cs-content-section.eae-content-section-"+r),l=t.find(".eae-cs-content-section.eae-content-section-"+s);a(i).on("click",(function(e){a(this).find("input.eae-content-toggle-switch").is(":checked")?(d.addClass("active"),l.addClass("active"),n.removeClass("active"),o.removeClass("active")):(n.addClass("active"),o.addClass("active"),d.removeClass("active"),l.removeClass("active"))}))};e.fn.EAEHoverDirection=function(a){var t=e.extend({inaccuracy:30,speed:200},a);this.find(".overlay").css({top:-9999999}),this.mouseenter((function(a){container=e(this),overlay=container.find(".overlay"),parentOffset=container.offset(),relX=a.pageX-parentOffset.left,relY=a.pageY-parentOffset.top,overlay.css({top:0,left:0,width:container.width(),height:container.height()}),relX>container.width()-t.inaccuracy?overlay.css({top:0,left:container.width()}):relX<t.inaccuracy?overlay.css({top:0,left:-container.width()}):relY>container.height()-t.inaccuracy?overlay.css({top:container.width(),left:0}):relY<t.inaccuracy&&overlay.css({top:-container.width(),left:0}),overlay.animate({top:0,left:0},t.speed)})),this.mouseleave((function(a){container=e(this),overlay=container.find(".overlay"),parentOffset=container.offset(),relX=a.pageX-parentOffset.left,relY=a.pageY-parentOffset.top,relX<=0&&overlay.animate({top:0,left:-container.width()},t.speed),relX>=container.width()&&overlay.animate({top:0,left:container.width()},t.speed),relY<=0&&overlay.animate({left:0,top:-container.height()},t.speed),relY>=container.height()&&overlay.animate({left:0,top:container.height()},t.speed)}))};let o=function(e,a){const t=e.find(".eae-chart-outer-container"),i=(e.data("id"),e.find("#eae-chart-canvas"));let n=t.data("settings");new Chart(i,n)};elementorFrontend.hooks.addAction("frontend/element_ready/wts-ab-image.default",(function(e,a){e.find(".eae-img-comp-container").imagesLoaded().done((function(){ab_style=e.find(".eae-img-comp-container").data("ab-style"),slider_pos=e.find(".eae-img-comp-container").data("slider-pos"),"horizontal"===ab_style?(separator_width=parseInt(e.find(".eae-img-comp-overlay").css("border-right-width")),function(e){var a,t;a=e.find(".eae-img-comp-overlay"),t=(t=a.width())*slider_pos/100,function(a){var i,n,r,d=0;function s(e){e.preventDefault(),d=1,window.addEventListener("mousemove",l),i.addEventListener("touchmove",c)}function o(){d=0}function l(e){var t;if(0==d)return!1;(t=function(e){var t;return e=e||window.event,t=a.getBoundingClientRect(),e.pageX-t.left}(e))<0&&(t=0),t>n&&(t=n),f(t)}function c(e){var t;if(0==d)return!1;(t=function(e){var t;return t=a.getBoundingClientRect(),e.changedTouches[0].clientX-t.left}(e))<0&&(t=0),t>n&&(t=n),f(t)}function f(e){a.style.width=e+"px",i.style.left=a.offsetWidth-i.offsetWidth/2-separator_width/2+"px"}n=a.offsetWidth,r=a.offsetHeight,a.style.width=t+"px",(i=(i=e.find(".eae-img-comp-slider"))[0]).style.top=r/2-i.offsetHeight/2+"px",i.style.left=t-i.offsetWidth/2-separator_width/2+"px",e.hasClass("elementor-element-edit-mode")||(i.addEventListener("mousedown",s),window.addEventListener("mouseup",o),i.addEventListener("touchstart",s),window.addEventListener("touchstop",o))}(a[0])}(e)):(separator_width=parseInt(e.find(".eae-img-comp-overlay").css("border-bottom-width")),function(e){var a;a=e.find(".eae-img-comp-overlay"),start_pos=a.height(),start_pos=start_pos*slider_pos/100,function(a){var t,i,n,r=0;function d(e){e.preventDefault(),r=1,window.addEventListener("mousemove",o),t.addEventListener("touchmove",l)}function s(){r=0}function o(e){var t;if(0==r)return!1;(t=function(e){var t,i=0;return e=e||window.event,t=a.getBoundingClientRect(),i=e.pageY-t.top,i-=window.pageYOffset}(e))<0&&(t=0),t>n&&(t=n),c(t)}function l(e){var t;if(0==r)return!1;(t=function(e){var t;return t=a.getBoundingClientRect(),e.changedTouches[0].clientY-t.top}(e))<0&&(t=0),t>n&&(t=n),c(t)}function c(e){a.style.height=e+"px",t.style.top=a.offsetHeight-t.offsetHeight/2-separator_width/2+"px"}i=a.offsetWidth,n=a.offsetHeight,a.style.height=start_pos+"px",(t=(t=e.find(".eae-img-comp-slider"))[0]).style.top=start_pos-t.offsetHeight/2-separator_width/2+"px",t.style.left=i/2-t.offsetWidth/2+"px",e.hasClass("elementor-element-edit-mode")||(t.addEventListener("mousedown",d),window.addEventListener("mouseup",s),t.addEventListener("touchstart",d),window.addEventListener("touchstop",s))}(a[0])}(e))}))})),elementorFrontend.hooks.addAction("frontend/element_ready/global",(function(e,a){e.hasClass("eae-particle-yes")&&(id=e.data("id"),element_type=e.data("element_type"),pdata=e.data("eae-particle"),pdata_wrapper=e.find(".eae-particle-wrapper").data("eae-pdata"),"undefined"!=typeof pdata&&""!=pdata?e.find(".eae-section-bs").length>0?(e.find(".eae-section-bs").after('<div class="eae-particle-wrapper" id="eae-particle-'+id+'"></div>'),particlesJS("eae-particle-"+id,pdata)):("column"==element_type?e.prepend('<div class="eae-particle-wrapper" id="eae-particle-'+id+'"></div>'):e.prepend('<div class="eae-particle-wrapper " id="eae-particle-'+id+'"></div>'),particlesJS("eae-particle-"+id,pdata)):"undefined"!=typeof pdata_wrapper&&""!=pdata_wrapper&&(element_type,e.prepend('<div class="eae-particle-wrapper eae-particle-area" id="eae-particle-'+id+'"></div>'),particlesJS("eae-particle-"+id,JSON.parse(pdata_wrapper))))})),elementorFrontend.hooks.addAction("frontend/element_ready/global",(function(e,a){if(e.hasClass("eae-animated-gradient-yes")){id=e.data("id"),color=e.data("color"),angle=e.data("angle");var t="linear-gradient("+angle+","+color+")";heading=e.find(".elementor-heading-title"),e.css("background-image",t),e.hasClass("elementor-element-edit-mode")&&(color=e.find(".animated-gradient").data("color"),angle=e.find(".animated-gradient").data("angle"),gradient_color_editor="linear-gradient("+angle+","+color+")",e.prepend('<div class="animated-gradient" style="background-image : '+gradient_color_editor+' "></div>'))}})),elementorFrontend.hooks.addAction("frontend/element_ready/wts-modal-popup.default",(function(e,a){$preview_modal=e.find(".eae-popup-wrapper").data("preview-modal"),$close_btn_type=e.find(".eae-popup-wrapper").data("close-button-type"),$close_btn=e.find(".eae-popup-wrapper").data("close-btn"),"icon"==$close_btn_type?$close_btn_html='<i class="eae-close '+$close_btn+'"> </i>':$close_btn_html='<svg class="eae-close" style="-webkit-mask: url('+$close_btn+"); mask: url("+$close_btn+'); "></svg>',$magnific=e.find(".eae-popup-link").eaePopup({type:"inline",disableOn:0,key:null,midClick:!1,mainClass:"eae-popup eae-popup-"+e.find(".eae-popup-link").data("id")+" eae-wrap-"+e.find(".eae-popup-link").data("ctrl-id"),preloader:!0,focus:"",closeOnContentClick:!1,closeOnBgClick:!0,closeBtnInside:e.find(".eae-popup-wrapper").data("close-in-out"),showCloseBtn:!0,enableEscapeKey:!1,modal:!1,alignTop:!1,removalDelay:0,prependTo:null,fixedContentPos:"auto",fixedBgPos:"auto",overflowY:"auto",closeMarkup:$close_btn_html,tClose:"Close (Esc)",tLoading:"Loading...",autoFocusLast:!0}),"yes"==$preview_modal&&e.hasClass("elementor-element-edit-mode")&&e.find(".eae-popup-link").click()})),elementorFrontend.hooks.addAction("frontend/element_ready/wts-testimonial-slider.default",(function(e,a){if(e.find(".eae-grid-wrapper").hasClass("eae-masonry-yes")){var t=e.find(".eae-grid").masonry({});t.imagesLoaded().progress((function(){t.masonry("layout")}))}if(e.find(".eae-layout-carousel").length){outer_wrapper=e.find(".eae-swiper-outer-wrapper"),wid=e.data("id"),wclass=".elementor-element-"+wid;var i=outer_wrapper.data("direction"),n=outer_wrapper.data("speed"),r=outer_wrapper.data("autoplay"),d=outer_wrapper.data("duration"),s=outer_wrapper.data("effect"),o=outer_wrapper.data("space"),l=outer_wrapper.data("loop");l="yes"==l;var c=outer_wrapper.data("slides-per-view"),f=outer_wrapper.data("slides-per-group"),p=outer_wrapper.data("ptype"),m=outer_wrapper.data("navigation"),u=outer_wrapper.data("clickable"),g=outer_wrapper.data("keyboard"),v=outer_wrapper.data("scrollbar");adata={direction:i,effect:s,spaceBetween:o.desktop,loop:l,speed:n,slidesPerView:c.desktop,slidesPerGroup:f.desktop,observer:!0,mousewheel:{invert:!0},breakpoints:{1024:{spaceBetween:o.tablet,slidesPerView:c.tablet,slidesPerGroup:f.tablet},767:{spaceBetween:o.mobile,slidesPerView:c.mobile,slidesPerGroup:f.mobile}}},"fade"==s&&(adata.fadeEffect={crossFade:!1}),adata.autoplay="yes"==r&&{delay:d,disableOnInteraction:!1},"yes"==m&&(adata.navigation={nextEl:".swiper-button-next",prevEl:".swiper-button-prev"}),""!=p&&(adata.pagination={el:".swiper-pagination",type:p}),"bullets"==p&&"yes"==u&&(adata.pagination={el:".swiper-pagination",clickable:!0,type:p}),"yes"==v&&(adata.scrollbar={el:".swiper-scrollbar",draggable:!0}),"yes"==g&&(adata.keyboard={enabled:!0,onlyInViewport:!0}),0==l&&(adata.autoplay={delay:d,stopOnLastSlide:!0,disableOnInteraction:!1}),window.mswiper=new Swiper(".elementor-element-"+wid+" .eae-swiper-outer-wrapper .swiper-container",adata),a(".elementor-element-"+wid+" .eae-swiper-outer-wrapper .swiper-container").css("visibility","visible")}})),elementorFrontend.hooks.addAction("frontend/element_ready/eae-info-circle.skin1",a),elementorFrontend.hooks.addAction("frontend/element_ready/eae-info-circle.skin2",a),elementorFrontend.hooks.addAction("frontend/element_ready/eae-info-circle.skin3",a),elementorFrontend.hooks.addAction("frontend/element_ready/eae-info-circle.skin4",a),elementorFrontend.hooks.addAction("frontend/element_ready/eae-timeline.skin1",t),elementorFrontend.hooks.addAction("frontend/element_ready/eae-timeline.skin2",t),elementorFrontend.hooks.addAction("frontend/element_ready/eae-timeline.skin3",t),elementorFrontend.hooks.addAction("frontend/element_ready/eae-timeline.skin4",t),elementorFrontend.hooks.addAction("frontend/element_ready/eae-evergreen-timer.skin1",(function(e,a){var t=e.find(".eae-evergreen-wrapper").data("egtime"),r=e.find(".eae-evergreen-wrapper").data("egt-expire"),d=e.find(".eae-evergreen-wrapper").data("element-type"),s="eae-"+e.find(".eae-evergreen-wrapper").data("id"),o="eae-temp-"+e.find(".eae-evergreen-wrapper").data("id"),l=e.find(".eae-evergreen-wrapper").data("actions"),c=e.find(".eae-evergreen-wrapper").data("unqid"),f=(new Date).getTime();if(!e.hasClass("elementor-element-edit-mode"))if("countdown"===d){u=new Date(t),t=u.getTime();var p="expires="+u.toUTCString();document.cookie=o+"="+u.getTime()+";"+p+";path=/"}else{var m=n(s),u="";if(""!==m){(u=new Date(parseInt(m))).setSeconds(u.getSeconds()+e.find(".eae-evergreen-wrapper").data("egtime")),t=u.getTime();var g=new Date(parseInt(m));g.setTime(g.getTime()+60*r*60*1e3);var v="expires="+g.toUTCString();document.cookie=s+"="+m+";"+v+";path=/";var h=new Date(parseInt(m));h.setTime(h.getTime()+1e3*e.find(".eae-evergreen-wrapper").data("egtime"));p="expires="+h.toUTCString();t-f>0&&(document.cookie=o+"="+m+";"+p+";path=/")}else{temp_date=t,(u=new Date).setSeconds(u.getSeconds()+e.find(".eae-evergreen-wrapper").data("egtime")),t=u.getTime(),i(s,(new Date).getTime(),r);var w=new Date;w.setTime(w.getTime()+1e3*temp_date);var y="expires="+w.toUTCString();document.cookie=o+"="+(new Date).getTime()+";"+y+";path=/"}}if(!e.hasClass("elementor-element-edit-mode")&&t-f<0)return l.length>0&&l.forEach((function(t){"redirect"===t&&($url=e.find(".eae-evergreen-wrapper").data("redirected-url"),""!==a.trim($url)&&(window.location.href=$url1)),"hide"===t&&(e.hasClass("elementor-element-edit-mode")||(e.find("#eaeclockdiv").css("display","none"),e.find(".egt-title").css("display","none"))),"message"===t&&e.find(".eae-egt-message").css("display","block"),"hide_parent"===t&&(e.hasClass("elementor-element-edit-mode")||($p_secs=e.closest("section"),$p_secs.css("display","none")))})),days="00",hours="00",minutes="00",seconds="00",e.find("."+c).find("#eaedivDays").html(days),e.find("."+c).find("#eaedivHours").html(hours.slice(-2)),e.find("."+c).find("#eaedivMinutes").html(minutes.slice(-2)),void e.find("."+c).find("#eaedivSeconds").html(seconds.slice(-2));e.hasClass("elementor-element-edit-mode")&&("countdown"===d?(u=new Date(t),t=u.getTime()):((u=new Date).setSeconds(u.getSeconds()+e.find(".eae-evergreen-wrapper").data("egtime")),t=u.getTime()));var k=setInterval((function(){var i=(new Date).getTime(),n=t-i,r=0,d=0,s=0,o=0;n>0?(r=Math.floor(n/864e5),d="0"+Math.floor(n%864e5/36e5),s="0"+Math.floor(n%36e5/6e4),o="0"+Math.floor(n%6e4/1e3)):(l.length>0&&(e.hasClass("elementor-element-edit-mode")||l.forEach((function(t){"redirect"===t&&($url1=e.find(".eae-evergreen-wrapper").data("redirected-url"),""!==a.trim($url1)&&(window.location.href=$url1)),"hide"===t&&(e.find("#eaeclockdiv").css("display","none"),e.find(".egt-title").css("display","none")),"message"===t&&e.find(".eae-egt-message").css("display","block"),"hide_parent"===t&&(e.hasClass("elementor-element-edit-mode")||($p_secs=e.closest("section"),$p_secs.css("display","none")))}))),clearInterval(k),r="0",d="00",s="00",o="00"),r<10&&(r="0"+r),e.find("."+c).find("#eaedivDays").html(r),e.find("."+c).find("#eaedivHours").html(d.slice(-2)),e.find("."+c).find("#eaedivMinutes").html(s.slice(-2)),e.find("."+c).find("#eaedivSeconds").html(o.slice(-2))}),1e3)})),elementorFrontend.hooks.addAction("frontend/element_ready/eae-evergreen-timer.skin2",(function(e,a){var t=e.find(".eae-evergreen-wrapper").data("egtime"),r=e.find(".eae-evergreen-wrapper").data("egt-expire"),d=e.find(".eae-evergreen-wrapper").data("element-type"),s="eae-"+e.find(".eae-evergreen-wrapper").data("id"),o="eae-temp-"+e.find(".eae-evergreen-wrapper").data("id"),l=e.find(".eae-evergreen-wrapper").data("actions"),c=e.find(".eae-evergreen-wrapper").data("unqid"),f=(new Date).getTime();if(!e.hasClass("elementor-element-edit-mode"))if("countdown"===d){u=new Date(t),t=u.getTime();var p="expires="+u.toUTCString();document.cookie=o+"="+u.getTime()+";"+p+";path=/"}else{var m=n(s),u="";if(""!==m){(u=new Date(parseInt(m))).setSeconds(u.getSeconds()+e.find(".eae-evergreen-wrapper").data("egtime")),t=u.getTime();var g=new Date(parseInt(m));g.setTime(g.getTime()+60*r*60*1e3);var v="expires="+g.toUTCString();document.cookie=s+"="+m+";"+v+";path=/";var h=new Date(parseInt(m));h.setTime(h.getTime()+1e3*e.find(".eae-evergreen-wrapper").data("egtime"));p="expires="+h.toUTCString();t-f>0&&(document.cookie=o+"="+m+";"+p+";path=/")}else{temp_date=t,(u=new Date).setSeconds(u.getSeconds()+e.find(".eae-evergreen-wrapper").data("egtime")),t=u.getTime(),i(s,(new Date).getTime(),r);var w=new Date;w.setTime(w.getTime()+1e3*temp_date);var y="expires="+w.toUTCString();document.cookie=o+"="+(new Date).getTime()+";"+y+";path=/"}}if(!e.hasClass("elementor-element-edit-mode")&&t-f<0)return void(l.length>0&&l.forEach((function(t){"redirect"===t&&($url=e.find(".eae-evergreen-wrapper").data("redirected-url"),""!==a.trim($url)&&(window.location.href=$url)),"hide"===t&&(e.find("."+c).find(".timer-container").css("display","none"),e.find("."+c).find(".egt-title").css("display","none")),"message"===t&&e.find("."+c).find(".eae-egt-message").css("display","block"),"hide_parent"===t&&(e.hasClass("elementor-element-edit-mode")||($p_secs=e.closest("section"),$p_secs.css("display","none")))})));e.hasClass("elementor-element-edit-mode")&&("countdown"===d?(u=new Date(t),t=u.getTime()):((u=new Date).setSeconds(u.getSeconds()+e.find(".eae-evergreen-wrapper").data("egtime")),t=u.getTime()));var k=setInterval((function(){var i=(new Date).getTime(),n=t-i,r=Math.floor(n/864e5),d=Math.floor(n%864e5/36e5),s=Math.floor(n%36e5/6e4),o=Math.floor(n%6e4/1e3);if(e.find("."+c).find("#eaeulSec1").find(".flip-clock-active").removeClass("flip-clock-active"),e.find("."+c).find("#eaeulSec1").find(".flip-clock-before").removeClass("flip-clock-before"),e.find("."+c).find("#eaeulSec").find(".flip-clock-active").removeClass("flip-clock-active"),e.find("."+c).find("#eaeulSec").find(".flip-clock-before").removeClass("flip-clock-before"),n<0)return clearInterval(k),void(l.length>0&&l.forEach((function(t){"redirect"===t&&(e.hasClass("elementor-element-edit-mode")||($url1=e.find(".eae-evergreen-wrapper").data("redirected-url"),""!==a.trim($url1)&&(window.location.href=$url1))),"hide"===t&&(e.hasClass("elementor-element-edit-mode")||(e.find("."+c).find(".timer-container").css("display","none"),e.find("."+c).find(".egt-title").css("display","none"))),"message"===t&&(e.hasClass("elementor-element-edit-mode")||e.find("."+c).find(".eae-egt-message").css("display","block")),"hide_parent"===t&&(e.hasClass("elementor-element-edit-mode")||($p_secs=e.closest("section"),$p_secs.css("display","none")))})));if(2===a.trim(o).length){var f="#eaeulSec1 li:eq( "+a.trim(o).charAt(1)+" )",p="#eaeulSec li:eq( "+a.trim(o).charAt(0)+" )";e.find("."+c).find(f).next().length>0?(e.find("."+c).find(f).addClass("flip-clock-active"),e.find("."+c).find(f).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulSec1 li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulSec1 li:first-child").addClass("flip-clock-before")),e.find("."+c).find(p).next().length>0?(e.find("."+c).find(p).addClass("flip-clock-active"),e.find("."+c).find(p).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulSec li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulSec li:first-child").addClass("flip-clock-before"))}else{f="#eaeulSec1 li:eq( "+a.trim(o).charAt(0)+" )",p="#eaeulSec li:eq( 0 )";e.find("."+c).find(f).next().length>0?(e.find("."+c).find(f).addClass("flip-clock-active"),e.find("."+c).find(f).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulSec1 li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulSec1 li:first-child").addClass("flip-clock-before")),e.find("."+c).find(p).next().length>0?(e.find("."+c).find(p).addClass("flip-clock-active"),e.find("."+c).find(p).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulSec li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulSec li:first-child").addClass("flip-clock-before"))}if(e.find("."+c).find("#eaeulMin1").find(".flip-clock-active").removeClass("flip-clock-active"),e.find("."+c).find("#eaeulMin1").find(".flip-clock-before").removeClass("flip-clock-before"),e.find("."+c).find("#eaeulMin").find(".flip-clock-active").removeClass("flip-clock-active"),e.find("."+c).find("#eaeulMin").find(".flip-clock-before").removeClass("flip-clock-before"),2==a.trim(s).length){f="#eaeulMin1 li:eq( "+a.trim(s).charAt(1)+" )",p="#eaeulMin li:eq( "+a.trim(s).charAt(0)+" )";e.find("."+c).find(f).next().length>0?(e.find("."+c).find(f).addClass("flip-clock-active"),e.find("."+c).find(f).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulMin1 li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulMin1 li:first-child").addClass("flip-clock-before")),e.find("."+c).find(p).next().length>0?(e.find("."+c).find(p).addClass("flip-clock-active"),e.find("."+c).find(p).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulMin li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulMin li:first-child").addClass("flip-clock-before"))}else{f="#eaeulMin1 li:eq( "+a.trim(s).charAt(0)+" )",p="#eaeulMin li:eq( 0 )";e.find("."+c).find(f).next().length>0?(e.find("."+c).find(f).addClass("flip-clock-active"),e.find("."+c).find(f).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulMin1 li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulMin1 li:first-child").addClass("flip-clock-before")),e.find("."+c).find(p).next().length>0?(e.find("."+c).find(p).addClass("flip-clock-active"),e.find("."+c).find(p).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulMin li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulMin li:first-child").addClass("flip-clock-before"))}if(e.find("."+c).find("#eaeulHour1").find(".flip-clock-active").removeClass("flip-clock-active"),e.find("."+c).find("#eaeulHour1").find(".flip-clock-before").removeClass("flip-clock-before"),e.find("."+c).find("#eaeulHour").find(".flip-clock-active").removeClass("flip-clock-active"),e.find("."+c).find("#eaeulHour").find(".flip-clock-before").removeClass("flip-clock-before"),2==a.trim(d).length){f="#eaeulHour1 li:eq( "+a.trim(d).charAt(1)+" )",p="#eaeulHour li:eq( "+a.trim(d).charAt(0)+" )";e.find("."+c).find(f).next().length>0?(e.find("."+c).find(f).addClass("flip-clock-active"),e.find("."+c).find(f).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulHour1 li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulHour1 li:first-child").addClass("flip-clock-before")),e.find("."+c).find(p).next().length>0?(e.find("."+c).find(p).addClass("flip-clock-active"),e.find("."+c).find(p).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulHour li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulHour li:first-child").addClass("flip-clock-before"))}else{f="#eaeulHour1 li:eq( "+a.trim(d).charAt(0)+" )",p="#eaeulHour li:eq( 0 )";e.find("."+c).find(f).next().length>0?(e.find("."+c).find(f).addClass("flip-clock-active"),e.find("."+c).find(f).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulHour1 li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulHour li:first-child").addClass("flip-clock-before")),e.find("."+c).find(p).next().length>0?(e.find("."+c).find(p).addClass("flip-clock-active"),e.find("."+c).find(p).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulHour li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulHour li:first-child").addClass("flip-clock-before"))}if(e.find("."+c).find("#eaeulDay1").find(".flip-clock-active").removeClass("flip-clock-active"),e.find("."+c).find("#eaeulDay1").find(".flip-clock-before").removeClass("flip-clock-before"),e.find("."+c).find("#eaeulDay").find(".flip-clock-active").removeClass("flip-clock-active"),e.find("."+c).find("#eaeulDay").find(".flip-clock-before").removeClass("flip-clock-before"),2==a.trim(r).length){f="#eaeulDay1 li:eq( "+a.trim(r).charAt(1)+" )",p="#eaeulDay li:eq( "+a.trim(r).charAt(0)+" )";e.find("."+c).find(f).next().length>0?(e.find("."+c).find(f).addClass("flip-clock-active"),e.find("."+c).find(f).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulDay1 li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulDay1 li:first-child").addClass("flip-clock-before")),e.find("."+c).find(p).next().length>0?(e.find("."+c).find(p).addClass("flip-clock-active"),e.find("."+c).find(p).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulDay li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulDay li:first-child").addClass("flip-clock-before"))}else{f="#eaeulDay1 li:eq( "+a.trim(r).charAt(0)+" )",p="#eaeulDay li:eq( 0 )";e.find("."+c).find(f).next().length>0?(e.find("."+c).find(f).addClass("flip-clock-active"),e.find("."+c).find(f).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulDay1 li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulDay li:first-child").addClass("flip-clock-before")),e.find("."+c).find(p).next().length>0?(e.find("."+c).find(p).addClass("flip-clock-active"),e.find("."+c).find(p).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulDay li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulDay li:first-child").addClass("flip-clock-before"))}}),1e3)})),elementorFrontend.hooks.addAction("frontend/element_ready/eae-evergreen-timer.skin3",(function(e,a){var t,r=e.find(".eae-evergreen-wrapper").data("egtime"),d=e.find(".eae-evergreen-wrapper").data("egt-expire"),s=e.find(".eae-evergreen-wrapper").data("element-type"),o="eae-"+e.find(".eae-evergreen-wrapper").data("id"),l="eae-temp-"+e.find(".eae-evergreen-wrapper").data("id"),c=e.find(".eae-evergreen-wrapper").data("actions"),f=e.find(".eae-evergreen-wrapper").data("days"),p=e.find(".eae-evergreen-wrapper").data("hours"),m=e.find(".eae-evergreen-wrapper").data("mins"),u=e.find(".eae-evergreen-wrapper").data("seconds"),g=e.find(".eae-evergreen-wrapper").data("unqid"),v=(new Date).getTime();if(!e.hasClass("elementor-element-edit-mode"))if("countdown"===s){y=new Date(r),r=y.getTime();var h="expires="+y.toUTCString();document.cookie=l+"="+y.getTime()+";"+h+";path=/"}else{var w=n(o),y="";if(""!==w){(y=new Date(parseInt(w))).setSeconds(y.getSeconds()+e.find(".eae-evergreen-wrapper").data("egtime")),r=y.getTime();var k=new Date(parseInt(w));k.setTime(k.getTime()+60*d*60*1e3);var b="expires="+k.toUTCString();document.cookie=o+"="+w+";"+b+";path=/";var C=new Date(parseInt(w));C.setTime(C.getTime()+1e3*e.find(".eae-evergreen-wrapper").data("egtime"));h="expires="+C.toUTCString();r-v>0&&(document.cookie=l+"="+w+";"+h+";path=/")}else{temp_date=r,(y=new Date).setSeconds(y.getSeconds()+e.find(".eae-evergreen-wrapper").data("egtime")),r=y.getTime(),i(o,(new Date).getTime(),d);var _=new Date;_.setTime(_.getTime()+1e3*temp_date);var x="expires="+_.toUTCString();document.cookie=l+"="+(new Date).getTime()+";"+x+";path=/"}}if(!e.hasClass("elementor-element-edit-mode")){var T=D(r);if(parseInt(T.all)<1){if(c.length>0&&(c.forEach((function(a){"redirect"===a&&(e.hasClass("elementor-element-edit-mode")||($url=e.find(".eae-evergreen-wrapper").data("redirected-url"),""!==$url&&(window.location.href=$url))),"hide_parent"===a&&(e.hasClass("elementor-element-edit-mode")||($p_secs=e.closest("section"),$p_secs.css("display","none"))),"hide"===a&&(e.find("#timer").css("display","none"),e.find(".egt-title").css("display","none"),e.find(".desc").css("display","none")),"message"===a&&e.find(".eae-egt-message").css("display","block")})),1===c.length&&(""===c[0]||"message"===c[0]))){var $=e.find("."+g).find("#timer")[0];"yes"===f&&($.innerHTML="<span class='egt-time eae-time-wrapper'><div>00</div></span>"),"yes"===p&&("yes"===f?a($).append("<span class='egt-time eae-time-wrapper'><div>00</div></span>"):$.innerHTML="<span class='egt-time eae-time-wrapper'><div>00</div></span>"),"yes"===m&&("yes"===f||"yes"===p?a($).append("<span class='egt-time eae-time-wrapper'><div>00</div></span>"):$.innerHTML="<span class='egt-time eae-time-wrapper'><div>00</div></span>"),"yes"===u&&("yes"===f||"yes"===p||"yes"===m?a($).append("<span class='egt-time eae-time-wrapper'><div>00</div></span>"):$.innerHTML="<span class='egt-time eae-time-wrapper'><div>00</div></span>")}return}}function D(e){var a=r-new Date;return{days:Math.floor(a/864e5),hours:"0"+Math.floor(a/36e5%24),minutes:"0"+Math.floor(a/6e4%60),seconds:"0"+Math.floor(a/1e3%60),all:a}}function S(e){e.classList.add("fade"),setTimeout((function(){e.classList.remove("fade")}),700)}e.hasClass("elementor-element-edit-mode")&&("countdown"===s?(y=new Date(r),r=y.getTime()):((y=new Date).setSeconds(y.getSeconds()+e.find(".eae-evergreen-wrapper").data("egtime")),r=y.getTime())),D(r).all>1&&(t=setInterval((function(){var i=e.find("."+g).find("#timer")[0],n=D(r);"yes"===f&&(n.days<10&&(n.days="0"+n.days),i.innerHTML="<span class='egt-time eae-time-wrapper'><div>"+n.days+"</div></span>"),"yes"===p&&("yes"===f?a(i).append("<span class='egt-time eae-time-wrapper'><div>"+n.hours.slice(-2)+"</div></span>"):i.innerHTML="<span class='egt-time eae-time-wrapper'><div>"+n.hours.slice(-2)+"</div></span>"),"yes"===m&&("yes"===f||"yes"===p?a(i).append("<span class='egt-time eae-time-wrapper'><div>"+n.minutes.slice(-2)+"</div></span>"):i.innerHTML="<span class='egt-time eae-time-wrapper'><div>"+n.minutes.slice(-2)+"</div></span>"),"yes"===u&&("yes"===f||"yes"===p||"yes"===m?a(i).append("<span class='egt-time eae-time-wrapper'><div>"+n.seconds.slice(-2)+"</div></span>"):i.innerHTML="<span class='egt-time eae-time-wrapper'><div>"+n.seconds.slice(-2)+"</div></span>");var d=i.getElementsByTagName("span");"yes"===f&&59==n.hours&&59==n.minutes&&59==n.seconds&&S(d[0]),"yes"===p&&("yes"===f?59==n.minutes&&59==n.seconds&&S(d[1]):59==n.minutes&&59==n.seconds&&S(d[0])),"yes"===m&&("yes"===f?"yes"===p?59==n.seconds&&S(d[2]):59==n.seconds&&S(d[1]):"yes"===p?59==n.seconds&&S(d[1]):59==n.seconds&&S(d[0])),"yes"===u&&("yes"===f?"yes"===p?"yes"===m&&S(d[3]):S("yes"===m?d[2]:d[1]):"yes"===p?"yes"===m&&S(d[2]):S("yes"===m?d[1]:d[0])),n.all<=1&&(clearInterval(t),"yes"===f&&(i.innerHTML="<span class='egt-time eae-time-wrapper'><div>00</div></span>"),"yes"===p&&("yes"===f?a(i).append("<span class='egt-time eae-time-wrapper'><div>00</div></span>"):i.innerHTML="<span class='egt-time eae-time-wrapper'><div>00</div></span>"),"yes"===m&&("yes"===f||"yes"===p?a(i).append("<span class='egt-time eae-time-wrapper'><div>00</div></span>"):i.innerHTML="<span class='egt-time eae-time-wrapper'><div>00</div></span>"),"yes"===u&&("yes"===f||"yes"===p||"yes"===m?a(i).append("<span class='egt-time eae-time-wrapper'><div>00</div></span>"):i.innerHTML="<span class='egt-time eae-time-wrapper'><div>00</div></span>"),e.hasClass("elementor-element-edit-mode")||c.length>0&&c.forEach((function(a){"redirect"===a&&($url1=e.find(".eae-evergreen-wrapper").data("redirected-url"),""!==$url1&&(window.location.href=$url1)),"hide"===a&&(e.find("#timer").css("display","none"),e.find(".egt-title").css("display","none"),e.find(".desc").css("display","none")),"message"===a&&e.find(".eae-egt-message").css("display","block"),"hide_parent"===a&&($p_secs=e.closest("section"),$p_secs.css("display","none"))})))}),1e3))})),elementorFrontend.hooks.addAction("frontend/element_ready/eae-comparisontable.default",(function(e,a){a(e.find(".eae-ct-heading")[0]).addClass("active"),e.find("ul").on("click","li",(function(){var t=a(this).index()+2;e.find("tr").find("td:not(:eq(0))").hide(),e.find("td:nth-child("+t+")").css("display","table-cell"),e.find("tr").find("th:not(:eq(0))").hide(),e.find("li").removeClass("active"),a(this).addClass("active")}));var t=window.matchMedia("(min-width: 767px)");function i(a){a.matches?e.find(".sep").attr("colspan",5):e.find(".sep").attr("colspan",2)}t.addListener(i),i(t)})),elementorFrontend.hooks.addAction("frontend/element_ready/eae-progress-bar.skin1",r),elementorFrontend.hooks.addAction("frontend/element_ready/eae-progress-bar.skin2",r),elementorFrontend.hooks.addAction("frontend/element_ready/eae-progress-bar.skin3",r),elementorFrontend.hooks.addAction("frontend/element_ready/eae-progress-bar.skin4",r),elementorFrontend.hooks.addAction("frontend/element_ready/eae-progress-bar.skin5",r),elementorFrontend.hooks.addAction("frontend/element_ready/eae-filterableGallery.default",(function(e,a){var t=e.find(".eae-fg-wrapper"),i=e.data("id"),n=t.attr("data-maxtilt"),r=t.attr("data-perspective"),d=t.attr("data-speed"),s=t.attr("data-tilt-axis"),o=t.attr("data-glare"),l=parseInt(t.attr("data-overlay-speed"));if(s="x"===s?"y":"y"===s?"x":"both","yes"===o)var c=t.attr("data-max-glare");o="yes"===o;var f=a(".elementor-element-"+i+" .eae-fg-image"),p=t.hasClass("masonry-yes")?"masonry":"fitRows";f.outerHeight();adata={percentPosition:!0,animationOptions:{duration:750,easing:"linear",queue:!1}},"fitRows"===p&&(adata.layoutMode="fitRows"),"masonry"===p&&(adata.masonry={columnWidth:".eae-gallery-item",horizontalOrder:!0}),e.hasClass("eae-show-all-yes")||(e.find(".eae-gallery-filter a").first().addClass("current"),adata.filter=e.find(".eae-gallery-filter a").first().attr("data-filter"));var m=f.isotope(adata);m.imagesLoaded().progress((function(){m.isotope("layout")})),e.find(".eae-tilt-yes")&&(atilt={maxTilt:n,perspective:r,easing:"linear",scale:1,speed:d,disableAxis:s,transition:!0,reset:!0,glare:o,maxGlare:c},e.find(".el-tilt").tilt(atilt)),a(".elementor-element-"+i+" .eae-gallery-filter a").on("click",(function(){e.find(".eae-gallery-filter .current").removeClass("current"),a(this).addClass("current");var t=a(this).attr("data-filter");adata.filter=t;var i=f.isotope(adata);return i.imagesLoaded().progress((function(){if(i.isotope("layout"),isEditMode)return!1;e.find(".eae-tilt-yes")&&(e.find(".el-tilt").tilt(atilt),e.find(".el-tilt").tilt.reset.call(e.find(".el-tilt")))})),!1})),t.hasClass("eae-hover-direction-effect")||e.find(".eae-gallery-item-inner").hover((function(){a(this).find(".eae-grid-overlay").addClass("animated")})),t.hasClass("eae-hover-direction-effect")&&(e.find(".eae-gallery-item-inner").hover((function(){a(this).find(".eae-grid-overlay").addClass("overlay")})),t.find(".eae-gallery-item-inner").EAEHoverDirection({speed:l}))})),elementorFrontend.hooks.addAction("frontend/element_ready/eae-content-switcher.skin1",d),elementorFrontend.hooks.addAction("frontend/element_ready/eae-content-switcher.skin2",d),elementorFrontend.hooks.addAction("frontend/element_ready/eae-content-switcher.skin3",s),elementorFrontend.hooks.addAction("frontend/element_ready/eae-content-switcher.skin4",s),elementorFrontend.hooks.addAction("frontend/element_ready/global",(function(e,a){isEditMode||e.data("wts-url")&&"yes"==e.data("wts-link")&&e.on("click",(function(a){e.data("wts-url")&&"yes"==e.data("wts-new-window")?window.open(e.data("wts-url")):location.href=e.data("wts-url")}))})),elementorFrontend.hooks.addAction("frontend/element_ready/eae-thumbgallery.default",(function(e,a){swiper_outer_wrapper=e.find(".eae-swiper-outer-wrapper"),wid=e.data("id"),wClass=".elementor-element-"+wid,thumb_outer_wrapper=e.find(".eae-gallery-thumbs");let t=swiper_outer_wrapper.data("swiper-settings"),i=swiper_outer_wrapper.data("slides-per-view"),n=swiper_outer_wrapper.data("space");const r=eae.breakpoints;let d={};d[r.lg-1]={slidesPerView:i.desktop,spaceBetween:n.desktop},d[r.md-1]={slidesPerView:i.tablet,spaceBetween:n.tablet};const s=eae.breakpoints;let o={};if(o[s.lg-1]={spaceBetween:t.spaceBetween.desktop},o[s.md-1]={spaceBetween:t.spaceBetween.tablet},sliderData={direction:"horizontal",effect:t.effect,keyboard:{enabled:t.keyboard},spaceBetween:t.spaceBetween.mobile,breakpoints:o,speed:t.speed,loop:"yes"===t.loop,thumbs:{swiper:{el:thumb_outer_wrapper,direction:"horizontal",spaceBetween:n.mobile,slidesPerView:i.mobile,navigation:{nextEl:wClass+" .eae-swiper-button-next",prevEl:wClass+" .eae-swiper-button-prev"},speed:t.speed,loop:"yes"===t.loop,freeMode:!0,watchSlidesVisibility:!0,watchSlidesProgress:!0,breakpoints:d,slideToClickedSlide:!0}}},void 0!==t.autoplay&&(sliderData.thumbs.swiper.autoplay={delay:t.autoplay.duration,disableOnInteraction:t.autoplay.disableOnInteraction,reverseDirection:t.autoplay.reverseDirection}),"yes"==t.navigation&&(sliderData.navigation={nextEl:wClass+" .eae-swiper-button-next",prevEl:wClass+" .eae-swiper-button-prev"}),""!==t.pagination&&(sliderData.pagination={type:t.pagination,el:wClass+" .swiper-pagination",clickable:t.clickable}),void 0!==t.autoplay&&(sliderData.autoplay={delay:t.autoplay.duration,disableOnInteraction:t.autoplay.disableOnInteraction,reverseDirection:t.autoplay.reverseDirection}),"undefined"==typeof Swiper){new(0,elementorFrontend.utils.swiper)(".elementor-element-"+wid+" .eae-swiper-outer-wrapper .eae-swiper-container",sliderData).then(e=>{sswiper=e})}else window.sswiper=new Swiper(".elementor-element-"+wid+" .eae-swiper-outer-wrapper .eae-swiper-container",sliderData),a(".elementor-element-"+wid+" .eae-swiper-outer-wrapper .eae-swiper-container").css("visibility","visible");if(void 0!==t.autoplay){"yes"==t.autoplay.pauseOnHover&&jQuery(wClass+" .eae-swiper-container").hover((function(){sswiper.autoplay.stop(),sswiper.thumbs.swiper.autoplay.stop()}),(function(){sswiper.autoplay.start(),sswiper.thumbs.swiper.autoplay.start()}))}})),elementorFrontend.hooks.addAction("frontend/element_ready/eae-chart.bar",o),elementorFrontend.hooks.addAction("frontend/element_ready/eae-chart.horizontalBar",o),elementorFrontend.hooks.addAction("frontend/element_ready/eae-chart.line",o),elementorFrontend.hooks.addAction("frontend/element_ready/eae-data-table.default",(function(e,a){const t=e.find(".eae-table"),i=e.find(".eae-table-container");lottie_class=e.find(".eae-lottie"),settings=t.data("settings"),lottie_class.each((function(){let e=a(this).data("lottie-settings"),t=lottie.loadAnimation({container:document.getElementById(e.id),path:e.url,renderer:"svg",loop:e.loop});1==e.reverse&&t.setDirection(-1)})),!0===settings.sort?(head_class=a(".eae-table thead tr:not(:last-child)").addClass("eae-sort__ignoreRow"),t.tablesorter({sortReset:!1,sortRestart:!0})):head_class=a(".eae-table thead tr:not(:last-child)").removeClass("eae-sort__ignoreRow"),settings.search&&i.find("#eae-searchable").keyup((function(){_this=this,t.find(".eae-table__body tr").each((function(){-1===a(this).text().toLowerCase().indexOf(a(_this).val().toLowerCase())?a(this).addClass("eae-table-search-hide"):a(this).removeClass("eae-table-search-hide")}))}))}))}))}(jQuery);
1
+ jQuery(window).on("elementor/frontend/init",(function(){elementorFrontend.hooks.addAction("frontend/element_ready/wts-gmap.default",(function(e){map=function(a){$wrapper=e.find(".eae-markers");var t=$wrapper.data("zoom"),i=a.find(".marker"),n=$wrapper.data("style"),r=($wrapper.data("scroll"),{zoom:t,center:new google.maps.LatLng(0,0),mapTypeId:google.maps.MapTypeId.ROADMAP,styles:n}),d=new google.maps.Map(a[0],r);return d.markers=[],i.each((function(){!function(a,t){var i=$wrapper.data("animate");$wrapper.data("show-info-window-onload");$wrapper=e.find(".eae-markers");var n=new google.maps.LatLng(a.attr("data-lat"),a.attr("data-lng"));if(icon_img=a.attr("data-icon"),""!=icon_img)var r={url:a.attr("data-icon"),scaledSize:new google.maps.Size(a.attr("data-icon-size"),a.attr("data-icon-size"))};var d=new google.maps.Marker({position:n,map:t,icon:r,animation:google.maps.Animation.DROP});"animate-yes"==i&&"yes"!=a.data("info-window")&&d.setAnimation(google.maps.Animation.BOUNCE);"animate-yes"==i&&google.maps.event.addListener(d,"click",(function(){d.setAnimation(null)}));if(t.markers.push(d),a.html()){var s=new google.maps.InfoWindow({content:a.html()});"yes"==a.data("info-window")&&s.open(t,d),google.maps.event.addListener(d,"click",(function(){s.open(t,d)}))}"animate-yes"==i&&google.maps.event.addListener(s,"closeclick",(function(){d.setAnimation(google.maps.Animation.BOUNCE)}))}(jQuery(this),d)})),function(e,a){var t=new google.maps.LatLngBounds;jQuery.each(e.markers,(function(e,a){var i=new google.maps.LatLng(a.position.lat(),a.position.lng());t.extend(i)})),1==e.markers.length?(e.setCenter(t.getCenter()),e.setZoom(a)):e.fitBounds(t)}(d,t),d}(e.find(".eae-markers"))})),elementorFrontend.hooks.addAction("frontend/element_ready/global",(function(e){var a,t,i,n,r,d,s,o=[],l=[],c=e.children(".eae-section-bs").children(".eae-section-bs-inner");c&&c.data("eae-bg-slider")&&(slider_images=c.data("eae-bg-slider"),a=c.data("eae-bg-slider-transition"),t=c.data("eae-bg-slider-animation"),n=("yes"==(i=c.data("eae-bg-custom-overlay"))||c.data("eae-bg-slider-overlay"),eae_editor.plugin_url+"assets/lib/vegas/overlays/"+c.data("eae-bg-slider-overlay")),r=c.data("eae-bg-slider-cover"),d=c.data("eae-bs-slider-delay"),s=c.data("eae-bs-slider-timer"),"undefined"!=typeof slider_images&&(o=slider_images.split(","),jQuery.each(o,(function(e,a){var t=[];t.src=a,l.push(t)})),c.vegas({slides:l,transition:a,animation:t,overlay:n,cover:r,delay:d,timer:s,init:function(){"yes"==i&&c.children(".vegas-overlay").css("background-image","")}})))}))}));var isEditMode=!1,breakpoints=eae.breakpoints;!function(e){e(window).on("elementor/frontend/init",(function(){var a=function(e,a){function t(e){$icons=a(document).find(e).find(".eae-ic-icon-wrap"),window.innerWidth<767?$icons.each((function(e,t){a(t).css("top",a(t).height()/2+8+"px"),a(t).next(".eae-info-circle-item__content-wrap").css("padding-top",a(t).height()/2+8+"px")})):$icons.each((function(e,t){a(t).css("margin-left",-.5*a(t).outerWidth()),a(t).css("margin-top",-.5*a(t).outerHeight()),$a=function(e){return e=(e-90)*Math.PI/180,{x:50+45*Math.cos(e),y:50+45*Math.sin(e)}}($angle),$b=360/$icons.length,a(t).css("left",$a.x+"%"),a(t).css("top",$a.y+"%"),$angle+=$b}))}$wrap_class=".elementor-element-"+e.data("id"),$angle=0,t(e);var i=null;function n(){"yes"==e.find(".eae-info-circle").data("autoplay")&&(i=setInterval(r,$autoplayDuration))}function r(){e.find(".eae-active").next().length>0?e.find(".eae-active").next().addClass("eae-active").siblings().removeClass("eae-active"):e.find(".eae-info-circle-item").eq(0).addClass("eae-active").siblings().removeClass("eae-active")}$autoplayDuration=e.find(".eae-info-circle").data("delay"),n(),e.find(".eae-ic-icon-wrap").hover((function(){clearInterval(i)}),(function(){n()})),e.find(".eae-info-circle-item").length>0&&a(e.find(".eae-info-circle-item")[0]).addClass("eae-active"),e.find(".eae-ic-icon-wrap").on("click",(function(){e.find(".eae-info-circle-item").removeClass("eae-active"),a(this).parent().addClass("eae-active")})),e.hasClass("eae-mouseenter-yes")&&e.find(".eae-ic-icon-wrap").on("mouseenter",(function(){e.find(".eae-info-circle-item").removeClass("eae-active"),a(this).parent().addClass("eae-active")})),window.addEventListener("resize",t.bind(this,$wrap_class))},t=function(e,a){function t(){var t=e.find(".eae-timline-progress-bar"),i=e.find(".eae-timeline-item"),n=e.find(".eae-timeline");const r=n.data("top-offset");var d=a(n).height(),s=a(i).last().find(".eae-tl-icon-wrapper").offset().top-a(i[0]).parent().offset().top,o=e.find(".eae-tl-icon-wrapper");a(t).css("top",a(i[0]).find(".eae-tl-icon-wrapper").offset().top-a(i[0]).parent().offset().top),a(t).css("bottom",d-s),a(t).css("left",o.eq(0)[0].offsetLeft+o.eq(0).width()/2),a(t).css("display","block"),i.each((function(e,t){new Waypoint({element:a(t),handler:function(e){"down"==e?a(t).addClass("eae-tl-item-focused"):a(t).removeClass("eae-tl-item-focused")},offset:r})}))}t(),window.addEventListener("resize",t),window.addEventListener("scroll",(function(){e.find(".eae-timline-progress-bar");const t=e.find(".eae-timeline").data("top-offset");e.find(".eae-pb-inner-line").css("height",a(window).scrollTop()-e.find(".eae-timeline").offset().top+t),e.find(".eae-pb-inner-line").css("max-height",e.find(".eae-pb-inner-line").parent().height())}))};function i(e,a,t){var i=new Date;i.setTime(i.getTime()+60*t*60*1e3);var n="expires="+i.toUTCString();document.cookie=e+"="+a+";"+n+";path=/"}function n(e){for(var a=e+"=",t=decodeURIComponent(document.cookie).split(";"),i=0;i<t.length;i++){for(var n=t[i];" "==n.charAt(0);)n=n.substring(1);if(0==n.indexOf(a))return n.substring(a.length,n.length)}return""}var r=function(e,a){$is_rtl=jQuery("body").hasClass("rtl"),$wrapper=e.find(".eae-progress-bar");$wrapper.attr("data-skill");var t=$wrapper.attr("data-value"),i=$wrapper.attr("data-skin"),n=$wrapper.find(".eae-pb-bar-skill"),r=$wrapper.find(".eae-pb-bar-value"),d=$wrapper.find(".eae-pb-bar"),s=$wrapper.find(".eae-pb-bar-inner");"skin1"===i&&a(s).attr("style","width : "+t+"%"),"skin2"===i&&a(s).attr("style","width : "+t+"%"),"skin3"===i&&(a(r).addClass("eae-pb-bar-value--aligned-value"),$is_rtl?a(r).attr("style","right :"+t+"%"):a(r).attr("style","left :"+t+"%"),a(s).attr("style","width :"+t+"%")),"skin4"===i&&(a(r).addClass("eae-pb-bar-value--aligned-value"),$is_rtl?a(r).attr("style","right :"+t+"%"):a(r).attr("style","left :"+t+"%"),a(s).attr("style","width :"+t+"%"),a(d).addClass("eae-pb-bar--no-overflow")),"skin5"===i&&(a(r).addClass("eae-pb-bar-value--aligned-value"),$is_rtl?a(r).attr("style","right :"+t+"%"):a(r).attr("style","left :"+t+"%"),a(s).attr("style","width :"+t+"%")),$wrapper.each((function(e,t){new Waypoint({element:t,skill_value:a(t).find(".eae-pb-bar-skill"),valueElem:a(t).find(".eae-pb-bar-value"),prgBar:a(t).find(".eae-pb-bar-bar"),prgInner:a(t).find(".eae-pb-bar-inner"),handler:function(e){"down"==e&&(a(r).hasClass("js-animated")||a(r).addClass("js-animated"),a(s).hasClass("js-animated")||a(s).addClass("js-animated"),a(n).hasClass("js-animated")||a(n).addClass("js-animated"))},offset:"bottom-in-view"})}))},d=function(e,a){var t=e.find(".eae-content-switcher-wrapper"),i=(e.data("id"),t.find(".eae-content-switch-button"));i.each((function(e,n){a(this).on("click",(function(e){e.preventDefault();let n=a(this).find(".eae-content-switch-label");if(!a(this).hasClass("active")){a(i).removeClass("active");let e=a(n).attr("id");a(this).addClass("active");var r=a(t).find(".eae-cs-content-section");a(r).removeClass("active");let d=a(t).find(".eae-content-section-"+e);a(d).addClass("active")}}))}))},s=function(e,a){let t=e.find(".eae-content-switcher-wrapper"),i=(e.data("id"),t.find(".eae-cs-switch-label")),n=t.find(".eae-content-switch-label.primary-label");const r=a(n).attr("item_id");let d=t.find(".eae-content-switch-label.secondary-label");const s=a(d).attr("item_id");let o=t.find(".eae-cs-content-section.eae-content-section-"+r),l=t.find(".eae-cs-content-section.eae-content-section-"+s);a(i).on("click",(function(e){a(this).find("input.eae-content-toggle-switch").is(":checked")?(d.addClass("active"),l.addClass("active"),n.removeClass("active"),o.removeClass("active")):(n.addClass("active"),o.addClass("active"),d.removeClass("active"),l.removeClass("active"))}))};e.fn.EAEHoverDirection=function(a){var t=e.extend({inaccuracy:30,speed:200},a);this.find(".overlay").css({top:-9999999}),this.mouseenter((function(a){container=e(this),overlay=container.find(".overlay"),parentOffset=container.offset(),relX=a.pageX-parentOffset.left,relY=a.pageY-parentOffset.top,overlay.css({top:0,left:0,width:container.width(),height:container.height()}),relX>container.width()-t.inaccuracy?overlay.css({top:0,left:container.width()}):relX<t.inaccuracy?overlay.css({top:0,left:-container.width()}):relY>container.height()-t.inaccuracy?overlay.css({top:container.width(),left:0}):relY<t.inaccuracy&&overlay.css({top:-container.width(),left:0}),overlay.animate({top:0,left:0},t.speed)})),this.mouseleave((function(a){container=e(this),overlay=container.find(".overlay"),parentOffset=container.offset(),relX=a.pageX-parentOffset.left,relY=a.pageY-parentOffset.top,relX<=0&&overlay.animate({top:0,left:-container.width()},t.speed),relX>=container.width()&&overlay.animate({top:0,left:container.width()},t.speed),relY<=0&&overlay.animate({left:0,top:-container.height()},t.speed),relY>=container.height()&&overlay.animate({left:0,top:container.height()},t.speed)}))};let o=function(e,a){const t=e.find(".eae-chart-outer-container"),i=(e.data("id"),e.find("#eae-chart-canvas"));let n=t.data("settings");new Chart(i,n)};elementorFrontend.hooks.addAction("frontend/element_ready/wts-ab-image.default",(function(e,a){e.find(".eae-img-comp-container").imagesLoaded().done((function(){ab_style=e.find(".eae-img-comp-container").data("ab-style"),slider_pos=e.find(".eae-img-comp-container").data("slider-pos"),"horizontal"===ab_style?(separator_width=parseInt(e.find(".eae-img-comp-overlay").css("border-right-width")),function(e){var a,t;a=e.find(".eae-img-comp-overlay"),t=(t=a.width())*slider_pos/100,function(a){var i,n,r,d=0;function s(e){e.preventDefault(),d=1,window.addEventListener("mousemove",l),i.addEventListener("touchmove",c)}function o(){d=0}function l(e){var t;if(0==d)return!1;(t=function(e){var t;return e=e||window.event,t=a.getBoundingClientRect(),e.pageX-t.left}(e))<0&&(t=0),t>n&&(t=n),f(t)}function c(e){var t;if(0==d)return!1;(t=function(e){var t;return t=a.getBoundingClientRect(),e.changedTouches[0].clientX-t.left}(e))<0&&(t=0),t>n&&(t=n),f(t)}function f(e){a.style.width=e+"px",i.style.left=a.offsetWidth-i.offsetWidth/2-separator_width/2+"px"}n=a.offsetWidth,r=a.offsetHeight,a.style.width=t+"px",(i=(i=e.find(".eae-img-comp-slider"))[0]).style.top=r/2-i.offsetHeight/2+"px",i.style.left=t-i.offsetWidth/2-separator_width/2+"px",e.hasClass("elementor-element-edit-mode")||(i.addEventListener("mousedown",s),window.addEventListener("mouseup",o),i.addEventListener("touchstart",s),window.addEventListener("touchstop",o))}(a[0])}(e)):(separator_width=parseInt(e.find(".eae-img-comp-overlay").css("border-bottom-width")),function(e){var a;a=e.find(".eae-img-comp-overlay"),start_pos=a.height(),start_pos=start_pos*slider_pos/100,function(a){var t,i,n,r=0;function d(e){e.preventDefault(),r=1,window.addEventListener("mousemove",o),t.addEventListener("touchmove",l)}function s(){r=0}function o(e){var t;if(0==r)return!1;(t=function(e){var t,i=0;return e=e||window.event,t=a.getBoundingClientRect(),i=e.pageY-t.top,i-=window.pageYOffset}(e))<0&&(t=0),t>n&&(t=n),c(t)}function l(e){var t;if(0==r)return!1;(t=function(e){var t;return t=a.getBoundingClientRect(),e.changedTouches[0].clientY-t.top}(e))<0&&(t=0),t>n&&(t=n),c(t)}function c(e){a.style.height=e+"px",t.style.top=a.offsetHeight-t.offsetHeight/2-separator_width/2+"px"}i=a.offsetWidth,n=a.offsetHeight,a.style.height=start_pos+"px",(t=(t=e.find(".eae-img-comp-slider"))[0]).style.top=start_pos-t.offsetHeight/2-separator_width/2+"px",t.style.left=i/2-t.offsetWidth/2+"px",e.hasClass("elementor-element-edit-mode")||(t.addEventListener("mousedown",d),window.addEventListener("mouseup",s),t.addEventListener("touchstart",d),window.addEventListener("touchstop",s))}(a[0])}(e))}))})),elementorFrontend.hooks.addAction("frontend/element_ready/global",(function(e,a){console.log("Called"),e.hasClass("eae-particle-yes")&&(id=e.data("id"),element_type=e.data("element_type"),pdata=e.data("eae-particle"),pdata_wrapper=e.find(".eae-particle-wrapper").data("eae-pdata"),"undefined"!=typeof pdata&&""!=pdata?e.find(".eae-section-bs").length>0?(e.find(".eae-section-bs").after('<div class="eae-particle-wrapper" id="eae-particle-'+id+'"></div>'),particlesJS("eae-particle-"+id,pdata)):("column"==element_type?e.prepend('<div class="eae-particle-wrapper" id="eae-particle-'+id+'"></div>'):e.prepend('<div class="eae-particle-wrapper " id="eae-particle-'+id+'"></div>'),particlesJS("eae-particle-"+id,pdata)):"undefined"!=typeof pdata_wrapper&&""!=pdata_wrapper&&(element_type,e.prepend('<div class="eae-particle-wrapper eae-particle-area" id="eae-particle-'+id+'"></div>'),particlesJS("eae-particle-"+id,JSON.parse(pdata_wrapper))))})),elementorFrontend.hooks.addAction("frontend/element_ready/global",(function(e,a){if(e.hasClass("eae-animated-gradient-yes")){id=e.data("id"),color=e.data("color"),angle=e.data("angle");var t="linear-gradient("+angle+","+color+")";heading=e.find(".elementor-heading-title"),e.css("background-image",t),e.hasClass("elementor-element-edit-mode")&&(color=e.find(".animated-gradient").data("color"),angle=e.find(".animated-gradient").data("angle"),gradient_color_editor="linear-gradient("+angle+","+color+")",e.prepend('<div class="animated-gradient" style="background-image : '+gradient_color_editor+' "></div>'))}})),elementorFrontend.hooks.addAction("frontend/element_ready/wts-modal-popup.default",(function(e,a){$preview_modal=e.find(".eae-popup-wrapper").data("preview-modal"),$close_btn_type=e.find(".eae-popup-wrapper").data("close-button-type"),$close_btn=e.find(".eae-popup-wrapper").data("close-btn"),"icon"==$close_btn_type?$close_btn_html='<i class="eae-close '+$close_btn+'"> </i>':$close_btn_html='<svg class="eae-close" style="-webkit-mask: url('+$close_btn+"); mask: url("+$close_btn+'); "></svg>',$magnific=e.find(".eae-popup-link").eaePopup({type:"inline",disableOn:0,key:null,midClick:!1,mainClass:"eae-popup eae-popup-"+e.find(".eae-popup-link").data("id")+" eae-wrap-"+e.find(".eae-popup-link").data("ctrl-id"),preloader:!0,focus:"",closeOnContentClick:!1,closeOnBgClick:!0,closeBtnInside:e.find(".eae-popup-wrapper").data("close-in-out"),showCloseBtn:!0,enableEscapeKey:!1,modal:!1,alignTop:!1,removalDelay:0,prependTo:null,fixedContentPos:"auto",fixedBgPos:"auto",overflowY:"auto",closeMarkup:$close_btn_html,tClose:"Close (Esc)",tLoading:"Loading...",autoFocusLast:!0}),"yes"==$preview_modal&&e.hasClass("elementor-element-edit-mode")&&e.find(".eae-popup-link").click()})),elementorFrontend.hooks.addAction("frontend/element_ready/wts-testimonial-slider.default",(function(e,a){if(e.find(".eae-grid-wrapper").hasClass("eae-masonry-yes")){var t=e.find(".eae-grid").masonry({});t.imagesLoaded().progress((function(){t.masonry("layout")}))}if(e.find(".eae-layout-carousel").length){outer_wrapper=e.find(".eae-swiper-outer-wrapper"),wid=e.data("id"),wclass=".elementor-element-"+wid;var i=outer_wrapper.data("direction"),n=outer_wrapper.data("speed"),r=outer_wrapper.data("autoplay"),d=outer_wrapper.data("duration"),s=outer_wrapper.data("effect"),o=outer_wrapper.data("space"),l=outer_wrapper.data("loop");l="yes"==l;var c=outer_wrapper.data("slides-per-view"),f=outer_wrapper.data("slides-per-group"),p=outer_wrapper.data("ptype"),m=outer_wrapper.data("navigation"),u=outer_wrapper.data("clickable"),g=outer_wrapper.data("keyboard"),v=outer_wrapper.data("scrollbar");adata={direction:i,effect:s,spaceBetween:o.desktop,loop:l,speed:n,slidesPerView:c.desktop,slidesPerGroup:f.desktop,observer:!0,mousewheel:{invert:!0},breakpoints:{1024:{spaceBetween:o.tablet,slidesPerView:c.tablet,slidesPerGroup:f.tablet},767:{spaceBetween:o.mobile,slidesPerView:c.mobile,slidesPerGroup:f.mobile}}},"fade"==s&&(adata.fadeEffect={crossFade:!1}),adata.autoplay="yes"==r&&{delay:d,disableOnInteraction:!1},"yes"==m&&(adata.navigation={nextEl:".swiper-button-next",prevEl:".swiper-button-prev"}),""!=p&&(adata.pagination={el:".swiper-pagination",type:p}),"bullets"==p&&"yes"==u&&(adata.pagination={el:".swiper-pagination",clickable:!0,type:p}),"yes"==v&&(adata.scrollbar={el:".swiper-scrollbar",draggable:!0}),"yes"==g&&(adata.keyboard={enabled:!0,onlyInViewport:!0}),0==l&&(adata.autoplay={delay:d,stopOnLastSlide:!0,disableOnInteraction:!1}),window.mswiper=new Swiper(".elementor-element-"+wid+" .eae-swiper-outer-wrapper .swiper-container",adata),a(".elementor-element-"+wid+" .eae-swiper-outer-wrapper .swiper-container").css("visibility","visible")}})),elementorFrontend.hooks.addAction("frontend/element_ready/eae-info-circle.skin1",a),elementorFrontend.hooks.addAction("frontend/element_ready/eae-info-circle.skin2",a),elementorFrontend.hooks.addAction("frontend/element_ready/eae-info-circle.skin3",a),elementorFrontend.hooks.addAction("frontend/element_ready/eae-info-circle.skin4",a),elementorFrontend.hooks.addAction("frontend/element_ready/eae-timeline.skin1",t),elementorFrontend.hooks.addAction("frontend/element_ready/eae-timeline.skin2",t),elementorFrontend.hooks.addAction("frontend/element_ready/eae-timeline.skin3",t),elementorFrontend.hooks.addAction("frontend/element_ready/eae-timeline.skin4",t),elementorFrontend.hooks.addAction("frontend/element_ready/eae-evergreen-timer.skin1",(function(e,a){var t=e.find(".eae-evergreen-wrapper").data("egtime"),r=e.find(".eae-evergreen-wrapper").data("egt-expire"),d=e.find(".eae-evergreen-wrapper").data("element-type"),s="eae-"+e.find(".eae-evergreen-wrapper").data("id"),o="eae-temp-"+e.find(".eae-evergreen-wrapper").data("id"),l=e.find(".eae-evergreen-wrapper").data("actions"),c=e.find(".eae-evergreen-wrapper").data("unqid"),f=(new Date).getTime();if(!e.hasClass("elementor-element-edit-mode"))if("countdown"===d){u=new Date(t),t=u.getTime();var p="expires="+u.toUTCString();document.cookie=o+"="+u.getTime()+";"+p+";path=/"}else{var m=n(s),u="";if(""!==m){(u=new Date(parseInt(m))).setSeconds(u.getSeconds()+e.find(".eae-evergreen-wrapper").data("egtime")),t=u.getTime();var g=new Date(parseInt(m));g.setTime(g.getTime()+60*r*60*1e3);var v="expires="+g.toUTCString();document.cookie=s+"="+m+";"+v+";path=/";var h=new Date(parseInt(m));h.setTime(h.getTime()+1e3*e.find(".eae-evergreen-wrapper").data("egtime"));p="expires="+h.toUTCString();t-f>0&&(document.cookie=o+"="+m+";"+p+";path=/")}else{temp_date=t,(u=new Date).setSeconds(u.getSeconds()+e.find(".eae-evergreen-wrapper").data("egtime")),t=u.getTime(),i(s,(new Date).getTime(),r);var w=new Date;w.setTime(w.getTime()+1e3*temp_date);var y="expires="+w.toUTCString();document.cookie=o+"="+(new Date).getTime()+";"+y+";path=/"}}if(!e.hasClass("elementor-element-edit-mode")&&t-f<0)return l.length>0&&l.forEach((function(t){"redirect"===t&&($url=e.find(".eae-evergreen-wrapper").data("redirected-url"),""!==a.trim($url)&&(window.location.href=$url1)),"hide"===t&&(e.hasClass("elementor-element-edit-mode")||(e.find("#eaeclockdiv").css("display","none"),e.find(".egt-title").css("display","none"))),"message"===t&&e.find(".eae-egt-message").css("display","block"),"hide_parent"===t&&(e.hasClass("elementor-element-edit-mode")||($p_secs=e.closest("section"),$p_secs.css("display","none")))})),days="00",hours="00",minutes="00",seconds="00",e.find("."+c).find("#eaedivDays").html(days),e.find("."+c).find("#eaedivHours").html(hours.slice(-2)),e.find("."+c).find("#eaedivMinutes").html(minutes.slice(-2)),void e.find("."+c).find("#eaedivSeconds").html(seconds.slice(-2));e.hasClass("elementor-element-edit-mode")&&("countdown"===d?(u=new Date(t),t=u.getTime()):((u=new Date).setSeconds(u.getSeconds()+e.find(".eae-evergreen-wrapper").data("egtime")),t=u.getTime()));var k=setInterval((function(){var i=(new Date).getTime(),n=t-i,r=0,d=0,s=0,o=0;n>0?(r=Math.floor(n/864e5),d="0"+Math.floor(n%864e5/36e5),s="0"+Math.floor(n%36e5/6e4),o="0"+Math.floor(n%6e4/1e3)):(l.length>0&&(e.hasClass("elementor-element-edit-mode")||l.forEach((function(t){"redirect"===t&&($url1=e.find(".eae-evergreen-wrapper").data("redirected-url"),""!==a.trim($url1)&&(window.location.href=$url1)),"hide"===t&&(e.find("#eaeclockdiv").css("display","none"),e.find(".egt-title").css("display","none")),"message"===t&&e.find(".eae-egt-message").css("display","block"),"hide_parent"===t&&(e.hasClass("elementor-element-edit-mode")||($p_secs=e.closest("section"),$p_secs.css("display","none")))}))),clearInterval(k),r="0",d="00",s="00",o="00"),r<10&&(r="0"+r),e.find("."+c).find("#eaedivDays").html(r),e.find("."+c).find("#eaedivHours").html(d.slice(-2)),e.find("."+c).find("#eaedivMinutes").html(s.slice(-2)),e.find("."+c).find("#eaedivSeconds").html(o.slice(-2))}),1e3)})),elementorFrontend.hooks.addAction("frontend/element_ready/eae-evergreen-timer.skin2",(function(e,a){var t=e.find(".eae-evergreen-wrapper").data("egtime"),r=e.find(".eae-evergreen-wrapper").data("egt-expire"),d=e.find(".eae-evergreen-wrapper").data("element-type"),s="eae-"+e.find(".eae-evergreen-wrapper").data("id"),o="eae-temp-"+e.find(".eae-evergreen-wrapper").data("id"),l=e.find(".eae-evergreen-wrapper").data("actions"),c=e.find(".eae-evergreen-wrapper").data("unqid"),f=(new Date).getTime();if(!e.hasClass("elementor-element-edit-mode"))if("countdown"===d){u=new Date(t),t=u.getTime();var p="expires="+u.toUTCString();document.cookie=o+"="+u.getTime()+";"+p+";path=/"}else{var m=n(s),u="";if(""!==m){(u=new Date(parseInt(m))).setSeconds(u.getSeconds()+e.find(".eae-evergreen-wrapper").data("egtime")),t=u.getTime();var g=new Date(parseInt(m));g.setTime(g.getTime()+60*r*60*1e3);var v="expires="+g.toUTCString();document.cookie=s+"="+m+";"+v+";path=/";var h=new Date(parseInt(m));h.setTime(h.getTime()+1e3*e.find(".eae-evergreen-wrapper").data("egtime"));p="expires="+h.toUTCString();t-f>0&&(document.cookie=o+"="+m+";"+p+";path=/")}else{temp_date=t,(u=new Date).setSeconds(u.getSeconds()+e.find(".eae-evergreen-wrapper").data("egtime")),t=u.getTime(),i(s,(new Date).getTime(),r);var w=new Date;w.setTime(w.getTime()+1e3*temp_date);var y="expires="+w.toUTCString();document.cookie=o+"="+(new Date).getTime()+";"+y+";path=/"}}if(!e.hasClass("elementor-element-edit-mode")&&t-f<0)return void(l.length>0&&l.forEach((function(t){"redirect"===t&&($url=e.find(".eae-evergreen-wrapper").data("redirected-url"),""!==a.trim($url)&&(window.location.href=$url)),"hide"===t&&(e.find("."+c).find(".timer-container").css("display","none"),e.find("."+c).find(".egt-title").css("display","none")),"message"===t&&e.find("."+c).find(".eae-egt-message").css("display","block"),"hide_parent"===t&&(e.hasClass("elementor-element-edit-mode")||($p_secs=e.closest("section"),$p_secs.css("display","none")))})));e.hasClass("elementor-element-edit-mode")&&("countdown"===d?(u=new Date(t),t=u.getTime()):((u=new Date).setSeconds(u.getSeconds()+e.find(".eae-evergreen-wrapper").data("egtime")),t=u.getTime()));var k=setInterval((function(){var i=(new Date).getTime(),n=t-i,r=Math.floor(n/864e5),d=Math.floor(n%864e5/36e5),s=Math.floor(n%36e5/6e4),o=Math.floor(n%6e4/1e3);if(e.find("."+c).find("#eaeulSec1").find(".flip-clock-active").removeClass("flip-clock-active"),e.find("."+c).find("#eaeulSec1").find(".flip-clock-before").removeClass("flip-clock-before"),e.find("."+c).find("#eaeulSec").find(".flip-clock-active").removeClass("flip-clock-active"),e.find("."+c).find("#eaeulSec").find(".flip-clock-before").removeClass("flip-clock-before"),n<0)return clearInterval(k),void(l.length>0&&l.forEach((function(t){"redirect"===t&&(e.hasClass("elementor-element-edit-mode")||($url1=e.find(".eae-evergreen-wrapper").data("redirected-url"),""!==a.trim($url1)&&(window.location.href=$url1))),"hide"===t&&(e.hasClass("elementor-element-edit-mode")||(e.find("."+c).find(".timer-container").css("display","none"),e.find("."+c).find(".egt-title").css("display","none"))),"message"===t&&(e.hasClass("elementor-element-edit-mode")||e.find("."+c).find(".eae-egt-message").css("display","block")),"hide_parent"===t&&(e.hasClass("elementor-element-edit-mode")||($p_secs=e.closest("section"),$p_secs.css("display","none")))})));if(2===a.trim(o).length){var f="#eaeulSec1 li:eq( "+a.trim(o).charAt(1)+" )",p="#eaeulSec li:eq( "+a.trim(o).charAt(0)+" )";e.find("."+c).find(f).next().length>0?(e.find("."+c).find(f).addClass("flip-clock-active"),e.find("."+c).find(f).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulSec1 li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulSec1 li:first-child").addClass("flip-clock-before")),e.find("."+c).find(p).next().length>0?(e.find("."+c).find(p).addClass("flip-clock-active"),e.find("."+c).find(p).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulSec li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulSec li:first-child").addClass("flip-clock-before"))}else{f="#eaeulSec1 li:eq( "+a.trim(o).charAt(0)+" )",p="#eaeulSec li:eq( 0 )";e.find("."+c).find(f).next().length>0?(e.find("."+c).find(f).addClass("flip-clock-active"),e.find("."+c).find(f).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulSec1 li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulSec1 li:first-child").addClass("flip-clock-before")),e.find("."+c).find(p).next().length>0?(e.find("."+c).find(p).addClass("flip-clock-active"),e.find("."+c).find(p).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulSec li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulSec li:first-child").addClass("flip-clock-before"))}if(e.find("."+c).find("#eaeulMin1").find(".flip-clock-active").removeClass("flip-clock-active"),e.find("."+c).find("#eaeulMin1").find(".flip-clock-before").removeClass("flip-clock-before"),e.find("."+c).find("#eaeulMin").find(".flip-clock-active").removeClass("flip-clock-active"),e.find("."+c).find("#eaeulMin").find(".flip-clock-before").removeClass("flip-clock-before"),2==a.trim(s).length){f="#eaeulMin1 li:eq( "+a.trim(s).charAt(1)+" )",p="#eaeulMin li:eq( "+a.trim(s).charAt(0)+" )";e.find("."+c).find(f).next().length>0?(e.find("."+c).find(f).addClass("flip-clock-active"),e.find("."+c).find(f).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulMin1 li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulMin1 li:first-child").addClass("flip-clock-before")),e.find("."+c).find(p).next().length>0?(e.find("."+c).find(p).addClass("flip-clock-active"),e.find("."+c).find(p).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulMin li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulMin li:first-child").addClass("flip-clock-before"))}else{f="#eaeulMin1 li:eq( "+a.trim(s).charAt(0)+" )",p="#eaeulMin li:eq( 0 )";e.find("."+c).find(f).next().length>0?(e.find("."+c).find(f).addClass("flip-clock-active"),e.find("."+c).find(f).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulMin1 li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulMin1 li:first-child").addClass("flip-clock-before")),e.find("."+c).find(p).next().length>0?(e.find("."+c).find(p).addClass("flip-clock-active"),e.find("."+c).find(p).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulMin li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulMin li:first-child").addClass("flip-clock-before"))}if(e.find("."+c).find("#eaeulHour1").find(".flip-clock-active").removeClass("flip-clock-active"),e.find("."+c).find("#eaeulHour1").find(".flip-clock-before").removeClass("flip-clock-before"),e.find("."+c).find("#eaeulHour").find(".flip-clock-active").removeClass("flip-clock-active"),e.find("."+c).find("#eaeulHour").find(".flip-clock-before").removeClass("flip-clock-before"),2==a.trim(d).length){f="#eaeulHour1 li:eq( "+a.trim(d).charAt(1)+" )",p="#eaeulHour li:eq( "+a.trim(d).charAt(0)+" )";e.find("."+c).find(f).next().length>0?(e.find("."+c).find(f).addClass("flip-clock-active"),e.find("."+c).find(f).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulHour1 li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulHour1 li:first-child").addClass("flip-clock-before")),e.find("."+c).find(p).next().length>0?(e.find("."+c).find(p).addClass("flip-clock-active"),e.find("."+c).find(p).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulHour li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulHour li:first-child").addClass("flip-clock-before"))}else{f="#eaeulHour1 li:eq( "+a.trim(d).charAt(0)+" )",p="#eaeulHour li:eq( 0 )";e.find("."+c).find(f).next().length>0?(e.find("."+c).find(f).addClass("flip-clock-active"),e.find("."+c).find(f).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulHour1 li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulHour li:first-child").addClass("flip-clock-before")),e.find("."+c).find(p).next().length>0?(e.find("."+c).find(p).addClass("flip-clock-active"),e.find("."+c).find(p).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulHour li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulHour li:first-child").addClass("flip-clock-before"))}if(e.find("."+c).find("#eaeulDay1").find(".flip-clock-active").removeClass("flip-clock-active"),e.find("."+c).find("#eaeulDay1").find(".flip-clock-before").removeClass("flip-clock-before"),e.find("."+c).find("#eaeulDay").find(".flip-clock-active").removeClass("flip-clock-active"),e.find("."+c).find("#eaeulDay").find(".flip-clock-before").removeClass("flip-clock-before"),2==a.trim(r).length){f="#eaeulDay1 li:eq( "+a.trim(r).charAt(1)+" )",p="#eaeulDay li:eq( "+a.trim(r).charAt(0)+" )";e.find("."+c).find(f).next().length>0?(e.find("."+c).find(f).addClass("flip-clock-active"),e.find("."+c).find(f).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulDay1 li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulDay1 li:first-child").addClass("flip-clock-before")),e.find("."+c).find(p).next().length>0?(e.find("."+c).find(p).addClass("flip-clock-active"),e.find("."+c).find(p).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulDay li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulDay li:first-child").addClass("flip-clock-before"))}else{f="#eaeulDay1 li:eq( "+a.trim(r).charAt(0)+" )",p="#eaeulDay li:eq( 0 )";e.find("."+c).find(f).next().length>0?(e.find("."+c).find(f).addClass("flip-clock-active"),e.find("."+c).find(f).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulDay1 li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulDay li:first-child").addClass("flip-clock-before")),e.find("."+c).find(p).next().length>0?(e.find("."+c).find(p).addClass("flip-clock-active"),e.find("."+c).find(p).next().addClass("flip-clock-before")):(e.find("."+c).find("#eaeulDay li:last-child").addClass("flip-clock-active"),e.find("."+c).find("#eaeulDay li:first-child").addClass("flip-clock-before"))}}),1e3)})),elementorFrontend.hooks.addAction("frontend/element_ready/eae-evergreen-timer.skin3",(function(e,a){var t,r=e.find(".eae-evergreen-wrapper").data("egtime"),d=e.find(".eae-evergreen-wrapper").data("egt-expire"),s=e.find(".eae-evergreen-wrapper").data("element-type"),o="eae-"+e.find(".eae-evergreen-wrapper").data("id"),l="eae-temp-"+e.find(".eae-evergreen-wrapper").data("id"),c=e.find(".eae-evergreen-wrapper").data("actions"),f=e.find(".eae-evergreen-wrapper").data("days"),p=e.find(".eae-evergreen-wrapper").data("hours"),m=e.find(".eae-evergreen-wrapper").data("mins"),u=e.find(".eae-evergreen-wrapper").data("seconds"),g=e.find(".eae-evergreen-wrapper").data("unqid"),v=(new Date).getTime();if(!e.hasClass("elementor-element-edit-mode"))if("countdown"===s){y=new Date(r),r=y.getTime();var h="expires="+y.toUTCString();document.cookie=l+"="+y.getTime()+";"+h+";path=/"}else{var w=n(o),y="";if(""!==w){(y=new Date(parseInt(w))).setSeconds(y.getSeconds()+e.find(".eae-evergreen-wrapper").data("egtime")),r=y.getTime();var k=new Date(parseInt(w));k.setTime(k.getTime()+60*d*60*1e3);var b="expires="+k.toUTCString();document.cookie=o+"="+w+";"+b+";path=/";var C=new Date(parseInt(w));C.setTime(C.getTime()+1e3*e.find(".eae-evergreen-wrapper").data("egtime"));h="expires="+C.toUTCString();r-v>0&&(document.cookie=l+"="+w+";"+h+";path=/")}else{temp_date=r,(y=new Date).setSeconds(y.getSeconds()+e.find(".eae-evergreen-wrapper").data("egtime")),r=y.getTime(),i(o,(new Date).getTime(),d);var _=new Date;_.setTime(_.getTime()+1e3*temp_date);var x="expires="+_.toUTCString();document.cookie=l+"="+(new Date).getTime()+";"+x+";path=/"}}if(!e.hasClass("elementor-element-edit-mode")){var T=D(r);if(parseInt(T.all)<1){if(c.length>0&&(c.forEach((function(a){"redirect"===a&&(e.hasClass("elementor-element-edit-mode")||($url=e.find(".eae-evergreen-wrapper").data("redirected-url"),""!==$url&&(window.location.href=$url))),"hide_parent"===a&&(e.hasClass("elementor-element-edit-mode")||($p_secs=e.closest("section"),$p_secs.css("display","none"))),"hide"===a&&(e.find("#timer").css("display","none"),e.find(".egt-title").css("display","none"),e.find(".desc").css("display","none")),"message"===a&&e.find(".eae-egt-message").css("display","block")})),1===c.length&&(""===c[0]||"message"===c[0]))){var $=e.find("."+g).find("#timer")[0];"yes"===f&&($.innerHTML="<span class='egt-time eae-time-wrapper'><div>00</div></span>"),"yes"===p&&("yes"===f?a($).append("<span class='egt-time eae-time-wrapper'><div>00</div></span>"):$.innerHTML="<span class='egt-time eae-time-wrapper'><div>00</div></span>"),"yes"===m&&("yes"===f||"yes"===p?a($).append("<span class='egt-time eae-time-wrapper'><div>00</div></span>"):$.innerHTML="<span class='egt-time eae-time-wrapper'><div>00</div></span>"),"yes"===u&&("yes"===f||"yes"===p||"yes"===m?a($).append("<span class='egt-time eae-time-wrapper'><div>00</div></span>"):$.innerHTML="<span class='egt-time eae-time-wrapper'><div>00</div></span>")}return}}function D(e){var a=r-new Date;return{days:Math.floor(a/864e5),hours:"0"+Math.floor(a/36e5%24),minutes:"0"+Math.floor(a/6e4%60),seconds:"0"+Math.floor(a/1e3%60),all:a}}function S(e){e.classList.add("fade"),setTimeout((function(){e.classList.remove("fade")}),700)}e.hasClass("elementor-element-edit-mode")&&("countdown"===s?(y=new Date(r),r=y.getTime()):((y=new Date).setSeconds(y.getSeconds()+e.find(".eae-evergreen-wrapper").data("egtime")),r=y.getTime())),D(r).all>1&&(t=setInterval((function(){var i=e.find("."+g).find("#timer")[0],n=D(r);"yes"===f&&(n.days<10&&(n.days="0"+n.days),i.innerHTML="<span class='egt-time eae-time-wrapper'><div>"+n.days+"</div></span>"),"yes"===p&&("yes"===f?a(i).append("<span class='egt-time eae-time-wrapper'><div>"+n.hours.slice(-2)+"</div></span>"):i.innerHTML="<span class='egt-time eae-time-wrapper'><div>"+n.hours.slice(-2)+"</div></span>"),"yes"===m&&("yes"===f||"yes"===p?a(i).append("<span class='egt-time eae-time-wrapper'><div>"+n.minutes.slice(-2)+"</div></span>"):i.innerHTML="<span class='egt-time eae-time-wrapper'><div>"+n.minutes.slice(-2)+"</div></span>"),"yes"===u&&("yes"===f||"yes"===p||"yes"===m?a(i).append("<span class='egt-time eae-time-wrapper'><div>"+n.seconds.slice(-2)+"</div></span>"):i.innerHTML="<span class='egt-time eae-time-wrapper'><div>"+n.seconds.slice(-2)+"</div></span>");var d=i.getElementsByTagName("span");"yes"===f&&59==n.hours&&59==n.minutes&&59==n.seconds&&S(d[0]),"yes"===p&&("yes"===f?59==n.minutes&&59==n.seconds&&S(d[1]):59==n.minutes&&59==n.seconds&&S(d[0])),"yes"===m&&("yes"===f?"yes"===p?59==n.seconds&&S(d[2]):59==n.seconds&&S(d[1]):"yes"===p?59==n.seconds&&S(d[1]):59==n.seconds&&S(d[0])),"yes"===u&&("yes"===f?"yes"===p?"yes"===m&&S(d[3]):S("yes"===m?d[2]:d[1]):"yes"===p?"yes"===m&&S(d[2]):S("yes"===m?d[1]:d[0])),n.all<=1&&(clearInterval(t),"yes"===f&&(i.innerHTML="<span class='egt-time eae-time-wrapper'><div>00</div></span>"),"yes"===p&&("yes"===f?a(i).append("<span class='egt-time eae-time-wrapper'><div>00</div></span>"):i.innerHTML="<span class='egt-time eae-time-wrapper'><div>00</div></span>"),"yes"===m&&("yes"===f||"yes"===p?a(i).append("<span class='egt-time eae-time-wrapper'><div>00</div></span>"):i.innerHTML="<span class='egt-time eae-time-wrapper'><div>00</div></span>"),"yes"===u&&("yes"===f||"yes"===p||"yes"===m?a(i).append("<span class='egt-time eae-time-wrapper'><div>00</div></span>"):i.innerHTML="<span class='egt-time eae-time-wrapper'><div>00</div></span>"),e.hasClass("elementor-element-edit-mode")||c.length>0&&c.forEach((function(a){"redirect"===a&&($url1=e.find(".eae-evergreen-wrapper").data("redirected-url"),""!==$url1&&(window.location.href=$url1)),"hide"===a&&(e.find("#timer").css("display","none"),e.find(".egt-title").css("display","none"),e.find(".desc").css("display","none")),"message"===a&&e.find(".eae-egt-message").css("display","block"),"hide_parent"===a&&($p_secs=e.closest("section"),$p_secs.css("display","none"))})))}),1e3))})),elementorFrontend.hooks.addAction("frontend/element_ready/eae-comparisontable.default",(function(e,a){a(e.find(".eae-ct-heading")[0]).addClass("active"),e.find("ul").on("click","li",(function(){var t=a(this).index()+2;e.find("tr").find("td:not(:eq(0))").hide(),e.find("td:nth-child("+t+")").css("display","table-cell"),e.find("tr").find("th:not(:eq(0))").hide(),e.find("li").removeClass("active"),a(this).addClass("active")}));var t=window.matchMedia("(min-width: 767px)");function i(a){a.matches?e.find(".sep").attr("colspan",5):e.find(".sep").attr("colspan",2)}t.addListener(i),i(t)})),elementorFrontend.hooks.addAction("frontend/element_ready/eae-progress-bar.skin1",r),elementorFrontend.hooks.addAction("frontend/element_ready/eae-progress-bar.skin2",r),elementorFrontend.hooks.addAction("frontend/element_ready/eae-progress-bar.skin3",r),elementorFrontend.hooks.addAction("frontend/element_ready/eae-progress-bar.skin4",r),elementorFrontend.hooks.addAction("frontend/element_ready/eae-progress-bar.skin5",r),elementorFrontend.hooks.addAction("frontend/element_ready/eae-filterableGallery.default",(function(e,a){var t=e.find(".eae-fg-wrapper"),i=e.data("id"),n=t.attr("data-maxtilt"),r=t.attr("data-perspective"),d=t.attr("data-speed"),s=t.attr("data-tilt-axis"),o=t.attr("data-glare"),l=parseInt(t.attr("data-overlay-speed"));if(s="x"===s?"y":"y"===s?"x":"both","yes"===o)var c=t.attr("data-max-glare");o="yes"===o;var f=a(".elementor-element-"+i+" .eae-fg-image"),p=t.hasClass("masonry-yes")?"masonry":"fitRows";f.outerHeight();adata={percentPosition:!0,animationOptions:{duration:750,easing:"linear",queue:!1}},"fitRows"===p&&(adata.layoutMode="fitRows"),"masonry"===p&&(adata.masonry={columnWidth:".eae-gallery-item",horizontalOrder:!0}),e.hasClass("eae-show-all-yes")||(e.find(".eae-gallery-filter a").first().addClass("current"),adata.filter=e.find(".eae-gallery-filter a").first().attr("data-filter"));var m=f.isotope(adata);m.imagesLoaded().progress((function(){m.isotope("layout")})),e.find(".eae-tilt-yes")&&(atilt={maxTilt:n,perspective:r,easing:"linear",scale:1,speed:d,disableAxis:s,transition:!0,reset:!0,glare:o,maxGlare:c},e.find(".el-tilt").tilt(atilt)),a(".elementor-element-"+i+" .eae-gallery-filter a").on("click",(function(){e.find(".eae-gallery-filter .current").removeClass("current"),a(this).addClass("current");var t=a(this).attr("data-filter");adata.filter=t;var i=f.isotope(adata);return i.imagesLoaded().progress((function(){if(i.isotope("layout"),isEditMode)return!1;e.find(".eae-tilt-yes")&&(e.find(".el-tilt").tilt(atilt),e.find(".el-tilt").tilt.reset.call(e.find(".el-tilt")))})),!1})),t.hasClass("eae-hover-direction-effect")||e.find(".eae-gallery-item-inner").hover((function(){a(this).find(".eae-grid-overlay").addClass("animated")})),t.hasClass("eae-hover-direction-effect")&&(e.find(".eae-gallery-item-inner").hover((function(){a(this).find(".eae-grid-overlay").addClass("overlay")})),t.find(".eae-gallery-item-inner").EAEHoverDirection({speed:l}))})),elementorFrontend.hooks.addAction("frontend/element_ready/eae-content-switcher.skin1",d),elementorFrontend.hooks.addAction("frontend/element_ready/eae-content-switcher.skin2",d),elementorFrontend.hooks.addAction("frontend/element_ready/eae-content-switcher.skin3",s),elementorFrontend.hooks.addAction("frontend/element_ready/eae-content-switcher.skin4",s),elementorFrontend.hooks.addAction("frontend/element_ready/global",(function(e,a){isEditMode||e.data("wts-url")&&"yes"==e.data("wts-link")&&e.on("click",(function(a){e.data("wts-url")&&"yes"==e.data("wts-new-window")?window.open(e.data("wts-url")):location.href=e.data("wts-url")}))})),elementorFrontend.hooks.addAction("frontend/element_ready/eae-thumbgallery.default",(function(e,a){swiper_outer_wrapper=e.find(".eae-swiper-outer-wrapper"),wid=e.data("id"),wClass=".elementor-element-"+wid,thumb_outer_wrapper=e.find(".eae-gallery-thumbs");let t=swiper_outer_wrapper.data("swiper-settings"),i=swiper_outer_wrapper.data("slides-per-view"),n=swiper_outer_wrapper.data("space");const r=eae.breakpoints;let d={};d[r.lg-1]={slidesPerView:i.desktop,spaceBetween:n.desktop},d[r.md-1]={slidesPerView:i.tablet,spaceBetween:n.tablet};const s=eae.breakpoints;let o={};if(o[s.lg-1]={spaceBetween:t.spaceBetween.desktop},o[s.md-1]={spaceBetween:t.spaceBetween.tablet},sliderData={direction:"horizontal",effect:t.effect,keyboard:{enabled:t.keyboard},spaceBetween:t.spaceBetween.mobile,breakpoints:o,speed:t.speed,loop:"yes"===t.loop,thumbs:{swiper:{el:thumb_outer_wrapper,direction:"horizontal",spaceBetween:n.mobile,slidesPerView:i.mobile,navigation:{nextEl:wClass+" .eae-swiper-button-next",prevEl:wClass+" .eae-swiper-button-prev"},speed:t.speed,loop:"yes"===t.loop,freeMode:!0,watchSlidesVisibility:!0,watchSlidesProgress:!0,breakpoints:d,slideToClickedSlide:!0}}},void 0!==t.autoplay&&(sliderData.thumbs.swiper.autoplay={delay:t.autoplay.duration,disableOnInteraction:t.autoplay.disableOnInteraction,reverseDirection:t.autoplay.reverseDirection}),"yes"==t.navigation&&(sliderData.navigation={nextEl:wClass+" .eae-swiper-button-next",prevEl:wClass+" .eae-swiper-button-prev"}),""!==t.pagination&&(sliderData.pagination={type:t.pagination,el:wClass+" .swiper-pagination",clickable:t.clickable}),void 0!==t.autoplay&&(sliderData.autoplay={delay:t.autoplay.duration,disableOnInteraction:t.autoplay.disableOnInteraction,reverseDirection:t.autoplay.reverseDirection}),"undefined"==typeof Swiper){new(0,elementorFrontend.utils.swiper)(".elementor-element-"+wid+" .eae-swiper-outer-wrapper .eae-swiper-container",sliderData).then(e=>{sswiper=e})}else window.sswiper=new Swiper(".elementor-element-"+wid+" .eae-swiper-outer-wrapper .eae-swiper-container",sliderData),a(".elementor-element-"+wid+" .eae-swiper-outer-wrapper .eae-swiper-container").css("visibility","visible");if(void 0!==t.autoplay){"yes"==t.autoplay.pauseOnHover&&jQuery(wClass+" .eae-swiper-container").hover((function(){sswiper.autoplay.stop(),sswiper.thumbs.swiper.autoplay.stop()}),(function(){sswiper.autoplay.start(),sswiper.thumbs.swiper.autoplay.start()}))}})),elementorFrontend.hooks.addAction("frontend/element_ready/eae-chart.bar",o),elementorFrontend.hooks.addAction("frontend/element_ready/eae-chart.horizontalBar",o),elementorFrontend.hooks.addAction("frontend/element_ready/eae-chart.line",o),elementorFrontend.hooks.addAction("frontend/element_ready/eae-data-table.default",(function(e,a){const t=e.find(".eae-table"),i=e.find(".eae-table-container");lottie_class=e.find(".eae-lottie"),settings=t.data("settings"),lottie_class.each((function(){let e=a(this).data("lottie-settings"),t=lottie.loadAnimation({container:document.getElementById(e.id),path:e.url,renderer:"svg",loop:e.loop});1==e.reverse&&t.setDirection(-1)})),!0===settings.sort?(head_class=a(".eae-table thead tr:not(:last-child)").addClass("eae-sort__ignoreRow"),t.tablesorter({sortReset:!1,sortRestart:!0})):head_class=a(".eae-table thead tr:not(:last-child)").removeClass("eae-sort__ignoreRow"),settings.search&&i.find("#eae-searchable").keyup((function(){_this=this,t.find(".eae-table__body tr").each((function(){-1===a(this).text().toLowerCase().indexOf(a(_this).val().toLowerCase())?a(this).addClass("eae-table-search-hide"):a(this).removeClass("eae-table-search-hide")}))}))}))}))}(jQuery);
assets/js/tsparticles.js ADDED
@@ -0,0 +1,11778 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Author : Matteo Bruni - https://www.matteobruni.it
3
+ * MIT license: https://opensource.org/licenses/MIT
4
+ * Demo / Generator : https://particles.js.org/
5
+ * GitHub : https://www.github.com/matteobruni/tsparticles
6
+ * How to use? : Check the GitHub README
7
+ * v1.22.1
8
+ */
9
+ (function webpackUniversalModuleDefinition(root, factory) {
10
+ if(typeof exports === 'object' && typeof module === 'object')
11
+ module.exports = factory();
12
+ else if(typeof define === 'function' && define.amd)
13
+ define([], factory);
14
+ else {
15
+ var a = factory();
16
+ for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
17
+ }
18
+ })(this, function() {
19
+ return /******/ (() => { // webpackBootstrap
20
+ /******/ "use strict";
21
+ /******/ // The require scope
22
+ /******/ var __webpack_require__ = {};
23
+ /******/
24
+ /************************************************************************/
25
+ /******/ /* webpack/runtime/define property getters */
26
+ /******/ (() => {
27
+ /******/ // define getter functions for harmony exports
28
+ /******/ __webpack_require__.d = (exports, definition) => {
29
+ /******/ for(var key in definition) {
30
+ /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
31
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
32
+ /******/ }
33
+ /******/ }
34
+ /******/ };
35
+ /******/ })();
36
+ /******/
37
+ /******/ /* webpack/runtime/hasOwnProperty shorthand */
38
+ /******/ (() => {
39
+ /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
40
+ /******/ })();
41
+ /******/
42
+ /******/ /* webpack/runtime/make namespace object */
43
+ /******/ (() => {
44
+ /******/ // define __esModule on exports
45
+ /******/ __webpack_require__.r = (exports) => {
46
+ /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
47
+ /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
48
+ /******/ }
49
+ /******/ Object.defineProperty(exports, '__esModule', { value: true });
50
+ /******/ };
51
+ /******/ })();
52
+ /******/
53
+ /************************************************************************/
54
+ var __webpack_exports__ = {};
55
+ // ESM COMPAT FLAG
56
+ __webpack_require__.r(__webpack_exports__);
57
+
58
+ // EXPORTS
59
+ __webpack_require__.d(__webpack_exports__, {
60
+ "AbsorberClickMode": () => (/* reexport */ AbsorberClickMode),
61
+ "AnimationStatus": () => (/* reexport */ AnimationStatus),
62
+ "CanvasUtils": () => (/* reexport */ CanvasUtils),
63
+ "ClickMode": () => (/* reexport */ ClickMode),
64
+ "CollisionMode": () => (/* reexport */ CollisionMode),
65
+ "ColorUtils": () => (/* reexport */ ColorUtils),
66
+ "Constants": () => (/* reexport */ Constants),
67
+ "Container": () => (/* reexport */ Container),
68
+ "DestroyType": () => (/* reexport */ DestroyType),
69
+ "DivMode": () => (/* reexport */ DivMode),
70
+ "DivType": () => (/* reexport */ DivType),
71
+ "EmitterClickMode": () => (/* reexport */ EmitterClickMode),
72
+ "HoverMode": () => (/* reexport */ HoverMode),
73
+ "InlineArrangement": () => (/* reexport */ InlineArrangement),
74
+ "InteractivityDetect": () => (/* reexport */ InteractivityDetect),
75
+ "Main": () => (/* reexport */ Main),
76
+ "MoveDirection": () => (/* reexport */ MoveDirection),
77
+ "MoveType": () => (/* reexport */ MoveType),
78
+ "OutMode": () => (/* reexport */ OutMode),
79
+ "ProcessBubbleType": () => (/* reexport */ ProcessBubbleType),
80
+ "RotateDirection": () => (/* reexport */ RotateDirection),
81
+ "ShapeType": () => (/* reexport */ ShapeType),
82
+ "SizeMode": () => (/* reexport */ SizeMode),
83
+ "StartValueType": () => (/* reexport */ StartValueType),
84
+ "ThemeMode": () => (/* reexport */ ThemeMode),
85
+ "Type": () => (/* reexport */ Type),
86
+ "Utils": () => (/* reexport */ Utils),
87
+ "pJSDom": () => (/* binding */ pJSDom),
88
+ "particlesJS": () => (/* binding */ particlesJS),
89
+ "tsParticles": () => (/* binding */ tsParticles)
90
+ });
91
+
92
+ ;// CONCATENATED MODULE: ./dist/browser/pjs.js
93
+ const initPjs = main => {
94
+ const particlesJS = (tagId, options) => {
95
+ return main.load(tagId, options);
96
+ };
97
+
98
+ particlesJS.load = (tagId, pathConfigJson, callback) => {
99
+ main.loadJSON(tagId, pathConfigJson).then(container => {
100
+ if (container) {
101
+ callback(container);
102
+ }
103
+ });
104
+ };
105
+
106
+ particlesJS.setOnClickHandler = callback => {
107
+ main.setOnClickHandler(callback);
108
+ };
109
+
110
+ const pJSDom = main.dom();
111
+ return {
112
+ particlesJS,
113
+ pJSDom
114
+ };
115
+ };
116
+
117
+
118
+ ;// CONCATENATED MODULE: ./dist/browser/ShapeDrawers/SquareDrawer.js
119
+ class SquareDrawer {
120
+ getSidesCount() {
121
+ return 4;
122
+ }
123
+
124
+ draw(context, particle, radius) {
125
+ context.rect(-radius, -radius, radius * 2, radius * 2);
126
+ }
127
+
128
+ }
129
+ ;// CONCATENATED MODULE: ./dist/browser/Enums/Directions/OutModeDirection.js
130
+ var OutModeDirection;
131
+
132
+ (function (OutModeDirection) {
133
+ OutModeDirection["bottom"] = "bottom";
134
+ OutModeDirection["left"] = "left";
135
+ OutModeDirection["right"] = "right";
136
+ OutModeDirection["top"] = "top";
137
+ })(OutModeDirection || (OutModeDirection = {}));
138
+ ;// CONCATENATED MODULE: ./dist/browser/Enums/Directions/MoveDirection.js
139
+ var MoveDirection;
140
+
141
+ (function (MoveDirection) {
142
+ MoveDirection["bottom"] = "bottom";
143
+ MoveDirection["bottomLeft"] = "bottom-left";
144
+ MoveDirection["bottomRight"] = "bottom-right";
145
+ MoveDirection["left"] = "left";
146
+ MoveDirection["none"] = "none";
147
+ MoveDirection["right"] = "right";
148
+ MoveDirection["top"] = "top";
149
+ MoveDirection["topLeft"] = "top-left";
150
+ MoveDirection["topRight"] = "top-right";
151
+ })(MoveDirection || (MoveDirection = {}));
152
+ ;// CONCATENATED MODULE: ./dist/browser/Enums/Directions/RotateDirection.js
153
+ var RotateDirection;
154
+
155
+ (function (RotateDirection) {
156
+ RotateDirection["clockwise"] = "clockwise";
157
+ RotateDirection["counterClockwise"] = "counter-clockwise";
158
+ RotateDirection["random"] = "random";
159
+ })(RotateDirection || (RotateDirection = {}));
160
+ ;// CONCATENATED MODULE: ./dist/browser/Enums/Directions/index.js
161
+
162
+
163
+ ;// CONCATENATED MODULE: ./dist/browser/Utils/NumberUtils.js
164
+
165
+ class NumberUtils {
166
+ static clamp(num, min, max) {
167
+ return Math.min(Math.max(num, min), max);
168
+ }
169
+
170
+ static mix(comp1, comp2, weight1, weight2) {
171
+ return Math.floor((comp1 * weight1 + comp2 * weight2) / (weight1 + weight2));
172
+ }
173
+
174
+ static randomInRange(r) {
175
+ const max = NumberUtils.getRangeMax(r);
176
+ let min = NumberUtils.getRangeMin(r);
177
+
178
+ if (max === min) {
179
+ min = 0;
180
+ }
181
+
182
+ return Math.random() * (max - min) + min;
183
+ }
184
+
185
+ static getRangeValue(value) {
186
+ return typeof value === "number" ? value : NumberUtils.randomInRange(value);
187
+ }
188
+
189
+ static getRangeMin(value) {
190
+ return typeof value === "number" ? value : value.min;
191
+ }
192
+
193
+ static getRangeMax(value) {
194
+ return typeof value === "number" ? value : value.max;
195
+ }
196
+
197
+ static setRangeValue(source, value) {
198
+ if (source === value || value === undefined && typeof source === "number") {
199
+ return source;
200
+ }
201
+
202
+ const min = NumberUtils.getRangeMin(source),
203
+ max = NumberUtils.getRangeMax(source);
204
+ return value !== undefined ? {
205
+ min: Math.min(min, value),
206
+ max: Math.max(max, value)
207
+ } : NumberUtils.setRangeValue(min, max);
208
+ }
209
+
210
+ static getValue(options) {
211
+ const random = options.random;
212
+ const {
213
+ enable,
214
+ minimumValue
215
+ } = typeof random === "boolean" ? {
216
+ enable: random,
217
+ minimumValue: 0
218
+ } : random;
219
+ return enable ? NumberUtils.randomInRange({
220
+ min: minimumValue,
221
+ max: options.value
222
+ }) : options.value;
223
+ }
224
+
225
+ static getDistances(pointA, pointB) {
226
+ const dx = pointA.x - pointB.x;
227
+ const dy = pointA.y - pointB.y;
228
+ return {
229
+ dx: dx,
230
+ dy: dy,
231
+ distance: Math.sqrt(dx * dx + dy * dy)
232
+ };
233
+ }
234
+
235
+ static getDistance(pointA, pointB) {
236
+ return NumberUtils.getDistances(pointA, pointB).distance;
237
+ }
238
+
239
+ static getParticleBaseVelocity(particle) {
240
+ let velocityBase;
241
+
242
+ switch (particle.direction) {
243
+ case MoveDirection.top:
244
+ velocityBase = {
245
+ x: 0,
246
+ y: -1
247
+ };
248
+ break;
249
+
250
+ case MoveDirection.topRight:
251
+ velocityBase = {
252
+ x: 0.5,
253
+ y: -0.5
254
+ };
255
+ break;
256
+
257
+ case MoveDirection.right:
258
+ velocityBase = {
259
+ x: 1,
260
+ y: -0
261
+ };
262
+ break;
263
+
264
+ case MoveDirection.bottomRight:
265
+ velocityBase = {
266
+ x: 0.5,
267
+ y: 0.5
268
+ };
269
+ break;
270
+
271
+ case MoveDirection.bottom:
272
+ velocityBase = {
273
+ x: 0,
274
+ y: 1
275
+ };
276
+ break;
277
+
278
+ case MoveDirection.bottomLeft:
279
+ velocityBase = {
280
+ x: -0.5,
281
+ y: 1
282
+ };
283
+ break;
284
+
285
+ case MoveDirection.left:
286
+ velocityBase = {
287
+ x: -1,
288
+ y: 0
289
+ };
290
+ break;
291
+
292
+ case MoveDirection.topLeft:
293
+ velocityBase = {
294
+ x: -0.5,
295
+ y: -0.5
296
+ };
297
+ break;
298
+
299
+ default:
300
+ velocityBase = {
301
+ x: 0,
302
+ y: 0
303
+ };
304
+ break;
305
+ }
306
+
307
+ return velocityBase;
308
+ }
309
+
310
+ static rotateVelocity(velocity, angle) {
311
+ return {
312
+ horizontal: velocity.horizontal * Math.cos(angle) - velocity.vertical * Math.sin(angle),
313
+ vertical: velocity.horizontal * Math.sin(angle) + velocity.vertical * Math.cos(angle)
314
+ };
315
+ }
316
+
317
+ static collisionVelocity(v1, v2, m1, m2) {
318
+ return {
319
+ horizontal: v1.horizontal * (m1 - m2) / (m1 + m2) + v2.horizontal * 2 * m2 / (m1 + m2),
320
+ vertical: v1.vertical
321
+ };
322
+ }
323
+
324
+ }
325
+ ;// CONCATENATED MODULE: ./dist/browser/Utils/Utils.js
326
+ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {
327
+ function adopt(value) {
328
+ return value instanceof P ? value : new P(function (resolve) {
329
+ resolve(value);
330
+ });
331
+ }
332
+
333
+ return new (P || (P = Promise))(function (resolve, reject) {
334
+ function fulfilled(value) {
335
+ try {
336
+ step(generator.next(value));
337
+ } catch (e) {
338
+ reject(e);
339
+ }
340
+ }
341
+
342
+ function rejected(value) {
343
+ try {
344
+ step(generator["throw"](value));
345
+ } catch (e) {
346
+ reject(e);
347
+ }
348
+ }
349
+
350
+ function step(result) {
351
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
352
+ }
353
+
354
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
355
+ });
356
+ };
357
+
358
+
359
+
360
+
361
+ function rectSideBounce(pSide, pOtherSide, rectSide, rectOtherSide, velocity, factor) {
362
+ const res = {
363
+ bounced: false
364
+ };
365
+
366
+ if (pOtherSide.min >= rectOtherSide.min && pOtherSide.min <= rectOtherSide.max && pOtherSide.max >= rectOtherSide.min && pOtherSide.max <= rectOtherSide.max) {
367
+ if (pSide.max >= rectSide.min && pSide.max <= (rectSide.max + rectSide.min) / 2 && velocity > 0 || pSide.min <= rectSide.max && pSide.min > (rectSide.max + rectSide.min) / 2 && velocity < 0) {
368
+ res.velocity = velocity * -factor;
369
+ res.bounced = true;
370
+ }
371
+ }
372
+
373
+ return res;
374
+ }
375
+
376
+ function checkSelector(element, selectors) {
377
+ if (selectors instanceof Array) {
378
+ for (const selector of selectors) {
379
+ if (element.matches(selector)) {
380
+ return true;
381
+ }
382
+ }
383
+
384
+ return false;
385
+ } else {
386
+ return element.matches(selectors);
387
+ }
388
+ }
389
+
390
+ class Utils {
391
+ static isSsr() {
392
+ return typeof window === "undefined" || !window;
393
+ }
394
+
395
+ static get animate() {
396
+ return Utils.isSsr() ? callback => setTimeout(callback) : callback => (window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || window.setTimeout)(callback);
397
+ }
398
+
399
+ static get cancelAnimation() {
400
+ return Utils.isSsr() ? handle => clearTimeout(handle) : handle => (window.cancelAnimationFrame || window.webkitCancelRequestAnimationFrame || window.mozCancelRequestAnimationFrame || window.oCancelRequestAnimationFrame || window.msCancelRequestAnimationFrame || window.clearTimeout)(handle);
401
+ }
402
+
403
+ static isInArray(value, array) {
404
+ return value === array || array instanceof Array && array.indexOf(value) > -1;
405
+ }
406
+
407
+ static loadFont(character) {
408
+ return __awaiter(this, void 0, void 0, function* () {
409
+ try {
410
+ yield document.fonts.load(`${character.weight} 36px '${character.font}'`);
411
+ } catch (_a) {}
412
+ });
413
+ }
414
+
415
+ static arrayRandomIndex(array) {
416
+ return Math.floor(Math.random() * array.length);
417
+ }
418
+
419
+ static itemFromArray(array, index, useIndex = true) {
420
+ const fixedIndex = index !== undefined && useIndex ? index % array.length : Utils.arrayRandomIndex(array);
421
+ return array[fixedIndex];
422
+ }
423
+
424
+ static isPointInside(point, size, radius, direction) {
425
+ return Utils.areBoundsInside(Utils.calculateBounds(point, radius !== null && radius !== void 0 ? radius : 0), size, direction);
426
+ }
427
+
428
+ static areBoundsInside(bounds, size, direction) {
429
+ let inside = true;
430
+
431
+ if (!direction || direction === OutModeDirection.bottom) {
432
+ inside = bounds.top < size.height;
433
+ }
434
+
435
+ if (inside && (!direction || direction === OutModeDirection.left)) {
436
+ inside = bounds.right > 0;
437
+ }
438
+
439
+ if (inside && (!direction || direction === OutModeDirection.right)) {
440
+ inside = bounds.left < size.width;
441
+ }
442
+
443
+ if (inside && (!direction || direction === OutModeDirection.top)) {
444
+ inside = bounds.bottom > 0;
445
+ }
446
+
447
+ return inside;
448
+ }
449
+
450
+ static calculateBounds(point, radius) {
451
+ return {
452
+ bottom: point.y + radius,
453
+ left: point.x - radius,
454
+ right: point.x + radius,
455
+ top: point.y - radius
456
+ };
457
+ }
458
+
459
+ static loadImage(source) {
460
+ return new Promise((resolve, reject) => {
461
+ if (!source) {
462
+ reject("Error tsParticles - No image.src");
463
+ return;
464
+ }
465
+
466
+ const image = {
467
+ source: source,
468
+ type: source.substr(source.length - 3)
469
+ };
470
+ const img = new Image();
471
+ img.addEventListener("load", () => {
472
+ image.element = img;
473
+ resolve(image);
474
+ });
475
+ img.addEventListener("error", () => {
476
+ reject(`Error tsParticles - loading image: ${source}`);
477
+ });
478
+ img.src = source;
479
+ });
480
+ }
481
+
482
+ static downloadSvgImage(source) {
483
+ return __awaiter(this, void 0, void 0, function* () {
484
+ if (!source) {
485
+ throw new Error("Error tsParticles - No image.src");
486
+ }
487
+
488
+ const image = {
489
+ source: source,
490
+ type: source.substr(source.length - 3)
491
+ };
492
+
493
+ if (image.type !== "svg") {
494
+ return Utils.loadImage(source);
495
+ }
496
+
497
+ const response = yield fetch(image.source);
498
+
499
+ if (!response.ok) {
500
+ throw new Error("Error tsParticles - Image not found");
501
+ }
502
+
503
+ image.svgData = yield response.text();
504
+ return image;
505
+ });
506
+ }
507
+
508
+ static deepExtend(destination, ...sources) {
509
+ for (const source of sources) {
510
+ if (source === undefined || source === null) {
511
+ continue;
512
+ }
513
+
514
+ if (typeof source !== "object") {
515
+ destination = source;
516
+ continue;
517
+ }
518
+
519
+ const sourceIsArray = Array.isArray(source);
520
+
521
+ if (sourceIsArray && (typeof destination !== "object" || !destination || !Array.isArray(destination))) {
522
+ destination = [];
523
+ } else if (!sourceIsArray && (typeof destination !== "object" || !destination || Array.isArray(destination))) {
524
+ destination = {};
525
+ }
526
+
527
+ for (const key in source) {
528
+ if (key === "__proto__") {
529
+ continue;
530
+ }
531
+
532
+ const sourceDict = source;
533
+ const value = sourceDict[key];
534
+ const isObject = typeof value === "object";
535
+ const destDict = destination;
536
+ destDict[key] = isObject && Array.isArray(value) ? value.map(v => Utils.deepExtend(destDict[key], v)) : Utils.deepExtend(destDict[key], value);
537
+ }
538
+ }
539
+
540
+ return destination;
541
+ }
542
+
543
+ static isDivModeEnabled(mode, divs) {
544
+ return divs instanceof Array ? !!divs.find(t => t.enable && Utils.isInArray(mode, t.mode)) : Utils.isInArray(mode, divs.mode);
545
+ }
546
+
547
+ static divModeExecute(mode, divs, callback) {
548
+ if (divs instanceof Array) {
549
+ for (const div of divs) {
550
+ const divMode = div.mode;
551
+ const divEnabled = div.enable;
552
+
553
+ if (divEnabled && Utils.isInArray(mode, divMode)) {
554
+ Utils.singleDivModeExecute(div, callback);
555
+ }
556
+ }
557
+ } else {
558
+ const divMode = divs.mode;
559
+ const divEnabled = divs.enable;
560
+
561
+ if (divEnabled && Utils.isInArray(mode, divMode)) {
562
+ Utils.singleDivModeExecute(divs, callback);
563
+ }
564
+ }
565
+ }
566
+
567
+ static singleDivModeExecute(div, callback) {
568
+ const selectors = div.selectors;
569
+
570
+ if (selectors instanceof Array) {
571
+ for (const selector of selectors) {
572
+ callback(selector, div);
573
+ }
574
+ } else {
575
+ callback(selectors, div);
576
+ }
577
+ }
578
+
579
+ static divMode(divs, element) {
580
+ if (!element || !divs) {
581
+ return;
582
+ }
583
+
584
+ if (divs instanceof Array) {
585
+ return divs.find(d => checkSelector(element, d.selectors));
586
+ } else if (checkSelector(element, divs.selectors)) {
587
+ return divs;
588
+ }
589
+ }
590
+
591
+ static circleBounceDataFromParticle(p) {
592
+ return {
593
+ position: p.getPosition(),
594
+ radius: p.getRadius(),
595
+ velocity: p.velocity,
596
+ factor: {
597
+ horizontal: NumberUtils.getValue(p.options.bounce.horizontal),
598
+ vertical: NumberUtils.getValue(p.options.bounce.vertical)
599
+ }
600
+ };
601
+ }
602
+
603
+ static circleBounce(p1, p2) {
604
+ const xVelocityDiff = p1.velocity.horizontal;
605
+ const yVelocityDiff = p1.velocity.vertical;
606
+ const pos1 = p1.position;
607
+ const pos2 = p2.position;
608
+ const xDist = pos2.x - pos1.x;
609
+ const yDist = pos2.y - pos1.y;
610
+
611
+ if (xVelocityDiff * xDist + yVelocityDiff * yDist >= 0) {
612
+ const angle = -Math.atan2(pos2.y - pos1.y, pos2.x - pos1.x);
613
+ const m1 = p1.radius;
614
+ const m2 = p2.radius;
615
+ const u1 = NumberUtils.rotateVelocity(p1.velocity, angle);
616
+ const u2 = NumberUtils.rotateVelocity(p2.velocity, angle);
617
+ const v1 = NumberUtils.collisionVelocity(u1, u2, m1, m2);
618
+ const v2 = NumberUtils.collisionVelocity(u2, u1, m1, m2);
619
+ const vFinal1 = NumberUtils.rotateVelocity(v1, -angle);
620
+ const vFinal2 = NumberUtils.rotateVelocity(v2, -angle);
621
+ p1.velocity.horizontal = vFinal1.horizontal * p1.factor.horizontal;
622
+ p1.velocity.vertical = vFinal1.vertical * p1.factor.vertical;
623
+ p2.velocity.horizontal = vFinal2.horizontal * p2.factor.horizontal;
624
+ p2.velocity.vertical = vFinal2.vertical * p2.factor.vertical;
625
+ }
626
+ }
627
+
628
+ static rectBounce(particle, divBounds) {
629
+ const pPos = particle.getPosition();
630
+ const size = particle.getRadius();
631
+ const bounds = Utils.calculateBounds(pPos, size);
632
+ const resH = rectSideBounce({
633
+ min: bounds.left,
634
+ max: bounds.right
635
+ }, {
636
+ min: bounds.top,
637
+ max: bounds.bottom
638
+ }, {
639
+ min: divBounds.left,
640
+ max: divBounds.right
641
+ }, {
642
+ min: divBounds.top,
643
+ max: divBounds.bottom
644
+ }, particle.velocity.horizontal, NumberUtils.getValue(particle.options.bounce.horizontal));
645
+
646
+ if (resH.bounced) {
647
+ if (resH.velocity !== undefined) {
648
+ particle.velocity.horizontal = resH.velocity;
649
+ }
650
+
651
+ if (resH.position !== undefined) {
652
+ particle.position.x = resH.position;
653
+ }
654
+ }
655
+
656
+ const resV = rectSideBounce({
657
+ min: bounds.top,
658
+ max: bounds.bottom
659
+ }, {
660
+ min: bounds.left,
661
+ max: bounds.right
662
+ }, {
663
+ min: divBounds.top,
664
+ max: divBounds.bottom
665
+ }, {
666
+ min: divBounds.left,
667
+ max: divBounds.right
668
+ }, particle.velocity.vertical, NumberUtils.getValue(particle.options.bounce.vertical));
669
+
670
+ if (resV.bounced) {
671
+ if (resV.velocity !== undefined) {
672
+ particle.velocity.vertical = resV.velocity;
673
+ }
674
+
675
+ if (resV.position !== undefined) {
676
+ particle.position.y = resV.position;
677
+ }
678
+ }
679
+ }
680
+
681
+ }
682
+ ;// CONCATENATED MODULE: ./dist/browser/Utils/Constants.js
683
+ class Constants {}
684
+ Constants.canvasClass = "tsparticles-canvas-el";
685
+ Constants.randomColorValue = "random";
686
+ Constants.midColorValue = "mid";
687
+ Constants.touchEndEvent = "touchend";
688
+ Constants.mouseDownEvent = "mousedown";
689
+ Constants.mouseUpEvent = "mouseup";
690
+ Constants.mouseMoveEvent = "mousemove";
691
+ Constants.touchStartEvent = "touchstart";
692
+ Constants.touchMoveEvent = "touchmove";
693
+ Constants.mouseLeaveEvent = "mouseleave";
694
+ Constants.mouseOutEvent = "mouseout";
695
+ Constants.touchCancelEvent = "touchcancel";
696
+ Constants.resizeEvent = "resize";
697
+ Constants.visibilityChangeEvent = "visibilitychange";
698
+ Constants.noPolygonDataLoaded = "No polygon data loaded.";
699
+ Constants.noPolygonFound = "No polygon found, you need to specify SVG url in config.";
700
+ ;// CONCATENATED MODULE: ./dist/browser/Utils/ColorUtils.js
701
+
702
+
703
+
704
+
705
+ function hue2rgb(p, q, t) {
706
+ let tCalc = t;
707
+
708
+ if (tCalc < 0) {
709
+ tCalc += 1;
710
+ }
711
+
712
+ if (tCalc > 1) {
713
+ tCalc -= 1;
714
+ }
715
+
716
+ if (tCalc < 1 / 6) {
717
+ return p + (q - p) * 6 * tCalc;
718
+ }
719
+
720
+ if (tCalc < 1 / 2) {
721
+ return q;
722
+ }
723
+
724
+ if (tCalc < 2 / 3) {
725
+ return p + (q - p) * (2 / 3 - tCalc) * 6;
726
+ }
727
+
728
+ return p;
729
+ }
730
+
731
+ function stringToRgba(input) {
732
+ if (input.startsWith("rgb")) {
733
+ const regex = /rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([\d.]+)\s*)?\)/i;
734
+ const result = regex.exec(input);
735
+ return result ? {
736
+ a: result.length > 4 ? parseFloat(result[5]) : 1,
737
+ b: parseInt(result[3], 10),
738
+ g: parseInt(result[2], 10),
739
+ r: parseInt(result[1], 10)
740
+ } : undefined;
741
+ } else if (input.startsWith("hsl")) {
742
+ const regex = /hsla?\(\s*(\d+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([\d.]+)\s*)?\)/i;
743
+ const result = regex.exec(input);
744
+ return result ? ColorUtils.hslaToRgba({
745
+ a: result.length > 4 ? parseFloat(result[5]) : 1,
746
+ h: parseInt(result[1], 10),
747
+ l: parseInt(result[3], 10),
748
+ s: parseInt(result[2], 10)
749
+ }) : undefined;
750
+ } else if (input.startsWith("hsv")) {
751
+ const regex = /hsva?\(\s*(\d+)°\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([\d.]+)\s*)?\)/i;
752
+ const result = regex.exec(input);
753
+ return result ? ColorUtils.hsvaToRgba({
754
+ a: result.length > 4 ? parseFloat(result[5]) : 1,
755
+ h: parseInt(result[1], 10),
756
+ s: parseInt(result[2], 10),
757
+ v: parseInt(result[3], 10)
758
+ }) : undefined;
759
+ } else {
760
+ const shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])([a-f\d])?$/i;
761
+ const hexFixed = input.replace(shorthandRegex, (_m, r, g, b, a) => {
762
+ return r + r + g + g + b + b + (a !== undefined ? a + a : "");
763
+ });
764
+ const regex = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})?$/i;
765
+ const result = regex.exec(hexFixed);
766
+ return result ? {
767
+ a: result[4] !== undefined ? parseInt(result[4], 16) / 0xff : 1,
768
+ b: parseInt(result[3], 16),
769
+ g: parseInt(result[2], 16),
770
+ r: parseInt(result[1], 16)
771
+ } : undefined;
772
+ }
773
+ }
774
+
775
+ class ColorUtils {
776
+ static colorToRgb(input, index, useIndex = true) {
777
+ var _a, _b, _c;
778
+
779
+ if (input === undefined) {
780
+ return;
781
+ }
782
+
783
+ const color = typeof input === "string" ? {
784
+ value: input
785
+ } : input;
786
+ let res;
787
+
788
+ if (typeof color.value === "string") {
789
+ if (color.value === Constants.randomColorValue) {
790
+ res = ColorUtils.getRandomRgbColor();
791
+ } else {
792
+ res = ColorUtils.stringToRgb(color.value);
793
+ }
794
+ } else {
795
+ if (color.value instanceof Array) {
796
+ const colorSelected = Utils.itemFromArray(color.value, index, useIndex);
797
+ res = ColorUtils.colorToRgb({
798
+ value: colorSelected
799
+ });
800
+ } else {
801
+ const colorValue = color.value;
802
+ const rgbColor = (_a = colorValue.rgb) !== null && _a !== void 0 ? _a : color.value;
803
+
804
+ if (rgbColor.r !== undefined) {
805
+ res = rgbColor;
806
+ } else {
807
+ const hslColor = (_b = colorValue.hsl) !== null && _b !== void 0 ? _b : color.value;
808
+
809
+ if (hslColor.h !== undefined && hslColor.l !== undefined) {
810
+ res = ColorUtils.hslToRgb(hslColor);
811
+ } else {
812
+ const hsvColor = (_c = colorValue.hsv) !== null && _c !== void 0 ? _c : color.value;
813
+
814
+ if (hsvColor.h !== undefined && hsvColor.v !== undefined) {
815
+ res = ColorUtils.hsvToRgb(hsvColor);
816
+ }
817
+ }
818
+ }
819
+ }
820
+ }
821
+
822
+ return res;
823
+ }
824
+
825
+ static colorToHsl(color, index, useIndex = true) {
826
+ const rgb = ColorUtils.colorToRgb(color, index, useIndex);
827
+ return rgb !== undefined ? ColorUtils.rgbToHsl(rgb) : undefined;
828
+ }
829
+
830
+ static rgbToHsl(color) {
831
+ const r1 = color.r / 255;
832
+ const g1 = color.g / 255;
833
+ const b1 = color.b / 255;
834
+ const max = Math.max(r1, g1, b1);
835
+ const min = Math.min(r1, g1, b1);
836
+ const res = {
837
+ h: 0,
838
+ l: (max + min) / 2,
839
+ s: 0
840
+ };
841
+
842
+ if (max != min) {
843
+ res.s = res.l < 0.5 ? (max - min) / (max + min) : (max - min) / (2.0 - max - min);
844
+ res.h = r1 === max ? (g1 - b1) / (max - min) : res.h = g1 === max ? 2.0 + (b1 - r1) / (max - min) : 4.0 + (r1 - g1) / (max - min);
845
+ }
846
+
847
+ res.l *= 100;
848
+ res.s *= 100;
849
+ res.h *= 60;
850
+
851
+ if (res.h < 0) {
852
+ res.h += 360;
853
+ }
854
+
855
+ return res;
856
+ }
857
+
858
+ static stringToAlpha(input) {
859
+ var _a;
860
+
861
+ return (_a = stringToRgba(input)) === null || _a === void 0 ? void 0 : _a.a;
862
+ }
863
+
864
+ static stringToRgb(input) {
865
+ return stringToRgba(input);
866
+ }
867
+
868
+ static hslToRgb(hsl) {
869
+ const result = {
870
+ b: 0,
871
+ g: 0,
872
+ r: 0
873
+ };
874
+ const hslPercent = {
875
+ h: hsl.h / 360,
876
+ l: hsl.l / 100,
877
+ s: hsl.s / 100
878
+ };
879
+
880
+ if (hslPercent.s === 0) {
881
+ result.b = hslPercent.l;
882
+ result.g = hslPercent.l;
883
+ result.r = hslPercent.l;
884
+ } else {
885
+ const q = hslPercent.l < 0.5 ? hslPercent.l * (1 + hslPercent.s) : hslPercent.l + hslPercent.s - hslPercent.l * hslPercent.s;
886
+ const p = 2 * hslPercent.l - q;
887
+ result.r = hue2rgb(p, q, hslPercent.h + 1 / 3);
888
+ result.g = hue2rgb(p, q, hslPercent.h);
889
+ result.b = hue2rgb(p, q, hslPercent.h - 1 / 3);
890
+ }
891
+
892
+ result.r = Math.floor(result.r * 255);
893
+ result.g = Math.floor(result.g * 255);
894
+ result.b = Math.floor(result.b * 255);
895
+ return result;
896
+ }
897
+
898
+ static hslaToRgba(hsla) {
899
+ const rgbResult = ColorUtils.hslToRgb(hsla);
900
+ return {
901
+ a: hsla.a,
902
+ b: rgbResult.b,
903
+ g: rgbResult.g,
904
+ r: rgbResult.r
905
+ };
906
+ }
907
+
908
+ static hslToHsv(hsl) {
909
+ const l = hsl.l / 100,
910
+ sl = hsl.s / 100;
911
+ const v = l + sl * Math.min(l, 1 - l),
912
+ sv = !v ? 0 : 2 * (1 - l / v);
913
+ return {
914
+ h: hsl.h,
915
+ s: sv * 100,
916
+ v: v * 100
917
+ };
918
+ }
919
+
920
+ static hslaToHsva(hsla) {
921
+ const hsvResult = ColorUtils.hslToHsv(hsla);
922
+ return {
923
+ a: hsla.a,
924
+ h: hsvResult.h,
925
+ s: hsvResult.s,
926
+ v: hsvResult.v
927
+ };
928
+ }
929
+
930
+ static hsvToHsl(hsv) {
931
+ const v = hsv.v / 100,
932
+ sv = hsv.s / 100;
933
+ const l = v * (1 - sv / 2),
934
+ sl = l === 0 || l === 1 ? 0 : (v - l) / Math.min(l, 1 - l);
935
+ return {
936
+ h: hsv.h,
937
+ l: l * 100,
938
+ s: sl * 100
939
+ };
940
+ }
941
+
942
+ static hsvaToHsla(hsva) {
943
+ const hslResult = ColorUtils.hsvToHsl(hsva);
944
+ return {
945
+ a: hsva.a,
946
+ h: hslResult.h,
947
+ l: hslResult.l,
948
+ s: hslResult.s
949
+ };
950
+ }
951
+
952
+ static hsvToRgb(hsv) {
953
+ const result = {
954
+ b: 0,
955
+ g: 0,
956
+ r: 0
957
+ };
958
+ const hsvPercent = {
959
+ h: hsv.h / 60,
960
+ s: hsv.s / 100,
961
+ v: hsv.v / 100
962
+ };
963
+ const c = hsvPercent.v * hsvPercent.s,
964
+ x = c * (1 - Math.abs(hsvPercent.h % 2 - 1));
965
+ let tempRgb;
966
+
967
+ if (hsvPercent.h >= 0 && hsvPercent.h <= 1) {
968
+ tempRgb = {
969
+ r: c,
970
+ g: x,
971
+ b: 0
972
+ };
973
+ } else if (hsvPercent.h > 1 && hsvPercent.h <= 2) {
974
+ tempRgb = {
975
+ r: x,
976
+ g: c,
977
+ b: 0
978
+ };
979
+ } else if (hsvPercent.h > 2 && hsvPercent.h <= 3) {
980
+ tempRgb = {
981
+ r: 0,
982
+ g: c,
983
+ b: x
984
+ };
985
+ } else if (hsvPercent.h > 3 && hsvPercent.h <= 4) {
986
+ tempRgb = {
987
+ r: 0,
988
+ g: x,
989
+ b: c
990
+ };
991
+ } else if (hsvPercent.h > 4 && hsvPercent.h <= 5) {
992
+ tempRgb = {
993
+ r: x,
994
+ g: 0,
995
+ b: c
996
+ };
997
+ } else if (hsvPercent.h > 5 && hsvPercent.h <= 6) {
998
+ tempRgb = {
999
+ r: c,
1000
+ g: 0,
1001
+ b: x
1002
+ };
1003
+ }
1004
+
1005
+ if (tempRgb) {
1006
+ const m = hsvPercent.v - c;
1007
+ result.r = Math.floor((tempRgb.r + m) * 255);
1008
+ result.g = Math.floor((tempRgb.g + m) * 255);
1009
+ result.b = Math.floor((tempRgb.b + m) * 255);
1010
+ }
1011
+
1012
+ return result;
1013
+ }
1014
+
1015
+ static hsvaToRgba(hsva) {
1016
+ const rgbResult = ColorUtils.hsvToRgb(hsva);
1017
+ return {
1018
+ a: hsva.a,
1019
+ b: rgbResult.b,
1020
+ g: rgbResult.g,
1021
+ r: rgbResult.r
1022
+ };
1023
+ }
1024
+
1025
+ static rgbToHsv(rgb) {
1026
+ const rgbPercent = {
1027
+ r: rgb.r / 255,
1028
+ g: rgb.g / 255,
1029
+ b: rgb.b / 255
1030
+ },
1031
+ xMax = Math.max(rgbPercent.r, rgbPercent.g, rgbPercent.b),
1032
+ xMin = Math.min(rgbPercent.r, rgbPercent.g, rgbPercent.b),
1033
+ v = xMax,
1034
+ c = xMax - xMin;
1035
+ let h = 0;
1036
+
1037
+ if (v === rgbPercent.r) {
1038
+ h = 60 * ((rgbPercent.g - rgbPercent.b) / c);
1039
+ } else if (v === rgbPercent.g) {
1040
+ h = 60 * (2 + (rgbPercent.b - rgbPercent.r) / c);
1041
+ } else if (v === rgbPercent.b) {
1042
+ h = 60 * (4 + (rgbPercent.r - rgbPercent.g) / c);
1043
+ }
1044
+
1045
+ const s = !v ? 0 : c / v;
1046
+ return {
1047
+ h,
1048
+ s: s * 100,
1049
+ v: v * 100
1050
+ };
1051
+ }
1052
+
1053
+ static rgbaToHsva(rgba) {
1054
+ const hsvResult = ColorUtils.rgbToHsv(rgba);
1055
+ return {
1056
+ a: rgba.a,
1057
+ h: hsvResult.h,
1058
+ s: hsvResult.s,
1059
+ v: hsvResult.v
1060
+ };
1061
+ }
1062
+
1063
+ static getRandomRgbColor(min) {
1064
+ const fixedMin = min !== null && min !== void 0 ? min : 0;
1065
+ return {
1066
+ b: Math.floor(NumberUtils.randomInRange(NumberUtils.setRangeValue(fixedMin, 256))),
1067
+ g: Math.floor(NumberUtils.randomInRange(NumberUtils.setRangeValue(fixedMin, 256))),
1068
+ r: Math.floor(NumberUtils.randomInRange(NumberUtils.setRangeValue(fixedMin, 256)))
1069
+ };
1070
+ }
1071
+
1072
+ static getStyleFromRgb(color, opacity) {
1073
+ return `rgba(${color.r}, ${color.g}, ${color.b}, ${opacity !== null && opacity !== void 0 ? opacity : 1})`;
1074
+ }
1075
+
1076
+ static getStyleFromHsl(color, opacity) {
1077
+ return `hsla(${color.h}, ${color.s}%, ${color.l}%, ${opacity !== null && opacity !== void 0 ? opacity : 1})`;
1078
+ }
1079
+
1080
+ static getStyleFromHsv(color, opacity) {
1081
+ return ColorUtils.getStyleFromHsl(ColorUtils.hsvToHsl(color), opacity);
1082
+ }
1083
+
1084
+ static mix(color1, color2, size1, size2) {
1085
+ let rgb1 = color1;
1086
+ let rgb2 = color2;
1087
+
1088
+ if (rgb1.r === undefined) {
1089
+ rgb1 = ColorUtils.hslToRgb(color1);
1090
+ }
1091
+
1092
+ if (rgb2.r === undefined) {
1093
+ rgb2 = ColorUtils.hslToRgb(color2);
1094
+ }
1095
+
1096
+ return {
1097
+ b: NumberUtils.mix(rgb1.b, rgb2.b, size1, size2),
1098
+ g: NumberUtils.mix(rgb1.g, rgb2.g, size1, size2),
1099
+ r: NumberUtils.mix(rgb1.r, rgb2.r, size1, size2)
1100
+ };
1101
+ }
1102
+
1103
+ static replaceColorSvg(image, color, opacity) {
1104
+ if (!image.svgData) {
1105
+ return "";
1106
+ }
1107
+
1108
+ const svgXml = image.svgData;
1109
+ const rgbHex = /#([0-9A-F]{3,6})/gi;
1110
+ return svgXml.replace(rgbHex, () => ColorUtils.getStyleFromHsl(color, opacity));
1111
+ }
1112
+
1113
+ static getLinkColor(p1, p2, linkColor) {
1114
+ var _a, _b;
1115
+
1116
+ if (linkColor === Constants.randomColorValue) {
1117
+ return ColorUtils.getRandomRgbColor();
1118
+ } else if (linkColor === "mid") {
1119
+ const sourceColor = (_a = p1.getFillColor()) !== null && _a !== void 0 ? _a : p1.getStrokeColor();
1120
+ const destColor = (_b = p2 === null || p2 === void 0 ? void 0 : p2.getFillColor()) !== null && _b !== void 0 ? _b : p2 === null || p2 === void 0 ? void 0 : p2.getStrokeColor();
1121
+
1122
+ if (sourceColor && destColor && p2) {
1123
+ return ColorUtils.mix(sourceColor, destColor, p1.getRadius(), p2.getRadius());
1124
+ } else {
1125
+ const hslColor = sourceColor !== null && sourceColor !== void 0 ? sourceColor : destColor;
1126
+
1127
+ if (hslColor) {
1128
+ return ColorUtils.hslToRgb(hslColor);
1129
+ }
1130
+ }
1131
+ } else {
1132
+ return linkColor;
1133
+ }
1134
+ }
1135
+
1136
+ static getLinkRandomColor(optColor, blink, consent) {
1137
+ const color = typeof optColor === "string" ? optColor : optColor.value;
1138
+
1139
+ if (color === Constants.randomColorValue) {
1140
+ if (consent) {
1141
+ return ColorUtils.colorToRgb({
1142
+ value: color
1143
+ });
1144
+ } else if (blink) {
1145
+ return Constants.randomColorValue;
1146
+ } else {
1147
+ return Constants.midColorValue;
1148
+ }
1149
+ } else {
1150
+ return ColorUtils.colorToRgb({
1151
+ value: color
1152
+ });
1153
+ }
1154
+ }
1155
+
1156
+ static getHslFromAnimation(animation) {
1157
+ return animation !== undefined ? {
1158
+ h: animation.h.value,
1159
+ s: animation.s.value,
1160
+ l: animation.l.value
1161
+ } : undefined;
1162
+ }
1163
+
1164
+ }
1165
+ ;// CONCATENATED MODULE: ./dist/browser/Utils/CanvasUtils.js
1166
+
1167
+
1168
+
1169
+ function drawLine(context, begin, end) {
1170
+ context.beginPath();
1171
+ context.moveTo(begin.x, begin.y);
1172
+ context.lineTo(end.x, end.y);
1173
+ context.closePath();
1174
+ }
1175
+
1176
+ function drawTriangle(context, p1, p2, p3) {
1177
+ context.beginPath();
1178
+ context.moveTo(p1.x, p1.y);
1179
+ context.lineTo(p2.x, p2.y);
1180
+ context.lineTo(p3.x, p3.y);
1181
+ context.closePath();
1182
+ }
1183
+
1184
+ class CanvasUtils {
1185
+ static paintBase(context, dimension, baseColor) {
1186
+ context.save();
1187
+ context.fillStyle = baseColor !== null && baseColor !== void 0 ? baseColor : "rgba(0,0,0,0)";
1188
+ context.fillRect(0, 0, dimension.width, dimension.height);
1189
+ context.restore();
1190
+ }
1191
+
1192
+ static clear(context, dimension) {
1193
+ context.clearRect(0, 0, dimension.width, dimension.height);
1194
+ }
1195
+
1196
+ static drawLinkLine(context, width, begin, end, maxDistance, canvasSize, warp, backgroundMask, composite, colorLine, opacity, shadow) {
1197
+ let drawn = false;
1198
+
1199
+ if (NumberUtils.getDistance(begin, end) <= maxDistance) {
1200
+ drawLine(context, begin, end);
1201
+ drawn = true;
1202
+ } else if (warp) {
1203
+ let pi1;
1204
+ let pi2;
1205
+ const endNE = {
1206
+ x: end.x - canvasSize.width,
1207
+ y: end.y
1208
+ };
1209
+ const d1 = NumberUtils.getDistances(begin, endNE);
1210
+
1211
+ if (d1.distance <= maxDistance) {
1212
+ const yi = begin.y - d1.dy / d1.dx * begin.x;
1213
+ pi1 = {
1214
+ x: 0,
1215
+ y: yi
1216
+ };
1217
+ pi2 = {
1218
+ x: canvasSize.width,
1219
+ y: yi
1220
+ };
1221
+ } else {
1222
+ const endSW = {
1223
+ x: end.x,
1224
+ y: end.y - canvasSize.height
1225
+ };
1226
+ const d2 = NumberUtils.getDistances(begin, endSW);
1227
+
1228
+ if (d2.distance <= maxDistance) {
1229
+ const yi = begin.y - d2.dy / d2.dx * begin.x;
1230
+ const xi = -yi / (d2.dy / d2.dx);
1231
+ pi1 = {
1232
+ x: xi,
1233
+ y: 0
1234
+ };
1235
+ pi2 = {
1236
+ x: xi,
1237
+ y: canvasSize.height
1238
+ };
1239
+ } else {
1240
+ const endSE = {
1241
+ x: end.x - canvasSize.width,
1242
+ y: end.y - canvasSize.height
1243
+ };
1244
+ const d3 = NumberUtils.getDistances(begin, endSE);
1245
+
1246
+ if (d3.distance <= maxDistance) {
1247
+ const yi = begin.y - d3.dy / d3.dx * begin.x;
1248
+ const xi = -yi / (d3.dy / d3.dx);
1249
+ pi1 = {
1250
+ x: xi,
1251
+ y: yi
1252
+ };
1253
+ pi2 = {
1254
+ x: pi1.x + canvasSize.width,
1255
+ y: pi1.y + canvasSize.height
1256
+ };
1257
+ }
1258
+ }
1259
+ }
1260
+
1261
+ if (pi1 && pi2) {
1262
+ drawLine(context, begin, pi1);
1263
+ drawLine(context, end, pi2);
1264
+ drawn = true;
1265
+ }
1266
+ }
1267
+
1268
+ if (!drawn) {
1269
+ return;
1270
+ }
1271
+
1272
+ context.lineWidth = width;
1273
+
1274
+ if (backgroundMask) {
1275
+ context.globalCompositeOperation = composite;
1276
+ }
1277
+
1278
+ context.strokeStyle = ColorUtils.getStyleFromRgb(colorLine, opacity);
1279
+
1280
+ if (shadow.enable) {
1281
+ const shadowColor = ColorUtils.colorToRgb(shadow.color);
1282
+
1283
+ if (shadowColor) {
1284
+ context.shadowBlur = shadow.blur;
1285
+ context.shadowColor = ColorUtils.getStyleFromRgb(shadowColor);
1286
+ }
1287
+ }
1288
+
1289
+ context.stroke();
1290
+ }
1291
+
1292
+ static drawLinkTriangle(context, pos1, pos2, pos3, backgroundMask, composite, colorTriangle, opacityTriangle) {
1293
+ drawTriangle(context, pos1, pos2, pos3);
1294
+
1295
+ if (backgroundMask) {
1296
+ context.globalCompositeOperation = composite;
1297
+ }
1298
+
1299
+ context.fillStyle = ColorUtils.getStyleFromRgb(colorTriangle, opacityTriangle);
1300
+ context.fill();
1301
+ }
1302
+
1303
+ static drawConnectLine(context, width, lineStyle, begin, end) {
1304
+ context.save();
1305
+ drawLine(context, begin, end);
1306
+ context.lineWidth = width;
1307
+ context.strokeStyle = lineStyle;
1308
+ context.stroke();
1309
+ context.restore();
1310
+ }
1311
+
1312
+ static gradient(context, p1, p2, opacity) {
1313
+ const gradStop = Math.floor(p2.getRadius() / p1.getRadius());
1314
+ const color1 = p1.getFillColor();
1315
+ const color2 = p2.getFillColor();
1316
+
1317
+ if (!color1 || !color2) {
1318
+ return;
1319
+ }
1320
+
1321
+ const sourcePos = p1.getPosition();
1322
+ const destPos = p2.getPosition();
1323
+ const midRgb = ColorUtils.mix(color1, color2, p1.getRadius(), p2.getRadius());
1324
+ const grad = context.createLinearGradient(sourcePos.x, sourcePos.y, destPos.x, destPos.y);
1325
+ grad.addColorStop(0, ColorUtils.getStyleFromHsl(color1, opacity));
1326
+ grad.addColorStop(gradStop > 1 ? 1 : gradStop, ColorUtils.getStyleFromRgb(midRgb, opacity));
1327
+ grad.addColorStop(1, ColorUtils.getStyleFromHsl(color2, opacity));
1328
+ return grad;
1329
+ }
1330
+
1331
+ static drawGrabLine(context, width, begin, end, colorLine, opacity) {
1332
+ context.save();
1333
+ drawLine(context, begin, end);
1334
+ context.strokeStyle = ColorUtils.getStyleFromRgb(colorLine, opacity);
1335
+ context.lineWidth = width;
1336
+ context.stroke();
1337
+ context.restore();
1338
+ }
1339
+
1340
+ static drawLight(container, context, mousePos) {
1341
+ const lightOptions = container.actualOptions.interactivity.modes.light.area;
1342
+ context.beginPath();
1343
+ context.arc(mousePos.x, mousePos.y, lightOptions.radius, 0, 2 * Math.PI);
1344
+ const gradientAmbientLight = context.createRadialGradient(mousePos.x, mousePos.y, 0, mousePos.x, mousePos.y, lightOptions.radius);
1345
+ const gradient = lightOptions.gradient;
1346
+ const gradientRgb = {
1347
+ start: ColorUtils.colorToRgb(gradient.start),
1348
+ stop: ColorUtils.colorToRgb(gradient.stop)
1349
+ };
1350
+
1351
+ if (!gradientRgb.start || !gradientRgb.stop) {
1352
+ return;
1353
+ }
1354
+
1355
+ gradientAmbientLight.addColorStop(0, ColorUtils.getStyleFromRgb(gradientRgb.start));
1356
+ gradientAmbientLight.addColorStop(1, ColorUtils.getStyleFromRgb(gradientRgb.stop));
1357
+ context.fillStyle = gradientAmbientLight;
1358
+ context.fill();
1359
+ }
1360
+
1361
+ static drawParticleShadow(container, context, particle, mousePos) {
1362
+ const pos = particle.getPosition();
1363
+ const shadowOptions = container.actualOptions.interactivity.modes.light.shadow;
1364
+ context.save();
1365
+ const radius = particle.getRadius();
1366
+ const sides = particle.sides;
1367
+ const full = Math.PI * 2 / sides;
1368
+ const angle = -particle.rotate.value + Math.PI / 4;
1369
+ const factor = 1;
1370
+ const dots = [];
1371
+
1372
+ for (let i = 0; i < sides; i++) {
1373
+ dots.push({
1374
+ x: pos.x + radius * Math.sin(angle + full * i) * factor,
1375
+ y: pos.y + radius * Math.cos(angle + full * i) * factor
1376
+ });
1377
+ }
1378
+
1379
+ const points = [];
1380
+ const shadowLength = shadowOptions.length;
1381
+
1382
+ for (const dot of dots) {
1383
+ const dotAngle = Math.atan2(mousePos.y - dot.y, mousePos.x - dot.x);
1384
+ const endX = dot.x + shadowLength * Math.sin(-dotAngle - Math.PI / 2);
1385
+ const endY = dot.y + shadowLength * Math.cos(-dotAngle - Math.PI / 2);
1386
+ points.push({
1387
+ endX: endX,
1388
+ endY: endY,
1389
+ startX: dot.x,
1390
+ startY: dot.y
1391
+ });
1392
+ }
1393
+
1394
+ const shadowRgb = ColorUtils.colorToRgb(shadowOptions.color);
1395
+
1396
+ if (!shadowRgb) {
1397
+ return;
1398
+ }
1399
+
1400
+ const shadowColor = ColorUtils.getStyleFromRgb(shadowRgb);
1401
+
1402
+ for (let i = points.length - 1; i >= 0; i--) {
1403
+ const n = i == points.length - 1 ? 0 : i + 1;
1404
+ context.beginPath();
1405
+ context.moveTo(points[i].startX, points[i].startY);
1406
+ context.lineTo(points[n].startX, points[n].startY);
1407
+ context.lineTo(points[n].endX, points[n].endY);
1408
+ context.lineTo(points[i].endX, points[i].endY);
1409
+ context.fillStyle = shadowColor;
1410
+ context.fill();
1411
+ }
1412
+
1413
+ context.restore();
1414
+ }
1415
+
1416
+ static drawParticle(container, context, particle, delta, fillColorValue, strokeColorValue, backgroundMask, composite, radius, opacity, shadow) {
1417
+ const pos = particle.getPosition();
1418
+ context.save();
1419
+ context.translate(pos.x, pos.y);
1420
+ context.beginPath();
1421
+ const angle = particle.rotate.value + (particle.options.rotate.path ? particle.pathAngle : 0);
1422
+
1423
+ if (angle !== 0) {
1424
+ context.rotate(angle);
1425
+ }
1426
+
1427
+ if (backgroundMask) {
1428
+ context.globalCompositeOperation = composite;
1429
+ }
1430
+
1431
+ const shadowColor = particle.shadowColor;
1432
+
1433
+ if (shadow.enable && shadowColor) {
1434
+ context.shadowBlur = shadow.blur;
1435
+ context.shadowColor = ColorUtils.getStyleFromRgb(shadowColor);
1436
+ context.shadowOffsetX = shadow.offset.x;
1437
+ context.shadowOffsetY = shadow.offset.y;
1438
+ }
1439
+
1440
+ if (fillColorValue) {
1441
+ context.fillStyle = fillColorValue;
1442
+ }
1443
+
1444
+ const stroke = particle.stroke;
1445
+ context.lineWidth = particle.strokeWidth;
1446
+
1447
+ if (strokeColorValue) {
1448
+ context.strokeStyle = strokeColorValue;
1449
+ }
1450
+
1451
+ CanvasUtils.drawShape(container, context, particle, radius, opacity, delta);
1452
+
1453
+ if (stroke.width > 0) {
1454
+ context.stroke();
1455
+ }
1456
+
1457
+ if (particle.close) {
1458
+ context.closePath();
1459
+ }
1460
+
1461
+ if (particle.fill) {
1462
+ context.fill();
1463
+ }
1464
+
1465
+ context.restore();
1466
+ context.save();
1467
+ context.translate(pos.x, pos.y);
1468
+
1469
+ if (angle !== 0) {
1470
+ context.rotate(angle);
1471
+ }
1472
+
1473
+ if (backgroundMask) {
1474
+ context.globalCompositeOperation = composite;
1475
+ }
1476
+
1477
+ CanvasUtils.drawShapeAfterEffect(container, context, particle, radius, opacity, delta);
1478
+ context.restore();
1479
+ }
1480
+
1481
+ static drawShape(container, context, particle, radius, opacity, delta) {
1482
+ if (!particle.shape) {
1483
+ return;
1484
+ }
1485
+
1486
+ const drawer = container.drawers.get(particle.shape);
1487
+
1488
+ if (!drawer) {
1489
+ return;
1490
+ }
1491
+
1492
+ drawer.draw(context, particle, radius, opacity, delta.value, container.retina.pixelRatio);
1493
+ }
1494
+
1495
+ static drawShapeAfterEffect(container, context, particle, radius, opacity, delta) {
1496
+ if (!particle.shape) {
1497
+ return;
1498
+ }
1499
+
1500
+ const drawer = container.drawers.get(particle.shape);
1501
+
1502
+ if (!(drawer === null || drawer === void 0 ? void 0 : drawer.afterEffect)) {
1503
+ return;
1504
+ }
1505
+
1506
+ drawer.afterEffect(context, particle, radius, opacity, delta.value, container.retina.pixelRatio);
1507
+ }
1508
+
1509
+ static drawPlugin(context, plugin, delta) {
1510
+ if (plugin.draw !== undefined) {
1511
+ context.save();
1512
+ plugin.draw(context, delta);
1513
+ context.restore();
1514
+ }
1515
+ }
1516
+
1517
+ }
1518
+ ;// CONCATENATED MODULE: ./dist/browser/Utils/Range.js
1519
+ class Range {
1520
+ constructor(x, y) {
1521
+ this.position = {
1522
+ x: x,
1523
+ y: y
1524
+ };
1525
+ }
1526
+
1527
+ }
1528
+ ;// CONCATENATED MODULE: ./dist/browser/Utils/Circle.js
1529
+
1530
+ class Circle extends Range {
1531
+ constructor(x, y, radius) {
1532
+ super(x, y);
1533
+ this.radius = radius;
1534
+ }
1535
+
1536
+ contains(point) {
1537
+ const d = Math.pow(point.x - this.position.x, 2) + Math.pow(point.y - this.position.y, 2);
1538
+ return d <= this.radius * this.radius;
1539
+ }
1540
+
1541
+ intersects(range) {
1542
+ const rect = range;
1543
+ const circle = range;
1544
+ const pos1 = this.position;
1545
+ const pos2 = range.position;
1546
+ const xDist = Math.abs(pos2.x - pos1.x);
1547
+ const yDist = Math.abs(pos2.y - pos1.y);
1548
+ const r = this.radius;
1549
+
1550
+ if (circle.radius !== undefined) {
1551
+ const rSum = r + circle.radius;
1552
+ const dist = Math.sqrt(xDist * xDist + yDist + yDist);
1553
+ return rSum > dist;
1554
+ } else if (rect.size !== undefined) {
1555
+ const w = rect.size.width;
1556
+ const h = rect.size.height;
1557
+ const edges = Math.pow(xDist - w, 2) + Math.pow(yDist - h, 2);
1558
+
1559
+ if (xDist > r + w || yDist > r + h) {
1560
+ return false;
1561
+ }
1562
+
1563
+ if (xDist <= w || yDist <= h) {
1564
+ return true;
1565
+ }
1566
+
1567
+ return edges <= r * r;
1568
+ }
1569
+
1570
+ return false;
1571
+ }
1572
+
1573
+ }
1574
+ ;// CONCATENATED MODULE: ./dist/browser/Utils/Rectangle.js
1575
+
1576
+ class Rectangle extends Range {
1577
+ constructor(x, y, width, height) {
1578
+ super(x, y);
1579
+ this.size = {
1580
+ height: height,
1581
+ width: width
1582
+ };
1583
+ }
1584
+
1585
+ contains(point) {
1586
+ const w = this.size.width;
1587
+ const h = this.size.height;
1588
+ const pos = this.position;
1589
+ return point.x >= pos.x && point.x <= pos.x + w && point.y >= pos.y && point.y <= pos.y + h;
1590
+ }
1591
+
1592
+ intersects(range) {
1593
+ const rect = range;
1594
+ const circle = range;
1595
+ const w = this.size.width;
1596
+ const h = this.size.height;
1597
+ const pos1 = this.position;
1598
+ const pos2 = range.position;
1599
+
1600
+ if (circle.radius !== undefined) {
1601
+ return circle.intersects(this);
1602
+ } else if (rect.size !== undefined) {
1603
+ const size2 = rect.size;
1604
+ const w2 = size2.width;
1605
+ const h2 = size2.height;
1606
+ return pos2.x < pos1.x + w && pos2.x + w2 > pos1.x && pos2.y < pos1.y + h && pos2.y + h2 > pos1.y;
1607
+ }
1608
+
1609
+ return false;
1610
+ }
1611
+
1612
+ }
1613
+ ;// CONCATENATED MODULE: ./dist/browser/Utils/CircleWarp.js
1614
+
1615
+
1616
+ class CircleWarp extends Circle {
1617
+ constructor(x, y, radius, canvasSize) {
1618
+ super(x, y, radius);
1619
+ this.canvasSize = canvasSize;
1620
+ this.canvasSize = {
1621
+ height: canvasSize.height,
1622
+ width: canvasSize.width
1623
+ };
1624
+ }
1625
+
1626
+ contains(point) {
1627
+ if (super.contains(point)) {
1628
+ return true;
1629
+ }
1630
+
1631
+ const posNE = {
1632
+ x: point.x - this.canvasSize.width,
1633
+ y: point.y
1634
+ };
1635
+
1636
+ if (super.contains(posNE)) {
1637
+ return true;
1638
+ }
1639
+
1640
+ const posSE = {
1641
+ x: point.x - this.canvasSize.width,
1642
+ y: point.y - this.canvasSize.height
1643
+ };
1644
+
1645
+ if (super.contains(posSE)) {
1646
+ return true;
1647
+ }
1648
+
1649
+ const posSW = {
1650
+ x: point.x,
1651
+ y: point.y - this.canvasSize.height
1652
+ };
1653
+ return super.contains(posSW);
1654
+ }
1655
+
1656
+ intersects(range) {
1657
+ if (super.intersects(range)) {
1658
+ return true;
1659
+ }
1660
+
1661
+ const rect = range;
1662
+ const circle = range;
1663
+ const newPos = {
1664
+ x: range.position.x - this.canvasSize.width,
1665
+ y: range.position.y - this.canvasSize.height
1666
+ };
1667
+
1668
+ if (circle.radius !== undefined) {
1669
+ const biggerCircle = new Circle(newPos.x, newPos.y, circle.radius * 2);
1670
+ return super.intersects(biggerCircle);
1671
+ } else if (rect.size !== undefined) {
1672
+ const rectSW = new Rectangle(newPos.x, newPos.y, rect.size.width * 2, rect.size.height * 2);
1673
+ return super.intersects(rectSW);
1674
+ }
1675
+
1676
+ return false;
1677
+ }
1678
+
1679
+ }
1680
+ ;// CONCATENATED MODULE: ./dist/browser/Enums/Modes/ClickMode.js
1681
+ var ClickMode;
1682
+
1683
+ (function (ClickMode) {
1684
+ ClickMode["attract"] = "attract";
1685
+ ClickMode["bubble"] = "bubble";
1686
+ ClickMode["push"] = "push";
1687
+ ClickMode["remove"] = "remove";
1688
+ ClickMode["repulse"] = "repulse";
1689
+ ClickMode["pause"] = "pause";
1690
+ ClickMode["trail"] = "trail";
1691
+ })(ClickMode || (ClickMode = {}));
1692
+ ;// CONCATENATED MODULE: ./dist/browser/Enums/Modes/DivMode.js
1693
+ var DivMode;
1694
+
1695
+ (function (DivMode) {
1696
+ DivMode["bounce"] = "bounce";
1697
+ DivMode["bubble"] = "bubble";
1698
+ DivMode["repulse"] = "repulse";
1699
+ })(DivMode || (DivMode = {}));
1700
+ ;// CONCATENATED MODULE: ./dist/browser/Enums/Modes/HoverMode.js
1701
+ var HoverMode;
1702
+
1703
+ (function (HoverMode) {
1704
+ HoverMode["attract"] = "attract";
1705
+ HoverMode["bounce"] = "bounce";
1706
+ HoverMode["bubble"] = "bubble";
1707
+ HoverMode["connect"] = "connect";
1708
+ HoverMode["grab"] = "grab";
1709
+ HoverMode["light"] = "light";
1710
+ HoverMode["repulse"] = "repulse";
1711
+ HoverMode["slow"] = "slow";
1712
+ HoverMode["trail"] = "trail";
1713
+ })(HoverMode || (HoverMode = {}));
1714
+ ;// CONCATENATED MODULE: ./dist/browser/Enums/Modes/CollisionMode.js
1715
+ var CollisionMode;
1716
+
1717
+ (function (CollisionMode) {
1718
+ CollisionMode["absorb"] = "absorb";
1719
+ CollisionMode["bounce"] = "bounce";
1720
+ CollisionMode["destroy"] = "destroy";
1721
+ })(CollisionMode || (CollisionMode = {}));
1722
+ ;// CONCATENATED MODULE: ./dist/browser/Enums/Modes/OutMode.js
1723
+ var OutMode;
1724
+
1725
+ (function (OutMode) {
1726
+ OutMode["bounce"] = "bounce";
1727
+ OutMode["bounceHorizontal"] = "bounce-horizontal";
1728
+ OutMode["bounceVertical"] = "bounce-vertical";
1729
+ OutMode["none"] = "none";
1730
+ OutMode["out"] = "out";
1731
+ OutMode["destroy"] = "destroy";
1732
+ })(OutMode || (OutMode = {}));
1733
+ ;// CONCATENATED MODULE: ./dist/browser/Enums/Modes/SizeMode.js
1734
+ var SizeMode;
1735
+
1736
+ (function (SizeMode) {
1737
+ SizeMode["precise"] = "precise";
1738
+ SizeMode["percent"] = "percent";
1739
+ })(SizeMode || (SizeMode = {}));
1740
+ ;// CONCATENATED MODULE: ./dist/browser/Enums/Modes/ThemeMode.js
1741
+ var ThemeMode;
1742
+
1743
+ (function (ThemeMode) {
1744
+ ThemeMode["any"] = "any";
1745
+ ThemeMode["dark"] = "dark";
1746
+ ThemeMode["light"] = "light";
1747
+ })(ThemeMode || (ThemeMode = {}));
1748
+ ;// CONCATENATED MODULE: ./dist/browser/Enums/Modes/index.js
1749
+
1750
+
1751
+
1752
+
1753
+
1754
+
1755
+
1756
+ ;// CONCATENATED MODULE: ./dist/browser/Enums/AnimationStatus.js
1757
+ var AnimationStatus;
1758
+
1759
+ (function (AnimationStatus) {
1760
+ AnimationStatus[AnimationStatus["increasing"] = 0] = "increasing";
1761
+ AnimationStatus[AnimationStatus["decreasing"] = 1] = "decreasing";
1762
+ })(AnimationStatus || (AnimationStatus = {}));
1763
+ ;// CONCATENATED MODULE: ./dist/browser/Enums/Types/DestroyType.js
1764
+ var DestroyType;
1765
+
1766
+ (function (DestroyType) {
1767
+ DestroyType["none"] = "none";
1768
+ DestroyType["max"] = "max";
1769
+ DestroyType["min"] = "min";
1770
+ })(DestroyType || (DestroyType = {}));
1771
+ ;// CONCATENATED MODULE: ./dist/browser/Enums/Types/ProcessBubbleType.js
1772
+ var ProcessBubbleType;
1773
+
1774
+ (function (ProcessBubbleType) {
1775
+ ProcessBubbleType["color"] = "color";
1776
+ ProcessBubbleType["opacity"] = "opacity";
1777
+ ProcessBubbleType["size"] = "size";
1778
+ })(ProcessBubbleType || (ProcessBubbleType = {}));
1779
+ ;// CONCATENATED MODULE: ./dist/browser/Enums/Types/ShapeType.js
1780
+ var ShapeType;
1781
+
1782
+ (function (ShapeType) {
1783
+ ShapeType["char"] = "char";
1784
+ ShapeType["character"] = "character";
1785
+ ShapeType["circle"] = "circle";
1786
+ ShapeType["edge"] = "edge";
1787
+ ShapeType["image"] = "image";
1788
+ ShapeType["images"] = "images";
1789
+ ShapeType["line"] = "line";
1790
+ ShapeType["polygon"] = "polygon";
1791
+ ShapeType["square"] = "square";
1792
+ ShapeType["star"] = "star";
1793
+ ShapeType["triangle"] = "triangle";
1794
+ })(ShapeType || (ShapeType = {}));
1795
+ ;// CONCATENATED MODULE: ./dist/browser/Enums/Types/StartValueType.js
1796
+ var StartValueType;
1797
+
1798
+ (function (StartValueType) {
1799
+ StartValueType["max"] = "max";
1800
+ StartValueType["min"] = "min";
1801
+ StartValueType["random"] = "random";
1802
+ })(StartValueType || (StartValueType = {}));
1803
+ ;// CONCATENATED MODULE: ./dist/browser/Enums/Types/DivType.js
1804
+ var DivType;
1805
+
1806
+ (function (DivType) {
1807
+ DivType["circle"] = "circle";
1808
+ DivType["rectangle"] = "rectangle";
1809
+ })(DivType || (DivType = {}));
1810
+ ;// CONCATENATED MODULE: ./dist/browser/Enums/Types/index.js
1811
+
1812
+
1813
+
1814
+
1815
+
1816
+ ;// CONCATENATED MODULE: ./dist/browser/Enums/InteractivityDetect.js
1817
+ var InteractivityDetect;
1818
+
1819
+ (function (InteractivityDetect) {
1820
+ InteractivityDetect["canvas"] = "canvas";
1821
+ InteractivityDetect["parent"] = "parent";
1822
+ InteractivityDetect["window"] = "window";
1823
+ })(InteractivityDetect || (InteractivityDetect = {}));
1824
+ ;// CONCATENATED MODULE: ./dist/browser/Enums/index.js
1825
+
1826
+
1827
+
1828
+
1829
+
1830
+ ;// CONCATENATED MODULE: ./dist/browser/Utils/EventListeners.js
1831
+
1832
+
1833
+
1834
+ function manageListener(element, event, handler, add, options) {
1835
+ if (add) {
1836
+ let addOptions = {
1837
+ passive: true
1838
+ };
1839
+
1840
+ if (typeof options === "boolean") {
1841
+ addOptions.capture = options;
1842
+ } else if (options !== undefined) {
1843
+ addOptions = options;
1844
+ }
1845
+
1846
+ element.addEventListener(event, handler, addOptions);
1847
+ } else {
1848
+ const removeOptions = options;
1849
+ element.removeEventListener(event, handler, removeOptions);
1850
+ }
1851
+ }
1852
+
1853
+ class EventListeners {
1854
+ constructor(container) {
1855
+ this.container = container;
1856
+ this.canPush = true;
1857
+
1858
+ this.mouseMoveHandler = e => this.mouseTouchMove(e);
1859
+
1860
+ this.touchStartHandler = e => this.mouseTouchMove(e);
1861
+
1862
+ this.touchMoveHandler = e => this.mouseTouchMove(e);
1863
+
1864
+ this.touchEndHandler = () => this.mouseTouchFinish();
1865
+
1866
+ this.mouseLeaveHandler = () => this.mouseTouchFinish();
1867
+
1868
+ this.touchCancelHandler = () => this.mouseTouchFinish();
1869
+
1870
+ this.touchEndClickHandler = e => this.mouseTouchClick(e);
1871
+
1872
+ this.mouseUpHandler = e => this.mouseTouchClick(e);
1873
+
1874
+ this.mouseDownHandler = () => this.mouseDown();
1875
+
1876
+ this.visibilityChangeHandler = () => this.handleVisibilityChange();
1877
+
1878
+ this.resizeHandler = () => this.handleWindowResize();
1879
+ }
1880
+
1881
+ addListeners() {
1882
+ this.manageListeners(true);
1883
+ }
1884
+
1885
+ removeListeners() {
1886
+ this.manageListeners(false);
1887
+ }
1888
+
1889
+ manageListeners(add) {
1890
+ var _a;
1891
+
1892
+ const container = this.container;
1893
+ const options = container.actualOptions;
1894
+ const detectType = options.interactivity.detectsOn;
1895
+ let mouseLeaveEvent = Constants.mouseLeaveEvent;
1896
+
1897
+ if (detectType === InteractivityDetect.window) {
1898
+ container.interactivity.element = window;
1899
+ mouseLeaveEvent = Constants.mouseOutEvent;
1900
+ } else if (detectType === InteractivityDetect.parent && container.canvas.element) {
1901
+ const canvasEl = container.canvas.element;
1902
+ container.interactivity.element = (_a = canvasEl.parentElement) !== null && _a !== void 0 ? _a : canvasEl.parentNode;
1903
+ } else {
1904
+ container.interactivity.element = container.canvas.element;
1905
+ }
1906
+
1907
+ const interactivityEl = container.interactivity.element;
1908
+
1909
+ if (!interactivityEl) {
1910
+ return;
1911
+ }
1912
+
1913
+ const html = interactivityEl;
1914
+
1915
+ if (options.interactivity.events.onHover.enable || options.interactivity.events.onClick.enable) {
1916
+ manageListener(interactivityEl, Constants.mouseMoveEvent, this.mouseMoveHandler, add);
1917
+ manageListener(interactivityEl, Constants.touchStartEvent, this.touchStartHandler, add);
1918
+ manageListener(interactivityEl, Constants.touchMoveEvent, this.touchMoveHandler, add);
1919
+
1920
+ if (!options.interactivity.events.onClick.enable) {
1921
+ manageListener(interactivityEl, Constants.touchEndEvent, this.touchEndHandler, add);
1922
+ } else {
1923
+ manageListener(interactivityEl, Constants.touchEndEvent, this.touchEndClickHandler, add);
1924
+ manageListener(interactivityEl, Constants.mouseUpEvent, this.mouseUpHandler, add);
1925
+ manageListener(interactivityEl, Constants.mouseDownEvent, this.mouseDownHandler, add);
1926
+ }
1927
+
1928
+ manageListener(interactivityEl, mouseLeaveEvent, this.mouseLeaveHandler, add);
1929
+ manageListener(interactivityEl, Constants.touchCancelEvent, this.touchCancelHandler, add);
1930
+ }
1931
+
1932
+ if (container.canvas.element) {
1933
+ container.canvas.element.style.pointerEvents = html === container.canvas.element ? "initial" : "none";
1934
+ }
1935
+
1936
+ if (options.interactivity.events.resize) {
1937
+ manageListener(window, Constants.resizeEvent, this.resizeHandler, add);
1938
+ }
1939
+
1940
+ if (document) {
1941
+ manageListener(document, Constants.visibilityChangeEvent, this.visibilityChangeHandler, add, false);
1942
+ }
1943
+ }
1944
+
1945
+ handleWindowResize() {
1946
+ var _a;
1947
+
1948
+ (_a = this.container.canvas) === null || _a === void 0 ? void 0 : _a.windowResize();
1949
+ }
1950
+
1951
+ handleVisibilityChange() {
1952
+ const container = this.container;
1953
+ const options = container.actualOptions;
1954
+ this.mouseTouchFinish();
1955
+
1956
+ if (!options.pauseOnBlur) {
1957
+ return;
1958
+ }
1959
+
1960
+ if (document === null || document === void 0 ? void 0 : document.hidden) {
1961
+ container.pageHidden = true;
1962
+ container.pause();
1963
+ } else {
1964
+ container.pageHidden = false;
1965
+
1966
+ if (container.getAnimationStatus()) {
1967
+ container.play(true);
1968
+ } else {
1969
+ container.draw();
1970
+ }
1971
+ }
1972
+ }
1973
+
1974
+ mouseDown() {
1975
+ const interactivity = this.container.interactivity;
1976
+
1977
+ if (interactivity) {
1978
+ const mouse = interactivity.mouse;
1979
+ mouse.clicking = true;
1980
+ mouse.downPosition = mouse.position;
1981
+ }
1982
+ }
1983
+
1984
+ mouseTouchMove(e) {
1985
+ var _a, _b, _c, _d, _e, _f, _g;
1986
+
1987
+ const container = this.container;
1988
+ const options = container.actualOptions;
1989
+
1990
+ if (((_a = container.interactivity) === null || _a === void 0 ? void 0 : _a.element) === undefined) {
1991
+ return;
1992
+ }
1993
+
1994
+ container.interactivity.mouse.inside = true;
1995
+ let pos;
1996
+ const canvas = container.canvas.element;
1997
+
1998
+ if (e.type.startsWith("mouse")) {
1999
+ this.canPush = true;
2000
+ const mouseEvent = e;
2001
+
2002
+ if (container.interactivity.element === window) {
2003
+ if (canvas) {
2004
+ const clientRect = canvas.getBoundingClientRect();
2005
+ pos = {
2006
+ x: mouseEvent.clientX - clientRect.left,
2007
+ y: mouseEvent.clientY - clientRect.top
2008
+ };
2009
+ }
2010
+ } else if (options.interactivity.detectsOn === InteractivityDetect.parent) {
2011
+ const source = mouseEvent.target;
2012
+ const target = mouseEvent.currentTarget;
2013
+ const canvasEl = container.canvas.element;
2014
+
2015
+ if (source && target && canvasEl) {
2016
+ const sourceRect = source.getBoundingClientRect();
2017
+ const targetRect = target.getBoundingClientRect();
2018
+ const canvasRect = canvasEl.getBoundingClientRect();
2019
+ pos = {
2020
+ x: mouseEvent.offsetX + 2 * sourceRect.left - (targetRect.left + canvasRect.left),
2021
+ y: mouseEvent.offsetY + 2 * sourceRect.top - (targetRect.top + canvasRect.top)
2022
+ };
2023
+ } else {
2024
+ pos = {
2025
+ x: (_b = mouseEvent.offsetX) !== null && _b !== void 0 ? _b : mouseEvent.clientX,
2026
+ y: (_c = mouseEvent.offsetY) !== null && _c !== void 0 ? _c : mouseEvent.clientY
2027
+ };
2028
+ }
2029
+ } else {
2030
+ if (mouseEvent.target === container.canvas.element) {
2031
+ pos = {
2032
+ x: (_d = mouseEvent.offsetX) !== null && _d !== void 0 ? _d : mouseEvent.clientX,
2033
+ y: (_e = mouseEvent.offsetY) !== null && _e !== void 0 ? _e : mouseEvent.clientY
2034
+ };
2035
+ }
2036
+ }
2037
+ } else {
2038
+ this.canPush = e.type !== "touchmove";
2039
+ const touchEvent = e;
2040
+ const lastTouch = touchEvent.touches[touchEvent.touches.length - 1];
2041
+ const canvasRect = canvas === null || canvas === void 0 ? void 0 : canvas.getBoundingClientRect();
2042
+ pos = {
2043
+ x: lastTouch.clientX - ((_f = canvasRect === null || canvasRect === void 0 ? void 0 : canvasRect.left) !== null && _f !== void 0 ? _f : 0),
2044
+ y: lastTouch.clientY - ((_g = canvasRect === null || canvasRect === void 0 ? void 0 : canvasRect.top) !== null && _g !== void 0 ? _g : 0)
2045
+ };
2046
+ }
2047
+
2048
+ const pxRatio = container.retina.pixelRatio;
2049
+
2050
+ if (pos) {
2051
+ pos.x *= pxRatio;
2052
+ pos.y *= pxRatio;
2053
+ }
2054
+
2055
+ container.interactivity.mouse.position = pos;
2056
+ container.interactivity.status = Constants.mouseMoveEvent;
2057
+ }
2058
+
2059
+ mouseTouchFinish() {
2060
+ const interactivity = this.container.interactivity;
2061
+
2062
+ if (interactivity === undefined) {
2063
+ return;
2064
+ }
2065
+
2066
+ const mouse = interactivity.mouse;
2067
+ delete mouse.position;
2068
+ delete mouse.clickPosition;
2069
+ delete mouse.downPosition;
2070
+ interactivity.status = Constants.mouseLeaveEvent;
2071
+ mouse.inside = false;
2072
+ mouse.clicking = false;
2073
+ }
2074
+
2075
+ mouseTouchClick(e) {
2076
+ const container = this.container;
2077
+ const options = container.actualOptions;
2078
+ const mouse = container.interactivity.mouse;
2079
+ mouse.inside = true;
2080
+ let handled = false;
2081
+ const mousePosition = mouse.position;
2082
+
2083
+ if (mousePosition === undefined || !options.interactivity.events.onClick.enable) {
2084
+ return;
2085
+ }
2086
+
2087
+ for (const [, plugin] of container.plugins) {
2088
+ if (plugin.clickPositionValid !== undefined) {
2089
+ handled = plugin.clickPositionValid(mousePosition);
2090
+
2091
+ if (handled) {
2092
+ break;
2093
+ }
2094
+ }
2095
+ }
2096
+
2097
+ if (!handled) {
2098
+ this.doMouseTouchClick(e);
2099
+ }
2100
+
2101
+ mouse.clicking = false;
2102
+ }
2103
+
2104
+ doMouseTouchClick(e) {
2105
+ const container = this.container;
2106
+ const options = container.actualOptions;
2107
+
2108
+ if (this.canPush) {
2109
+ const mousePos = container.interactivity.mouse.position;
2110
+
2111
+ if (mousePos) {
2112
+ container.interactivity.mouse.clickPosition = {
2113
+ x: mousePos.x,
2114
+ y: mousePos.y
2115
+ };
2116
+ } else {
2117
+ return;
2118
+ }
2119
+
2120
+ container.interactivity.mouse.clickTime = new Date().getTime();
2121
+ const onClick = options.interactivity.events.onClick;
2122
+
2123
+ if (onClick.mode instanceof Array) {
2124
+ for (const mode of onClick.mode) {
2125
+ this.handleClickMode(mode);
2126
+ }
2127
+ } else {
2128
+ this.handleClickMode(onClick.mode);
2129
+ }
2130
+ }
2131
+
2132
+ if (e.type === "touchend") {
2133
+ setTimeout(() => this.mouseTouchFinish(), 500);
2134
+ }
2135
+ }
2136
+
2137
+ handleClickMode(mode) {
2138
+ const container = this.container;
2139
+ const options = container.actualOptions;
2140
+ const pushNb = options.interactivity.modes.push.quantity;
2141
+ const removeNb = options.interactivity.modes.remove.quantity;
2142
+
2143
+ switch (mode) {
2144
+ case ClickMode.push:
2145
+ {
2146
+ if (pushNb > 0) {
2147
+ container.particles.push(pushNb, container.interactivity.mouse);
2148
+ }
2149
+
2150
+ break;
2151
+ }
2152
+
2153
+ case ClickMode.remove:
2154
+ container.particles.removeQuantity(removeNb);
2155
+ break;
2156
+
2157
+ case ClickMode.bubble:
2158
+ container.bubble.clicking = true;
2159
+ break;
2160
+
2161
+ case ClickMode.repulse:
2162
+ container.repulse.clicking = true;
2163
+ container.repulse.count = 0;
2164
+
2165
+ for (const particle of container.repulse.particles) {
2166
+ particle.velocity.horizontal = particle.initialVelocity.horizontal;
2167
+ particle.velocity.vertical = particle.initialVelocity.vertical;
2168
+ }
2169
+
2170
+ container.repulse.particles = [];
2171
+ container.repulse.finish = false;
2172
+ setTimeout(() => {
2173
+ if (!container.destroyed) {
2174
+ container.repulse.clicking = false;
2175
+ }
2176
+ }, options.interactivity.modes.repulse.duration * 1000);
2177
+ break;
2178
+
2179
+ case ClickMode.attract:
2180
+ container.attract.clicking = true;
2181
+ container.attract.count = 0;
2182
+
2183
+ for (const particle of container.attract.particles) {
2184
+ particle.velocity.horizontal = particle.initialVelocity.horizontal;
2185
+ particle.velocity.vertical = particle.initialVelocity.vertical;
2186
+ }
2187
+
2188
+ container.attract.particles = [];
2189
+ container.attract.finish = false;
2190
+ setTimeout(() => {
2191
+ if (!container.destroyed) {
2192
+ container.attract.clicking = false;
2193
+ }
2194
+ }, options.interactivity.modes.attract.duration * 1000);
2195
+ break;
2196
+
2197
+ case ClickMode.pause:
2198
+ if (container.getAnimationStatus()) {
2199
+ container.pause();
2200
+ } else {
2201
+ container.play();
2202
+ }
2203
+
2204
+ break;
2205
+ }
2206
+
2207
+ for (const [, plugin] of container.plugins) {
2208
+ if (plugin.handleClickMode) {
2209
+ plugin.handleClickMode(mode);
2210
+ }
2211
+ }
2212
+ }
2213
+
2214
+ }
2215
+ ;// CONCATENATED MODULE: ./dist/browser/Utils/Plugins.js
2216
+ const plugins = [];
2217
+ const presets = new Map();
2218
+ const drawers = new Map();
2219
+ const pathGenerators = new Map();
2220
+ class Plugins {
2221
+ static getPlugin(plugin) {
2222
+ return plugins.find(t => t.id === plugin);
2223
+ }
2224
+
2225
+ static addPlugin(plugin) {
2226
+ if (!Plugins.getPlugin(plugin.id)) {
2227
+ plugins.push(plugin);
2228
+ }
2229
+ }
2230
+
2231
+ static getAvailablePlugins(container) {
2232
+ const res = new Map();
2233
+
2234
+ for (const plugin of plugins) {
2235
+ if (!plugin.needsPlugin(container.actualOptions)) {
2236
+ continue;
2237
+ }
2238
+
2239
+ res.set(plugin.id, plugin.getPlugin(container));
2240
+ }
2241
+
2242
+ return res;
2243
+ }
2244
+
2245
+ static loadOptions(options, sourceOptions) {
2246
+ for (const plugin of plugins) {
2247
+ plugin.loadOptions(options, sourceOptions);
2248
+ }
2249
+ }
2250
+
2251
+ static getPreset(preset) {
2252
+ return presets.get(preset);
2253
+ }
2254
+
2255
+ static addPreset(presetKey, options) {
2256
+ if (!Plugins.getPreset(presetKey)) {
2257
+ presets.set(presetKey, options);
2258
+ }
2259
+ }
2260
+
2261
+ static addShapeDrawer(type, drawer) {
2262
+ if (!Plugins.getShapeDrawer(type)) {
2263
+ drawers.set(type, drawer);
2264
+ }
2265
+ }
2266
+
2267
+ static getShapeDrawer(type) {
2268
+ return drawers.get(type);
2269
+ }
2270
+
2271
+ static getSupportedShapes() {
2272
+ return drawers.keys();
2273
+ }
2274
+
2275
+ static getPathGenerator(type) {
2276
+ return pathGenerators.get(type);
2277
+ }
2278
+
2279
+ static addPathGenerator(type, pathGenerator) {
2280
+ if (!Plugins.getPathGenerator(type)) {
2281
+ pathGenerators.set(type, pathGenerator);
2282
+ }
2283
+ }
2284
+
2285
+ }
2286
+ ;// CONCATENATED MODULE: ./dist/browser/Utils/Point.js
2287
+ class Point {
2288
+ constructor(position, particle) {
2289
+ this.position = position;
2290
+ this.particle = particle;
2291
+ }
2292
+
2293
+ }
2294
+ ;// CONCATENATED MODULE: ./dist/browser/Utils/QuadTree.js
2295
+
2296
+
2297
+
2298
+ class QuadTree {
2299
+ constructor(rectangle, capacity) {
2300
+ this.rectangle = rectangle;
2301
+ this.capacity = capacity;
2302
+ this.points = [];
2303
+ this.divided = false;
2304
+ }
2305
+
2306
+ subdivide() {
2307
+ const x = this.rectangle.position.x;
2308
+ const y = this.rectangle.position.y;
2309
+ const w = this.rectangle.size.width;
2310
+ const h = this.rectangle.size.height;
2311
+ const capacity = this.capacity;
2312
+ this.northEast = new QuadTree(new Rectangle(x, y, w / 2, h / 2), capacity);
2313
+ this.northWest = new QuadTree(new Rectangle(x + w / 2, y, w / 2, h / 2), capacity);
2314
+ this.southEast = new QuadTree(new Rectangle(x, y + h / 2, w / 2, h / 2), capacity);
2315
+ this.southWest = new QuadTree(new Rectangle(x + w / 2, y + h / 2, w / 2, h / 2), capacity);
2316
+ this.divided = true;
2317
+ }
2318
+
2319
+ insert(point) {
2320
+ var _a, _b, _c, _d, _e;
2321
+
2322
+ if (!this.rectangle.contains(point.position)) {
2323
+ return false;
2324
+ }
2325
+
2326
+ if (this.points.length < this.capacity) {
2327
+ this.points.push(point);
2328
+ return true;
2329
+ }
2330
+
2331
+ if (!this.divided) {
2332
+ this.subdivide();
2333
+ }
2334
+
2335
+ return (_e = ((_a = this.northEast) === null || _a === void 0 ? void 0 : _a.insert(point)) || ((_b = this.northWest) === null || _b === void 0 ? void 0 : _b.insert(point)) || ((_c = this.southEast) === null || _c === void 0 ? void 0 : _c.insert(point)) || ((_d = this.southWest) === null || _d === void 0 ? void 0 : _d.insert(point))) !== null && _e !== void 0 ? _e : false;
2336
+ }
2337
+
2338
+ queryCircle(position, radius) {
2339
+ return this.query(new Circle(position.x, position.y, radius));
2340
+ }
2341
+
2342
+ queryCircleWarp(position, radius, containerOrSize) {
2343
+ const container = containerOrSize;
2344
+ const size = containerOrSize;
2345
+ return this.query(new CircleWarp(position.x, position.y, radius, container.canvas !== undefined ? container.canvas.size : size));
2346
+ }
2347
+
2348
+ queryRectangle(position, size) {
2349
+ return this.query(new Rectangle(position.x, position.y, size.width, size.height));
2350
+ }
2351
+
2352
+ query(range, found) {
2353
+ var _a, _b, _c, _d;
2354
+
2355
+ const res = found !== null && found !== void 0 ? found : [];
2356
+
2357
+ if (!range.intersects(this.rectangle)) {
2358
+ return [];
2359
+ } else {
2360
+ for (const p of this.points) {
2361
+ if (!range.contains(p.position)) {
2362
+ continue;
2363
+ }
2364
+
2365
+ res.push(p.particle);
2366
+ }
2367
+
2368
+ if (this.divided) {
2369
+ (_a = this.northEast) === null || _a === void 0 ? void 0 : _a.query(range, res);
2370
+ (_b = this.northWest) === null || _b === void 0 ? void 0 : _b.query(range, res);
2371
+ (_c = this.southEast) === null || _c === void 0 ? void 0 : _c.query(range, res);
2372
+ (_d = this.southWest) === null || _d === void 0 ? void 0 : _d.query(range, res);
2373
+ }
2374
+ }
2375
+
2376
+ return res;
2377
+ }
2378
+
2379
+ }
2380
+ ;// CONCATENATED MODULE: ./dist/browser/Utils/index.js
2381
+
2382
+
2383
+
2384
+
2385
+
2386
+
2387
+
2388
+
2389
+
2390
+
2391
+
2392
+
2393
+
2394
+ ;// CONCATENATED MODULE: ./dist/browser/ShapeDrawers/TextDrawer.js
2395
+ var TextDrawer_awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {
2396
+ function adopt(value) {
2397
+ return value instanceof P ? value : new P(function (resolve) {
2398
+ resolve(value);
2399
+ });
2400
+ }
2401
+
2402
+ return new (P || (P = Promise))(function (resolve, reject) {
2403
+ function fulfilled(value) {
2404
+ try {
2405
+ step(generator.next(value));
2406
+ } catch (e) {
2407
+ reject(e);
2408
+ }
2409
+ }
2410
+
2411
+ function rejected(value) {
2412
+ try {
2413
+ step(generator["throw"](value));
2414
+ } catch (e) {
2415
+ reject(e);
2416
+ }
2417
+ }
2418
+
2419
+ function step(result) {
2420
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
2421
+ }
2422
+
2423
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
2424
+ });
2425
+ };
2426
+
2427
+
2428
+
2429
+ class TextDrawer {
2430
+ getSidesCount() {
2431
+ return 12;
2432
+ }
2433
+
2434
+ init(container) {
2435
+ var _a;
2436
+
2437
+ return TextDrawer_awaiter(this, void 0, void 0, function* () {
2438
+ const options = container.actualOptions;
2439
+
2440
+ if (Utils.isInArray(ShapeType.char, options.particles.shape.type) || Utils.isInArray(ShapeType.character, options.particles.shape.type)) {
2441
+ const shapeOptions = (_a = options.particles.shape.options[ShapeType.character]) !== null && _a !== void 0 ? _a : options.particles.shape.options[ShapeType.char];
2442
+
2443
+ if (shapeOptions instanceof Array) {
2444
+ for (const character of shapeOptions) {
2445
+ yield Utils.loadFont(character);
2446
+ }
2447
+ } else {
2448
+ if (shapeOptions !== undefined) {
2449
+ yield Utils.loadFont(shapeOptions);
2450
+ }
2451
+ }
2452
+ }
2453
+ });
2454
+ }
2455
+
2456
+ draw(context, particle, radius) {
2457
+ const character = particle.shapeData;
2458
+
2459
+ if (character === undefined) {
2460
+ return;
2461
+ }
2462
+
2463
+ const textData = character.value;
2464
+
2465
+ if (textData === undefined) {
2466
+ return;
2467
+ }
2468
+
2469
+ const textParticle = particle;
2470
+
2471
+ if (textParticle.text === undefined) {
2472
+ textParticle.text = textData instanceof Array ? Utils.itemFromArray(textData, particle.randomIndexData) : textData;
2473
+ }
2474
+
2475
+ const text = textParticle.text;
2476
+ const style = character.style;
2477
+ const weight = character.weight;
2478
+ const size = Math.round(radius) * 2;
2479
+ const font = character.font;
2480
+ const fill = particle.fill;
2481
+ const offsetX = text.length * radius / 2;
2482
+ context.font = `${style} ${weight} ${size}px "${font}"`;
2483
+ const pos = {
2484
+ x: -offsetX,
2485
+ y: radius / 2
2486
+ };
2487
+
2488
+ if (fill) {
2489
+ context.fillText(text, pos.x, pos.y);
2490
+ } else {
2491
+ context.strokeText(text, pos.x, pos.y);
2492
+ }
2493
+ }
2494
+
2495
+ }
2496
+ ;// CONCATENATED MODULE: ./dist/browser/ShapeDrawers/ImageDrawer.js
2497
+ var ImageDrawer_awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {
2498
+ function adopt(value) {
2499
+ return value instanceof P ? value : new P(function (resolve) {
2500
+ resolve(value);
2501
+ });
2502
+ }
2503
+
2504
+ return new (P || (P = Promise))(function (resolve, reject) {
2505
+ function fulfilled(value) {
2506
+ try {
2507
+ step(generator.next(value));
2508
+ } catch (e) {
2509
+ reject(e);
2510
+ }
2511
+ }
2512
+
2513
+ function rejected(value) {
2514
+ try {
2515
+ step(generator["throw"](value));
2516
+ } catch (e) {
2517
+ reject(e);
2518
+ }
2519
+ }
2520
+
2521
+ function step(result) {
2522
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
2523
+ }
2524
+
2525
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
2526
+ });
2527
+ };
2528
+
2529
+
2530
+
2531
+ class ImageDrawer {
2532
+ constructor() {
2533
+ this.images = [];
2534
+ }
2535
+
2536
+ getSidesCount() {
2537
+ return 12;
2538
+ }
2539
+
2540
+ getImages(container) {
2541
+ const containerImages = this.images.filter(t => t.id === container.id);
2542
+
2543
+ if (!containerImages.length) {
2544
+ this.images.push({
2545
+ id: container.id,
2546
+ images: []
2547
+ });
2548
+ return this.getImages(container);
2549
+ } else {
2550
+ return containerImages[0];
2551
+ }
2552
+ }
2553
+
2554
+ addImage(container, image) {
2555
+ const containerImages = this.getImages(container);
2556
+ containerImages === null || containerImages === void 0 ? void 0 : containerImages.images.push(image);
2557
+ }
2558
+
2559
+ init(container) {
2560
+ var _a;
2561
+
2562
+ return ImageDrawer_awaiter(this, void 0, void 0, function* () {
2563
+ const options = container.actualOptions;
2564
+ const shapeOptions = options.particles.shape;
2565
+
2566
+ if (!Utils.isInArray(ShapeType.image, shapeOptions.type) && !Utils.isInArray(ShapeType.images, shapeOptions.type)) {
2567
+ return;
2568
+ }
2569
+
2570
+ const imageOptions = (_a = shapeOptions.options[ShapeType.images]) !== null && _a !== void 0 ? _a : shapeOptions.options[ShapeType.image];
2571
+
2572
+ if (imageOptions instanceof Array) {
2573
+ for (const optionsImage of imageOptions) {
2574
+ yield this.loadImageShape(container, optionsImage);
2575
+ }
2576
+ } else {
2577
+ yield this.loadImageShape(container, imageOptions);
2578
+ }
2579
+ });
2580
+ }
2581
+
2582
+ destroy() {
2583
+ this.images = [];
2584
+ }
2585
+
2586
+ loadImageShape(container, imageShape) {
2587
+ return ImageDrawer_awaiter(this, void 0, void 0, function* () {
2588
+ try {
2589
+ const image = imageShape.replaceColor ? yield Utils.downloadSvgImage(imageShape.src) : yield Utils.loadImage(imageShape.src);
2590
+
2591
+ if (image) {
2592
+ this.addImage(container, image);
2593
+ }
2594
+ } catch (_a) {
2595
+ console.warn(`tsParticles error - ${imageShape.src} not found`);
2596
+ }
2597
+ });
2598
+ }
2599
+
2600
+ draw(context, particle, radius, opacity) {
2601
+ var _a, _b;
2602
+
2603
+ if (!context) {
2604
+ return;
2605
+ }
2606
+
2607
+ const image = particle.image;
2608
+ const element = (_a = image === null || image === void 0 ? void 0 : image.data) === null || _a === void 0 ? void 0 : _a.element;
2609
+
2610
+ if (!element) {
2611
+ return;
2612
+ }
2613
+
2614
+ const ratio = (_b = image === null || image === void 0 ? void 0 : image.ratio) !== null && _b !== void 0 ? _b : 1;
2615
+ const pos = {
2616
+ x: -radius,
2617
+ y: -radius
2618
+ };
2619
+
2620
+ if (!(image === null || image === void 0 ? void 0 : image.data.svgData) || !(image === null || image === void 0 ? void 0 : image.replaceColor)) {
2621
+ context.globalAlpha = opacity;
2622
+ }
2623
+
2624
+ context.drawImage(element, pos.x, pos.y, radius * 2, radius * 2 / ratio);
2625
+
2626
+ if (!(image === null || image === void 0 ? void 0 : image.data.svgData) || !(image === null || image === void 0 ? void 0 : image.replaceColor)) {
2627
+ context.globalAlpha = 1;
2628
+ }
2629
+ }
2630
+
2631
+ }
2632
+ ;// CONCATENATED MODULE: ./dist/browser/ShapeDrawers/LineDrawer.js
2633
+ class LineDrawer {
2634
+ getSidesCount() {
2635
+ return 1;
2636
+ }
2637
+
2638
+ draw(context, particle, radius) {
2639
+ context.moveTo(0, -radius / 2);
2640
+ context.lineTo(0, radius / 2);
2641
+ }
2642
+
2643
+ }
2644
+ ;// CONCATENATED MODULE: ./dist/browser/ShapeDrawers/CircleDrawer.js
2645
+ class CircleDrawer {
2646
+ getSidesCount() {
2647
+ return 12;
2648
+ }
2649
+
2650
+ draw(context, particle, radius) {
2651
+ context.arc(0, 0, radius, 0, Math.PI * 2, false);
2652
+ }
2653
+
2654
+ }
2655
+ ;// CONCATENATED MODULE: ./dist/browser/ShapeDrawers/PolygonDrawerBase.js
2656
+ class PolygonDrawerBase {
2657
+ getSidesCount(particle) {
2658
+ var _a, _b;
2659
+
2660
+ const polygon = particle.shapeData;
2661
+ return (_b = (_a = polygon === null || polygon === void 0 ? void 0 : polygon.sides) !== null && _a !== void 0 ? _a : polygon === null || polygon === void 0 ? void 0 : polygon.nb_sides) !== null && _b !== void 0 ? _b : 5;
2662
+ }
2663
+
2664
+ draw(context, particle, radius) {
2665
+ const start = this.getCenter(particle, radius);
2666
+ const side = this.getSidesData(particle, radius);
2667
+ const sideCount = side.count.numerator * side.count.denominator;
2668
+ const decimalSides = side.count.numerator / side.count.denominator;
2669
+ const interiorAngleDegrees = 180 * (decimalSides - 2) / decimalSides;
2670
+ const interiorAngle = Math.PI - Math.PI * interiorAngleDegrees / 180;
2671
+
2672
+ if (!context) {
2673
+ return;
2674
+ }
2675
+
2676
+ context.beginPath();
2677
+ context.translate(start.x, start.y);
2678
+ context.moveTo(0, 0);
2679
+
2680
+ for (let i = 0; i < sideCount; i++) {
2681
+ context.lineTo(side.length, 0);
2682
+ context.translate(side.length, 0);
2683
+ context.rotate(interiorAngle);
2684
+ }
2685
+ }
2686
+
2687
+ }
2688
+ ;// CONCATENATED MODULE: ./dist/browser/ShapeDrawers/TriangleDrawer.js
2689
+
2690
+ class TriangleDrawer extends PolygonDrawerBase {
2691
+ getSidesCount() {
2692
+ return 3;
2693
+ }
2694
+
2695
+ getSidesData(particle, radius) {
2696
+ return {
2697
+ count: {
2698
+ denominator: 2,
2699
+ numerator: 3
2700
+ },
2701
+ length: radius * 2
2702
+ };
2703
+ }
2704
+
2705
+ getCenter(particle, radius) {
2706
+ return {
2707
+ x: -radius,
2708
+ y: radius / 1.66
2709
+ };
2710
+ }
2711
+
2712
+ }
2713
+ ;// CONCATENATED MODULE: ./dist/browser/ShapeDrawers/StarDrawer.js
2714
+ class StarDrawer {
2715
+ getSidesCount(particle) {
2716
+ var _a, _b;
2717
+
2718
+ const star = particle.shapeData;
2719
+ return (_b = (_a = star === null || star === void 0 ? void 0 : star.sides) !== null && _a !== void 0 ? _a : star === null || star === void 0 ? void 0 : star.nb_sides) !== null && _b !== void 0 ? _b : 5;
2720
+ }
2721
+
2722
+ draw(context, particle, radius) {
2723
+ var _a;
2724
+
2725
+ const star = particle.shapeData;
2726
+ const sides = this.getSidesCount(particle);
2727
+ const inset = (_a = star === null || star === void 0 ? void 0 : star.inset) !== null && _a !== void 0 ? _a : 2;
2728
+ context.moveTo(0, 0 - radius);
2729
+
2730
+ for (let i = 0; i < sides; i++) {
2731
+ context.rotate(Math.PI / sides);
2732
+ context.lineTo(0, 0 - radius * inset);
2733
+ context.rotate(Math.PI / sides);
2734
+ context.lineTo(0, 0 - radius);
2735
+ }
2736
+ }
2737
+
2738
+ }
2739
+ ;// CONCATENATED MODULE: ./dist/browser/ShapeDrawers/PolygonDrawer.js
2740
+
2741
+ class PolygonDrawer extends PolygonDrawerBase {
2742
+ getSidesData(particle, radius) {
2743
+ var _a, _b;
2744
+
2745
+ const polygon = particle.shapeData;
2746
+ const sides = (_b = (_a = polygon === null || polygon === void 0 ? void 0 : polygon.sides) !== null && _a !== void 0 ? _a : polygon === null || polygon === void 0 ? void 0 : polygon.nb_sides) !== null && _b !== void 0 ? _b : 5;
2747
+ return {
2748
+ count: {
2749
+ denominator: 1,
2750
+ numerator: sides
2751
+ },
2752
+ length: radius * 2.66 / (sides / 3)
2753
+ };
2754
+ }
2755
+
2756
+ getCenter(particle, radius) {
2757
+ const sides = this.getSidesCount(particle);
2758
+ return {
2759
+ x: -radius / (sides / 3.5),
2760
+ y: -radius / (2.66 / 3.5)
2761
+ };
2762
+ }
2763
+
2764
+ }
2765
+ ;// CONCATENATED MODULE: ./dist/browser/Core/Canvas.js
2766
+
2767
+ class Canvas {
2768
+ constructor(container) {
2769
+ this.container = container;
2770
+ this.size = {
2771
+ height: 0,
2772
+ width: 0
2773
+ };
2774
+ this.context = null;
2775
+ this.generatedCanvas = false;
2776
+ }
2777
+
2778
+ init() {
2779
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
2780
+
2781
+ this.resize();
2782
+ const options = this.container.actualOptions;
2783
+ const element = this.element;
2784
+
2785
+ if (element) {
2786
+ if (options.fullScreen.enable) {
2787
+ this.originalStyle = Utils.deepExtend({}, element.style);
2788
+ element.style.position = "fixed";
2789
+ element.style.zIndex = options.fullScreen.zIndex.toString(10);
2790
+ element.style.top = "0";
2791
+ element.style.left = "0";
2792
+ element.style.width = "100%";
2793
+ element.style.height = "100%";
2794
+ } else {
2795
+ element.style.position = (_b = (_a = this.originalStyle) === null || _a === void 0 ? void 0 : _a.position) !== null && _b !== void 0 ? _b : "";
2796
+ element.style.zIndex = (_d = (_c = this.originalStyle) === null || _c === void 0 ? void 0 : _c.zIndex) !== null && _d !== void 0 ? _d : "";
2797
+ element.style.top = (_f = (_e = this.originalStyle) === null || _e === void 0 ? void 0 : _e.top) !== null && _f !== void 0 ? _f : "";
2798
+ element.style.left = (_h = (_g = this.originalStyle) === null || _g === void 0 ? void 0 : _g.left) !== null && _h !== void 0 ? _h : "";
2799
+ element.style.width = (_k = (_j = this.originalStyle) === null || _j === void 0 ? void 0 : _j.width) !== null && _k !== void 0 ? _k : "";
2800
+ element.style.height = (_m = (_l = this.originalStyle) === null || _l === void 0 ? void 0 : _l.height) !== null && _m !== void 0 ? _m : "";
2801
+ }
2802
+ }
2803
+
2804
+ const cover = options.backgroundMask.cover;
2805
+ const color = cover.color;
2806
+ const trail = options.particles.move.trail;
2807
+ const coverRgb = ColorUtils.colorToRgb(color);
2808
+ this.coverColor = coverRgb !== undefined ? {
2809
+ r: coverRgb.r,
2810
+ g: coverRgb.g,
2811
+ b: coverRgb.b,
2812
+ a: cover.opacity
2813
+ } : undefined;
2814
+ this.trailFillColor = ColorUtils.colorToRgb(trail.fillColor);
2815
+ this.initBackground();
2816
+ this.paint();
2817
+ }
2818
+
2819
+ loadCanvas(canvas, generatedCanvas) {
2820
+ var _a;
2821
+
2822
+ if (!canvas.className) {
2823
+ canvas.className = Constants.canvasClass;
2824
+ }
2825
+
2826
+ if (this.generatedCanvas) {
2827
+ (_a = this.element) === null || _a === void 0 ? void 0 : _a.remove();
2828
+ }
2829
+
2830
+ this.generatedCanvas = generatedCanvas !== null && generatedCanvas !== void 0 ? generatedCanvas : this.generatedCanvas;
2831
+ this.element = canvas;
2832
+ this.originalStyle = Utils.deepExtend({}, this.element.style);
2833
+ this.size.height = canvas.offsetHeight;
2834
+ this.size.width = canvas.offsetWidth;
2835
+ this.context = this.element.getContext("2d");
2836
+ this.container.retina.init();
2837
+ this.initBackground();
2838
+ }
2839
+
2840
+ destroy() {
2841
+ var _a;
2842
+
2843
+ if (this.generatedCanvas) {
2844
+ (_a = this.element) === null || _a === void 0 ? void 0 : _a.remove();
2845
+ }
2846
+
2847
+ if (this.context) {
2848
+ CanvasUtils.clear(this.context, this.size);
2849
+ }
2850
+ }
2851
+
2852
+ paint() {
2853
+ const options = this.container.actualOptions;
2854
+
2855
+ if (!this.context) {
2856
+ return;
2857
+ }
2858
+
2859
+ if (options.backgroundMask.enable && options.backgroundMask.cover && this.coverColor) {
2860
+ CanvasUtils.clear(this.context, this.size);
2861
+ this.paintBase(ColorUtils.getStyleFromRgb(this.coverColor, this.coverColor.a));
2862
+ } else {
2863
+ this.paintBase();
2864
+ }
2865
+ }
2866
+
2867
+ clear() {
2868
+ const options = this.container.actualOptions;
2869
+ const trail = options.particles.move.trail;
2870
+
2871
+ if (options.backgroundMask.enable) {
2872
+ this.paint();
2873
+ } else if (trail.enable && trail.length > 0 && this.trailFillColor) {
2874
+ this.paintBase(ColorUtils.getStyleFromRgb(this.trailFillColor, 1 / trail.length));
2875
+ } else if (this.context) {
2876
+ CanvasUtils.clear(this.context, this.size);
2877
+ }
2878
+ }
2879
+
2880
+ windowResize() {
2881
+ if (!this.element) {
2882
+ return;
2883
+ }
2884
+
2885
+ const container = this.container;
2886
+ container.canvas.resize();
2887
+ container.actualOptions.setResponsive(this.size.width, container.retina.pixelRatio, container.options);
2888
+ container.particles.setDensity();
2889
+
2890
+ for (const [, plugin] of container.plugins) {
2891
+ if (plugin.resize !== undefined) {
2892
+ plugin.resize();
2893
+ }
2894
+ }
2895
+ }
2896
+
2897
+ resize() {
2898
+ if (!this.element) {
2899
+ return;
2900
+ }
2901
+
2902
+ const container = this.container;
2903
+ const pxRatio = container.retina.pixelRatio;
2904
+ const size = container.canvas.size;
2905
+ const oldSize = {
2906
+ width: size.width,
2907
+ height: size.height
2908
+ };
2909
+ size.width = this.element.offsetWidth * pxRatio;
2910
+ size.height = this.element.offsetHeight * pxRatio;
2911
+ this.element.width = size.width;
2912
+ this.element.height = size.height;
2913
+ this.resizeFactor = {
2914
+ width: size.width / oldSize.width,
2915
+ height: size.height / oldSize.height
2916
+ };
2917
+ }
2918
+
2919
+ drawConnectLine(p1, p2) {
2920
+ var _a;
2921
+
2922
+ const lineStyle = this.lineStyle(p1, p2);
2923
+
2924
+ if (!lineStyle) {
2925
+ return;
2926
+ }
2927
+
2928
+ const ctx = this.context;
2929
+
2930
+ if (!ctx) {
2931
+ return;
2932
+ }
2933
+
2934
+ const pos1 = p1.getPosition();
2935
+ const pos2 = p2.getPosition();
2936
+ CanvasUtils.drawConnectLine(ctx, (_a = p1.linksWidth) !== null && _a !== void 0 ? _a : this.container.retina.linksWidth, lineStyle, pos1, pos2);
2937
+ }
2938
+
2939
+ drawGrabLine(particle, lineColor, opacity, mousePos) {
2940
+ var _a;
2941
+
2942
+ const container = this.container;
2943
+ const ctx = container.canvas.context;
2944
+
2945
+ if (!ctx) {
2946
+ return;
2947
+ }
2948
+
2949
+ const beginPos = particle.getPosition();
2950
+ CanvasUtils.drawGrabLine(ctx, (_a = particle.linksWidth) !== null && _a !== void 0 ? _a : container.retina.linksWidth, beginPos, mousePos, lineColor, opacity);
2951
+ }
2952
+
2953
+ drawParticleShadow(particle, mousePos) {
2954
+ if (!this.context) {
2955
+ return;
2956
+ }
2957
+
2958
+ CanvasUtils.drawParticleShadow(this.container, this.context, particle, mousePos);
2959
+ }
2960
+
2961
+ drawLinkTriangle(p1, link1, link2) {
2962
+ var _a;
2963
+
2964
+ const container = this.container;
2965
+ const options = container.actualOptions;
2966
+ const p2 = link1.destination;
2967
+ const p3 = link2.destination;
2968
+ const triangleOptions = p1.options.links.triangles;
2969
+ const opacityTriangle = (_a = triangleOptions.opacity) !== null && _a !== void 0 ? _a : (link1.opacity + link2.opacity) / 2;
2970
+
2971
+ if (opacityTriangle <= 0) {
2972
+ return;
2973
+ }
2974
+
2975
+ const pos1 = p1.getPosition();
2976
+ const pos2 = p2.getPosition();
2977
+ const pos3 = p3.getPosition();
2978
+ const ctx = this.context;
2979
+
2980
+ if (!ctx) {
2981
+ return;
2982
+ }
2983
+
2984
+ if (NumberUtils.getDistance(pos1, pos2) > container.retina.linksDistance || NumberUtils.getDistance(pos3, pos2) > container.retina.linksDistance || NumberUtils.getDistance(pos3, pos1) > container.retina.linksDistance) {
2985
+ return;
2986
+ }
2987
+
2988
+ let colorTriangle = ColorUtils.colorToRgb(triangleOptions.color);
2989
+
2990
+ if (!colorTriangle) {
2991
+ const linksOptions = p1.options.links;
2992
+ const linkColor = linksOptions.id !== undefined ? container.particles.linksColors.get(linksOptions.id) : container.particles.linksColor;
2993
+ colorTriangle = ColorUtils.getLinkColor(p1, p2, linkColor);
2994
+ }
2995
+
2996
+ if (!colorTriangle) {
2997
+ return;
2998
+ }
2999
+
3000
+ CanvasUtils.drawLinkTriangle(ctx, pos1, pos2, pos3, options.backgroundMask.enable, options.backgroundMask.composite, colorTriangle, opacityTriangle);
3001
+ }
3002
+
3003
+ drawLinkLine(p1, link) {
3004
+ var _a, _b;
3005
+
3006
+ const container = this.container;
3007
+ const options = container.actualOptions;
3008
+ const p2 = link.destination;
3009
+ let opacity = link.opacity;
3010
+ const pos1 = p1.getPosition();
3011
+ const pos2 = p2.getPosition();
3012
+ const ctx = this.context;
3013
+
3014
+ if (!ctx) {
3015
+ return;
3016
+ }
3017
+
3018
+ let colorLine;
3019
+ const twinkle = p1.options.twinkle.lines;
3020
+
3021
+ if (twinkle.enable) {
3022
+ const twinkleFreq = twinkle.frequency;
3023
+ const twinkleRgb = ColorUtils.colorToRgb(twinkle.color);
3024
+ const twinkling = Math.random() < twinkleFreq;
3025
+
3026
+ if (twinkling && twinkleRgb !== undefined) {
3027
+ colorLine = twinkleRgb;
3028
+ opacity = twinkle.opacity;
3029
+ }
3030
+ }
3031
+
3032
+ if (!colorLine) {
3033
+ const linksOptions = p1.options.links;
3034
+ const linkColor = linksOptions.id !== undefined ? container.particles.linksColors.get(linksOptions.id) : container.particles.linksColor;
3035
+ colorLine = ColorUtils.getLinkColor(p1, p2, linkColor);
3036
+ }
3037
+
3038
+ if (!colorLine) {
3039
+ return;
3040
+ }
3041
+
3042
+ const width = (_a = p1.linksWidth) !== null && _a !== void 0 ? _a : container.retina.linksWidth;
3043
+ const maxDistance = (_b = p1.linksDistance) !== null && _b !== void 0 ? _b : container.retina.linksDistance;
3044
+ CanvasUtils.drawLinkLine(ctx, width, pos1, pos2, maxDistance, container.canvas.size, p1.options.links.warp, options.backgroundMask.enable, options.backgroundMask.composite, colorLine, opacity, p1.options.links.shadow);
3045
+ }
3046
+
3047
+ drawParticle(particle, delta) {
3048
+ var _a, _b, _c, _d;
3049
+
3050
+ if (((_a = particle.image) === null || _a === void 0 ? void 0 : _a.loaded) === false || particle.spawning || particle.destroyed) {
3051
+ return;
3052
+ }
3053
+
3054
+ const pfColor = particle.getFillColor();
3055
+ const psColor = (_b = particle.getStrokeColor()) !== null && _b !== void 0 ? _b : pfColor;
3056
+
3057
+ if (!pfColor && !psColor) {
3058
+ return;
3059
+ }
3060
+
3061
+ const options = this.container.actualOptions;
3062
+ const pOptions = particle.options;
3063
+ const twinkle = pOptions.twinkle.particles;
3064
+ const twinkleFreq = twinkle.frequency;
3065
+ const twinkleRgb = ColorUtils.colorToRgb(twinkle.color);
3066
+ const twinkling = twinkle.enable && Math.random() < twinkleFreq;
3067
+ const radius = particle.getRadius();
3068
+ const opacity = twinkling ? twinkle.opacity : (_c = particle.bubble.opacity) !== null && _c !== void 0 ? _c : particle.opacity.value;
3069
+ const infectionStage = particle.infecter.infectionStage;
3070
+ const infection = options.infection;
3071
+ const infectionStages = infection.stages;
3072
+ const infectionColor = infectionStage !== undefined ? infectionStages[infectionStage].color : undefined;
3073
+ const infectionRgb = ColorUtils.colorToRgb(infectionColor);
3074
+ const fColor = twinkling && twinkleRgb !== undefined ? twinkleRgb : infectionRgb !== null && infectionRgb !== void 0 ? infectionRgb : pfColor ? ColorUtils.hslToRgb(pfColor) : undefined;
3075
+ const sColor = twinkling && twinkleRgb !== undefined ? twinkleRgb : infectionRgb !== null && infectionRgb !== void 0 ? infectionRgb : psColor ? ColorUtils.hslToRgb(psColor) : undefined;
3076
+ const fillColorValue = fColor !== undefined ? ColorUtils.getStyleFromRgb(fColor, opacity) : undefined;
3077
+
3078
+ if (!this.context || !fillColorValue && !sColor) {
3079
+ return;
3080
+ }
3081
+
3082
+ const strokeColorValue = sColor !== undefined ? ColorUtils.getStyleFromRgb(sColor, (_d = particle.stroke.opacity) !== null && _d !== void 0 ? _d : opacity) : fillColorValue;
3083
+ this.drawParticleLinks(particle);
3084
+
3085
+ if (radius > 0) {
3086
+ CanvasUtils.drawParticle(this.container, this.context, particle, delta, fillColorValue, strokeColorValue, options.backgroundMask.enable, options.backgroundMask.composite, radius, opacity, particle.options.shadow);
3087
+ }
3088
+ }
3089
+
3090
+ drawParticleLinks(particle) {
3091
+ if (!this.context) {
3092
+ return;
3093
+ }
3094
+
3095
+ const container = this.container;
3096
+ const particles = container.particles;
3097
+ const pOptions = particle.options;
3098
+
3099
+ if (particle.links.length > 0) {
3100
+ this.context.save();
3101
+ const p1Links = particle.links.filter(l => {
3102
+ const linkFreq = container.particles.getLinkFrequency(particle, l.destination);
3103
+ return linkFreq <= pOptions.links.frequency;
3104
+ });
3105
+
3106
+ for (const link of p1Links) {
3107
+ const p2 = link.destination;
3108
+
3109
+ if (pOptions.links.triangles.enable) {
3110
+ const links = p1Links.map(l => l.destination);
3111
+ const vertices = p2.links.filter(t => {
3112
+ const linkFreq = container.particles.getLinkFrequency(p2, t.destination);
3113
+ return linkFreq <= p2.options.links.frequency && links.indexOf(t.destination) >= 0;
3114
+ });
3115
+
3116
+ if (vertices.length) {
3117
+ for (const vertex of vertices) {
3118
+ const p3 = vertex.destination;
3119
+ const triangleFreq = particles.getTriangleFrequency(particle, p2, p3);
3120
+
3121
+ if (triangleFreq > pOptions.links.triangles.frequency) {
3122
+ continue;
3123
+ }
3124
+
3125
+ this.drawLinkTriangle(particle, link, vertex);
3126
+ }
3127
+ }
3128
+ }
3129
+
3130
+ if (link.opacity > 0 && container.retina.linksWidth > 0) {
3131
+ this.drawLinkLine(particle, link);
3132
+ }
3133
+ }
3134
+
3135
+ this.context.restore();
3136
+ }
3137
+ }
3138
+
3139
+ drawPlugin(plugin, delta) {
3140
+ if (!this.context) {
3141
+ return;
3142
+ }
3143
+
3144
+ CanvasUtils.drawPlugin(this.context, plugin, delta);
3145
+ }
3146
+
3147
+ drawLight(mousePos) {
3148
+ if (!this.context) {
3149
+ return;
3150
+ }
3151
+
3152
+ CanvasUtils.drawLight(this.container, this.context, mousePos);
3153
+ }
3154
+
3155
+ paintBase(baseColor) {
3156
+ if (!this.context) {
3157
+ return;
3158
+ }
3159
+
3160
+ CanvasUtils.paintBase(this.context, this.size, baseColor);
3161
+ }
3162
+
3163
+ lineStyle(p1, p2) {
3164
+ const options = this.container.actualOptions;
3165
+ const connectOptions = options.interactivity.modes.connect;
3166
+
3167
+ if (this.context) {
3168
+ return CanvasUtils.gradient(this.context, p1, p2, connectOptions.links.opacity);
3169
+ }
3170
+ }
3171
+
3172
+ initBackground() {
3173
+ const options = this.container.actualOptions;
3174
+ const background = options.background;
3175
+ const element = this.element;
3176
+
3177
+ if (!element) {
3178
+ return;
3179
+ }
3180
+
3181
+ const elementStyle = element.style;
3182
+
3183
+ if (background.color) {
3184
+ const color = ColorUtils.colorToRgb(background.color);
3185
+
3186
+ if (color) {
3187
+ elementStyle.backgroundColor = ColorUtils.getStyleFromRgb(color, background.opacity);
3188
+ }
3189
+ }
3190
+
3191
+ if (background.image) {
3192
+ elementStyle.backgroundImage = background.image;
3193
+ }
3194
+
3195
+ if (background.position) {
3196
+ elementStyle.backgroundPosition = background.position;
3197
+ }
3198
+
3199
+ if (background.repeat) {
3200
+ elementStyle.backgroundRepeat = background.repeat;
3201
+ }
3202
+
3203
+ if (background.size) {
3204
+ elementStyle.backgroundSize = background.size;
3205
+ }
3206
+ }
3207
+
3208
+ }
3209
+ ;// CONCATENATED MODULE: ./dist/browser/Core/Particle/Updater.js
3210
+
3211
+
3212
+
3213
+
3214
+ function bounceHorizontal(data) {
3215
+ if (data.outMode === OutMode.bounce || data.outMode === OutMode.bounceHorizontal || data.outMode === "bounceHorizontal") {
3216
+ const velocity = data.particle.velocity.horizontal;
3217
+ let bounced = false;
3218
+
3219
+ if (data.direction === OutModeDirection.right && data.bounds.right >= data.canvasSize.width && velocity > 0 || data.direction === OutModeDirection.left && data.bounds.left <= 0 && velocity < 0) {
3220
+ const newVelocity = NumberUtils.getValue(data.particle.options.bounce.horizontal);
3221
+ data.particle.velocity.horizontal *= -newVelocity;
3222
+ bounced = true;
3223
+ }
3224
+
3225
+ if (bounced) {
3226
+ const minPos = data.offset.x + data.size;
3227
+
3228
+ if (data.bounds.right >= data.canvasSize.width) {
3229
+ data.particle.position.x = data.canvasSize.width - minPos;
3230
+ } else if (data.bounds.left <= 0) {
3231
+ data.particle.position.x = minPos;
3232
+ }
3233
+ }
3234
+ }
3235
+ }
3236
+
3237
+ function bounceVertical(data) {
3238
+ if (data.outMode === OutMode.bounce || data.outMode === OutMode.bounceVertical || data.outMode === "bounceVertical") {
3239
+ const velocity = data.particle.velocity.vertical;
3240
+ let bounced = false;
3241
+
3242
+ if (data.direction === OutModeDirection.bottom && data.bounds.bottom >= data.canvasSize.height && velocity > 0 || data.direction === OutModeDirection.top && data.bounds.top <= 0 && velocity < 0) {
3243
+ const newVelocity = NumberUtils.getValue(data.particle.options.bounce.vertical);
3244
+ data.particle.velocity.vertical *= -newVelocity;
3245
+ bounced = true;
3246
+ }
3247
+
3248
+ if (bounced) {
3249
+ const minPos = data.offset.y + data.size;
3250
+
3251
+ if (data.bounds.bottom >= data.canvasSize.height) {
3252
+ data.particle.position.y = data.canvasSize.height - minPos;
3253
+ } else if (data.bounds.top <= 0) {
3254
+ data.particle.position.y = minPos;
3255
+ }
3256
+ }
3257
+ }
3258
+ }
3259
+
3260
+ function checkDestroy(particle, destroy, value, minValue, maxValue) {
3261
+ switch (destroy) {
3262
+ case DestroyType.max:
3263
+ if (value >= maxValue) {
3264
+ particle.destroy();
3265
+ }
3266
+
3267
+ break;
3268
+
3269
+ case DestroyType.min:
3270
+ if (value <= minValue) {
3271
+ particle.destroy();
3272
+ }
3273
+
3274
+ break;
3275
+ }
3276
+ }
3277
+
3278
+ class Updater {
3279
+ constructor(container, particle) {
3280
+ this.container = container;
3281
+ this.particle = particle;
3282
+ }
3283
+
3284
+ update(delta) {
3285
+ if (this.particle.destroyed) {
3286
+ return;
3287
+ }
3288
+
3289
+ this.updateLife(delta);
3290
+
3291
+ if (this.particle.destroyed || this.particle.spawning) {
3292
+ return;
3293
+ }
3294
+
3295
+ this.updateOpacity(delta);
3296
+ this.updateSize(delta);
3297
+ this.updateAngle(delta);
3298
+ this.updateColor(delta);
3299
+ this.updateStrokeColor(delta);
3300
+ this.updateOutModes(delta);
3301
+ }
3302
+
3303
+ updateLife(delta) {
3304
+ const particle = this.particle;
3305
+ let justSpawned = false;
3306
+
3307
+ if (particle.spawning) {
3308
+ particle.lifeDelayTime += delta.value;
3309
+
3310
+ if (particle.lifeDelayTime >= particle.lifeDelay) {
3311
+ justSpawned = true;
3312
+ particle.spawning = false;
3313
+ particle.lifeDelayTime = 0;
3314
+ particle.lifeTime = 0;
3315
+ }
3316
+ }
3317
+
3318
+ if (particle.lifeDuration === -1) {
3319
+ return;
3320
+ }
3321
+
3322
+ if (!particle.spawning) {
3323
+ if (justSpawned) {
3324
+ particle.lifeTime = 0;
3325
+ } else {
3326
+ particle.lifeTime += delta.value;
3327
+ }
3328
+
3329
+ if (particle.lifeTime >= particle.lifeDuration) {
3330
+ particle.lifeTime = 0;
3331
+
3332
+ if (particle.livesRemaining > 0) {
3333
+ particle.livesRemaining--;
3334
+ }
3335
+
3336
+ if (particle.livesRemaining === 0) {
3337
+ particle.destroy();
3338
+ return;
3339
+ }
3340
+
3341
+ const canvasSize = this.container.canvas.size;
3342
+ particle.position.x = NumberUtils.randomInRange(NumberUtils.setRangeValue(0, canvasSize.width));
3343
+ particle.position.y = NumberUtils.randomInRange(NumberUtils.setRangeValue(0, canvasSize.height));
3344
+ particle.spawning = true;
3345
+ particle.lifeDelayTime = 0;
3346
+ particle.lifeTime = 0;
3347
+ particle.reset();
3348
+ const lifeOptions = particle.options.life;
3349
+ particle.lifeDelay = NumberUtils.getValue(lifeOptions.delay) * 1000;
3350
+ particle.lifeDuration = NumberUtils.getValue(lifeOptions.duration) * 1000;
3351
+ }
3352
+ }
3353
+ }
3354
+
3355
+ updateOpacity(delta) {
3356
+ var _a, _b;
3357
+
3358
+ const particle = this.particle;
3359
+ const opacityAnim = particle.options.opacity.anim;
3360
+ const minValue = opacityAnim.minimumValue;
3361
+ const maxValue = particle.options.opacity.value;
3362
+
3363
+ if (!particle.destroyed && opacityAnim.enable && (opacityAnim.count <= 0 || particle.loops.size < opacityAnim.count)) {
3364
+ switch (particle.opacity.status) {
3365
+ case AnimationStatus.increasing:
3366
+ if (particle.opacity.value >= maxValue) {
3367
+ particle.opacity.status = AnimationStatus.decreasing;
3368
+ particle.loops.opacity++;
3369
+ } else {
3370
+ particle.opacity.value += ((_a = particle.opacity.velocity) !== null && _a !== void 0 ? _a : 0) * delta.factor;
3371
+ }
3372
+
3373
+ break;
3374
+
3375
+ case AnimationStatus.decreasing:
3376
+ if (particle.opacity.value <= minValue) {
3377
+ particle.opacity.status = AnimationStatus.increasing;
3378
+ particle.loops.opacity++;
3379
+ } else {
3380
+ particle.opacity.value -= ((_b = particle.opacity.velocity) !== null && _b !== void 0 ? _b : 0) * delta.factor;
3381
+ }
3382
+
3383
+ break;
3384
+ }
3385
+
3386
+ checkDestroy(particle, opacityAnim.destroy, particle.opacity.value, minValue, maxValue);
3387
+
3388
+ if (!particle.destroyed) {
3389
+ particle.opacity.value = NumberUtils.clamp(particle.opacity.value, minValue, maxValue);
3390
+ }
3391
+ }
3392
+ }
3393
+
3394
+ updateSize(delta) {
3395
+ var _a, _b;
3396
+
3397
+ const container = this.container;
3398
+ const particle = this.particle;
3399
+ const sizeOpt = particle.options.size;
3400
+ const sizeAnim = sizeOpt.animation;
3401
+ const sizeVelocity = ((_a = particle.size.velocity) !== null && _a !== void 0 ? _a : 0) * delta.factor;
3402
+ const maxValue = (_b = particle.sizeValue) !== null && _b !== void 0 ? _b : container.retina.sizeValue;
3403
+ const minValue = sizeAnim.minimumValue * container.retina.pixelRatio;
3404
+
3405
+ if (!particle.destroyed && sizeAnim.enable && (sizeAnim.count <= 0 || particle.loops.size < sizeAnim.count)) {
3406
+ switch (particle.size.status) {
3407
+ case AnimationStatus.increasing:
3408
+ if (particle.size.value >= maxValue) {
3409
+ particle.size.status = AnimationStatus.decreasing;
3410
+ particle.loops.size++;
3411
+ } else {
3412
+ particle.size.value += sizeVelocity;
3413
+ }
3414
+
3415
+ break;
3416
+
3417
+ case AnimationStatus.decreasing:
3418
+ if (particle.size.value <= minValue) {
3419
+ particle.size.status = AnimationStatus.increasing;
3420
+ particle.loops.size++;
3421
+ } else {
3422
+ particle.size.value -= sizeVelocity;
3423
+ }
3424
+
3425
+ }
3426
+
3427
+ checkDestroy(particle, sizeAnim.destroy, particle.size.value, minValue, maxValue);
3428
+
3429
+ if (!particle.destroyed) {
3430
+ particle.size.value = NumberUtils.clamp(particle.size.value, minValue, maxValue);
3431
+ }
3432
+ }
3433
+ }
3434
+
3435
+ updateAngle(delta) {
3436
+ var _a;
3437
+
3438
+ const particle = this.particle;
3439
+ const rotate = particle.options.rotate;
3440
+ const rotateAnimation = rotate.animation;
3441
+ const speed = ((_a = particle.rotate.velocity) !== null && _a !== void 0 ? _a : 0) * delta.factor;
3442
+ const max = 2 * Math.PI;
3443
+
3444
+ if (rotate.path) {
3445
+ particle.pathAngle = Math.atan2(particle.velocity.vertical, particle.velocity.horizontal);
3446
+ } else if (rotateAnimation.enable) {
3447
+ switch (particle.rotate.status) {
3448
+ case AnimationStatus.increasing:
3449
+ particle.rotate.value += speed;
3450
+
3451
+ if (particle.rotate.value > max) {
3452
+ particle.rotate.value -= max;
3453
+ }
3454
+
3455
+ break;
3456
+
3457
+ case AnimationStatus.decreasing:
3458
+ default:
3459
+ particle.rotate.value -= speed;
3460
+
3461
+ if (particle.rotate.value < 0) {
3462
+ particle.rotate.value += max;
3463
+ }
3464
+
3465
+ break;
3466
+ }
3467
+ }
3468
+ }
3469
+
3470
+ updateColor(delta) {
3471
+ var _a, _b, _c;
3472
+
3473
+ const particle = this.particle;
3474
+ const animationOptions = particle.options.color.animation;
3475
+
3476
+ if (((_a = particle.color) === null || _a === void 0 ? void 0 : _a.h) !== undefined) {
3477
+ this.updateColorValue(particle, delta, particle.color.h, animationOptions.h, 360, false);
3478
+ }
3479
+
3480
+ if (((_b = particle.color) === null || _b === void 0 ? void 0 : _b.s) !== undefined) {
3481
+ this.updateColorValue(particle, delta, particle.color.s, animationOptions.s, 100, true);
3482
+ }
3483
+
3484
+ if (((_c = particle.color) === null || _c === void 0 ? void 0 : _c.l) !== undefined) {
3485
+ this.updateColorValue(particle, delta, particle.color.l, animationOptions.l, 100, true);
3486
+ }
3487
+ }
3488
+
3489
+ updateStrokeColor(delta) {
3490
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
3491
+
3492
+ const particle = this.particle;
3493
+
3494
+ if (!particle.stroke.color) {
3495
+ return;
3496
+ }
3497
+
3498
+ const animationOptions = particle.stroke.color.animation;
3499
+ const valueAnimations = animationOptions;
3500
+
3501
+ if (valueAnimations.enable !== undefined) {
3502
+ const hue = (_b = (_a = particle.strokeColor) === null || _a === void 0 ? void 0 : _a.h) !== null && _b !== void 0 ? _b : (_c = particle.color) === null || _c === void 0 ? void 0 : _c.h;
3503
+
3504
+ if (hue) {
3505
+ this.updateColorValue(particle, delta, hue, valueAnimations, 360, false);
3506
+ }
3507
+ } else {
3508
+ const hslAnimations = animationOptions;
3509
+ const h = (_e = (_d = particle.strokeColor) === null || _d === void 0 ? void 0 : _d.h) !== null && _e !== void 0 ? _e : (_f = particle.color) === null || _f === void 0 ? void 0 : _f.h;
3510
+
3511
+ if (h) {
3512
+ this.updateColorValue(particle, delta, h, hslAnimations.h, 360, false);
3513
+ }
3514
+
3515
+ const s = (_h = (_g = particle.strokeColor) === null || _g === void 0 ? void 0 : _g.s) !== null && _h !== void 0 ? _h : (_j = particle.color) === null || _j === void 0 ? void 0 : _j.s;
3516
+
3517
+ if (s) {
3518
+ this.updateColorValue(particle, delta, s, hslAnimations.s, 100, true);
3519
+ }
3520
+
3521
+ const l = (_l = (_k = particle.strokeColor) === null || _k === void 0 ? void 0 : _k.l) !== null && _l !== void 0 ? _l : (_m = particle.color) === null || _m === void 0 ? void 0 : _m.l;
3522
+
3523
+ if (l) {
3524
+ this.updateColorValue(particle, delta, l, hslAnimations.l, 100, true);
3525
+ }
3526
+ }
3527
+ }
3528
+
3529
+ updateColorValue(particle, delta, value, valueAnimation, max, decrease) {
3530
+ var _a;
3531
+
3532
+ const colorValue = value;
3533
+
3534
+ if (!colorValue || !valueAnimation.enable) {
3535
+ return;
3536
+ }
3537
+
3538
+ const offset = NumberUtils.randomInRange(valueAnimation.offset);
3539
+ const velocity = ((_a = value.velocity) !== null && _a !== void 0 ? _a : 0) * delta.factor + offset * 3.6;
3540
+
3541
+ if (!decrease || colorValue.status === AnimationStatus.increasing) {
3542
+ colorValue.value += velocity;
3543
+
3544
+ if (decrease && colorValue.value > max) {
3545
+ colorValue.status = AnimationStatus.decreasing;
3546
+ colorValue.value -= colorValue.value % max;
3547
+ }
3548
+ } else {
3549
+ colorValue.value -= velocity;
3550
+
3551
+ if (colorValue.value < 0) {
3552
+ colorValue.status = AnimationStatus.increasing;
3553
+ colorValue.value += colorValue.value;
3554
+ }
3555
+ }
3556
+
3557
+ if (colorValue.value > max) {
3558
+ colorValue.value %= max;
3559
+ }
3560
+ }
3561
+
3562
+ updateOutModes(delta) {
3563
+ var _a, _b, _c, _d;
3564
+
3565
+ const outModes = this.particle.options.move.outModes;
3566
+ this.updateOutMode(delta, (_a = outModes.bottom) !== null && _a !== void 0 ? _a : outModes.default, OutModeDirection.bottom);
3567
+ this.updateOutMode(delta, (_b = outModes.left) !== null && _b !== void 0 ? _b : outModes.default, OutModeDirection.left);
3568
+ this.updateOutMode(delta, (_c = outModes.right) !== null && _c !== void 0 ? _c : outModes.default, OutModeDirection.right);
3569
+ this.updateOutMode(delta, (_d = outModes.top) !== null && _d !== void 0 ? _d : outModes.default, OutModeDirection.top);
3570
+ }
3571
+
3572
+ updateOutMode(delta, outMode, direction) {
3573
+ const container = this.container;
3574
+ const particle = this.particle;
3575
+
3576
+ switch (outMode) {
3577
+ case OutMode.bounce:
3578
+ case OutMode.bounceVertical:
3579
+ case OutMode.bounceHorizontal:
3580
+ case "bounceVertical":
3581
+ case "bounceHorizontal":
3582
+ this.updateBounce(delta, direction, outMode);
3583
+ break;
3584
+
3585
+ case OutMode.destroy:
3586
+ if (!Utils.isPointInside(particle.position, container.canvas.size, particle.getRadius(), direction)) {
3587
+ container.particles.remove(particle);
3588
+ }
3589
+
3590
+ break;
3591
+
3592
+ case OutMode.out:
3593
+ if (!Utils.isPointInside(particle.position, container.canvas.size, particle.getRadius(), direction)) {
3594
+ this.fixOutOfCanvasPosition(direction);
3595
+ }
3596
+
3597
+ break;
3598
+
3599
+ case OutMode.none:
3600
+ this.bounceNone(direction);
3601
+ break;
3602
+ }
3603
+ }
3604
+
3605
+ fixOutOfCanvasPosition(direction) {
3606
+ const container = this.container;
3607
+ const particle = this.particle;
3608
+ const wrap = particle.options.move.warp;
3609
+ const canvasSize = container.canvas.size;
3610
+ const newPos = {
3611
+ bottom: canvasSize.height + particle.getRadius() - particle.offset.y,
3612
+ left: -particle.getRadius() - particle.offset.x,
3613
+ right: canvasSize.width + particle.getRadius() + particle.offset.x,
3614
+ top: -particle.getRadius() - particle.offset.y
3615
+ };
3616
+ const sizeValue = particle.getRadius();
3617
+ const nextBounds = Utils.calculateBounds(particle.position, sizeValue);
3618
+
3619
+ if (direction === OutModeDirection.right && nextBounds.left > canvasSize.width - particle.offset.x) {
3620
+ particle.position.x = newPos.left;
3621
+
3622
+ if (!wrap) {
3623
+ particle.position.y = Math.random() * canvasSize.height;
3624
+ }
3625
+ } else if (direction === OutModeDirection.left && nextBounds.right < -particle.offset.x) {
3626
+ particle.position.x = newPos.right;
3627
+
3628
+ if (!wrap) {
3629
+ particle.position.y = Math.random() * canvasSize.height;
3630
+ }
3631
+ }
3632
+
3633
+ if (direction === OutModeDirection.bottom && nextBounds.top > canvasSize.height - particle.offset.y) {
3634
+ if (!wrap) {
3635
+ particle.position.x = Math.random() * canvasSize.width;
3636
+ }
3637
+
3638
+ particle.position.y = newPos.top;
3639
+ } else if (direction === OutModeDirection.top && nextBounds.bottom < -particle.offset.y) {
3640
+ if (!wrap) {
3641
+ particle.position.x = Math.random() * canvasSize.width;
3642
+ }
3643
+
3644
+ particle.position.y = newPos.bottom;
3645
+ }
3646
+ }
3647
+
3648
+ updateBounce(delta, direction, outMode) {
3649
+ const container = this.container;
3650
+ const particle = this.particle;
3651
+ let handled = false;
3652
+
3653
+ for (const [, plugin] of container.plugins) {
3654
+ if (plugin.particleBounce !== undefined) {
3655
+ handled = plugin.particleBounce(particle, delta, direction);
3656
+ }
3657
+
3658
+ if (handled) {
3659
+ break;
3660
+ }
3661
+ }
3662
+
3663
+ if (handled) {
3664
+ return;
3665
+ }
3666
+
3667
+ const pos = particle.getPosition(),
3668
+ offset = particle.offset,
3669
+ size = particle.getRadius(),
3670
+ bounds = Utils.calculateBounds(pos, size),
3671
+ canvasSize = container.canvas.size;
3672
+ bounceHorizontal({
3673
+ particle,
3674
+ outMode,
3675
+ direction,
3676
+ bounds,
3677
+ canvasSize,
3678
+ offset,
3679
+ size
3680
+ });
3681
+ bounceVertical({
3682
+ particle,
3683
+ outMode,
3684
+ direction,
3685
+ bounds,
3686
+ canvasSize,
3687
+ offset,
3688
+ size
3689
+ });
3690
+ }
3691
+
3692
+ bounceNone(direction) {
3693
+ const particle = this.particle;
3694
+
3695
+ if (particle.options.move.distance) {
3696
+ return;
3697
+ }
3698
+
3699
+ const gravityOptions = particle.options.move.gravity;
3700
+ const container = this.container;
3701
+
3702
+ if (!gravityOptions.enable) {
3703
+ if (!Utils.isPointInside(particle.position, container.canvas.size, particle.getRadius(), direction)) {
3704
+ container.particles.remove(particle);
3705
+ }
3706
+ } else {
3707
+ const position = particle.position;
3708
+
3709
+ if (gravityOptions.acceleration >= 0 && position.y > container.canvas.size.height && direction === OutModeDirection.bottom || gravityOptions.acceleration < 0 && position.y < 0 && direction === OutModeDirection.top) {
3710
+ container.particles.remove(particle);
3711
+ }
3712
+ }
3713
+ }
3714
+
3715
+ }
3716
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/OptionsColor.js
3717
+ class OptionsColor {
3718
+ constructor() {
3719
+ this.value = "#fff";
3720
+ }
3721
+
3722
+ static create(source, data) {
3723
+ const color = source !== null && source !== void 0 ? source : new OptionsColor();
3724
+
3725
+ if (data !== undefined) {
3726
+ color.load(typeof data === "string" ? {
3727
+ value: data
3728
+ } : data);
3729
+ }
3730
+
3731
+ return color;
3732
+ }
3733
+
3734
+ load(data) {
3735
+ if ((data === null || data === void 0 ? void 0 : data.value) === undefined) {
3736
+ return;
3737
+ }
3738
+
3739
+ this.value = data.value;
3740
+ }
3741
+
3742
+ }
3743
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Links/LinksShadow.js
3744
+
3745
+ class LinksShadow {
3746
+ constructor() {
3747
+ this.blur = 5;
3748
+ this.color = new OptionsColor();
3749
+ this.enable = false;
3750
+ this.color.value = "#00ff00";
3751
+ }
3752
+
3753
+ load(data) {
3754
+ if (data === undefined) {
3755
+ return;
3756
+ }
3757
+
3758
+ if (data.blur !== undefined) {
3759
+ this.blur = data.blur;
3760
+ }
3761
+
3762
+ this.color = OptionsColor.create(this.color, data.color);
3763
+
3764
+ if (data.enable !== undefined) {
3765
+ this.enable = data.enable;
3766
+ }
3767
+ }
3768
+
3769
+ }
3770
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Links/LinksTriangle.js
3771
+
3772
+ class LinksTriangle {
3773
+ constructor() {
3774
+ this.enable = false;
3775
+ this.frequency = 1;
3776
+ }
3777
+
3778
+ load(data) {
3779
+ if (data === undefined) {
3780
+ return;
3781
+ }
3782
+
3783
+ if (data.color !== undefined) {
3784
+ this.color = OptionsColor.create(this.color, data.color);
3785
+ }
3786
+
3787
+ if (data.enable !== undefined) {
3788
+ this.enable = data.enable;
3789
+ }
3790
+
3791
+ if (data.frequency !== undefined) {
3792
+ this.frequency = data.frequency;
3793
+ }
3794
+
3795
+ if (data.opacity !== undefined) {
3796
+ this.opacity = data.opacity;
3797
+ }
3798
+ }
3799
+
3800
+ }
3801
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Links/Links.js
3802
+
3803
+
3804
+
3805
+ class Links {
3806
+ constructor() {
3807
+ this.blink = false;
3808
+ this.color = new OptionsColor();
3809
+ this.consent = false;
3810
+ this.distance = 100;
3811
+ this.enable = false;
3812
+ this.frequency = 1;
3813
+ this.opacity = 1;
3814
+ this.shadow = new LinksShadow();
3815
+ this.triangles = new LinksTriangle();
3816
+ this.width = 1;
3817
+ this.warp = false;
3818
+ }
3819
+
3820
+ load(data) {
3821
+ if (data === undefined) {
3822
+ return;
3823
+ }
3824
+
3825
+ if (data.id !== undefined) {
3826
+ this.id = data.id;
3827
+ }
3828
+
3829
+ if (data.blink !== undefined) {
3830
+ this.blink = data.blink;
3831
+ }
3832
+
3833
+ this.color = OptionsColor.create(this.color, data.color);
3834
+
3835
+ if (data.consent !== undefined) {
3836
+ this.consent = data.consent;
3837
+ }
3838
+
3839
+ if (data.distance !== undefined) {
3840
+ this.distance = data.distance;
3841
+ }
3842
+
3843
+ if (data.enable !== undefined) {
3844
+ this.enable = data.enable;
3845
+ }
3846
+
3847
+ if (data.frequency !== undefined) {
3848
+ this.frequency = data.frequency;
3849
+ }
3850
+
3851
+ if (data.opacity !== undefined) {
3852
+ this.opacity = data.opacity;
3853
+ }
3854
+
3855
+ this.shadow.load(data.shadow);
3856
+ this.triangles.load(data.triangles);
3857
+
3858
+ if (data.width !== undefined) {
3859
+ this.width = data.width;
3860
+ }
3861
+
3862
+ if (data.warp !== undefined) {
3863
+ this.warp = data.warp;
3864
+ }
3865
+ }
3866
+
3867
+ }
3868
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Move/Attract.js
3869
+ class Attract {
3870
+ constructor() {
3871
+ this.enable = false;
3872
+ this.rotate = {
3873
+ x: 3000,
3874
+ y: 3000
3875
+ };
3876
+ }
3877
+
3878
+ get rotateX() {
3879
+ return this.rotate.x;
3880
+ }
3881
+
3882
+ set rotateX(value) {
3883
+ this.rotate.x = value;
3884
+ }
3885
+
3886
+ get rotateY() {
3887
+ return this.rotate.y;
3888
+ }
3889
+
3890
+ set rotateY(value) {
3891
+ this.rotate.y = value;
3892
+ }
3893
+
3894
+ load(data) {
3895
+ var _a, _b, _c, _d;
3896
+
3897
+ if (data === undefined) {
3898
+ return;
3899
+ }
3900
+
3901
+ if (data.enable !== undefined) {
3902
+ this.enable = data.enable;
3903
+ }
3904
+
3905
+ const rotateX = (_b = (_a = data.rotate) === null || _a === void 0 ? void 0 : _a.x) !== null && _b !== void 0 ? _b : data.rotateX;
3906
+
3907
+ if (rotateX !== undefined) {
3908
+ this.rotate.x = rotateX;
3909
+ }
3910
+
3911
+ const rotateY = (_d = (_c = data.rotate) === null || _c === void 0 ? void 0 : _c.y) !== null && _d !== void 0 ? _d : data.rotateY;
3912
+
3913
+ if (rotateY !== undefined) {
3914
+ this.rotate.y = rotateY;
3915
+ }
3916
+ }
3917
+
3918
+ }
3919
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Move/Trail.js
3920
+
3921
+ class Trail {
3922
+ constructor() {
3923
+ this.enable = false;
3924
+ this.length = 10;
3925
+ this.fillColor = new OptionsColor();
3926
+ this.fillColor.value = "#000000";
3927
+ }
3928
+
3929
+ load(data) {
3930
+ if (data === undefined) {
3931
+ return;
3932
+ }
3933
+
3934
+ if (data.enable !== undefined) {
3935
+ this.enable = data.enable;
3936
+ }
3937
+
3938
+ this.fillColor = OptionsColor.create(this.fillColor, data.fillColor);
3939
+
3940
+ if (data.length !== undefined) {
3941
+ this.length = data.length;
3942
+ }
3943
+ }
3944
+
3945
+ }
3946
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Random.js
3947
+ class Random {
3948
+ constructor() {
3949
+ this.enable = false;
3950
+ this.minimumValue = 0;
3951
+ }
3952
+
3953
+ load(data) {
3954
+ if (!data) {
3955
+ return;
3956
+ }
3957
+
3958
+ if (data.enable !== undefined) {
3959
+ this.enable = data.enable;
3960
+ }
3961
+
3962
+ if (data.minimumValue !== undefined) {
3963
+ this.minimumValue = data.minimumValue;
3964
+ }
3965
+ }
3966
+
3967
+ }
3968
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/ValueWithRandom.js
3969
+
3970
+ class ValueWithRandom {
3971
+ constructor() {
3972
+ this.random = new Random();
3973
+ this.value = 0;
3974
+ }
3975
+
3976
+ load(data) {
3977
+ if (!data) {
3978
+ return;
3979
+ }
3980
+
3981
+ if (typeof data.random === "boolean") {
3982
+ this.random.enable = data.random;
3983
+ } else {
3984
+ this.random.load(data.random);
3985
+ }
3986
+
3987
+ if (data.value !== undefined) {
3988
+ this.value = data.value;
3989
+ }
3990
+ }
3991
+
3992
+ }
3993
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Move/Path/PathDelay.js
3994
+
3995
+ class PathDelay extends ValueWithRandom {
3996
+ constructor() {
3997
+ super();
3998
+ }
3999
+
4000
+ }
4001
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Move/Path/Path.js
4002
+
4003
+ class Path {
4004
+ constructor() {
4005
+ this.clamp = true;
4006
+ this.delay = new PathDelay();
4007
+ this.enable = false;
4008
+ }
4009
+
4010
+ load(data) {
4011
+ if (data === undefined) {
4012
+ return;
4013
+ }
4014
+
4015
+ if (data.clamp !== undefined) {
4016
+ this.clamp = data.clamp;
4017
+ }
4018
+
4019
+ this.delay.load(data.delay);
4020
+
4021
+ if (data.enable !== undefined) {
4022
+ this.enable = data.enable;
4023
+ }
4024
+
4025
+ this.generator = data.generator;
4026
+ }
4027
+
4028
+ }
4029
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Move/MoveAngle.js
4030
+ class MoveAngle {
4031
+ constructor() {
4032
+ this.offset = 45;
4033
+ this.value = 90;
4034
+ }
4035
+
4036
+ load(data) {
4037
+ if (data === undefined) {
4038
+ return;
4039
+ }
4040
+
4041
+ if (data.offset !== undefined) {
4042
+ this.offset = data.offset;
4043
+ }
4044
+
4045
+ if (data.value !== undefined) {
4046
+ this.value = data.value;
4047
+ }
4048
+ }
4049
+
4050
+ }
4051
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Move/MoveGravity.js
4052
+ class MoveGravity {
4053
+ constructor() {
4054
+ this.acceleration = 9.81;
4055
+ this.enable = false;
4056
+ this.maxSpeed = 50;
4057
+ }
4058
+
4059
+ load(data) {
4060
+ if (!data) {
4061
+ return;
4062
+ }
4063
+
4064
+ if (data.acceleration !== undefined) {
4065
+ this.acceleration = data.acceleration;
4066
+ }
4067
+
4068
+ if (data.enable !== undefined) {
4069
+ this.enable = data.enable;
4070
+ }
4071
+
4072
+ if (data.maxSpeed !== undefined) {
4073
+ this.maxSpeed = data.maxSpeed;
4074
+ }
4075
+ }
4076
+
4077
+ }
4078
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Move/OutModes.js
4079
+
4080
+ class OutModes {
4081
+ constructor() {
4082
+ this.default = OutMode.out;
4083
+ }
4084
+
4085
+ load(data) {
4086
+ var _a, _b, _c, _d;
4087
+
4088
+ if (!data) {
4089
+ return;
4090
+ }
4091
+
4092
+ if (data.default !== undefined) {
4093
+ this.default = data.default;
4094
+ }
4095
+
4096
+ this.bottom = (_a = data.bottom) !== null && _a !== void 0 ? _a : data.default;
4097
+ this.left = (_b = data.left) !== null && _b !== void 0 ? _b : data.default;
4098
+ this.right = (_c = data.right) !== null && _c !== void 0 ? _c : data.default;
4099
+ this.top = (_d = data.top) !== null && _d !== void 0 ? _d : data.default;
4100
+ }
4101
+
4102
+ }
4103
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Move/Move.js
4104
+
4105
+
4106
+
4107
+
4108
+
4109
+
4110
+
4111
+ class Move {
4112
+ constructor() {
4113
+ this.angle = new MoveAngle();
4114
+ this.attract = new Attract();
4115
+ this.decay = 0;
4116
+ this.direction = MoveDirection.none;
4117
+ this.distance = 0;
4118
+ this.enable = false;
4119
+ this.gravity = new MoveGravity();
4120
+ this.path = new Path();
4121
+ this.outModes = new OutModes();
4122
+ this.random = false;
4123
+ this.size = false;
4124
+ this.speed = 2;
4125
+ this.straight = false;
4126
+ this.trail = new Trail();
4127
+ this.vibrate = false;
4128
+ this.warp = false;
4129
+ }
4130
+
4131
+ get collisions() {
4132
+ return false;
4133
+ }
4134
+
4135
+ set collisions(value) {}
4136
+
4137
+ get bounce() {
4138
+ return this.collisions;
4139
+ }
4140
+
4141
+ set bounce(value) {
4142
+ this.collisions = value;
4143
+ }
4144
+
4145
+ get out_mode() {
4146
+ return this.outMode;
4147
+ }
4148
+
4149
+ set out_mode(value) {
4150
+ this.outMode = value;
4151
+ }
4152
+
4153
+ get outMode() {
4154
+ return this.outModes.default;
4155
+ }
4156
+
4157
+ set outMode(value) {
4158
+ this.outModes.default = value;
4159
+ }
4160
+
4161
+ get noise() {
4162
+ return this.path;
4163
+ }
4164
+
4165
+ set noise(value) {
4166
+ this.path = value;
4167
+ }
4168
+
4169
+ load(data) {
4170
+ var _a, _b, _c;
4171
+
4172
+ if (data === undefined) {
4173
+ return;
4174
+ }
4175
+
4176
+ if (data.angle !== undefined) {
4177
+ if (typeof data.angle === "number") {
4178
+ this.angle.value = data.angle;
4179
+ } else {
4180
+ this.angle.load(data.angle);
4181
+ }
4182
+ }
4183
+
4184
+ this.attract.load(data.attract);
4185
+
4186
+ if (data.decay !== undefined) {
4187
+ this.decay = data.decay;
4188
+ }
4189
+
4190
+ if (data.direction !== undefined) {
4191
+ this.direction = data.direction;
4192
+ }
4193
+
4194
+ if (data.distance !== undefined) {
4195
+ this.distance = data.distance;
4196
+ }
4197
+
4198
+ if (data.enable !== undefined) {
4199
+ this.enable = data.enable;
4200
+ }
4201
+
4202
+ this.gravity.load(data.gravity);
4203
+ const outMode = (_a = data.outMode) !== null && _a !== void 0 ? _a : data.out_mode;
4204
+
4205
+ if (data.outModes !== undefined || outMode !== undefined) {
4206
+ if (typeof data.outModes === "string" || data.outModes === undefined && outMode !== undefined) {
4207
+ this.outModes.load({
4208
+ default: (_b = data.outModes) !== null && _b !== void 0 ? _b : outMode
4209
+ });
4210
+ } else {
4211
+ this.outModes.load(data.outModes);
4212
+ }
4213
+ }
4214
+
4215
+ this.path.load((_c = data.path) !== null && _c !== void 0 ? _c : data.noise);
4216
+
4217
+ if (data.random !== undefined) {
4218
+ this.random = data.random;
4219
+ }
4220
+
4221
+ if (data.size !== undefined) {
4222
+ this.size = data.size;
4223
+ }
4224
+
4225
+ if (data.speed !== undefined) {
4226
+ this.speed = data.speed;
4227
+ }
4228
+
4229
+ if (data.straight !== undefined) {
4230
+ this.straight = data.straight;
4231
+ }
4232
+
4233
+ this.trail.load(data.trail);
4234
+
4235
+ if (data.vibrate !== undefined) {
4236
+ this.vibrate = data.vibrate;
4237
+ }
4238
+
4239
+ if (data.warp !== undefined) {
4240
+ this.warp = data.warp;
4241
+ }
4242
+ }
4243
+
4244
+ }
4245
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Number/Density.js
4246
+ class Density {
4247
+ constructor() {
4248
+ this.enable = false;
4249
+ this.area = 800;
4250
+ this.factor = 1000;
4251
+ }
4252
+
4253
+ get value_area() {
4254
+ return this.area;
4255
+ }
4256
+
4257
+ set value_area(value) {
4258
+ this.area = value;
4259
+ }
4260
+
4261
+ load(data) {
4262
+ var _a;
4263
+
4264
+ if (data === undefined) {
4265
+ return;
4266
+ }
4267
+
4268
+ if (data.enable !== undefined) {
4269
+ this.enable = data.enable;
4270
+ }
4271
+
4272
+ const area = (_a = data.area) !== null && _a !== void 0 ? _a : data.value_area;
4273
+
4274
+ if (area !== undefined) {
4275
+ this.area = area;
4276
+ }
4277
+
4278
+ if (data.factor !== undefined) {
4279
+ this.factor = data.factor;
4280
+ }
4281
+ }
4282
+
4283
+ }
4284
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Number/ParticlesNumber.js
4285
+
4286
+ class ParticlesNumber {
4287
+ constructor() {
4288
+ this.density = new Density();
4289
+ this.limit = 0;
4290
+ this.value = 100;
4291
+ }
4292
+
4293
+ get max() {
4294
+ return this.limit;
4295
+ }
4296
+
4297
+ set max(value) {
4298
+ this.limit = value;
4299
+ }
4300
+
4301
+ load(data) {
4302
+ var _a;
4303
+
4304
+ if (data === undefined) {
4305
+ return;
4306
+ }
4307
+
4308
+ this.density.load(data.density);
4309
+ const limit = (_a = data.limit) !== null && _a !== void 0 ? _a : data.max;
4310
+
4311
+ if (limit !== undefined) {
4312
+ this.limit = limit;
4313
+ }
4314
+
4315
+ if (data.value !== undefined) {
4316
+ this.value = data.value;
4317
+ }
4318
+ }
4319
+
4320
+ }
4321
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/AnimationOptions.js
4322
+ class AnimationOptions {
4323
+ constructor() {
4324
+ this.count = 0;
4325
+ this.enable = false;
4326
+ this.speed = 1;
4327
+ this.sync = false;
4328
+ }
4329
+
4330
+ load(data) {
4331
+ if (!data) {
4332
+ return;
4333
+ }
4334
+
4335
+ if (data.count !== undefined) {
4336
+ this.count = data.count;
4337
+ }
4338
+
4339
+ if (data.enable !== undefined) {
4340
+ this.enable = data.enable;
4341
+ }
4342
+
4343
+ if (data.speed !== undefined) {
4344
+ this.speed = data.speed;
4345
+ }
4346
+
4347
+ if (data.sync !== undefined) {
4348
+ this.sync = data.sync;
4349
+ }
4350
+ }
4351
+
4352
+ }
4353
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Opacity/OpacityAnimation.js
4354
+
4355
+
4356
+ class OpacityAnimation extends AnimationOptions {
4357
+ constructor() {
4358
+ super();
4359
+ this.destroy = DestroyType.none;
4360
+ this.enable = false;
4361
+ this.minimumValue = 0;
4362
+ this.speed = 2;
4363
+ this.startValue = StartValueType.random;
4364
+ this.sync = false;
4365
+ }
4366
+
4367
+ get opacity_min() {
4368
+ return this.minimumValue;
4369
+ }
4370
+
4371
+ set opacity_min(value) {
4372
+ this.minimumValue = value;
4373
+ }
4374
+
4375
+ load(data) {
4376
+ var _a;
4377
+
4378
+ if (data === undefined) {
4379
+ return;
4380
+ }
4381
+
4382
+ super.load(data);
4383
+
4384
+ if (data.destroy !== undefined) {
4385
+ this.destroy = data.destroy;
4386
+ }
4387
+
4388
+ if (data.enable !== undefined) {
4389
+ this.enable = data.enable;
4390
+ }
4391
+
4392
+ const minimumValue = (_a = data.minimumValue) !== null && _a !== void 0 ? _a : data.opacity_min;
4393
+
4394
+ if (minimumValue !== undefined) {
4395
+ this.minimumValue = minimumValue;
4396
+ }
4397
+
4398
+ if (data.speed !== undefined) {
4399
+ this.speed = data.speed;
4400
+ }
4401
+
4402
+ if (data.startValue !== undefined) {
4403
+ this.startValue = data.startValue;
4404
+ }
4405
+
4406
+ if (data.sync !== undefined) {
4407
+ this.sync = data.sync;
4408
+ }
4409
+ }
4410
+
4411
+ }
4412
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Opacity/Opacity.js
4413
+
4414
+
4415
+ class Opacity extends ValueWithRandom {
4416
+ constructor() {
4417
+ super();
4418
+ this.animation = new OpacityAnimation();
4419
+ this.random.minimumValue = 0.1;
4420
+ this.value = 1;
4421
+ }
4422
+
4423
+ get anim() {
4424
+ return this.animation;
4425
+ }
4426
+
4427
+ set anim(value) {
4428
+ this.animation = value;
4429
+ }
4430
+
4431
+ load(data) {
4432
+ var _a;
4433
+
4434
+ if (!data) {
4435
+ return;
4436
+ }
4437
+
4438
+ super.load(data);
4439
+ this.animation.load((_a = data.animation) !== null && _a !== void 0 ? _a : data.anim);
4440
+ }
4441
+
4442
+ }
4443
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Shape/Shape.js
4444
+
4445
+
4446
+ class Shape {
4447
+ constructor() {
4448
+ this.options = {};
4449
+ this.type = ShapeType.circle;
4450
+ }
4451
+
4452
+ get image() {
4453
+ var _a;
4454
+
4455
+ return (_a = this.options[ShapeType.image]) !== null && _a !== void 0 ? _a : this.options[ShapeType.images];
4456
+ }
4457
+
4458
+ set image(value) {
4459
+ this.options[ShapeType.image] = value;
4460
+ this.options[ShapeType.images] = value;
4461
+ }
4462
+
4463
+ get custom() {
4464
+ return this.options;
4465
+ }
4466
+
4467
+ set custom(value) {
4468
+ this.options = value;
4469
+ }
4470
+
4471
+ get images() {
4472
+ return this.image instanceof Array ? this.image : [this.image];
4473
+ }
4474
+
4475
+ set images(value) {
4476
+ this.image = value;
4477
+ }
4478
+
4479
+ get stroke() {
4480
+ return [];
4481
+ }
4482
+
4483
+ set stroke(_value) {}
4484
+
4485
+ get character() {
4486
+ var _a;
4487
+
4488
+ return (_a = this.options[ShapeType.character]) !== null && _a !== void 0 ? _a : this.options[ShapeType.char];
4489
+ }
4490
+
4491
+ set character(value) {
4492
+ this.options[ShapeType.character] = value;
4493
+ this.options[ShapeType.char] = value;
4494
+ }
4495
+
4496
+ get polygon() {
4497
+ var _a;
4498
+
4499
+ return (_a = this.options[ShapeType.polygon]) !== null && _a !== void 0 ? _a : this.options[ShapeType.star];
4500
+ }
4501
+
4502
+ set polygon(value) {
4503
+ this.options[ShapeType.polygon] = value;
4504
+ this.options[ShapeType.star] = value;
4505
+ }
4506
+
4507
+ load(data) {
4508
+ var _a, _b, _c;
4509
+
4510
+ if (data === undefined) {
4511
+ return;
4512
+ }
4513
+
4514
+ const options = (_a = data.options) !== null && _a !== void 0 ? _a : data.custom;
4515
+
4516
+ if (options !== undefined) {
4517
+ for (const shape in options) {
4518
+ const item = options[shape];
4519
+
4520
+ if (item !== undefined) {
4521
+ this.options[shape] = Utils.deepExtend((_b = this.options[shape]) !== null && _b !== void 0 ? _b : {}, item);
4522
+ }
4523
+ }
4524
+ }
4525
+
4526
+ this.loadShape(data.character, ShapeType.character, ShapeType.char, true);
4527
+ this.loadShape(data.polygon, ShapeType.polygon, ShapeType.star, false);
4528
+ this.loadShape((_c = data.image) !== null && _c !== void 0 ? _c : data.images, ShapeType.image, ShapeType.images, true);
4529
+
4530
+ if (data.type !== undefined) {
4531
+ this.type = data.type;
4532
+ }
4533
+ }
4534
+
4535
+ loadShape(item, mainKey, altKey, altOverride) {
4536
+ var _a, _b, _c, _d;
4537
+
4538
+ if (item === undefined) {
4539
+ return;
4540
+ }
4541
+
4542
+ if (item instanceof Array) {
4543
+ if (!(this.options[mainKey] instanceof Array)) {
4544
+ this.options[mainKey] = [];
4545
+
4546
+ if (!this.options[altKey] || altOverride) {
4547
+ this.options[altKey] = [];
4548
+ }
4549
+ }
4550
+
4551
+ this.options[mainKey] = Utils.deepExtend((_a = this.options[mainKey]) !== null && _a !== void 0 ? _a : [], item);
4552
+
4553
+ if (!this.options[altKey] || altOverride) {
4554
+ this.options[altKey] = Utils.deepExtend((_b = this.options[altKey]) !== null && _b !== void 0 ? _b : [], item);
4555
+ }
4556
+ } else {
4557
+ if (this.options[mainKey] instanceof Array) {
4558
+ this.options[mainKey] = {};
4559
+
4560
+ if (!this.options[altKey] || altOverride) {
4561
+ this.options[altKey] = {};
4562
+ }
4563
+ }
4564
+
4565
+ this.options[mainKey] = Utils.deepExtend((_c = this.options[mainKey]) !== null && _c !== void 0 ? _c : {}, item);
4566
+
4567
+ if (!this.options[altKey] || altOverride) {
4568
+ this.options[altKey] = Utils.deepExtend((_d = this.options[altKey]) !== null && _d !== void 0 ? _d : {}, item);
4569
+ }
4570
+ }
4571
+ }
4572
+
4573
+ }
4574
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Size/SizeAnimation.js
4575
+
4576
+
4577
+ class SizeAnimation extends AnimationOptions {
4578
+ constructor() {
4579
+ super();
4580
+ this.destroy = DestroyType.none;
4581
+ this.enable = false;
4582
+ this.minimumValue = 0;
4583
+ this.speed = 5;
4584
+ this.startValue = StartValueType.random;
4585
+ this.sync = false;
4586
+ }
4587
+
4588
+ get size_min() {
4589
+ return this.minimumValue;
4590
+ }
4591
+
4592
+ set size_min(value) {
4593
+ this.minimumValue = value;
4594
+ }
4595
+
4596
+ load(data) {
4597
+ var _a;
4598
+
4599
+ if (data === undefined) {
4600
+ return;
4601
+ }
4602
+
4603
+ super.load(data);
4604
+
4605
+ if (data.destroy !== undefined) {
4606
+ this.destroy = data.destroy;
4607
+ }
4608
+
4609
+ if (data.enable !== undefined) {
4610
+ this.enable = data.enable;
4611
+ }
4612
+
4613
+ const minimumValue = (_a = data.minimumValue) !== null && _a !== void 0 ? _a : data.size_min;
4614
+
4615
+ if (minimumValue !== undefined) {
4616
+ this.minimumValue = minimumValue;
4617
+ }
4618
+
4619
+ if (data.speed !== undefined) {
4620
+ this.speed = data.speed;
4621
+ }
4622
+
4623
+ if (data.startValue !== undefined) {
4624
+ this.startValue = data.startValue;
4625
+ }
4626
+
4627
+ if (data.sync !== undefined) {
4628
+ this.sync = data.sync;
4629
+ }
4630
+ }
4631
+
4632
+ }
4633
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Size/Size.js
4634
+
4635
+
4636
+ class Size extends ValueWithRandom {
4637
+ constructor() {
4638
+ super();
4639
+ this.animation = new SizeAnimation();
4640
+ this.random.minimumValue = 1;
4641
+ this.value = 3;
4642
+ }
4643
+
4644
+ get anim() {
4645
+ return this.animation;
4646
+ }
4647
+
4648
+ set anim(value) {
4649
+ this.animation = value;
4650
+ }
4651
+
4652
+ load(data) {
4653
+ var _a;
4654
+
4655
+ if (!data) {
4656
+ return;
4657
+ }
4658
+
4659
+ super.load(data);
4660
+ const animation = (_a = data.animation) !== null && _a !== void 0 ? _a : data.anim;
4661
+
4662
+ if (animation !== undefined) {
4663
+ this.animation.load(animation);
4664
+ }
4665
+ }
4666
+
4667
+ }
4668
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Rotate/RotateAnimation.js
4669
+ class RotateAnimation {
4670
+ constructor() {
4671
+ this.enable = false;
4672
+ this.speed = 0;
4673
+ this.sync = false;
4674
+ }
4675
+
4676
+ load(data) {
4677
+ if (data === undefined) {
4678
+ return;
4679
+ }
4680
+
4681
+ if (data.enable !== undefined) {
4682
+ this.enable = data.enable;
4683
+ }
4684
+
4685
+ if (data.speed !== undefined) {
4686
+ this.speed = data.speed;
4687
+ }
4688
+
4689
+ if (data.sync !== undefined) {
4690
+ this.sync = data.sync;
4691
+ }
4692
+ }
4693
+
4694
+ }
4695
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Rotate/Rotate.js
4696
+
4697
+
4698
+
4699
+ class Rotate extends ValueWithRandom {
4700
+ constructor() {
4701
+ super();
4702
+ this.animation = new RotateAnimation();
4703
+ this.direction = RotateDirection.clockwise;
4704
+ this.path = false;
4705
+ }
4706
+
4707
+ load(data) {
4708
+ if (!data) {
4709
+ return;
4710
+ }
4711
+
4712
+ super.load(data);
4713
+
4714
+ if (data.direction !== undefined) {
4715
+ this.direction = data.direction;
4716
+ }
4717
+
4718
+ this.animation.load(data.animation);
4719
+
4720
+ if (data.path !== undefined) {
4721
+ this.path = data.path;
4722
+ }
4723
+ }
4724
+
4725
+ }
4726
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Shadow.js
4727
+
4728
+ class Shadow {
4729
+ constructor() {
4730
+ this.blur = 0;
4731
+ this.color = new OptionsColor();
4732
+ this.enable = false;
4733
+ this.offset = {
4734
+ x: 0,
4735
+ y: 0
4736
+ };
4737
+ this.color.value = "#000000";
4738
+ }
4739
+
4740
+ load(data) {
4741
+ if (data === undefined) {
4742
+ return;
4743
+ }
4744
+
4745
+ if (data.blur !== undefined) {
4746
+ this.blur = data.blur;
4747
+ }
4748
+
4749
+ this.color = OptionsColor.create(this.color, data.color);
4750
+
4751
+ if (data.enable !== undefined) {
4752
+ this.enable = data.enable;
4753
+ }
4754
+
4755
+ if (data.offset === undefined) {
4756
+ return;
4757
+ }
4758
+
4759
+ if (data.offset.x !== undefined) {
4760
+ this.offset.x = data.offset.x;
4761
+ }
4762
+
4763
+ if (data.offset.y !== undefined) {
4764
+ this.offset.y = data.offset.y;
4765
+ }
4766
+ }
4767
+
4768
+ }
4769
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/ColorAnimation.js
4770
+
4771
+ class ColorAnimation {
4772
+ constructor() {
4773
+ this.count = 0;
4774
+ this.enable = false;
4775
+ this.offset = 0;
4776
+ this.speed = 1;
4777
+ this.sync = true;
4778
+ }
4779
+
4780
+ load(data) {
4781
+ if (data === undefined) {
4782
+ return;
4783
+ }
4784
+
4785
+ if (data.count !== undefined) {
4786
+ this.count = data.count;
4787
+ }
4788
+
4789
+ if (data.enable !== undefined) {
4790
+ this.enable = data.enable;
4791
+ }
4792
+
4793
+ if (data.offset !== undefined) {
4794
+ this.offset = NumberUtils.setRangeValue(data.offset);
4795
+ }
4796
+
4797
+ if (data.speed !== undefined) {
4798
+ this.speed = data.speed;
4799
+ }
4800
+
4801
+ if (data.sync !== undefined) {
4802
+ this.sync = data.sync;
4803
+ }
4804
+ }
4805
+
4806
+ }
4807
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/HslAnimation.js
4808
+
4809
+ class HslAnimation {
4810
+ constructor() {
4811
+ this.h = new ColorAnimation();
4812
+ this.s = new ColorAnimation();
4813
+ this.l = new ColorAnimation();
4814
+ }
4815
+
4816
+ load(data) {
4817
+ if (!data) {
4818
+ return;
4819
+ }
4820
+
4821
+ this.h.load(data.h);
4822
+ this.s.load(data.s);
4823
+ this.l.load(data.l);
4824
+ }
4825
+
4826
+ }
4827
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/AnimatableColor.js
4828
+
4829
+
4830
+ class AnimatableColor extends OptionsColor {
4831
+ constructor() {
4832
+ super();
4833
+ this.animation = new HslAnimation();
4834
+ }
4835
+
4836
+ static create(source, data) {
4837
+ const color = source !== null && source !== void 0 ? source : new AnimatableColor();
4838
+
4839
+ if (data !== undefined) {
4840
+ color.load(typeof data === "string" ? {
4841
+ value: data
4842
+ } : data);
4843
+ }
4844
+
4845
+ return color;
4846
+ }
4847
+
4848
+ load(data) {
4849
+ super.load(data);
4850
+
4851
+ if (!data) {
4852
+ return;
4853
+ }
4854
+
4855
+ const colorAnimation = data.animation;
4856
+
4857
+ if (colorAnimation !== undefined) {
4858
+ if (colorAnimation.enable !== undefined) {
4859
+ this.animation.h.load(colorAnimation);
4860
+ } else {
4861
+ this.animation.load(data.animation);
4862
+ }
4863
+ }
4864
+ }
4865
+
4866
+ }
4867
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Stroke.js
4868
+
4869
+ class Stroke {
4870
+ constructor() {
4871
+ this.width = 0;
4872
+ }
4873
+
4874
+ load(data) {
4875
+ if (data === undefined) {
4876
+ return;
4877
+ }
4878
+
4879
+ if (data.color !== undefined) {
4880
+ this.color = AnimatableColor.create(this.color, data.color);
4881
+ }
4882
+
4883
+ if (data.width !== undefined) {
4884
+ this.width = data.width;
4885
+ }
4886
+
4887
+ if (data.opacity !== undefined) {
4888
+ this.opacity = data.opacity;
4889
+ }
4890
+ }
4891
+
4892
+ }
4893
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Bounce/BounceFactor.js
4894
+
4895
+ class BounceFactor extends ValueWithRandom {
4896
+ constructor() {
4897
+ super();
4898
+ this.random.minimumValue = 0.1;
4899
+ this.value = 1;
4900
+ }
4901
+
4902
+ }
4903
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Bounce/Bounce.js
4904
+
4905
+ class Bounce {
4906
+ constructor() {
4907
+ this.horizontal = new BounceFactor();
4908
+ this.vertical = new BounceFactor();
4909
+ }
4910
+
4911
+ load(data) {
4912
+ if (!data) {
4913
+ return;
4914
+ }
4915
+
4916
+ this.horizontal.load(data.horizontal);
4917
+ this.vertical.load(data.vertical);
4918
+ }
4919
+
4920
+ }
4921
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Collisions/CollisionsOverlap.js
4922
+ class CollisionsOverlap {
4923
+ constructor() {
4924
+ this.enable = true;
4925
+ this.retries = 0;
4926
+ }
4927
+
4928
+ load(data) {
4929
+ if (!data) {
4930
+ return;
4931
+ }
4932
+
4933
+ if (data.enable !== undefined) {
4934
+ this.enable = data.enable;
4935
+ }
4936
+
4937
+ if (data.retries !== undefined) {
4938
+ this.retries = data.retries;
4939
+ }
4940
+ }
4941
+
4942
+ }
4943
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Collisions/Collisions.js
4944
+
4945
+
4946
+
4947
+ class Collisions {
4948
+ constructor() {
4949
+ this.bounce = new Bounce();
4950
+ this.enable = false;
4951
+ this.mode = CollisionMode.bounce;
4952
+ this.overlap = new CollisionsOverlap();
4953
+ }
4954
+
4955
+ load(data) {
4956
+ if (data === undefined) {
4957
+ return;
4958
+ }
4959
+
4960
+ this.bounce.load(data.bounce);
4961
+
4962
+ if (data.enable !== undefined) {
4963
+ this.enable = data.enable;
4964
+ }
4965
+
4966
+ if (data.mode !== undefined) {
4967
+ this.mode = data.mode;
4968
+ }
4969
+
4970
+ this.overlap.load(data.overlap);
4971
+ }
4972
+
4973
+ }
4974
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Twinkle/TwinkleValues.js
4975
+
4976
+ class TwinkleValues {
4977
+ constructor() {
4978
+ this.enable = false;
4979
+ this.frequency = 0.05;
4980
+ this.opacity = 1;
4981
+ }
4982
+
4983
+ load(data) {
4984
+ if (data === undefined) {
4985
+ return;
4986
+ }
4987
+
4988
+ if (data.color !== undefined) {
4989
+ this.color = OptionsColor.create(this.color, data.color);
4990
+ }
4991
+
4992
+ if (data.enable !== undefined) {
4993
+ this.enable = data.enable;
4994
+ }
4995
+
4996
+ if (data.frequency !== undefined) {
4997
+ this.frequency = data.frequency;
4998
+ }
4999
+
5000
+ if (data.opacity !== undefined) {
5001
+ this.opacity = data.opacity;
5002
+ }
5003
+ }
5004
+
5005
+ }
5006
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Twinkle/Twinkle.js
5007
+
5008
+ class Twinkle {
5009
+ constructor() {
5010
+ this.lines = new TwinkleValues();
5011
+ this.particles = new TwinkleValues();
5012
+ }
5013
+
5014
+ load(data) {
5015
+ if (data === undefined) {
5016
+ return;
5017
+ }
5018
+
5019
+ this.lines.load(data.lines);
5020
+ this.particles.load(data.particles);
5021
+ }
5022
+
5023
+ }
5024
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Life/LifeDelay.js
5025
+
5026
+ class LifeDelay extends ValueWithRandom {
5027
+ constructor() {
5028
+ super();
5029
+ this.sync = false;
5030
+ }
5031
+
5032
+ load(data) {
5033
+ if (!data) {
5034
+ return;
5035
+ }
5036
+
5037
+ super.load(data);
5038
+
5039
+ if (data.sync !== undefined) {
5040
+ this.sync = data.sync;
5041
+ }
5042
+ }
5043
+
5044
+ }
5045
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Life/LifeDuration.js
5046
+
5047
+ class LifeDuration extends ValueWithRandom {
5048
+ constructor() {
5049
+ super();
5050
+ this.random.minimumValue = 0.0001;
5051
+ this.sync = false;
5052
+ }
5053
+
5054
+ load(data) {
5055
+ if (data === undefined) {
5056
+ return;
5057
+ }
5058
+
5059
+ super.load(data);
5060
+
5061
+ if (data.sync !== undefined) {
5062
+ this.sync = data.sync;
5063
+ }
5064
+ }
5065
+
5066
+ }
5067
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Life/Life.js
5068
+
5069
+
5070
+ class Life {
5071
+ constructor() {
5072
+ this.count = 0;
5073
+ this.delay = new LifeDelay();
5074
+ this.duration = new LifeDuration();
5075
+ }
5076
+
5077
+ load(data) {
5078
+ if (data === undefined) {
5079
+ return;
5080
+ }
5081
+
5082
+ if (data.count !== undefined) {
5083
+ this.count = data.count;
5084
+ }
5085
+
5086
+ this.delay.load(data.delay);
5087
+ this.duration.load(data.duration);
5088
+ }
5089
+
5090
+ }
5091
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Particles/Particles.js
5092
+
5093
+
5094
+
5095
+
5096
+
5097
+
5098
+
5099
+
5100
+
5101
+
5102
+
5103
+
5104
+
5105
+
5106
+ class Particles {
5107
+ constructor() {
5108
+ this.bounce = new Bounce();
5109
+ this.collisions = new Collisions();
5110
+ this.color = new AnimatableColor();
5111
+ this.life = new Life();
5112
+ this.links = new Links();
5113
+ this.move = new Move();
5114
+ this.number = new ParticlesNumber();
5115
+ this.opacity = new Opacity();
5116
+ this.reduceDuplicates = false;
5117
+ this.rotate = new Rotate();
5118
+ this.shadow = new Shadow();
5119
+ this.shape = new Shape();
5120
+ this.size = new Size();
5121
+ this.stroke = new Stroke();
5122
+ this.twinkle = new Twinkle();
5123
+ }
5124
+
5125
+ get line_linked() {
5126
+ return this.links;
5127
+ }
5128
+
5129
+ set line_linked(value) {
5130
+ this.links = value;
5131
+ }
5132
+
5133
+ get lineLinked() {
5134
+ return this.links;
5135
+ }
5136
+
5137
+ set lineLinked(value) {
5138
+ this.links = value;
5139
+ }
5140
+
5141
+ load(data) {
5142
+ var _a, _b, _c, _d, _e, _f, _g;
5143
+
5144
+ if (data === undefined) {
5145
+ return;
5146
+ }
5147
+
5148
+ this.bounce.load(data.bounce);
5149
+ this.color = AnimatableColor.create(this.color, data.color);
5150
+ this.life.load(data.life);
5151
+ const links = (_b = (_a = data.links) !== null && _a !== void 0 ? _a : data.lineLinked) !== null && _b !== void 0 ? _b : data.line_linked;
5152
+
5153
+ if (links !== undefined) {
5154
+ this.links.load(links);
5155
+ }
5156
+
5157
+ this.move.load(data.move);
5158
+ this.number.load(data.number);
5159
+ this.opacity.load(data.opacity);
5160
+
5161
+ if (data.reduceDuplicates !== undefined) {
5162
+ this.reduceDuplicates = data.reduceDuplicates;
5163
+ }
5164
+
5165
+ this.rotate.load(data.rotate);
5166
+ this.shape.load(data.shape);
5167
+ this.size.load(data.size);
5168
+ this.shadow.load(data.shadow);
5169
+ this.twinkle.load(data.twinkle);
5170
+ const collisions = (_d = (_c = data.move) === null || _c === void 0 ? void 0 : _c.collisions) !== null && _d !== void 0 ? _d : (_e = data.move) === null || _e === void 0 ? void 0 : _e.bounce;
5171
+
5172
+ if (collisions !== undefined) {
5173
+ this.collisions.enable = collisions;
5174
+ }
5175
+
5176
+ this.collisions.load(data.collisions);
5177
+ const strokeToLoad = (_f = data.stroke) !== null && _f !== void 0 ? _f : (_g = data.shape) === null || _g === void 0 ? void 0 : _g.stroke;
5178
+
5179
+ if (strokeToLoad === undefined) {
5180
+ return;
5181
+ }
5182
+
5183
+ if (strokeToLoad instanceof Array) {
5184
+ this.stroke = strokeToLoad.map(s => {
5185
+ const tmp = new Stroke();
5186
+ tmp.load(s);
5187
+ return tmp;
5188
+ });
5189
+ } else {
5190
+ if (this.stroke instanceof Array) {
5191
+ this.stroke = new Stroke();
5192
+ }
5193
+
5194
+ this.stroke.load(strokeToLoad);
5195
+ }
5196
+ }
5197
+
5198
+ }
5199
+ ;// CONCATENATED MODULE: ./dist/browser/Core/Particle/Infecter.js
5200
+ class Infecter {
5201
+ constructor(container) {
5202
+ this.container = container;
5203
+ }
5204
+
5205
+ startInfection(stage) {
5206
+ const options = this.container.actualOptions;
5207
+ const stages = options.infection.stages;
5208
+ const stagesCount = stages.length;
5209
+
5210
+ if (stage > stagesCount || stage < 0) {
5211
+ return;
5212
+ }
5213
+
5214
+ this.infectionDelay = 0;
5215
+ this.infectionDelayStage = stage;
5216
+ }
5217
+
5218
+ updateInfectionStage(stage) {
5219
+ const options = this.container.actualOptions;
5220
+ const stagesCount = options.infection.stages.length;
5221
+
5222
+ if (stage > stagesCount || stage < 0 || this.infectionStage !== undefined && this.infectionStage > stage) {
5223
+ return;
5224
+ }
5225
+
5226
+ this.infectionStage = stage;
5227
+ this.infectionTime = 0;
5228
+ }
5229
+
5230
+ updateInfection(delta) {
5231
+ const options = this.container.actualOptions;
5232
+ const infection = options.infection;
5233
+ const stages = options.infection.stages;
5234
+ const stagesCount = stages.length;
5235
+
5236
+ if (this.infectionDelay !== undefined && this.infectionDelayStage !== undefined) {
5237
+ const stage = this.infectionDelayStage;
5238
+
5239
+ if (stage > stagesCount || stage < 0) {
5240
+ return;
5241
+ }
5242
+
5243
+ if (this.infectionDelay > infection.delay * 1000) {
5244
+ this.infectionStage = stage;
5245
+ this.infectionTime = 0;
5246
+ delete this.infectionDelay;
5247
+ delete this.infectionDelayStage;
5248
+ } else {
5249
+ this.infectionDelay += delta;
5250
+ }
5251
+ } else {
5252
+ delete this.infectionDelay;
5253
+ delete this.infectionDelayStage;
5254
+ }
5255
+
5256
+ if (this.infectionStage !== undefined && this.infectionTime !== undefined) {
5257
+ const infectionStage = stages[this.infectionStage];
5258
+
5259
+ if (infectionStage.duration !== undefined && infectionStage.duration >= 0) {
5260
+ if (this.infectionTime > infectionStage.duration * 1000) {
5261
+ this.nextInfectionStage();
5262
+ } else {
5263
+ this.infectionTime += delta;
5264
+ }
5265
+ } else {
5266
+ this.infectionTime += delta;
5267
+ }
5268
+ } else {
5269
+ delete this.infectionStage;
5270
+ delete this.infectionTime;
5271
+ }
5272
+ }
5273
+
5274
+ nextInfectionStage() {
5275
+ const options = this.container.actualOptions;
5276
+ const stagesCount = options.infection.stages.length;
5277
+
5278
+ if (stagesCount <= 0 || this.infectionStage === undefined) {
5279
+ return;
5280
+ }
5281
+
5282
+ this.infectionTime = 0;
5283
+
5284
+ if (stagesCount <= ++this.infectionStage) {
5285
+ if (options.infection.cure) {
5286
+ delete this.infectionStage;
5287
+ delete this.infectionTime;
5288
+ return;
5289
+ } else {
5290
+ this.infectionStage = 0;
5291
+ this.infectionTime = 0;
5292
+ }
5293
+ }
5294
+ }
5295
+
5296
+ }
5297
+ ;// CONCATENATED MODULE: ./dist/browser/Core/Particle/Mover.js
5298
+
5299
+
5300
+ class Mover {
5301
+ constructor(container, particle) {
5302
+ this.container = container;
5303
+ this.particle = particle;
5304
+ }
5305
+
5306
+ move(delta) {
5307
+ const particle = this.particle;
5308
+ particle.bubble.inRange = false;
5309
+ particle.links = [];
5310
+
5311
+ for (const [, plugin] of this.container.plugins) {
5312
+ if (particle.destroyed) {
5313
+ break;
5314
+ }
5315
+
5316
+ if (plugin.particleUpdate) {
5317
+ plugin.particleUpdate(particle, delta);
5318
+ }
5319
+ }
5320
+
5321
+ if (particle.destroyed) {
5322
+ return;
5323
+ }
5324
+
5325
+ this.moveParticle(delta);
5326
+ this.moveParallax();
5327
+ }
5328
+
5329
+ moveParticle(delta) {
5330
+ var _a, _b;
5331
+
5332
+ const particle = this.particle;
5333
+ const particlesOptions = particle.options;
5334
+
5335
+ if (!particlesOptions.move.enable) {
5336
+ return;
5337
+ }
5338
+
5339
+ const container = this.container;
5340
+ const slowFactor = this.getProximitySpeedFactor();
5341
+ const baseSpeed = ((_a = particle.moveSpeed) !== null && _a !== void 0 ? _a : container.retina.moveSpeed) * container.retina.reduceFactor;
5342
+ const maxSize = (_b = particle.sizeValue) !== null && _b !== void 0 ? _b : container.retina.sizeValue;
5343
+ const sizeFactor = particlesOptions.move.size ? particle.getRadius() / maxSize : 1;
5344
+ const moveSpeed = baseSpeed / 2 * sizeFactor * slowFactor * delta.factor;
5345
+ this.applyPath(delta);
5346
+ const gravityOptions = particlesOptions.move.gravity;
5347
+
5348
+ if (gravityOptions.enable) {
5349
+ particle.velocity.vertical += gravityOptions.acceleration * delta.factor / (60 * moveSpeed);
5350
+ }
5351
+
5352
+ const decay = 1 - particle.options.move.decay;
5353
+ particle.velocity.horizontal *= decay;
5354
+ particle.velocity.vertical *= decay;
5355
+ const velocity = {
5356
+ horizontal: particle.velocity.horizontal * moveSpeed,
5357
+ vertical: particle.velocity.vertical * moveSpeed
5358
+ };
5359
+
5360
+ if (gravityOptions.enable && velocity.vertical >= gravityOptions.maxSpeed && gravityOptions.maxSpeed > 0) {
5361
+ velocity.vertical = gravityOptions.maxSpeed;
5362
+ particle.velocity.vertical = velocity.vertical / moveSpeed;
5363
+ }
5364
+
5365
+ particle.position.x += velocity.horizontal;
5366
+ particle.position.y += velocity.vertical;
5367
+
5368
+ if (particlesOptions.move.vibrate) {
5369
+ particle.position.x += Math.sin(particle.position.x * Math.cos(particle.position.y));
5370
+ particle.position.y += Math.cos(particle.position.y * Math.sin(particle.position.x));
5371
+ }
5372
+
5373
+ const initialPosition = particle.initialPosition;
5374
+ const initialDistance = NumberUtils.getDistance(initialPosition, particle.position);
5375
+
5376
+ if (particle.maxDistance) {
5377
+ if (initialDistance >= particle.maxDistance && !particle.misplaced) {
5378
+ particle.misplaced = initialDistance > particle.maxDistance;
5379
+ particle.velocity.horizontal = particle.velocity.vertical / 2 - particle.velocity.horizontal;
5380
+ particle.velocity.vertical = particle.velocity.horizontal / 2 - particle.velocity.vertical;
5381
+ } else if (initialDistance < particle.maxDistance && particle.misplaced) {
5382
+ particle.misplaced = false;
5383
+ } else if (particle.misplaced) {
5384
+ if (particle.position.x < initialPosition.x && particle.velocity.horizontal < 0 || particle.position.x > initialPosition.x && particle.velocity.horizontal > 0) {
5385
+ particle.velocity.horizontal *= -Math.random();
5386
+ }
5387
+
5388
+ if (particle.position.y < initialPosition.y && particle.velocity.vertical < 0 || particle.position.y > initialPosition.y && particle.velocity.vertical > 0) {
5389
+ particle.velocity.vertical *= -Math.random();
5390
+ }
5391
+ }
5392
+ }
5393
+ }
5394
+
5395
+ applyPath(delta) {
5396
+ const particle = this.particle;
5397
+ const particlesOptions = particle.options;
5398
+ const pathOptions = particlesOptions.move.path;
5399
+ const pathEnabled = pathOptions.enable;
5400
+
5401
+ if (!pathEnabled) {
5402
+ return;
5403
+ }
5404
+
5405
+ const container = this.container;
5406
+
5407
+ if (particle.lastPathTime <= particle.pathDelay) {
5408
+ particle.lastPathTime += delta.value;
5409
+ return;
5410
+ }
5411
+
5412
+ let generator = container.pathGenerator;
5413
+
5414
+ if (pathOptions.generator) {
5415
+ const customGenerator = Plugins.getPathGenerator(pathOptions.generator);
5416
+
5417
+ if (customGenerator) {
5418
+ generator = customGenerator;
5419
+ }
5420
+ }
5421
+
5422
+ const path = generator.generate(particle);
5423
+ particle.velocity.horizontal += Math.cos(path.angle) * path.length;
5424
+ particle.velocity.vertical += Math.sin(path.angle) * path.length;
5425
+
5426
+ if (pathOptions.clamp) {
5427
+ particle.velocity.horizontal = NumberUtils.clamp(particle.velocity.horizontal, -1, 1);
5428
+ particle.velocity.vertical = NumberUtils.clamp(particle.velocity.vertical, -1, 1);
5429
+ }
5430
+
5431
+ particle.lastPathTime -= particle.pathDelay;
5432
+ }
5433
+
5434
+ moveParallax() {
5435
+ const container = this.container;
5436
+ const options = container.actualOptions;
5437
+
5438
+ if (Utils.isSsr() || !options.interactivity.events.onHover.parallax.enable) {
5439
+ return;
5440
+ }
5441
+
5442
+ const particle = this.particle;
5443
+ const parallaxForce = options.interactivity.events.onHover.parallax.force;
5444
+ const mousePos = container.interactivity.mouse.position;
5445
+
5446
+ if (!mousePos) {
5447
+ return;
5448
+ }
5449
+
5450
+ const canvasCenter = {
5451
+ x: container.canvas.size.width / 2,
5452
+ y: container.canvas.size.height / 2
5453
+ };
5454
+ const parallaxSmooth = options.interactivity.events.onHover.parallax.smooth;
5455
+ const factor = particle.getRadius() / parallaxForce;
5456
+ const tmp = {
5457
+ x: (mousePos.x - canvasCenter.x) * factor,
5458
+ y: (mousePos.y - canvasCenter.y) * factor
5459
+ };
5460
+ particle.offset.x += (tmp.x - particle.offset.x) / parallaxSmooth;
5461
+ particle.offset.y += (tmp.y - particle.offset.y) / parallaxSmooth;
5462
+ }
5463
+
5464
+ getProximitySpeedFactor() {
5465
+ const container = this.container;
5466
+ const options = container.actualOptions;
5467
+ const active = Utils.isInArray(HoverMode.slow, options.interactivity.events.onHover.mode);
5468
+
5469
+ if (!active) {
5470
+ return 1;
5471
+ }
5472
+
5473
+ const mousePos = this.container.interactivity.mouse.position;
5474
+
5475
+ if (!mousePos) {
5476
+ return 1;
5477
+ }
5478
+
5479
+ const particlePos = this.particle.getPosition();
5480
+ const dist = NumberUtils.getDistance(mousePos, particlePos);
5481
+ const radius = container.retina.slowModeRadius;
5482
+
5483
+ if (dist > radius) {
5484
+ return 1;
5485
+ }
5486
+
5487
+ const proximityFactor = dist / radius || 0;
5488
+ const slowFactor = options.interactivity.modes.slow.factor;
5489
+ return proximityFactor / slowFactor;
5490
+ }
5491
+
5492
+ }
5493
+ ;// CONCATENATED MODULE: ./dist/browser/Core/Particle.js
5494
+
5495
+
5496
+
5497
+
5498
+
5499
+
5500
+
5501
+ class Particle {
5502
+ constructor(id, container, position, overrideOptions) {
5503
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
5504
+
5505
+ this.id = id;
5506
+ this.container = container;
5507
+ this.links = [];
5508
+ this.fill = true;
5509
+ this.close = true;
5510
+ this.lastPathTime = 0;
5511
+ this.destroyed = false;
5512
+ this.misplaced = false;
5513
+ this.loops = {
5514
+ opacity: 0,
5515
+ size: 0
5516
+ };
5517
+ const pxRatio = container.retina.pixelRatio;
5518
+ const options = container.actualOptions;
5519
+ const particlesOptions = new Particles();
5520
+ particlesOptions.load(options.particles);
5521
+ const shapeType = particlesOptions.shape.type;
5522
+ const reduceDuplicates = particlesOptions.reduceDuplicates;
5523
+ this.shape = shapeType instanceof Array ? Utils.itemFromArray(shapeType, this.id, reduceDuplicates) : shapeType;
5524
+
5525
+ if (overrideOptions === null || overrideOptions === void 0 ? void 0 : overrideOptions.shape) {
5526
+ if (overrideOptions.shape.type) {
5527
+ const overrideShapeType = overrideOptions.shape.type;
5528
+ this.shape = overrideShapeType instanceof Array ? Utils.itemFromArray(overrideShapeType, this.id, reduceDuplicates) : overrideShapeType;
5529
+ }
5530
+
5531
+ const shapeOptions = new Shape();
5532
+ shapeOptions.load(overrideOptions.shape);
5533
+
5534
+ if (this.shape) {
5535
+ const shapeData = shapeOptions.options[this.shape];
5536
+
5537
+ if (shapeData) {
5538
+ this.shapeData = Utils.deepExtend({}, shapeData instanceof Array ? Utils.itemFromArray(shapeData, this.id, reduceDuplicates) : shapeData);
5539
+ }
5540
+ }
5541
+ } else {
5542
+ const shapeData = particlesOptions.shape.options[this.shape];
5543
+
5544
+ if (shapeData) {
5545
+ this.shapeData = Utils.deepExtend({}, shapeData instanceof Array ? Utils.itemFromArray(shapeData, this.id, reduceDuplicates) : shapeData);
5546
+ }
5547
+ }
5548
+
5549
+ if (overrideOptions !== undefined) {
5550
+ particlesOptions.load(overrideOptions);
5551
+ }
5552
+
5553
+ if (((_a = this.shapeData) === null || _a === void 0 ? void 0 : _a.particles) !== undefined) {
5554
+ particlesOptions.load((_b = this.shapeData) === null || _b === void 0 ? void 0 : _b.particles);
5555
+ }
5556
+
5557
+ this.fill = (_d = (_c = this.shapeData) === null || _c === void 0 ? void 0 : _c.fill) !== null && _d !== void 0 ? _d : this.fill;
5558
+ this.close = (_f = (_e = this.shapeData) === null || _e === void 0 ? void 0 : _e.close) !== null && _f !== void 0 ? _f : this.close;
5559
+ this.options = particlesOptions;
5560
+ this.pathDelay = NumberUtils.getValue(this.options.move.path.delay) * 1000;
5561
+ container.retina.initParticle(this);
5562
+ const color = this.options.color;
5563
+ const sizeOptions = this.options.size;
5564
+ const sizeValue = NumberUtils.getValue(sizeOptions) * container.retina.pixelRatio;
5565
+ const randomSize = typeof sizeOptions.random === "boolean" ? sizeOptions.random : sizeOptions.random.enable;
5566
+ this.size = {
5567
+ value: sizeValue
5568
+ };
5569
+ this.direction = this.options.move.direction;
5570
+ this.bubble = {
5571
+ inRange: false
5572
+ };
5573
+ this.initialVelocity = this.calculateVelocity();
5574
+ this.velocity = {
5575
+ horizontal: this.initialVelocity.horizontal,
5576
+ vertical: this.initialVelocity.vertical
5577
+ };
5578
+ this.pathAngle = Math.atan2(this.initialVelocity.vertical, this.initialVelocity.horizontal);
5579
+ const rotateOptions = this.options.rotate;
5580
+ this.rotate = {
5581
+ value: (rotateOptions.random.enable ? Math.random() * 360 : rotateOptions.value) * Math.PI / 180
5582
+ };
5583
+ let rotateDirection = rotateOptions.direction;
5584
+
5585
+ if (rotateDirection === RotateDirection.random) {
5586
+ const index = Math.floor(Math.random() * 2);
5587
+ rotateDirection = index > 0 ? RotateDirection.counterClockwise : RotateDirection.clockwise;
5588
+ }
5589
+
5590
+ switch (rotateDirection) {
5591
+ case RotateDirection.counterClockwise:
5592
+ case "counterClockwise":
5593
+ this.rotate.status = AnimationStatus.decreasing;
5594
+ break;
5595
+
5596
+ case RotateDirection.clockwise:
5597
+ this.rotate.status = AnimationStatus.increasing;
5598
+ break;
5599
+ }
5600
+
5601
+ const rotateAnimation = this.options.rotate.animation;
5602
+
5603
+ if (rotateAnimation.enable) {
5604
+ this.rotate.velocity = rotateAnimation.speed / 360 * container.retina.reduceFactor;
5605
+
5606
+ if (!rotateAnimation.sync) {
5607
+ this.rotate.velocity *= Math.random();
5608
+ }
5609
+ }
5610
+
5611
+ const sizeAnimation = this.options.size.animation;
5612
+
5613
+ if (sizeAnimation.enable) {
5614
+ this.size.status = AnimationStatus.increasing;
5615
+
5616
+ if (!randomSize) {
5617
+ switch (sizeAnimation.startValue) {
5618
+ case StartValueType.min:
5619
+ this.size.value = sizeAnimation.minimumValue * pxRatio;
5620
+ break;
5621
+
5622
+ case StartValueType.random:
5623
+ this.size.value = NumberUtils.randomInRange(NumberUtils.setRangeValue(sizeAnimation.minimumValue * pxRatio, this.size.value));
5624
+ break;
5625
+
5626
+ case StartValueType.max:
5627
+ default:
5628
+ this.size.status = AnimationStatus.decreasing;
5629
+ break;
5630
+ }
5631
+ }
5632
+
5633
+ this.size.velocity = ((_g = this.sizeAnimationSpeed) !== null && _g !== void 0 ? _g : container.retina.sizeAnimationSpeed) / 100 * container.retina.reduceFactor;
5634
+
5635
+ if (!sizeAnimation.sync) {
5636
+ this.size.velocity *= Math.random();
5637
+ }
5638
+ }
5639
+
5640
+ const hslColor = ColorUtils.colorToHsl(color, this.id, reduceDuplicates);
5641
+
5642
+ if (hslColor) {
5643
+ this.color = {
5644
+ h: {
5645
+ value: hslColor.h
5646
+ },
5647
+ s: {
5648
+ value: hslColor.s
5649
+ },
5650
+ l: {
5651
+ value: hslColor.l
5652
+ }
5653
+ };
5654
+ const colorAnimation = this.options.color.animation;
5655
+ this.setColorAnimation(colorAnimation.h, this.color.h);
5656
+ this.setColorAnimation(colorAnimation.s, this.color.s);
5657
+ this.setColorAnimation(colorAnimation.l, this.color.l);
5658
+ }
5659
+
5660
+ this.position = this.calcPosition(this.container, position);
5661
+ this.initialPosition = {
5662
+ x: this.position.x,
5663
+ y: this.position.y
5664
+ };
5665
+ this.offset = {
5666
+ x: 0,
5667
+ y: 0
5668
+ };
5669
+ const opacityOptions = this.options.opacity;
5670
+ const randomOpacity = typeof opacityOptions.random === "boolean" ? opacityOptions.random : opacityOptions.random.enable;
5671
+ this.opacity = {
5672
+ value: NumberUtils.getValue(opacityOptions)
5673
+ };
5674
+ const opacityAnimation = opacityOptions.animation;
5675
+
5676
+ if (opacityAnimation.enable) {
5677
+ this.opacity.status = AnimationStatus.increasing;
5678
+
5679
+ if (!randomOpacity) {
5680
+ switch (opacityAnimation.startValue) {
5681
+ case StartValueType.min:
5682
+ this.opacity.value = opacityAnimation.minimumValue;
5683
+ break;
5684
+
5685
+ case StartValueType.random:
5686
+ this.opacity.value = NumberUtils.randomInRange(NumberUtils.setRangeValue(opacityAnimation.minimumValue, this.opacity.value));
5687
+ break;
5688
+
5689
+ case StartValueType.max:
5690
+ default:
5691
+ this.opacity.status = AnimationStatus.decreasing;
5692
+ break;
5693
+ }
5694
+ }
5695
+
5696
+ this.opacity.velocity = opacityAnimation.speed / 100 * container.retina.reduceFactor;
5697
+
5698
+ if (!opacityAnimation.sync) {
5699
+ this.opacity.velocity *= Math.random();
5700
+ }
5701
+ }
5702
+
5703
+ this.sides = 24;
5704
+ let drawer = container.drawers.get(this.shape);
5705
+
5706
+ if (!drawer) {
5707
+ drawer = Plugins.getShapeDrawer(this.shape);
5708
+
5709
+ if (drawer) {
5710
+ container.drawers.set(this.shape, drawer);
5711
+ }
5712
+ }
5713
+
5714
+ const sideCountFunc = drawer === null || drawer === void 0 ? void 0 : drawer.getSidesCount;
5715
+
5716
+ if (sideCountFunc) {
5717
+ this.sides = sideCountFunc(this);
5718
+ }
5719
+
5720
+ const imageShape = this.loadImageShape(container, drawer);
5721
+
5722
+ if (imageShape) {
5723
+ this.image = imageShape.image;
5724
+ this.fill = imageShape.fill;
5725
+ this.close = imageShape.close;
5726
+ }
5727
+
5728
+ this.stroke = this.options.stroke instanceof Array ? Utils.itemFromArray(this.options.stroke, this.id, reduceDuplicates) : this.options.stroke;
5729
+ this.strokeWidth = this.stroke.width * container.retina.pixelRatio;
5730
+ const strokeHslColor = (_h = ColorUtils.colorToHsl(this.stroke.color)) !== null && _h !== void 0 ? _h : this.getFillColor();
5731
+
5732
+ if (strokeHslColor) {
5733
+ this.strokeColor = {
5734
+ h: {
5735
+ value: strokeHslColor.h
5736
+ },
5737
+ s: {
5738
+ value: strokeHslColor.s
5739
+ },
5740
+ l: {
5741
+ value: strokeHslColor.l
5742
+ }
5743
+ };
5744
+ const strokeColorAnimation = (_j = this.stroke.color) === null || _j === void 0 ? void 0 : _j.animation;
5745
+
5746
+ if (strokeColorAnimation && this.strokeColor) {
5747
+ this.setColorAnimation(strokeColorAnimation.h, this.strokeColor.h);
5748
+ this.setColorAnimation(strokeColorAnimation.s, this.strokeColor.s);
5749
+ this.setColorAnimation(strokeColorAnimation.l, this.strokeColor.l);
5750
+ }
5751
+ }
5752
+
5753
+ const lifeOptions = particlesOptions.life;
5754
+ this.lifeDelay = container.retina.reduceFactor ? NumberUtils.getValue(lifeOptions.delay) * (lifeOptions.delay.sync ? 1 : Math.random()) / container.retina.reduceFactor * 1000 : 0;
5755
+ this.lifeDelayTime = 0;
5756
+ this.lifeDuration = container.retina.reduceFactor ? NumberUtils.getValue(lifeOptions.duration) * (lifeOptions.duration.sync ? 1 : Math.random()) / container.retina.reduceFactor * 1000 : 0;
5757
+ this.lifeTime = 0;
5758
+ this.livesRemaining = particlesOptions.life.count;
5759
+ this.spawning = this.lifeDelay > 0;
5760
+
5761
+ if (this.lifeDuration <= 0) {
5762
+ this.lifeDuration = -1;
5763
+ }
5764
+
5765
+ if (this.livesRemaining <= 0) {
5766
+ this.livesRemaining = -1;
5767
+ }
5768
+
5769
+ this.shadowColor = ColorUtils.colorToRgb(this.options.shadow.color);
5770
+ this.updater = new Updater(container, this);
5771
+ this.infecter = new Infecter(container);
5772
+ this.mover = new Mover(container, this);
5773
+ }
5774
+
5775
+ move(delta) {
5776
+ this.mover.move(delta);
5777
+ }
5778
+
5779
+ update(delta) {
5780
+ this.updater.update(delta);
5781
+ }
5782
+
5783
+ draw(delta) {
5784
+ this.container.canvas.drawParticle(this, delta);
5785
+ }
5786
+
5787
+ getPosition() {
5788
+ return {
5789
+ x: this.position.x + this.offset.x,
5790
+ y: this.position.y + this.offset.y
5791
+ };
5792
+ }
5793
+
5794
+ getRadius() {
5795
+ return this.bubble.radius || this.size.value;
5796
+ }
5797
+
5798
+ getFillColor() {
5799
+ var _a;
5800
+
5801
+ return (_a = this.bubble.color) !== null && _a !== void 0 ? _a : ColorUtils.getHslFromAnimation(this.color);
5802
+ }
5803
+
5804
+ getStrokeColor() {
5805
+ var _a, _b;
5806
+
5807
+ return (_b = (_a = this.bubble.color) !== null && _a !== void 0 ? _a : ColorUtils.getHslFromAnimation(this.strokeColor)) !== null && _b !== void 0 ? _b : this.getFillColor();
5808
+ }
5809
+
5810
+ destroy() {
5811
+ this.destroyed = true;
5812
+ this.bubble.inRange = false;
5813
+ this.links = [];
5814
+ }
5815
+
5816
+ reset() {
5817
+ this.loops.opacity = 0;
5818
+ this.loops.size = 0;
5819
+ }
5820
+
5821
+ setColorAnimation(colorAnimation, colorValue) {
5822
+ if (colorAnimation.enable) {
5823
+ colorValue.velocity = colorAnimation.speed / 100 * this.container.retina.reduceFactor;
5824
+
5825
+ if (colorAnimation.sync) {
5826
+ return;
5827
+ }
5828
+
5829
+ colorValue.status = AnimationStatus.increasing;
5830
+ colorValue.velocity *= Math.random();
5831
+
5832
+ if (colorValue.value) {
5833
+ colorValue.value *= Math.random();
5834
+ }
5835
+ } else {
5836
+ colorValue.velocity = 0;
5837
+ }
5838
+ }
5839
+
5840
+ calcPosition(container, position, tryCount = 0) {
5841
+ var _a, _b;
5842
+
5843
+ for (const [, plugin] of container.plugins) {
5844
+ const pluginPos = plugin.particlePosition !== undefined ? plugin.particlePosition(position, this) : undefined;
5845
+
5846
+ if (pluginPos !== undefined) {
5847
+ return Utils.deepExtend({}, pluginPos);
5848
+ }
5849
+ }
5850
+
5851
+ const pos = {
5852
+ x: (_a = position === null || position === void 0 ? void 0 : position.x) !== null && _a !== void 0 ? _a : Math.random() * container.canvas.size.width,
5853
+ y: (_b = position === null || position === void 0 ? void 0 : position.y) !== null && _b !== void 0 ? _b : Math.random() * container.canvas.size.height
5854
+ };
5855
+ const outMode = this.options.move.outMode;
5856
+
5857
+ if (Utils.isInArray(outMode, OutMode.bounce) || Utils.isInArray(outMode, OutMode.bounceHorizontal)) {
5858
+ if (pos.x > container.canvas.size.width - this.size.value * 2) {
5859
+ pos.x -= this.size.value;
5860
+ } else if (pos.x < this.size.value * 2) {
5861
+ pos.x += this.size.value;
5862
+ }
5863
+ }
5864
+
5865
+ if (Utils.isInArray(outMode, OutMode.bounce) || Utils.isInArray(outMode, OutMode.bounceVertical)) {
5866
+ if (pos.y > container.canvas.size.height - this.size.value * 2) {
5867
+ pos.y -= this.size.value;
5868
+ } else if (pos.y < this.size.value * 2) {
5869
+ pos.y += this.size.value;
5870
+ }
5871
+ }
5872
+
5873
+ if (this.checkOverlap(pos, tryCount)) {
5874
+ return this.calcPosition(container, undefined, tryCount + 1);
5875
+ }
5876
+
5877
+ return pos;
5878
+ }
5879
+
5880
+ checkOverlap(pos, tryCount = 0) {
5881
+ const overlapOptions = this.options.collisions.overlap;
5882
+
5883
+ if (!overlapOptions.enable) {
5884
+ const retries = overlapOptions.retries;
5885
+
5886
+ if (retries >= 0 && tryCount > retries) {
5887
+ throw new Error("Particle is overlapping and can't be placed");
5888
+ }
5889
+
5890
+ let overlaps = false;
5891
+
5892
+ for (const particle of this.container.particles.array) {
5893
+ if (NumberUtils.getDistance(pos, particle.position) < this.size.value + particle.size.value) {
5894
+ overlaps = true;
5895
+ break;
5896
+ }
5897
+ }
5898
+
5899
+ return overlaps;
5900
+ }
5901
+
5902
+ return false;
5903
+ }
5904
+
5905
+ calculateVelocity() {
5906
+ const baseVelocity = NumberUtils.getParticleBaseVelocity(this);
5907
+ const res = {
5908
+ horizontal: 0,
5909
+ vertical: 0
5910
+ };
5911
+ const moveOptions = this.options.move;
5912
+ let rad;
5913
+ let radOffset = Math.PI / 4;
5914
+
5915
+ if (typeof moveOptions.angle === "number") {
5916
+ rad = Math.PI / 180 * moveOptions.angle;
5917
+ } else {
5918
+ rad = Math.PI / 180 * moveOptions.angle.value;
5919
+ radOffset = Math.PI / 180 * moveOptions.angle.offset;
5920
+ }
5921
+
5922
+ const range = {
5923
+ left: Math.sin(radOffset + rad / 2) - Math.sin(radOffset - rad / 2),
5924
+ right: Math.cos(radOffset + rad / 2) - Math.cos(radOffset - rad / 2)
5925
+ };
5926
+
5927
+ if (moveOptions.straight) {
5928
+ res.horizontal = baseVelocity.x;
5929
+ res.vertical = baseVelocity.y;
5930
+
5931
+ if (moveOptions.random) {
5932
+ res.horizontal += NumberUtils.randomInRange(NumberUtils.setRangeValue(range.left, range.right)) / 2;
5933
+ res.vertical += NumberUtils.randomInRange(NumberUtils.setRangeValue(range.left, range.right)) / 2;
5934
+ }
5935
+ } else {
5936
+ res.horizontal = baseVelocity.x + NumberUtils.randomInRange(NumberUtils.setRangeValue(range.left, range.right)) / 2;
5937
+ res.vertical = baseVelocity.y + NumberUtils.randomInRange(NumberUtils.setRangeValue(range.left, range.right)) / 2;
5938
+ }
5939
+
5940
+ return res;
5941
+ }
5942
+
5943
+ loadImageShape(container, drawer) {
5944
+ var _a, _b, _c, _d, _e;
5945
+
5946
+ if (!(this.shape === ShapeType.image || this.shape === ShapeType.images)) {
5947
+ return;
5948
+ }
5949
+
5950
+ const imageDrawer = drawer;
5951
+ const images = imageDrawer.getImages(container).images;
5952
+ const imageData = this.shapeData;
5953
+ const image = (_a = images.find(t => t.source === imageData.src)) !== null && _a !== void 0 ? _a : images[0];
5954
+ const color = this.getFillColor();
5955
+ let imageRes;
5956
+
5957
+ if (!image) {
5958
+ return;
5959
+ }
5960
+
5961
+ if (image.svgData !== undefined && imageData.replaceColor && color) {
5962
+ const svgColoredData = ColorUtils.replaceColorSvg(image, color, this.opacity.value);
5963
+ const svg = new Blob([svgColoredData], {
5964
+ type: "image/svg+xml"
5965
+ });
5966
+ const domUrl = URL || window.URL || window.webkitURL || window;
5967
+ const url = domUrl.createObjectURL(svg);
5968
+ const img = new Image();
5969
+ imageRes = {
5970
+ data: image,
5971
+ loaded: false,
5972
+ ratio: imageData.width / imageData.height,
5973
+ replaceColor: (_b = imageData.replaceColor) !== null && _b !== void 0 ? _b : imageData.replace_color,
5974
+ source: imageData.src
5975
+ };
5976
+ img.addEventListener("load", () => {
5977
+ if (this.image) {
5978
+ this.image.loaded = true;
5979
+ image.element = img;
5980
+ }
5981
+
5982
+ domUrl.revokeObjectURL(url);
5983
+ });
5984
+ img.addEventListener("error", () => {
5985
+ domUrl.revokeObjectURL(url);
5986
+ Utils.loadImage(imageData.src).then(img2 => {
5987
+ if (this.image && img2) {
5988
+ image.element = img2.element;
5989
+ this.image.loaded = true;
5990
+ }
5991
+ });
5992
+ });
5993
+ img.src = url;
5994
+ } else {
5995
+ imageRes = {
5996
+ data: image,
5997
+ loaded: true,
5998
+ ratio: imageData.width / imageData.height,
5999
+ replaceColor: (_c = imageData.replaceColor) !== null && _c !== void 0 ? _c : imageData.replace_color,
6000
+ source: imageData.src
6001
+ };
6002
+ }
6003
+
6004
+ if (!imageRes.ratio) {
6005
+ imageRes.ratio = 1;
6006
+ }
6007
+
6008
+ const fill = (_d = imageData.fill) !== null && _d !== void 0 ? _d : this.fill;
6009
+ const close = (_e = imageData.close) !== null && _e !== void 0 ? _e : this.close;
6010
+ return {
6011
+ image: imageRes,
6012
+ fill,
6013
+ close
6014
+ };
6015
+ }
6016
+
6017
+ }
6018
+ ;// CONCATENATED MODULE: ./dist/browser/Interactions/External/Grabber.js
6019
+
6020
+
6021
+ class Grabber {
6022
+ constructor(container) {
6023
+ this.container = container;
6024
+ }
6025
+
6026
+ isEnabled() {
6027
+ const container = this.container;
6028
+ const mouse = container.interactivity.mouse;
6029
+ const events = container.actualOptions.interactivity.events;
6030
+
6031
+ if (!(events.onHover.enable && mouse.position)) {
6032
+ return false;
6033
+ }
6034
+
6035
+ const hoverMode = events.onHover.mode;
6036
+ return Utils.isInArray(HoverMode.grab, hoverMode);
6037
+ }
6038
+
6039
+ reset() {}
6040
+
6041
+ interact() {
6042
+ var _a;
6043
+
6044
+ const container = this.container;
6045
+ const options = container.actualOptions;
6046
+ const interactivity = options.interactivity;
6047
+
6048
+ if (interactivity.events.onHover.enable && container.interactivity.status === Constants.mouseMoveEvent) {
6049
+ const mousePos = container.interactivity.mouse.position;
6050
+
6051
+ if (mousePos === undefined) {
6052
+ return;
6053
+ }
6054
+
6055
+ const distance = container.retina.grabModeDistance;
6056
+ const query = container.particles.quadTree.queryCircle(mousePos, distance);
6057
+
6058
+ for (const particle of query) {
6059
+ const pos = particle.getPosition();
6060
+ const pointDistance = NumberUtils.getDistance(pos, mousePos);
6061
+
6062
+ if (pointDistance <= distance) {
6063
+ const grabLineOptions = interactivity.modes.grab.links;
6064
+ const lineOpacity = grabLineOptions.opacity;
6065
+ const opacityLine = lineOpacity - pointDistance * lineOpacity / distance;
6066
+
6067
+ if (opacityLine > 0) {
6068
+ const optColor = (_a = grabLineOptions.color) !== null && _a !== void 0 ? _a : particle.options.links.color;
6069
+
6070
+ if (!container.particles.grabLineColor) {
6071
+ const linksOptions = container.actualOptions.interactivity.modes.grab.links;
6072
+ container.particles.grabLineColor = ColorUtils.getLinkRandomColor(optColor, linksOptions.blink, linksOptions.consent);
6073
+ }
6074
+
6075
+ const colorLine = ColorUtils.getLinkColor(particle, undefined, container.particles.grabLineColor);
6076
+
6077
+ if (colorLine === undefined) {
6078
+ return;
6079
+ }
6080
+
6081
+ container.canvas.drawGrabLine(particle, colorLine, opacityLine, mousePos);
6082
+ }
6083
+ }
6084
+ }
6085
+ }
6086
+ }
6087
+
6088
+ }
6089
+ ;// CONCATENATED MODULE: ./dist/browser/Interactions/External/Repulser.js
6090
+
6091
+
6092
+ class Repulser {
6093
+ constructor(container) {
6094
+ this.container = container;
6095
+ }
6096
+
6097
+ isEnabled() {
6098
+ const container = this.container;
6099
+ const options = container.actualOptions;
6100
+ const mouse = container.interactivity.mouse;
6101
+ const events = options.interactivity.events;
6102
+ const divs = events.onDiv;
6103
+ const divRepulse = Utils.isDivModeEnabled(DivMode.repulse, divs);
6104
+
6105
+ if (!(divRepulse || events.onHover.enable && mouse.position || events.onClick.enable && mouse.clickPosition)) {
6106
+ return false;
6107
+ }
6108
+
6109
+ const hoverMode = events.onHover.mode;
6110
+ const clickMode = events.onClick.mode;
6111
+ return Utils.isInArray(HoverMode.repulse, hoverMode) || Utils.isInArray(ClickMode.repulse, clickMode) || divRepulse;
6112
+ }
6113
+
6114
+ reset() {}
6115
+
6116
+ interact() {
6117
+ const container = this.container;
6118
+ const options = container.actualOptions;
6119
+ const mouseMoveStatus = container.interactivity.status === Constants.mouseMoveEvent;
6120
+ const events = options.interactivity.events;
6121
+ const hoverEnabled = events.onHover.enable;
6122
+ const hoverMode = events.onHover.mode;
6123
+ const clickEnabled = events.onClick.enable;
6124
+ const clickMode = events.onClick.mode;
6125
+ const divs = events.onDiv;
6126
+
6127
+ if (mouseMoveStatus && hoverEnabled && Utils.isInArray(HoverMode.repulse, hoverMode)) {
6128
+ this.hoverRepulse();
6129
+ } else if (clickEnabled && Utils.isInArray(ClickMode.repulse, clickMode)) {
6130
+ this.clickRepulse();
6131
+ } else {
6132
+ Utils.divModeExecute(DivMode.repulse, divs, (selector, div) => this.singleSelectorRepulse(selector, div));
6133
+ }
6134
+ }
6135
+
6136
+ singleSelectorRepulse(selector, div) {
6137
+ const container = this.container;
6138
+ const query = document.querySelectorAll(selector);
6139
+
6140
+ if (!query.length) {
6141
+ return;
6142
+ }
6143
+
6144
+ query.forEach(item => {
6145
+ const elem = item;
6146
+ const pxRatio = container.retina.pixelRatio;
6147
+ const pos = {
6148
+ x: (elem.offsetLeft + elem.offsetWidth / 2) * pxRatio,
6149
+ y: (elem.offsetTop + elem.offsetHeight / 2) * pxRatio
6150
+ };
6151
+ const repulseRadius = elem.offsetWidth / 2 * pxRatio;
6152
+ const area = div.type === DivType.circle ? new Circle(pos.x, pos.y, repulseRadius) : new Rectangle(elem.offsetLeft * pxRatio, elem.offsetTop * pxRatio, elem.offsetWidth * pxRatio, elem.offsetHeight * pxRatio);
6153
+ const divs = container.actualOptions.interactivity.modes.repulse.divs;
6154
+ const divRepulse = Utils.divMode(divs, elem);
6155
+ this.processRepulse(pos, repulseRadius, area, divRepulse);
6156
+ });
6157
+ }
6158
+
6159
+ hoverRepulse() {
6160
+ const container = this.container;
6161
+ const mousePos = container.interactivity.mouse.position;
6162
+
6163
+ if (!mousePos) {
6164
+ return;
6165
+ }
6166
+
6167
+ const repulseRadius = container.retina.repulseModeDistance;
6168
+ this.processRepulse(mousePos, repulseRadius, new Circle(mousePos.x, mousePos.y, repulseRadius));
6169
+ }
6170
+
6171
+ processRepulse(position, repulseRadius, area, divRepulse) {
6172
+ var _a;
6173
+
6174
+ const container = this.container;
6175
+ const query = container.particles.quadTree.query(area);
6176
+
6177
+ for (const particle of query) {
6178
+ const {
6179
+ dx,
6180
+ dy,
6181
+ distance
6182
+ } = NumberUtils.getDistances(particle.position, position);
6183
+ const normVec = {
6184
+ x: dx / distance,
6185
+ y: dy / distance
6186
+ };
6187
+ const velocity = ((_a = divRepulse === null || divRepulse === void 0 ? void 0 : divRepulse.speed) !== null && _a !== void 0 ? _a : container.actualOptions.interactivity.modes.repulse.speed) * 100;
6188
+ const repulseFactor = NumberUtils.clamp((1 - Math.pow(distance / repulseRadius, 2)) * velocity, 0, 50);
6189
+ particle.position.x = particle.position.x + normVec.x * repulseFactor;
6190
+ particle.position.y = particle.position.y + normVec.y * repulseFactor;
6191
+ }
6192
+ }
6193
+
6194
+ clickRepulse() {
6195
+ const container = this.container;
6196
+
6197
+ if (!container.repulse.finish) {
6198
+ if (!container.repulse.count) {
6199
+ container.repulse.count = 0;
6200
+ }
6201
+
6202
+ container.repulse.count++;
6203
+
6204
+ if (container.repulse.count === container.particles.count) {
6205
+ container.repulse.finish = true;
6206
+ }
6207
+ }
6208
+
6209
+ if (container.repulse.clicking) {
6210
+ const repulseDistance = container.retina.repulseModeDistance;
6211
+ const repulseRadius = Math.pow(repulseDistance / 6, 3);
6212
+ const mouseClickPos = container.interactivity.mouse.clickPosition;
6213
+
6214
+ if (mouseClickPos === undefined) {
6215
+ return;
6216
+ }
6217
+
6218
+ const range = new Circle(mouseClickPos.x, mouseClickPos.y, repulseRadius);
6219
+ const query = container.particles.quadTree.query(range);
6220
+
6221
+ for (const particle of query) {
6222
+ const {
6223
+ dx,
6224
+ dy,
6225
+ distance
6226
+ } = NumberUtils.getDistances(mouseClickPos, particle.position);
6227
+ const d = distance * distance;
6228
+ const velocity = container.actualOptions.interactivity.modes.repulse.speed;
6229
+ const force = -repulseRadius * velocity / d;
6230
+
6231
+ if (d <= repulseRadius) {
6232
+ container.repulse.particles.push(particle);
6233
+ const angle = Math.atan2(dy, dx);
6234
+ particle.velocity.horizontal = force * Math.cos(angle);
6235
+ particle.velocity.vertical = force * Math.sin(angle);
6236
+ }
6237
+ }
6238
+ } else if (container.repulse.clicking === false) {
6239
+ for (const particle of container.repulse.particles) {
6240
+ particle.velocity.horizontal = particle.initialVelocity.horizontal;
6241
+ particle.velocity.vertical = particle.initialVelocity.vertical;
6242
+ }
6243
+
6244
+ container.repulse.particles = [];
6245
+ }
6246
+ }
6247
+
6248
+ }
6249
+ ;// CONCATENATED MODULE: ./dist/browser/Interactions/External/Bubbler.js
6250
+
6251
+
6252
+
6253
+ function calculateBubbleValue(particleValue, modeValue, optionsValue, ratio) {
6254
+ if (modeValue > optionsValue) {
6255
+ const size = particleValue + (modeValue - optionsValue) * ratio;
6256
+ return NumberUtils.clamp(size, particleValue, modeValue);
6257
+ } else if (modeValue < optionsValue) {
6258
+ const size = particleValue - (optionsValue - modeValue) * ratio;
6259
+ return NumberUtils.clamp(size, modeValue, particleValue);
6260
+ }
6261
+ }
6262
+
6263
+ class Bubbler {
6264
+ constructor(container) {
6265
+ this.container = container;
6266
+ }
6267
+
6268
+ isEnabled() {
6269
+ const container = this.container;
6270
+ const options = container.actualOptions;
6271
+ const mouse = container.interactivity.mouse;
6272
+ const events = options.interactivity.events;
6273
+ const divs = events.onDiv;
6274
+ const divBubble = Utils.isDivModeEnabled(DivMode.bubble, divs);
6275
+
6276
+ if (!(divBubble || events.onHover.enable && mouse.position || events.onClick.enable && mouse.clickPosition)) {
6277
+ return false;
6278
+ }
6279
+
6280
+ const hoverMode = events.onHover.mode;
6281
+ const clickMode = events.onClick.mode;
6282
+ return Utils.isInArray(HoverMode.bubble, hoverMode) || Utils.isInArray(ClickMode.bubble, clickMode) || divBubble;
6283
+ }
6284
+
6285
+ reset(particle, force) {
6286
+ if (!particle.bubble.inRange || force) {
6287
+ delete particle.bubble.div;
6288
+ delete particle.bubble.opacity;
6289
+ delete particle.bubble.radius;
6290
+ delete particle.bubble.color;
6291
+ }
6292
+ }
6293
+
6294
+ interact() {
6295
+ const options = this.container.actualOptions;
6296
+ const events = options.interactivity.events;
6297
+ const onHover = events.onHover;
6298
+ const onClick = events.onClick;
6299
+ const hoverEnabled = onHover.enable;
6300
+ const hoverMode = onHover.mode;
6301
+ const clickEnabled = onClick.enable;
6302
+ const clickMode = onClick.mode;
6303
+ const divs = events.onDiv;
6304
+
6305
+ if (hoverEnabled && Utils.isInArray(HoverMode.bubble, hoverMode)) {
6306
+ this.hoverBubble();
6307
+ } else if (clickEnabled && Utils.isInArray(ClickMode.bubble, clickMode)) {
6308
+ this.clickBubble();
6309
+ } else {
6310
+ Utils.divModeExecute(DivMode.bubble, divs, (selector, div) => this.singleSelectorHover(selector, div));
6311
+ }
6312
+ }
6313
+
6314
+ singleSelectorHover(selector, div) {
6315
+ const container = this.container;
6316
+ const selectors = document.querySelectorAll(selector);
6317
+
6318
+ if (!selectors.length) {
6319
+ return;
6320
+ }
6321
+
6322
+ selectors.forEach(item => {
6323
+ const elem = item;
6324
+ const pxRatio = container.retina.pixelRatio;
6325
+ const pos = {
6326
+ x: (elem.offsetLeft + elem.offsetWidth / 2) * pxRatio,
6327
+ y: (elem.offsetTop + elem.offsetHeight / 2) * pxRatio
6328
+ };
6329
+ const repulseRadius = elem.offsetWidth / 2 * pxRatio;
6330
+ const area = div.type === DivType.circle ? new Circle(pos.x, pos.y, repulseRadius) : new Rectangle(elem.offsetLeft * pxRatio, elem.offsetTop * pxRatio, elem.offsetWidth * pxRatio, elem.offsetHeight * pxRatio);
6331
+ const query = container.particles.quadTree.query(area);
6332
+
6333
+ for (const particle of query) {
6334
+ if (!area.contains(particle.getPosition())) {
6335
+ continue;
6336
+ }
6337
+
6338
+ particle.bubble.inRange = true;
6339
+ const divs = container.actualOptions.interactivity.modes.bubble.divs;
6340
+ const divBubble = Utils.divMode(divs, elem);
6341
+
6342
+ if (!particle.bubble.div || particle.bubble.div !== elem) {
6343
+ this.reset(particle, true);
6344
+ particle.bubble.div = elem;
6345
+ }
6346
+
6347
+ this.hoverBubbleSize(particle, 1, divBubble);
6348
+ this.hoverBubbleOpacity(particle, 1, divBubble);
6349
+ this.hoverBubbleColor(particle, divBubble);
6350
+ }
6351
+ });
6352
+ }
6353
+
6354
+ process(particle, distMouse, timeSpent, data) {
6355
+ const container = this.container;
6356
+ const bubbleParam = data.bubbleObj.optValue;
6357
+
6358
+ if (bubbleParam === undefined) {
6359
+ return;
6360
+ }
6361
+
6362
+ const options = container.actualOptions;
6363
+ const bubbleDuration = options.interactivity.modes.bubble.duration;
6364
+ const bubbleDistance = container.retina.bubbleModeDistance;
6365
+ const particlesParam = data.particlesObj.optValue;
6366
+ const pObjBubble = data.bubbleObj.value;
6367
+ const pObj = data.particlesObj.value || 0;
6368
+ const type = data.type;
6369
+
6370
+ if (bubbleParam !== particlesParam) {
6371
+ if (!container.bubble.durationEnd) {
6372
+ if (distMouse <= bubbleDistance) {
6373
+ const obj = pObjBubble !== null && pObjBubble !== void 0 ? pObjBubble : pObj;
6374
+
6375
+ if (obj !== bubbleParam) {
6376
+ const value = pObj - timeSpent * (pObj - bubbleParam) / bubbleDuration;
6377
+
6378
+ if (type === ProcessBubbleType.size) {
6379
+ particle.bubble.radius = value;
6380
+ }
6381
+
6382
+ if (type === ProcessBubbleType.opacity) {
6383
+ particle.bubble.opacity = value;
6384
+ }
6385
+ }
6386
+ } else {
6387
+ if (type === ProcessBubbleType.size) {
6388
+ delete particle.bubble.radius;
6389
+ }
6390
+
6391
+ if (type === ProcessBubbleType.opacity) {
6392
+ delete particle.bubble.opacity;
6393
+ }
6394
+ }
6395
+ } else if (pObjBubble) {
6396
+ if (type === ProcessBubbleType.size) {
6397
+ delete particle.bubble.radius;
6398
+ }
6399
+
6400
+ if (type === ProcessBubbleType.opacity) {
6401
+ delete particle.bubble.opacity;
6402
+ }
6403
+ }
6404
+ }
6405
+ }
6406
+
6407
+ clickBubble() {
6408
+ var _a;
6409
+
6410
+ const container = this.container;
6411
+ const options = container.actualOptions;
6412
+ const mouseClickPos = container.interactivity.mouse.clickPosition;
6413
+
6414
+ if (mouseClickPos === undefined) {
6415
+ return;
6416
+ }
6417
+
6418
+ const distance = container.retina.bubbleModeDistance;
6419
+ const query = container.particles.quadTree.queryCircle(mouseClickPos, distance);
6420
+
6421
+ for (const particle of query) {
6422
+ if (!container.bubble.clicking) {
6423
+ continue;
6424
+ }
6425
+
6426
+ particle.bubble.inRange = !container.bubble.durationEnd;
6427
+ const pos = particle.getPosition();
6428
+ const distMouse = NumberUtils.getDistance(pos, mouseClickPos);
6429
+ const timeSpent = (new Date().getTime() - (container.interactivity.mouse.clickTime || 0)) / 1000;
6430
+
6431
+ if (timeSpent > options.interactivity.modes.bubble.duration) {
6432
+ container.bubble.durationEnd = true;
6433
+ }
6434
+
6435
+ if (timeSpent > options.interactivity.modes.bubble.duration * 2) {
6436
+ container.bubble.clicking = false;
6437
+ container.bubble.durationEnd = false;
6438
+ }
6439
+
6440
+ const sizeData = {
6441
+ bubbleObj: {
6442
+ optValue: container.retina.bubbleModeSize,
6443
+ value: particle.bubble.radius
6444
+ },
6445
+ particlesObj: {
6446
+ optValue: (_a = particle.sizeValue) !== null && _a !== void 0 ? _a : container.retina.sizeValue,
6447
+ value: particle.size.value
6448
+ },
6449
+ type: ProcessBubbleType.size
6450
+ };
6451
+ this.process(particle, distMouse, timeSpent, sizeData);
6452
+ const opacityData = {
6453
+ bubbleObj: {
6454
+ optValue: options.interactivity.modes.bubble.opacity,
6455
+ value: particle.bubble.opacity
6456
+ },
6457
+ particlesObj: {
6458
+ optValue: particle.options.opacity.value,
6459
+ value: particle.opacity.value
6460
+ },
6461
+ type: ProcessBubbleType.opacity
6462
+ };
6463
+ this.process(particle, distMouse, timeSpent, opacityData);
6464
+
6465
+ if (!container.bubble.durationEnd) {
6466
+ if (distMouse <= container.retina.bubbleModeDistance) {
6467
+ this.hoverBubbleColor(particle);
6468
+ } else {
6469
+ delete particle.bubble.color;
6470
+ }
6471
+ } else {
6472
+ delete particle.bubble.color;
6473
+ }
6474
+ }
6475
+ }
6476
+
6477
+ hoverBubble() {
6478
+ const container = this.container;
6479
+ const mousePos = container.interactivity.mouse.position;
6480
+
6481
+ if (mousePos === undefined) {
6482
+ return;
6483
+ }
6484
+
6485
+ const distance = container.retina.bubbleModeDistance;
6486
+ const query = container.particles.quadTree.queryCircle(mousePos, distance);
6487
+
6488
+ for (const particle of query) {
6489
+ particle.bubble.inRange = true;
6490
+ const pos = particle.getPosition();
6491
+ const pointDistance = NumberUtils.getDistance(pos, mousePos);
6492
+ const ratio = 1 - pointDistance / distance;
6493
+
6494
+ if (pointDistance <= distance) {
6495
+ if (ratio >= 0 && container.interactivity.status === Constants.mouseMoveEvent) {
6496
+ this.hoverBubbleSize(particle, ratio);
6497
+ this.hoverBubbleOpacity(particle, ratio);
6498
+ this.hoverBubbleColor(particle);
6499
+ }
6500
+ } else {
6501
+ this.reset(particle);
6502
+ }
6503
+
6504
+ if (container.interactivity.status === Constants.mouseLeaveEvent) {
6505
+ this.reset(particle);
6506
+ }
6507
+ }
6508
+ }
6509
+
6510
+ hoverBubbleSize(particle, ratio, divBubble) {
6511
+ var _a;
6512
+
6513
+ const container = this.container;
6514
+ const modeSize = (divBubble === null || divBubble === void 0 ? void 0 : divBubble.size) ? divBubble.size * container.retina.pixelRatio : container.retina.bubbleModeSize;
6515
+
6516
+ if (modeSize === undefined) {
6517
+ return;
6518
+ }
6519
+
6520
+ const optSize = (_a = particle.sizeValue) !== null && _a !== void 0 ? _a : container.retina.sizeValue;
6521
+ const pSize = particle.size.value;
6522
+ const size = calculateBubbleValue(pSize, modeSize, optSize, ratio);
6523
+
6524
+ if (size !== undefined) {
6525
+ particle.bubble.radius = size;
6526
+ }
6527
+ }
6528
+
6529
+ hoverBubbleOpacity(particle, ratio, divBubble) {
6530
+ var _a;
6531
+
6532
+ const options = this.container.actualOptions;
6533
+ const modeOpacity = (_a = divBubble === null || divBubble === void 0 ? void 0 : divBubble.opacity) !== null && _a !== void 0 ? _a : options.interactivity.modes.bubble.opacity;
6534
+
6535
+ if (modeOpacity === undefined) {
6536
+ return;
6537
+ }
6538
+
6539
+ const optOpacity = particle.options.opacity.value;
6540
+ const pOpacity = particle.opacity.value;
6541
+ const opacity = calculateBubbleValue(pOpacity, modeOpacity, optOpacity, ratio);
6542
+
6543
+ if (opacity !== undefined) {
6544
+ particle.bubble.opacity = opacity;
6545
+ }
6546
+ }
6547
+
6548
+ hoverBubbleColor(particle, divBubble) {
6549
+ var _a;
6550
+
6551
+ const options = this.container.actualOptions;
6552
+
6553
+ if (particle.bubble.color === undefined) {
6554
+ const modeColor = (_a = divBubble === null || divBubble === void 0 ? void 0 : divBubble.color) !== null && _a !== void 0 ? _a : options.interactivity.modes.bubble.color;
6555
+
6556
+ if (modeColor === undefined) {
6557
+ return;
6558
+ }
6559
+
6560
+ const bubbleColor = modeColor instanceof Array ? Utils.itemFromArray(modeColor) : modeColor;
6561
+ particle.bubble.color = ColorUtils.colorToHsl(bubbleColor);
6562
+ }
6563
+ }
6564
+
6565
+ }
6566
+ ;// CONCATENATED MODULE: ./dist/browser/Interactions/External/Connector.js
6567
+
6568
+
6569
+ class Connector {
6570
+ constructor(container) {
6571
+ this.container = container;
6572
+ }
6573
+
6574
+ isEnabled() {
6575
+ const container = this.container;
6576
+ const mouse = container.interactivity.mouse;
6577
+ const events = container.actualOptions.interactivity.events;
6578
+
6579
+ if (!(events.onHover.enable && mouse.position)) {
6580
+ return false;
6581
+ }
6582
+
6583
+ const hoverMode = events.onHover.mode;
6584
+ return Utils.isInArray(HoverMode.connect, hoverMode);
6585
+ }
6586
+
6587
+ reset() {}
6588
+
6589
+ interact() {
6590
+ const container = this.container;
6591
+ const options = container.actualOptions;
6592
+
6593
+ if (options.interactivity.events.onHover.enable && container.interactivity.status === "mousemove") {
6594
+ const mousePos = container.interactivity.mouse.position;
6595
+
6596
+ if (!mousePos) {
6597
+ return;
6598
+ }
6599
+
6600
+ const distance = Math.abs(container.retina.connectModeRadius);
6601
+ const query = container.particles.quadTree.queryCircle(mousePos, distance);
6602
+ let i = 0;
6603
+
6604
+ for (const p1 of query) {
6605
+ const pos1 = p1.getPosition();
6606
+
6607
+ for (const p2 of query.slice(i + 1)) {
6608
+ const pos2 = p2.getPosition();
6609
+ const distMax = Math.abs(container.retina.connectModeDistance);
6610
+ const xDiff = Math.abs(pos1.x - pos2.x);
6611
+ const yDiff = Math.abs(pos1.y - pos2.y);
6612
+
6613
+ if (xDiff < distMax && yDiff < distMax) {
6614
+ container.canvas.drawConnectLine(p1, p2);
6615
+ }
6616
+ }
6617
+
6618
+ ++i;
6619
+ }
6620
+ }
6621
+ }
6622
+
6623
+ }
6624
+ ;// CONCATENATED MODULE: ./dist/browser/Interactions/Particles/Linker.js
6625
+
6626
+ class Linker {
6627
+ constructor(container) {
6628
+ this.container = container;
6629
+ }
6630
+
6631
+ isEnabled(particle) {
6632
+ return particle.options.links.enable;
6633
+ }
6634
+
6635
+ reset() {}
6636
+
6637
+ interact(p1) {
6638
+ var _a;
6639
+
6640
+ const container = this.container;
6641
+ const linkOpt1 = p1.options.links;
6642
+ const optOpacity = linkOpt1.opacity;
6643
+ const optDistance = (_a = p1.linksDistance) !== null && _a !== void 0 ? _a : container.retina.linksDistance;
6644
+ const canvasSize = container.canvas.size;
6645
+ const warp = linkOpt1.warp;
6646
+ const pos1 = p1.getPosition();
6647
+ const range = warp ? new CircleWarp(pos1.x, pos1.y, optDistance, canvasSize) : new Circle(pos1.x, pos1.y, optDistance);
6648
+ const query = container.particles.quadTree.query(range);
6649
+
6650
+ for (const p2 of query) {
6651
+ const linkOpt2 = p2.options.links;
6652
+
6653
+ if (p1 === p2 || !linkOpt2.enable || linkOpt1.id !== linkOpt2.id || p2.spawning || p2.destroyed) {
6654
+ continue;
6655
+ }
6656
+
6657
+ const pos2 = p2.getPosition();
6658
+ let distance = NumberUtils.getDistance(pos1, pos2);
6659
+
6660
+ if (warp) {
6661
+ if (distance > optDistance) {
6662
+ const pos2NE = {
6663
+ x: pos2.x - canvasSize.width,
6664
+ y: pos2.y
6665
+ };
6666
+ distance = NumberUtils.getDistance(pos1, pos2NE);
6667
+
6668
+ if (distance > optDistance) {
6669
+ const pos2SE = {
6670
+ x: pos2.x - canvasSize.width,
6671
+ y: pos2.y - canvasSize.height
6672
+ };
6673
+ distance = NumberUtils.getDistance(pos1, pos2SE);
6674
+
6675
+ if (distance > optDistance) {
6676
+ const pos2SW = {
6677
+ x: pos2.x,
6678
+ y: pos2.y - canvasSize.height
6679
+ };
6680
+ distance = NumberUtils.getDistance(pos1, pos2SW);
6681
+ }
6682
+ }
6683
+ }
6684
+ }
6685
+
6686
+ if (distance > optDistance) {
6687
+ return;
6688
+ }
6689
+
6690
+ const opacityLine = (1 - distance / optDistance) * optOpacity;
6691
+ const linksOptions = p1.options.links;
6692
+ let linkColor = linksOptions.id !== undefined ? container.particles.linksColors.get(linksOptions.id) : container.particles.linksColor;
6693
+
6694
+ if (!linkColor) {
6695
+ const optColor = linksOptions.color;
6696
+ linkColor = ColorUtils.getLinkRandomColor(optColor, linksOptions.blink, linksOptions.consent);
6697
+
6698
+ if (linksOptions.id !== undefined) {
6699
+ container.particles.linksColors.set(linksOptions.id, linkColor);
6700
+ } else {
6701
+ container.particles.linksColor = linkColor;
6702
+ }
6703
+ }
6704
+
6705
+ if (p2.links.map(t => t.destination).indexOf(p1) === -1 && p1.links.map(t => t.destination).indexOf(p2) === -1) {
6706
+ p1.links.push({
6707
+ destination: p2,
6708
+ opacity: opacityLine
6709
+ });
6710
+ }
6711
+ }
6712
+ }
6713
+
6714
+ }
6715
+ ;// CONCATENATED MODULE: ./dist/browser/Interactions/Particles/Attractor.js
6716
+
6717
+ class Attractor {
6718
+ constructor(container) {
6719
+ this.container = container;
6720
+ }
6721
+
6722
+ interact(p1) {
6723
+ var _a;
6724
+
6725
+ const container = this.container;
6726
+ const distance = (_a = p1.linksDistance) !== null && _a !== void 0 ? _a : container.retina.linksDistance;
6727
+ const pos1 = p1.getPosition();
6728
+ const query = container.particles.quadTree.queryCircle(pos1, distance);
6729
+
6730
+ for (const p2 of query) {
6731
+ if (p1 === p2 || !p2.options.move.attract.enable || p2.destroyed || p2.spawning) {
6732
+ continue;
6733
+ }
6734
+
6735
+ const pos2 = p2.getPosition();
6736
+ const {
6737
+ dx,
6738
+ dy
6739
+ } = NumberUtils.getDistances(pos1, pos2);
6740
+ const rotate = p1.options.move.attract.rotate;
6741
+ const ax = dx / (rotate.x * 1000);
6742
+ const ay = dy / (rotate.y * 1000);
6743
+ p1.velocity.horizontal -= ax;
6744
+ p1.velocity.vertical -= ay;
6745
+ p2.velocity.horizontal += ax;
6746
+ p2.velocity.vertical += ay;
6747
+ }
6748
+ }
6749
+
6750
+ isEnabled(particle) {
6751
+ return particle.options.move.attract.enable;
6752
+ }
6753
+
6754
+ reset() {}
6755
+
6756
+ }
6757
+ ;// CONCATENATED MODULE: ./dist/browser/Interactions/Particles/Collider.js
6758
+
6759
+
6760
+
6761
+ function bounce(p1, p2) {
6762
+ Utils.circleBounce(Utils.circleBounceDataFromParticle(p1), Utils.circleBounceDataFromParticle(p2));
6763
+ }
6764
+
6765
+ function destroy(p1, p2) {
6766
+ if (p1.getRadius() === undefined && p2.getRadius() !== undefined) {
6767
+ p1.destroy();
6768
+ } else if (p1.getRadius() !== undefined && p2.getRadius() === undefined) {
6769
+ p2.destroy();
6770
+ } else if (p1.getRadius() !== undefined && p2.getRadius() !== undefined) {
6771
+ if (p1.getRadius() >= p2.getRadius()) {
6772
+ p2.destroy();
6773
+ } else {
6774
+ p1.destroy();
6775
+ }
6776
+ }
6777
+ }
6778
+
6779
+ class Collider {
6780
+ constructor(container) {
6781
+ this.container = container;
6782
+ }
6783
+
6784
+ isEnabled(particle) {
6785
+ return particle.options.collisions.enable;
6786
+ }
6787
+
6788
+ reset() {}
6789
+
6790
+ interact(p1) {
6791
+ const container = this.container;
6792
+ const pos1 = p1.getPosition();
6793
+ const query = container.particles.quadTree.queryCircle(pos1, p1.getRadius() * 2);
6794
+
6795
+ for (const p2 of query) {
6796
+ if (p1 === p2 || !p2.options.collisions.enable || p1.options.collisions.mode !== p2.options.collisions.mode || p2.destroyed || p2.spawning) {
6797
+ continue;
6798
+ }
6799
+
6800
+ const pos2 = p2.getPosition();
6801
+ const dist = NumberUtils.getDistance(pos1, pos2);
6802
+ const radius1 = p1.getRadius();
6803
+ const radius2 = p2.getRadius();
6804
+ const distP = radius1 + radius2;
6805
+
6806
+ if (dist <= distP) {
6807
+ this.resolveCollision(p1, p2);
6808
+ }
6809
+ }
6810
+ }
6811
+
6812
+ resolveCollision(p1, p2) {
6813
+ switch (p1.options.collisions.mode) {
6814
+ case CollisionMode.absorb:
6815
+ {
6816
+ this.absorb(p1, p2);
6817
+ break;
6818
+ }
6819
+
6820
+ case CollisionMode.bounce:
6821
+ {
6822
+ bounce(p1, p2);
6823
+ break;
6824
+ }
6825
+
6826
+ case CollisionMode.destroy:
6827
+ {
6828
+ destroy(p1, p2);
6829
+ break;
6830
+ }
6831
+ }
6832
+ }
6833
+
6834
+ absorb(p1, p2) {
6835
+ const container = this.container;
6836
+ const fps = container.actualOptions.fpsLimit / 1000;
6837
+
6838
+ if (p1.getRadius() === undefined && p2.getRadius() !== undefined) {
6839
+ p1.destroy();
6840
+ } else if (p1.getRadius() !== undefined && p2.getRadius() === undefined) {
6841
+ p2.destroy();
6842
+ } else if (p1.getRadius() !== undefined && p2.getRadius() !== undefined) {
6843
+ if (p1.getRadius() >= p2.getRadius()) {
6844
+ const factor = NumberUtils.clamp(p1.getRadius() / p2.getRadius(), 0, p2.getRadius()) * fps;
6845
+ p1.size.value += factor;
6846
+ p2.size.value -= factor;
6847
+
6848
+ if (p2.getRadius() <= container.retina.pixelRatio) {
6849
+ p2.size.value = 0;
6850
+ p2.destroy();
6851
+ }
6852
+ } else {
6853
+ const factor = NumberUtils.clamp(p2.getRadius() / p1.getRadius(), 0, p1.getRadius()) * fps;
6854
+ p1.size.value -= factor;
6855
+ p2.size.value += factor;
6856
+
6857
+ if (p1.getRadius() <= container.retina.pixelRatio) {
6858
+ p1.size.value = 0;
6859
+ p1.destroy();
6860
+ }
6861
+ }
6862
+ }
6863
+ }
6864
+
6865
+ }
6866
+ ;// CONCATENATED MODULE: ./dist/browser/Interactions/Particles/Infecter.js
6867
+ class Infecter_Infecter {
6868
+ constructor(container) {
6869
+ this.container = container;
6870
+ }
6871
+
6872
+ isEnabled() {
6873
+ return this.container.actualOptions.infection.enable;
6874
+ }
6875
+
6876
+ reset() {}
6877
+
6878
+ interact(p1, delta) {
6879
+ var _a, _b;
6880
+
6881
+ const infecter1 = p1.infecter;
6882
+ infecter1.updateInfection(delta.value);
6883
+
6884
+ if (infecter1.infectionStage === undefined) {
6885
+ return;
6886
+ }
6887
+
6888
+ const container = this.container;
6889
+ const options = container.actualOptions;
6890
+ const infectionOptions = options.infection;
6891
+
6892
+ if (!infectionOptions.enable || infectionOptions.stages.length < 1) {
6893
+ return;
6894
+ }
6895
+
6896
+ const infectionStage1 = infectionOptions.stages[infecter1.infectionStage];
6897
+ const pxRatio = container.retina.pixelRatio;
6898
+ const radius = p1.getRadius() * 2 + infectionStage1.radius * pxRatio;
6899
+ const pos = p1.getPosition();
6900
+ const infectedStage1 = (_a = infectionStage1.infectedStage) !== null && _a !== void 0 ? _a : infecter1.infectionStage;
6901
+ const query = container.particles.quadTree.queryCircle(pos, radius);
6902
+ const infections = infectionStage1.rate;
6903
+ const neighbors = query.length;
6904
+
6905
+ for (const p2 of query) {
6906
+ if (p2 === p1 || p2.destroyed || p2.spawning || !(p2.infecter.infectionStage === undefined || p2.infecter.infectionStage !== infecter1.infectionStage)) {
6907
+ continue;
6908
+ }
6909
+
6910
+ const infecter2 = p2.infecter;
6911
+
6912
+ if (Math.random() < infections / neighbors) {
6913
+ if (infecter2.infectionStage === undefined) {
6914
+ infecter2.startInfection(infectedStage1);
6915
+ } else if (infecter2.infectionStage < infecter1.infectionStage) {
6916
+ infecter2.updateInfectionStage(infectedStage1);
6917
+ } else if (infecter2.infectionStage > infecter1.infectionStage) {
6918
+ const infectionStage2 = infectionOptions.stages[infecter2.infectionStage];
6919
+ const infectedStage2 = (_b = infectionStage2 === null || infectionStage2 === void 0 ? void 0 : infectionStage2.infectedStage) !== null && _b !== void 0 ? _b : infecter2.infectionStage;
6920
+ infecter1.updateInfectionStage(infectedStage2);
6921
+ }
6922
+ }
6923
+ }
6924
+ }
6925
+
6926
+ }
6927
+ ;// CONCATENATED MODULE: ./dist/browser/Interactions/External/TrailMaker.js
6928
+
6929
+
6930
+ class TrailMaker {
6931
+ constructor(container) {
6932
+ this.container = container;
6933
+ this.delay = 0;
6934
+ }
6935
+
6936
+ interact(delta) {
6937
+ if (!this.container.retina.reduceFactor) {
6938
+ return;
6939
+ }
6940
+
6941
+ const container = this.container;
6942
+ const options = container.actualOptions;
6943
+ const trailOptions = options.interactivity.modes.trail;
6944
+ const optDelay = trailOptions.delay * 1000 / this.container.retina.reduceFactor;
6945
+
6946
+ if (this.delay < optDelay) {
6947
+ this.delay += delta.value;
6948
+ }
6949
+
6950
+ if (this.delay >= optDelay) {
6951
+ container.particles.push(trailOptions.quantity, container.interactivity.mouse, trailOptions.particles);
6952
+ this.delay -= optDelay;
6953
+ }
6954
+ }
6955
+
6956
+ isEnabled() {
6957
+ const container = this.container;
6958
+ const options = container.actualOptions;
6959
+ const mouse = container.interactivity.mouse;
6960
+ const events = options.interactivity.events;
6961
+ return mouse.clicking && mouse.inside && !!mouse.position && Utils.isInArray(ClickMode.trail, events.onClick.mode) || mouse.inside && !!mouse.position && Utils.isInArray(HoverMode.trail, events.onHover.mode);
6962
+ }
6963
+
6964
+ reset() {}
6965
+
6966
+ }
6967
+ ;// CONCATENATED MODULE: ./dist/browser/Interactions/External/Attractor.js
6968
+
6969
+
6970
+ class Attractor_Attractor {
6971
+ constructor(container) {
6972
+ this.container = container;
6973
+ }
6974
+
6975
+ isEnabled() {
6976
+ const container = this.container;
6977
+ const options = container.actualOptions;
6978
+ const mouse = container.interactivity.mouse;
6979
+ const events = options.interactivity.events;
6980
+
6981
+ if (!(events.onHover.enable && mouse.position || events.onClick.enable && mouse.clickPosition)) {
6982
+ return false;
6983
+ }
6984
+
6985
+ const hoverMode = events.onHover.mode;
6986
+ const clickMode = events.onClick.mode;
6987
+ return Utils.isInArray(HoverMode.attract, hoverMode) || Utils.isInArray(ClickMode.attract, clickMode);
6988
+ }
6989
+
6990
+ reset() {}
6991
+
6992
+ interact() {
6993
+ const container = this.container;
6994
+ const options = container.actualOptions;
6995
+ const mouseMoveStatus = container.interactivity.status === Constants.mouseMoveEvent;
6996
+ const events = options.interactivity.events;
6997
+ const hoverEnabled = events.onHover.enable;
6998
+ const hoverMode = events.onHover.mode;
6999
+ const clickEnabled = events.onClick.enable;
7000
+ const clickMode = events.onClick.mode;
7001
+
7002
+ if (mouseMoveStatus && hoverEnabled && Utils.isInArray(HoverMode.attract, hoverMode)) {
7003
+ this.hoverAttract();
7004
+ } else if (clickEnabled && Utils.isInArray(ClickMode.attract, clickMode)) {
7005
+ this.clickAttract();
7006
+ }
7007
+ }
7008
+
7009
+ hoverAttract() {
7010
+ const container = this.container;
7011
+ const mousePos = container.interactivity.mouse.position;
7012
+
7013
+ if (!mousePos) {
7014
+ return;
7015
+ }
7016
+
7017
+ const attractRadius = container.retina.attractModeDistance;
7018
+ this.processAttract(mousePos, attractRadius, new Circle(mousePos.x, mousePos.y, attractRadius));
7019
+ }
7020
+
7021
+ processAttract(position, attractRadius, area) {
7022
+ const container = this.container;
7023
+ const query = container.particles.quadTree.query(area);
7024
+
7025
+ for (const particle of query) {
7026
+ const {
7027
+ dx,
7028
+ dy,
7029
+ distance
7030
+ } = NumberUtils.getDistances(particle.position, position);
7031
+ const normVec = {
7032
+ x: dx / distance,
7033
+ y: dy / distance
7034
+ };
7035
+ const velocity = container.actualOptions.interactivity.modes.attract.speed;
7036
+ const attractFactor = NumberUtils.clamp((1 - Math.pow(distance / attractRadius, 2)) * velocity, 0, 50);
7037
+ particle.position.x = particle.position.x - normVec.x * attractFactor;
7038
+ particle.position.y = particle.position.y - normVec.y * attractFactor;
7039
+ }
7040
+ }
7041
+
7042
+ clickAttract() {
7043
+ const container = this.container;
7044
+
7045
+ if (!container.attract.finish) {
7046
+ if (!container.attract.count) {
7047
+ container.attract.count = 0;
7048
+ }
7049
+
7050
+ container.attract.count++;
7051
+
7052
+ if (container.attract.count === container.particles.count) {
7053
+ container.attract.finish = true;
7054
+ }
7055
+ }
7056
+
7057
+ if (container.attract.clicking) {
7058
+ const mousePos = container.interactivity.mouse.clickPosition;
7059
+
7060
+ if (!mousePos) {
7061
+ return;
7062
+ }
7063
+
7064
+ const attractRadius = container.retina.attractModeDistance;
7065
+ this.processAttract(mousePos, attractRadius, new Circle(mousePos.x, mousePos.y, attractRadius));
7066
+ } else if (container.attract.clicking === false) {
7067
+ container.attract.particles = [];
7068
+ }
7069
+
7070
+ return;
7071
+ }
7072
+
7073
+ }
7074
+ ;// CONCATENATED MODULE: ./dist/browser/Interactions/Particles/Lighter.js
7075
+
7076
+
7077
+ class Lighter {
7078
+ constructor(container) {
7079
+ this.container = container;
7080
+ }
7081
+
7082
+ interact(particle) {
7083
+ const container = this.container;
7084
+ const options = container.actualOptions;
7085
+
7086
+ if (options.interactivity.events.onHover.enable && container.interactivity.status === "mousemove") {
7087
+ const mousePos = this.container.interactivity.mouse.position;
7088
+
7089
+ if (mousePos) {
7090
+ container.canvas.drawParticleShadow(particle, mousePos);
7091
+ }
7092
+ }
7093
+ }
7094
+
7095
+ isEnabled() {
7096
+ const container = this.container;
7097
+ const mouse = container.interactivity.mouse;
7098
+ const events = container.actualOptions.interactivity.events;
7099
+
7100
+ if (!(events.onHover.enable && mouse.position)) {
7101
+ return false;
7102
+ }
7103
+
7104
+ const hoverMode = events.onHover.mode;
7105
+ return Utils.isInArray(HoverMode.light, hoverMode);
7106
+ }
7107
+
7108
+ reset() {}
7109
+
7110
+ }
7111
+ ;// CONCATENATED MODULE: ./dist/browser/Interactions/External/Lighter.js
7112
+
7113
+
7114
+ class Lighter_Lighter {
7115
+ constructor(container) {
7116
+ this.container = container;
7117
+ }
7118
+
7119
+ interact() {
7120
+ const container = this.container;
7121
+ const options = container.actualOptions;
7122
+
7123
+ if (options.interactivity.events.onHover.enable && container.interactivity.status === "mousemove") {
7124
+ const mousePos = container.interactivity.mouse.position;
7125
+
7126
+ if (!mousePos) {
7127
+ return;
7128
+ }
7129
+
7130
+ container.canvas.drawLight(mousePos);
7131
+ }
7132
+ }
7133
+
7134
+ isEnabled() {
7135
+ const container = this.container;
7136
+ const mouse = container.interactivity.mouse;
7137
+ const events = container.actualOptions.interactivity.events;
7138
+
7139
+ if (!(events.onHover.enable && mouse.position)) {
7140
+ return false;
7141
+ }
7142
+
7143
+ const hoverMode = events.onHover.mode;
7144
+ return Utils.isInArray(HoverMode.light, hoverMode);
7145
+ }
7146
+
7147
+ reset() {}
7148
+
7149
+ }
7150
+ ;// CONCATENATED MODULE: ./dist/browser/Interactions/External/Bouncer.js
7151
+
7152
+
7153
+
7154
+
7155
+
7156
+ class Bouncer {
7157
+ constructor(container) {
7158
+ this.container = container;
7159
+ }
7160
+
7161
+ isEnabled() {
7162
+ const container = this.container;
7163
+ const options = container.actualOptions;
7164
+ const mouse = container.interactivity.mouse;
7165
+ const events = options.interactivity.events;
7166
+ const divs = events.onDiv;
7167
+ return mouse.position && events.onHover.enable && Utils.isInArray(HoverMode.bounce, events.onHover.mode) || Utils.isDivModeEnabled(DivMode.bounce, divs);
7168
+ }
7169
+
7170
+ interact() {
7171
+ const container = this.container;
7172
+ const options = container.actualOptions;
7173
+ const events = options.interactivity.events;
7174
+ const mouseMoveStatus = container.interactivity.status === Constants.mouseMoveEvent;
7175
+ const hoverEnabled = events.onHover.enable;
7176
+ const hoverMode = events.onHover.mode;
7177
+ const divs = events.onDiv;
7178
+
7179
+ if (mouseMoveStatus && hoverEnabled && Utils.isInArray(HoverMode.bounce, hoverMode)) {
7180
+ this.processMouseBounce();
7181
+ } else {
7182
+ Utils.divModeExecute(DivMode.bounce, divs, (selector, div) => this.singleSelectorBounce(selector, div));
7183
+ }
7184
+ }
7185
+
7186
+ reset() {}
7187
+
7188
+ processMouseBounce() {
7189
+ const container = this.container;
7190
+ const pxRatio = container.retina.pixelRatio;
7191
+ const tolerance = 10 * pxRatio;
7192
+ const mousePos = container.interactivity.mouse.position;
7193
+ const radius = container.retina.bounceModeDistance;
7194
+
7195
+ if (mousePos) {
7196
+ this.processBounce(mousePos, radius, new Circle(mousePos.x, mousePos.y, radius + tolerance));
7197
+ }
7198
+ }
7199
+
7200
+ singleSelectorBounce(selector, div) {
7201
+ const container = this.container;
7202
+ const query = document.querySelectorAll(selector);
7203
+
7204
+ if (!query.length) {
7205
+ return;
7206
+ }
7207
+
7208
+ query.forEach(item => {
7209
+ const elem = item;
7210
+ const pxRatio = container.retina.pixelRatio;
7211
+ const pos = {
7212
+ x: (elem.offsetLeft + elem.offsetWidth / 2) * pxRatio,
7213
+ y: (elem.offsetTop + elem.offsetHeight / 2) * pxRatio
7214
+ };
7215
+ const radius = elem.offsetWidth / 2 * pxRatio;
7216
+ const tolerance = 10 * pxRatio;
7217
+ const area = div.type === DivType.circle ? new Circle(pos.x, pos.y, radius + tolerance) : new Rectangle(elem.offsetLeft * pxRatio - tolerance, elem.offsetTop * pxRatio - tolerance, elem.offsetWidth * pxRatio + tolerance * 2, elem.offsetHeight * pxRatio + tolerance * 2);
7218
+ this.processBounce(pos, radius, area);
7219
+ });
7220
+ }
7221
+
7222
+ processBounce(position, radius, area) {
7223
+ const query = this.container.particles.quadTree.query(area);
7224
+
7225
+ for (const particle of query) {
7226
+ if (area instanceof Circle) {
7227
+ Utils.circleBounce(Utils.circleBounceDataFromParticle(particle), {
7228
+ position,
7229
+ radius,
7230
+ velocity: {
7231
+ horizontal: 0,
7232
+ vertical: 0
7233
+ },
7234
+ factor: {
7235
+ horizontal: 0,
7236
+ vertical: 0
7237
+ }
7238
+ });
7239
+ } else if (area instanceof Rectangle) {
7240
+ Utils.rectBounce(particle, Utils.calculateBounds(position, radius));
7241
+ }
7242
+ }
7243
+ }
7244
+
7245
+ }
7246
+ ;// CONCATENATED MODULE: ./dist/browser/Core/Particle/InteractionManager.js
7247
+
7248
+
7249
+
7250
+
7251
+
7252
+
7253
+
7254
+
7255
+
7256
+
7257
+
7258
+
7259
+
7260
+ class InteractionManager {
7261
+ constructor(container) {
7262
+ this.container = container;
7263
+ this.externalInteractors = [new Bouncer(container), new Bubbler(container), new Connector(container), new Grabber(container), new Lighter_Lighter(container), new Attractor_Attractor(container), new Repulser(container), new TrailMaker(container)];
7264
+ this.particleInteractors = [new Attractor(container), new Lighter(container), new Collider(container), new Infecter_Infecter(container), new Linker(container)];
7265
+ }
7266
+
7267
+ init() {}
7268
+
7269
+ externalInteract(delta) {
7270
+ for (const interactor of this.externalInteractors) {
7271
+ if (interactor.isEnabled()) {
7272
+ interactor.interact(delta);
7273
+ }
7274
+ }
7275
+ }
7276
+
7277
+ particlesInteract(particle, delta) {
7278
+ for (const interactor of this.externalInteractors) {
7279
+ interactor.reset(particle);
7280
+ }
7281
+
7282
+ for (const interactor of this.particleInteractors) {
7283
+ if (interactor.isEnabled(particle)) {
7284
+ interactor.interact(particle, delta);
7285
+ }
7286
+ }
7287
+ }
7288
+
7289
+ }
7290
+ ;// CONCATENATED MODULE: ./dist/browser/Core/Particles.js
7291
+
7292
+
7293
+
7294
+ class Particles_Particles {
7295
+ constructor(container) {
7296
+ this.container = container;
7297
+ this.nextId = 0;
7298
+ this.array = [];
7299
+ this.limit = 0;
7300
+ this.linksFreq = new Map();
7301
+ this.trianglesFreq = new Map();
7302
+ this.interactionManager = new InteractionManager(container);
7303
+ const canvasSize = this.container.canvas.size;
7304
+ this.linksColors = new Map();
7305
+ this.quadTree = new QuadTree(new Rectangle(-canvasSize.width / 4, -canvasSize.height / 4, canvasSize.width * 3 / 2, canvasSize.height * 3 / 2), 4);
7306
+ }
7307
+
7308
+ get count() {
7309
+ return this.array.length;
7310
+ }
7311
+
7312
+ init() {
7313
+ const container = this.container;
7314
+ const options = container.actualOptions;
7315
+ this.linksFreq = new Map();
7316
+ this.trianglesFreq = new Map();
7317
+ let handled = false;
7318
+
7319
+ for (const particle of options.manualParticles) {
7320
+ const pos = particle.position ? {
7321
+ x: particle.position.x * container.canvas.size.width / 100,
7322
+ y: particle.position.y * container.canvas.size.height / 100
7323
+ } : undefined;
7324
+ this.addParticle(pos, particle.options);
7325
+ }
7326
+
7327
+ for (const [, plugin] of container.plugins) {
7328
+ if (plugin.particlesInitialization !== undefined) {
7329
+ handled = plugin.particlesInitialization();
7330
+ }
7331
+
7332
+ if (handled) {
7333
+ break;
7334
+ }
7335
+ }
7336
+
7337
+ if (!handled) {
7338
+ for (let i = this.count; i < options.particles.number.value; i++) {
7339
+ this.addParticle();
7340
+ }
7341
+ }
7342
+
7343
+ if (options.infection.enable) {
7344
+ for (let i = 0; i < options.infection.infections; i++) {
7345
+ const notInfected = this.array.filter(p => p.infecter.infectionStage === undefined);
7346
+ const infected = Utils.itemFromArray(notInfected);
7347
+ infected.infecter.startInfection(0);
7348
+ }
7349
+ }
7350
+
7351
+ this.interactionManager.init();
7352
+ container.pathGenerator.init();
7353
+ }
7354
+
7355
+ redraw() {
7356
+ this.clear();
7357
+ this.init();
7358
+ this.draw({
7359
+ value: 0,
7360
+ factor: 0
7361
+ });
7362
+ }
7363
+
7364
+ removeAt(index, quantity) {
7365
+ if (index >= 0 && index <= this.count) {
7366
+ for (const particle of this.array.splice(index, quantity !== null && quantity !== void 0 ? quantity : 1)) {
7367
+ particle.destroy();
7368
+ }
7369
+ }
7370
+ }
7371
+
7372
+ remove(particle) {
7373
+ this.removeAt(this.array.indexOf(particle));
7374
+ }
7375
+
7376
+ update(delta) {
7377
+ const container = this.container;
7378
+ const particlesToDelete = [];
7379
+ container.pathGenerator.update();
7380
+
7381
+ for (const [, plugin] of container.plugins) {
7382
+ if (plugin.update !== undefined) {
7383
+ plugin.update(delta);
7384
+ }
7385
+ }
7386
+
7387
+ for (const particle of this.array) {
7388
+ const resizeFactor = this.container.canvas.resizeFactor;
7389
+
7390
+ if (resizeFactor) {
7391
+ particle.position.x *= resizeFactor.width;
7392
+ particle.position.y *= resizeFactor.height;
7393
+ }
7394
+
7395
+ particle.move(delta);
7396
+
7397
+ if (particle.destroyed) {
7398
+ particlesToDelete.push(particle);
7399
+ continue;
7400
+ }
7401
+
7402
+ this.quadTree.insert(new Point(particle.getPosition(), particle));
7403
+ }
7404
+
7405
+ for (const particle of particlesToDelete) {
7406
+ this.remove(particle);
7407
+ }
7408
+
7409
+ this.interactionManager.externalInteract(delta);
7410
+
7411
+ for (const particle of this.container.particles.array) {
7412
+ particle.update(delta);
7413
+
7414
+ if (!particle.destroyed && !particle.spawning) {
7415
+ this.interactionManager.particlesInteract(particle, delta);
7416
+ }
7417
+ }
7418
+
7419
+ delete container.canvas.resizeFactor;
7420
+ }
7421
+
7422
+ draw(delta) {
7423
+ const container = this.container;
7424
+ container.canvas.clear();
7425
+ const canvasSize = this.container.canvas.size;
7426
+ this.quadTree = new QuadTree(new Rectangle(-canvasSize.width / 4, -canvasSize.height / 4, canvasSize.width * 3 / 2, canvasSize.height * 3 / 2), 4);
7427
+ this.update(delta);
7428
+
7429
+ for (const [, plugin] of container.plugins) {
7430
+ container.canvas.drawPlugin(plugin, delta);
7431
+ }
7432
+
7433
+ for (const p of this.array) {
7434
+ p.draw(delta);
7435
+ }
7436
+ }
7437
+
7438
+ clear() {
7439
+ this.array = [];
7440
+ }
7441
+
7442
+ push(nb, mouse, overrideOptions) {
7443
+ const container = this.container;
7444
+ const options = container.actualOptions;
7445
+ const limit = options.particles.number.limit * container.density;
7446
+ this.pushing = true;
7447
+
7448
+ if (limit > 0) {
7449
+ const countToRemove = this.count + nb - limit;
7450
+
7451
+ if (countToRemove > 0) {
7452
+ this.removeQuantity(countToRemove);
7453
+ }
7454
+ }
7455
+
7456
+ for (let i = 0; i < nb; i++) {
7457
+ this.addParticle(mouse === null || mouse === void 0 ? void 0 : mouse.position, overrideOptions);
7458
+ }
7459
+
7460
+ this.pushing = false;
7461
+ }
7462
+
7463
+ addParticle(position, overrideOptions) {
7464
+ try {
7465
+ const particle = new Particle(this.nextId, this.container, position, overrideOptions);
7466
+ this.array.push(particle);
7467
+ this.nextId++;
7468
+ return particle;
7469
+ } catch (_a) {
7470
+ console.warn("error adding particle");
7471
+ return;
7472
+ }
7473
+ }
7474
+
7475
+ removeQuantity(quantity) {
7476
+ this.removeAt(0, quantity);
7477
+ }
7478
+
7479
+ getLinkFrequency(p1, p2) {
7480
+ const key = `${Math.min(p1.id, p2.id)}_${Math.max(p1.id, p2.id)}`;
7481
+ let res = this.linksFreq.get(key);
7482
+
7483
+ if (res === undefined) {
7484
+ res = Math.random();
7485
+ this.linksFreq.set(key, res);
7486
+ }
7487
+
7488
+ return res;
7489
+ }
7490
+
7491
+ getTriangleFrequency(p1, p2, p3) {
7492
+ let [id1, id2, id3] = [p1.id, p2.id, p3.id];
7493
+
7494
+ if (id1 > id2) {
7495
+ [id2, id1] = [id1, id2];
7496
+ }
7497
+
7498
+ if (id2 > id3) {
7499
+ [id3, id2] = [id2, id3];
7500
+ }
7501
+
7502
+ if (id1 > id3) {
7503
+ [id3, id1] = [id1, id3];
7504
+ }
7505
+
7506
+ const key = `${id1}_${id2}_${id3}`;
7507
+ let res = this.trianglesFreq.get(key);
7508
+
7509
+ if (res === undefined) {
7510
+ res = Math.random();
7511
+ this.trianglesFreq.set(key, res);
7512
+ }
7513
+
7514
+ return res;
7515
+ }
7516
+
7517
+ setDensity() {
7518
+ const options = this.container.actualOptions;
7519
+ this.applyDensity(options.particles);
7520
+ }
7521
+
7522
+ applyDensity(options) {
7523
+ var _a;
7524
+
7525
+ if (!((_a = options.number.density) === null || _a === void 0 ? void 0 : _a.enable)) {
7526
+ return;
7527
+ }
7528
+
7529
+ const numberOptions = options.number;
7530
+ const densityFactor = this.initDensityFactor(numberOptions.density);
7531
+ const optParticlesNumber = numberOptions.value;
7532
+ const optParticlesLimit = numberOptions.limit > 0 ? numberOptions.limit : optParticlesNumber;
7533
+ const particlesNumber = Math.min(optParticlesNumber, optParticlesLimit) * densityFactor;
7534
+ const particlesCount = this.count;
7535
+ this.limit = numberOptions.limit * densityFactor;
7536
+
7537
+ if (particlesCount < particlesNumber) {
7538
+ this.push(Math.abs(particlesNumber - particlesCount), undefined, options);
7539
+ } else if (particlesCount > particlesNumber) {
7540
+ this.removeQuantity(particlesCount - particlesNumber);
7541
+ }
7542
+ }
7543
+
7544
+ initDensityFactor(densityOptions) {
7545
+ const container = this.container;
7546
+
7547
+ if (!container.canvas.element || !densityOptions.enable) {
7548
+ return 1;
7549
+ }
7550
+
7551
+ const canvas = container.canvas.element;
7552
+ const pxRatio = container.retina.pixelRatio;
7553
+ return canvas.width * canvas.height / (densityOptions.factor * pxRatio * pxRatio * densityOptions.area);
7554
+ }
7555
+
7556
+ }
7557
+ ;// CONCATENATED MODULE: ./dist/browser/Core/Retina.js
7558
+
7559
+ class Retina {
7560
+ constructor(container) {
7561
+ this.container = container;
7562
+ }
7563
+
7564
+ init() {
7565
+ const container = this.container;
7566
+ const options = container.actualOptions;
7567
+
7568
+ if (options.detectRetina) {
7569
+ this.pixelRatio = Utils.isSsr() ? 1 : window.devicePixelRatio;
7570
+ } else {
7571
+ this.pixelRatio = 1;
7572
+ }
7573
+
7574
+ const motionOptions = this.container.actualOptions.motion;
7575
+
7576
+ if (motionOptions && (motionOptions.disable || motionOptions.reduce.value)) {
7577
+ if (Utils.isSsr() || typeof matchMedia === "undefined" || !matchMedia) {
7578
+ this.reduceFactor = 1;
7579
+ } else {
7580
+ const mediaQuery = matchMedia("(prefers-reduced-motion: reduce)");
7581
+
7582
+ if (mediaQuery) {
7583
+ this.handleMotionChange(mediaQuery);
7584
+
7585
+ const handleChange = () => {
7586
+ this.handleMotionChange(mediaQuery);
7587
+ container.refresh().catch(() => {});
7588
+ };
7589
+
7590
+ if (mediaQuery.addEventListener !== undefined) {
7591
+ mediaQuery.addEventListener("change", handleChange);
7592
+ } else if (mediaQuery.addListener !== undefined) {
7593
+ mediaQuery.addListener(handleChange);
7594
+ }
7595
+ }
7596
+ }
7597
+ } else {
7598
+ this.reduceFactor = 1;
7599
+ }
7600
+
7601
+ const ratio = this.pixelRatio;
7602
+
7603
+ if (container.canvas.element) {
7604
+ const element = container.canvas.element;
7605
+ container.canvas.size.width = element.offsetWidth * ratio;
7606
+ container.canvas.size.height = element.offsetHeight * ratio;
7607
+ }
7608
+
7609
+ const particles = options.particles;
7610
+ this.linksDistance = particles.links.distance * ratio;
7611
+ this.linksWidth = particles.links.width * ratio;
7612
+ this.moveSpeed = particles.move.speed * ratio;
7613
+ this.sizeValue = particles.size.value * ratio;
7614
+ this.sizeAnimationSpeed = particles.size.animation.speed * ratio;
7615
+ const modes = options.interactivity.modes;
7616
+ this.connectModeDistance = modes.connect.distance * ratio;
7617
+ this.connectModeRadius = modes.connect.radius * ratio;
7618
+ this.grabModeDistance = modes.grab.distance * ratio;
7619
+ this.repulseModeDistance = modes.repulse.distance * ratio;
7620
+ this.bounceModeDistance = modes.bounce.distance * ratio;
7621
+ this.attractModeDistance = modes.attract.distance * ratio;
7622
+ this.slowModeRadius = modes.slow.radius * ratio;
7623
+ this.bubbleModeDistance = modes.bubble.distance * ratio;
7624
+
7625
+ if (modes.bubble.size) {
7626
+ this.bubbleModeSize = modes.bubble.size * ratio;
7627
+ }
7628
+ }
7629
+
7630
+ initParticle(particle) {
7631
+ const particlesOptions = particle.options;
7632
+ const ratio = this.pixelRatio;
7633
+ particle.linksDistance = particlesOptions.links.distance * ratio;
7634
+ particle.linksWidth = particlesOptions.links.width * ratio;
7635
+ particle.moveSpeed = particlesOptions.move.speed * ratio;
7636
+ particle.sizeValue = particlesOptions.size.value * ratio;
7637
+ particle.sizeAnimationSpeed = particlesOptions.size.animation.speed * ratio;
7638
+ particle.maxDistance = particlesOptions.move.distance * ratio;
7639
+ }
7640
+
7641
+ handleMotionChange(mediaQuery) {
7642
+ const options = this.container.actualOptions;
7643
+
7644
+ if (mediaQuery.matches) {
7645
+ const motion = options.motion;
7646
+ this.reduceFactor = motion.disable ? 0 : motion.reduce.value ? 1 / motion.reduce.factor : 1;
7647
+ } else {
7648
+ this.reduceFactor = 1;
7649
+ }
7650
+ }
7651
+
7652
+ }
7653
+ ;// CONCATENATED MODULE: ./dist/browser/Core/FrameManager.js
7654
+ class FrameManager {
7655
+ constructor(container) {
7656
+ this.container = container;
7657
+ }
7658
+
7659
+ nextFrame(timestamp) {
7660
+ try {
7661
+ const container = this.container;
7662
+
7663
+ if (container.lastFrameTime !== undefined && timestamp < container.lastFrameTime + 1000 / container.fpsLimit) {
7664
+ container.draw();
7665
+ return;
7666
+ }
7667
+
7668
+ const deltaValue = timestamp - container.lastFrameTime;
7669
+ const delta = {
7670
+ value: deltaValue,
7671
+ factor: 60 * deltaValue / 1000
7672
+ };
7673
+ container.lastFrameTime = timestamp;
7674
+ container.particles.draw(delta);
7675
+
7676
+ if (container.getAnimationStatus()) {
7677
+ container.draw();
7678
+ }
7679
+ } catch (e) {
7680
+ console.error("tsParticles error in animation loop", e);
7681
+ }
7682
+ }
7683
+
7684
+ }
7685
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Events/ClickEvent.js
7686
+ class ClickEvent {
7687
+ constructor() {
7688
+ this.enable = false;
7689
+ this.mode = [];
7690
+ }
7691
+
7692
+ load(data) {
7693
+ if (data === undefined) {
7694
+ return;
7695
+ }
7696
+
7697
+ if (data.enable !== undefined) {
7698
+ this.enable = data.enable;
7699
+ }
7700
+
7701
+ if (data.mode !== undefined) {
7702
+ this.mode = data.mode;
7703
+ }
7704
+ }
7705
+
7706
+ }
7707
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Events/DivEvent.js
7708
+
7709
+ class DivEvent {
7710
+ constructor() {
7711
+ this.selectors = [];
7712
+ this.enable = false;
7713
+ this.mode = [];
7714
+ this.type = DivType.circle;
7715
+ }
7716
+
7717
+ get elementId() {
7718
+ return this.ids;
7719
+ }
7720
+
7721
+ set elementId(value) {
7722
+ this.ids = value;
7723
+ }
7724
+
7725
+ get el() {
7726
+ return this.elementId;
7727
+ }
7728
+
7729
+ set el(value) {
7730
+ this.elementId = value;
7731
+ }
7732
+
7733
+ get ids() {
7734
+ if (this.selectors instanceof Array) {
7735
+ return this.selectors.map(t => t.replace("#", ""));
7736
+ } else {
7737
+ return this.selectors.replace("#", "");
7738
+ }
7739
+ }
7740
+
7741
+ set ids(value) {
7742
+ if (value instanceof Array) {
7743
+ this.selectors = value.map(t => `#${t}`);
7744
+ } else {
7745
+ this.selectors = `#${value}`;
7746
+ }
7747
+ }
7748
+
7749
+ load(data) {
7750
+ var _a, _b;
7751
+
7752
+ if (data === undefined) {
7753
+ return;
7754
+ }
7755
+
7756
+ const ids = (_b = (_a = data.ids) !== null && _a !== void 0 ? _a : data.elementId) !== null && _b !== void 0 ? _b : data.el;
7757
+
7758
+ if (ids !== undefined) {
7759
+ this.ids = ids;
7760
+ }
7761
+
7762
+ if (data.selectors !== undefined) {
7763
+ this.selectors = data.selectors;
7764
+ }
7765
+
7766
+ if (data.enable !== undefined) {
7767
+ this.enable = data.enable;
7768
+ }
7769
+
7770
+ if (data.mode !== undefined) {
7771
+ this.mode = data.mode;
7772
+ }
7773
+
7774
+ if (data.type !== undefined) {
7775
+ this.type = data.type;
7776
+ }
7777
+ }
7778
+
7779
+ }
7780
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Events/Parallax.js
7781
+ class Parallax {
7782
+ constructor() {
7783
+ this.enable = false;
7784
+ this.force = 2;
7785
+ this.smooth = 10;
7786
+ }
7787
+
7788
+ load(data) {
7789
+ if (data === undefined) {
7790
+ return;
7791
+ }
7792
+
7793
+ if (data.enable !== undefined) {
7794
+ this.enable = data.enable;
7795
+ }
7796
+
7797
+ if (data.force !== undefined) {
7798
+ this.force = data.force;
7799
+ }
7800
+
7801
+ if (data.smooth !== undefined) {
7802
+ this.smooth = data.smooth;
7803
+ }
7804
+ }
7805
+
7806
+ }
7807
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Events/HoverEvent.js
7808
+
7809
+ class HoverEvent {
7810
+ constructor() {
7811
+ this.enable = false;
7812
+ this.mode = [];
7813
+ this.parallax = new Parallax();
7814
+ }
7815
+
7816
+ load(data) {
7817
+ if (data === undefined) {
7818
+ return;
7819
+ }
7820
+
7821
+ if (data.enable !== undefined) {
7822
+ this.enable = data.enable;
7823
+ }
7824
+
7825
+ if (data.mode !== undefined) {
7826
+ this.mode = data.mode;
7827
+ }
7828
+
7829
+ this.parallax.load(data.parallax);
7830
+ }
7831
+
7832
+ }
7833
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Events/Events.js
7834
+
7835
+
7836
+
7837
+ class Events {
7838
+ constructor() {
7839
+ this.onClick = new ClickEvent();
7840
+ this.onDiv = new DivEvent();
7841
+ this.onHover = new HoverEvent();
7842
+ this.resize = true;
7843
+ }
7844
+
7845
+ get onclick() {
7846
+ return this.onClick;
7847
+ }
7848
+
7849
+ set onclick(value) {
7850
+ this.onClick = value;
7851
+ }
7852
+
7853
+ get ondiv() {
7854
+ return this.onDiv;
7855
+ }
7856
+
7857
+ set ondiv(value) {
7858
+ this.onDiv = value;
7859
+ }
7860
+
7861
+ get onhover() {
7862
+ return this.onHover;
7863
+ }
7864
+
7865
+ set onhover(value) {
7866
+ this.onHover = value;
7867
+ }
7868
+
7869
+ load(data) {
7870
+ var _a, _b, _c;
7871
+
7872
+ if (data === undefined) {
7873
+ return;
7874
+ }
7875
+
7876
+ this.onClick.load((_a = data.onClick) !== null && _a !== void 0 ? _a : data.onclick);
7877
+ const onDiv = (_b = data.onDiv) !== null && _b !== void 0 ? _b : data.ondiv;
7878
+
7879
+ if (onDiv !== undefined) {
7880
+ if (onDiv instanceof Array) {
7881
+ this.onDiv = onDiv.map(div => {
7882
+ const tmp = new DivEvent();
7883
+ tmp.load(div);
7884
+ return tmp;
7885
+ });
7886
+ } else {
7887
+ this.onDiv = new DivEvent();
7888
+ this.onDiv.load(onDiv);
7889
+ }
7890
+ }
7891
+
7892
+ this.onHover.load((_c = data.onHover) !== null && _c !== void 0 ? _c : data.onhover);
7893
+
7894
+ if (data.resize !== undefined) {
7895
+ this.resize = data.resize;
7896
+ }
7897
+ }
7898
+
7899
+ }
7900
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Modes/BubbleBase.js
7901
+
7902
+ class BubbleBase {
7903
+ constructor() {
7904
+ this.distance = 200;
7905
+ this.duration = 0.4;
7906
+ }
7907
+
7908
+ load(data) {
7909
+ if (data === undefined) {
7910
+ return;
7911
+ }
7912
+
7913
+ if (data.distance !== undefined) {
7914
+ this.distance = data.distance;
7915
+ }
7916
+
7917
+ if (data.duration !== undefined) {
7918
+ this.duration = data.duration;
7919
+ }
7920
+
7921
+ if (data.opacity !== undefined) {
7922
+ this.opacity = data.opacity;
7923
+ }
7924
+
7925
+ if (data.color !== undefined) {
7926
+ if (data.color instanceof Array) {
7927
+ this.color = data.color.map(s => OptionsColor.create(undefined, s));
7928
+ } else {
7929
+ if (this.color instanceof Array) {
7930
+ this.color = new OptionsColor();
7931
+ }
7932
+
7933
+ this.color = OptionsColor.create(this.color, data.color);
7934
+ }
7935
+ }
7936
+
7937
+ if (data.size !== undefined) {
7938
+ this.size = data.size;
7939
+ }
7940
+ }
7941
+
7942
+ }
7943
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Modes/BubbleDiv.js
7944
+
7945
+ class BubbleDiv extends BubbleBase {
7946
+ constructor() {
7947
+ super();
7948
+ this.selectors = [];
7949
+ }
7950
+
7951
+ get ids() {
7952
+ if (this.selectors instanceof Array) {
7953
+ return this.selectors.map(t => t.replace("#", ""));
7954
+ } else {
7955
+ return this.selectors.replace("#", "");
7956
+ }
7957
+ }
7958
+
7959
+ set ids(value) {
7960
+ if (value instanceof Array) {
7961
+ this.selectors = value.map(t => `#${t}`);
7962
+ } else {
7963
+ this.selectors = `#${value}`;
7964
+ }
7965
+ }
7966
+
7967
+ load(data) {
7968
+ super.load(data);
7969
+
7970
+ if (data === undefined) {
7971
+ return;
7972
+ }
7973
+
7974
+ if (data.ids !== undefined) {
7975
+ this.ids = data.ids;
7976
+ }
7977
+
7978
+ if (data.selectors !== undefined) {
7979
+ this.selectors = data.selectors;
7980
+ }
7981
+ }
7982
+
7983
+ }
7984
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Modes/Bubble.js
7985
+
7986
+
7987
+ class Bubble extends BubbleBase {
7988
+ load(data) {
7989
+ super.load(data);
7990
+
7991
+ if (!(data !== undefined && data.divs !== undefined)) {
7992
+ return;
7993
+ }
7994
+
7995
+ if (data.divs instanceof Array) {
7996
+ this.divs = data.divs.map(s => {
7997
+ const tmp = new BubbleDiv();
7998
+ tmp.load(s);
7999
+ return tmp;
8000
+ });
8001
+ } else {
8002
+ if (this.divs instanceof Array || !this.divs) {
8003
+ this.divs = new BubbleDiv();
8004
+ }
8005
+
8006
+ this.divs.load(data.divs);
8007
+ }
8008
+ }
8009
+
8010
+ }
8011
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Modes/ConnectLinks.js
8012
+ class ConnectLinks {
8013
+ constructor() {
8014
+ this.opacity = 0.5;
8015
+ }
8016
+
8017
+ load(data) {
8018
+ if (!(data !== undefined && data.opacity !== undefined)) {
8019
+ return;
8020
+ }
8021
+
8022
+ this.opacity = data.opacity;
8023
+ }
8024
+
8025
+ }
8026
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Modes/Connect.js
8027
+
8028
+ class Connect {
8029
+ constructor() {
8030
+ this.distance = 80;
8031
+ this.links = new ConnectLinks();
8032
+ this.radius = 60;
8033
+ }
8034
+
8035
+ get line_linked() {
8036
+ return this.links;
8037
+ }
8038
+
8039
+ set line_linked(value) {
8040
+ this.links = value;
8041
+ }
8042
+
8043
+ get lineLinked() {
8044
+ return this.links;
8045
+ }
8046
+
8047
+ set lineLinked(value) {
8048
+ this.links = value;
8049
+ }
8050
+
8051
+ load(data) {
8052
+ var _a, _b;
8053
+
8054
+ if (data === undefined) {
8055
+ return;
8056
+ }
8057
+
8058
+ if (data.distance !== undefined) {
8059
+ this.distance = data.distance;
8060
+ }
8061
+
8062
+ this.links.load((_b = (_a = data.links) !== null && _a !== void 0 ? _a : data.lineLinked) !== null && _b !== void 0 ? _b : data.line_linked);
8063
+
8064
+ if (data.radius !== undefined) {
8065
+ this.radius = data.radius;
8066
+ }
8067
+ }
8068
+
8069
+ }
8070
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Modes/GrabLinks.js
8071
+
8072
+ class GrabLinks {
8073
+ constructor() {
8074
+ this.blink = false;
8075
+ this.consent = false;
8076
+ this.opacity = 1;
8077
+ }
8078
+
8079
+ load(data) {
8080
+ if (data === undefined) {
8081
+ return;
8082
+ }
8083
+
8084
+ if (data.blink !== undefined) {
8085
+ this.blink = data.blink;
8086
+ }
8087
+
8088
+ if (data.color !== undefined) {
8089
+ this.color = OptionsColor.create(this.color, data.color);
8090
+ }
8091
+
8092
+ if (data.consent !== undefined) {
8093
+ this.consent = data.consent;
8094
+ }
8095
+
8096
+ if (data.opacity !== undefined) {
8097
+ this.opacity = data.opacity;
8098
+ }
8099
+ }
8100
+
8101
+ }
8102
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Modes/Grab.js
8103
+
8104
+ class Grab {
8105
+ constructor() {
8106
+ this.distance = 100;
8107
+ this.links = new GrabLinks();
8108
+ }
8109
+
8110
+ get line_linked() {
8111
+ return this.links;
8112
+ }
8113
+
8114
+ set line_linked(value) {
8115
+ this.links = value;
8116
+ }
8117
+
8118
+ get lineLinked() {
8119
+ return this.links;
8120
+ }
8121
+
8122
+ set lineLinked(value) {
8123
+ this.links = value;
8124
+ }
8125
+
8126
+ load(data) {
8127
+ var _a, _b;
8128
+
8129
+ if (data === undefined) {
8130
+ return;
8131
+ }
8132
+
8133
+ if (data.distance !== undefined) {
8134
+ this.distance = data.distance;
8135
+ }
8136
+
8137
+ this.links.load((_b = (_a = data.links) !== null && _a !== void 0 ? _a : data.lineLinked) !== null && _b !== void 0 ? _b : data.line_linked);
8138
+ }
8139
+
8140
+ }
8141
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Modes/Remove.js
8142
+ class Remove {
8143
+ constructor() {
8144
+ this.quantity = 2;
8145
+ }
8146
+
8147
+ get particles_nb() {
8148
+ return this.quantity;
8149
+ }
8150
+
8151
+ set particles_nb(value) {
8152
+ this.quantity = value;
8153
+ }
8154
+
8155
+ load(data) {
8156
+ var _a;
8157
+
8158
+ if (data === undefined) {
8159
+ return;
8160
+ }
8161
+
8162
+ const quantity = (_a = data.quantity) !== null && _a !== void 0 ? _a : data.particles_nb;
8163
+
8164
+ if (quantity !== undefined) {
8165
+ this.quantity = quantity;
8166
+ }
8167
+ }
8168
+
8169
+ }
8170
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Modes/Push.js
8171
+ class Push {
8172
+ constructor() {
8173
+ this.quantity = 4;
8174
+ }
8175
+
8176
+ get particles_nb() {
8177
+ return this.quantity;
8178
+ }
8179
+
8180
+ set particles_nb(value) {
8181
+ this.quantity = value;
8182
+ }
8183
+
8184
+ load(data) {
8185
+ var _a;
8186
+
8187
+ if (data === undefined) {
8188
+ return;
8189
+ }
8190
+
8191
+ const quantity = (_a = data.quantity) !== null && _a !== void 0 ? _a : data.particles_nb;
8192
+
8193
+ if (quantity !== undefined) {
8194
+ this.quantity = quantity;
8195
+ }
8196
+ }
8197
+
8198
+ }
8199
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Modes/RepulseBase.js
8200
+ class RepulseBase {
8201
+ constructor() {
8202
+ this.distance = 200;
8203
+ this.duration = 0.4;
8204
+ this.speed = 1;
8205
+ }
8206
+
8207
+ load(data) {
8208
+ if (data === undefined) {
8209
+ return;
8210
+ }
8211
+
8212
+ if (data.distance !== undefined) {
8213
+ this.distance = data.distance;
8214
+ }
8215
+
8216
+ if (data.duration !== undefined) {
8217
+ this.duration = data.duration;
8218
+ }
8219
+
8220
+ if (data.speed !== undefined) {
8221
+ this.speed = data.speed;
8222
+ }
8223
+ }
8224
+
8225
+ }
8226
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Modes/RepulseDiv.js
8227
+
8228
+ class RepulseDiv extends RepulseBase {
8229
+ constructor() {
8230
+ super();
8231
+ this.selectors = [];
8232
+ }
8233
+
8234
+ get ids() {
8235
+ if (this.selectors instanceof Array) {
8236
+ return this.selectors.map(t => t.replace("#", ""));
8237
+ } else {
8238
+ return this.selectors.replace("#", "");
8239
+ }
8240
+ }
8241
+
8242
+ set ids(value) {
8243
+ if (value instanceof Array) {
8244
+ this.selectors = value.map(() => `#${value}`);
8245
+ } else {
8246
+ this.selectors = `#${value}`;
8247
+ }
8248
+ }
8249
+
8250
+ load(data) {
8251
+ super.load(data);
8252
+
8253
+ if (data === undefined) {
8254
+ return;
8255
+ }
8256
+
8257
+ if (data.ids !== undefined) {
8258
+ this.ids = data.ids;
8259
+ }
8260
+
8261
+ if (data.selectors !== undefined) {
8262
+ this.selectors = data.selectors;
8263
+ }
8264
+ }
8265
+
8266
+ }
8267
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Modes/Repulse.js
8268
+
8269
+
8270
+ class Repulse extends RepulseBase {
8271
+ load(data) {
8272
+ super.load(data);
8273
+
8274
+ if ((data === null || data === void 0 ? void 0 : data.divs) === undefined) {
8275
+ return;
8276
+ }
8277
+
8278
+ if (data.divs instanceof Array) {
8279
+ this.divs = data.divs.map(s => {
8280
+ const tmp = new RepulseDiv();
8281
+ tmp.load(s);
8282
+ return tmp;
8283
+ });
8284
+ } else {
8285
+ if (this.divs instanceof Array || !this.divs) {
8286
+ this.divs = new RepulseDiv();
8287
+ }
8288
+
8289
+ this.divs.load(data.divs);
8290
+ }
8291
+ }
8292
+
8293
+ }
8294
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Modes/Slow.js
8295
+ class Slow {
8296
+ constructor() {
8297
+ this.factor = 3;
8298
+ this.radius = 200;
8299
+ }
8300
+
8301
+ get active() {
8302
+ return false;
8303
+ }
8304
+
8305
+ set active(_value) {}
8306
+
8307
+ load(data) {
8308
+ if (data === undefined) {
8309
+ return;
8310
+ }
8311
+
8312
+ if (data.factor !== undefined) {
8313
+ this.factor = data.factor;
8314
+ }
8315
+
8316
+ if (data.radius !== undefined) {
8317
+ this.radius = data.radius;
8318
+ }
8319
+ }
8320
+
8321
+ }
8322
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Modes/Trail.js
8323
+
8324
+ class Trail_Trail {
8325
+ constructor() {
8326
+ this.delay = 1;
8327
+ this.quantity = 1;
8328
+ }
8329
+
8330
+ load(data) {
8331
+ if (data === undefined) {
8332
+ return;
8333
+ }
8334
+
8335
+ if (data.delay !== undefined) {
8336
+ this.delay = data.delay;
8337
+ }
8338
+
8339
+ if (data.quantity !== undefined) {
8340
+ this.quantity = data.quantity;
8341
+ }
8342
+
8343
+ if (data.particles !== undefined) {
8344
+ this.particles = Utils.deepExtend({}, data.particles);
8345
+ }
8346
+ }
8347
+
8348
+ }
8349
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Modes/Attract.js
8350
+ class Attract_Attract {
8351
+ constructor() {
8352
+ this.distance = 200;
8353
+ this.duration = 0.4;
8354
+ this.speed = 1;
8355
+ }
8356
+
8357
+ load(data) {
8358
+ if (data === undefined) {
8359
+ return;
8360
+ }
8361
+
8362
+ if (data.distance !== undefined) {
8363
+ this.distance = data.distance;
8364
+ }
8365
+
8366
+ if (data.duration !== undefined) {
8367
+ this.duration = data.duration;
8368
+ }
8369
+
8370
+ if (data.speed !== undefined) {
8371
+ this.speed = data.speed;
8372
+ }
8373
+ }
8374
+
8375
+ }
8376
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Modes/LightGradient.js
8377
+
8378
+ class LightGradient {
8379
+ constructor() {
8380
+ this.start = new OptionsColor();
8381
+ this.stop = new OptionsColor();
8382
+ this.start.value = "#ffffff";
8383
+ this.stop.value = "#000000";
8384
+ }
8385
+
8386
+ load(data) {
8387
+ if (data === undefined) {
8388
+ return;
8389
+ }
8390
+
8391
+ this.start = OptionsColor.create(this.start, data.start);
8392
+ this.stop = OptionsColor.create(this.stop, data.stop);
8393
+ }
8394
+
8395
+ }
8396
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Modes/LightArea.js
8397
+
8398
+ class LightArea {
8399
+ constructor() {
8400
+ this.gradient = new LightGradient();
8401
+ this.radius = 1000;
8402
+ }
8403
+
8404
+ load(data) {
8405
+ if (data === undefined) {
8406
+ return;
8407
+ }
8408
+
8409
+ this.gradient.load(data.gradient);
8410
+
8411
+ if (data.radius !== undefined) {
8412
+ this.radius = data.radius;
8413
+ }
8414
+ }
8415
+
8416
+ }
8417
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Modes/LightShadow.js
8418
+
8419
+ class LightShadow {
8420
+ constructor() {
8421
+ this.color = new OptionsColor();
8422
+ this.color.value = "#000000";
8423
+ this.length = 2000;
8424
+ }
8425
+
8426
+ load(data) {
8427
+ if (data === undefined) {
8428
+ return;
8429
+ }
8430
+
8431
+ this.color = OptionsColor.create(this.color, data.color);
8432
+
8433
+ if (data.length !== undefined) {
8434
+ this.length = data.length;
8435
+ }
8436
+ }
8437
+
8438
+ }
8439
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Modes/Light.js
8440
+
8441
+
8442
+ class Light {
8443
+ constructor() {
8444
+ this.area = new LightArea();
8445
+ this.shadow = new LightShadow();
8446
+ }
8447
+
8448
+ load(data) {
8449
+ if (data === undefined) {
8450
+ return;
8451
+ }
8452
+
8453
+ this.area.load(data.area);
8454
+ this.shadow.load(data.shadow);
8455
+ }
8456
+
8457
+ }
8458
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Modes/Bounce.js
8459
+ class Bounce_Bounce {
8460
+ constructor() {
8461
+ this.distance = 200;
8462
+ }
8463
+
8464
+ load(data) {
8465
+ if (!data) {
8466
+ return;
8467
+ }
8468
+
8469
+ if (data.distance !== undefined) {
8470
+ this.distance = data.distance;
8471
+ }
8472
+ }
8473
+
8474
+ }
8475
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Modes/Modes.js
8476
+
8477
+
8478
+
8479
+
8480
+
8481
+
8482
+
8483
+
8484
+
8485
+
8486
+
8487
+ class Modes {
8488
+ constructor() {
8489
+ this.attract = new Attract_Attract();
8490
+ this.bounce = new Bounce_Bounce();
8491
+ this.bubble = new Bubble();
8492
+ this.connect = new Connect();
8493
+ this.grab = new Grab();
8494
+ this.light = new Light();
8495
+ this.push = new Push();
8496
+ this.remove = new Remove();
8497
+ this.repulse = new Repulse();
8498
+ this.slow = new Slow();
8499
+ this.trail = new Trail_Trail();
8500
+ }
8501
+
8502
+ load(data) {
8503
+ if (data === undefined) {
8504
+ return;
8505
+ }
8506
+
8507
+ this.attract.load(data.attract);
8508
+ this.bubble.load(data.bubble);
8509
+ this.connect.load(data.connect);
8510
+ this.grab.load(data.grab);
8511
+ this.light.load(data.light);
8512
+ this.push.load(data.push);
8513
+ this.remove.load(data.remove);
8514
+ this.repulse.load(data.repulse);
8515
+ this.slow.load(data.slow);
8516
+ this.trail.load(data.trail);
8517
+ }
8518
+
8519
+ }
8520
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Interactivity/Interactivity.js
8521
+
8522
+
8523
+
8524
+ class Interactivity {
8525
+ constructor() {
8526
+ this.detectsOn = InteractivityDetect.canvas;
8527
+ this.events = new Events();
8528
+ this.modes = new Modes();
8529
+ }
8530
+
8531
+ get detect_on() {
8532
+ return this.detectsOn;
8533
+ }
8534
+
8535
+ set detect_on(value) {
8536
+ this.detectsOn = value;
8537
+ }
8538
+
8539
+ load(data) {
8540
+ var _a, _b, _c;
8541
+
8542
+ if (data === undefined) {
8543
+ return;
8544
+ }
8545
+
8546
+ const detectsOn = (_a = data.detectsOn) !== null && _a !== void 0 ? _a : data.detect_on;
8547
+
8548
+ if (detectsOn !== undefined) {
8549
+ this.detectsOn = detectsOn;
8550
+ }
8551
+
8552
+ this.events.load(data.events);
8553
+ this.modes.load(data.modes);
8554
+
8555
+ if (((_c = (_b = data.modes) === null || _b === void 0 ? void 0 : _b.slow) === null || _c === void 0 ? void 0 : _c.active) === true) {
8556
+ if (this.events.onHover.mode instanceof Array) {
8557
+ if (this.events.onHover.mode.indexOf(HoverMode.slow) < 0) {
8558
+ this.events.onHover.mode.push(HoverMode.slow);
8559
+ }
8560
+ } else if (this.events.onHover.mode !== HoverMode.slow) {
8561
+ this.events.onHover.mode = [this.events.onHover.mode, HoverMode.slow];
8562
+ }
8563
+ }
8564
+ }
8565
+
8566
+ }
8567
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/BackgroundMask/BackgroundMaskCover.js
8568
+
8569
+ class BackgroundMaskCover {
8570
+ constructor() {
8571
+ this.color = new OptionsColor();
8572
+ this.opacity = 1;
8573
+ }
8574
+
8575
+ load(data) {
8576
+ if (data === undefined) {
8577
+ return;
8578
+ }
8579
+
8580
+ if (data.color !== undefined) {
8581
+ this.color = OptionsColor.create(this.color, data.color);
8582
+ }
8583
+
8584
+ if (data.opacity !== undefined) {
8585
+ this.opacity = data.opacity;
8586
+ }
8587
+ }
8588
+
8589
+ }
8590
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/BackgroundMask/BackgroundMask.js
8591
+
8592
+ class BackgroundMask {
8593
+ constructor() {
8594
+ this.composite = "destination-out";
8595
+ this.cover = new BackgroundMaskCover();
8596
+ this.enable = false;
8597
+ }
8598
+
8599
+ load(data) {
8600
+ if (data === undefined) {
8601
+ return;
8602
+ }
8603
+
8604
+ if (data.composite !== undefined) {
8605
+ this.composite = data.composite;
8606
+ }
8607
+
8608
+ if (data.cover !== undefined) {
8609
+ const cover = data.cover;
8610
+ const color = typeof data.cover === "string" ? {
8611
+ color: data.cover
8612
+ } : data.cover;
8613
+ this.cover.load(cover.color !== undefined ? cover : {
8614
+ color: color
8615
+ });
8616
+ }
8617
+
8618
+ if (data.enable !== undefined) {
8619
+ this.enable = data.enable;
8620
+ }
8621
+ }
8622
+
8623
+ }
8624
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Background/Background.js
8625
+
8626
+ class Background {
8627
+ constructor() {
8628
+ this.color = new OptionsColor();
8629
+ this.color.value = "";
8630
+ this.image = "";
8631
+ this.position = "";
8632
+ this.repeat = "";
8633
+ this.size = "";
8634
+ this.opacity = 1;
8635
+ }
8636
+
8637
+ load(data) {
8638
+ if (data === undefined) {
8639
+ return;
8640
+ }
8641
+
8642
+ if (data.color !== undefined) {
8643
+ this.color = OptionsColor.create(this.color, data.color);
8644
+ }
8645
+
8646
+ if (data.image !== undefined) {
8647
+ this.image = data.image;
8648
+ }
8649
+
8650
+ if (data.position !== undefined) {
8651
+ this.position = data.position;
8652
+ }
8653
+
8654
+ if (data.repeat !== undefined) {
8655
+ this.repeat = data.repeat;
8656
+ }
8657
+
8658
+ if (data.size !== undefined) {
8659
+ this.size = data.size;
8660
+ }
8661
+
8662
+ if (data.opacity !== undefined) {
8663
+ this.opacity = data.opacity;
8664
+ }
8665
+ }
8666
+
8667
+ }
8668
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Infection/InfectionStage.js
8669
+
8670
+ class InfectionStage {
8671
+ constructor() {
8672
+ this.color = new OptionsColor();
8673
+ this.color.value = "#ff0000";
8674
+ this.radius = 0;
8675
+ this.rate = 1;
8676
+ }
8677
+
8678
+ load(data) {
8679
+ if (data === undefined) {
8680
+ return;
8681
+ }
8682
+
8683
+ if (data.color !== undefined) {
8684
+ this.color = OptionsColor.create(this.color, data.color);
8685
+ }
8686
+
8687
+ this.duration = data.duration;
8688
+ this.infectedStage = data.infectedStage;
8689
+
8690
+ if (data.radius !== undefined) {
8691
+ this.radius = data.radius;
8692
+ }
8693
+
8694
+ if (data.rate !== undefined) {
8695
+ this.rate = data.rate;
8696
+ }
8697
+ }
8698
+
8699
+ }
8700
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Infection/Infection.js
8701
+
8702
+ class Infection {
8703
+ constructor() {
8704
+ this.cure = false;
8705
+ this.delay = 0;
8706
+ this.enable = false;
8707
+ this.infections = 0;
8708
+ this.stages = [];
8709
+ }
8710
+
8711
+ load(data) {
8712
+ if (data === undefined) {
8713
+ return;
8714
+ }
8715
+
8716
+ if (data.cure !== undefined) {
8717
+ this.cure = data.cure;
8718
+ }
8719
+
8720
+ if (data.delay !== undefined) {
8721
+ this.delay = data.delay;
8722
+ }
8723
+
8724
+ if (data.enable !== undefined) {
8725
+ this.enable = data.enable;
8726
+ }
8727
+
8728
+ if (data.infections !== undefined) {
8729
+ this.infections = data.infections;
8730
+ }
8731
+
8732
+ if (data.stages === undefined) {
8733
+ return;
8734
+ }
8735
+
8736
+ this.stages = data.stages.map(t => {
8737
+ const s = new InfectionStage();
8738
+ s.load(t);
8739
+ return s;
8740
+ });
8741
+ }
8742
+
8743
+ }
8744
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Theme/ThemeDefault.js
8745
+
8746
+ class ThemeDefault {
8747
+ constructor() {
8748
+ this.mode = ThemeMode.any;
8749
+ this.value = false;
8750
+ }
8751
+
8752
+ load(data) {
8753
+ if (data === undefined) {
8754
+ return;
8755
+ }
8756
+
8757
+ if (data.mode !== undefined) {
8758
+ this.mode = data.mode;
8759
+ }
8760
+
8761
+ if (data.value !== undefined) {
8762
+ this.value = data.value;
8763
+ }
8764
+ }
8765
+
8766
+ }
8767
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Theme/Theme.js
8768
+
8769
+
8770
+ class Theme {
8771
+ constructor() {
8772
+ this.name = "";
8773
+ this.default = new ThemeDefault();
8774
+ }
8775
+
8776
+ load(data) {
8777
+ if (data === undefined) {
8778
+ return;
8779
+ }
8780
+
8781
+ if (data.name !== undefined) {
8782
+ this.name = data.name;
8783
+ }
8784
+
8785
+ this.default.load(data.default);
8786
+
8787
+ if (data.options !== undefined) {
8788
+ this.options = Utils.deepExtend({}, data.options);
8789
+ }
8790
+ }
8791
+
8792
+ }
8793
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/FullScreen/FullScreen.js
8794
+ class FullScreen {
8795
+ constructor() {
8796
+ this.enable = false;
8797
+ this.zIndex = -1;
8798
+ }
8799
+
8800
+ load(data) {
8801
+ if (!data) {
8802
+ return;
8803
+ }
8804
+
8805
+ if (data.enable !== undefined) {
8806
+ this.enable = data.enable;
8807
+ }
8808
+
8809
+ if (data.zIndex !== undefined) {
8810
+ this.zIndex = data.zIndex;
8811
+ }
8812
+ }
8813
+
8814
+ }
8815
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Motion/MotionReduce.js
8816
+ class MotionReduce {
8817
+ constructor() {
8818
+ this.factor = 4;
8819
+ this.value = true;
8820
+ }
8821
+
8822
+ load(data) {
8823
+ if (!data) {
8824
+ return;
8825
+ }
8826
+
8827
+ if (data.factor !== undefined) {
8828
+ this.factor = data.factor;
8829
+ }
8830
+
8831
+ if (data.value !== undefined) {
8832
+ this.value = data.value;
8833
+ }
8834
+ }
8835
+
8836
+ }
8837
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Motion/Motion.js
8838
+
8839
+ class Motion {
8840
+ constructor() {
8841
+ this.disable = false;
8842
+ this.reduce = new MotionReduce();
8843
+ }
8844
+
8845
+ load(data) {
8846
+ if (!data) {
8847
+ return;
8848
+ }
8849
+
8850
+ if (data.disable !== undefined) {
8851
+ this.disable = data.disable;
8852
+ }
8853
+
8854
+ this.reduce.load(data.reduce);
8855
+ }
8856
+
8857
+ }
8858
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/ManualParticle.js
8859
+
8860
+ class ManualParticle {
8861
+ load(data) {
8862
+ var _a, _b;
8863
+
8864
+ if (!data) {
8865
+ return;
8866
+ }
8867
+
8868
+ if (data.position !== undefined) {
8869
+ this.position = {
8870
+ x: (_a = data.position.x) !== null && _a !== void 0 ? _a : 50,
8871
+ y: (_b = data.position.y) !== null && _b !== void 0 ? _b : 50
8872
+ };
8873
+ }
8874
+
8875
+ if (data.options !== undefined) {
8876
+ this.options = Utils.deepExtend({}, data.options);
8877
+ }
8878
+ }
8879
+
8880
+ }
8881
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Responsive.js
8882
+
8883
+ class Responsive {
8884
+ constructor() {
8885
+ this.maxWidth = Infinity;
8886
+ this.options = {};
8887
+ }
8888
+
8889
+ load(data) {
8890
+ if (!data) {
8891
+ return;
8892
+ }
8893
+
8894
+ if (data.maxWidth !== undefined) {
8895
+ this.maxWidth = data.maxWidth;
8896
+ }
8897
+
8898
+ if (data.options !== undefined) {
8899
+ this.options = Utils.deepExtend({}, data.options);
8900
+ }
8901
+ }
8902
+
8903
+ }
8904
+ ;// CONCATENATED MODULE: ./dist/browser/Options/Classes/Options.js
8905
+
8906
+
8907
+
8908
+
8909
+
8910
+
8911
+
8912
+
8913
+
8914
+
8915
+
8916
+
8917
+ class Options {
8918
+ constructor() {
8919
+ this.autoPlay = true;
8920
+ this.background = new Background();
8921
+ this.backgroundMask = new BackgroundMask();
8922
+ this.fullScreen = new FullScreen();
8923
+ this.detectRetina = true;
8924
+ this.fpsLimit = 60;
8925
+ this.infection = new Infection();
8926
+ this.interactivity = new Interactivity();
8927
+ this.manualParticles = [];
8928
+ this.motion = new Motion();
8929
+ this.particles = new Particles();
8930
+ this.pauseOnBlur = true;
8931
+ this.pauseOnOutsideViewport = false;
8932
+ this.responsive = [];
8933
+ this.themes = [];
8934
+ }
8935
+
8936
+ get fps_limit() {
8937
+ return this.fpsLimit;
8938
+ }
8939
+
8940
+ set fps_limit(value) {
8941
+ this.fpsLimit = value;
8942
+ }
8943
+
8944
+ get retina_detect() {
8945
+ return this.detectRetina;
8946
+ }
8947
+
8948
+ set retina_detect(value) {
8949
+ this.detectRetina = value;
8950
+ }
8951
+
8952
+ get backgroundMode() {
8953
+ return this.fullScreen;
8954
+ }
8955
+
8956
+ set backgroundMode(value) {
8957
+ this.fullScreen.load(value);
8958
+ }
8959
+
8960
+ load(data) {
8961
+ var _a, _b, _c;
8962
+
8963
+ if (data === undefined) {
8964
+ return;
8965
+ }
8966
+
8967
+ if (data.preset !== undefined) {
8968
+ if (data.preset instanceof Array) {
8969
+ for (const preset of data.preset) {
8970
+ this.importPreset(preset);
8971
+ }
8972
+ } else {
8973
+ this.importPreset(data.preset);
8974
+ }
8975
+ }
8976
+
8977
+ if (data.autoPlay !== undefined) {
8978
+ this.autoPlay = data.autoPlay;
8979
+ }
8980
+
8981
+ const detectRetina = (_a = data.detectRetina) !== null && _a !== void 0 ? _a : data.retina_detect;
8982
+
8983
+ if (detectRetina !== undefined) {
8984
+ this.detectRetina = detectRetina;
8985
+ }
8986
+
8987
+ const fpsLimit = (_b = data.fpsLimit) !== null && _b !== void 0 ? _b : data.fps_limit;
8988
+
8989
+ if (fpsLimit !== undefined) {
8990
+ this.fpsLimit = fpsLimit;
8991
+ }
8992
+
8993
+ if (data.pauseOnBlur !== undefined) {
8994
+ this.pauseOnBlur = data.pauseOnBlur;
8995
+ }
8996
+
8997
+ if (data.pauseOnOutsideViewport !== undefined) {
8998
+ this.pauseOnOutsideViewport = data.pauseOnOutsideViewport;
8999
+ }
9000
+
9001
+ this.background.load(data.background);
9002
+ this.fullScreen.load((_c = data.fullScreen) !== null && _c !== void 0 ? _c : data.backgroundMode);
9003
+ this.backgroundMask.load(data.backgroundMask);
9004
+ this.infection.load(data.infection);
9005
+ this.interactivity.load(data.interactivity);
9006
+
9007
+ if (data.manualParticles !== undefined) {
9008
+ this.manualParticles = data.manualParticles.map(t => {
9009
+ const tmp = new ManualParticle();
9010
+ tmp.load(t);
9011
+ return tmp;
9012
+ });
9013
+ }
9014
+
9015
+ this.motion.load(data.motion);
9016
+ this.particles.load(data.particles);
9017
+ Plugins.loadOptions(this, data);
9018
+
9019
+ if (data.responsive !== undefined) {
9020
+ for (const responsive of data.responsive) {
9021
+ const optResponsive = new Responsive();
9022
+ optResponsive.load(responsive);
9023
+ this.responsive.push(optResponsive);
9024
+ }
9025
+ }
9026
+
9027
+ this.responsive.sort((a, b) => a.maxWidth - b.maxWidth);
9028
+
9029
+ if (data.themes !== undefined) {
9030
+ for (const theme of data.themes) {
9031
+ const optTheme = new Theme();
9032
+ optTheme.load(theme);
9033
+ this.themes.push(optTheme);
9034
+ }
9035
+ }
9036
+ }
9037
+
9038
+ setTheme(name) {
9039
+ if (name) {
9040
+ const chosenTheme = this.themes.find(theme => theme.name === name);
9041
+
9042
+ if (chosenTheme) {
9043
+ this.load(chosenTheme.options);
9044
+ }
9045
+ } else {
9046
+ const clientDarkMode = typeof matchMedia !== "undefined" && matchMedia("(prefers-color-scheme: dark)").matches;
9047
+ let defaultTheme = this.themes.find(theme => theme.default.value && (theme.default.mode === ThemeMode.dark && clientDarkMode || theme.default.mode === ThemeMode.light && !clientDarkMode));
9048
+
9049
+ if (!defaultTheme) {
9050
+ defaultTheme = this.themes.find(theme => theme.default.value && theme.default.mode === ThemeMode.any);
9051
+ }
9052
+
9053
+ if (defaultTheme) {
9054
+ this.load(defaultTheme.options);
9055
+ }
9056
+ }
9057
+ }
9058
+
9059
+ importPreset(preset) {
9060
+ this.load(Plugins.getPreset(preset));
9061
+ }
9062
+
9063
+ setResponsive(width, pxRatio, defaultOptions) {
9064
+ var _a;
9065
+
9066
+ this.load(defaultOptions);
9067
+ this.load((_a = this.responsive.find(t => t.maxWidth * pxRatio > width)) === null || _a === void 0 ? void 0 : _a.options);
9068
+ }
9069
+
9070
+ }
9071
+ ;// CONCATENATED MODULE: ./dist/browser/Core/Container.js
9072
+ var Container_awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {
9073
+ function adopt(value) {
9074
+ return value instanceof P ? value : new P(function (resolve) {
9075
+ resolve(value);
9076
+ });
9077
+ }
9078
+
9079
+ return new (P || (P = Promise))(function (resolve, reject) {
9080
+ function fulfilled(value) {
9081
+ try {
9082
+ step(generator.next(value));
9083
+ } catch (e) {
9084
+ reject(e);
9085
+ }
9086
+ }
9087
+
9088
+ function rejected(value) {
9089
+ try {
9090
+ step(generator["throw"](value));
9091
+ } catch (e) {
9092
+ reject(e);
9093
+ }
9094
+ }
9095
+
9096
+ function step(result) {
9097
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
9098
+ }
9099
+
9100
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9101
+ });
9102
+ };
9103
+
9104
+
9105
+
9106
+
9107
+
9108
+
9109
+
9110
+ class Container {
9111
+ constructor(id, sourceOptions, ...presets) {
9112
+ this.id = id;
9113
+ this.sourceOptions = sourceOptions;
9114
+ this.fpsLimit = 60;
9115
+ this.firstStart = true;
9116
+ this.started = false;
9117
+ this.destroyed = false;
9118
+ this.paused = true;
9119
+ this.lastFrameTime = 0;
9120
+ this.pageHidden = false;
9121
+ this.retina = new Retina(this);
9122
+ this.canvas = new Canvas(this);
9123
+ this.particles = new Particles_Particles(this);
9124
+ this.drawer = new FrameManager(this);
9125
+ this.pathGenerator = {
9126
+ generate: () => {
9127
+ return {
9128
+ angle: Math.random() * Math.PI * 2,
9129
+ length: Math.random()
9130
+ };
9131
+ },
9132
+ init: () => {},
9133
+ update: () => {}
9134
+ };
9135
+ this.interactivity = {
9136
+ mouse: {
9137
+ clicking: false,
9138
+ inside: false
9139
+ }
9140
+ };
9141
+ this.bubble = {};
9142
+ this.repulse = {
9143
+ particles: []
9144
+ };
9145
+ this.attract = {
9146
+ particles: []
9147
+ };
9148
+ this.plugins = new Map();
9149
+ this.drawers = new Map();
9150
+ this.density = 1;
9151
+ this.options = new Options();
9152
+ this.actualOptions = new Options();
9153
+
9154
+ for (const preset of presets) {
9155
+ this.options.load(Plugins.getPreset(preset));
9156
+ }
9157
+
9158
+ const shapes = Plugins.getSupportedShapes();
9159
+
9160
+ for (const type of shapes) {
9161
+ const drawer = Plugins.getShapeDrawer(type);
9162
+
9163
+ if (drawer) {
9164
+ this.drawers.set(type, drawer);
9165
+ }
9166
+ }
9167
+
9168
+ if (this.options) {
9169
+ this.options.load(this.sourceOptions);
9170
+ }
9171
+
9172
+ this.eventListeners = new EventListeners(this);
9173
+
9174
+ if (typeof IntersectionObserver !== "undefined" && IntersectionObserver) {
9175
+ this.intersectionObserver = new IntersectionObserver(entries => this.intersectionManager(entries));
9176
+ }
9177
+ }
9178
+
9179
+ play(force) {
9180
+ const needsUpdate = this.paused || force;
9181
+
9182
+ if (this.firstStart && !this.actualOptions.autoPlay) {
9183
+ this.firstStart = false;
9184
+ return;
9185
+ }
9186
+
9187
+ if (this.paused) {
9188
+ this.paused = false;
9189
+ }
9190
+
9191
+ if (needsUpdate) {
9192
+ for (const [, plugin] of this.plugins) {
9193
+ if (plugin.play) {
9194
+ plugin.play();
9195
+ }
9196
+ }
9197
+
9198
+ this.lastFrameTime = performance.now();
9199
+ }
9200
+
9201
+ this.draw();
9202
+ }
9203
+
9204
+ pause() {
9205
+ if (this.drawAnimationFrame !== undefined) {
9206
+ Utils.cancelAnimation(this.drawAnimationFrame);
9207
+ delete this.drawAnimationFrame;
9208
+ }
9209
+
9210
+ if (this.paused) {
9211
+ return;
9212
+ }
9213
+
9214
+ for (const [, plugin] of this.plugins) {
9215
+ if (plugin.pause) {
9216
+ plugin.pause();
9217
+ }
9218
+ }
9219
+
9220
+ if (!this.pageHidden) {
9221
+ this.paused = true;
9222
+ }
9223
+ }
9224
+
9225
+ draw() {
9226
+ this.drawAnimationFrame = Utils.animate(timestamp => this.drawer.nextFrame(timestamp));
9227
+ }
9228
+
9229
+ getAnimationStatus() {
9230
+ return !this.paused;
9231
+ }
9232
+
9233
+ setNoise(noiseOrGenerator, init, update) {
9234
+ this.setPath(noiseOrGenerator, init, update);
9235
+ }
9236
+
9237
+ setPath(pathOrGenerator, init, update) {
9238
+ if (!pathOrGenerator) {
9239
+ return;
9240
+ }
9241
+
9242
+ if (typeof pathOrGenerator === "function") {
9243
+ this.pathGenerator.generate = pathOrGenerator;
9244
+
9245
+ if (init) {
9246
+ this.pathGenerator.init = init;
9247
+ }
9248
+
9249
+ if (update) {
9250
+ this.pathGenerator.update = update;
9251
+ }
9252
+ } else {
9253
+ if (pathOrGenerator.generate) {
9254
+ this.pathGenerator.generate = pathOrGenerator.generate;
9255
+ }
9256
+
9257
+ if (pathOrGenerator.init) {
9258
+ this.pathGenerator.init = pathOrGenerator.init;
9259
+ }
9260
+
9261
+ if (pathOrGenerator.update) {
9262
+ this.pathGenerator.update = pathOrGenerator.update;
9263
+ }
9264
+ }
9265
+ }
9266
+
9267
+ destroy() {
9268
+ this.stop();
9269
+ this.canvas.destroy();
9270
+
9271
+ for (const [, drawer] of this.drawers) {
9272
+ if (drawer.destroy) {
9273
+ drawer.destroy(this);
9274
+ }
9275
+ }
9276
+
9277
+ for (const key of this.drawers.keys()) {
9278
+ this.drawers.delete(key);
9279
+ }
9280
+
9281
+ this.destroyed = true;
9282
+ }
9283
+
9284
+ exportImg(callback) {
9285
+ this.exportImage(callback);
9286
+ }
9287
+
9288
+ exportImage(callback, type, quality) {
9289
+ var _a;
9290
+
9291
+ return (_a = this.canvas.element) === null || _a === void 0 ? void 0 : _a.toBlob(callback, type !== null && type !== void 0 ? type : "image/png", quality);
9292
+ }
9293
+
9294
+ exportConfiguration() {
9295
+ return JSON.stringify(this.actualOptions, undefined, 2);
9296
+ }
9297
+
9298
+ refresh() {
9299
+ return Container_awaiter(this, void 0, void 0, function* () {
9300
+ this.stop();
9301
+ yield this.start();
9302
+ });
9303
+ }
9304
+
9305
+ stop() {
9306
+ if (!this.started) {
9307
+ return;
9308
+ }
9309
+
9310
+ this.firstStart = true;
9311
+ this.started = false;
9312
+ this.eventListeners.removeListeners();
9313
+ this.pause();
9314
+ this.particles.clear();
9315
+ this.canvas.clear();
9316
+
9317
+ if (this.interactivity.element instanceof HTMLElement && this.intersectionObserver) {
9318
+ this.intersectionObserver.observe(this.interactivity.element);
9319
+ }
9320
+
9321
+ for (const [, plugin] of this.plugins) {
9322
+ if (plugin.stop) {
9323
+ plugin.stop();
9324
+ }
9325
+ }
9326
+
9327
+ for (const key of this.plugins.keys()) {
9328
+ this.plugins.delete(key);
9329
+ }
9330
+
9331
+ this.particles.linksColors = new Map();
9332
+ delete this.particles.grabLineColor;
9333
+ delete this.particles.linksColor;
9334
+ }
9335
+
9336
+ loadTheme(name) {
9337
+ return Container_awaiter(this, void 0, void 0, function* () {
9338
+ this.actualOptions.setTheme(name);
9339
+ yield this.refresh();
9340
+ });
9341
+ }
9342
+
9343
+ start() {
9344
+ return Container_awaiter(this, void 0, void 0, function* () {
9345
+ if (this.started) {
9346
+ return;
9347
+ }
9348
+
9349
+ yield this.init();
9350
+ this.started = true;
9351
+ this.eventListeners.addListeners();
9352
+
9353
+ if (this.interactivity.element instanceof HTMLElement && this.intersectionObserver) {
9354
+ this.intersectionObserver.observe(this.interactivity.element);
9355
+ }
9356
+
9357
+ for (const [, plugin] of this.plugins) {
9358
+ if (plugin.startAsync !== undefined) {
9359
+ yield plugin.startAsync();
9360
+ } else if (plugin.start !== undefined) {
9361
+ plugin.start();
9362
+ }
9363
+ }
9364
+
9365
+ this.play();
9366
+ });
9367
+ }
9368
+
9369
+ init() {
9370
+ return Container_awaiter(this, void 0, void 0, function* () {
9371
+ this.actualOptions = new Options();
9372
+ this.actualOptions.load(this.options);
9373
+ this.retina.init();
9374
+ this.canvas.init();
9375
+ this.actualOptions.setResponsive(this.canvas.size.width, this.retina.pixelRatio, this.options);
9376
+ this.actualOptions.setTheme(undefined);
9377
+ this.fpsLimit = this.actualOptions.fpsLimit > 0 ? this.actualOptions.fpsLimit : 60;
9378
+ const availablePlugins = Plugins.getAvailablePlugins(this);
9379
+
9380
+ for (const [id, plugin] of availablePlugins) {
9381
+ this.plugins.set(id, plugin);
9382
+ }
9383
+
9384
+ for (const [, drawer] of this.drawers) {
9385
+ if (drawer.init) {
9386
+ yield drawer.init(this);
9387
+ }
9388
+ }
9389
+
9390
+ for (const [, plugin] of this.plugins) {
9391
+ if (plugin.init) {
9392
+ plugin.init(this.actualOptions);
9393
+ } else if (plugin.initAsync !== undefined) {
9394
+ yield plugin.initAsync(this.actualOptions);
9395
+ }
9396
+ }
9397
+
9398
+ this.canvas.resize();
9399
+ this.particles.init();
9400
+ this.particles.setDensity();
9401
+ });
9402
+ }
9403
+
9404
+ intersectionManager(entries) {
9405
+ if (!this.actualOptions.pauseOnOutsideViewport) {
9406
+ return;
9407
+ }
9408
+
9409
+ for (const entry of entries) {
9410
+ if (entry.target !== this.interactivity.element) {
9411
+ continue;
9412
+ }
9413
+
9414
+ if (entry.isIntersecting) {
9415
+ this.play();
9416
+ } else {
9417
+ this.pause();
9418
+ }
9419
+ }
9420
+ }
9421
+
9422
+ }
9423
+ ;// CONCATENATED MODULE: ./dist/browser/Core/Loader.js
9424
+ var Loader_awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {
9425
+ function adopt(value) {
9426
+ return value instanceof P ? value : new P(function (resolve) {
9427
+ resolve(value);
9428
+ });
9429
+ }
9430
+
9431
+ return new (P || (P = Promise))(function (resolve, reject) {
9432
+ function fulfilled(value) {
9433
+ try {
9434
+ step(generator.next(value));
9435
+ } catch (e) {
9436
+ reject(e);
9437
+ }
9438
+ }
9439
+
9440
+ function rejected(value) {
9441
+ try {
9442
+ step(generator["throw"](value));
9443
+ } catch (e) {
9444
+ reject(e);
9445
+ }
9446
+ }
9447
+
9448
+ function step(result) {
9449
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
9450
+ }
9451
+
9452
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9453
+ });
9454
+ };
9455
+
9456
+
9457
+
9458
+ const tsParticlesDom = [];
9459
+
9460
+ function fetchError(statusCode) {
9461
+ console.error(`Error tsParticles - fetch status: ${statusCode}`);
9462
+ console.error("Error tsParticles - File config not found");
9463
+ }
9464
+
9465
+ class Loader {
9466
+ static dom() {
9467
+ return tsParticlesDom;
9468
+ }
9469
+
9470
+ static domItem(index) {
9471
+ const dom = Loader.dom();
9472
+ const item = dom[index];
9473
+
9474
+ if (item && !item.destroyed) {
9475
+ return item;
9476
+ }
9477
+
9478
+ dom.splice(index, 1);
9479
+ }
9480
+
9481
+ static load(tagId, options, index) {
9482
+ return Loader_awaiter(this, void 0, void 0, function* () {
9483
+ const domContainer = document.getElementById(tagId);
9484
+
9485
+ if (!domContainer) {
9486
+ return;
9487
+ }
9488
+
9489
+ return Loader.set(tagId, domContainer, options, index);
9490
+ });
9491
+ }
9492
+
9493
+ static set(id, domContainer, options, index) {
9494
+ return Loader_awaiter(this, void 0, void 0, function* () {
9495
+ const currentOptions = options instanceof Array ? Utils.itemFromArray(options, index) : options;
9496
+ const dom = Loader.dom();
9497
+ const oldIndex = dom.findIndex(v => v.id === id);
9498
+
9499
+ if (oldIndex >= 0) {
9500
+ const old = Loader.domItem(oldIndex);
9501
+
9502
+ if (old && !old.destroyed) {
9503
+ old.destroy();
9504
+ dom.splice(oldIndex, 1);
9505
+ }
9506
+ }
9507
+
9508
+ let canvasEl;
9509
+ let generatedCanvas;
9510
+
9511
+ if (domContainer.tagName.toLowerCase() === "canvas") {
9512
+ canvasEl = domContainer;
9513
+ generatedCanvas = false;
9514
+ } else {
9515
+ const existingCanvases = domContainer.getElementsByTagName("canvas");
9516
+
9517
+ if (existingCanvases.length) {
9518
+ canvasEl = existingCanvases[0];
9519
+
9520
+ if (!canvasEl.className) {
9521
+ canvasEl.className = Constants.canvasClass;
9522
+ }
9523
+
9524
+ generatedCanvas = false;
9525
+ } else {
9526
+ generatedCanvas = true;
9527
+ canvasEl = document.createElement("canvas");
9528
+ canvasEl.className = Constants.canvasClass;
9529
+ canvasEl.style.width = "100%";
9530
+ canvasEl.style.height = "100%";
9531
+ domContainer.appendChild(canvasEl);
9532
+ }
9533
+ }
9534
+
9535
+ const newItem = new Container(id, currentOptions);
9536
+
9537
+ if (oldIndex >= 0) {
9538
+ dom.splice(oldIndex, 0, newItem);
9539
+ } else {
9540
+ dom.push(newItem);
9541
+ }
9542
+
9543
+ newItem.canvas.loadCanvas(canvasEl, generatedCanvas);
9544
+ yield newItem.start();
9545
+ return newItem;
9546
+ });
9547
+ }
9548
+
9549
+ static loadJSON(tagId, jsonUrl, index) {
9550
+ return Loader_awaiter(this, void 0, void 0, function* () {
9551
+ const url = jsonUrl instanceof Array ? Utils.itemFromArray(jsonUrl, index) : jsonUrl;
9552
+ const response = yield fetch(url);
9553
+
9554
+ if (response.ok) {
9555
+ return Loader.load(tagId, yield response.json());
9556
+ } else {
9557
+ fetchError(response.status);
9558
+ }
9559
+ });
9560
+ }
9561
+
9562
+ static setJSON(id, domContainer, jsonUrl) {
9563
+ return Loader_awaiter(this, void 0, void 0, function* () {
9564
+ const response = yield fetch(jsonUrl);
9565
+
9566
+ if (response.ok) {
9567
+ const options = yield response.json();
9568
+ return Loader.set(id, domContainer, options);
9569
+ } else {
9570
+ fetchError(response.status);
9571
+ }
9572
+ });
9573
+ }
9574
+
9575
+ static setOnClickHandler(callback) {
9576
+ const dom = Loader.dom();
9577
+
9578
+ if (dom.length === 0) {
9579
+ throw new Error("Can only set click handlers after calling tsParticles.load() or tsParticles.loadJSON()");
9580
+ }
9581
+
9582
+ for (const domItem of dom) {
9583
+ const el = domItem.interactivity.element;
9584
+
9585
+ if (!el) {
9586
+ continue;
9587
+ }
9588
+
9589
+ const clickOrTouchHandler = (e, pos) => {
9590
+ if (domItem.destroyed) {
9591
+ return;
9592
+ }
9593
+
9594
+ const pxRatio = domItem.retina.pixelRatio;
9595
+ const posRetina = {
9596
+ x: pos.x * pxRatio,
9597
+ y: pos.y * pxRatio
9598
+ };
9599
+ const particles = domItem.particles.quadTree.queryCircle(posRetina, domItem.retina.sizeValue);
9600
+ callback(e, particles);
9601
+ };
9602
+
9603
+ const clickHandler = e => {
9604
+ if (domItem.destroyed) {
9605
+ return;
9606
+ }
9607
+
9608
+ const mouseEvent = e;
9609
+ const pos = {
9610
+ x: mouseEvent.offsetX || mouseEvent.clientX,
9611
+ y: mouseEvent.offsetY || mouseEvent.clientY
9612
+ };
9613
+ clickOrTouchHandler(e, pos);
9614
+ };
9615
+
9616
+ const touchStartHandler = () => {
9617
+ if (domItem.destroyed) {
9618
+ return;
9619
+ }
9620
+
9621
+ touched = true;
9622
+ touchMoved = false;
9623
+ };
9624
+
9625
+ const touchMoveHandler = () => {
9626
+ if (domItem.destroyed) {
9627
+ return;
9628
+ }
9629
+
9630
+ touchMoved = true;
9631
+ };
9632
+
9633
+ const touchEndHandler = e => {
9634
+ var _a, _b, _c;
9635
+
9636
+ if (domItem.destroyed) {
9637
+ return;
9638
+ }
9639
+
9640
+ if (touched && !touchMoved) {
9641
+ const touchEvent = e;
9642
+ const lastTouch = touchEvent.touches[touchEvent.touches.length - 1];
9643
+ const canvasRect = (_a = domItem.canvas.element) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
9644
+ const pos = {
9645
+ x: lastTouch.clientX - ((_b = canvasRect === null || canvasRect === void 0 ? void 0 : canvasRect.left) !== null && _b !== void 0 ? _b : 0),
9646
+ y: lastTouch.clientY - ((_c = canvasRect === null || canvasRect === void 0 ? void 0 : canvasRect.top) !== null && _c !== void 0 ? _c : 0)
9647
+ };
9648
+ clickOrTouchHandler(e, pos);
9649
+ }
9650
+
9651
+ touched = false;
9652
+ touchMoved = false;
9653
+ };
9654
+
9655
+ const touchCancelHandler = () => {
9656
+ if (domItem.destroyed) {
9657
+ return;
9658
+ }
9659
+
9660
+ touched = false;
9661
+ touchMoved = false;
9662
+ };
9663
+
9664
+ let touched = false;
9665
+ let touchMoved = false;
9666
+ el.addEventListener("click", clickHandler);
9667
+ el.addEventListener("touchstart", touchStartHandler);
9668
+ el.addEventListener("touchmove", touchMoveHandler);
9669
+ el.addEventListener("touchend", touchEndHandler);
9670
+ el.addEventListener("touchcancel", touchCancelHandler);
9671
+ }
9672
+ }
9673
+
9674
+ }
9675
+ ;// CONCATENATED MODULE: ./dist/browser/main.slim.js
9676
+ var main_slim_awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {
9677
+ function adopt(value) {
9678
+ return value instanceof P ? value : new P(function (resolve) {
9679
+ resolve(value);
9680
+ });
9681
+ }
9682
+
9683
+ return new (P || (P = Promise))(function (resolve, reject) {
9684
+ function fulfilled(value) {
9685
+ try {
9686
+ step(generator.next(value));
9687
+ } catch (e) {
9688
+ reject(e);
9689
+ }
9690
+ }
9691
+
9692
+ function rejected(value) {
9693
+ try {
9694
+ step(generator["throw"](value));
9695
+ } catch (e) {
9696
+ reject(e);
9697
+ }
9698
+ }
9699
+
9700
+ function step(result) {
9701
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
9702
+ }
9703
+
9704
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9705
+ });
9706
+ };
9707
+
9708
+ var __classPrivateFieldSet = undefined && undefined.__classPrivateFieldSet || function (receiver, privateMap, value) {
9709
+ if (!privateMap.has(receiver)) {
9710
+ throw new TypeError("attempted to set private field on non-instance");
9711
+ }
9712
+
9713
+ privateMap.set(receiver, value);
9714
+ return value;
9715
+ };
9716
+
9717
+ var __classPrivateFieldGet = undefined && undefined.__classPrivateFieldGet || function (receiver, privateMap) {
9718
+ if (!privateMap.has(receiver)) {
9719
+ throw new TypeError("attempted to get private field on non-instance");
9720
+ }
9721
+
9722
+ return privateMap.get(receiver);
9723
+ };
9724
+
9725
+ var _initialized;
9726
+
9727
+
9728
+
9729
+
9730
+
9731
+
9732
+
9733
+
9734
+
9735
+
9736
+
9737
+
9738
+ class MainSlim {
9739
+ constructor() {
9740
+ _initialized.set(this, void 0);
9741
+
9742
+ __classPrivateFieldSet(this, _initialized, false);
9743
+
9744
+ const squareDrawer = new SquareDrawer();
9745
+ const textDrawer = new TextDrawer();
9746
+ const imageDrawer = new ImageDrawer();
9747
+ Plugins.addShapeDrawer(ShapeType.line, new LineDrawer());
9748
+ Plugins.addShapeDrawer(ShapeType.circle, new CircleDrawer());
9749
+ Plugins.addShapeDrawer(ShapeType.edge, squareDrawer);
9750
+ Plugins.addShapeDrawer(ShapeType.square, squareDrawer);
9751
+ Plugins.addShapeDrawer(ShapeType.triangle, new TriangleDrawer());
9752
+ Plugins.addShapeDrawer(ShapeType.star, new StarDrawer());
9753
+ Plugins.addShapeDrawer(ShapeType.polygon, new PolygonDrawer());
9754
+ Plugins.addShapeDrawer(ShapeType.char, textDrawer);
9755
+ Plugins.addShapeDrawer(ShapeType.character, textDrawer);
9756
+ Plugins.addShapeDrawer(ShapeType.image, imageDrawer);
9757
+ Plugins.addShapeDrawer(ShapeType.images, imageDrawer);
9758
+ }
9759
+
9760
+ init() {
9761
+ if (!__classPrivateFieldGet(this, _initialized)) {
9762
+ __classPrivateFieldSet(this, _initialized, true);
9763
+ }
9764
+ }
9765
+
9766
+ loadFromArray(tagId, options, index) {
9767
+ return main_slim_awaiter(this, void 0, void 0, function* () {
9768
+ return Loader.load(tagId, options, index);
9769
+ });
9770
+ }
9771
+
9772
+ load(tagId, options) {
9773
+ return main_slim_awaiter(this, void 0, void 0, function* () {
9774
+ return Loader.load(tagId, options);
9775
+ });
9776
+ }
9777
+
9778
+ set(id, element, options) {
9779
+ return main_slim_awaiter(this, void 0, void 0, function* () {
9780
+ return Loader.set(id, element, options);
9781
+ });
9782
+ }
9783
+
9784
+ loadJSON(tagId, pathConfigJson, index) {
9785
+ return Loader.loadJSON(tagId, pathConfigJson, index);
9786
+ }
9787
+
9788
+ setOnClickHandler(callback) {
9789
+ Loader.setOnClickHandler(callback);
9790
+ }
9791
+
9792
+ dom() {
9793
+ return Loader.dom();
9794
+ }
9795
+
9796
+ domItem(index) {
9797
+ return Loader.domItem(index);
9798
+ }
9799
+
9800
+ addShape(shape, drawer, init, afterEffect, destroy) {
9801
+ let customDrawer;
9802
+
9803
+ if (typeof drawer === "function") {
9804
+ customDrawer = {
9805
+ afterEffect: afterEffect,
9806
+ destroy: destroy,
9807
+ draw: drawer,
9808
+ init: init
9809
+ };
9810
+ } else {
9811
+ customDrawer = drawer;
9812
+ }
9813
+
9814
+ Plugins.addShapeDrawer(shape, customDrawer);
9815
+ }
9816
+
9817
+ addPreset(preset, options) {
9818
+ Plugins.addPreset(preset, options);
9819
+ }
9820
+
9821
+ addPlugin(plugin) {
9822
+ Plugins.addPlugin(plugin);
9823
+ }
9824
+
9825
+ addPathGenerator(name, generator) {
9826
+ Plugins.addPathGenerator(name, generator);
9827
+ }
9828
+
9829
+ }
9830
+ _initialized = new WeakMap();
9831
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/Absorbers/AbsorberInstance.js
9832
+
9833
+ class AbsorberInstance {
9834
+ constructor(absorbers, container, options, position) {
9835
+ var _a, _b;
9836
+
9837
+ this.absorbers = absorbers;
9838
+ this.container = container;
9839
+ this.initialPosition = position;
9840
+ this.options = options;
9841
+ this.dragging = false;
9842
+ this.name = this.options.name;
9843
+ this.opacity = this.options.opacity;
9844
+ this.size = NumberUtils.getValue(options.size) * container.retina.pixelRatio;
9845
+ this.mass = this.size * options.size.density * container.retina.reduceFactor;
9846
+ const limit = options.size.limit;
9847
+ this.limit = limit !== undefined ? limit * container.retina.pixelRatio * container.retina.reduceFactor : limit;
9848
+ const color = typeof options.color === "string" ? {
9849
+ value: options.color
9850
+ } : options.color;
9851
+ this.color = (_a = ColorUtils.colorToRgb(color)) !== null && _a !== void 0 ? _a : {
9852
+ b: 0,
9853
+ g: 0,
9854
+ r: 0
9855
+ };
9856
+ this.position = (_b = this.initialPosition) !== null && _b !== void 0 ? _b : this.calcPosition();
9857
+ }
9858
+
9859
+ attract(particle) {
9860
+ const options = this.options;
9861
+
9862
+ if (options.draggable) {
9863
+ const mouse = this.container.interactivity.mouse;
9864
+
9865
+ if (mouse.clicking && mouse.downPosition) {
9866
+ const mouseDist = NumberUtils.getDistance(this.position, mouse.downPosition);
9867
+
9868
+ if (mouseDist <= this.size) {
9869
+ this.dragging = true;
9870
+ }
9871
+ } else {
9872
+ this.dragging = false;
9873
+ }
9874
+
9875
+ if (this.dragging && mouse.position) {
9876
+ this.position.x = mouse.position.x;
9877
+ this.position.y = mouse.position.y;
9878
+ }
9879
+ }
9880
+
9881
+ const pos = particle.getPosition();
9882
+ const {
9883
+ dx,
9884
+ dy,
9885
+ distance
9886
+ } = NumberUtils.getDistances(this.position, pos);
9887
+ const angle = Math.atan2(dx, dy);
9888
+ const acceleration = this.mass / Math.pow(distance, 2) * this.container.retina.reduceFactor;
9889
+
9890
+ if (distance < this.size + particle.getRadius()) {
9891
+ const sizeFactor = particle.getRadius() * 0.033 * this.container.retina.pixelRatio;
9892
+
9893
+ if (this.size > particle.getRadius() && distance < this.size - particle.getRadius()) {
9894
+ if (options.destroy) {
9895
+ particle.destroy();
9896
+ } else {
9897
+ particle.needsNewPosition = true;
9898
+ this.updateParticlePosition(particle, angle, acceleration);
9899
+ }
9900
+ } else {
9901
+ if (options.destroy) {
9902
+ particle.size.value -= sizeFactor;
9903
+ }
9904
+
9905
+ this.updateParticlePosition(particle, angle, acceleration);
9906
+ }
9907
+
9908
+ if (this.limit === undefined || this.size < this.limit) {
9909
+ this.size += sizeFactor;
9910
+ }
9911
+
9912
+ this.mass += sizeFactor * this.options.size.density * this.container.retina.reduceFactor;
9913
+ } else {
9914
+ this.updateParticlePosition(particle, angle, acceleration);
9915
+ }
9916
+ }
9917
+
9918
+ resize() {
9919
+ const initialPosition = this.initialPosition;
9920
+ this.position = initialPosition && Utils.isPointInside(initialPosition, this.container.canvas.size) ? initialPosition : this.calcPosition();
9921
+ }
9922
+
9923
+ draw(context) {
9924
+ context.translate(this.position.x, this.position.y);
9925
+ context.beginPath();
9926
+ context.arc(0, 0, this.size, 0, Math.PI * 2, false);
9927
+ context.closePath();
9928
+ context.fillStyle = ColorUtils.getStyleFromRgb(this.color, this.opacity);
9929
+ context.fill();
9930
+ }
9931
+
9932
+ calcPosition() {
9933
+ var _a, _b;
9934
+
9935
+ const container = this.container;
9936
+ const percentPosition = this.options.position;
9937
+ return {
9938
+ x: ((_a = percentPosition === null || percentPosition === void 0 ? void 0 : percentPosition.x) !== null && _a !== void 0 ? _a : Math.random() * 100) / 100 * container.canvas.size.width,
9939
+ y: ((_b = percentPosition === null || percentPosition === void 0 ? void 0 : percentPosition.y) !== null && _b !== void 0 ? _b : Math.random() * 100) / 100 * container.canvas.size.height
9940
+ };
9941
+ }
9942
+
9943
+ updateParticlePosition(particle, angle, acceleration) {
9944
+ var _a;
9945
+
9946
+ if (particle.destroyed) {
9947
+ return;
9948
+ }
9949
+
9950
+ const canvasSize = this.container.canvas.size;
9951
+
9952
+ if (particle.needsNewPosition) {
9953
+ const pSize = particle.getRadius();
9954
+ particle.position.x = Math.random() * (canvasSize.width - pSize * 2) + pSize;
9955
+ particle.position.y = Math.random() * (canvasSize.height - pSize * 2) + pSize;
9956
+ particle.needsNewPosition = false;
9957
+ }
9958
+
9959
+ if (this.options.orbits) {
9960
+ if (particle.orbitRadius === undefined) {
9961
+ particle.orbitRadius = NumberUtils.getDistance(particle.getPosition(), this.position);
9962
+ }
9963
+
9964
+ if (particle.orbitRadius <= this.size && !this.options.destroy) {
9965
+ particle.orbitRadius = Math.random() * Math.max(canvasSize.width, canvasSize.height);
9966
+ }
9967
+
9968
+ if (particle.orbitAngle === undefined) {
9969
+ particle.orbitAngle = Math.random() * Math.PI * 2;
9970
+ }
9971
+
9972
+ const orbitRadius = particle.orbitRadius;
9973
+ const orbitAngle = particle.orbitAngle;
9974
+ particle.velocity.horizontal = 0;
9975
+ particle.velocity.vertical = 0;
9976
+ particle.position.x = this.position.x + orbitRadius * Math.cos(orbitAngle);
9977
+ particle.position.y = this.position.y + orbitRadius * Math.sin(orbitAngle);
9978
+ particle.orbitRadius -= acceleration;
9979
+ particle.orbitAngle += ((_a = particle.moveSpeed) !== null && _a !== void 0 ? _a : this.container.retina.moveSpeed) / 100 * this.container.retina.reduceFactor;
9980
+ } else {
9981
+ particle.velocity.horizontal += Math.sin(angle) * acceleration;
9982
+ particle.velocity.vertical += Math.cos(angle) * acceleration;
9983
+ }
9984
+ }
9985
+
9986
+ }
9987
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/Absorbers/Options/Classes/AbsorberSize.js
9988
+
9989
+ class AbsorberSize extends ValueWithRandom {
9990
+ constructor() {
9991
+ super();
9992
+ this.density = 5;
9993
+ this.random.minimumValue = 1;
9994
+ this.value = 50;
9995
+ }
9996
+
9997
+ load(data) {
9998
+ if (!data) {
9999
+ return;
10000
+ }
10001
+
10002
+ super.load(data);
10003
+
10004
+ if (data.density !== undefined) {
10005
+ this.density = data.density;
10006
+ }
10007
+
10008
+ if (data.limit !== undefined) {
10009
+ this.limit = data.limit;
10010
+ }
10011
+
10012
+ if (data.limit !== undefined) {
10013
+ this.limit = data.limit;
10014
+ }
10015
+ }
10016
+
10017
+ }
10018
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/Absorbers/Options/Classes/Absorber.js
10019
+
10020
+
10021
+ class Absorber {
10022
+ constructor() {
10023
+ this.color = new OptionsColor();
10024
+ this.color.value = "#000000";
10025
+ this.draggable = false;
10026
+ this.opacity = 1;
10027
+ this.destroy = true;
10028
+ this.orbits = false;
10029
+ this.size = new AbsorberSize();
10030
+ }
10031
+
10032
+ load(data) {
10033
+ if (data === undefined) {
10034
+ return;
10035
+ }
10036
+
10037
+ if (data.color !== undefined) {
10038
+ this.color = OptionsColor.create(this.color, data.color);
10039
+ }
10040
+
10041
+ if (data.draggable !== undefined) {
10042
+ this.draggable = data.draggable;
10043
+ }
10044
+
10045
+ this.name = data.name;
10046
+
10047
+ if (data.opacity !== undefined) {
10048
+ this.opacity = data.opacity;
10049
+ }
10050
+
10051
+ if (data.position !== undefined) {
10052
+ this.position = {
10053
+ x: data.position.x,
10054
+ y: data.position.y
10055
+ };
10056
+ }
10057
+
10058
+ if (data.size !== undefined) {
10059
+ this.size.load(data.size);
10060
+ }
10061
+
10062
+ if (data.destroy !== undefined) {
10063
+ this.destroy = data.destroy;
10064
+ }
10065
+
10066
+ if (data.orbits !== undefined) {
10067
+ this.orbits = data.orbits;
10068
+ }
10069
+ }
10070
+
10071
+ }
10072
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/Absorbers/Enums/AbsorberClickMode.js
10073
+ var AbsorberClickMode;
10074
+
10075
+ (function (AbsorberClickMode) {
10076
+ AbsorberClickMode["absorber"] = "absorber";
10077
+ })(AbsorberClickMode || (AbsorberClickMode = {}));
10078
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/Absorbers/Enums/index.js
10079
+
10080
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/Absorbers/Absorbers.js
10081
+
10082
+
10083
+
10084
+
10085
+ class Absorbers {
10086
+ constructor(container) {
10087
+ this.container = container;
10088
+ this.array = [];
10089
+ this.absorbers = [];
10090
+ this.interactivityAbsorbers = [];
10091
+ const overridableContainer = container;
10092
+
10093
+ overridableContainer.addAbsorber = (options, position) => this.addAbsorber(options, position);
10094
+ }
10095
+
10096
+ init(options) {
10097
+ var _a, _b;
10098
+
10099
+ if (!options) {
10100
+ return;
10101
+ }
10102
+
10103
+ if (options.absorbers) {
10104
+ if (options.absorbers instanceof Array) {
10105
+ this.absorbers = options.absorbers.map(s => {
10106
+ const tmp = new Absorber();
10107
+ tmp.load(s);
10108
+ return tmp;
10109
+ });
10110
+ } else {
10111
+ if (this.absorbers instanceof Array) {
10112
+ this.absorbers = new Absorber();
10113
+ }
10114
+
10115
+ this.absorbers.load(options.absorbers);
10116
+ }
10117
+ }
10118
+
10119
+ const interactivityAbsorbers = (_b = (_a = options.interactivity) === null || _a === void 0 ? void 0 : _a.modes) === null || _b === void 0 ? void 0 : _b.absorbers;
10120
+
10121
+ if (interactivityAbsorbers) {
10122
+ if (interactivityAbsorbers instanceof Array) {
10123
+ this.interactivityAbsorbers = interactivityAbsorbers.map(s => {
10124
+ const tmp = new Absorber();
10125
+ tmp.load(s);
10126
+ return tmp;
10127
+ });
10128
+ } else {
10129
+ if (this.interactivityAbsorbers instanceof Array) {
10130
+ this.interactivityAbsorbers = new Absorber();
10131
+ }
10132
+
10133
+ this.interactivityAbsorbers.load(interactivityAbsorbers);
10134
+ }
10135
+ }
10136
+
10137
+ if (this.absorbers instanceof Array) {
10138
+ for (const absorberOptions of this.absorbers) {
10139
+ this.addAbsorber(absorberOptions);
10140
+ }
10141
+ } else {
10142
+ this.addAbsorber(this.absorbers);
10143
+ }
10144
+ }
10145
+
10146
+ particleUpdate(particle) {
10147
+ for (const absorber of this.array) {
10148
+ absorber.attract(particle);
10149
+
10150
+ if (particle.destroyed) {
10151
+ break;
10152
+ }
10153
+ }
10154
+ }
10155
+
10156
+ draw(context) {
10157
+ for (const absorber of this.array) {
10158
+ context.save();
10159
+ absorber.draw(context);
10160
+ context.restore();
10161
+ }
10162
+ }
10163
+
10164
+ stop() {
10165
+ this.array = [];
10166
+ }
10167
+
10168
+ resize() {
10169
+ for (const absorber of this.array) {
10170
+ absorber.resize();
10171
+ }
10172
+ }
10173
+
10174
+ handleClickMode(mode) {
10175
+ const container = this.container;
10176
+ const absorberOptions = this.absorbers;
10177
+ const modeAbsorbers = this.interactivityAbsorbers;
10178
+
10179
+ if (mode === AbsorberClickMode.absorber) {
10180
+ let absorbersModeOptions;
10181
+
10182
+ if (modeAbsorbers instanceof Array) {
10183
+ if (modeAbsorbers.length > 0) {
10184
+ absorbersModeOptions = Utils.itemFromArray(modeAbsorbers);
10185
+ }
10186
+ } else {
10187
+ absorbersModeOptions = modeAbsorbers;
10188
+ }
10189
+
10190
+ const absorbersOptions = absorbersModeOptions !== null && absorbersModeOptions !== void 0 ? absorbersModeOptions : absorberOptions instanceof Array ? Utils.itemFromArray(absorberOptions) : absorberOptions;
10191
+ const aPosition = container.interactivity.mouse.clickPosition;
10192
+ this.addAbsorber(absorbersOptions, aPosition);
10193
+ }
10194
+ }
10195
+
10196
+ addAbsorber(options, position) {
10197
+ const absorber = new AbsorberInstance(this, this.container, options, position);
10198
+ this.array.push(absorber);
10199
+ return absorber;
10200
+ }
10201
+
10202
+ removeAbsorber(absorber) {
10203
+ const index = this.array.indexOf(absorber);
10204
+
10205
+ if (index >= 0) {
10206
+ this.array.splice(index, 1);
10207
+ }
10208
+ }
10209
+
10210
+ }
10211
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/Absorbers/AbsorbersPlugin.js
10212
+
10213
+
10214
+
10215
+
10216
+
10217
+ class AbsorbersPlugin {
10218
+ constructor() {
10219
+ this.id = "absorbers";
10220
+ }
10221
+
10222
+ getPlugin(container) {
10223
+ return new Absorbers(container);
10224
+ }
10225
+
10226
+ needsPlugin(options) {
10227
+ var _a, _b, _c;
10228
+
10229
+ if (options === undefined) {
10230
+ return false;
10231
+ }
10232
+
10233
+ const absorbers = options.absorbers;
10234
+ let loadAbsorbers = false;
10235
+
10236
+ if (absorbers instanceof Array) {
10237
+ if (absorbers.length) {
10238
+ loadAbsorbers = true;
10239
+ }
10240
+ } else if (absorbers !== undefined) {
10241
+ loadAbsorbers = true;
10242
+ } else if (((_c = (_b = (_a = options.interactivity) === null || _a === void 0 ? void 0 : _a.events) === null || _b === void 0 ? void 0 : _b.onClick) === null || _c === void 0 ? void 0 : _c.mode) && Utils.isInArray(AbsorberClickMode.absorber, options.interactivity.events.onClick.mode)) {
10243
+ loadAbsorbers = true;
10244
+ }
10245
+
10246
+ return loadAbsorbers;
10247
+ }
10248
+
10249
+ loadOptions(options, source) {
10250
+ var _a, _b;
10251
+
10252
+ if (!this.needsPlugin(options) && !this.needsPlugin(source)) {
10253
+ return;
10254
+ }
10255
+
10256
+ const optionsCast = options;
10257
+
10258
+ if (source === null || source === void 0 ? void 0 : source.absorbers) {
10259
+ if ((source === null || source === void 0 ? void 0 : source.absorbers) instanceof Array) {
10260
+ optionsCast.absorbers = source === null || source === void 0 ? void 0 : source.absorbers.map(s => {
10261
+ const tmp = new Absorber();
10262
+ tmp.load(s);
10263
+ return tmp;
10264
+ });
10265
+ } else {
10266
+ let absorberOptions = optionsCast.absorbers;
10267
+
10268
+ if ((absorberOptions === null || absorberOptions === void 0 ? void 0 : absorberOptions.load) === undefined) {
10269
+ optionsCast.absorbers = absorberOptions = new Absorber();
10270
+ }
10271
+
10272
+ absorberOptions.load(source === null || source === void 0 ? void 0 : source.absorbers);
10273
+ }
10274
+ }
10275
+
10276
+ const interactivityAbsorbers = (_b = (_a = source === null || source === void 0 ? void 0 : source.interactivity) === null || _a === void 0 ? void 0 : _a.modes) === null || _b === void 0 ? void 0 : _b.absorbers;
10277
+
10278
+ if (interactivityAbsorbers) {
10279
+ if (interactivityAbsorbers instanceof Array) {
10280
+ optionsCast.interactivity.modes.absorbers = interactivityAbsorbers.map(s => {
10281
+ const tmp = new Absorber();
10282
+ tmp.load(s);
10283
+ return tmp;
10284
+ });
10285
+ } else {
10286
+ let absorberOptions = optionsCast.interactivity.modes.absorbers;
10287
+
10288
+ if ((absorberOptions === null || absorberOptions === void 0 ? void 0 : absorberOptions.load) === undefined) {
10289
+ optionsCast.interactivity.modes.absorbers = absorberOptions = new Absorber();
10290
+ }
10291
+
10292
+ absorberOptions.load(interactivityAbsorbers);
10293
+ }
10294
+ }
10295
+ }
10296
+
10297
+ }
10298
+
10299
+ const AbsorbersPlugin_plugin = new AbsorbersPlugin();
10300
+
10301
+
10302
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/Emitters/Options/Classes/EmitterSize.js
10303
+
10304
+ class EmitterSize {
10305
+ constructor() {
10306
+ this.mode = SizeMode.percent;
10307
+ this.height = 0;
10308
+ this.width = 0;
10309
+ }
10310
+
10311
+ load(data) {
10312
+ if (data === undefined) {
10313
+ return;
10314
+ }
10315
+
10316
+ if (data.mode !== undefined) {
10317
+ this.mode = data.mode;
10318
+ }
10319
+
10320
+ if (data.height !== undefined) {
10321
+ this.height = data.height;
10322
+ }
10323
+
10324
+ if (data.width !== undefined) {
10325
+ this.width = data.width;
10326
+ }
10327
+ }
10328
+
10329
+ }
10330
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/Emitters/EmitterInstance.js
10331
+
10332
+
10333
+
10334
+
10335
+ function randomCoordinate(position, offset) {
10336
+ return position + offset * (Math.random() - 0.5);
10337
+ }
10338
+
10339
+ function randomPosition(position, offset) {
10340
+ return {
10341
+ x: randomCoordinate(position.x, offset.x),
10342
+ y: randomCoordinate(position.y, offset.y)
10343
+ };
10344
+ }
10345
+
10346
+ class EmitterInstance {
10347
+ constructor(emitters, container, emitterOptions, position) {
10348
+ var _a, _b, _c;
10349
+
10350
+ this.emitters = emitters;
10351
+ this.container = container;
10352
+ this.currentDuration = 0;
10353
+ this.currentEmitDelay = 0;
10354
+ this.currentSpawnDelay = 0;
10355
+ this.initialPosition = position;
10356
+ this.emitterOptions = Utils.deepExtend({}, emitterOptions);
10357
+ this.position = (_a = this.initialPosition) !== null && _a !== void 0 ? _a : this.calcPosition();
10358
+ this.name = emitterOptions.name;
10359
+ let particlesOptions = Utils.deepExtend({}, this.emitterOptions.particles);
10360
+
10361
+ if (particlesOptions === undefined) {
10362
+ particlesOptions = {};
10363
+ }
10364
+
10365
+ if (particlesOptions.move === undefined) {
10366
+ particlesOptions.move = {};
10367
+ }
10368
+
10369
+ if (particlesOptions.move.direction === undefined) {
10370
+ particlesOptions.move.direction = this.emitterOptions.direction;
10371
+ }
10372
+
10373
+ if (this.emitterOptions.spawnColor !== undefined) {
10374
+ this.spawnColor = ColorUtils.colorToHsl(this.emitterOptions.spawnColor);
10375
+ }
10376
+
10377
+ this.particlesOptions = particlesOptions;
10378
+ this.size = (_b = this.emitterOptions.size) !== null && _b !== void 0 ? _b : (() => {
10379
+ const size = new EmitterSize();
10380
+ size.load({
10381
+ height: 0,
10382
+ mode: SizeMode.percent,
10383
+ width: 0
10384
+ });
10385
+ return size;
10386
+ })();
10387
+ this.lifeCount = (_c = this.emitterOptions.life.count) !== null && _c !== void 0 ? _c : -1;
10388
+ this.immortal = this.lifeCount <= 0;
10389
+ this.play();
10390
+ }
10391
+
10392
+ play() {
10393
+ if (this.container.retina.reduceFactor && (this.lifeCount > 0 || this.immortal || !this.emitterOptions.life.count)) {
10394
+ if (this.emitDelay === undefined) {
10395
+ this.emitDelay = 1000 * this.emitterOptions.rate.delay / this.container.retina.reduceFactor;
10396
+ }
10397
+
10398
+ if (this.lifeCount > 0 || this.immortal) {
10399
+ this.prepareToDie();
10400
+ }
10401
+ }
10402
+ }
10403
+
10404
+ pause() {
10405
+ delete this.emitDelay;
10406
+ }
10407
+
10408
+ resize() {
10409
+ const initialPosition = this.initialPosition;
10410
+ this.position = initialPosition && Utils.isPointInside(initialPosition, this.container.canvas.size) ? initialPosition : this.calcPosition();
10411
+ }
10412
+
10413
+ update(delta) {
10414
+ var _a;
10415
+
10416
+ if (this.duration !== undefined) {
10417
+ this.currentDuration += delta.value;
10418
+
10419
+ if (this.currentDuration >= this.duration) {
10420
+ this.pause();
10421
+
10422
+ if (this.spawnDelay !== undefined) {
10423
+ delete this.spawnDelay;
10424
+ }
10425
+
10426
+ if (!this.immortal) {
10427
+ this.lifeCount--;
10428
+ }
10429
+
10430
+ if (this.lifeCount > 0 || this.immortal) {
10431
+ this.position = this.calcPosition();
10432
+ this.spawnDelay = ((_a = this.emitterOptions.life.delay) !== null && _a !== void 0 ? _a : 0) * 1000 / this.container.retina.reduceFactor;
10433
+ } else {
10434
+ this.destroy();
10435
+ }
10436
+
10437
+ this.currentDuration -= this.duration;
10438
+ delete this.duration;
10439
+ }
10440
+ }
10441
+
10442
+ if (this.spawnDelay !== undefined) {
10443
+ this.currentSpawnDelay += delta.value;
10444
+
10445
+ if (this.currentSpawnDelay >= this.spawnDelay) {
10446
+ this.play();
10447
+ this.currentSpawnDelay -= this.currentSpawnDelay;
10448
+ delete this.spawnDelay;
10449
+ }
10450
+ }
10451
+
10452
+ if (this.emitDelay !== undefined) {
10453
+ this.currentEmitDelay += delta.value;
10454
+
10455
+ if (this.currentEmitDelay >= this.emitDelay) {
10456
+ this.emit();
10457
+ this.currentEmitDelay -= this.emitDelay;
10458
+ }
10459
+ }
10460
+ }
10461
+
10462
+ prepareToDie() {
10463
+ var _a;
10464
+
10465
+ const duration = (_a = this.emitterOptions.life) === null || _a === void 0 ? void 0 : _a.duration;
10466
+
10467
+ if (this.container.retina.reduceFactor && (this.lifeCount > 0 || this.immortal) && duration !== undefined && duration > 0) {
10468
+ this.duration = duration * 1000;
10469
+ }
10470
+ }
10471
+
10472
+ destroy() {
10473
+ this.emitters.removeEmitter(this);
10474
+ }
10475
+
10476
+ calcPosition() {
10477
+ var _a, _b;
10478
+
10479
+ const container = this.container;
10480
+ const percentPosition = this.emitterOptions.position;
10481
+ return {
10482
+ x: ((_a = percentPosition === null || percentPosition === void 0 ? void 0 : percentPosition.x) !== null && _a !== void 0 ? _a : Math.random() * 100) / 100 * container.canvas.size.width,
10483
+ y: ((_b = percentPosition === null || percentPosition === void 0 ? void 0 : percentPosition.y) !== null && _b !== void 0 ? _b : Math.random() * 100) / 100 * container.canvas.size.height
10484
+ };
10485
+ }
10486
+
10487
+ emit() {
10488
+ var _a;
10489
+
10490
+ const container = this.container;
10491
+ const position = this.position;
10492
+ const offset = {
10493
+ x: this.size.mode === SizeMode.percent ? container.canvas.size.width * this.size.width / 100 : this.size.width,
10494
+ y: this.size.mode === SizeMode.percent ? container.canvas.size.height * this.size.height / 100 : this.size.height
10495
+ };
10496
+
10497
+ for (let i = 0; i < this.emitterOptions.rate.quantity; i++) {
10498
+ const particlesOptions = Utils.deepExtend({}, this.particlesOptions);
10499
+
10500
+ if (this.spawnColor !== undefined) {
10501
+ const colorAnimation = (_a = this.emitterOptions.spawnColor) === null || _a === void 0 ? void 0 : _a.animation;
10502
+
10503
+ if (colorAnimation) {
10504
+ const hueAnimation = colorAnimation;
10505
+
10506
+ if (hueAnimation.enable) {
10507
+ this.spawnColor.h = this.setColorAnimation(hueAnimation, this.spawnColor.h, 360);
10508
+ } else {
10509
+ const hslAnimation = colorAnimation;
10510
+ this.spawnColor.h = this.setColorAnimation(hslAnimation.h, this.spawnColor.h, 360);
10511
+ this.spawnColor.s = this.setColorAnimation(hslAnimation.s, this.spawnColor.s, 100);
10512
+ this.spawnColor.l = this.setColorAnimation(hslAnimation.l, this.spawnColor.l, 100);
10513
+ }
10514
+ }
10515
+
10516
+ if (!particlesOptions.color) {
10517
+ particlesOptions.color = {
10518
+ value: this.spawnColor
10519
+ };
10520
+ } else {
10521
+ particlesOptions.color.value = this.spawnColor;
10522
+ }
10523
+ }
10524
+
10525
+ container.particles.addParticle(randomPosition(position, offset), particlesOptions);
10526
+ }
10527
+ }
10528
+
10529
+ setColorAnimation(animation, initValue, maxValue) {
10530
+ var _a;
10531
+
10532
+ const container = this.container;
10533
+
10534
+ if (!animation.enable) {
10535
+ return initValue;
10536
+ }
10537
+
10538
+ const colorOffset = NumberUtils.randomInRange(animation.offset);
10539
+ const emitFactor = 1000 * this.emitterOptions.rate.delay / container.retina.reduceFactor;
10540
+ const colorSpeed = (_a = animation.speed) !== null && _a !== void 0 ? _a : 0;
10541
+ return (initValue + colorSpeed * container.fpsLimit / emitFactor + colorOffset * 3.6) % maxValue;
10542
+ }
10543
+
10544
+ }
10545
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/Emitters/Options/Classes/EmitterRate.js
10546
+ class EmitterRate {
10547
+ constructor() {
10548
+ this.quantity = 1;
10549
+ this.delay = 0.1;
10550
+ }
10551
+
10552
+ load(data) {
10553
+ if (data === undefined) {
10554
+ return;
10555
+ }
10556
+
10557
+ if (data.quantity !== undefined) {
10558
+ this.quantity = data.quantity;
10559
+ }
10560
+
10561
+ if (data.delay !== undefined) {
10562
+ this.delay = data.delay;
10563
+ }
10564
+ }
10565
+
10566
+ }
10567
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/Emitters/Options/Classes/EmitterLife.js
10568
+ class EmitterLife {
10569
+ load(data) {
10570
+ if (data === undefined) {
10571
+ return;
10572
+ }
10573
+
10574
+ if (data.count !== undefined) {
10575
+ this.count = data.count;
10576
+ }
10577
+
10578
+ if (data.delay !== undefined) {
10579
+ this.delay = data.delay;
10580
+ }
10581
+
10582
+ if (data.duration !== undefined) {
10583
+ this.duration = data.duration;
10584
+ }
10585
+ }
10586
+
10587
+ }
10588
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/Emitters/Options/Classes/Emitter.js
10589
+
10590
+
10591
+
10592
+
10593
+
10594
+
10595
+ class Emitter {
10596
+ constructor() {
10597
+ this.direction = MoveDirection.none;
10598
+ this.life = new EmitterLife();
10599
+ this.rate = new EmitterRate();
10600
+ }
10601
+
10602
+ load(data) {
10603
+ if (data === undefined) {
10604
+ return;
10605
+ }
10606
+
10607
+ if (data.size !== undefined) {
10608
+ if (this.size === undefined) {
10609
+ this.size = new EmitterSize();
10610
+ }
10611
+
10612
+ this.size.load(data.size);
10613
+ }
10614
+
10615
+ if (data.direction !== undefined) {
10616
+ this.direction = data.direction;
10617
+ }
10618
+
10619
+ this.life.load(data.life);
10620
+ this.name = data.name;
10621
+
10622
+ if (data.particles !== undefined) {
10623
+ this.particles = Utils.deepExtend({}, data.particles);
10624
+ }
10625
+
10626
+ this.rate.load(data.rate);
10627
+
10628
+ if (data.position !== undefined) {
10629
+ this.position = {
10630
+ x: data.position.x,
10631
+ y: data.position.y
10632
+ };
10633
+ }
10634
+
10635
+ if (data.spawnColor !== undefined) {
10636
+ if (this.spawnColor === undefined) {
10637
+ this.spawnColor = new AnimatableColor();
10638
+ }
10639
+
10640
+ this.spawnColor.load(data.spawnColor);
10641
+ }
10642
+ }
10643
+
10644
+ }
10645
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/Emitters/Enums/EmitterClickMode.js
10646
+ var EmitterClickMode;
10647
+
10648
+ (function (EmitterClickMode) {
10649
+ EmitterClickMode["emitter"] = "emitter";
10650
+ })(EmitterClickMode || (EmitterClickMode = {}));
10651
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/Emitters/Enums/index.js
10652
+
10653
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/Emitters/Emitters.js
10654
+
10655
+
10656
+
10657
+
10658
+ class Emitters {
10659
+ constructor(container) {
10660
+ this.container = container;
10661
+ this.array = [];
10662
+ this.emitters = [];
10663
+ this.interactivityEmitters = [];
10664
+ const overridableContainer = container;
10665
+
10666
+ overridableContainer.addEmitter = (options, position) => this.addEmitter(options, position);
10667
+
10668
+ overridableContainer.playEmitter = idxOrName => {
10669
+ const emitter = idxOrName === undefined || typeof idxOrName === "number" ? this.array[idxOrName || 0] : this.array.find(t => t.name === idxOrName);
10670
+
10671
+ if (emitter) {
10672
+ emitter.play();
10673
+ }
10674
+ };
10675
+
10676
+ overridableContainer.pauseEmitter = idxOrName => {
10677
+ const emitter = idxOrName === undefined || typeof idxOrName === "number" ? this.array[idxOrName || 0] : this.array.find(t => t.name === idxOrName);
10678
+
10679
+ if (emitter) {
10680
+ emitter.pause();
10681
+ }
10682
+ };
10683
+ }
10684
+
10685
+ init(options) {
10686
+ var _a, _b;
10687
+
10688
+ if (!options) {
10689
+ return;
10690
+ }
10691
+
10692
+ if (options.emitters) {
10693
+ if (options.emitters instanceof Array) {
10694
+ this.emitters = options.emitters.map(s => {
10695
+ const tmp = new Emitter();
10696
+ tmp.load(s);
10697
+ return tmp;
10698
+ });
10699
+ } else {
10700
+ if (this.emitters instanceof Array) {
10701
+ this.emitters = new Emitter();
10702
+ }
10703
+
10704
+ this.emitters.load(options.emitters);
10705
+ }
10706
+ }
10707
+
10708
+ const interactivityEmitters = (_b = (_a = options.interactivity) === null || _a === void 0 ? void 0 : _a.modes) === null || _b === void 0 ? void 0 : _b.emitters;
10709
+
10710
+ if (interactivityEmitters) {
10711
+ if (interactivityEmitters instanceof Array) {
10712
+ this.interactivityEmitters = interactivityEmitters.map(s => {
10713
+ const tmp = new Emitter();
10714
+ tmp.load(s);
10715
+ return tmp;
10716
+ });
10717
+ } else {
10718
+ if (this.interactivityEmitters instanceof Array) {
10719
+ this.interactivityEmitters = new Emitter();
10720
+ }
10721
+
10722
+ this.interactivityEmitters.load(interactivityEmitters);
10723
+ }
10724
+ }
10725
+
10726
+ if (this.emitters instanceof Array) {
10727
+ for (const emitterOptions of this.emitters) {
10728
+ this.addEmitter(emitterOptions);
10729
+ }
10730
+ } else {
10731
+ this.addEmitter(this.emitters);
10732
+ }
10733
+ }
10734
+
10735
+ play() {
10736
+ for (const emitter of this.array) {
10737
+ emitter.play();
10738
+ }
10739
+ }
10740
+
10741
+ pause() {
10742
+ for (const emitter of this.array) {
10743
+ emitter.pause();
10744
+ }
10745
+ }
10746
+
10747
+ stop() {
10748
+ this.array = [];
10749
+ }
10750
+
10751
+ update(delta) {
10752
+ for (const emitter of this.array) {
10753
+ emitter.update(delta);
10754
+ }
10755
+ }
10756
+
10757
+ handleClickMode(mode) {
10758
+ const container = this.container;
10759
+ const emitterOptions = this.emitters;
10760
+ const modeEmitters = this.interactivityEmitters;
10761
+
10762
+ if (mode === EmitterClickMode.emitter) {
10763
+ let emitterModeOptions;
10764
+
10765
+ if (modeEmitters instanceof Array) {
10766
+ if (modeEmitters.length > 0) {
10767
+ emitterModeOptions = Utils.itemFromArray(modeEmitters);
10768
+ }
10769
+ } else {
10770
+ emitterModeOptions = modeEmitters;
10771
+ }
10772
+
10773
+ const emittersOptions = emitterModeOptions !== null && emitterModeOptions !== void 0 ? emitterModeOptions : emitterOptions instanceof Array ? Utils.itemFromArray(emitterOptions) : emitterOptions;
10774
+ const ePosition = container.interactivity.mouse.clickPosition;
10775
+ this.addEmitter(Utils.deepExtend({}, emittersOptions), ePosition);
10776
+ }
10777
+ }
10778
+
10779
+ resize() {
10780
+ for (const emitter of this.array) {
10781
+ emitter.resize();
10782
+ }
10783
+ }
10784
+
10785
+ addEmitter(options, position) {
10786
+ const emitter = new EmitterInstance(this, this.container, options, position);
10787
+ this.array.push(emitter);
10788
+ return emitter;
10789
+ }
10790
+
10791
+ removeEmitter(emitter) {
10792
+ const index = this.array.indexOf(emitter);
10793
+
10794
+ if (index >= 0) {
10795
+ this.array.splice(index, 1);
10796
+ }
10797
+ }
10798
+
10799
+ }
10800
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/Emitters/EmittersPlugin.js
10801
+
10802
+
10803
+
10804
+
10805
+
10806
+ class EmittersPlugin {
10807
+ constructor() {
10808
+ this.id = "emitters";
10809
+ }
10810
+
10811
+ getPlugin(container) {
10812
+ return new Emitters(container);
10813
+ }
10814
+
10815
+ needsPlugin(options) {
10816
+ var _a, _b, _c;
10817
+
10818
+ if (options === undefined) {
10819
+ return false;
10820
+ }
10821
+
10822
+ const emitters = options.emitters;
10823
+ let loadEmitters = false;
10824
+
10825
+ if (emitters instanceof Array) {
10826
+ if (emitters.length) {
10827
+ loadEmitters = true;
10828
+ }
10829
+ } else if (emitters !== undefined) {
10830
+ loadEmitters = true;
10831
+ } else if (((_c = (_b = (_a = options.interactivity) === null || _a === void 0 ? void 0 : _a.events) === null || _b === void 0 ? void 0 : _b.onClick) === null || _c === void 0 ? void 0 : _c.mode) && Utils.isInArray(EmitterClickMode.emitter, options.interactivity.events.onClick.mode)) {
10832
+ loadEmitters = true;
10833
+ }
10834
+
10835
+ return loadEmitters;
10836
+ }
10837
+
10838
+ loadOptions(options, source) {
10839
+ var _a, _b;
10840
+
10841
+ if (!this.needsPlugin(options) && !this.needsPlugin(source)) {
10842
+ return;
10843
+ }
10844
+
10845
+ const optionsCast = options;
10846
+
10847
+ if (source === null || source === void 0 ? void 0 : source.emitters) {
10848
+ if ((source === null || source === void 0 ? void 0 : source.emitters) instanceof Array) {
10849
+ optionsCast.emitters = source === null || source === void 0 ? void 0 : source.emitters.map(s => {
10850
+ const tmp = new Emitter();
10851
+ tmp.load(s);
10852
+ return tmp;
10853
+ });
10854
+ } else {
10855
+ let emitterOptions = optionsCast.emitters;
10856
+
10857
+ if ((emitterOptions === null || emitterOptions === void 0 ? void 0 : emitterOptions.load) === undefined) {
10858
+ optionsCast.emitters = emitterOptions = new Emitter();
10859
+ }
10860
+
10861
+ emitterOptions.load(source === null || source === void 0 ? void 0 : source.emitters);
10862
+ }
10863
+ }
10864
+
10865
+ const interactivityEmitters = (_b = (_a = source === null || source === void 0 ? void 0 : source.interactivity) === null || _a === void 0 ? void 0 : _a.modes) === null || _b === void 0 ? void 0 : _b.emitters;
10866
+
10867
+ if (interactivityEmitters) {
10868
+ if (interactivityEmitters instanceof Array) {
10869
+ optionsCast.interactivity.modes.emitters = interactivityEmitters.map(s => {
10870
+ const tmp = new Emitter();
10871
+ tmp.load(s);
10872
+ return tmp;
10873
+ });
10874
+ } else {
10875
+ let emitterOptions = optionsCast.interactivity.modes.emitters;
10876
+
10877
+ if ((emitterOptions === null || emitterOptions === void 0 ? void 0 : emitterOptions.load) === undefined) {
10878
+ optionsCast.interactivity.modes.emitters = emitterOptions = new Emitter();
10879
+ }
10880
+
10881
+ emitterOptions.load(interactivityEmitters);
10882
+ }
10883
+ }
10884
+ }
10885
+
10886
+ }
10887
+
10888
+ const EmittersPlugin_plugin = new EmittersPlugin();
10889
+
10890
+
10891
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/PolygonMask/Enums/InlineArrangement.js
10892
+ var InlineArrangement;
10893
+
10894
+ (function (InlineArrangement) {
10895
+ InlineArrangement["equidistant"] = "equidistant";
10896
+ InlineArrangement["onePerPoint"] = "one-per-point";
10897
+ InlineArrangement["perPoint"] = "per-point";
10898
+ InlineArrangement["randomLength"] = "random-length";
10899
+ InlineArrangement["randomPoint"] = "random-point";
10900
+ })(InlineArrangement || (InlineArrangement = {}));
10901
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/PolygonMask/Enums/MoveType.js
10902
+ var MoveType;
10903
+
10904
+ (function (MoveType) {
10905
+ MoveType["path"] = "path";
10906
+ MoveType["radius"] = "radius";
10907
+ })(MoveType || (MoveType = {}));
10908
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/PolygonMask/Enums/Type.js
10909
+ var Type;
10910
+
10911
+ (function (Type) {
10912
+ Type["inline"] = "inline";
10913
+ Type["inside"] = "inside";
10914
+ Type["outside"] = "outside";
10915
+ Type["none"] = "none";
10916
+ })(Type || (Type = {}));
10917
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/PolygonMask/Enums/index.js
10918
+
10919
+
10920
+
10921
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/PolygonMask/Options/Classes/DrawStroke.js
10922
+
10923
+
10924
+ class DrawStroke {
10925
+ constructor() {
10926
+ this.color = new OptionsColor();
10927
+ this.width = 0.5;
10928
+ this.opacity = 1;
10929
+ }
10930
+
10931
+ load(data) {
10932
+ var _a;
10933
+
10934
+ if (data !== undefined) {
10935
+ this.color = OptionsColor.create(this.color, data.color);
10936
+
10937
+ if (typeof this.color.value === "string") {
10938
+ this.opacity = (_a = ColorUtils.stringToAlpha(this.color.value)) !== null && _a !== void 0 ? _a : this.opacity;
10939
+ }
10940
+
10941
+ if (data.opacity !== undefined) {
10942
+ this.opacity = data.opacity;
10943
+ }
10944
+
10945
+ if (data.width !== undefined) {
10946
+ this.width = data.width;
10947
+ }
10948
+ }
10949
+ }
10950
+
10951
+ }
10952
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/PolygonMask/Options/Classes/Draw.js
10953
+
10954
+
10955
+ class Draw {
10956
+ constructor() {
10957
+ this.enable = false;
10958
+ this.stroke = new DrawStroke();
10959
+ }
10960
+
10961
+ get lineWidth() {
10962
+ return this.stroke.width;
10963
+ }
10964
+
10965
+ set lineWidth(value) {
10966
+ this.stroke.width = value;
10967
+ }
10968
+
10969
+ get lineColor() {
10970
+ return this.stroke.color;
10971
+ }
10972
+
10973
+ set lineColor(value) {
10974
+ this.stroke.color = OptionsColor.create(this.stroke.color, value);
10975
+ }
10976
+
10977
+ load(data) {
10978
+ var _a;
10979
+
10980
+ if (data !== undefined) {
10981
+ if (data.enable !== undefined) {
10982
+ this.enable = data.enable;
10983
+ }
10984
+
10985
+ const stroke = (_a = data.stroke) !== null && _a !== void 0 ? _a : {
10986
+ color: data.lineColor,
10987
+ width: data.lineWidth
10988
+ };
10989
+ this.stroke.load(stroke);
10990
+ }
10991
+ }
10992
+
10993
+ }
10994
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/PolygonMask/Options/Classes/Move.js
10995
+
10996
+ class Move_Move {
10997
+ constructor() {
10998
+ this.radius = 10;
10999
+ this.type = MoveType.path;
11000
+ }
11001
+
11002
+ load(data) {
11003
+ if (data !== undefined) {
11004
+ if (data.radius !== undefined) {
11005
+ this.radius = data.radius;
11006
+ }
11007
+
11008
+ if (data.type !== undefined) {
11009
+ this.type = data.type;
11010
+ }
11011
+ }
11012
+ }
11013
+
11014
+ }
11015
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/PolygonMask/Options/Classes/Inline.js
11016
+
11017
+ class Inline {
11018
+ constructor() {
11019
+ this.arrangement = InlineArrangement.onePerPoint;
11020
+ }
11021
+
11022
+ load(data) {
11023
+ if (data !== undefined) {
11024
+ if (data.arrangement !== undefined) {
11025
+ this.arrangement = data.arrangement;
11026
+ }
11027
+ }
11028
+ }
11029
+
11030
+ }
11031
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/PolygonMask/Options/Classes/LocalSvg.js
11032
+ class LocalSvg {
11033
+ constructor() {
11034
+ this.path = [];
11035
+ this.size = {
11036
+ height: 0,
11037
+ width: 0
11038
+ };
11039
+ }
11040
+
11041
+ load(data) {
11042
+ if (data !== undefined) {
11043
+ if (data.path !== undefined) {
11044
+ this.path = data.path;
11045
+ }
11046
+
11047
+ if (data.size !== undefined) {
11048
+ if (data.size.width !== undefined) {
11049
+ this.size.width = data.size.width;
11050
+ }
11051
+
11052
+ if (data.size.height !== undefined) {
11053
+ this.size.height = data.size.height;
11054
+ }
11055
+ }
11056
+ }
11057
+ }
11058
+
11059
+ }
11060
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/PolygonMask/Options/Classes/PolygonMask.js
11061
+
11062
+
11063
+
11064
+
11065
+
11066
+
11067
+ class PolygonMask {
11068
+ constructor() {
11069
+ this.draw = new Draw();
11070
+ this.enable = false;
11071
+ this.inline = new Inline();
11072
+ this.move = new Move_Move();
11073
+ this.scale = 1;
11074
+ this.type = Type.none;
11075
+ }
11076
+
11077
+ get inlineArrangement() {
11078
+ return this.inline.arrangement;
11079
+ }
11080
+
11081
+ set inlineArrangement(value) {
11082
+ this.inline.arrangement = value;
11083
+ }
11084
+
11085
+ load(data) {
11086
+ var _a;
11087
+
11088
+ if (data !== undefined) {
11089
+ this.draw.load(data.draw);
11090
+ const inline = (_a = data.inline) !== null && _a !== void 0 ? _a : {
11091
+ arrangement: data.inlineArrangement
11092
+ };
11093
+
11094
+ if (inline !== undefined) {
11095
+ this.inline.load(inline);
11096
+ }
11097
+
11098
+ this.move.load(data.move);
11099
+
11100
+ if (data.scale !== undefined) {
11101
+ this.scale = data.scale;
11102
+ }
11103
+
11104
+ if (data.type !== undefined) {
11105
+ this.type = data.type;
11106
+ }
11107
+
11108
+ if (data.enable !== undefined) {
11109
+ this.enable = data.enable;
11110
+ } else {
11111
+ this.enable = this.type !== Type.none;
11112
+ }
11113
+
11114
+ if (data.url !== undefined) {
11115
+ this.url = data.url;
11116
+ }
11117
+
11118
+ if (data.data !== undefined) {
11119
+ if (typeof data.data === "string") {
11120
+ this.data = data.data;
11121
+ } else {
11122
+ this.data = new LocalSvg();
11123
+ this.data.load(data.data);
11124
+ }
11125
+ }
11126
+
11127
+ if (data.position !== undefined) {
11128
+ this.position = Utils.deepExtend({}, data.position);
11129
+ }
11130
+ }
11131
+ }
11132
+
11133
+ }
11134
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/PolygonMask/PolygonMaskInstance.js
11135
+ var PolygonMaskInstance_awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {
11136
+ function adopt(value) {
11137
+ return value instanceof P ? value : new P(function (resolve) {
11138
+ resolve(value);
11139
+ });
11140
+ }
11141
+
11142
+ return new (P || (P = Promise))(function (resolve, reject) {
11143
+ function fulfilled(value) {
11144
+ try {
11145
+ step(generator.next(value));
11146
+ } catch (e) {
11147
+ reject(e);
11148
+ }
11149
+ }
11150
+
11151
+ function rejected(value) {
11152
+ try {
11153
+ step(generator["throw"](value));
11154
+ } catch (e) {
11155
+ reject(e);
11156
+ }
11157
+ }
11158
+
11159
+ function step(result) {
11160
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
11161
+ }
11162
+
11163
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
11164
+ });
11165
+ };
11166
+
11167
+
11168
+
11169
+
11170
+
11171
+ function polygonBounce(particle) {
11172
+ particle.velocity.horizontal = particle.velocity.vertical / 2 - particle.velocity.horizontal;
11173
+ particle.velocity.vertical = particle.velocity.horizontal / 2 - particle.velocity.vertical;
11174
+ }
11175
+
11176
+ function drawPolygonMask(context, rawData, stroke) {
11177
+ const color = ColorUtils.colorToRgb(stroke.color);
11178
+
11179
+ if (!color) {
11180
+ return;
11181
+ }
11182
+
11183
+ context.beginPath();
11184
+ context.moveTo(rawData[0].x, rawData[0].y);
11185
+
11186
+ for (const item of rawData) {
11187
+ context.lineTo(item.x, item.y);
11188
+ }
11189
+
11190
+ context.closePath();
11191
+ context.strokeStyle = ColorUtils.getStyleFromRgb(color);
11192
+ context.lineWidth = stroke.width;
11193
+ context.stroke();
11194
+ }
11195
+
11196
+ function drawPolygonMaskPath(context, path, stroke, position) {
11197
+ context.translate(position.x, position.y);
11198
+ const color = ColorUtils.colorToRgb(stroke.color);
11199
+
11200
+ if (!color) {
11201
+ return;
11202
+ }
11203
+
11204
+ context.strokeStyle = ColorUtils.getStyleFromRgb(color, stroke.opacity);
11205
+ context.lineWidth = stroke.width;
11206
+ context.stroke(path);
11207
+ }
11208
+
11209
+ function parsePaths(paths, scale, offset) {
11210
+ const res = [];
11211
+
11212
+ for (const path of paths) {
11213
+ const segments = path.element.pathSegList;
11214
+ const len = segments.numberOfItems;
11215
+ const p = {
11216
+ x: 0,
11217
+ y: 0
11218
+ };
11219
+
11220
+ for (let i = 0; i < len; i++) {
11221
+ const segment = segments.getItem(i);
11222
+ const svgPathSeg = window.SVGPathSeg;
11223
+
11224
+ switch (segment.pathSegType) {
11225
+ case svgPathSeg.PATHSEG_MOVETO_ABS:
11226
+ case svgPathSeg.PATHSEG_LINETO_ABS:
11227
+ case svgPathSeg.PATHSEG_CURVETO_CUBIC_ABS:
11228
+ case svgPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS:
11229
+ case svgPathSeg.PATHSEG_ARC_ABS:
11230
+ case svgPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS:
11231
+ case svgPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS:
11232
+ {
11233
+ const absSeg = segment;
11234
+ p.x = absSeg.x;
11235
+ p.y = absSeg.y;
11236
+ break;
11237
+ }
11238
+
11239
+ case svgPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS:
11240
+ p.x = segment.x;
11241
+ break;
11242
+
11243
+ case svgPathSeg.PATHSEG_LINETO_VERTICAL_ABS:
11244
+ p.y = segment.y;
11245
+ break;
11246
+
11247
+ case svgPathSeg.PATHSEG_LINETO_REL:
11248
+ case svgPathSeg.PATHSEG_MOVETO_REL:
11249
+ case svgPathSeg.PATHSEG_CURVETO_CUBIC_REL:
11250
+ case svgPathSeg.PATHSEG_CURVETO_QUADRATIC_REL:
11251
+ case svgPathSeg.PATHSEG_ARC_REL:
11252
+ case svgPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL:
11253
+ case svgPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL:
11254
+ {
11255
+ const relSeg = segment;
11256
+ p.x += relSeg.x;
11257
+ p.y += relSeg.y;
11258
+ break;
11259
+ }
11260
+
11261
+ case svgPathSeg.PATHSEG_LINETO_HORIZONTAL_REL:
11262
+ p.x += segment.x;
11263
+ break;
11264
+
11265
+ case svgPathSeg.PATHSEG_LINETO_VERTICAL_REL:
11266
+ p.y += segment.y;
11267
+ break;
11268
+
11269
+ case svgPathSeg.PATHSEG_UNKNOWN:
11270
+ case svgPathSeg.PATHSEG_CLOSEPATH:
11271
+ continue;
11272
+ }
11273
+
11274
+ res.push({
11275
+ x: p.x * scale + offset.x,
11276
+ y: p.y * scale + offset.y
11277
+ });
11278
+ }
11279
+ }
11280
+
11281
+ return res;
11282
+ }
11283
+
11284
+ class PolygonMaskInstance {
11285
+ constructor(container) {
11286
+ this.container = container;
11287
+ this.dimension = {
11288
+ height: 0,
11289
+ width: 0
11290
+ };
11291
+ this.path2DSupported = !!window.Path2D;
11292
+ this.options = new PolygonMask();
11293
+ this.polygonMaskMoveRadius = this.options.move.radius * container.retina.pixelRatio;
11294
+ }
11295
+
11296
+ initAsync(options) {
11297
+ return PolygonMaskInstance_awaiter(this, void 0, void 0, function* () {
11298
+ this.options.load(options === null || options === void 0 ? void 0 : options.polygon);
11299
+ const polygonMaskOptions = this.options;
11300
+ this.polygonMaskMoveRadius = polygonMaskOptions.move.radius * this.container.retina.pixelRatio;
11301
+
11302
+ if (polygonMaskOptions.enable) {
11303
+ yield this.initRawData();
11304
+ }
11305
+ });
11306
+ }
11307
+
11308
+ resize() {
11309
+ const container = this.container;
11310
+ const options = this.options;
11311
+
11312
+ if (!(options.enable && options.type !== Type.none)) {
11313
+ return;
11314
+ }
11315
+
11316
+ if (this.redrawTimeout) {
11317
+ clearTimeout(this.redrawTimeout);
11318
+ }
11319
+
11320
+ this.redrawTimeout = window.setTimeout(() => PolygonMaskInstance_awaiter(this, void 0, void 0, function* () {
11321
+ yield this.initRawData(true);
11322
+ container.particles.redraw();
11323
+ }), 250);
11324
+ }
11325
+
11326
+ stop() {
11327
+ delete this.raw;
11328
+ delete this.paths;
11329
+ }
11330
+
11331
+ particlesInitialization() {
11332
+ const options = this.options;
11333
+
11334
+ if (options.enable && options.type === Type.inline && (options.inline.arrangement === InlineArrangement.onePerPoint || options.inline.arrangement === InlineArrangement.perPoint)) {
11335
+ this.drawPoints();
11336
+ return true;
11337
+ }
11338
+
11339
+ return false;
11340
+ }
11341
+
11342
+ particlePosition(position) {
11343
+ var _a, _b;
11344
+
11345
+ const options = this.options;
11346
+
11347
+ if (!(options.enable && ((_b = (_a = this.raw) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) > 0)) {
11348
+ return;
11349
+ }
11350
+
11351
+ return Utils.deepExtend({}, position ? position : this.randomPoint());
11352
+ }
11353
+
11354
+ particleBounce(particle) {
11355
+ const options = this.options;
11356
+
11357
+ if (options.enable && options.type !== Type.none && options.type !== Type.inline) {
11358
+ if (!this.checkInsidePolygon(particle.getPosition())) {
11359
+ polygonBounce(particle);
11360
+ return true;
11361
+ }
11362
+ } else if (options.enable && options.type === Type.inline && particle.initialPosition) {
11363
+ const dist = NumberUtils.getDistance(particle.initialPosition, particle.getPosition());
11364
+
11365
+ if (dist > this.polygonMaskMoveRadius) {
11366
+ polygonBounce(particle);
11367
+ return true;
11368
+ }
11369
+ }
11370
+
11371
+ return false;
11372
+ }
11373
+
11374
+ clickPositionValid(position) {
11375
+ const options = this.options;
11376
+ return options.enable && options.type !== Type.none && options.type !== Type.inline && this.checkInsidePolygon(position);
11377
+ }
11378
+
11379
+ draw(context) {
11380
+ var _a;
11381
+
11382
+ if (!((_a = this.paths) === null || _a === void 0 ? void 0 : _a.length)) {
11383
+ return;
11384
+ }
11385
+
11386
+ const options = this.options;
11387
+ const polygonDraw = options.draw;
11388
+
11389
+ if (!(options.enable && polygonDraw.enable)) {
11390
+ return;
11391
+ }
11392
+
11393
+ const rawData = this.raw;
11394
+
11395
+ for (const path of this.paths) {
11396
+ const path2d = path.path2d;
11397
+ const path2dSupported = this.path2DSupported;
11398
+
11399
+ if (!context) {
11400
+ continue;
11401
+ }
11402
+
11403
+ if (path2dSupported && path2d && this.offset) {
11404
+ drawPolygonMaskPath(context, path2d, polygonDraw.stroke, this.offset);
11405
+ } else if (rawData) {
11406
+ drawPolygonMask(context, rawData, polygonDraw.stroke);
11407
+ }
11408
+ }
11409
+ }
11410
+
11411
+ checkInsidePolygon(position) {
11412
+ var _a, _b;
11413
+
11414
+ const container = this.container;
11415
+ const options = this.options;
11416
+
11417
+ if (!options.enable || options.type === Type.none || options.type === Type.inline) {
11418
+ return true;
11419
+ }
11420
+
11421
+ if (!this.raw) {
11422
+ throw new Error(Constants.noPolygonFound);
11423
+ }
11424
+
11425
+ const canvasSize = container.canvas.size;
11426
+ const x = (_a = position === null || position === void 0 ? void 0 : position.x) !== null && _a !== void 0 ? _a : Math.random() * canvasSize.width;
11427
+ const y = (_b = position === null || position === void 0 ? void 0 : position.y) !== null && _b !== void 0 ? _b : Math.random() * canvasSize.height;
11428
+ let inside = false;
11429
+
11430
+ for (let i = 0, j = this.raw.length - 1; i < this.raw.length; j = i++) {
11431
+ const pi = this.raw[i];
11432
+ const pj = this.raw[j];
11433
+ const intersect = pi.y > y !== pj.y > y && x < (pj.x - pi.x) * (y - pi.y) / (pj.y - pi.y) + pi.x;
11434
+
11435
+ if (intersect) {
11436
+ inside = !inside;
11437
+ }
11438
+ }
11439
+
11440
+ return options.type === Type.inside ? inside : options.type === Type.outside ? !inside : false;
11441
+ }
11442
+
11443
+ parseSvgPath(xml, force) {
11444
+ var _a, _b, _c;
11445
+
11446
+ const forceDownload = force !== null && force !== void 0 ? force : false;
11447
+
11448
+ if (this.paths !== undefined && !forceDownload) {
11449
+ return this.raw;
11450
+ }
11451
+
11452
+ const container = this.container;
11453
+ const options = this.options;
11454
+ const parser = new DOMParser();
11455
+ const doc = parser.parseFromString(xml, "image/svg+xml");
11456
+ const svg = doc.getElementsByTagName("svg")[0];
11457
+ let svgPaths = svg.getElementsByTagName("path");
11458
+
11459
+ if (!svgPaths.length) {
11460
+ svgPaths = doc.getElementsByTagName("path");
11461
+ }
11462
+
11463
+ this.paths = [];
11464
+
11465
+ for (let i = 0; i < svgPaths.length; i++) {
11466
+ const path = svgPaths.item(i);
11467
+
11468
+ if (path) {
11469
+ this.paths.push({
11470
+ element: path,
11471
+ length: path.getTotalLength()
11472
+ });
11473
+ }
11474
+ }
11475
+
11476
+ const pxRatio = container.retina.pixelRatio;
11477
+ const scale = options.scale / pxRatio;
11478
+ this.dimension.width = parseFloat((_a = svg.getAttribute("width")) !== null && _a !== void 0 ? _a : "0") * scale;
11479
+ this.dimension.height = parseFloat((_b = svg.getAttribute("height")) !== null && _b !== void 0 ? _b : "0") * scale;
11480
+ const position = (_c = options.position) !== null && _c !== void 0 ? _c : {
11481
+ x: 50,
11482
+ y: 50
11483
+ };
11484
+ this.offset = {
11485
+ x: container.canvas.size.width * position.x / (100 * pxRatio) - this.dimension.width / 2,
11486
+ y: container.canvas.size.height * position.y / (100 * pxRatio) - this.dimension.height / 2
11487
+ };
11488
+ return parsePaths(this.paths, scale, this.offset);
11489
+ }
11490
+
11491
+ downloadSvgPath(svgUrl, force) {
11492
+ return PolygonMaskInstance_awaiter(this, void 0, void 0, function* () {
11493
+ const options = this.options;
11494
+ const url = svgUrl || options.url;
11495
+ const forceDownload = force !== null && force !== void 0 ? force : false;
11496
+
11497
+ if (!url || this.paths !== undefined && !forceDownload) {
11498
+ return this.raw;
11499
+ }
11500
+
11501
+ const req = yield fetch(url);
11502
+
11503
+ if (!req.ok) {
11504
+ throw new Error("tsParticles Error - Error occurred during polygon mask download");
11505
+ }
11506
+
11507
+ return this.parseSvgPath(yield req.text(), force);
11508
+ });
11509
+ }
11510
+
11511
+ drawPoints() {
11512
+ if (!this.raw) {
11513
+ return;
11514
+ }
11515
+
11516
+ for (const item of this.raw) {
11517
+ this.container.particles.addParticle({
11518
+ x: item.x,
11519
+ y: item.y
11520
+ });
11521
+ }
11522
+ }
11523
+
11524
+ randomPoint() {
11525
+ const container = this.container;
11526
+ const options = this.options;
11527
+ let position;
11528
+
11529
+ if (options.type === Type.inline) {
11530
+ switch (options.inline.arrangement) {
11531
+ case InlineArrangement.randomPoint:
11532
+ position = this.getRandomPoint();
11533
+ break;
11534
+
11535
+ case InlineArrangement.randomLength:
11536
+ position = this.getRandomPointByLength();
11537
+ break;
11538
+
11539
+ case InlineArrangement.equidistant:
11540
+ position = this.getEquidistantPointByIndex(container.particles.count);
11541
+ break;
11542
+
11543
+ case InlineArrangement.onePerPoint:
11544
+ case InlineArrangement.perPoint:
11545
+ default:
11546
+ position = this.getPointByIndex(container.particles.count);
11547
+ }
11548
+ } else {
11549
+ position = {
11550
+ x: Math.random() * container.canvas.size.width,
11551
+ y: Math.random() * container.canvas.size.height
11552
+ };
11553
+ }
11554
+
11555
+ if (this.checkInsidePolygon(position)) {
11556
+ return position;
11557
+ } else {
11558
+ return this.randomPoint();
11559
+ }
11560
+ }
11561
+
11562
+ getRandomPoint() {
11563
+ if (!this.raw || !this.raw.length) {
11564
+ throw new Error(Constants.noPolygonDataLoaded);
11565
+ }
11566
+
11567
+ const coords = Utils.itemFromArray(this.raw);
11568
+ return {
11569
+ x: coords.x,
11570
+ y: coords.y
11571
+ };
11572
+ }
11573
+
11574
+ getRandomPointByLength() {
11575
+ var _a, _b, _c;
11576
+
11577
+ const options = this.options;
11578
+
11579
+ if (!this.raw || !this.raw.length || !((_a = this.paths) === null || _a === void 0 ? void 0 : _a.length)) {
11580
+ throw new Error(Constants.noPolygonDataLoaded);
11581
+ }
11582
+
11583
+ const path = Utils.itemFromArray(this.paths);
11584
+ const distance = Math.floor(Math.random() * path.length) + 1;
11585
+ const point = path.element.getPointAtLength(distance);
11586
+ return {
11587
+ x: point.x * options.scale + (((_b = this.offset) === null || _b === void 0 ? void 0 : _b.x) || 0),
11588
+ y: point.y * options.scale + (((_c = this.offset) === null || _c === void 0 ? void 0 : _c.y) || 0)
11589
+ };
11590
+ }
11591
+
11592
+ getEquidistantPointByIndex(index) {
11593
+ var _a, _b, _c, _d, _e, _f, _g;
11594
+
11595
+ const options = this.container.actualOptions;
11596
+ const polygonMaskOptions = this.options;
11597
+ if (!this.raw || !this.raw.length || !((_a = this.paths) === null || _a === void 0 ? void 0 : _a.length)) throw new Error(Constants.noPolygonDataLoaded);
11598
+ let offset = 0;
11599
+ let point;
11600
+ const totalLength = this.paths.reduce((tot, path) => tot + path.length, 0);
11601
+ const distance = totalLength / options.particles.number.value;
11602
+
11603
+ for (const path of this.paths) {
11604
+ const pathDistance = distance * index - offset;
11605
+
11606
+ if (pathDistance <= path.length) {
11607
+ point = path.element.getPointAtLength(pathDistance);
11608
+ break;
11609
+ } else {
11610
+ offset += path.length;
11611
+ }
11612
+ }
11613
+
11614
+ return {
11615
+ x: ((_b = point === null || point === void 0 ? void 0 : point.x) !== null && _b !== void 0 ? _b : 0) * polygonMaskOptions.scale + ((_d = (_c = this.offset) === null || _c === void 0 ? void 0 : _c.x) !== null && _d !== void 0 ? _d : 0),
11616
+ y: ((_e = point === null || point === void 0 ? void 0 : point.y) !== null && _e !== void 0 ? _e : 0) * polygonMaskOptions.scale + ((_g = (_f = this.offset) === null || _f === void 0 ? void 0 : _f.y) !== null && _g !== void 0 ? _g : 0)
11617
+ };
11618
+ }
11619
+
11620
+ getPointByIndex(index) {
11621
+ if (!this.raw || !this.raw.length) {
11622
+ throw new Error(Constants.noPolygonDataLoaded);
11623
+ }
11624
+
11625
+ const coords = this.raw[index % this.raw.length];
11626
+ return {
11627
+ x: coords.x,
11628
+ y: coords.y
11629
+ };
11630
+ }
11631
+
11632
+ createPath2D() {
11633
+ var _a, _b;
11634
+
11635
+ const options = this.options;
11636
+
11637
+ if (!this.path2DSupported || !((_a = this.paths) === null || _a === void 0 ? void 0 : _a.length)) {
11638
+ return;
11639
+ }
11640
+
11641
+ for (const path of this.paths) {
11642
+ const pathData = (_b = path.element) === null || _b === void 0 ? void 0 : _b.getAttribute("d");
11643
+
11644
+ if (pathData) {
11645
+ const path2d = new Path2D(pathData);
11646
+ const matrix = document.createElementNS("http://www.w3.org/2000/svg", "svg").createSVGMatrix();
11647
+ const finalPath = new Path2D();
11648
+ const transform = matrix.scale(options.scale);
11649
+
11650
+ if (finalPath.addPath) {
11651
+ finalPath.addPath(path2d, transform);
11652
+ path.path2d = finalPath;
11653
+ } else {
11654
+ delete path.path2d;
11655
+ }
11656
+ } else {
11657
+ delete path.path2d;
11658
+ }
11659
+
11660
+ if (path.path2d || !this.raw) {
11661
+ continue;
11662
+ }
11663
+
11664
+ path.path2d = new Path2D();
11665
+ path.path2d.moveTo(this.raw[0].x, this.raw[0].y);
11666
+ this.raw.forEach((pos, i) => {
11667
+ var _a;
11668
+
11669
+ if (i > 0) {
11670
+ (_a = path.path2d) === null || _a === void 0 ? void 0 : _a.lineTo(pos.x, pos.y);
11671
+ }
11672
+ });
11673
+ path.path2d.closePath();
11674
+ }
11675
+ }
11676
+
11677
+ initRawData(force) {
11678
+ return PolygonMaskInstance_awaiter(this, void 0, void 0, function* () {
11679
+ const options = this.options;
11680
+
11681
+ if (options.url) {
11682
+ this.raw = yield this.downloadSvgPath(options.url, force);
11683
+ } else if (options.data) {
11684
+ const data = options.data;
11685
+ let svg;
11686
+
11687
+ if (typeof data !== "string") {
11688
+ const path = data.path instanceof Array ? data.path.map(t => `<path d="${t}" />`).join("") : `<path d="${data.path}" />`;
11689
+ const namespaces = 'xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"';
11690
+ svg = `<svg ${namespaces} width="${data.size.width}" height="${data.size.height}">${path}</svg>`;
11691
+ } else {
11692
+ svg = data;
11693
+ }
11694
+
11695
+ this.raw = this.parseSvgPath(svg, force);
11696
+ }
11697
+
11698
+ this.createPath2D();
11699
+ });
11700
+ }
11701
+
11702
+ }
11703
+ ;// CONCATENATED MODULE: ./dist/browser/Plugins/PolygonMask/PolygonMaskPlugin.js
11704
+
11705
+
11706
+
11707
+
11708
+ class PolygonMaskPlugin {
11709
+ constructor() {
11710
+ this.id = "polygonMask";
11711
+ }
11712
+
11713
+ getPlugin(container) {
11714
+ return new PolygonMaskInstance(container);
11715
+ }
11716
+
11717
+ needsPlugin(options) {
11718
+ var _a, _b, _c;
11719
+
11720
+ return (_b = (_a = options === null || options === void 0 ? void 0 : options.polygon) === null || _a === void 0 ? void 0 : _a.enable) !== null && _b !== void 0 ? _b : ((_c = options === null || options === void 0 ? void 0 : options.polygon) === null || _c === void 0 ? void 0 : _c.type) !== undefined && options.polygon.type !== Type.none;
11721
+ }
11722
+
11723
+ loadOptions(options, source) {
11724
+ if (!this.needsPlugin(source)) {
11725
+ return;
11726
+ }
11727
+
11728
+ const optionsCast = options;
11729
+ let polygonOptions = optionsCast.polygon;
11730
+
11731
+ if ((polygonOptions === null || polygonOptions === void 0 ? void 0 : polygonOptions.load) === undefined) {
11732
+ optionsCast.polygon = polygonOptions = new PolygonMask();
11733
+ }
11734
+
11735
+ polygonOptions.load(source === null || source === void 0 ? void 0 : source.polygon);
11736
+ }
11737
+
11738
+ }
11739
+
11740
+ const PolygonMaskPlugin_plugin = new PolygonMaskPlugin();
11741
+
11742
+
11743
+ ;// CONCATENATED MODULE: ./dist/browser/main.js
11744
+
11745
+
11746
+
11747
+
11748
+ class Main extends MainSlim {
11749
+ constructor() {
11750
+ super();
11751
+ this.addPlugin(AbsorbersPlugin_plugin);
11752
+ this.addPlugin(EmittersPlugin_plugin);
11753
+ this.addPlugin(PolygonMaskPlugin_plugin);
11754
+ }
11755
+
11756
+ }
11757
+ ;// CONCATENATED MODULE: ./dist/browser/index.js
11758
+
11759
+
11760
+
11761
+ const tsParticles = new Main();
11762
+ tsParticles.init();
11763
+ const {
11764
+ particlesJS,
11765
+ pJSDom
11766
+ } = initPjs(tsParticles);
11767
+
11768
+
11769
+
11770
+
11771
+
11772
+
11773
+
11774
+
11775
+ /******/ return __webpack_exports__;
11776
+ /******/ })()
11777
+ ;
11778
+ });
assets/js/tsparticles.min.js ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Author : Matteo Bruni - https://www.matteobruni.it
3
+ * MIT license: https://opensource.org/licenses/MIT
4
+ * Demo / Generator : https://particles.js.org/
5
+ * GitHub : https://www.github.com/matteobruni/tsparticles
6
+ * How to use? : Check the GitHub README
7
+ * v1.22.1
8
+ */
9
+ !function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i();else if("function"==typeof define&&define.amd)define([],i);else{var e=i();for(var o in e)("object"==typeof exports?exports:t)[o]=e[o]}}(this,(function(){return(()=>{"use strict";var t={d:(i,e)=>{for(var o in e)t.o(e,o)&&!t.o(i,o)&&Object.defineProperty(i,o,{enumerable:!0,get:e[o]})},o:(t,i)=>Object.prototype.hasOwnProperty.call(t,i),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},i={};t.r(i),t.d(i,{AbsorberClickMode:()=>ee,AnimationStatus:()=>p,CanvasUtils:()=>T,ClickMode:()=>r,CollisionMode:()=>d,ColorUtils:()=>R,Constants:()=>M,Container:()=>Ji,DestroyType:()=>y,DivMode:()=>l,DivType:()=>b,EmitterClickMode:()=>ge,HoverMode:()=>c,InlineArrangement:()=>xe,InteractivityDetect:()=>w,Main:()=>Fe,MoveDirection:()=>s,MoveType:()=>ke,OutMode:()=>h,ProcessBubbleType:()=>m,RotateDirection:()=>n,ShapeType:()=>f,SizeMode:()=>u,StartValueType:()=>g,ThemeMode:()=>v,Type:()=>ze,Utils:()=>P,pJSDom:()=>qe,particlesJS:()=>Le,tsParticles:()=>He});class e{getSidesCount(){return 4}draw(t,i,e){t.rect(-e,-e,2*e,2*e)}}var o,s,n;!function(t){t.bottom="bottom",t.left="left",t.right="right",t.top="top"}(o||(o={})),function(t){t.bottom="bottom",t.bottomLeft="bottom-left",t.bottomRight="bottom-right",t.left="left",t.none="none",t.right="right",t.top="top",t.topLeft="top-left",t.topRight="top-right"}(s||(s={})),function(t){t.clockwise="clockwise",t.counterClockwise="counter-clockwise",t.random="random"}(n||(n={}));class a{static clamp(t,i,e){return Math.min(Math.max(t,i),e)}static mix(t,i,e,o){return Math.floor((t*e+i*o)/(e+o))}static randomInRange(t){const i=a.getRangeMax(t);let e=a.getRangeMin(t);return i===e&&(e=0),Math.random()*(i-e)+e}static getRangeValue(t){return"number"==typeof t?t:a.randomInRange(t)}static getRangeMin(t){return"number"==typeof t?t:t.min}static getRangeMax(t){return"number"==typeof t?t:t.max}static setRangeValue(t,i){if(t===i||void 0===i&&"number"==typeof t)return t;const e=a.getRangeMin(t),o=a.getRangeMax(t);return void 0!==i?{min:Math.min(e,i),max:Math.max(o,i)}:a.setRangeValue(e,o)}static getValue(t){const i=t.random,{enable:e,minimumValue:o}="boolean"==typeof i?{enable:i,minimumValue:0}:i;return e?a.randomInRange({min:o,max:t.value}):t.value}static getDistances(t,i){const e=t.x-i.x,o=t.y-i.y;return{dx:e,dy:o,distance:Math.sqrt(e*e+o*o)}}static getDistance(t,i){return a.getDistances(t,i).distance}static getParticleBaseVelocity(t){let i;switch(t.direction){case s.top:i={x:0,y:-1};break;case s.topRight:i={x:.5,y:-.5};break;case s.right:i={x:1,y:-0};break;case s.bottomRight:i={x:.5,y:.5};break;case s.bottom:i={x:0,y:1};break;case s.bottomLeft:i={x:-.5,y:1};break;case s.left:i={x:-1,y:0};break;case s.topLeft:i={x:-.5,y:-.5};break;default:i={x:0,y:0}}return i}static rotateVelocity(t,i){return{horizontal:t.horizontal*Math.cos(i)-t.vertical*Math.sin(i),vertical:t.horizontal*Math.sin(i)+t.vertical*Math.cos(i)}}static collisionVelocity(t,i,e,o){return{horizontal:t.horizontal*(e-o)/(e+o)+2*i.horizontal*o/(e+o),vertical:t.vertical}}}var r,l,c,d,h,u,v,p,y,m,f,g,b,w,x=function(t,i,e,o){return new(e||(e=Promise))((function(s,n){function a(t){try{l(o.next(t))}catch(t){n(t)}}function r(t){try{l(o.throw(t))}catch(t){n(t)}}function l(t){var i;t.done?s(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(a,r)}l((o=o.apply(t,i||[])).next())}))};function k(t,i,e,o,s,n){const a={bounced:!1};return i.min>=o.min&&i.min<=o.max&&i.max>=o.min&&i.max<=o.max&&(t.max>=e.min&&t.max<=(e.max+e.min)/2&&s>0||t.min<=e.max&&t.min>(e.max+e.min)/2&&s<0)&&(a.velocity=s*-n,a.bounced=!0),a}function z(t,i){if(i instanceof Array){for(const e of i)if(t.matches(e))return!0;return!1}return t.matches(i)}class P{static isSsr(){return"undefined"==typeof window||!window}static get animate(){return P.isSsr()?t=>setTimeout(t):t=>(window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||window.setTimeout)(t)}static get cancelAnimation(){return P.isSsr()?t=>clearTimeout(t):t=>(window.cancelAnimationFrame||window.webkitCancelRequestAnimationFrame||window.mozCancelRequestAnimationFrame||window.oCancelRequestAnimationFrame||window.msCancelRequestAnimationFrame||window.clearTimeout)(t)}static isInArray(t,i){return t===i||i instanceof Array&&i.indexOf(t)>-1}static loadFont(t){return x(this,void 0,void 0,(function*(){try{yield document.fonts.load(`${t.weight} 36px '${t.font}'`)}catch(t){}}))}static arrayRandomIndex(t){return Math.floor(Math.random()*t.length)}static itemFromArray(t,i,e=!0){return t[void 0!==i&&e?i%t.length:P.arrayRandomIndex(t)]}static isPointInside(t,i,e,o){return P.areBoundsInside(P.calculateBounds(t,null!=e?e:0),i,o)}static areBoundsInside(t,i,e){let s=!0;return e&&e!==o.bottom||(s=t.top<i.height),!s||e&&e!==o.left||(s=t.right>0),!s||e&&e!==o.right||(s=t.left<i.width),!s||e&&e!==o.top||(s=t.bottom>0),s}static calculateBounds(t,i){return{bottom:t.y+i,left:t.x-i,right:t.x+i,top:t.y-i}}static loadImage(t){return new Promise((i,e)=>{if(!t)return void e("Error tsParticles - No image.src");const o={source:t,type:t.substr(t.length-3)},s=new Image;s.addEventListener("load",()=>{o.element=s,i(o)}),s.addEventListener("error",()=>{e("Error tsParticles - loading image: "+t)}),s.src=t})}static downloadSvgImage(t){return x(this,void 0,void 0,(function*(){if(!t)throw new Error("Error tsParticles - No image.src");const i={source:t,type:t.substr(t.length-3)};if("svg"!==i.type)return P.loadImage(t);const e=yield fetch(i.source);if(!e.ok)throw new Error("Error tsParticles - Image not found");return i.svgData=yield e.text(),i}))}static deepExtend(t,...i){for(const e of i){if(null==e)continue;if("object"!=typeof e){t=e;continue}const i=Array.isArray(e);!i||"object"==typeof t&&t&&Array.isArray(t)?i||"object"==typeof t&&t&&!Array.isArray(t)||(t={}):t=[];for(const i in e){if("__proto__"===i)continue;const o=e[i],s="object"==typeof o,n=t;n[i]=s&&Array.isArray(o)?o.map(t=>P.deepExtend(n[i],t)):P.deepExtend(n[i],o)}}return t}static isDivModeEnabled(t,i){return i instanceof Array?!!i.find(i=>i.enable&&P.isInArray(t,i.mode)):P.isInArray(t,i.mode)}static divModeExecute(t,i,e){if(i instanceof Array)for(const o of i){const i=o.mode;o.enable&&P.isInArray(t,i)&&P.singleDivModeExecute(o,e)}else{const o=i.mode;i.enable&&P.isInArray(t,o)&&P.singleDivModeExecute(i,e)}}static singleDivModeExecute(t,i){const e=t.selectors;if(e instanceof Array)for(const o of e)i(o,t);else i(e,t)}static divMode(t,i){if(i&&t)return t instanceof Array?t.find(t=>z(i,t.selectors)):z(i,t.selectors)?t:void 0}static circleBounceDataFromParticle(t){return{position:t.getPosition(),radius:t.getRadius(),velocity:t.velocity,factor:{horizontal:a.getValue(t.options.bounce.horizontal),vertical:a.getValue(t.options.bounce.vertical)}}}static circleBounce(t,i){const e=t.velocity.horizontal,o=t.velocity.vertical,s=t.position,n=i.position;if(e*(n.x-s.x)+o*(n.y-s.y)>=0){const e=-Math.atan2(n.y-s.y,n.x-s.x),o=t.radius,r=i.radius,l=a.rotateVelocity(t.velocity,e),c=a.rotateVelocity(i.velocity,e),d=a.collisionVelocity(l,c,o,r),h=a.collisionVelocity(c,l,o,r),u=a.rotateVelocity(d,-e),v=a.rotateVelocity(h,-e);t.velocity.horizontal=u.horizontal*t.factor.horizontal,t.velocity.vertical=u.vertical*t.factor.vertical,i.velocity.horizontal=v.horizontal*i.factor.horizontal,i.velocity.vertical=v.vertical*i.factor.vertical}}static rectBounce(t,i){const e=t.getPosition(),o=t.getRadius(),s=P.calculateBounds(e,o),n=k({min:s.left,max:s.right},{min:s.top,max:s.bottom},{min:i.left,max:i.right},{min:i.top,max:i.bottom},t.velocity.horizontal,a.getValue(t.options.bounce.horizontal));n.bounced&&(void 0!==n.velocity&&(t.velocity.horizontal=n.velocity),void 0!==n.position&&(t.position.x=n.position));const r=k({min:s.top,max:s.bottom},{min:s.left,max:s.right},{min:i.top,max:i.bottom},{min:i.left,max:i.right},t.velocity.vertical,a.getValue(t.options.bounce.vertical));r.bounced&&(void 0!==r.velocity&&(t.velocity.vertical=r.velocity),void 0!==r.position&&(t.position.y=r.position))}}class M{}function S(t,i,e){let o=e;return o<0&&(o+=1),o>1&&(o-=1),o<1/6?t+6*(i-t)*o:o<.5?i:o<2/3?t+(i-t)*(2/3-o)*6:t}function C(t){if(t.startsWith("rgb")){const i=/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([\d.]+)\s*)?\)/i.exec(t);return i?{a:i.length>4?parseFloat(i[5]):1,b:parseInt(i[3],10),g:parseInt(i[2],10),r:parseInt(i[1],10)}:void 0}if(t.startsWith("hsl")){const i=/hsla?\(\s*(\d+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([\d.]+)\s*)?\)/i.exec(t);return i?R.hslaToRgba({a:i.length>4?parseFloat(i[5]):1,h:parseInt(i[1],10),l:parseInt(i[3],10),s:parseInt(i[2],10)}):void 0}if(t.startsWith("hsv")){const i=/hsva?\(\s*(\d+)°\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([\d.]+)\s*)?\)/i.exec(t);return i?R.hsvaToRgba({a:i.length>4?parseFloat(i[5]):1,h:parseInt(i[1],10),s:parseInt(i[2],10),v:parseInt(i[3],10)}):void 0}{const i=/^#?([a-f\d])([a-f\d])([a-f\d])([a-f\d])?$/i,e=t.replace(i,(t,i,e,o,s)=>i+i+e+e+o+o+(void 0!==s?s+s:"")),o=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})?$/i.exec(e);return o?{a:void 0!==o[4]?parseInt(o[4],16)/255:1,b:parseInt(o[3],16),g:parseInt(o[2],16),r:parseInt(o[1],16)}:void 0}}M.canvasClass="tsparticles-canvas-el",M.randomColorValue="random",M.midColorValue="mid",M.touchEndEvent="touchend",M.mouseDownEvent="mousedown",M.mouseUpEvent="mouseup",M.mouseMoveEvent="mousemove",M.touchStartEvent="touchstart",M.touchMoveEvent="touchmove",M.mouseLeaveEvent="mouseleave",M.mouseOutEvent="mouseout",M.touchCancelEvent="touchcancel",M.resizeEvent="resize",M.visibilityChangeEvent="visibilitychange",M.noPolygonDataLoaded="No polygon data loaded.",M.noPolygonFound="No polygon found, you need to specify SVG url in config.";class R{static colorToRgb(t,i,e=!0){var o,s,n;if(void 0===t)return;const a="string"==typeof t?{value:t}:t;let r;if("string"==typeof a.value)r=a.value===M.randomColorValue?R.getRandomRgbColor():R.stringToRgb(a.value);else if(a.value instanceof Array){const t=P.itemFromArray(a.value,i,e);r=R.colorToRgb({value:t})}else{const t=a.value,i=null!==(o=t.rgb)&&void 0!==o?o:a.value;if(void 0!==i.r)r=i;else{const i=null!==(s=t.hsl)&&void 0!==s?s:a.value;if(void 0!==i.h&&void 0!==i.l)r=R.hslToRgb(i);else{const i=null!==(n=t.hsv)&&void 0!==n?n:a.value;void 0!==i.h&&void 0!==i.v&&(r=R.hsvToRgb(i))}}}return r}static colorToHsl(t,i,e=!0){const o=R.colorToRgb(t,i,e);return void 0!==o?R.rgbToHsl(o):void 0}static rgbToHsl(t){const i=t.r/255,e=t.g/255,o=t.b/255,s=Math.max(i,e,o),n=Math.min(i,e,o),a={h:0,l:(s+n)/2,s:0};return s!=n&&(a.s=a.l<.5?(s-n)/(s+n):(s-n)/(2-s-n),a.h=i===s?(e-o)/(s-n):a.h=e===s?2+(o-i)/(s-n):4+(i-e)/(s-n)),a.l*=100,a.s*=100,a.h*=60,a.h<0&&(a.h+=360),a}static stringToAlpha(t){var i;return null===(i=C(t))||void 0===i?void 0:i.a}static stringToRgb(t){return C(t)}static hslToRgb(t){const i={b:0,g:0,r:0},e={h:t.h/360,l:t.l/100,s:t.s/100};if(0===e.s)i.b=e.l,i.g=e.l,i.r=e.l;else{const t=e.l<.5?e.l*(1+e.s):e.l+e.s-e.l*e.s,o=2*e.l-t;i.r=S(o,t,e.h+1/3),i.g=S(o,t,e.h),i.b=S(o,t,e.h-1/3)}return i.r=Math.floor(255*i.r),i.g=Math.floor(255*i.g),i.b=Math.floor(255*i.b),i}static hslaToRgba(t){const i=R.hslToRgb(t);return{a:t.a,b:i.b,g:i.g,r:i.r}}static hslToHsv(t){const i=t.l/100,e=i+t.s/100*Math.min(i,1-i),o=e?2*(1-i/e):0;return{h:t.h,s:100*o,v:100*e}}static hslaToHsva(t){const i=R.hslToHsv(t);return{a:t.a,h:i.h,s:i.s,v:i.v}}static hsvToHsl(t){const i=t.v/100,e=i*(1-t.s/100/2),o=0===e||1===e?0:(i-e)/Math.min(e,1-e);return{h:t.h,l:100*e,s:100*o}}static hsvaToHsla(t){const i=R.hsvToHsl(t);return{a:t.a,h:i.h,l:i.l,s:i.s}}static hsvToRgb(t){const i={b:0,g:0,r:0},e=t.h/60,o=t.s/100,s=t.v/100,n=s*o,a=n*(1-Math.abs(e%2-1));let r;if(e>=0&&e<=1?r={r:n,g:a,b:0}:e>1&&e<=2?r={r:a,g:n,b:0}:e>2&&e<=3?r={r:0,g:n,b:a}:e>3&&e<=4?r={r:0,g:a,b:n}:e>4&&e<=5?r={r:a,g:0,b:n}:e>5&&e<=6&&(r={r:n,g:0,b:a}),r){const t=s-n;i.r=Math.floor(255*(r.r+t)),i.g=Math.floor(255*(r.g+t)),i.b=Math.floor(255*(r.b+t))}return i}static hsvaToRgba(t){const i=R.hsvToRgb(t);return{a:t.a,b:i.b,g:i.g,r:i.r}}static rgbToHsv(t){const i={r:t.r/255,g:t.g/255,b:t.b/255},e=Math.max(i.r,i.g,i.b),o=e-Math.min(i.r,i.g,i.b);let s=0;return e===i.r?s=(i.g-i.b)/o*60:e===i.g?s=60*(2+(i.b-i.r)/o):e===i.b&&(s=60*(4+(i.r-i.g)/o)),{h:s,s:100*(e?o/e:0),v:100*e}}static rgbaToHsva(t){const i=R.rgbToHsv(t);return{a:t.a,h:i.h,s:i.s,v:i.v}}static getRandomRgbColor(t){const i=null!=t?t:0;return{b:Math.floor(a.randomInRange(a.setRangeValue(i,256))),g:Math.floor(a.randomInRange(a.setRangeValue(i,256))),r:Math.floor(a.randomInRange(a.setRangeValue(i,256)))}}static getStyleFromRgb(t,i){return`rgba(${t.r}, ${t.g}, ${t.b}, ${null!=i?i:1})`}static getStyleFromHsl(t,i){return`hsla(${t.h}, ${t.s}%, ${t.l}%, ${null!=i?i:1})`}static getStyleFromHsv(t,i){return R.getStyleFromHsl(R.hsvToHsl(t),i)}static mix(t,i,e,o){let s=t,n=i;return void 0===s.r&&(s=R.hslToRgb(t)),void 0===n.r&&(n=R.hslToRgb(i)),{b:a.mix(s.b,n.b,e,o),g:a.mix(s.g,n.g,e,o),r:a.mix(s.r,n.r,e,o)}}static replaceColorSvg(t,i,e){if(!t.svgData)return"";return t.svgData.replace(/#([0-9A-F]{3,6})/gi,()=>R.getStyleFromHsl(i,e))}static getLinkColor(t,i,e){var o,s;if(e===M.randomColorValue)return R.getRandomRgbColor();if("mid"!==e)return e;{const e=null!==(o=t.getFillColor())&&void 0!==o?o:t.getStrokeColor(),n=null!==(s=null==i?void 0:i.getFillColor())&&void 0!==s?s:null==i?void 0:i.getStrokeColor();if(e&&n&&i)return R.mix(e,n,t.getRadius(),i.getRadius());{const t=null!=e?e:n;if(t)return R.hslToRgb(t)}}}static getLinkRandomColor(t,i,e){const o="string"==typeof t?t:t.value;return o===M.randomColorValue?e?R.colorToRgb({value:o}):i?M.randomColorValue:M.midColorValue:R.colorToRgb({value:o})}static getHslFromAnimation(t){return void 0!==t?{h:t.h.value,s:t.s.value,l:t.l.value}:void 0}}function A(t,i,e){t.beginPath(),t.moveTo(i.x,i.y),t.lineTo(e.x,e.y),t.closePath()}class T{static paintBase(t,i,e){t.save(),t.fillStyle=null!=e?e:"rgba(0,0,0,0)",t.fillRect(0,0,i.width,i.height),t.restore()}static clear(t,i){t.clearRect(0,0,i.width,i.height)}static drawLinkLine(t,i,e,o,s,n,r,l,c,d,h,u){let v=!1;if(a.getDistance(e,o)<=s)A(t,e,o),v=!0;else if(r){let i,r;const l={x:o.x-n.width,y:o.y},c=a.getDistances(e,l);if(c.distance<=s){const t=e.y-c.dy/c.dx*e.x;i={x:0,y:t},r={x:n.width,y:t}}else{const t={x:o.x,y:o.y-n.height},l=a.getDistances(e,t);if(l.distance<=s){const t=-(e.y-l.dy/l.dx*e.x)/(l.dy/l.dx);i={x:t,y:0},r={x:t,y:n.height}}else{const t={x:o.x-n.width,y:o.y-n.height},l=a.getDistances(e,t);if(l.distance<=s){const t=e.y-l.dy/l.dx*e.x;i={x:-t/(l.dy/l.dx),y:t},r={x:i.x+n.width,y:i.y+n.height}}}}i&&r&&(A(t,e,i),A(t,o,r),v=!0)}if(v){if(t.lineWidth=i,l&&(t.globalCompositeOperation=c),t.strokeStyle=R.getStyleFromRgb(d,h),u.enable){const i=R.colorToRgb(u.color);i&&(t.shadowBlur=u.blur,t.shadowColor=R.getStyleFromRgb(i))}t.stroke()}}static drawLinkTriangle(t,i,e,o,s,n,a,r){!function(t,i,e,o){t.beginPath(),t.moveTo(i.x,i.y),t.lineTo(e.x,e.y),t.lineTo(o.x,o.y),t.closePath()}(t,i,e,o),s&&(t.globalCompositeOperation=n),t.fillStyle=R.getStyleFromRgb(a,r),t.fill()}static drawConnectLine(t,i,e,o,s){t.save(),A(t,o,s),t.lineWidth=i,t.strokeStyle=e,t.stroke(),t.restore()}static gradient(t,i,e,o){const s=Math.floor(e.getRadius()/i.getRadius()),n=i.getFillColor(),a=e.getFillColor();if(!n||!a)return;const r=i.getPosition(),l=e.getPosition(),c=R.mix(n,a,i.getRadius(),e.getRadius()),d=t.createLinearGradient(r.x,r.y,l.x,l.y);return d.addColorStop(0,R.getStyleFromHsl(n,o)),d.addColorStop(s>1?1:s,R.getStyleFromRgb(c,o)),d.addColorStop(1,R.getStyleFromHsl(a,o)),d}static drawGrabLine(t,i,e,o,s,n){t.save(),A(t,e,o),t.strokeStyle=R.getStyleFromRgb(s,n),t.lineWidth=i,t.stroke(),t.restore()}static drawLight(t,i,e){const o=t.actualOptions.interactivity.modes.light.area;i.beginPath(),i.arc(e.x,e.y,o.radius,0,2*Math.PI);const s=i.createRadialGradient(e.x,e.y,0,e.x,e.y,o.radius),n=o.gradient,a={start:R.colorToRgb(n.start),stop:R.colorToRgb(n.stop)};a.start&&a.stop&&(s.addColorStop(0,R.getStyleFromRgb(a.start)),s.addColorStop(1,R.getStyleFromRgb(a.stop)),i.fillStyle=s,i.fill())}static drawParticleShadow(t,i,e,o){const s=e.getPosition(),n=t.actualOptions.interactivity.modes.light.shadow;i.save();const a=e.getRadius(),r=e.sides,l=2*Math.PI/r,c=-e.rotate.value+Math.PI/4,d=[];for(let t=0;t<r;t++)d.push({x:s.x+a*Math.sin(c+l*t)*1,y:s.y+a*Math.cos(c+l*t)*1});const h=[],u=n.length;for(const t of d){const i=Math.atan2(o.y-t.y,o.x-t.x),e=t.x+u*Math.sin(-i-Math.PI/2),s=t.y+u*Math.cos(-i-Math.PI/2);h.push({endX:e,endY:s,startX:t.x,startY:t.y})}const v=R.colorToRgb(n.color);if(!v)return;const p=R.getStyleFromRgb(v);for(let t=h.length-1;t>=0;t--){const e=t==h.length-1?0:t+1;i.beginPath(),i.moveTo(h[t].startX,h[t].startY),i.lineTo(h[e].startX,h[e].startY),i.lineTo(h[e].endX,h[e].endY),i.lineTo(h[t].endX,h[t].endY),i.fillStyle=p,i.fill()}i.restore()}static drawParticle(t,i,e,o,s,n,a,r,l,c,d){const h=e.getPosition();i.save(),i.translate(h.x,h.y),i.beginPath();const u=e.rotate.value+(e.options.rotate.path?e.pathAngle:0);0!==u&&i.rotate(u),a&&(i.globalCompositeOperation=r);const v=e.shadowColor;d.enable&&v&&(i.shadowBlur=d.blur,i.shadowColor=R.getStyleFromRgb(v),i.shadowOffsetX=d.offset.x,i.shadowOffsetY=d.offset.y),s&&(i.fillStyle=s);const p=e.stroke;i.lineWidth=e.strokeWidth,n&&(i.strokeStyle=n),T.drawShape(t,i,e,l,c,o),p.width>0&&i.stroke(),e.close&&i.closePath(),e.fill&&i.fill(),i.restore(),i.save(),i.translate(h.x,h.y),0!==u&&i.rotate(u),a&&(i.globalCompositeOperation=r),T.drawShapeAfterEffect(t,i,e,l,c,o),i.restore()}static drawShape(t,i,e,o,s,n){if(!e.shape)return;const a=t.drawers.get(e.shape);a&&a.draw(i,e,o,s,n.value,t.retina.pixelRatio)}static drawShapeAfterEffect(t,i,e,o,s,n){if(!e.shape)return;const a=t.drawers.get(e.shape);(null==a?void 0:a.afterEffect)&&a.afterEffect(i,e,o,s,n.value,t.retina.pixelRatio)}static drawPlugin(t,i,e){void 0!==i.draw&&(t.save(),i.draw(t,e),t.restore())}}class D{constructor(t,i){this.position={x:t,y:i}}}class O extends D{constructor(t,i,e){super(t,i),this.radius=e}contains(t){return Math.pow(t.x-this.position.x,2)+Math.pow(t.y-this.position.y,2)<=this.radius*this.radius}intersects(t){const i=t,e=t,o=this.position,s=t.position,n=Math.abs(s.x-o.x),a=Math.abs(s.y-o.y),r=this.radius;if(void 0!==e.radius){return r+e.radius>Math.sqrt(n*n+a+a)}if(void 0!==i.size){const t=i.size.width,e=i.size.height,o=Math.pow(n-t,2)+Math.pow(a-e,2);return!(n>r+t||a>r+e)&&(n<=t||a<=e||o<=r*r)}return!1}}class E extends D{constructor(t,i,e,o){super(t,i),this.size={height:o,width:e}}contains(t){const i=this.size.width,e=this.size.height,o=this.position;return t.x>=o.x&&t.x<=o.x+i&&t.y>=o.y&&t.y<=o.y+e}intersects(t){const i=t,e=t,o=this.size.width,s=this.size.height,n=this.position,a=t.position;if(void 0!==e.radius)return e.intersects(this);if(void 0!==i.size){const t=i.size,e=t.width,r=t.height;return a.x<n.x+o&&a.x+e>n.x&&a.y<n.y+s&&a.y+r>n.y}return!1}}class I extends O{constructor(t,i,e,o){super(t,i,e),this.canvasSize=o,this.canvasSize={height:o.height,width:o.width}}contains(t){if(super.contains(t))return!0;const i={x:t.x-this.canvasSize.width,y:t.y};if(super.contains(i))return!0;const e={x:t.x-this.canvasSize.width,y:t.y-this.canvasSize.height};if(super.contains(e))return!0;const o={x:t.x,y:t.y-this.canvasSize.height};return super.contains(o)}intersects(t){if(super.intersects(t))return!0;const i=t,e=t,o={x:t.position.x-this.canvasSize.width,y:t.position.y-this.canvasSize.height};if(void 0!==e.radius){const t=new O(o.x,o.y,2*e.radius);return super.intersects(t)}if(void 0!==i.size){const t=new E(o.x,o.y,2*i.size.width,2*i.size.height);return super.intersects(t)}return!1}}function V(t,i,e,o,s){if(o){let o={passive:!0};"boolean"==typeof s?o.capture=s:void 0!==s&&(o=s),t.addEventListener(i,e,o)}else{const o=s;t.removeEventListener(i,e,o)}}!function(t){t.attract="attract",t.bubble="bubble",t.push="push",t.remove="remove",t.repulse="repulse",t.pause="pause",t.trail="trail"}(r||(r={})),function(t){t.bounce="bounce",t.bubble="bubble",t.repulse="repulse"}(l||(l={})),function(t){t.attract="attract",t.bounce="bounce",t.bubble="bubble",t.connect="connect",t.grab="grab",t.light="light",t.repulse="repulse",t.slow="slow",t.trail="trail"}(c||(c={})),function(t){t.absorb="absorb",t.bounce="bounce",t.destroy="destroy"}(d||(d={})),function(t){t.bounce="bounce",t.bounceHorizontal="bounce-horizontal",t.bounceVertical="bounce-vertical",t.none="none",t.out="out",t.destroy="destroy"}(h||(h={})),function(t){t.precise="precise",t.percent="percent"}(u||(u={})),function(t){t.any="any",t.dark="dark",t.light="light"}(v||(v={})),function(t){t[t.increasing=0]="increasing",t[t.decreasing=1]="decreasing"}(p||(p={})),function(t){t.none="none",t.max="max",t.min="min"}(y||(y={})),function(t){t.color="color",t.opacity="opacity",t.size="size"}(m||(m={})),function(t){t.char="char",t.character="character",t.circle="circle",t.edge="edge",t.image="image",t.images="images",t.line="line",t.polygon="polygon",t.square="square",t.star="star",t.triangle="triangle"}(f||(f={})),function(t){t.max="max",t.min="min",t.random="random"}(g||(g={})),function(t){t.circle="circle",t.rectangle="rectangle"}(b||(b={})),function(t){t.canvas="canvas",t.parent="parent",t.window="window"}(w||(w={}));class F{constructor(t){this.container=t,this.canPush=!0,this.mouseMoveHandler=t=>this.mouseTouchMove(t),this.touchStartHandler=t=>this.mouseTouchMove(t),this.touchMoveHandler=t=>this.mouseTouchMove(t),this.touchEndHandler=()=>this.mouseTouchFinish(),this.mouseLeaveHandler=()=>this.mouseTouchFinish(),this.touchCancelHandler=()=>this.mouseTouchFinish(),this.touchEndClickHandler=t=>this.mouseTouchClick(t),this.mouseUpHandler=t=>this.mouseTouchClick(t),this.mouseDownHandler=()=>this.mouseDown(),this.visibilityChangeHandler=()=>this.handleVisibilityChange(),this.resizeHandler=()=>this.handleWindowResize()}addListeners(){this.manageListeners(!0)}removeListeners(){this.manageListeners(!1)}manageListeners(t){var i;const e=this.container,o=e.actualOptions,s=o.interactivity.detectsOn;let n=M.mouseLeaveEvent;if(s===w.window)e.interactivity.element=window,n=M.mouseOutEvent;else if(s===w.parent&&e.canvas.element){const t=e.canvas.element;e.interactivity.element=null!==(i=t.parentElement)&&void 0!==i?i:t.parentNode}else e.interactivity.element=e.canvas.element;const a=e.interactivity.element;if(!a)return;const r=a;(o.interactivity.events.onHover.enable||o.interactivity.events.onClick.enable)&&(V(a,M.mouseMoveEvent,this.mouseMoveHandler,t),V(a,M.touchStartEvent,this.touchStartHandler,t),V(a,M.touchMoveEvent,this.touchMoveHandler,t),o.interactivity.events.onClick.enable?(V(a,M.touchEndEvent,this.touchEndClickHandler,t),V(a,M.mouseUpEvent,this.mouseUpHandler,t),V(a,M.mouseDownEvent,this.mouseDownHandler,t)):V(a,M.touchEndEvent,this.touchEndHandler,t),V(a,n,this.mouseLeaveHandler,t),V(a,M.touchCancelEvent,this.touchCancelHandler,t)),e.canvas.element&&(e.canvas.element.style.pointerEvents=r===e.canvas.element?"initial":"none"),o.interactivity.events.resize&&V(window,M.resizeEvent,this.resizeHandler,t),document&&V(document,M.visibilityChangeEvent,this.visibilityChangeHandler,t,!1)}handleWindowResize(){var t;null===(t=this.container.canvas)||void 0===t||t.windowResize()}handleVisibilityChange(){const t=this.container,i=t.actualOptions;this.mouseTouchFinish(),i.pauseOnBlur&&((null===document||void 0===document?void 0:document.hidden)?(t.pageHidden=!0,t.pause()):(t.pageHidden=!1,t.getAnimationStatus()?t.play(!0):t.draw()))}mouseDown(){const t=this.container.interactivity;if(t){const i=t.mouse;i.clicking=!0,i.downPosition=i.position}}mouseTouchMove(t){var i,e,o,s,n,a,r;const l=this.container,c=l.actualOptions;if(void 0===(null===(i=l.interactivity)||void 0===i?void 0:i.element))return;let d;l.interactivity.mouse.inside=!0;const h=l.canvas.element;if(t.type.startsWith("mouse")){this.canPush=!0;const i=t;if(l.interactivity.element===window){if(h){const t=h.getBoundingClientRect();d={x:i.clientX-t.left,y:i.clientY-t.top}}}else if(c.interactivity.detectsOn===w.parent){const t=i.target,s=i.currentTarget,n=l.canvas.element;if(t&&s&&n){const e=t.getBoundingClientRect(),o=s.getBoundingClientRect(),a=n.getBoundingClientRect();d={x:i.offsetX+2*e.left-(o.left+a.left),y:i.offsetY+2*e.top-(o.top+a.top)}}else d={x:null!==(e=i.offsetX)&&void 0!==e?e:i.clientX,y:null!==(o=i.offsetY)&&void 0!==o?o:i.clientY}}else i.target===l.canvas.element&&(d={x:null!==(s=i.offsetX)&&void 0!==s?s:i.clientX,y:null!==(n=i.offsetY)&&void 0!==n?n:i.clientY})}else{this.canPush="touchmove"!==t.type;const i=t,e=i.touches[i.touches.length-1],o=null==h?void 0:h.getBoundingClientRect();d={x:e.clientX-(null!==(a=null==o?void 0:o.left)&&void 0!==a?a:0),y:e.clientY-(null!==(r=null==o?void 0:o.top)&&void 0!==r?r:0)}}const u=l.retina.pixelRatio;d&&(d.x*=u,d.y*=u),l.interactivity.mouse.position=d,l.interactivity.status=M.mouseMoveEvent}mouseTouchFinish(){const t=this.container.interactivity;if(void 0===t)return;const i=t.mouse;delete i.position,delete i.clickPosition,delete i.downPosition,t.status=M.mouseLeaveEvent,i.inside=!1,i.clicking=!1}mouseTouchClick(t){const i=this.container,e=i.actualOptions,o=i.interactivity.mouse;o.inside=!0;let s=!1;const n=o.position;if(void 0!==n&&e.interactivity.events.onClick.enable){for(const[,t]of i.plugins)if(void 0!==t.clickPositionValid&&(s=t.clickPositionValid(n),s))break;s||this.doMouseTouchClick(t),o.clicking=!1}}doMouseTouchClick(t){const i=this.container,e=i.actualOptions;if(this.canPush){const t=i.interactivity.mouse.position;if(!t)return;i.interactivity.mouse.clickPosition={x:t.x,y:t.y},i.interactivity.mouse.clickTime=(new Date).getTime();const o=e.interactivity.events.onClick;if(o.mode instanceof Array)for(const t of o.mode)this.handleClickMode(t);else this.handleClickMode(o.mode)}"touchend"===t.type&&setTimeout(()=>this.mouseTouchFinish(),500)}handleClickMode(t){const i=this.container,e=i.actualOptions,o=e.interactivity.modes.push.quantity,s=e.interactivity.modes.remove.quantity;switch(t){case r.push:o>0&&i.particles.push(o,i.interactivity.mouse);break;case r.remove:i.particles.removeQuantity(s);break;case r.bubble:i.bubble.clicking=!0;break;case r.repulse:i.repulse.clicking=!0,i.repulse.count=0;for(const t of i.repulse.particles)t.velocity.horizontal=t.initialVelocity.horizontal,t.velocity.vertical=t.initialVelocity.vertical;i.repulse.particles=[],i.repulse.finish=!1,setTimeout(()=>{i.destroyed||(i.repulse.clicking=!1)},1e3*e.interactivity.modes.repulse.duration);break;case r.attract:i.attract.clicking=!0,i.attract.count=0;for(const t of i.attract.particles)t.velocity.horizontal=t.initialVelocity.horizontal,t.velocity.vertical=t.initialVelocity.vertical;i.attract.particles=[],i.attract.finish=!1,setTimeout(()=>{i.destroyed||(i.attract.clicking=!1)},1e3*e.interactivity.modes.attract.duration);break;case r.pause:i.getAnimationStatus()?i.pause():i.play()}for(const[,e]of i.plugins)e.handleClickMode&&e.handleClickMode(t)}}const H=[],L=new Map,q=new Map,_=new Map;class B{static getPlugin(t){return H.find(i=>i.id===t)}static addPlugin(t){B.getPlugin(t.id)||H.push(t)}static getAvailablePlugins(t){const i=new Map;for(const e of H)e.needsPlugin(t.actualOptions)&&i.set(e.id,e.getPlugin(t));return i}static loadOptions(t,i){for(const e of H)e.loadOptions(t,i)}static getPreset(t){return L.get(t)}static addPreset(t,i){B.getPreset(t)||L.set(t,i)}static addShapeDrawer(t,i){B.getShapeDrawer(t)||q.set(t,i)}static getShapeDrawer(t){return q.get(t)}static getSupportedShapes(){return q.keys()}static getPathGenerator(t){return _.get(t)}static addPathGenerator(t,i){B.getPathGenerator(t)||_.set(t,i)}}class W{constructor(t,i){this.position=t,this.particle=i}}class G{constructor(t,i){this.rectangle=t,this.capacity=i,this.points=[],this.divided=!1}subdivide(){const t=this.rectangle.position.x,i=this.rectangle.position.y,e=this.rectangle.size.width,o=this.rectangle.size.height,s=this.capacity;this.northEast=new G(new E(t,i,e/2,o/2),s),this.northWest=new G(new E(t+e/2,i,e/2,o/2),s),this.southEast=new G(new E(t,i+o/2,e/2,o/2),s),this.southWest=new G(new E(t+e/2,i+o/2,e/2,o/2),s),this.divided=!0}insert(t){var i,e,o,s,n;return!!this.rectangle.contains(t.position)&&(this.points.length<this.capacity?(this.points.push(t),!0):(this.divided||this.subdivide(),null!==(n=(null===(i=this.northEast)||void 0===i?void 0:i.insert(t))||(null===(e=this.northWest)||void 0===e?void 0:e.insert(t))||(null===(o=this.southEast)||void 0===o?void 0:o.insert(t))||(null===(s=this.southWest)||void 0===s?void 0:s.insert(t)))&&void 0!==n&&n))}queryCircle(t,i){return this.query(new O(t.x,t.y,i))}queryCircleWarp(t,i,e){const o=e,s=e;return this.query(new I(t.x,t.y,i,void 0!==o.canvas?o.canvas.size:s))}queryRectangle(t,i){return this.query(new E(t.x,t.y,i.width,i.height))}query(t,i){var e,o,s,n;const a=null!=i?i:[];if(!t.intersects(this.rectangle))return[];for(const i of this.points)t.contains(i.position)&&a.push(i.particle);return this.divided&&(null===(e=this.northEast)||void 0===e||e.query(t,a),null===(o=this.northWest)||void 0===o||o.query(t,a),null===(s=this.southEast)||void 0===s||s.query(t,a),null===(n=this.southWest)||void 0===n||n.query(t,a)),a}}var N=function(t,i,e,o){return new(e||(e=Promise))((function(s,n){function a(t){try{l(o.next(t))}catch(t){n(t)}}function r(t){try{l(o.throw(t))}catch(t){n(t)}}function l(t){var i;t.done?s(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(a,r)}l((o=o.apply(t,i||[])).next())}))};class U{getSidesCount(){return 12}init(t){var i;return N(this,void 0,void 0,(function*(){const e=t.actualOptions;if(P.isInArray(f.char,e.particles.shape.type)||P.isInArray(f.character,e.particles.shape.type)){const t=null!==(i=e.particles.shape.options[f.character])&&void 0!==i?i:e.particles.shape.options[f.char];if(t instanceof Array)for(const i of t)yield P.loadFont(i);else void 0!==t&&(yield P.loadFont(t))}}))}draw(t,i,e){const o=i.shapeData;if(void 0===o)return;const s=o.value;if(void 0===s)return;const n=i;void 0===n.text&&(n.text=s instanceof Array?P.itemFromArray(s,i.randomIndexData):s);const a=n.text,r=o.style,l=o.weight,c=2*Math.round(e),d=o.font,h=i.fill,u=a.length*e/2;t.font=`${r} ${l} ${c}px "${d}"`;const v={x:-u,y:e/2};h?t.fillText(a,v.x,v.y):t.strokeText(a,v.x,v.y)}}var $=function(t,i,e,o){return new(e||(e=Promise))((function(s,n){function a(t){try{l(o.next(t))}catch(t){n(t)}}function r(t){try{l(o.throw(t))}catch(t){n(t)}}function l(t){var i;t.done?s(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(a,r)}l((o=o.apply(t,i||[])).next())}))};class j{constructor(){this.images=[]}getSidesCount(){return 12}getImages(t){const i=this.images.filter(i=>i.id===t.id);return i.length?i[0]:(this.images.push({id:t.id,images:[]}),this.getImages(t))}addImage(t,i){const e=this.getImages(t);null==e||e.images.push(i)}init(t){var i;return $(this,void 0,void 0,(function*(){const e=t.actualOptions.particles.shape;if(!P.isInArray(f.image,e.type)&&!P.isInArray(f.images,e.type))return;const o=null!==(i=e.options[f.images])&&void 0!==i?i:e.options[f.image];if(o instanceof Array)for(const i of o)yield this.loadImageShape(t,i);else yield this.loadImageShape(t,o)}))}destroy(){this.images=[]}loadImageShape(t,i){return $(this,void 0,void 0,(function*(){try{const e=i.replaceColor?yield P.downloadSvgImage(i.src):yield P.loadImage(i.src);e&&this.addImage(t,e)}catch(t){console.warn(`tsParticles error - ${i.src} not found`)}}))}draw(t,i,e,o){var s,n;if(!t)return;const a=i.image,r=null===(s=null==a?void 0:a.data)||void 0===s?void 0:s.element;if(!r)return;const l=null!==(n=null==a?void 0:a.ratio)&&void 0!==n?n:1,c={x:-e,y:-e};(null==a?void 0:a.data.svgData)&&(null==a?void 0:a.replaceColor)||(t.globalAlpha=o),t.drawImage(r,c.x,c.y,2*e,2*e/l),(null==a?void 0:a.data.svgData)&&(null==a?void 0:a.replaceColor)||(t.globalAlpha=1)}}class X{getSidesCount(){return 1}draw(t,i,e){t.moveTo(0,-e/2),t.lineTo(0,e/2)}}class Y{getSidesCount(){return 12}draw(t,i,e){t.arc(0,0,e,0,2*Math.PI,!1)}}class J{getSidesCount(t){var i,e;const o=t.shapeData;return null!==(e=null!==(i=null==o?void 0:o.sides)&&void 0!==i?i:null==o?void 0:o.nb_sides)&&void 0!==e?e:5}draw(t,i,e){const o=this.getCenter(i,e),s=this.getSidesData(i,e),n=s.count.numerator*s.count.denominator,a=s.count.numerator/s.count.denominator,r=180*(a-2)/a,l=Math.PI-Math.PI*r/180;if(t){t.beginPath(),t.translate(o.x,o.y),t.moveTo(0,0);for(let i=0;i<n;i++)t.lineTo(s.length,0),t.translate(s.length,0),t.rotate(l)}}}class Q extends J{getSidesCount(){return 3}getSidesData(t,i){return{count:{denominator:2,numerator:3},length:2*i}}getCenter(t,i){return{x:-i,y:i/1.66}}}class Z{getSidesCount(t){var i,e;const o=t.shapeData;return null!==(e=null!==(i=null==o?void 0:o.sides)&&void 0!==i?i:null==o?void 0:o.nb_sides)&&void 0!==e?e:5}draw(t,i,e){var o;const s=i.shapeData,n=this.getSidesCount(i),a=null!==(o=null==s?void 0:s.inset)&&void 0!==o?o:2;t.moveTo(0,0-e);for(let i=0;i<n;i++)t.rotate(Math.PI/n),t.lineTo(0,0-e*a),t.rotate(Math.PI/n),t.lineTo(0,0-e)}}class K extends J{getSidesData(t,i){var e,o;const s=t.shapeData,n=null!==(o=null!==(e=null==s?void 0:s.sides)&&void 0!==e?e:null==s?void 0:s.nb_sides)&&void 0!==o?o:5;return{count:{denominator:1,numerator:n},length:2.66*i/(n/3)}}getCenter(t,i){return{x:-i/(this.getSidesCount(t)/3.5),y:-i/.76}}}class tt{constructor(t){this.container=t,this.size={height:0,width:0},this.context=null,this.generatedCanvas=!1}init(){var t,i,e,o,s,n,a,r,l,c,d,h;this.resize();const u=this.container.actualOptions,v=this.element;v&&(u.fullScreen.enable?(this.originalStyle=P.deepExtend({},v.style),v.style.position="fixed",v.style.zIndex=u.fullScreen.zIndex.toString(10),v.style.top="0",v.style.left="0",v.style.width="100%",v.style.height="100%"):(v.style.position=null!==(i=null===(t=this.originalStyle)||void 0===t?void 0:t.position)&&void 0!==i?i:"",v.style.zIndex=null!==(o=null===(e=this.originalStyle)||void 0===e?void 0:e.zIndex)&&void 0!==o?o:"",v.style.top=null!==(n=null===(s=this.originalStyle)||void 0===s?void 0:s.top)&&void 0!==n?n:"",v.style.left=null!==(r=null===(a=this.originalStyle)||void 0===a?void 0:a.left)&&void 0!==r?r:"",v.style.width=null!==(c=null===(l=this.originalStyle)||void 0===l?void 0:l.width)&&void 0!==c?c:"",v.style.height=null!==(h=null===(d=this.originalStyle)||void 0===d?void 0:d.height)&&void 0!==h?h:""));const p=u.backgroundMask.cover,y=p.color,m=u.particles.move.trail,f=R.colorToRgb(y);this.coverColor=void 0!==f?{r:f.r,g:f.g,b:f.b,a:p.opacity}:void 0,this.trailFillColor=R.colorToRgb(m.fillColor),this.initBackground(),this.paint()}loadCanvas(t,i){var e;t.className||(t.className=M.canvasClass),this.generatedCanvas&&(null===(e=this.element)||void 0===e||e.remove()),this.generatedCanvas=null!=i?i:this.generatedCanvas,this.element=t,this.originalStyle=P.deepExtend({},this.element.style),this.size.height=t.offsetHeight,this.size.width=t.offsetWidth,this.context=this.element.getContext("2d"),this.container.retina.init(),this.initBackground()}destroy(){var t;this.generatedCanvas&&(null===(t=this.element)||void 0===t||t.remove()),this.context&&T.clear(this.context,this.size)}paint(){const t=this.container.actualOptions;this.context&&(t.backgroundMask.enable&&t.backgroundMask.cover&&this.coverColor?(T.clear(this.context,this.size),this.paintBase(R.getStyleFromRgb(this.coverColor,this.coverColor.a))):this.paintBase())}clear(){const t=this.container.actualOptions,i=t.particles.move.trail;t.backgroundMask.enable?this.paint():i.enable&&i.length>0&&this.trailFillColor?this.paintBase(R.getStyleFromRgb(this.trailFillColor,1/i.length)):this.context&&T.clear(this.context,this.size)}windowResize(){if(!this.element)return;const t=this.container;t.canvas.resize(),t.actualOptions.setResponsive(this.size.width,t.retina.pixelRatio,t.options),t.particles.setDensity();for(const[,i]of t.plugins)void 0!==i.resize&&i.resize()}resize(){if(!this.element)return;const t=this.container,i=t.retina.pixelRatio,e=t.canvas.size,o=e.width,s=e.height;e.width=this.element.offsetWidth*i,e.height=this.element.offsetHeight*i,this.element.width=e.width,this.element.height=e.height,this.resizeFactor={width:e.width/o,height:e.height/s}}drawConnectLine(t,i){var e;const o=this.lineStyle(t,i);if(!o)return;const s=this.context;if(!s)return;const n=t.getPosition(),a=i.getPosition();T.drawConnectLine(s,null!==(e=t.linksWidth)&&void 0!==e?e:this.container.retina.linksWidth,o,n,a)}drawGrabLine(t,i,e,o){var s;const n=this.container,a=n.canvas.context;if(!a)return;const r=t.getPosition();T.drawGrabLine(a,null!==(s=t.linksWidth)&&void 0!==s?s:n.retina.linksWidth,r,o,i,e)}drawParticleShadow(t,i){this.context&&T.drawParticleShadow(this.container,this.context,t,i)}drawLinkTriangle(t,i,e){var o;const s=this.container,n=s.actualOptions,r=i.destination,l=e.destination,c=t.options.links.triangles,d=null!==(o=c.opacity)&&void 0!==o?o:(i.opacity+e.opacity)/2;if(d<=0)return;const h=t.getPosition(),u=r.getPosition(),v=l.getPosition(),p=this.context;if(!p)return;if(a.getDistance(h,u)>s.retina.linksDistance||a.getDistance(v,u)>s.retina.linksDistance||a.getDistance(v,h)>s.retina.linksDistance)return;let y=R.colorToRgb(c.color);if(!y){const i=t.options.links,e=void 0!==i.id?s.particles.linksColors.get(i.id):s.particles.linksColor;y=R.getLinkColor(t,r,e)}y&&T.drawLinkTriangle(p,h,u,v,n.backgroundMask.enable,n.backgroundMask.composite,y,d)}drawLinkLine(t,i){var e,o;const s=this.container,n=s.actualOptions,a=i.destination;let r=i.opacity;const l=t.getPosition(),c=a.getPosition(),d=this.context;if(!d)return;let h;const u=t.options.twinkle.lines;if(u.enable){const t=u.frequency,i=R.colorToRgb(u.color);Math.random()<t&&void 0!==i&&(h=i,r=u.opacity)}if(!h){const i=t.options.links,e=void 0!==i.id?s.particles.linksColors.get(i.id):s.particles.linksColor;h=R.getLinkColor(t,a,e)}if(!h)return;const v=null!==(e=t.linksWidth)&&void 0!==e?e:s.retina.linksWidth,p=null!==(o=t.linksDistance)&&void 0!==o?o:s.retina.linksDistance;T.drawLinkLine(d,v,l,c,p,s.canvas.size,t.options.links.warp,n.backgroundMask.enable,n.backgroundMask.composite,h,r,t.options.links.shadow)}drawParticle(t,i){var e,o,s,n;if(!1===(null===(e=t.image)||void 0===e?void 0:e.loaded)||t.spawning||t.destroyed)return;const a=t.getFillColor(),r=null!==(o=t.getStrokeColor())&&void 0!==o?o:a;if(!a&&!r)return;const l=this.container.actualOptions,c=t.options.twinkle.particles,d=c.frequency,h=R.colorToRgb(c.color),u=c.enable&&Math.random()<d,v=t.getRadius(),p=u?c.opacity:null!==(s=t.bubble.opacity)&&void 0!==s?s:t.opacity.value,y=t.infecter.infectionStage,m=l.infection.stages,f=void 0!==y?m[y].color:void 0,g=R.colorToRgb(f),b=u&&void 0!==h?h:null!=g?g:a?R.hslToRgb(a):void 0,w=u&&void 0!==h?h:null!=g?g:r?R.hslToRgb(r):void 0,x=void 0!==b?R.getStyleFromRgb(b,p):void 0;if(!this.context||!x&&!w)return;const k=void 0!==w?R.getStyleFromRgb(w,null!==(n=t.stroke.opacity)&&void 0!==n?n:p):x;this.drawParticleLinks(t),v>0&&T.drawParticle(this.container,this.context,t,i,x,k,l.backgroundMask.enable,l.backgroundMask.composite,v,p,t.options.shadow)}drawParticleLinks(t){if(!this.context)return;const i=this.container,e=i.particles,o=t.options;if(t.links.length>0){this.context.save();const s=t.links.filter(e=>i.particles.getLinkFrequency(t,e.destination)<=o.links.frequency);for(const n of s){const a=n.destination;if(o.links.triangles.enable){const r=s.map(t=>t.destination),l=a.links.filter(t=>i.particles.getLinkFrequency(a,t.destination)<=a.options.links.frequency&&r.indexOf(t.destination)>=0);if(l.length)for(const i of l){const s=i.destination;e.getTriangleFrequency(t,a,s)>o.links.triangles.frequency||this.drawLinkTriangle(t,n,i)}}n.opacity>0&&i.retina.linksWidth>0&&this.drawLinkLine(t,n)}this.context.restore()}}drawPlugin(t,i){this.context&&T.drawPlugin(this.context,t,i)}drawLight(t){this.context&&T.drawLight(this.container,this.context,t)}paintBase(t){this.context&&T.paintBase(this.context,this.size,t)}lineStyle(t,i){const e=this.container.actualOptions.interactivity.modes.connect;if(this.context)return T.gradient(this.context,t,i,e.links.opacity)}initBackground(){const t=this.container.actualOptions.background,i=this.element;if(!i)return;const e=i.style;if(t.color){const i=R.colorToRgb(t.color);i&&(e.backgroundColor=R.getStyleFromRgb(i,t.opacity))}t.image&&(e.backgroundImage=t.image),t.position&&(e.backgroundPosition=t.position),t.repeat&&(e.backgroundRepeat=t.repeat),t.size&&(e.backgroundSize=t.size)}}function it(t,i,e,o,s){switch(i){case y.max:e>=s&&t.destroy();break;case y.min:e<=o&&t.destroy()}}class et{constructor(t,i){this.container=t,this.particle=i}update(t){this.particle.destroyed||(this.updateLife(t),this.particle.destroyed||this.particle.spawning||(this.updateOpacity(t),this.updateSize(t),this.updateAngle(t),this.updateColor(t),this.updateStrokeColor(t),this.updateOutModes(t)))}updateLife(t){const i=this.particle;let e=!1;if(i.spawning&&(i.lifeDelayTime+=t.value,i.lifeDelayTime>=i.lifeDelay&&(e=!0,i.spawning=!1,i.lifeDelayTime=0,i.lifeTime=0)),-1!==i.lifeDuration&&!i.spawning&&(e?i.lifeTime=0:i.lifeTime+=t.value,i.lifeTime>=i.lifeDuration)){if(i.lifeTime=0,i.livesRemaining>0&&i.livesRemaining--,0===i.livesRemaining)return void i.destroy();const t=this.container.canvas.size;i.position.x=a.randomInRange(a.setRangeValue(0,t.width)),i.position.y=a.randomInRange(a.setRangeValue(0,t.height)),i.spawning=!0,i.lifeDelayTime=0,i.lifeTime=0,i.reset();const e=i.options.life;i.lifeDelay=1e3*a.getValue(e.delay),i.lifeDuration=1e3*a.getValue(e.duration)}}updateOpacity(t){var i,e;const o=this.particle,s=o.options.opacity.anim,n=s.minimumValue,r=o.options.opacity.value;if(!o.destroyed&&s.enable&&(s.count<=0||o.loops.size<s.count)){switch(o.opacity.status){case p.increasing:o.opacity.value>=r?(o.opacity.status=p.decreasing,o.loops.opacity++):o.opacity.value+=(null!==(i=o.opacity.velocity)&&void 0!==i?i:0)*t.factor;break;case p.decreasing:o.opacity.value<=n?(o.opacity.status=p.increasing,o.loops.opacity++):o.opacity.value-=(null!==(e=o.opacity.velocity)&&void 0!==e?e:0)*t.factor}it(o,s.destroy,o.opacity.value,n,r),o.destroyed||(o.opacity.value=a.clamp(o.opacity.value,n,r))}}updateSize(t){var i,e;const o=this.container,s=this.particle,n=s.options.size.animation,r=(null!==(i=s.size.velocity)&&void 0!==i?i:0)*t.factor,l=null!==(e=s.sizeValue)&&void 0!==e?e:o.retina.sizeValue,c=n.minimumValue*o.retina.pixelRatio;if(!s.destroyed&&n.enable&&(n.count<=0||s.loops.size<n.count)){switch(s.size.status){case p.increasing:s.size.value>=l?(s.size.status=p.decreasing,s.loops.size++):s.size.value+=r;break;case p.decreasing:s.size.value<=c?(s.size.status=p.increasing,s.loops.size++):s.size.value-=r}it(s,n.destroy,s.size.value,c,l),s.destroyed||(s.size.value=a.clamp(s.size.value,c,l))}}updateAngle(t){var i;const e=this.particle,o=e.options.rotate,s=o.animation,n=(null!==(i=e.rotate.velocity)&&void 0!==i?i:0)*t.factor,a=2*Math.PI;if(o.path)e.pathAngle=Math.atan2(e.velocity.vertical,e.velocity.horizontal);else if(s.enable)switch(e.rotate.status){case p.increasing:e.rotate.value+=n,e.rotate.value>a&&(e.rotate.value-=a);break;case p.decreasing:default:e.rotate.value-=n,e.rotate.value<0&&(e.rotate.value+=a)}}updateColor(t){var i,e,o;const s=this.particle,n=s.options.color.animation;void 0!==(null===(i=s.color)||void 0===i?void 0:i.h)&&this.updateColorValue(s,t,s.color.h,n.h,360,!1),void 0!==(null===(e=s.color)||void 0===e?void 0:e.s)&&this.updateColorValue(s,t,s.color.s,n.s,100,!0),void 0!==(null===(o=s.color)||void 0===o?void 0:o.l)&&this.updateColorValue(s,t,s.color.l,n.l,100,!0)}updateStrokeColor(t){var i,e,o,s,n,a,r,l,c,d,h,u;const v=this.particle;if(!v.stroke.color)return;const p=v.stroke.color.animation,y=p;if(void 0!==y.enable){const s=null!==(e=null===(i=v.strokeColor)||void 0===i?void 0:i.h)&&void 0!==e?e:null===(o=v.color)||void 0===o?void 0:o.h;s&&this.updateColorValue(v,t,s,y,360,!1)}else{const i=p,e=null!==(n=null===(s=v.strokeColor)||void 0===s?void 0:s.h)&&void 0!==n?n:null===(a=v.color)||void 0===a?void 0:a.h;e&&this.updateColorValue(v,t,e,i.h,360,!1);const o=null!==(l=null===(r=v.strokeColor)||void 0===r?void 0:r.s)&&void 0!==l?l:null===(c=v.color)||void 0===c?void 0:c.s;o&&this.updateColorValue(v,t,o,i.s,100,!0);const y=null!==(h=null===(d=v.strokeColor)||void 0===d?void 0:d.l)&&void 0!==h?h:null===(u=v.color)||void 0===u?void 0:u.l;y&&this.updateColorValue(v,t,y,i.l,100,!0)}}updateColorValue(t,i,e,o,s,n){var r;const l=e;if(!l||!o.enable)return;const c=a.randomInRange(o.offset),d=(null!==(r=e.velocity)&&void 0!==r?r:0)*i.factor+3.6*c;n&&l.status!==p.increasing?(l.value-=d,l.value<0&&(l.status=p.increasing,l.value+=l.value)):(l.value+=d,n&&l.value>s&&(l.status=p.decreasing,l.value-=l.value%s)),l.value>s&&(l.value%=s)}updateOutModes(t){var i,e,s,n;const a=this.particle.options.move.outModes;this.updateOutMode(t,null!==(i=a.bottom)&&void 0!==i?i:a.default,o.bottom),this.updateOutMode(t,null!==(e=a.left)&&void 0!==e?e:a.default,o.left),this.updateOutMode(t,null!==(s=a.right)&&void 0!==s?s:a.default,o.right),this.updateOutMode(t,null!==(n=a.top)&&void 0!==n?n:a.default,o.top)}updateOutMode(t,i,e){const o=this.container,s=this.particle;switch(i){case h.bounce:case h.bounceVertical:case h.bounceHorizontal:case"bounceVertical":case"bounceHorizontal":this.updateBounce(t,e,i);break;case h.destroy:P.isPointInside(s.position,o.canvas.size,s.getRadius(),e)||o.particles.remove(s);break;case h.out:P.isPointInside(s.position,o.canvas.size,s.getRadius(),e)||this.fixOutOfCanvasPosition(e);break;case h.none:this.bounceNone(e)}}fixOutOfCanvasPosition(t){const i=this.container,e=this.particle,s=e.options.move.warp,n=i.canvas.size,a={bottom:n.height+e.getRadius()-e.offset.y,left:-e.getRadius()-e.offset.x,right:n.width+e.getRadius()+e.offset.x,top:-e.getRadius()-e.offset.y},r=e.getRadius(),l=P.calculateBounds(e.position,r);t===o.right&&l.left>n.width-e.offset.x?(e.position.x=a.left,s||(e.position.y=Math.random()*n.height)):t===o.left&&l.right<-e.offset.x&&(e.position.x=a.right,s||(e.position.y=Math.random()*n.height)),t===o.bottom&&l.top>n.height-e.offset.y?(s||(e.position.x=Math.random()*n.width),e.position.y=a.top):t===o.top&&l.bottom<-e.offset.y&&(s||(e.position.x=Math.random()*n.width),e.position.y=a.bottom)}updateBounce(t,i,e){const s=this.container,n=this.particle;let r=!1;for(const[,e]of s.plugins)if(void 0!==e.particleBounce&&(r=e.particleBounce(n,t,i)),r)break;if(r)return;const l=n.getPosition(),c=n.offset,d=n.getRadius(),u=P.calculateBounds(l,d),v=s.canvas.size;!function(t){if(t.outMode===h.bounce||t.outMode===h.bounceHorizontal||"bounceHorizontal"===t.outMode){const i=t.particle.velocity.horizontal;let e=!1;if(t.direction===o.right&&t.bounds.right>=t.canvasSize.width&&i>0||t.direction===o.left&&t.bounds.left<=0&&i<0){const i=a.getValue(t.particle.options.bounce.horizontal);t.particle.velocity.horizontal*=-i,e=!0}if(e){const i=t.offset.x+t.size;t.bounds.right>=t.canvasSize.width?t.particle.position.x=t.canvasSize.width-i:t.bounds.left<=0&&(t.particle.position.x=i)}}}({particle:n,outMode:e,direction:i,bounds:u,canvasSize:v,offset:c,size:d}),function(t){if(t.outMode===h.bounce||t.outMode===h.bounceVertical||"bounceVertical"===t.outMode){const i=t.particle.velocity.vertical;let e=!1;if(t.direction===o.bottom&&t.bounds.bottom>=t.canvasSize.height&&i>0||t.direction===o.top&&t.bounds.top<=0&&i<0){const i=a.getValue(t.particle.options.bounce.vertical);t.particle.velocity.vertical*=-i,e=!0}if(e){const i=t.offset.y+t.size;t.bounds.bottom>=t.canvasSize.height?t.particle.position.y=t.canvasSize.height-i:t.bounds.top<=0&&(t.particle.position.y=i)}}}({particle:n,outMode:e,direction:i,bounds:u,canvasSize:v,offset:c,size:d})}bounceNone(t){const i=this.particle;if(i.options.move.distance)return;const e=i.options.move.gravity,s=this.container;if(e.enable){const n=i.position;(e.acceleration>=0&&n.y>s.canvas.size.height&&t===o.bottom||e.acceleration<0&&n.y<0&&t===o.top)&&s.particles.remove(i)}else P.isPointInside(i.position,s.canvas.size,i.getRadius(),t)||s.particles.remove(i)}}class ot{constructor(){this.value="#fff"}static create(t,i){const e=null!=t?t:new ot;return void 0!==i&&e.load("string"==typeof i?{value:i}:i),e}load(t){void 0!==(null==t?void 0:t.value)&&(this.value=t.value)}}class st{constructor(){this.blur=5,this.color=new ot,this.enable=!1,this.color.value="#00ff00"}load(t){void 0!==t&&(void 0!==t.blur&&(this.blur=t.blur),this.color=ot.create(this.color,t.color),void 0!==t.enable&&(this.enable=t.enable))}}class nt{constructor(){this.enable=!1,this.frequency=1}load(t){void 0!==t&&(void 0!==t.color&&(this.color=ot.create(this.color,t.color)),void 0!==t.enable&&(this.enable=t.enable),void 0!==t.frequency&&(this.frequency=t.frequency),void 0!==t.opacity&&(this.opacity=t.opacity))}}class at{constructor(){this.blink=!1,this.color=new ot,this.consent=!1,this.distance=100,this.enable=!1,this.frequency=1,this.opacity=1,this.shadow=new st,this.triangles=new nt,this.width=1,this.warp=!1}load(t){void 0!==t&&(void 0!==t.id&&(this.id=t.id),void 0!==t.blink&&(this.blink=t.blink),this.color=ot.create(this.color,t.color),void 0!==t.consent&&(this.consent=t.consent),void 0!==t.distance&&(this.distance=t.distance),void 0!==t.enable&&(this.enable=t.enable),void 0!==t.frequency&&(this.frequency=t.frequency),void 0!==t.opacity&&(this.opacity=t.opacity),this.shadow.load(t.shadow),this.triangles.load(t.triangles),void 0!==t.width&&(this.width=t.width),void 0!==t.warp&&(this.warp=t.warp))}}class rt{constructor(){this.enable=!1,this.rotate={x:3e3,y:3e3}}get rotateX(){return this.rotate.x}set rotateX(t){this.rotate.x=t}get rotateY(){return this.rotate.y}set rotateY(t){this.rotate.y=t}load(t){var i,e,o,s;if(void 0===t)return;void 0!==t.enable&&(this.enable=t.enable);const n=null!==(e=null===(i=t.rotate)||void 0===i?void 0:i.x)&&void 0!==e?e:t.rotateX;void 0!==n&&(this.rotate.x=n);const a=null!==(s=null===(o=t.rotate)||void 0===o?void 0:o.y)&&void 0!==s?s:t.rotateY;void 0!==a&&(this.rotate.y=a)}}class lt{constructor(){this.enable=!1,this.length=10,this.fillColor=new ot,this.fillColor.value="#000000"}load(t){void 0!==t&&(void 0!==t.enable&&(this.enable=t.enable),this.fillColor=ot.create(this.fillColor,t.fillColor),void 0!==t.length&&(this.length=t.length))}}class ct{constructor(){this.enable=!1,this.minimumValue=0}load(t){t&&(void 0!==t.enable&&(this.enable=t.enable),void 0!==t.minimumValue&&(this.minimumValue=t.minimumValue))}}class dt{constructor(){this.random=new ct,this.value=0}load(t){t&&("boolean"==typeof t.random?this.random.enable=t.random:this.random.load(t.random),void 0!==t.value&&(this.value=t.value))}}class ht extends dt{constructor(){super()}}class ut{constructor(){this.clamp=!0,this.delay=new ht,this.enable=!1}load(t){void 0!==t&&(void 0!==t.clamp&&(this.clamp=t.clamp),this.delay.load(t.delay),void 0!==t.enable&&(this.enable=t.enable),this.generator=t.generator)}}class vt{constructor(){this.offset=45,this.value=90}load(t){void 0!==t&&(void 0!==t.offset&&(this.offset=t.offset),void 0!==t.value&&(this.value=t.value))}}class pt{constructor(){this.acceleration=9.81,this.enable=!1,this.maxSpeed=50}load(t){t&&(void 0!==t.acceleration&&(this.acceleration=t.acceleration),void 0!==t.enable&&(this.enable=t.enable),void 0!==t.maxSpeed&&(this.maxSpeed=t.maxSpeed))}}class yt{constructor(){this.default=h.out}load(t){var i,e,o,s;t&&(void 0!==t.default&&(this.default=t.default),this.bottom=null!==(i=t.bottom)&&void 0!==i?i:t.default,this.left=null!==(e=t.left)&&void 0!==e?e:t.default,this.right=null!==(o=t.right)&&void 0!==o?o:t.default,this.top=null!==(s=t.top)&&void 0!==s?s:t.default)}}class mt{constructor(){this.angle=new vt,this.attract=new rt,this.decay=0,this.direction=s.none,this.distance=0,this.enable=!1,this.gravity=new pt,this.path=new ut,this.outModes=new yt,this.random=!1,this.size=!1,this.speed=2,this.straight=!1,this.trail=new lt,this.vibrate=!1,this.warp=!1}get collisions(){return!1}set collisions(t){}get bounce(){return this.collisions}set bounce(t){this.collisions=t}get out_mode(){return this.outMode}set out_mode(t){this.outMode=t}get outMode(){return this.outModes.default}set outMode(t){this.outModes.default=t}get noise(){return this.path}set noise(t){this.path=t}load(t){var i,e,o;if(void 0===t)return;void 0!==t.angle&&("number"==typeof t.angle?this.angle.value=t.angle:this.angle.load(t.angle)),this.attract.load(t.attract),void 0!==t.decay&&(this.decay=t.decay),void 0!==t.direction&&(this.direction=t.direction),void 0!==t.distance&&(this.distance=t.distance),void 0!==t.enable&&(this.enable=t.enable),this.gravity.load(t.gravity);const s=null!==(i=t.outMode)&&void 0!==i?i:t.out_mode;void 0===t.outModes&&void 0===s||("string"==typeof t.outModes||void 0===t.outModes&&void 0!==s?this.outModes.load({default:null!==(e=t.outModes)&&void 0!==e?e:s}):this.outModes.load(t.outModes)),this.path.load(null!==(o=t.path)&&void 0!==o?o:t.noise),void 0!==t.random&&(this.random=t.random),void 0!==t.size&&(this.size=t.size),void 0!==t.speed&&(this.speed=t.speed),void 0!==t.straight&&(this.straight=t.straight),this.trail.load(t.trail),void 0!==t.vibrate&&(this.vibrate=t.vibrate),void 0!==t.warp&&(this.warp=t.warp)}}class ft{constructor(){this.enable=!1,this.area=800,this.factor=1e3}get value_area(){return this.area}set value_area(t){this.area=t}load(t){var i;if(void 0===t)return;void 0!==t.enable&&(this.enable=t.enable);const e=null!==(i=t.area)&&void 0!==i?i:t.value_area;void 0!==e&&(this.area=e),void 0!==t.factor&&(this.factor=t.factor)}}class gt{constructor(){this.density=new ft,this.limit=0,this.value=100}get max(){return this.limit}set max(t){this.limit=t}load(t){var i;if(void 0===t)return;this.density.load(t.density);const e=null!==(i=t.limit)&&void 0!==i?i:t.max;void 0!==e&&(this.limit=e),void 0!==t.value&&(this.value=t.value)}}class bt{constructor(){this.count=0,this.enable=!1,this.speed=1,this.sync=!1}load(t){t&&(void 0!==t.count&&(this.count=t.count),void 0!==t.enable&&(this.enable=t.enable),void 0!==t.speed&&(this.speed=t.speed),void 0!==t.sync&&(this.sync=t.sync))}}class wt extends bt{constructor(){super(),this.destroy=y.none,this.enable=!1,this.minimumValue=0,this.speed=2,this.startValue=g.random,this.sync=!1}get opacity_min(){return this.minimumValue}set opacity_min(t){this.minimumValue=t}load(t){var i;if(void 0===t)return;super.load(t),void 0!==t.destroy&&(this.destroy=t.destroy),void 0!==t.enable&&(this.enable=t.enable);const e=null!==(i=t.minimumValue)&&void 0!==i?i:t.opacity_min;void 0!==e&&(this.minimumValue=e),void 0!==t.speed&&(this.speed=t.speed),void 0!==t.startValue&&(this.startValue=t.startValue),void 0!==t.sync&&(this.sync=t.sync)}}class xt extends dt{constructor(){super(),this.animation=new wt,this.random.minimumValue=.1,this.value=1}get anim(){return this.animation}set anim(t){this.animation=t}load(t){var i;t&&(super.load(t),this.animation.load(null!==(i=t.animation)&&void 0!==i?i:t.anim))}}class kt{constructor(){this.options={},this.type=f.circle}get image(){var t;return null!==(t=this.options[f.image])&&void 0!==t?t:this.options[f.images]}set image(t){this.options[f.image]=t,this.options[f.images]=t}get custom(){return this.options}set custom(t){this.options=t}get images(){return this.image instanceof Array?this.image:[this.image]}set images(t){this.image=t}get stroke(){return[]}set stroke(t){}get character(){var t;return null!==(t=this.options[f.character])&&void 0!==t?t:this.options[f.char]}set character(t){this.options[f.character]=t,this.options[f.char]=t}get polygon(){var t;return null!==(t=this.options[f.polygon])&&void 0!==t?t:this.options[f.star]}set polygon(t){this.options[f.polygon]=t,this.options[f.star]=t}load(t){var i,e,o;if(void 0===t)return;const s=null!==(i=t.options)&&void 0!==i?i:t.custom;if(void 0!==s)for(const t in s){const i=s[t];void 0!==i&&(this.options[t]=P.deepExtend(null!==(e=this.options[t])&&void 0!==e?e:{},i))}this.loadShape(t.character,f.character,f.char,!0),this.loadShape(t.polygon,f.polygon,f.star,!1),this.loadShape(null!==(o=t.image)&&void 0!==o?o:t.images,f.image,f.images,!0),void 0!==t.type&&(this.type=t.type)}loadShape(t,i,e,o){var s,n,a,r;void 0!==t&&(t instanceof Array?(this.options[i]instanceof Array||(this.options[i]=[],this.options[e]&&!o||(this.options[e]=[])),this.options[i]=P.deepExtend(null!==(s=this.options[i])&&void 0!==s?s:[],t),this.options[e]&&!o||(this.options[e]=P.deepExtend(null!==(n=this.options[e])&&void 0!==n?n:[],t))):(this.options[i]instanceof Array&&(this.options[i]={},this.options[e]&&!o||(this.options[e]={})),this.options[i]=P.deepExtend(null!==(a=this.options[i])&&void 0!==a?a:{},t),this.options[e]&&!o||(this.options[e]=P.deepExtend(null!==(r=this.options[e])&&void 0!==r?r:{},t))))}}class zt extends bt{constructor(){super(),this.destroy=y.none,this.enable=!1,this.minimumValue=0,this.speed=5,this.startValue=g.random,this.sync=!1}get size_min(){return this.minimumValue}set size_min(t){this.minimumValue=t}load(t){var i;if(void 0===t)return;super.load(t),void 0!==t.destroy&&(this.destroy=t.destroy),void 0!==t.enable&&(this.enable=t.enable);const e=null!==(i=t.minimumValue)&&void 0!==i?i:t.size_min;void 0!==e&&(this.minimumValue=e),void 0!==t.speed&&(this.speed=t.speed),void 0!==t.startValue&&(this.startValue=t.startValue),void 0!==t.sync&&(this.sync=t.sync)}}class Pt extends dt{constructor(){super(),this.animation=new zt,this.random.minimumValue=1,this.value=3}get anim(){return this.animation}set anim(t){this.animation=t}load(t){var i;if(!t)return;super.load(t);const e=null!==(i=t.animation)&&void 0!==i?i:t.anim;void 0!==e&&this.animation.load(e)}}class Mt{constructor(){this.enable=!1,this.speed=0,this.sync=!1}load(t){void 0!==t&&(void 0!==t.enable&&(this.enable=t.enable),void 0!==t.speed&&(this.speed=t.speed),void 0!==t.sync&&(this.sync=t.sync))}}class St extends dt{constructor(){super(),this.animation=new Mt,this.direction=n.clockwise,this.path=!1}load(t){t&&(super.load(t),void 0!==t.direction&&(this.direction=t.direction),this.animation.load(t.animation),void 0!==t.path&&(this.path=t.path))}}class Ct{constructor(){this.blur=0,this.color=new ot,this.enable=!1,this.offset={x:0,y:0},this.color.value="#000000"}load(t){void 0!==t&&(void 0!==t.blur&&(this.blur=t.blur),this.color=ot.create(this.color,t.color),void 0!==t.enable&&(this.enable=t.enable),void 0!==t.offset&&(void 0!==t.offset.x&&(this.offset.x=t.offset.x),void 0!==t.offset.y&&(this.offset.y=t.offset.y)))}}class Rt{constructor(){this.count=0,this.enable=!1,this.offset=0,this.speed=1,this.sync=!0}load(t){void 0!==t&&(void 0!==t.count&&(this.count=t.count),void 0!==t.enable&&(this.enable=t.enable),void 0!==t.offset&&(this.offset=a.setRangeValue(t.offset)),void 0!==t.speed&&(this.speed=t.speed),void 0!==t.sync&&(this.sync=t.sync))}}class At{constructor(){this.h=new Rt,this.s=new Rt,this.l=new Rt}load(t){t&&(this.h.load(t.h),this.s.load(t.s),this.l.load(t.l))}}class Tt extends ot{constructor(){super(),this.animation=new At}static create(t,i){const e=null!=t?t:new Tt;return void 0!==i&&e.load("string"==typeof i?{value:i}:i),e}load(t){if(super.load(t),!t)return;const i=t.animation;void 0!==i&&(void 0!==i.enable?this.animation.h.load(i):this.animation.load(t.animation))}}class Dt{constructor(){this.width=0}load(t){void 0!==t&&(void 0!==t.color&&(this.color=Tt.create(this.color,t.color)),void 0!==t.width&&(this.width=t.width),void 0!==t.opacity&&(this.opacity=t.opacity))}}class Ot extends dt{constructor(){super(),this.random.minimumValue=.1,this.value=1}}class Et{constructor(){this.horizontal=new Ot,this.vertical=new Ot}load(t){t&&(this.horizontal.load(t.horizontal),this.vertical.load(t.vertical))}}class It{constructor(){this.enable=!0,this.retries=0}load(t){t&&(void 0!==t.enable&&(this.enable=t.enable),void 0!==t.retries&&(this.retries=t.retries))}}class Vt{constructor(){this.bounce=new Et,this.enable=!1,this.mode=d.bounce,this.overlap=new It}load(t){void 0!==t&&(this.bounce.load(t.bounce),void 0!==t.enable&&(this.enable=t.enable),void 0!==t.mode&&(this.mode=t.mode),this.overlap.load(t.overlap))}}class Ft{constructor(){this.enable=!1,this.frequency=.05,this.opacity=1}load(t){void 0!==t&&(void 0!==t.color&&(this.color=ot.create(this.color,t.color)),void 0!==t.enable&&(this.enable=t.enable),void 0!==t.frequency&&(this.frequency=t.frequency),void 0!==t.opacity&&(this.opacity=t.opacity))}}class Ht{constructor(){this.lines=new Ft,this.particles=new Ft}load(t){void 0!==t&&(this.lines.load(t.lines),this.particles.load(t.particles))}}class Lt extends dt{constructor(){super(),this.sync=!1}load(t){t&&(super.load(t),void 0!==t.sync&&(this.sync=t.sync))}}class qt extends dt{constructor(){super(),this.random.minimumValue=1e-4,this.sync=!1}load(t){void 0!==t&&(super.load(t),void 0!==t.sync&&(this.sync=t.sync))}}class _t{constructor(){this.count=0,this.delay=new Lt,this.duration=new qt}load(t){void 0!==t&&(void 0!==t.count&&(this.count=t.count),this.delay.load(t.delay),this.duration.load(t.duration))}}class Bt{constructor(){this.bounce=new Et,this.collisions=new Vt,this.color=new Tt,this.life=new _t,this.links=new at,this.move=new mt,this.number=new gt,this.opacity=new xt,this.reduceDuplicates=!1,this.rotate=new St,this.shadow=new Ct,this.shape=new kt,this.size=new Pt,this.stroke=new Dt,this.twinkle=new Ht}get line_linked(){return this.links}set line_linked(t){this.links=t}get lineLinked(){return this.links}set lineLinked(t){this.links=t}load(t){var i,e,o,s,n,a,r;if(void 0===t)return;this.bounce.load(t.bounce),this.color=Tt.create(this.color,t.color),this.life.load(t.life);const l=null!==(e=null!==(i=t.links)&&void 0!==i?i:t.lineLinked)&&void 0!==e?e:t.line_linked;void 0!==l&&this.links.load(l),this.move.load(t.move),this.number.load(t.number),this.opacity.load(t.opacity),void 0!==t.reduceDuplicates&&(this.reduceDuplicates=t.reduceDuplicates),this.rotate.load(t.rotate),this.shape.load(t.shape),this.size.load(t.size),this.shadow.load(t.shadow),this.twinkle.load(t.twinkle);const c=null!==(s=null===(o=t.move)||void 0===o?void 0:o.collisions)&&void 0!==s?s:null===(n=t.move)||void 0===n?void 0:n.bounce;void 0!==c&&(this.collisions.enable=c),this.collisions.load(t.collisions);const d=null!==(a=t.stroke)&&void 0!==a?a:null===(r=t.shape)||void 0===r?void 0:r.stroke;void 0!==d&&(d instanceof Array?this.stroke=d.map(t=>{const i=new Dt;return i.load(t),i}):(this.stroke instanceof Array&&(this.stroke=new Dt),this.stroke.load(d)))}}class Wt{constructor(t){this.container=t}startInfection(t){t>this.container.actualOptions.infection.stages.length||t<0||(this.infectionDelay=0,this.infectionDelayStage=t)}updateInfectionStage(t){t>this.container.actualOptions.infection.stages.length||t<0||void 0!==this.infectionStage&&this.infectionStage>t||(this.infectionStage=t,this.infectionTime=0)}updateInfection(t){const i=this.container.actualOptions,e=i.infection,o=i.infection.stages,s=o.length;if(void 0!==this.infectionDelay&&void 0!==this.infectionDelayStage){const i=this.infectionDelayStage;if(i>s||i<0)return;this.infectionDelay>1e3*e.delay?(this.infectionStage=i,this.infectionTime=0,delete this.infectionDelay,delete this.infectionDelayStage):this.infectionDelay+=t}else delete this.infectionDelay,delete this.infectionDelayStage;if(void 0!==this.infectionStage&&void 0!==this.infectionTime){const i=o[this.infectionStage];void 0!==i.duration&&i.duration>=0&&this.infectionTime>1e3*i.duration?this.nextInfectionStage():this.infectionTime+=t}else delete this.infectionStage,delete this.infectionTime}nextInfectionStage(){const t=this.container.actualOptions,i=t.infection.stages.length;if(!(i<=0||void 0===this.infectionStage)&&(this.infectionTime=0,i<=++this.infectionStage)){if(t.infection.cure)return delete this.infectionStage,void delete this.infectionTime;this.infectionStage=0,this.infectionTime=0}}}class Gt{constructor(t,i){this.container=t,this.particle=i}move(t){const i=this.particle;i.bubble.inRange=!1,i.links=[];for(const[,e]of this.container.plugins){if(i.destroyed)break;e.particleUpdate&&e.particleUpdate(i,t)}i.destroyed||(this.moveParticle(t),this.moveParallax())}moveParticle(t){var i,e;const o=this.particle,s=o.options;if(!s.move.enable)return;const n=this.container,r=this.getProximitySpeedFactor(),l=(null!==(i=o.moveSpeed)&&void 0!==i?i:n.retina.moveSpeed)*n.retina.reduceFactor,c=null!==(e=o.sizeValue)&&void 0!==e?e:n.retina.sizeValue,d=l/2*(s.move.size?o.getRadius()/c:1)*r*t.factor;this.applyPath(t);const h=s.move.gravity;h.enable&&(o.velocity.vertical+=h.acceleration*t.factor/(60*d));const u=1-o.options.move.decay;o.velocity.horizontal*=u,o.velocity.vertical*=u;const v={horizontal:o.velocity.horizontal*d,vertical:o.velocity.vertical*d};h.enable&&v.vertical>=h.maxSpeed&&h.maxSpeed>0&&(v.vertical=h.maxSpeed,o.velocity.vertical=v.vertical/d),o.position.x+=v.horizontal,o.position.y+=v.vertical,s.move.vibrate&&(o.position.x+=Math.sin(o.position.x*Math.cos(o.position.y)),o.position.y+=Math.cos(o.position.y*Math.sin(o.position.x)));const p=o.initialPosition,y=a.getDistance(p,o.position);o.maxDistance&&(y>=o.maxDistance&&!o.misplaced?(o.misplaced=y>o.maxDistance,o.velocity.horizontal=o.velocity.vertical/2-o.velocity.horizontal,o.velocity.vertical=o.velocity.horizontal/2-o.velocity.vertical):y<o.maxDistance&&o.misplaced?o.misplaced=!1:o.misplaced&&((o.position.x<p.x&&o.velocity.horizontal<0||o.position.x>p.x&&o.velocity.horizontal>0)&&(o.velocity.horizontal*=-Math.random()),(o.position.y<p.y&&o.velocity.vertical<0||o.position.y>p.y&&o.velocity.vertical>0)&&(o.velocity.vertical*=-Math.random())))}applyPath(t){const i=this.particle,e=i.options.move.path;if(!e.enable)return;const o=this.container;if(i.lastPathTime<=i.pathDelay)return void(i.lastPathTime+=t.value);let s=o.pathGenerator;if(e.generator){const t=B.getPathGenerator(e.generator);t&&(s=t)}const n=s.generate(i);i.velocity.horizontal+=Math.cos(n.angle)*n.length,i.velocity.vertical+=Math.sin(n.angle)*n.length,e.clamp&&(i.velocity.horizontal=a.clamp(i.velocity.horizontal,-1,1),i.velocity.vertical=a.clamp(i.velocity.vertical,-1,1)),i.lastPathTime-=i.pathDelay}moveParallax(){const t=this.container,i=t.actualOptions;if(P.isSsr()||!i.interactivity.events.onHover.parallax.enable)return;const e=this.particle,o=i.interactivity.events.onHover.parallax.force,s=t.interactivity.mouse.position;if(!s)return;const n=t.canvas.size.width/2,a=t.canvas.size.height/2,r=i.interactivity.events.onHover.parallax.smooth,l=e.getRadius()/o,c=(s.x-n)*l,d=(s.y-a)*l;e.offset.x+=(c-e.offset.x)/r,e.offset.y+=(d-e.offset.y)/r}getProximitySpeedFactor(){const t=this.container,i=t.actualOptions;if(!P.isInArray(c.slow,i.interactivity.events.onHover.mode))return 1;const e=this.container.interactivity.mouse.position;if(!e)return 1;const o=this.particle.getPosition(),s=a.getDistance(e,o),n=t.retina.slowModeRadius;return s>n?1:(s/n||0)/i.interactivity.modes.slow.factor}}class Nt{constructor(t,i,e,o){var s,r,l,c,d,h,u,v,y;this.id=t,this.container=i,this.links=[],this.fill=!0,this.close=!0,this.lastPathTime=0,this.destroyed=!1,this.misplaced=!1,this.loops={opacity:0,size:0};const m=i.retina.pixelRatio,f=i.actualOptions,b=new Bt;b.load(f.particles);const w=b.shape.type,x=b.reduceDuplicates;if(this.shape=w instanceof Array?P.itemFromArray(w,this.id,x):w,null==o?void 0:o.shape){if(o.shape.type){const t=o.shape.type;this.shape=t instanceof Array?P.itemFromArray(t,this.id,x):t}const t=new kt;if(t.load(o.shape),this.shape){const i=t.options[this.shape];i&&(this.shapeData=P.deepExtend({},i instanceof Array?P.itemFromArray(i,this.id,x):i))}}else{const t=b.shape.options[this.shape];t&&(this.shapeData=P.deepExtend({},t instanceof Array?P.itemFromArray(t,this.id,x):t))}void 0!==o&&b.load(o),void 0!==(null===(s=this.shapeData)||void 0===s?void 0:s.particles)&&b.load(null===(r=this.shapeData)||void 0===r?void 0:r.particles),this.fill=null!==(c=null===(l=this.shapeData)||void 0===l?void 0:l.fill)&&void 0!==c?c:this.fill,this.close=null!==(h=null===(d=this.shapeData)||void 0===d?void 0:d.close)&&void 0!==h?h:this.close,this.options=b,this.pathDelay=1e3*a.getValue(this.options.move.path.delay),i.retina.initParticle(this);const k=this.options.color,z=this.options.size,M=a.getValue(z)*i.retina.pixelRatio,S="boolean"==typeof z.random?z.random:z.random.enable;this.size={value:M},this.direction=this.options.move.direction,this.bubble={inRange:!1},this.initialVelocity=this.calculateVelocity(),this.velocity={horizontal:this.initialVelocity.horizontal,vertical:this.initialVelocity.vertical},this.pathAngle=Math.atan2(this.initialVelocity.vertical,this.initialVelocity.horizontal);const C=this.options.rotate;this.rotate={value:(C.random.enable?360*Math.random():C.value)*Math.PI/180};let A=C.direction;if(A===n.random){A=Math.floor(2*Math.random())>0?n.counterClockwise:n.clockwise}switch(A){case n.counterClockwise:case"counterClockwise":this.rotate.status=p.decreasing;break;case n.clockwise:this.rotate.status=p.increasing}const T=this.options.rotate.animation;T.enable&&(this.rotate.velocity=T.speed/360*i.retina.reduceFactor,T.sync||(this.rotate.velocity*=Math.random()));const D=this.options.size.animation;if(D.enable){if(this.size.status=p.increasing,!S)switch(D.startValue){case g.min:this.size.value=D.minimumValue*m;break;case g.random:this.size.value=a.randomInRange(a.setRangeValue(D.minimumValue*m,this.size.value));break;case g.max:default:this.size.status=p.decreasing}this.size.velocity=(null!==(u=this.sizeAnimationSpeed)&&void 0!==u?u:i.retina.sizeAnimationSpeed)/100*i.retina.reduceFactor,D.sync||(this.size.velocity*=Math.random())}const O=R.colorToHsl(k,this.id,x);if(O){this.color={h:{value:O.h},s:{value:O.s},l:{value:O.l}};const t=this.options.color.animation;this.setColorAnimation(t.h,this.color.h),this.setColorAnimation(t.s,this.color.s),this.setColorAnimation(t.l,this.color.l)}this.position=this.calcPosition(this.container,e),this.initialPosition={x:this.position.x,y:this.position.y},this.offset={x:0,y:0};const E=this.options.opacity,I="boolean"==typeof E.random?E.random:E.random.enable;this.opacity={value:a.getValue(E)};const V=E.animation;if(V.enable){if(this.opacity.status=p.increasing,!I)switch(V.startValue){case g.min:this.opacity.value=V.minimumValue;break;case g.random:this.opacity.value=a.randomInRange(a.setRangeValue(V.minimumValue,this.opacity.value));break;case g.max:default:this.opacity.status=p.decreasing}this.opacity.velocity=V.speed/100*i.retina.reduceFactor,V.sync||(this.opacity.velocity*=Math.random())}this.sides=24;let F=i.drawers.get(this.shape);F||(F=B.getShapeDrawer(this.shape),F&&i.drawers.set(this.shape,F));const H=null==F?void 0:F.getSidesCount;H&&(this.sides=H(this));const L=this.loadImageShape(i,F);L&&(this.image=L.image,this.fill=L.fill,this.close=L.close),this.stroke=this.options.stroke instanceof Array?P.itemFromArray(this.options.stroke,this.id,x):this.options.stroke,this.strokeWidth=this.stroke.width*i.retina.pixelRatio;const q=null!==(v=R.colorToHsl(this.stroke.color))&&void 0!==v?v:this.getFillColor();if(q){this.strokeColor={h:{value:q.h},s:{value:q.s},l:{value:q.l}};const t=null===(y=this.stroke.color)||void 0===y?void 0:y.animation;t&&this.strokeColor&&(this.setColorAnimation(t.h,this.strokeColor.h),this.setColorAnimation(t.s,this.strokeColor.s),this.setColorAnimation(t.l,this.strokeColor.l))}const _=b.life;this.lifeDelay=i.retina.reduceFactor?a.getValue(_.delay)*(_.delay.sync?1:Math.random())/i.retina.reduceFactor*1e3:0,this.lifeDelayTime=0,this.lifeDuration=i.retina.reduceFactor?a.getValue(_.duration)*(_.duration.sync?1:Math.random())/i.retina.reduceFactor*1e3:0,this.lifeTime=0,this.livesRemaining=b.life.count,this.spawning=this.lifeDelay>0,this.lifeDuration<=0&&(this.lifeDuration=-1),this.livesRemaining<=0&&(this.livesRemaining=-1),this.shadowColor=R.colorToRgb(this.options.shadow.color),this.updater=new et(i,this),this.infecter=new Wt(i),this.mover=new Gt(i,this)}move(t){this.mover.move(t)}update(t){this.updater.update(t)}draw(t){this.container.canvas.drawParticle(this,t)}getPosition(){return{x:this.position.x+this.offset.x,y:this.position.y+this.offset.y}}getRadius(){return this.bubble.radius||this.size.value}getFillColor(){var t;return null!==(t=this.bubble.color)&&void 0!==t?t:R.getHslFromAnimation(this.color)}getStrokeColor(){var t,i;return null!==(i=null!==(t=this.bubble.color)&&void 0!==t?t:R.getHslFromAnimation(this.strokeColor))&&void 0!==i?i:this.getFillColor()}destroy(){this.destroyed=!0,this.bubble.inRange=!1,this.links=[]}reset(){this.loops.opacity=0,this.loops.size=0}setColorAnimation(t,i){if(t.enable){if(i.velocity=t.speed/100*this.container.retina.reduceFactor,t.sync)return;i.status=p.increasing,i.velocity*=Math.random(),i.value&&(i.value*=Math.random())}else i.velocity=0}calcPosition(t,i,e=0){var o,s;for(const[,e]of t.plugins){const t=void 0!==e.particlePosition?e.particlePosition(i,this):void 0;if(void 0!==t)return P.deepExtend({},t)}const n={x:null!==(o=null==i?void 0:i.x)&&void 0!==o?o:Math.random()*t.canvas.size.width,y:null!==(s=null==i?void 0:i.y)&&void 0!==s?s:Math.random()*t.canvas.size.height},a=this.options.move.outMode;return(P.isInArray(a,h.bounce)||P.isInArray(a,h.bounceHorizontal))&&(n.x>t.canvas.size.width-2*this.size.value?n.x-=this.size.value:n.x<2*this.size.value&&(n.x+=this.size.value)),(P.isInArray(a,h.bounce)||P.isInArray(a,h.bounceVertical))&&(n.y>t.canvas.size.height-2*this.size.value?n.y-=this.size.value:n.y<2*this.size.value&&(n.y+=this.size.value)),this.checkOverlap(n,e)?this.calcPosition(t,void 0,e+1):n}checkOverlap(t,i=0){const e=this.options.collisions.overlap;if(!e.enable){const o=e.retries;if(o>=0&&i>o)throw new Error("Particle is overlapping and can't be placed");let s=!1;for(const i of this.container.particles.array)if(a.getDistance(t,i.position)<this.size.value+i.size.value){s=!0;break}return s}return!1}calculateVelocity(){const t=a.getParticleBaseVelocity(this),i={horizontal:0,vertical:0},e=this.options.move;let o,s=Math.PI/4;"number"==typeof e.angle?o=Math.PI/180*e.angle:(o=Math.PI/180*e.angle.value,s=Math.PI/180*e.angle.offset);const n={left:Math.sin(s+o/2)-Math.sin(s-o/2),right:Math.cos(s+o/2)-Math.cos(s-o/2)};return e.straight?(i.horizontal=t.x,i.vertical=t.y,e.random&&(i.horizontal+=a.randomInRange(a.setRangeValue(n.left,n.right))/2,i.vertical+=a.randomInRange(a.setRangeValue(n.left,n.right))/2)):(i.horizontal=t.x+a.randomInRange(a.setRangeValue(n.left,n.right))/2,i.vertical=t.y+a.randomInRange(a.setRangeValue(n.left,n.right))/2),i}loadImageShape(t,i){var e,o,s,n,a;if(this.shape!==f.image&&this.shape!==f.images)return;const r=i.getImages(t).images,l=this.shapeData,c=null!==(e=r.find(t=>t.source===l.src))&&void 0!==e?e:r[0],d=this.getFillColor();let h;if(!c)return;if(void 0!==c.svgData&&l.replaceColor&&d){const t=R.replaceColorSvg(c,d,this.opacity.value),i=new Blob([t],{type:"image/svg+xml"}),e=URL||window.URL||window.webkitURL||window,s=e.createObjectURL(i),n=new Image;h={data:c,loaded:!1,ratio:l.width/l.height,replaceColor:null!==(o=l.replaceColor)&&void 0!==o?o:l.replace_color,source:l.src},n.addEventListener("load",()=>{this.image&&(this.image.loaded=!0,c.element=n),e.revokeObjectURL(s)}),n.addEventListener("error",()=>{e.revokeObjectURL(s),P.loadImage(l.src).then(t=>{this.image&&t&&(c.element=t.element,this.image.loaded=!0)})}),n.src=s}else h={data:c,loaded:!0,ratio:l.width/l.height,replaceColor:null!==(s=l.replaceColor)&&void 0!==s?s:l.replace_color,source:l.src};return h.ratio||(h.ratio=1),{image:h,fill:null!==(n=l.fill)&&void 0!==n?n:this.fill,close:null!==(a=l.close)&&void 0!==a?a:this.close}}}class Ut{constructor(t){this.container=t}isEnabled(){const t=this.container,i=t.interactivity.mouse,e=t.actualOptions.interactivity.events;if(!e.onHover.enable||!i.position)return!1;const o=e.onHover.mode;return P.isInArray(c.grab,o)}reset(){}interact(){var t;const i=this.container,e=i.actualOptions.interactivity;if(e.events.onHover.enable&&i.interactivity.status===M.mouseMoveEvent){const o=i.interactivity.mouse.position;if(void 0===o)return;const s=i.retina.grabModeDistance,n=i.particles.quadTree.queryCircle(o,s);for(const r of n){const n=r.getPosition(),l=a.getDistance(n,o);if(l<=s){const n=e.modes.grab.links,a=n.opacity,c=a-l*a/s;if(c>0){const e=null!==(t=n.color)&&void 0!==t?t:r.options.links.color;if(!i.particles.grabLineColor){const t=i.actualOptions.interactivity.modes.grab.links;i.particles.grabLineColor=R.getLinkRandomColor(e,t.blink,t.consent)}const s=R.getLinkColor(r,void 0,i.particles.grabLineColor);if(void 0===s)return;i.canvas.drawGrabLine(r,s,c,o)}}}}}}class $t{constructor(t){this.container=t}isEnabled(){const t=this.container,i=t.actualOptions,e=t.interactivity.mouse,o=i.interactivity.events,s=o.onDiv,n=P.isDivModeEnabled(l.repulse,s);if(!(n||o.onHover.enable&&e.position||o.onClick.enable&&e.clickPosition))return!1;const a=o.onHover.mode,d=o.onClick.mode;return P.isInArray(c.repulse,a)||P.isInArray(r.repulse,d)||n}reset(){}interact(){const t=this.container,i=t.actualOptions,e=t.interactivity.status===M.mouseMoveEvent,o=i.interactivity.events,s=o.onHover.enable,n=o.onHover.mode,a=o.onClick.enable,d=o.onClick.mode,h=o.onDiv;e&&s&&P.isInArray(c.repulse,n)?this.hoverRepulse():a&&P.isInArray(r.repulse,d)?this.clickRepulse():P.divModeExecute(l.repulse,h,(t,i)=>this.singleSelectorRepulse(t,i))}singleSelectorRepulse(t,i){const e=this.container,o=document.querySelectorAll(t);o.length&&o.forEach(t=>{const o=t,s=e.retina.pixelRatio,n={x:(o.offsetLeft+o.offsetWidth/2)*s,y:(o.offsetTop+o.offsetHeight/2)*s},a=o.offsetWidth/2*s,r=i.type===b.circle?new O(n.x,n.y,a):new E(o.offsetLeft*s,o.offsetTop*s,o.offsetWidth*s,o.offsetHeight*s),l=e.actualOptions.interactivity.modes.repulse.divs,c=P.divMode(l,o);this.processRepulse(n,a,r,c)})}hoverRepulse(){const t=this.container,i=t.interactivity.mouse.position;if(!i)return;const e=t.retina.repulseModeDistance;this.processRepulse(i,e,new O(i.x,i.y,e))}processRepulse(t,i,e,o){var s;const n=this.container,r=n.particles.quadTree.query(e);for(const e of r){const{dx:r,dy:l,distance:c}=a.getDistances(e.position,t),d={x:r/c,y:l/c},h=100*(null!==(s=null==o?void 0:o.speed)&&void 0!==s?s:n.actualOptions.interactivity.modes.repulse.speed),u=a.clamp((1-Math.pow(c/i,2))*h,0,50);e.position.x=e.position.x+d.x*u,e.position.y=e.position.y+d.y*u}}clickRepulse(){const t=this.container;if(t.repulse.finish||(t.repulse.count||(t.repulse.count=0),t.repulse.count++,t.repulse.count===t.particles.count&&(t.repulse.finish=!0)),t.repulse.clicking){const i=t.retina.repulseModeDistance,e=Math.pow(i/6,3),o=t.interactivity.mouse.clickPosition;if(void 0===o)return;const s=new O(o.x,o.y,e),n=t.particles.quadTree.query(s);for(const i of n){const{dx:s,dy:n,distance:r}=a.getDistances(o,i.position),l=r*r,c=t.actualOptions.interactivity.modes.repulse.speed,d=-e*c/l;if(l<=e){t.repulse.particles.push(i);const e=Math.atan2(n,s);i.velocity.horizontal=d*Math.cos(e),i.velocity.vertical=d*Math.sin(e)}}}else if(!1===t.repulse.clicking){for(const i of t.repulse.particles)i.velocity.horizontal=i.initialVelocity.horizontal,i.velocity.vertical=i.initialVelocity.vertical;t.repulse.particles=[]}}}function jt(t,i,e,o){if(i>e){const s=t+(i-e)*o;return a.clamp(s,t,i)}if(i<e){const s=t-(e-i)*o;return a.clamp(s,i,t)}}class Xt{constructor(t){this.container=t}isEnabled(){const t=this.container,i=t.actualOptions,e=t.interactivity.mouse,o=i.interactivity.events,s=o.onDiv,n=P.isDivModeEnabled(l.bubble,s);if(!(n||o.onHover.enable&&e.position||o.onClick.enable&&e.clickPosition))return!1;const a=o.onHover.mode,d=o.onClick.mode;return P.isInArray(c.bubble,a)||P.isInArray(r.bubble,d)||n}reset(t,i){t.bubble.inRange&&!i||(delete t.bubble.div,delete t.bubble.opacity,delete t.bubble.radius,delete t.bubble.color)}interact(){const t=this.container.actualOptions.interactivity.events,i=t.onHover,e=t.onClick,o=i.enable,s=i.mode,n=e.enable,a=e.mode,d=t.onDiv;o&&P.isInArray(c.bubble,s)?this.hoverBubble():n&&P.isInArray(r.bubble,a)?this.clickBubble():P.divModeExecute(l.bubble,d,(t,i)=>this.singleSelectorHover(t,i))}singleSelectorHover(t,i){const e=this.container,o=document.querySelectorAll(t);o.length&&o.forEach(t=>{const o=t,s=e.retina.pixelRatio,n={x:(o.offsetLeft+o.offsetWidth/2)*s,y:(o.offsetTop+o.offsetHeight/2)*s},a=o.offsetWidth/2*s,r=i.type===b.circle?new O(n.x,n.y,a):new E(o.offsetLeft*s,o.offsetTop*s,o.offsetWidth*s,o.offsetHeight*s),l=e.particles.quadTree.query(r);for(const t of l){if(!r.contains(t.getPosition()))continue;t.bubble.inRange=!0;const i=e.actualOptions.interactivity.modes.bubble.divs,s=P.divMode(i,o);t.bubble.div&&t.bubble.div===o||(this.reset(t,!0),t.bubble.div=o),this.hoverBubbleSize(t,1,s),this.hoverBubbleOpacity(t,1,s),this.hoverBubbleColor(t,s)}})}process(t,i,e,o){const s=this.container,n=o.bubbleObj.optValue;if(void 0===n)return;const a=s.actualOptions.interactivity.modes.bubble.duration,r=s.retina.bubbleModeDistance,l=o.particlesObj.optValue,c=o.bubbleObj.value,d=o.particlesObj.value||0,h=o.type;if(n!==l)if(s.bubble.durationEnd)c&&(h===m.size&&delete t.bubble.radius,h===m.opacity&&delete t.bubble.opacity);else if(i<=r){if((null!=c?c:d)!==n){const i=d-e*(d-n)/a;h===m.size&&(t.bubble.radius=i),h===m.opacity&&(t.bubble.opacity=i)}}else h===m.size&&delete t.bubble.radius,h===m.opacity&&delete t.bubble.opacity}clickBubble(){var t;const i=this.container,e=i.actualOptions,o=i.interactivity.mouse.clickPosition;if(void 0===o)return;const s=i.retina.bubbleModeDistance,n=i.particles.quadTree.queryCircle(o,s);for(const s of n){if(!i.bubble.clicking)continue;s.bubble.inRange=!i.bubble.durationEnd;const n=s.getPosition(),r=a.getDistance(n,o),l=((new Date).getTime()-(i.interactivity.mouse.clickTime||0))/1e3;l>e.interactivity.modes.bubble.duration&&(i.bubble.durationEnd=!0),l>2*e.interactivity.modes.bubble.duration&&(i.bubble.clicking=!1,i.bubble.durationEnd=!1);const c={bubbleObj:{optValue:i.retina.bubbleModeSize,value:s.bubble.radius},particlesObj:{optValue:null!==(t=s.sizeValue)&&void 0!==t?t:i.retina.sizeValue,value:s.size.value},type:m.size};this.process(s,r,l,c);const d={bubbleObj:{optValue:e.interactivity.modes.bubble.opacity,value:s.bubble.opacity},particlesObj:{optValue:s.options.opacity.value,value:s.opacity.value},type:m.opacity};this.process(s,r,l,d),i.bubble.durationEnd?delete s.bubble.color:r<=i.retina.bubbleModeDistance?this.hoverBubbleColor(s):delete s.bubble.color}}hoverBubble(){const t=this.container,i=t.interactivity.mouse.position;if(void 0===i)return;const e=t.retina.bubbleModeDistance,o=t.particles.quadTree.queryCircle(i,e);for(const s of o){s.bubble.inRange=!0;const o=s.getPosition(),n=a.getDistance(o,i),r=1-n/e;n<=e?r>=0&&t.interactivity.status===M.mouseMoveEvent&&(this.hoverBubbleSize(s,r),this.hoverBubbleOpacity(s,r),this.hoverBubbleColor(s)):this.reset(s),t.interactivity.status===M.mouseLeaveEvent&&this.reset(s)}}hoverBubbleSize(t,i,e){var o;const s=this.container,n=(null==e?void 0:e.size)?e.size*s.retina.pixelRatio:s.retina.bubbleModeSize;if(void 0===n)return;const a=null!==(o=t.sizeValue)&&void 0!==o?o:s.retina.sizeValue,r=jt(t.size.value,n,a,i);void 0!==r&&(t.bubble.radius=r)}hoverBubbleOpacity(t,i,e){var o;const s=this.container.actualOptions,n=null!==(o=null==e?void 0:e.opacity)&&void 0!==o?o:s.interactivity.modes.bubble.opacity;if(void 0===n)return;const a=t.options.opacity.value,r=jt(t.opacity.value,n,a,i);void 0!==r&&(t.bubble.opacity=r)}hoverBubbleColor(t,i){var e;const o=this.container.actualOptions;if(void 0===t.bubble.color){const s=null!==(e=null==i?void 0:i.color)&&void 0!==e?e:o.interactivity.modes.bubble.color;if(void 0===s)return;const n=s instanceof Array?P.itemFromArray(s):s;t.bubble.color=R.colorToHsl(n)}}}class Yt{constructor(t){this.container=t}isEnabled(){const t=this.container,i=t.interactivity.mouse,e=t.actualOptions.interactivity.events;if(!e.onHover.enable||!i.position)return!1;const o=e.onHover.mode;return P.isInArray(c.connect,o)}reset(){}interact(){const t=this.container;if(t.actualOptions.interactivity.events.onHover.enable&&"mousemove"===t.interactivity.status){const i=t.interactivity.mouse.position;if(!i)return;const e=Math.abs(t.retina.connectModeRadius),o=t.particles.quadTree.queryCircle(i,e);let s=0;for(const i of o){const e=i.getPosition();for(const n of o.slice(s+1)){const o=n.getPosition(),s=Math.abs(t.retina.connectModeDistance),a=Math.abs(e.x-o.x),r=Math.abs(e.y-o.y);a<s&&r<s&&t.canvas.drawConnectLine(i,n)}++s}}}}class Jt{constructor(t){this.container=t}isEnabled(t){return t.options.links.enable}reset(){}interact(t){var i;const e=this.container,o=t.options.links,s=o.opacity,n=null!==(i=t.linksDistance)&&void 0!==i?i:e.retina.linksDistance,r=e.canvas.size,l=o.warp,c=t.getPosition(),d=l?new I(c.x,c.y,n,r):new O(c.x,c.y,n),h=e.particles.quadTree.query(d);for(const i of h){const d=i.options.links;if(t===i||!d.enable||o.id!==d.id||i.spawning||i.destroyed)continue;const h=i.getPosition();let u=a.getDistance(c,h);if(l&&u>n){const t={x:h.x-r.width,y:h.y};if(u=a.getDistance(c,t),u>n){const t={x:h.x-r.width,y:h.y-r.height};if(u=a.getDistance(c,t),u>n){const t={x:h.x,y:h.y-r.height};u=a.getDistance(c,t)}}}if(u>n)return;const v=(1-u/n)*s,p=t.options.links;let y=void 0!==p.id?e.particles.linksColors.get(p.id):e.particles.linksColor;if(!y){const t=p.color;y=R.getLinkRandomColor(t,p.blink,p.consent),void 0!==p.id?e.particles.linksColors.set(p.id,y):e.particles.linksColor=y}-1===i.links.map(t=>t.destination).indexOf(t)&&-1===t.links.map(t=>t.destination).indexOf(i)&&t.links.push({destination:i,opacity:v})}}}class Qt{constructor(t){this.container=t}interact(t){var i;const e=this.container,o=null!==(i=t.linksDistance)&&void 0!==i?i:e.retina.linksDistance,s=t.getPosition(),n=e.particles.quadTree.queryCircle(s,o);for(const i of n){if(t===i||!i.options.move.attract.enable||i.destroyed||i.spawning)continue;const e=i.getPosition(),{dx:o,dy:n}=a.getDistances(s,e),r=t.options.move.attract.rotate,l=o/(1e3*r.x),c=n/(1e3*r.y);t.velocity.horizontal-=l,t.velocity.vertical-=c,i.velocity.horizontal+=l,i.velocity.vertical+=c}}isEnabled(t){return t.options.move.attract.enable}reset(){}}class Zt{constructor(t){this.container=t}isEnabled(t){return t.options.collisions.enable}reset(){}interact(t){const i=this.container,e=t.getPosition(),o=i.particles.quadTree.queryCircle(e,2*t.getRadius());for(const i of o){if(t===i||!i.options.collisions.enable||t.options.collisions.mode!==i.options.collisions.mode||i.destroyed||i.spawning)continue;const o=i.getPosition();a.getDistance(e,o)<=t.getRadius()+i.getRadius()&&this.resolveCollision(t,i)}}resolveCollision(t,i){switch(t.options.collisions.mode){case d.absorb:this.absorb(t,i);break;case d.bounce:!function(t,i){P.circleBounce(P.circleBounceDataFromParticle(t),P.circleBounceDataFromParticle(i))}(t,i);break;case d.destroy:!function(t,i){void 0===t.getRadius()&&void 0!==i.getRadius()?t.destroy():void 0!==t.getRadius()&&void 0===i.getRadius()?i.destroy():void 0!==t.getRadius()&&void 0!==i.getRadius()&&(t.getRadius()>=i.getRadius()?i.destroy():t.destroy())}(t,i)}}absorb(t,i){const e=this.container,o=e.actualOptions.fpsLimit/1e3;if(void 0===t.getRadius()&&void 0!==i.getRadius())t.destroy();else if(void 0!==t.getRadius()&&void 0===i.getRadius())i.destroy();else if(void 0!==t.getRadius()&&void 0!==i.getRadius())if(t.getRadius()>=i.getRadius()){const s=a.clamp(t.getRadius()/i.getRadius(),0,i.getRadius())*o;t.size.value+=s,i.size.value-=s,i.getRadius()<=e.retina.pixelRatio&&(i.size.value=0,i.destroy())}else{const s=a.clamp(i.getRadius()/t.getRadius(),0,t.getRadius())*o;t.size.value-=s,i.size.value+=s,t.getRadius()<=e.retina.pixelRatio&&(t.size.value=0,t.destroy())}}}class Kt{constructor(t){this.container=t}isEnabled(){return this.container.actualOptions.infection.enable}reset(){}interact(t,i){var e,o;const s=t.infecter;if(s.updateInfection(i.value),void 0===s.infectionStage)return;const n=this.container,a=n.actualOptions.infection;if(!a.enable||a.stages.length<1)return;const r=a.stages[s.infectionStage],l=n.retina.pixelRatio,c=2*t.getRadius()+r.radius*l,d=t.getPosition(),h=null!==(e=r.infectedStage)&&void 0!==e?e:s.infectionStage,u=n.particles.quadTree.queryCircle(d,c),v=r.rate,p=u.length;for(const i of u){if(i===t||i.destroyed||i.spawning||void 0!==i.infecter.infectionStage&&i.infecter.infectionStage===s.infectionStage)continue;const e=i.infecter;if(Math.random()<v/p)if(void 0===e.infectionStage)e.startInfection(h);else if(e.infectionStage<s.infectionStage)e.updateInfectionStage(h);else if(e.infectionStage>s.infectionStage){const t=a.stages[e.infectionStage],i=null!==(o=null==t?void 0:t.infectedStage)&&void 0!==o?o:e.infectionStage;s.updateInfectionStage(i)}}}}class ti{constructor(t){this.container=t,this.delay=0}interact(t){if(!this.container.retina.reduceFactor)return;const i=this.container,e=i.actualOptions.interactivity.modes.trail,o=1e3*e.delay/this.container.retina.reduceFactor;this.delay<o&&(this.delay+=t.value),this.delay>=o&&(i.particles.push(e.quantity,i.interactivity.mouse,e.particles),this.delay-=o)}isEnabled(){const t=this.container,i=t.actualOptions,e=t.interactivity.mouse,o=i.interactivity.events;return e.clicking&&e.inside&&!!e.position&&P.isInArray(r.trail,o.onClick.mode)||e.inside&&!!e.position&&P.isInArray(c.trail,o.onHover.mode)}reset(){}}class ii{constructor(t){this.container=t}isEnabled(){const t=this.container,i=t.actualOptions,e=t.interactivity.mouse,o=i.interactivity.events;if(!(o.onHover.enable&&e.position||o.onClick.enable&&e.clickPosition))return!1;const s=o.onHover.mode,n=o.onClick.mode;return P.isInArray(c.attract,s)||P.isInArray(r.attract,n)}reset(){}interact(){const t=this.container,i=t.actualOptions,e=t.interactivity.status===M.mouseMoveEvent,o=i.interactivity.events,s=o.onHover.enable,n=o.onHover.mode,a=o.onClick.enable,l=o.onClick.mode;e&&s&&P.isInArray(c.attract,n)?this.hoverAttract():a&&P.isInArray(r.attract,l)&&this.clickAttract()}hoverAttract(){const t=this.container,i=t.interactivity.mouse.position;if(!i)return;const e=t.retina.attractModeDistance;this.processAttract(i,e,new O(i.x,i.y,e))}processAttract(t,i,e){const o=this.container,s=o.particles.quadTree.query(e);for(const e of s){const{dx:s,dy:n,distance:r}=a.getDistances(e.position,t),l={x:s/r,y:n/r},c=o.actualOptions.interactivity.modes.attract.speed,d=a.clamp((1-Math.pow(r/i,2))*c,0,50);e.position.x=e.position.x-l.x*d,e.position.y=e.position.y-l.y*d}}clickAttract(){const t=this.container;if(t.attract.finish||(t.attract.count||(t.attract.count=0),t.attract.count++,t.attract.count===t.particles.count&&(t.attract.finish=!0)),t.attract.clicking){const i=t.interactivity.mouse.clickPosition;if(!i)return;const e=t.retina.attractModeDistance;this.processAttract(i,e,new O(i.x,i.y,e))}else!1===t.attract.clicking&&(t.attract.particles=[])}}class ei{constructor(t){this.container=t}interact(t){const i=this.container;if(i.actualOptions.interactivity.events.onHover.enable&&"mousemove"===i.interactivity.status){const e=this.container.interactivity.mouse.position;e&&i.canvas.drawParticleShadow(t,e)}}isEnabled(){const t=this.container,i=t.interactivity.mouse,e=t.actualOptions.interactivity.events;if(!e.onHover.enable||!i.position)return!1;const o=e.onHover.mode;return P.isInArray(c.light,o)}reset(){}}class oi{constructor(t){this.container=t}interact(){const t=this.container;if(t.actualOptions.interactivity.events.onHover.enable&&"mousemove"===t.interactivity.status){const i=t.interactivity.mouse.position;if(!i)return;t.canvas.drawLight(i)}}isEnabled(){const t=this.container,i=t.interactivity.mouse,e=t.actualOptions.interactivity.events;if(!e.onHover.enable||!i.position)return!1;const o=e.onHover.mode;return P.isInArray(c.light,o)}reset(){}}class si{constructor(t){this.container=t}isEnabled(){const t=this.container,i=t.actualOptions,e=t.interactivity.mouse,o=i.interactivity.events,s=o.onDiv;return e.position&&o.onHover.enable&&P.isInArray(c.bounce,o.onHover.mode)||P.isDivModeEnabled(l.bounce,s)}interact(){const t=this.container,i=t.actualOptions.interactivity.events,e=t.interactivity.status===M.mouseMoveEvent,o=i.onHover.enable,s=i.onHover.mode,n=i.onDiv;e&&o&&P.isInArray(c.bounce,s)?this.processMouseBounce():P.divModeExecute(l.bounce,n,(t,i)=>this.singleSelectorBounce(t,i))}reset(){}processMouseBounce(){const t=this.container,i=10*t.retina.pixelRatio,e=t.interactivity.mouse.position,o=t.retina.bounceModeDistance;e&&this.processBounce(e,o,new O(e.x,e.y,o+i))}singleSelectorBounce(t,i){const e=this.container,o=document.querySelectorAll(t);o.length&&o.forEach(t=>{const o=t,s=e.retina.pixelRatio,n={x:(o.offsetLeft+o.offsetWidth/2)*s,y:(o.offsetTop+o.offsetHeight/2)*s},a=o.offsetWidth/2*s,r=10*s,l=i.type===b.circle?new O(n.x,n.y,a+r):new E(o.offsetLeft*s-r,o.offsetTop*s-r,o.offsetWidth*s+2*r,o.offsetHeight*s+2*r);this.processBounce(n,a,l)})}processBounce(t,i,e){const o=this.container.particles.quadTree.query(e);for(const s of o)e instanceof O?P.circleBounce(P.circleBounceDataFromParticle(s),{position:t,radius:i,velocity:{horizontal:0,vertical:0},factor:{horizontal:0,vertical:0}}):e instanceof E&&P.rectBounce(s,P.calculateBounds(t,i))}}class ni{constructor(t){this.container=t,this.externalInteractors=[new si(t),new Xt(t),new Yt(t),new Ut(t),new oi(t),new ii(t),new $t(t),new ti(t)],this.particleInteractors=[new Qt(t),new ei(t),new Zt(t),new Kt(t),new Jt(t)]}init(){}externalInteract(t){for(const i of this.externalInteractors)i.isEnabled()&&i.interact(t)}particlesInteract(t,i){for(const i of this.externalInteractors)i.reset(t);for(const e of this.particleInteractors)e.isEnabled(t)&&e.interact(t,i)}}class ai{constructor(t){this.container=t,this.nextId=0,this.array=[],this.limit=0,this.linksFreq=new Map,this.trianglesFreq=new Map,this.interactionManager=new ni(t);const i=this.container.canvas.size;this.linksColors=new Map,this.quadTree=new G(new E(-i.width/4,-i.height/4,3*i.width/2,3*i.height/2),4)}get count(){return this.array.length}init(){const t=this.container,i=t.actualOptions;this.linksFreq=new Map,this.trianglesFreq=new Map;let e=!1;for(const e of i.manualParticles){const i=e.position?{x:e.position.x*t.canvas.size.width/100,y:e.position.y*t.canvas.size.height/100}:void 0;this.addParticle(i,e.options)}for(const[,i]of t.plugins)if(void 0!==i.particlesInitialization&&(e=i.particlesInitialization()),e)break;if(!e)for(let t=this.count;t<i.particles.number.value;t++)this.addParticle();if(i.infection.enable)for(let t=0;t<i.infection.infections;t++){const t=this.array.filter(t=>void 0===t.infecter.infectionStage);P.itemFromArray(t).infecter.startInfection(0)}this.interactionManager.init(),t.pathGenerator.init()}redraw(){this.clear(),this.init(),this.draw({value:0,factor:0})}removeAt(t,i){if(t>=0&&t<=this.count)for(const e of this.array.splice(t,null!=i?i:1))e.destroy()}remove(t){this.removeAt(this.array.indexOf(t))}update(t){const i=this.container,e=[];i.pathGenerator.update();for(const[,e]of i.plugins)void 0!==e.update&&e.update(t);for(const i of this.array){const o=this.container.canvas.resizeFactor;o&&(i.position.x*=o.width,i.position.y*=o.height),i.move(t),i.destroyed?e.push(i):this.quadTree.insert(new W(i.getPosition(),i))}for(const t of e)this.remove(t);this.interactionManager.externalInteract(t);for(const i of this.container.particles.array)i.update(t),i.destroyed||i.spawning||this.interactionManager.particlesInteract(i,t);delete i.canvas.resizeFactor}draw(t){const i=this.container;i.canvas.clear();const e=this.container.canvas.size;this.quadTree=new G(new E(-e.width/4,-e.height/4,3*e.width/2,3*e.height/2),4),this.update(t);for(const[,e]of i.plugins)i.canvas.drawPlugin(e,t);for(const i of this.array)i.draw(t)}clear(){this.array=[]}push(t,i,e){const o=this.container,s=o.actualOptions.particles.number.limit*o.density;if(this.pushing=!0,s>0){const i=this.count+t-s;i>0&&this.removeQuantity(i)}for(let o=0;o<t;o++)this.addParticle(null==i?void 0:i.position,e);this.pushing=!1}addParticle(t,i){try{const e=new Nt(this.nextId,this.container,t,i);return this.array.push(e),this.nextId++,e}catch(t){return void console.warn("error adding particle")}}removeQuantity(t){this.removeAt(0,t)}getLinkFrequency(t,i){const e=`${Math.min(t.id,i.id)}_${Math.max(t.id,i.id)}`;let o=this.linksFreq.get(e);return void 0===o&&(o=Math.random(),this.linksFreq.set(e,o)),o}getTriangleFrequency(t,i,e){let[o,s,n]=[t.id,i.id,e.id];o>s&&([s,o]=[o,s]),s>n&&([n,s]=[s,n]),o>n&&([n,o]=[o,n]);const a=`${o}_${s}_${n}`;let r=this.trianglesFreq.get(a);return void 0===r&&(r=Math.random(),this.trianglesFreq.set(a,r)),r}setDensity(){const t=this.container.actualOptions;this.applyDensity(t.particles)}applyDensity(t){var i;if(!(null===(i=t.number.density)||void 0===i?void 0:i.enable))return;const e=t.number,o=this.initDensityFactor(e.density),s=e.value,n=e.limit>0?e.limit:s,a=Math.min(s,n)*o,r=this.count;this.limit=e.limit*o,r<a?this.push(Math.abs(a-r),void 0,t):r>a&&this.removeQuantity(r-a)}initDensityFactor(t){const i=this.container;if(!i.canvas.element||!t.enable)return 1;const e=i.canvas.element,o=i.retina.pixelRatio;return e.width*e.height/(t.factor*o*o*t.area)}}class ri{constructor(t){this.container=t}init(){const t=this.container,i=t.actualOptions;i.detectRetina?this.pixelRatio=P.isSsr()?1:window.devicePixelRatio:this.pixelRatio=1;const e=this.container.actualOptions.motion;if(e&&(e.disable||e.reduce.value))if(P.isSsr()||"undefined"==typeof matchMedia||!matchMedia)this.reduceFactor=1;else{const i=matchMedia("(prefers-reduced-motion: reduce)");if(i){this.handleMotionChange(i);const e=()=>{this.handleMotionChange(i),t.refresh().catch(()=>{})};void 0!==i.addEventListener?i.addEventListener("change",e):void 0!==i.addListener&&i.addListener(e)}}else this.reduceFactor=1;const o=this.pixelRatio;if(t.canvas.element){const i=t.canvas.element;t.canvas.size.width=i.offsetWidth*o,t.canvas.size.height=i.offsetHeight*o}const s=i.particles;this.linksDistance=s.links.distance*o,this.linksWidth=s.links.width*o,this.moveSpeed=s.move.speed*o,this.sizeValue=s.size.value*o,this.sizeAnimationSpeed=s.size.animation.speed*o;const n=i.interactivity.modes;this.connectModeDistance=n.connect.distance*o,this.connectModeRadius=n.connect.radius*o,this.grabModeDistance=n.grab.distance*o,this.repulseModeDistance=n.repulse.distance*o,this.bounceModeDistance=n.bounce.distance*o,this.attractModeDistance=n.attract.distance*o,this.slowModeRadius=n.slow.radius*o,this.bubbleModeDistance=n.bubble.distance*o,n.bubble.size&&(this.bubbleModeSize=n.bubble.size*o)}initParticle(t){const i=t.options,e=this.pixelRatio;t.linksDistance=i.links.distance*e,t.linksWidth=i.links.width*e,t.moveSpeed=i.move.speed*e,t.sizeValue=i.size.value*e,t.sizeAnimationSpeed=i.size.animation.speed*e,t.maxDistance=i.move.distance*e}handleMotionChange(t){const i=this.container.actualOptions;if(t.matches){const t=i.motion;this.reduceFactor=t.disable?0:t.reduce.value?1/t.reduce.factor:1}else this.reduceFactor=1}}class li{constructor(t){this.container=t}nextFrame(t){try{const i=this.container;if(void 0!==i.lastFrameTime&&t<i.lastFrameTime+1e3/i.fpsLimit)return void i.draw();const e=t-i.lastFrameTime,o={value:e,factor:60*e/1e3};i.lastFrameTime=t,i.particles.draw(o),i.getAnimationStatus()&&i.draw()}catch(t){console.error("tsParticles error in animation loop",t)}}}class ci{constructor(){this.enable=!1,this.mode=[]}load(t){void 0!==t&&(void 0!==t.enable&&(this.enable=t.enable),void 0!==t.mode&&(this.mode=t.mode))}}class di{constructor(){this.selectors=[],this.enable=!1,this.mode=[],this.type=b.circle}get elementId(){return this.ids}set elementId(t){this.ids=t}get el(){return this.elementId}set el(t){this.elementId=t}get ids(){return this.selectors instanceof Array?this.selectors.map(t=>t.replace("#","")):this.selectors.replace("#","")}set ids(t){this.selectors=t instanceof Array?t.map(t=>"#"+t):"#"+t}load(t){var i,e;if(void 0===t)return;const o=null!==(e=null!==(i=t.ids)&&void 0!==i?i:t.elementId)&&void 0!==e?e:t.el;void 0!==o&&(this.ids=o),void 0!==t.selectors&&(this.selectors=t.selectors),void 0!==t.enable&&(this.enable=t.enable),void 0!==t.mode&&(this.mode=t.mode),void 0!==t.type&&(this.type=t.type)}}class hi{constructor(){this.enable=!1,this.force=2,this.smooth=10}load(t){void 0!==t&&(void 0!==t.enable&&(this.enable=t.enable),void 0!==t.force&&(this.force=t.force),void 0!==t.smooth&&(this.smooth=t.smooth))}}class ui{constructor(){this.enable=!1,this.mode=[],this.parallax=new hi}load(t){void 0!==t&&(void 0!==t.enable&&(this.enable=t.enable),void 0!==t.mode&&(this.mode=t.mode),this.parallax.load(t.parallax))}}class vi{constructor(){this.onClick=new ci,this.onDiv=new di,this.onHover=new ui,this.resize=!0}get onclick(){return this.onClick}set onclick(t){this.onClick=t}get ondiv(){return this.onDiv}set ondiv(t){this.onDiv=t}get onhover(){return this.onHover}set onhover(t){this.onHover=t}load(t){var i,e,o;if(void 0===t)return;this.onClick.load(null!==(i=t.onClick)&&void 0!==i?i:t.onclick);const s=null!==(e=t.onDiv)&&void 0!==e?e:t.ondiv;void 0!==s&&(s instanceof Array?this.onDiv=s.map(t=>{const i=new di;return i.load(t),i}):(this.onDiv=new di,this.onDiv.load(s))),this.onHover.load(null!==(o=t.onHover)&&void 0!==o?o:t.onhover),void 0!==t.resize&&(this.resize=t.resize)}}class pi{constructor(){this.distance=200,this.duration=.4}load(t){void 0!==t&&(void 0!==t.distance&&(this.distance=t.distance),void 0!==t.duration&&(this.duration=t.duration),void 0!==t.opacity&&(this.opacity=t.opacity),void 0!==t.color&&(t.color instanceof Array?this.color=t.color.map(t=>ot.create(void 0,t)):(this.color instanceof Array&&(this.color=new ot),this.color=ot.create(this.color,t.color))),void 0!==t.size&&(this.size=t.size))}}class yi extends pi{constructor(){super(),this.selectors=[]}get ids(){return this.selectors instanceof Array?this.selectors.map(t=>t.replace("#","")):this.selectors.replace("#","")}set ids(t){this.selectors=t instanceof Array?t.map(t=>"#"+t):"#"+t}load(t){super.load(t),void 0!==t&&(void 0!==t.ids&&(this.ids=t.ids),void 0!==t.selectors&&(this.selectors=t.selectors))}}class mi extends pi{load(t){super.load(t),void 0!==t&&void 0!==t.divs&&(t.divs instanceof Array?this.divs=t.divs.map(t=>{const i=new yi;return i.load(t),i}):((this.divs instanceof Array||!this.divs)&&(this.divs=new yi),this.divs.load(t.divs)))}}class fi{constructor(){this.opacity=.5}load(t){void 0!==t&&void 0!==t.opacity&&(this.opacity=t.opacity)}}class gi{constructor(){this.distance=80,this.links=new fi,this.radius=60}get line_linked(){return this.links}set line_linked(t){this.links=t}get lineLinked(){return this.links}set lineLinked(t){this.links=t}load(t){var i,e;void 0!==t&&(void 0!==t.distance&&(this.distance=t.distance),this.links.load(null!==(e=null!==(i=t.links)&&void 0!==i?i:t.lineLinked)&&void 0!==e?e:t.line_linked),void 0!==t.radius&&(this.radius=t.radius))}}class bi{constructor(){this.blink=!1,this.consent=!1,this.opacity=1}load(t){void 0!==t&&(void 0!==t.blink&&(this.blink=t.blink),void 0!==t.color&&(this.color=ot.create(this.color,t.color)),void 0!==t.consent&&(this.consent=t.consent),void 0!==t.opacity&&(this.opacity=t.opacity))}}class wi{constructor(){this.distance=100,this.links=new bi}get line_linked(){return this.links}set line_linked(t){this.links=t}get lineLinked(){return this.links}set lineLinked(t){this.links=t}load(t){var i,e;void 0!==t&&(void 0!==t.distance&&(this.distance=t.distance),this.links.load(null!==(e=null!==(i=t.links)&&void 0!==i?i:t.lineLinked)&&void 0!==e?e:t.line_linked))}}class xi{constructor(){this.quantity=2}get particles_nb(){return this.quantity}set particles_nb(t){this.quantity=t}load(t){var i;if(void 0===t)return;const e=null!==(i=t.quantity)&&void 0!==i?i:t.particles_nb;void 0!==e&&(this.quantity=e)}}class ki{constructor(){this.quantity=4}get particles_nb(){return this.quantity}set particles_nb(t){this.quantity=t}load(t){var i;if(void 0===t)return;const e=null!==(i=t.quantity)&&void 0!==i?i:t.particles_nb;void 0!==e&&(this.quantity=e)}}class zi{constructor(){this.distance=200,this.duration=.4,this.speed=1}load(t){void 0!==t&&(void 0!==t.distance&&(this.distance=t.distance),void 0!==t.duration&&(this.duration=t.duration),void 0!==t.speed&&(this.speed=t.speed))}}class Pi extends zi{constructor(){super(),this.selectors=[]}get ids(){return this.selectors instanceof Array?this.selectors.map(t=>t.replace("#","")):this.selectors.replace("#","")}set ids(t){this.selectors=t instanceof Array?t.map(()=>"#"+t):"#"+t}load(t){super.load(t),void 0!==t&&(void 0!==t.ids&&(this.ids=t.ids),void 0!==t.selectors&&(this.selectors=t.selectors))}}class Mi extends zi{load(t){super.load(t),void 0!==(null==t?void 0:t.divs)&&(t.divs instanceof Array?this.divs=t.divs.map(t=>{const i=new Pi;return i.load(t),i}):((this.divs instanceof Array||!this.divs)&&(this.divs=new Pi),this.divs.load(t.divs)))}}class Si{constructor(){this.factor=3,this.radius=200}get active(){return!1}set active(t){}load(t){void 0!==t&&(void 0!==t.factor&&(this.factor=t.factor),void 0!==t.radius&&(this.radius=t.radius))}}class Ci{constructor(){this.delay=1,this.quantity=1}load(t){void 0!==t&&(void 0!==t.delay&&(this.delay=t.delay),void 0!==t.quantity&&(this.quantity=t.quantity),void 0!==t.particles&&(this.particles=P.deepExtend({},t.particles)))}}class Ri{constructor(){this.distance=200,this.duration=.4,this.speed=1}load(t){void 0!==t&&(void 0!==t.distance&&(this.distance=t.distance),void 0!==t.duration&&(this.duration=t.duration),void 0!==t.speed&&(this.speed=t.speed))}}class Ai{constructor(){this.start=new ot,this.stop=new ot,this.start.value="#ffffff",this.stop.value="#000000"}load(t){void 0!==t&&(this.start=ot.create(this.start,t.start),this.stop=ot.create(this.stop,t.stop))}}class Ti{constructor(){this.gradient=new Ai,this.radius=1e3}load(t){void 0!==t&&(this.gradient.load(t.gradient),void 0!==t.radius&&(this.radius=t.radius))}}class Di{constructor(){this.color=new ot,this.color.value="#000000",this.length=2e3}load(t){void 0!==t&&(this.color=ot.create(this.color,t.color),void 0!==t.length&&(this.length=t.length))}}class Oi{constructor(){this.area=new Ti,this.shadow=new Di}load(t){void 0!==t&&(this.area.load(t.area),this.shadow.load(t.shadow))}}class Ei{constructor(){this.distance=200}load(t){t&&void 0!==t.distance&&(this.distance=t.distance)}}class Ii{constructor(){this.attract=new Ri,this.bounce=new Ei,this.bubble=new mi,this.connect=new gi,this.grab=new wi,this.light=new Oi,this.push=new ki,this.remove=new xi,this.repulse=new Mi,this.slow=new Si,this.trail=new Ci}load(t){void 0!==t&&(this.attract.load(t.attract),this.bubble.load(t.bubble),this.connect.load(t.connect),this.grab.load(t.grab),this.light.load(t.light),this.push.load(t.push),this.remove.load(t.remove),this.repulse.load(t.repulse),this.slow.load(t.slow),this.trail.load(t.trail))}}class Vi{constructor(){this.detectsOn=w.canvas,this.events=new vi,this.modes=new Ii}get detect_on(){return this.detectsOn}set detect_on(t){this.detectsOn=t}load(t){var i,e,o;if(void 0===t)return;const s=null!==(i=t.detectsOn)&&void 0!==i?i:t.detect_on;void 0!==s&&(this.detectsOn=s),this.events.load(t.events),this.modes.load(t.modes),!0===(null===(o=null===(e=t.modes)||void 0===e?void 0:e.slow)||void 0===o?void 0:o.active)&&(this.events.onHover.mode instanceof Array?this.events.onHover.mode.indexOf(c.slow)<0&&this.events.onHover.mode.push(c.slow):this.events.onHover.mode!==c.slow&&(this.events.onHover.mode=[this.events.onHover.mode,c.slow]))}}class Fi{constructor(){this.color=new ot,this.opacity=1}load(t){void 0!==t&&(void 0!==t.color&&(this.color=ot.create(this.color,t.color)),void 0!==t.opacity&&(this.opacity=t.opacity))}}class Hi{constructor(){this.composite="destination-out",this.cover=new Fi,this.enable=!1}load(t){if(void 0!==t){if(void 0!==t.composite&&(this.composite=t.composite),void 0!==t.cover){const i=t.cover,e="string"==typeof t.cover?{color:t.cover}:t.cover;this.cover.load(void 0!==i.color?i:{color:e})}void 0!==t.enable&&(this.enable=t.enable)}}}class Li{constructor(){this.color=new ot,this.color.value="",this.image="",this.position="",this.repeat="",this.size="",this.opacity=1}load(t){void 0!==t&&(void 0!==t.color&&(this.color=ot.create(this.color,t.color)),void 0!==t.image&&(this.image=t.image),void 0!==t.position&&(this.position=t.position),void 0!==t.repeat&&(this.repeat=t.repeat),void 0!==t.size&&(this.size=t.size),void 0!==t.opacity&&(this.opacity=t.opacity))}}class qi{constructor(){this.color=new ot,this.color.value="#ff0000",this.radius=0,this.rate=1}load(t){void 0!==t&&(void 0!==t.color&&(this.color=ot.create(this.color,t.color)),this.duration=t.duration,this.infectedStage=t.infectedStage,void 0!==t.radius&&(this.radius=t.radius),void 0!==t.rate&&(this.rate=t.rate))}}class _i{constructor(){this.cure=!1,this.delay=0,this.enable=!1,this.infections=0,this.stages=[]}load(t){void 0!==t&&(void 0!==t.cure&&(this.cure=t.cure),void 0!==t.delay&&(this.delay=t.delay),void 0!==t.enable&&(this.enable=t.enable),void 0!==t.infections&&(this.infections=t.infections),void 0!==t.stages&&(this.stages=t.stages.map(t=>{const i=new qi;return i.load(t),i})))}}class Bi{constructor(){this.mode=v.any,this.value=!1}load(t){void 0!==t&&(void 0!==t.mode&&(this.mode=t.mode),void 0!==t.value&&(this.value=t.value))}}class Wi{constructor(){this.name="",this.default=new Bi}load(t){void 0!==t&&(void 0!==t.name&&(this.name=t.name),this.default.load(t.default),void 0!==t.options&&(this.options=P.deepExtend({},t.options)))}}class Gi{constructor(){this.enable=!1,this.zIndex=-1}load(t){t&&(void 0!==t.enable&&(this.enable=t.enable),void 0!==t.zIndex&&(this.zIndex=t.zIndex))}}class Ni{constructor(){this.factor=4,this.value=!0}load(t){t&&(void 0!==t.factor&&(this.factor=t.factor),void 0!==t.value&&(this.value=t.value))}}class Ui{constructor(){this.disable=!1,this.reduce=new Ni}load(t){t&&(void 0!==t.disable&&(this.disable=t.disable),this.reduce.load(t.reduce))}}class $i{load(t){var i,e;t&&(void 0!==t.position&&(this.position={x:null!==(i=t.position.x)&&void 0!==i?i:50,y:null!==(e=t.position.y)&&void 0!==e?e:50}),void 0!==t.options&&(this.options=P.deepExtend({},t.options)))}}class ji{constructor(){this.maxWidth=1/0,this.options={}}load(t){t&&(void 0!==t.maxWidth&&(this.maxWidth=t.maxWidth),void 0!==t.options&&(this.options=P.deepExtend({},t.options)))}}class Xi{constructor(){this.autoPlay=!0,this.background=new Li,this.backgroundMask=new Hi,this.fullScreen=new Gi,this.detectRetina=!0,this.fpsLimit=60,this.infection=new _i,this.interactivity=new Vi,this.manualParticles=[],this.motion=new Ui,this.particles=new Bt,this.pauseOnBlur=!0,this.pauseOnOutsideViewport=!1,this.responsive=[],this.themes=[]}get fps_limit(){return this.fpsLimit}set fps_limit(t){this.fpsLimit=t}get retina_detect(){return this.detectRetina}set retina_detect(t){this.detectRetina=t}get backgroundMode(){return this.fullScreen}set backgroundMode(t){this.fullScreen.load(t)}load(t){var i,e,o;if(void 0===t)return;if(void 0!==t.preset)if(t.preset instanceof Array)for(const i of t.preset)this.importPreset(i);else this.importPreset(t.preset);void 0!==t.autoPlay&&(this.autoPlay=t.autoPlay);const s=null!==(i=t.detectRetina)&&void 0!==i?i:t.retina_detect;void 0!==s&&(this.detectRetina=s);const n=null!==(e=t.fpsLimit)&&void 0!==e?e:t.fps_limit;if(void 0!==n&&(this.fpsLimit=n),void 0!==t.pauseOnBlur&&(this.pauseOnBlur=t.pauseOnBlur),void 0!==t.pauseOnOutsideViewport&&(this.pauseOnOutsideViewport=t.pauseOnOutsideViewport),this.background.load(t.background),this.fullScreen.load(null!==(o=t.fullScreen)&&void 0!==o?o:t.backgroundMode),this.backgroundMask.load(t.backgroundMask),this.infection.load(t.infection),this.interactivity.load(t.interactivity),void 0!==t.manualParticles&&(this.manualParticles=t.manualParticles.map(t=>{const i=new $i;return i.load(t),i})),this.motion.load(t.motion),this.particles.load(t.particles),B.loadOptions(this,t),void 0!==t.responsive)for(const i of t.responsive){const t=new ji;t.load(i),this.responsive.push(t)}if(this.responsive.sort((t,i)=>t.maxWidth-i.maxWidth),void 0!==t.themes)for(const i of t.themes){const t=new Wi;t.load(i),this.themes.push(t)}}setTheme(t){if(t){const i=this.themes.find(i=>i.name===t);i&&this.load(i.options)}else{const t="undefined"!=typeof matchMedia&&matchMedia("(prefers-color-scheme: dark)").matches;let i=this.themes.find(i=>i.default.value&&(i.default.mode===v.dark&&t||i.default.mode===v.light&&!t));i||(i=this.themes.find(t=>t.default.value&&t.default.mode===v.any)),i&&this.load(i.options)}}importPreset(t){this.load(B.getPreset(t))}setResponsive(t,i,e){var o;this.load(e),this.load(null===(o=this.responsive.find(e=>e.maxWidth*i>t))||void 0===o?void 0:o.options)}}var Yi=function(t,i,e,o){return new(e||(e=Promise))((function(s,n){function a(t){try{l(o.next(t))}catch(t){n(t)}}function r(t){try{l(o.throw(t))}catch(t){n(t)}}function l(t){var i;t.done?s(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(a,r)}l((o=o.apply(t,i||[])).next())}))};class Ji{constructor(t,i,...e){this.id=t,this.sourceOptions=i,this.fpsLimit=60,this.firstStart=!0,this.started=!1,this.destroyed=!1,this.paused=!0,this.lastFrameTime=0,this.pageHidden=!1,this.retina=new ri(this),this.canvas=new tt(this),this.particles=new ai(this),this.drawer=new li(this),this.pathGenerator={generate:()=>({angle:Math.random()*Math.PI*2,length:Math.random()}),init:()=>{},update:()=>{}},this.interactivity={mouse:{clicking:!1,inside:!1}},this.bubble={},this.repulse={particles:[]},this.attract={particles:[]},this.plugins=new Map,this.drawers=new Map,this.density=1,this.options=new Xi,this.actualOptions=new Xi;for(const t of e)this.options.load(B.getPreset(t));const o=B.getSupportedShapes();for(const t of o){const i=B.getShapeDrawer(t);i&&this.drawers.set(t,i)}this.options&&this.options.load(this.sourceOptions),this.eventListeners=new F(this),"undefined"!=typeof IntersectionObserver&&IntersectionObserver&&(this.intersectionObserver=new IntersectionObserver(t=>this.intersectionManager(t)))}play(t){const i=this.paused||t;if(!this.firstStart||this.actualOptions.autoPlay){if(this.paused&&(this.paused=!1),i){for(const[,t]of this.plugins)t.play&&t.play();this.lastFrameTime=performance.now()}this.draw()}else this.firstStart=!1}pause(){if(void 0!==this.drawAnimationFrame&&(P.cancelAnimation(this.drawAnimationFrame),delete this.drawAnimationFrame),!this.paused){for(const[,t]of this.plugins)t.pause&&t.pause();this.pageHidden||(this.paused=!0)}}draw(){this.drawAnimationFrame=P.animate(t=>this.drawer.nextFrame(t))}getAnimationStatus(){return!this.paused}setNoise(t,i,e){this.setPath(t,i,e)}setPath(t,i,e){t&&("function"==typeof t?(this.pathGenerator.generate=t,i&&(this.pathGenerator.init=i),e&&(this.pathGenerator.update=e)):(t.generate&&(this.pathGenerator.generate=t.generate),t.init&&(this.pathGenerator.init=t.init),t.update&&(this.pathGenerator.update=t.update)))}destroy(){this.stop(),this.canvas.destroy();for(const[,t]of this.drawers)t.destroy&&t.destroy(this);for(const t of this.drawers.keys())this.drawers.delete(t);this.destroyed=!0}exportImg(t){this.exportImage(t)}exportImage(t,i,e){var o;return null===(o=this.canvas.element)||void 0===o?void 0:o.toBlob(t,null!=i?i:"image/png",e)}exportConfiguration(){return JSON.stringify(this.actualOptions,void 0,2)}refresh(){return Yi(this,void 0,void 0,(function*(){this.stop(),yield this.start()}))}stop(){if(this.started){this.firstStart=!0,this.started=!1,this.eventListeners.removeListeners(),this.pause(),this.particles.clear(),this.canvas.clear(),this.interactivity.element instanceof HTMLElement&&this.intersectionObserver&&this.intersectionObserver.observe(this.interactivity.element);for(const[,t]of this.plugins)t.stop&&t.stop();for(const t of this.plugins.keys())this.plugins.delete(t);this.particles.linksColors=new Map,delete this.particles.grabLineColor,delete this.particles.linksColor}}loadTheme(t){return Yi(this,void 0,void 0,(function*(){this.actualOptions.setTheme(t),yield this.refresh()}))}start(){return Yi(this,void 0,void 0,(function*(){if(!this.started){yield this.init(),this.started=!0,this.eventListeners.addListeners(),this.interactivity.element instanceof HTMLElement&&this.intersectionObserver&&this.intersectionObserver.observe(this.interactivity.element);for(const[,t]of this.plugins)void 0!==t.startAsync?yield t.startAsync():void 0!==t.start&&t.start();this.play()}}))}init(){return Yi(this,void 0,void 0,(function*(){this.actualOptions=new Xi,this.actualOptions.load(this.options),this.retina.init(),this.canvas.init(),this.actualOptions.setResponsive(this.canvas.size.width,this.retina.pixelRatio,this.options),this.actualOptions.setTheme(void 0),this.fpsLimit=this.actualOptions.fpsLimit>0?this.actualOptions.fpsLimit:60;const t=B.getAvailablePlugins(this);for(const[i,e]of t)this.plugins.set(i,e);for(const[,t]of this.drawers)t.init&&(yield t.init(this));for(const[,t]of this.plugins)t.init?t.init(this.actualOptions):void 0!==t.initAsync&&(yield t.initAsync(this.actualOptions));this.canvas.resize(),this.particles.init(),this.particles.setDensity()}))}intersectionManager(t){if(this.actualOptions.pauseOnOutsideViewport)for(const i of t)i.target===this.interactivity.element&&(i.isIntersecting?this.play():this.pause())}}var Qi=function(t,i,e,o){return new(e||(e=Promise))((function(s,n){function a(t){try{l(o.next(t))}catch(t){n(t)}}function r(t){try{l(o.throw(t))}catch(t){n(t)}}function l(t){var i;t.done?s(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(a,r)}l((o=o.apply(t,i||[])).next())}))};const Zi=[];function Ki(t){console.error("Error tsParticles - fetch status: "+t),console.error("Error tsParticles - File config not found")}class te{static dom(){return Zi}static domItem(t){const i=te.dom(),e=i[t];if(e&&!e.destroyed)return e;i.splice(t,1)}static load(t,i,e){return Qi(this,void 0,void 0,(function*(){const o=document.getElementById(t);if(o)return te.set(t,o,i,e)}))}static set(t,i,e,o){return Qi(this,void 0,void 0,(function*(){const s=e instanceof Array?P.itemFromArray(e,o):e,n=te.dom(),a=n.findIndex(i=>i.id===t);if(a>=0){const t=te.domItem(a);t&&!t.destroyed&&(t.destroy(),n.splice(a,1))}let r,l;if("canvas"===i.tagName.toLowerCase())r=i,l=!1;else{const t=i.getElementsByTagName("canvas");t.length?(r=t[0],r.className||(r.className=M.canvasClass),l=!1):(l=!0,r=document.createElement("canvas"),r.className=M.canvasClass,r.style.width="100%",r.style.height="100%",i.appendChild(r))}const c=new Ji(t,s);return a>=0?n.splice(a,0,c):n.push(c),c.canvas.loadCanvas(r,l),yield c.start(),c}))}static loadJSON(t,i,e){return Qi(this,void 0,void 0,(function*(){const o=i instanceof Array?P.itemFromArray(i,e):i,s=yield fetch(o);if(s.ok)return te.load(t,yield s.json());Ki(s.status)}))}static setJSON(t,i,e){return Qi(this,void 0,void 0,(function*(){const o=yield fetch(e);if(o.ok){const e=yield o.json();return te.set(t,i,e)}Ki(o.status)}))}static setOnClickHandler(t){const i=te.dom();if(0===i.length)throw new Error("Can only set click handlers after calling tsParticles.load() or tsParticles.loadJSON()");for(const e of i){const i=e.interactivity.element;if(!i)continue;const o=(i,o)=>{if(e.destroyed)return;const s=e.retina.pixelRatio,n={x:o.x*s,y:o.y*s},a=e.particles.quadTree.queryCircle(n,e.retina.sizeValue);t(i,a)},s=t=>{if(e.destroyed)return;const i=t,s={x:i.offsetX||i.clientX,y:i.offsetY||i.clientY};o(t,s)},n=()=>{e.destroyed||(c=!0,d=!1)},a=()=>{e.destroyed||(d=!0)},r=t=>{var i,s,n;if(!e.destroyed){if(c&&!d){const a=t,r=a.touches[a.touches.length-1],l=null===(i=e.canvas.element)||void 0===i?void 0:i.getBoundingClientRect(),c={x:r.clientX-(null!==(s=null==l?void 0:l.left)&&void 0!==s?s:0),y:r.clientY-(null!==(n=null==l?void 0:l.top)&&void 0!==n?n:0)};o(t,c)}c=!1,d=!1}},l=()=>{e.destroyed||(c=!1,d=!1)};let c=!1,d=!1;i.addEventListener("click",s),i.addEventListener("touchstart",n),i.addEventListener("touchmove",a),i.addEventListener("touchend",r),i.addEventListener("touchcancel",l)}}}var ie,ee,oe=function(t,i,e,o){return new(e||(e=Promise))((function(s,n){function a(t){try{l(o.next(t))}catch(t){n(t)}}function r(t){try{l(o.throw(t))}catch(t){n(t)}}function l(t){var i;t.done?s(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(a,r)}l((o=o.apply(t,i||[])).next())}))},se=function(t,i,e){if(!i.has(t))throw new TypeError("attempted to set private field on non-instance");return i.set(t,e),e},ne=function(t,i){if(!i.has(t))throw new TypeError("attempted to get private field on non-instance");return i.get(t)};ie=new WeakMap;class ae{constructor(t,i,e,o){var s,n;this.absorbers=t,this.container=i,this.initialPosition=o,this.options=e,this.dragging=!1,this.name=this.options.name,this.opacity=this.options.opacity,this.size=a.getValue(e.size)*i.retina.pixelRatio,this.mass=this.size*e.size.density*i.retina.reduceFactor;const r=e.size.limit;this.limit=void 0!==r?r*i.retina.pixelRatio*i.retina.reduceFactor:r;const l="string"==typeof e.color?{value:e.color}:e.color;this.color=null!==(s=R.colorToRgb(l))&&void 0!==s?s:{b:0,g:0,r:0},this.position=null!==(n=this.initialPosition)&&void 0!==n?n:this.calcPosition()}attract(t){const i=this.options;if(i.draggable){const t=this.container.interactivity.mouse;if(t.clicking&&t.downPosition){a.getDistance(this.position,t.downPosition)<=this.size&&(this.dragging=!0)}else this.dragging=!1;this.dragging&&t.position&&(this.position.x=t.position.x,this.position.y=t.position.y)}const e=t.getPosition(),{dx:o,dy:s,distance:n}=a.getDistances(this.position,e),r=Math.atan2(o,s),l=this.mass/Math.pow(n,2)*this.container.retina.reduceFactor;if(n<this.size+t.getRadius()){const e=.033*t.getRadius()*this.container.retina.pixelRatio;this.size>t.getRadius()&&n<this.size-t.getRadius()?i.destroy?t.destroy():(t.needsNewPosition=!0,this.updateParticlePosition(t,r,l)):(i.destroy&&(t.size.value-=e),this.updateParticlePosition(t,r,l)),(void 0===this.limit||this.size<this.limit)&&(this.size+=e),this.mass+=e*this.options.size.density*this.container.retina.reduceFactor}else this.updateParticlePosition(t,r,l)}resize(){const t=this.initialPosition;this.position=t&&P.isPointInside(t,this.container.canvas.size)?t:this.calcPosition()}draw(t){t.translate(this.position.x,this.position.y),t.beginPath(),t.arc(0,0,this.size,0,2*Math.PI,!1),t.closePath(),t.fillStyle=R.getStyleFromRgb(this.color,this.opacity),t.fill()}calcPosition(){var t,i;const e=this.container,o=this.options.position;return{x:(null!==(t=null==o?void 0:o.x)&&void 0!==t?t:100*Math.random())/100*e.canvas.size.width,y:(null!==(i=null==o?void 0:o.y)&&void 0!==i?i:100*Math.random())/100*e.canvas.size.height}}updateParticlePosition(t,i,e){var o;if(t.destroyed)return;const s=this.container.canvas.size;if(t.needsNewPosition){const i=t.getRadius();t.position.x=Math.random()*(s.width-2*i)+i,t.position.y=Math.random()*(s.height-2*i)+i,t.needsNewPosition=!1}if(this.options.orbits){void 0===t.orbitRadius&&(t.orbitRadius=a.getDistance(t.getPosition(),this.position)),t.orbitRadius<=this.size&&!this.options.destroy&&(t.orbitRadius=Math.random()*Math.max(s.width,s.height)),void 0===t.orbitAngle&&(t.orbitAngle=Math.random()*Math.PI*2);const i=t.orbitRadius,n=t.orbitAngle;t.velocity.horizontal=0,t.velocity.vertical=0,t.position.x=this.position.x+i*Math.cos(n),t.position.y=this.position.y+i*Math.sin(n),t.orbitRadius-=e,t.orbitAngle+=(null!==(o=t.moveSpeed)&&void 0!==o?o:this.container.retina.moveSpeed)/100*this.container.retina.reduceFactor}else t.velocity.horizontal+=Math.sin(i)*e,t.velocity.vertical+=Math.cos(i)*e}}class re extends dt{constructor(){super(),this.density=5,this.random.minimumValue=1,this.value=50}load(t){t&&(super.load(t),void 0!==t.density&&(this.density=t.density),void 0!==t.limit&&(this.limit=t.limit),void 0!==t.limit&&(this.limit=t.limit))}}class le{constructor(){this.color=new ot,this.color.value="#000000",this.draggable=!1,this.opacity=1,this.destroy=!0,this.orbits=!1,this.size=new re}load(t){void 0!==t&&(void 0!==t.color&&(this.color=ot.create(this.color,t.color)),void 0!==t.draggable&&(this.draggable=t.draggable),this.name=t.name,void 0!==t.opacity&&(this.opacity=t.opacity),void 0!==t.position&&(this.position={x:t.position.x,y:t.position.y}),void 0!==t.size&&this.size.load(t.size),void 0!==t.destroy&&(this.destroy=t.destroy),void 0!==t.orbits&&(this.orbits=t.orbits))}}!function(t){t.absorber="absorber"}(ee||(ee={}));class ce{constructor(t){this.container=t,this.array=[],this.absorbers=[],this.interactivityAbsorbers=[],t.addAbsorber=(t,i)=>this.addAbsorber(t,i)}init(t){var i,e;if(!t)return;t.absorbers&&(t.absorbers instanceof Array?this.absorbers=t.absorbers.map(t=>{const i=new le;return i.load(t),i}):(this.absorbers instanceof Array&&(this.absorbers=new le),this.absorbers.load(t.absorbers)));const o=null===(e=null===(i=t.interactivity)||void 0===i?void 0:i.modes)||void 0===e?void 0:e.absorbers;if(o&&(o instanceof Array?this.interactivityAbsorbers=o.map(t=>{const i=new le;return i.load(t),i}):(this.interactivityAbsorbers instanceof Array&&(this.interactivityAbsorbers=new le),this.interactivityAbsorbers.load(o))),this.absorbers instanceof Array)for(const t of this.absorbers)this.addAbsorber(t);else this.addAbsorber(this.absorbers)}particleUpdate(t){for(const i of this.array)if(i.attract(t),t.destroyed)break}draw(t){for(const i of this.array)t.save(),i.draw(t),t.restore()}stop(){this.array=[]}resize(){for(const t of this.array)t.resize()}handleClickMode(t){const i=this.container,e=this.absorbers,o=this.interactivityAbsorbers;if(t===ee.absorber){let t;o instanceof Array?o.length>0&&(t=P.itemFromArray(o)):t=o;const s=null!=t?t:e instanceof Array?P.itemFromArray(e):e,n=i.interactivity.mouse.clickPosition;this.addAbsorber(s,n)}}addAbsorber(t,i){const e=new ae(this,this.container,t,i);return this.array.push(e),e}removeAbsorber(t){const i=this.array.indexOf(t);i>=0&&this.array.splice(i,1)}}const de=new class{constructor(){this.id="absorbers"}getPlugin(t){return new ce(t)}needsPlugin(t){var i,e,o;if(void 0===t)return!1;const s=t.absorbers;let n=!1;return s instanceof Array?s.length&&(n=!0):(void 0!==s||(null===(o=null===(e=null===(i=t.interactivity)||void 0===i?void 0:i.events)||void 0===e?void 0:e.onClick)||void 0===o?void 0:o.mode)&&P.isInArray(ee.absorber,t.interactivity.events.onClick.mode))&&(n=!0),n}loadOptions(t,i){var e,o;if(!this.needsPlugin(t)&&!this.needsPlugin(i))return;const s=t;if(null==i?void 0:i.absorbers)if((null==i?void 0:i.absorbers)instanceof Array)s.absorbers=null==i?void 0:i.absorbers.map(t=>{const i=new le;return i.load(t),i});else{let t=s.absorbers;void 0===(null==t?void 0:t.load)&&(s.absorbers=t=new le),t.load(null==i?void 0:i.absorbers)}const n=null===(o=null===(e=null==i?void 0:i.interactivity)||void 0===e?void 0:e.modes)||void 0===o?void 0:o.absorbers;if(n)if(n instanceof Array)s.interactivity.modes.absorbers=n.map(t=>{const i=new le;return i.load(t),i});else{let t=s.interactivity.modes.absorbers;void 0===(null==t?void 0:t.load)&&(s.interactivity.modes.absorbers=t=new le),t.load(n)}}};class he{constructor(){this.mode=u.percent,this.height=0,this.width=0}load(t){void 0!==t&&(void 0!==t.mode&&(this.mode=t.mode),void 0!==t.height&&(this.height=t.height),void 0!==t.width&&(this.width=t.width))}}function ue(t,i){return t+i*(Math.random()-.5)}function ve(t,i){return{x:ue(t.x,i.x),y:ue(t.y,i.y)}}class pe{constructor(t,i,e,o){var s,n,a;this.emitters=t,this.container=i,this.currentDuration=0,this.currentEmitDelay=0,this.currentSpawnDelay=0,this.initialPosition=o,this.emitterOptions=P.deepExtend({},e),this.position=null!==(s=this.initialPosition)&&void 0!==s?s:this.calcPosition(),this.name=e.name;let r=P.deepExtend({},this.emitterOptions.particles);void 0===r&&(r={}),void 0===r.move&&(r.move={}),void 0===r.move.direction&&(r.move.direction=this.emitterOptions.direction),void 0!==this.emitterOptions.spawnColor&&(this.spawnColor=R.colorToHsl(this.emitterOptions.spawnColor)),this.particlesOptions=r,this.size=null!==(n=this.emitterOptions.size)&&void 0!==n?n:(()=>{const t=new he;return t.load({height:0,mode:u.percent,width:0}),t})(),this.lifeCount=null!==(a=this.emitterOptions.life.count)&&void 0!==a?a:-1,this.immortal=this.lifeCount<=0,this.play()}play(){this.container.retina.reduceFactor&&(this.lifeCount>0||this.immortal||!this.emitterOptions.life.count)&&(void 0===this.emitDelay&&(this.emitDelay=1e3*this.emitterOptions.rate.delay/this.container.retina.reduceFactor),(this.lifeCount>0||this.immortal)&&this.prepareToDie())}pause(){delete this.emitDelay}resize(){const t=this.initialPosition;this.position=t&&P.isPointInside(t,this.container.canvas.size)?t:this.calcPosition()}update(t){var i;void 0!==this.duration&&(this.currentDuration+=t.value,this.currentDuration>=this.duration&&(this.pause(),void 0!==this.spawnDelay&&delete this.spawnDelay,this.immortal||this.lifeCount--,this.lifeCount>0||this.immortal?(this.position=this.calcPosition(),this.spawnDelay=1e3*(null!==(i=this.emitterOptions.life.delay)&&void 0!==i?i:0)/this.container.retina.reduceFactor):this.destroy(),this.currentDuration-=this.duration,delete this.duration)),void 0!==this.spawnDelay&&(this.currentSpawnDelay+=t.value,this.currentSpawnDelay>=this.spawnDelay&&(this.play(),this.currentSpawnDelay-=this.currentSpawnDelay,delete this.spawnDelay)),void 0!==this.emitDelay&&(this.currentEmitDelay+=t.value,this.currentEmitDelay>=this.emitDelay&&(this.emit(),this.currentEmitDelay-=this.emitDelay))}prepareToDie(){var t;const i=null===(t=this.emitterOptions.life)||void 0===t?void 0:t.duration;this.container.retina.reduceFactor&&(this.lifeCount>0||this.immortal)&&void 0!==i&&i>0&&(this.duration=1e3*i)}destroy(){this.emitters.removeEmitter(this)}calcPosition(){var t,i;const e=this.container,o=this.emitterOptions.position;return{x:(null!==(t=null==o?void 0:o.x)&&void 0!==t?t:100*Math.random())/100*e.canvas.size.width,y:(null!==(i=null==o?void 0:o.y)&&void 0!==i?i:100*Math.random())/100*e.canvas.size.height}}emit(){var t;const i=this.container,e=this.position,o={x:this.size.mode===u.percent?i.canvas.size.width*this.size.width/100:this.size.width,y:this.size.mode===u.percent?i.canvas.size.height*this.size.height/100:this.size.height};for(let s=0;s<this.emitterOptions.rate.quantity;s++){const s=P.deepExtend({},this.particlesOptions);if(void 0!==this.spawnColor){const i=null===(t=this.emitterOptions.spawnColor)||void 0===t?void 0:t.animation;if(i){const t=i;if(t.enable)this.spawnColor.h=this.setColorAnimation(t,this.spawnColor.h,360);else{const t=i;this.spawnColor.h=this.setColorAnimation(t.h,this.spawnColor.h,360),this.spawnColor.s=this.setColorAnimation(t.s,this.spawnColor.s,100),this.spawnColor.l=this.setColorAnimation(t.l,this.spawnColor.l,100)}}s.color?s.color.value=this.spawnColor:s.color={value:this.spawnColor}}i.particles.addParticle(ve(e,o),s)}}setColorAnimation(t,i,e){var o;const s=this.container;if(!t.enable)return i;const n=a.randomInRange(t.offset),r=1e3*this.emitterOptions.rate.delay/s.retina.reduceFactor;return(i+(null!==(o=t.speed)&&void 0!==o?o:0)*s.fpsLimit/r+3.6*n)%e}}class ye{constructor(){this.quantity=1,this.delay=.1}load(t){void 0!==t&&(void 0!==t.quantity&&(this.quantity=t.quantity),void 0!==t.delay&&(this.delay=t.delay))}}class me{load(t){void 0!==t&&(void 0!==t.count&&(this.count=t.count),void 0!==t.delay&&(this.delay=t.delay),void 0!==t.duration&&(this.duration=t.duration))}}class fe{constructor(){this.direction=s.none,this.life=new me,this.rate=new ye}load(t){void 0!==t&&(void 0!==t.size&&(void 0===this.size&&(this.size=new he),this.size.load(t.size)),void 0!==t.direction&&(this.direction=t.direction),this.life.load(t.life),this.name=t.name,void 0!==t.particles&&(this.particles=P.deepExtend({},t.particles)),this.rate.load(t.rate),void 0!==t.position&&(this.position={x:t.position.x,y:t.position.y}),void 0!==t.spawnColor&&(void 0===this.spawnColor&&(this.spawnColor=new Tt),this.spawnColor.load(t.spawnColor)))}}var ge;!function(t){t.emitter="emitter"}(ge||(ge={}));class be{constructor(t){this.container=t,this.array=[],this.emitters=[],this.interactivityEmitters=[];const i=t;i.addEmitter=(t,i)=>this.addEmitter(t,i),i.playEmitter=t=>{const i=void 0===t||"number"==typeof t?this.array[t||0]:this.array.find(i=>i.name===t);i&&i.play()},i.pauseEmitter=t=>{const i=void 0===t||"number"==typeof t?this.array[t||0]:this.array.find(i=>i.name===t);i&&i.pause()}}init(t){var i,e;if(!t)return;t.emitters&&(t.emitters instanceof Array?this.emitters=t.emitters.map(t=>{const i=new fe;return i.load(t),i}):(this.emitters instanceof Array&&(this.emitters=new fe),this.emitters.load(t.emitters)));const o=null===(e=null===(i=t.interactivity)||void 0===i?void 0:i.modes)||void 0===e?void 0:e.emitters;if(o&&(o instanceof Array?this.interactivityEmitters=o.map(t=>{const i=new fe;return i.load(t),i}):(this.interactivityEmitters instanceof Array&&(this.interactivityEmitters=new fe),this.interactivityEmitters.load(o))),this.emitters instanceof Array)for(const t of this.emitters)this.addEmitter(t);else this.addEmitter(this.emitters)}play(){for(const t of this.array)t.play()}pause(){for(const t of this.array)t.pause()}stop(){this.array=[]}update(t){for(const i of this.array)i.update(t)}handleClickMode(t){const i=this.container,e=this.emitters,o=this.interactivityEmitters;if(t===ge.emitter){let t;o instanceof Array?o.length>0&&(t=P.itemFromArray(o)):t=o;const s=null!=t?t:e instanceof Array?P.itemFromArray(e):e,n=i.interactivity.mouse.clickPosition;this.addEmitter(P.deepExtend({},s),n)}}resize(){for(const t of this.array)t.resize()}addEmitter(t,i){const e=new pe(this,this.container,t,i);return this.array.push(e),e}removeEmitter(t){const i=this.array.indexOf(t);i>=0&&this.array.splice(i,1)}}const we=new class{constructor(){this.id="emitters"}getPlugin(t){return new be(t)}needsPlugin(t){var i,e,o;if(void 0===t)return!1;const s=t.emitters;let n=!1;return s instanceof Array?s.length&&(n=!0):(void 0!==s||(null===(o=null===(e=null===(i=t.interactivity)||void 0===i?void 0:i.events)||void 0===e?void 0:e.onClick)||void 0===o?void 0:o.mode)&&P.isInArray(ge.emitter,t.interactivity.events.onClick.mode))&&(n=!0),n}loadOptions(t,i){var e,o;if(!this.needsPlugin(t)&&!this.needsPlugin(i))return;const s=t;if(null==i?void 0:i.emitters)if((null==i?void 0:i.emitters)instanceof Array)s.emitters=null==i?void 0:i.emitters.map(t=>{const i=new fe;return i.load(t),i});else{let t=s.emitters;void 0===(null==t?void 0:t.load)&&(s.emitters=t=new fe),t.load(null==i?void 0:i.emitters)}const n=null===(o=null===(e=null==i?void 0:i.interactivity)||void 0===e?void 0:e.modes)||void 0===o?void 0:o.emitters;if(n)if(n instanceof Array)s.interactivity.modes.emitters=n.map(t=>{const i=new fe;return i.load(t),i});else{let t=s.interactivity.modes.emitters;void 0===(null==t?void 0:t.load)&&(s.interactivity.modes.emitters=t=new fe),t.load(n)}}};var xe,ke,ze;!function(t){t.equidistant="equidistant",t.onePerPoint="one-per-point",t.perPoint="per-point",t.randomLength="random-length",t.randomPoint="random-point"}(xe||(xe={})),function(t){t.path="path",t.radius="radius"}(ke||(ke={})),function(t){t.inline="inline",t.inside="inside",t.outside="outside",t.none="none"}(ze||(ze={}));class Pe{constructor(){this.color=new ot,this.width=.5,this.opacity=1}load(t){var i;void 0!==t&&(this.color=ot.create(this.color,t.color),"string"==typeof this.color.value&&(this.opacity=null!==(i=R.stringToAlpha(this.color.value))&&void 0!==i?i:this.opacity),void 0!==t.opacity&&(this.opacity=t.opacity),void 0!==t.width&&(this.width=t.width))}}class Me{constructor(){this.enable=!1,this.stroke=new Pe}get lineWidth(){return this.stroke.width}set lineWidth(t){this.stroke.width=t}get lineColor(){return this.stroke.color}set lineColor(t){this.stroke.color=ot.create(this.stroke.color,t)}load(t){var i;if(void 0!==t){void 0!==t.enable&&(this.enable=t.enable);const e=null!==(i=t.stroke)&&void 0!==i?i:{color:t.lineColor,width:t.lineWidth};this.stroke.load(e)}}}class Se{constructor(){this.radius=10,this.type=ke.path}load(t){void 0!==t&&(void 0!==t.radius&&(this.radius=t.radius),void 0!==t.type&&(this.type=t.type))}}class Ce{constructor(){this.arrangement=xe.onePerPoint}load(t){void 0!==t&&void 0!==t.arrangement&&(this.arrangement=t.arrangement)}}class Re{constructor(){this.path=[],this.size={height:0,width:0}}load(t){void 0!==t&&(void 0!==t.path&&(this.path=t.path),void 0!==t.size&&(void 0!==t.size.width&&(this.size.width=t.size.width),void 0!==t.size.height&&(this.size.height=t.size.height)))}}class Ae{constructor(){this.draw=new Me,this.enable=!1,this.inline=new Ce,this.move=new Se,this.scale=1,this.type=ze.none}get inlineArrangement(){return this.inline.arrangement}set inlineArrangement(t){this.inline.arrangement=t}load(t){var i;if(void 0!==t){this.draw.load(t.draw);const e=null!==(i=t.inline)&&void 0!==i?i:{arrangement:t.inlineArrangement};void 0!==e&&this.inline.load(e),this.move.load(t.move),void 0!==t.scale&&(this.scale=t.scale),void 0!==t.type&&(this.type=t.type),void 0!==t.enable?this.enable=t.enable:this.enable=this.type!==ze.none,void 0!==t.url&&(this.url=t.url),void 0!==t.data&&("string"==typeof t.data?this.data=t.data:(this.data=new Re,this.data.load(t.data))),void 0!==t.position&&(this.position=P.deepExtend({},t.position))}}}var Te=function(t,i,e,o){return new(e||(e=Promise))((function(s,n){function a(t){try{l(o.next(t))}catch(t){n(t)}}function r(t){try{l(o.throw(t))}catch(t){n(t)}}function l(t){var i;t.done?s(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(a,r)}l((o=o.apply(t,i||[])).next())}))};function De(t){t.velocity.horizontal=t.velocity.vertical/2-t.velocity.horizontal,t.velocity.vertical=t.velocity.horizontal/2-t.velocity.vertical}function Oe(t,i,e){const o=R.colorToRgb(e.color);if(o){t.beginPath(),t.moveTo(i[0].x,i[0].y);for(const e of i)t.lineTo(e.x,e.y);t.closePath(),t.strokeStyle=R.getStyleFromRgb(o),t.lineWidth=e.width,t.stroke()}}function Ee(t,i,e,o){t.translate(o.x,o.y);const s=R.colorToRgb(e.color);s&&(t.strokeStyle=R.getStyleFromRgb(s,e.opacity),t.lineWidth=e.width,t.stroke(i))}class Ie{constructor(t){this.container=t,this.dimension={height:0,width:0},this.path2DSupported=!!window.Path2D,this.options=new Ae,this.polygonMaskMoveRadius=this.options.move.radius*t.retina.pixelRatio}initAsync(t){return Te(this,void 0,void 0,(function*(){this.options.load(null==t?void 0:t.polygon);const i=this.options;this.polygonMaskMoveRadius=i.move.radius*this.container.retina.pixelRatio,i.enable&&(yield this.initRawData())}))}resize(){const t=this.container,i=this.options;i.enable&&i.type!==ze.none&&(this.redrawTimeout&&clearTimeout(this.redrawTimeout),this.redrawTimeout=window.setTimeout(()=>Te(this,void 0,void 0,(function*(){yield this.initRawData(!0),t.particles.redraw()})),250))}stop(){delete this.raw,delete this.paths}particlesInitialization(){const t=this.options;return!(!t.enable||t.type!==ze.inline||t.inline.arrangement!==xe.onePerPoint&&t.inline.arrangement!==xe.perPoint)&&(this.drawPoints(),!0)}particlePosition(t){var i,e;if(this.options.enable&&(null!==(e=null===(i=this.raw)||void 0===i?void 0:i.length)&&void 0!==e?e:0)>0)return P.deepExtend({},t||this.randomPoint())}particleBounce(t){const i=this.options;if(i.enable&&i.type!==ze.none&&i.type!==ze.inline){if(!this.checkInsidePolygon(t.getPosition()))return De(t),!0}else if(i.enable&&i.type===ze.inline&&t.initialPosition){if(a.getDistance(t.initialPosition,t.getPosition())>this.polygonMaskMoveRadius)return De(t),!0}return!1}clickPositionValid(t){const i=this.options;return i.enable&&i.type!==ze.none&&i.type!==ze.inline&&this.checkInsidePolygon(t)}draw(t){var i;if(!(null===(i=this.paths)||void 0===i?void 0:i.length))return;const e=this.options,o=e.draw;if(!e.enable||!o.enable)return;const s=this.raw;for(const i of this.paths){const e=i.path2d,n=this.path2DSupported;t&&(n&&e&&this.offset?Ee(t,e,o.stroke,this.offset):s&&Oe(t,s,o.stroke))}}checkInsidePolygon(t){var i,e;const o=this.container,s=this.options;if(!s.enable||s.type===ze.none||s.type===ze.inline)return!0;if(!this.raw)throw new Error(M.noPolygonFound);const n=o.canvas.size,a=null!==(i=null==t?void 0:t.x)&&void 0!==i?i:Math.random()*n.width,r=null!==(e=null==t?void 0:t.y)&&void 0!==e?e:Math.random()*n.height;let l=!1;for(let t=0,i=this.raw.length-1;t<this.raw.length;i=t++){const e=this.raw[t],o=this.raw[i];e.y>r!=o.y>r&&a<(o.x-e.x)*(r-e.y)/(o.y-e.y)+e.x&&(l=!l)}return s.type===ze.inside?l:s.type===ze.outside&&!l}parseSvgPath(t,i){var e,o,s;const n=null!=i&&i;if(void 0!==this.paths&&!n)return this.raw;const a=this.container,r=this.options,l=(new DOMParser).parseFromString(t,"image/svg+xml"),c=l.getElementsByTagName("svg")[0];let d=c.getElementsByTagName("path");d.length||(d=l.getElementsByTagName("path")),this.paths=[];for(let t=0;t<d.length;t++){const i=d.item(t);i&&this.paths.push({element:i,length:i.getTotalLength()})}const h=a.retina.pixelRatio,u=r.scale/h;this.dimension.width=parseFloat(null!==(e=c.getAttribute("width"))&&void 0!==e?e:"0")*u,this.dimension.height=parseFloat(null!==(o=c.getAttribute("height"))&&void 0!==o?o:"0")*u;const v=null!==(s=r.position)&&void 0!==s?s:{x:50,y:50};return this.offset={x:a.canvas.size.width*v.x/(100*h)-this.dimension.width/2,y:a.canvas.size.height*v.y/(100*h)-this.dimension.height/2},function(t,i,e){const o=[];for(const s of t){const t=s.element.pathSegList,n=t.numberOfItems,a={x:0,y:0};for(let s=0;s<n;s++){const n=t.getItem(s),r=window.SVGPathSeg;switch(n.pathSegType){case r.PATHSEG_MOVETO_ABS:case r.PATHSEG_LINETO_ABS:case r.PATHSEG_CURVETO_CUBIC_ABS:case r.PATHSEG_CURVETO_QUADRATIC_ABS:case r.PATHSEG_ARC_ABS:case r.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS:case r.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS:{const t=n;a.x=t.x,a.y=t.y;break}case r.PATHSEG_LINETO_HORIZONTAL_ABS:a.x=n.x;break;case r.PATHSEG_LINETO_VERTICAL_ABS:a.y=n.y;break;case r.PATHSEG_LINETO_REL:case r.PATHSEG_MOVETO_REL:case r.PATHSEG_CURVETO_CUBIC_REL:case r.PATHSEG_CURVETO_QUADRATIC_REL:case r.PATHSEG_ARC_REL:case r.PATHSEG_CURVETO_CUBIC_SMOOTH_REL:case r.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL:{const t=n;a.x+=t.x,a.y+=t.y;break}case r.PATHSEG_LINETO_HORIZONTAL_REL:a.x+=n.x;break;case r.PATHSEG_LINETO_VERTICAL_REL:a.y+=n.y;break;case r.PATHSEG_UNKNOWN:case r.PATHSEG_CLOSEPATH:continue}o.push({x:a.x*i+e.x,y:a.y*i+e.y})}}return o}(this.paths,u,this.offset)}downloadSvgPath(t,i){return Te(this,void 0,void 0,(function*(){const e=this.options,o=t||e.url,s=null!=i&&i;if(!o||void 0!==this.paths&&!s)return this.raw;const n=yield fetch(o);if(!n.ok)throw new Error("tsParticles Error - Error occurred during polygon mask download");return this.parseSvgPath(yield n.text(),i)}))}drawPoints(){if(this.raw)for(const t of this.raw)this.container.particles.addParticle({x:t.x,y:t.y})}randomPoint(){const t=this.container,i=this.options;let e;if(i.type===ze.inline)switch(i.inline.arrangement){case xe.randomPoint:e=this.getRandomPoint();break;case xe.randomLength:e=this.getRandomPointByLength();break;case xe.equidistant:e=this.getEquidistantPointByIndex(t.particles.count);break;case xe.onePerPoint:case xe.perPoint:default:e=this.getPointByIndex(t.particles.count)}else e={x:Math.random()*t.canvas.size.width,y:Math.random()*t.canvas.size.height};return this.checkInsidePolygon(e)?e:this.randomPoint()}getRandomPoint(){if(!this.raw||!this.raw.length)throw new Error(M.noPolygonDataLoaded);const t=P.itemFromArray(this.raw);return{x:t.x,y:t.y}}getRandomPointByLength(){var t,i,e;const o=this.options;if(!this.raw||!this.raw.length||!(null===(t=this.paths)||void 0===t?void 0:t.length))throw new Error(M.noPolygonDataLoaded);const s=P.itemFromArray(this.paths),n=Math.floor(Math.random()*s.length)+1,a=s.element.getPointAtLength(n);return{x:a.x*o.scale+((null===(i=this.offset)||void 0===i?void 0:i.x)||0),y:a.y*o.scale+((null===(e=this.offset)||void 0===e?void 0:e.y)||0)}}getEquidistantPointByIndex(t){var i,e,o,s,n,a,r;const l=this.container.actualOptions,c=this.options;if(!this.raw||!this.raw.length||!(null===(i=this.paths)||void 0===i?void 0:i.length))throw new Error(M.noPolygonDataLoaded);let d,h=0;const u=this.paths.reduce((t,i)=>t+i.length,0)/l.particles.number.value;for(const i of this.paths){const e=u*t-h;if(e<=i.length){d=i.element.getPointAtLength(e);break}h+=i.length}return{x:(null!==(e=null==d?void 0:d.x)&&void 0!==e?e:0)*c.scale+(null!==(s=null===(o=this.offset)||void 0===o?void 0:o.x)&&void 0!==s?s:0),y:(null!==(n=null==d?void 0:d.y)&&void 0!==n?n:0)*c.scale+(null!==(r=null===(a=this.offset)||void 0===a?void 0:a.y)&&void 0!==r?r:0)}}getPointByIndex(t){if(!this.raw||!this.raw.length)throw new Error(M.noPolygonDataLoaded);const i=this.raw[t%this.raw.length];return{x:i.x,y:i.y}}createPath2D(){var t,i;const e=this.options;if(this.path2DSupported&&(null===(t=this.paths)||void 0===t?void 0:t.length))for(const t of this.paths){const o=null===(i=t.element)||void 0===i?void 0:i.getAttribute("d");if(o){const i=new Path2D(o),s=document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGMatrix(),n=new Path2D,a=s.scale(e.scale);n.addPath?(n.addPath(i,a),t.path2d=n):delete t.path2d}else delete t.path2d;!t.path2d&&this.raw&&(t.path2d=new Path2D,t.path2d.moveTo(this.raw[0].x,this.raw[0].y),this.raw.forEach((i,e)=>{var o;e>0&&(null===(o=t.path2d)||void 0===o||o.lineTo(i.x,i.y))}),t.path2d.closePath())}}initRawData(t){return Te(this,void 0,void 0,(function*(){const i=this.options;if(i.url)this.raw=yield this.downloadSvgPath(i.url,t);else if(i.data){const e=i.data;let o;if("string"!=typeof e){const t=e.path instanceof Array?e.path.map(t=>`<path d="${t}" />`).join(""):`<path d="${e.path}" />`;o=`<svg ${'xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"'} width="${e.size.width}" height="${e.size.height}">${t}</svg>`}else o=e;this.raw=this.parseSvgPath(o,t)}this.createPath2D()}))}}const Ve=new class{constructor(){this.id="polygonMask"}getPlugin(t){return new Ie(t)}needsPlugin(t){var i,e,o;return null!==(e=null===(i=null==t?void 0:t.polygon)||void 0===i?void 0:i.enable)&&void 0!==e?e:void 0!==(null===(o=null==t?void 0:t.polygon)||void 0===o?void 0:o.type)&&t.polygon.type!==ze.none}loadOptions(t,i){if(!this.needsPlugin(i))return;const e=t;let o=e.polygon;void 0===(null==o?void 0:o.load)&&(e.polygon=o=new Ae),o.load(null==i?void 0:i.polygon)}};class Fe extends class{constructor(){ie.set(this,void 0),se(this,ie,!1);const t=new e,i=new U,o=new j;B.addShapeDrawer(f.line,new X),B.addShapeDrawer(f.circle,new Y),B.addShapeDrawer(f.edge,t),B.addShapeDrawer(f.square,t),B.addShapeDrawer(f.triangle,new Q),B.addShapeDrawer(f.star,new Z),B.addShapeDrawer(f.polygon,new K),B.addShapeDrawer(f.char,i),B.addShapeDrawer(f.character,i),B.addShapeDrawer(f.image,o),B.addShapeDrawer(f.images,o)}init(){ne(this,ie)||se(this,ie,!0)}loadFromArray(t,i,e){return oe(this,void 0,void 0,(function*(){return te.load(t,i,e)}))}load(t,i){return oe(this,void 0,void 0,(function*(){return te.load(t,i)}))}set(t,i,e){return oe(this,void 0,void 0,(function*(){return te.set(t,i,e)}))}loadJSON(t,i,e){return te.loadJSON(t,i,e)}setOnClickHandler(t){te.setOnClickHandler(t)}dom(){return te.dom()}domItem(t){return te.domItem(t)}addShape(t,i,e,o,s){let n;n="function"==typeof i?{afterEffect:o,destroy:s,draw:i,init:e}:i,B.addShapeDrawer(t,n)}addPreset(t,i){B.addPreset(t,i)}addPlugin(t){B.addPlugin(t)}addPathGenerator(t,i){B.addPathGenerator(t,i)}}{constructor(){super(),this.addPlugin(de),this.addPlugin(we),this.addPlugin(Ve)}}const He=new Fe;He.init();const{particlesJS:Le,pJSDom:qe}=(t=>{const i=(i,e)=>t.load(i,e);return i.load=(i,e,o)=>{t.loadJSON(i,e).then(t=>{t&&o(t)})},i.setOnClickHandler=i=>{t.setOnClickHandler(i)},{particlesJS:i,pJSDom:t.dom()}})(He);return i})()}));
base/eae-widget-base.php CHANGED
@@ -4,9 +4,9 @@ namespace WTS_EAE\Base;
4
 
5
  use Elementor\Widget_Base;
6
 
7
- abstract class EAE_Widget_Base extends Widget_Base{
8
 
9
  public function get_categories() {
10
  return [ 'wts-eae' ];
11
  }
12
- }
4
 
5
  use Elementor\Widget_Base;
6
 
7
+ abstract class EAE_Widget_Base extends Widget_Base {
8
 
9
  public function get_categories() {
10
  return [ 'wts-eae' ];
11
  }
12
+ }
base/module-base.php CHANGED
@@ -25,6 +25,7 @@ abstract class Module_Base {
25
  /**
26
  * @var Module_Base
27
  */
 
28
  protected static $_instances = [];
29
 
30
  /**
@@ -128,7 +129,6 @@ abstract class Module_Base {
128
  return [];
129
  }
130
 
131
- public function add_dependent_js_css(){
132
-
133
  }
134
  }
25
  /**
26
  * @var Module_Base
27
  */
28
+ // phpcs:ignore PSR2.Classes.PropertyDeclaration.Underscore
29
  protected static $_instances = [];
30
 
31
  /**
129
  return [];
130
  }
131
 
132
+ public function add_dependent_js_css() {
 
133
  }
134
  }
classes/helper.php CHANGED
@@ -10,11 +10,10 @@ use Elementor\Group_Control_Border;
10
  use Elementor\Group_Control_Box_Shadow;
11
  use Elementor\Icons_Manager;
12
 
13
- class Helper
14
- {
15
- function eae_get_post_data($args)
16
- {
17
- $defaults = array(
18
  'posts_per_page' => 5,
19
  'offset' => 0,
20
  'category' => '',
@@ -31,34 +30,32 @@ class Helper
31
  'author' => '',
32
  'author_name' => '',
33
  'post_status' => 'publish',
34
- 'suppress_filters' => false
35
- );
36
 
37
- $atts = wp_parse_args($args, $defaults);
38
 
39
- $posts = get_posts($atts);
40
 
41
  return $posts;
42
  }
43
 
44
- function eae_get_post_types()
45
- {
46
- $args = array(
47
- 'public' => true
48
- );
49
 
50
- $skip_post_types = ['attachment'];
51
 
52
- $post_types = get_post_types($args);
53
 
54
  return $post_types;
55
  }
56
 
57
- function eae_get_post_settings($settings)
58
- {
59
  $post_args['post_type'] = $settings['post_type'];
60
 
61
- if ($settings['post_type'] == 'post') {
62
  $post_args['category'] = $settings['category'];
63
  }
64
 
@@ -70,43 +67,37 @@ class Helper
70
  return $post_args;
71
  }
72
 
73
- function eae_get_excerpt_by_id($post_id, $excerpt_length)
74
- {
75
- $the_post = get_post($post_id); //Gets post ID
76
 
77
  $the_excerpt = null;
78
- if ($the_post) {
79
  $the_excerpt = $the_post->post_excerpt ? $the_post->post_excerpt : $the_post->post_content;
80
  }
81
 
82
- // $the_excerpt = ($the_post ? $the_post->post_content : null);//Gets post_content to be used as a basis for the excerpt
83
- //echo $the_excerpt;
84
- $the_excerpt = strip_tags(strip_shortcodes($the_excerpt)); //Strips tags and images
85
- $words = explode(' ', $the_excerpt, $excerpt_length + 1);
86
 
87
- if (count($words) > $excerpt_length) :
88
- array_pop($words);
89
- //array_push($words, '…');
90
- $the_excerpt = implode(' ', $words);
91
  $the_excerpt .= '...'; // Don't put a space before
92
  endif;
93
 
94
  return $the_excerpt;
95
  }
96
 
97
- function eae_get_thumbnail_sizes()
98
- {
99
  $sizes = get_intermediate_image_sizes();
100
- foreach ($sizes as $s) {
101
- $ret[$s] = $s;
102
  }
103
 
104
  return $ret;
105
  }
106
 
107
- function eae_get_post_orderby_options()
108
- {
109
- $orderby = array(
110
  'ID' => 'Post Id',
111
  'author' => 'Post Author',
112
  'title' => 'Title',
@@ -116,30 +107,28 @@ class Helper
116
  'rand' => 'Random',
117
  'comment_count' => 'Comment Count',
118
  'menu_order' => 'Menu Order',
119
- );
120
 
121
  return $orderby;
122
  }
123
 
124
- public function get_icon_html($settings, $control_name, $default, $all_settings)
125
- {
126
 
127
  $icon_html = '';
128
  $skin_type = $all_settings['_skin'];
129
- //echo '<pre>'; print_r($settings); echo '</pre>';die();
130
  // --------------New Work-----------------
131
 
132
- $view = 'eae-icon-view-' . $default['view'];
133
  $shape = 'eae-icon-shape-' . $default['shape'];
134
 
135
- $icon_migrated = isset($all_settings['__fa4_migrated'][$skin_type . '_global_icon_new']);
136
- $icon_is_new = empty($all_settings[$skin_type . '_global_icon']);
137
 
138
- $item_icon_migrated = isset($settings['__fa4_migrated'][$control_name . '_icon_new']);
139
- $item_icon_is_new = empty($settings[$control_name . '_icon']);
140
- if (!isset($settings[$control_name . '_eae_icon']) || $settings[$control_name . '_eae_icon'] == '') {
141
 
142
- switch ($default['icon_type']) {
143
 
144
  case 'image':
145
  $icon_html = '<i><img src="' . $default['image']['url'] . '"/></i>';
@@ -150,116 +139,119 @@ class Helper
150
  break;
151
  }
152
 
153
- $view = 'eae-icon-view-' . $default['view'];
154
- $shape = 'eae-icon-shape-' . $default['shape'];
155
  $icon_type = 'eae-icon-type-' . $default['icon_type'];
156
  $icon_name = 'eae-icon-' . $control_name;
157
 
158
- if ($default['icon_new'] !== '') {
159
- ?>
160
  <div class="eae-icon <?php echo $icon_name . ' ' . $view . ' ' . $shape . ' ' . $icon_type; ?>">
161
  <div class="eae-icon-wrap">
162
- <?php if ($default['icon_type'] == 'icon') { ?>
163
- <?php if ($icon_migrated || $icon_is_new) :
164
- Icons_Manager::render_icon($all_settings[$skin_type . '_global_icon_new'], ['aria-hidden' => 'true']);
165
- else : ?>
 
 
166
  <i class="<?php echo $default['icon']; ?>"></i>
167
  <?php endif; ?>
168
- <?php } else {
 
169
  echo $icon_html;
170
- } ?>
 
171
  </div>
172
  </div>
173
- <?php
174
  }
175
  } else {
176
- //echo $settings[ $control_name . '_icon_text' ];
177
- switch ($settings[$control_name . '_icon_type']) {
178
-
179
 
180
  case 'image':
181
- $icon_html = '<i><img src="' . $settings[$control_name . '_image']['url'] . '" /></i>';
182
  break;
183
 
184
  case 'text':
185
- $icon_html = '<i class="">' . $settings[$control_name . '_text'] . '</i>';
186
  break;
187
  }
188
 
189
- if ($settings[$control_name . '_view'] != 'global') {
190
- $view = 'eae-icon-view-' . $settings[$control_name . '_view'];
191
  }
192
 
193
- if ($settings[$control_name . '_shape'] != 'global') {
194
- $shape = 'eae-icon-shape-' . $settings[$control_name . '_shape'];
195
  }
196
 
197
- $icon_type = 'eae-icon-type-' . $settings[$control_name . '_icon_type'];
198
 
199
  $icon_name = 'eae-icon-' . $control_name;
200
  }
201
- if (isset($settings[$control_name . '_eae_icon']) && $settings[$control_name . '_eae_icon'] !== '') {
202
  ?>
203
  <div class="eae-icon <?php echo $icon_name . ' ' . $view . ' ' . $shape . ' ' . $icon_type; ?>">
204
  <div class="eae-icon-wrap">
205
  <?php
206
- if ($settings[$control_name . '_icon_type'] == 'icon') { ?>
207
- <?php if ($item_icon_migrated || $item_icon_is_new) :
208
- Icons_Manager::render_icon($settings[$control_name . '_icon_new'], ['aria-hidden' => 'true']);
209
- else : ?>
210
- <i class="<?php echo $settings[$control_name . '_icon']; ?>"></i>
 
 
 
211
  <?php endif; ?>
212
- <?php } else {
 
213
  echo $icon_html;
214
- } ?>
 
215
  </div>
216
  </div>
217
- <?php
218
  }
219
- //return $icon_html;
220
  }
221
 
222
- public function get_icon_timeline_html($settings, $control_name)
223
- {
224
 
225
  $icon_html = '';
226
- //echo '<pre>'; print_r($settings); echo '</pre>';
227
  $icon_data = '';
228
 
229
- if ($settings[$control_name . '_eae_icon'] == '') {
230
- $settings[$control_name . '_icon'] = 'fa fa-star';
231
- $settings[$control_name . '_view'] = 'stacked';
232
- $settings[$control_name . '_shape'] = 'cricle';
233
- $settings[$control_name . '_icon_type'] = 'icon';
234
- $icon_data = '<i class="' . $settings[$control_name . '_icon'] . ' hvr-icon"></i>';
235
  } else {
236
 
237
- if ($settings[$control_name . '_icon_type'] == 'icon') {
238
- if ($settings[$control_name . '_icon'] == '') {
239
- $settings[$control_name . '_icon'] = 'fa fa-star';
240
- $settings[$control_name . '_view'] = 'stacked';
241
- $settings[$control_name . '_shape'] = '';
242
  }
243
- if ($settings[$control_name . '_icon'] != '') {
244
- $icon_data = '<i class="' . $settings[$control_name . '_icon'] . ' hvr-icon"></i>';
245
  }
246
- } elseif ($settings[$control_name . '_icon_type'] == 'image') {
247
- if ($settings[$control_name . '_image']['id'] != '') {
248
- $icon_data = wp_get_attachment_image($settings[$control_name . '_image']['id']);
249
  }
250
- } elseif ($settings[$control_name . '_icon_type'] == 'text') {
251
- if ($settings[$control_name . '_text'] != '') {
252
- $icon_data = $settings[$control_name . '_text'];
253
  }
254
  } else {
255
  $icon_data = '';
256
  }
257
  }
258
 
259
-
260
- if ($icon_data != '') {
261
- $icon_html .= '<span class="eae-icon-wrapper eae-icon-' . $control_name . '_wrapper eae-icon-view-stacked' . ' elementor-shape-' . $settings[$control_name . '_shape'] . ' eae-icon-type-' . $settings[$control_name . '_icon_type'] . '">';
262
- $icon_html .= '<span class="elementor-icon eae-icon elementor-animation-' . $settings[$control_name . '_icon_hover_animation'] . '">';
263
  $icon_html .= $icon_data;
264
  $icon_html .= '</span>';
265
  $icon_html .= '</span>';
@@ -270,8 +262,7 @@ class Helper
270
 
271
 
272
 
273
- public function group_icon_styles($widget, $args)
274
- {
275
 
276
  $defaults = [
277
  'primary_color' => true,
@@ -293,39 +284,26 @@ class Helper
293
  'focus_item_class' => '',
294
  ];
295
 
296
- $args = wp_parse_args($args, $defaults);
297
-
298
- $control_name = $args['name'];
299
-
300
- //$control_label = $args['label'];
301
 
302
- /*$widget->start_controls_section(
303
- 'section_style_' . $control_name . '_icon',
304
- [
305
- 'label' => __( $control_label . ' Icon', 'wts-eae' ),
306
- 'tab' => Controls_Manager::TAB_STYLE,
307
- 'condition' => [
308
- $control_name . '_icon!' => '',
309
- ],
310
- ]
311
- );*/
312
 
313
- $widget->start_controls_tabs($control_name . 'icon_colors');
314
 
315
  $widget->start_controls_tab(
316
  $control_name . '_icon_colors_normal',
317
  [
318
- 'label' => __('Normal', 'wts-eae'),
319
  ]
320
  );
321
 
322
- if ($args['primary_color']) {
323
  $widget->add_control(
324
  $control_name . '_icon_primary_color',
325
  [
326
- 'label' => __('Primary Color', 'wts-eae'),
327
  'type' => Controls_Manager::COLOR,
328
- 'global' => [
329
  'default' => Global_Colors::COLOR_PRIMARY,
330
  ],
331
  'selectors' => [
@@ -340,16 +318,13 @@ class Helper
340
  );
341
  }
342
 
343
- if ($args['secondary_color']) {
344
  $widget->add_control(
345
  $control_name . '_icon_secondary_color',
346
  [
347
- 'label' => __('Secondary Color', 'wts-eae'),
348
  'type' => Controls_Manager::COLOR,
349
  'default' => '#fff',
350
- //'condition' => [
351
- // $control_name . '_view!' => 'default',
352
- //],
353
  'selectors' => [
354
  '{{WRAPPER}} .eae-icon-' . $control_name . '.eae-icon-view-framed' => 'background-color: {{VALUE}};',
355
  '{{WRAPPER}} .eae-icon-' . $control_name . '.eae-icon-view-stacked i' => 'color: {{VALUE}};',
@@ -361,19 +336,19 @@ class Helper
361
 
362
  $widget->end_controls_tab();
363
 
364
- if ($args['hover_primary_color'] || $args['hover_secondary_color']) {
365
  $widget->start_controls_tab(
366
  $control_name . '_icon_colors_hover',
367
  [
368
- 'label' => __('Hover', 'wts-eae'),
369
  ]
370
  );
371
  }
372
- if ($args['hover_primary_color']) {
373
  $widget->add_control(
374
  $control_name . '_icon_hover_primary_color',
375
  [
376
- 'label' => __('Primary Color', 'wts-eae'),
377
  'type' => Controls_Manager::COLOR,
378
  'default' => '',
379
  'selectors' => [
@@ -388,16 +363,13 @@ class Helper
388
  );
389
  }
390
 
391
- if ($args['hover_secondary_color']) {
392
  $widget->add_control(
393
  $control_name . '_icon_hover_secondary_color',
394
  [
395
- 'label' => __('Secondary Color', 'wts-eae'),
396
  'type' => Controls_Manager::COLOR,
397
  'default' => '',
398
- //'condition' => [
399
- // $control_name . '_view!' => 'default',
400
- //],
401
  'selectors' => [
402
  '{{WRAPPER}} .eae-icon-' . $control_name . '.eae-icon-view-stacked:hover i' => 'color: {{VALUE}};',
403
  '{{WRAPPER}} .eae-icon-' . $control_name . '.eae-icon-view-stacked:hover svg' => 'fill: {{VALUE}};',
@@ -407,11 +379,11 @@ class Helper
407
  );
408
  }
409
 
410
- if ($args['hover_animation']) {
411
  $widget->add_control(
412
  $control_name . '_icon_hover_animation',
413
  [
414
- 'label' => __('Hover Animation', 'wts-eae'),
415
  'type' => Controls_Manager::HOVER_ANIMATION,
416
  ]
417
  );
@@ -419,23 +391,22 @@ class Helper
419
 
420
  $widget->end_controls_tab();
421
 
422
- if ($args['focus_item_class'] != "") {
423
 
424
  $widget->start_controls_tab(
425
  $control_name . '_icon_colors_focus',
426
  [
427
- 'label' => __('Focus', 'wts-eae'),
428
  ]
429
  );
430
 
431
-
432
- if ($args['focus_primary_color']) {
433
  $widget->add_control(
434
  $control_name . '_icon_focus_primary_color',
435
  [
436
- 'label' => __('Primary Color', 'wts-eae'),
437
  'type' => Controls_Manager::COLOR,
438
- 'global' => [
439
  'default' => Global_Colors::COLOR_PRIMARY,
440
  ],
441
  'selectors' => [
@@ -450,18 +421,15 @@ class Helper
450
  );
451
  }
452
 
453
- if ($args['focus_secondary_color']) {
454
  $widget->add_control(
455
  $control_name . '_icon_focus_secondary_color',
456
  [
457
- 'label' => __('Secondary Color', 'wts-eae'),
458
  'type' => Controls_Manager::COLOR,
459
- 'global' => [
460
  'default' => Global_Colors::COLOR_ACCENT,
461
  ],
462
- //'condition' => [
463
- // $control_name . '_view!' => 'default',
464
- //],
465
  'selectors' => [
466
  '{{WRAPPER}} .' . $args['focus_item_class'] . ' .eae-icon-' . $control_name . '.eae-icon-view-framed' => 'background-color: {{VALUE}};',
467
  '{{WRAPPER}} .' . $args['focus_item_class'] . ' .eae-icon-' . $control_name . '.eae-icon-view-stacked i ' => 'color: {{VALUE}};',
@@ -471,18 +439,16 @@ class Helper
471
  );
472
  }
473
 
474
-
475
  $widget->end_controls_tab();
476
  }
477
 
478
-
479
  $widget->end_controls_tabs();
480
 
481
- if ($args['icon_size']) {
482
  $widget->add_responsive_control(
483
  $control_name . '_icon_size',
484
  [
485
- 'label' => __('Size', 'wts-eae'),
486
  'type' => Controls_Manager::SLIDER,
487
  'range' => [
488
  'px' => [
@@ -499,11 +465,11 @@ class Helper
499
  );
500
  }
501
 
502
- if ($args['icon_padding']) {
503
  $widget->add_control(
504
  $control_name . '_icon_padding',
505
  [
506
- 'label' => __('Padding', 'wts-eae'),
507
  'type' => Controls_Manager::SLIDER,
508
  'selectors' => [
509
  '{{WRAPPER}} .eae-icon-' . $control_name . '.eae-icon' => 'padding: {{SIZE}}{{UNIT}};',
@@ -514,19 +480,15 @@ class Helper
514
  'max' => 100,
515
  ],
516
  ],
517
-
518
- //'condition' => [
519
- // $control_name . '_view!' => 'default',
520
- //],
521
  ]
522
  );
523
  }
524
 
525
- if ($args['rotate']) {
526
  $widget->add_control(
527
  $control_name . '_icon_rotate',
528
  [
529
- 'label' => __('Rotate', 'wts-eae'),
530
  'type' => Controls_Manager::SLIDER,
531
  'default' => [
532
  'size' => 0,
@@ -539,20 +501,20 @@ class Helper
539
  );
540
  }
541
 
542
- if ($args['border_style']) {
543
  $widget->add_control(
544
  $control_name . '_border_style',
545
  [
546
- 'label' => __('Border Style', 'wts-eae'),
547
  'type' => Controls_Manager::SELECT,
548
- 'options' => [
549
- 'none' => __('None', 'wts-eae'),
550
- 'solid' => __('Solid', 'wts-eae'),
551
- 'double' => __('Double', 'wts-eae'),
552
- 'dotted' => __('Dotted', 'wts-eae'),
553
- 'dashed' => __('Dashed', 'wts-eae'),
554
- ],
555
- 'default' => 'solid',
556
  'selectors' => [
557
  '{{WRAPPER}} .eae-icon-' . $control_name . '.eae-icon' => 'border-style: {{VALUE}};',
558
  ],
@@ -561,11 +523,11 @@ class Helper
561
  );
562
  }
563
 
564
- if ($args['border_width']) {
565
  $widget->add_control(
566
  $control_name . '_border_width',
567
  [
568
- 'label' => __('Border Width', 'wts-eae'),
569
  'type' => Controls_Manager::DIMENSIONS,
570
  'default' => [
571
  'value' => 20,
@@ -578,25 +540,22 @@ class Helper
578
  );
579
  }
580
 
581
- if ($args['border_radius']) {
582
  $widget->add_control(
583
  $control_name . '_icon_border_radius',
584
  [
585
- 'label' => __('Border Radius', 'wts-eae'),
586
  'type' => Controls_Manager::DIMENSIONS,
587
- 'size_units' => ['px', '%'],
588
  'selectors' => [
589
  '{{WRAPPER}} .eae-icon-' . $control_name . '.eae-icon' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
590
  ],
591
  ]
592
  );
593
  }
594
-
595
- /*$widget->end_controls_section();*/
596
  }
597
 
598
- public function group_icon_styles_repeater($widget, $args)
599
- {
600
 
601
  $defaults = [
602
  'primary_color' => true,
@@ -620,40 +579,29 @@ class Helper
620
 
621
  ];
622
 
623
- $args = wp_parse_args($args, $defaults);
624
 
625
  $control_name = $args['name'];
626
  $control_label = $args['label'];
627
 
628
- /*$widget->start_controls_section(
629
- 'section_style_' . $control_name . '_icon',
630
- [
631
- 'label' => __( $control_label . ' Icon', 'wts-eae' ),
632
- 'tab' => Controls_Manager::TAB_STYLE,
633
- 'condition' => [
634
- $control_name . '_icon!' => '',
635
- ],
636
- ]
637
- );*/
638
-
639
  $widget->add_control(
640
  $control_name . 'custom_styles',
641
  [
642
- 'label' => __('Custom Icon Style', 'wts-eae'),
643
  'type' => Controls_Manager::SWITCHER,
644
- 'label_off' => __('No', 'wts-eae'),
645
- 'label_on' => __('Yes', 'wts-eae'),
646
  'default' => '',
647
  ]
648
  );
649
 
650
- if ($args['tabs']) {
651
- $widget->start_controls_tabs($control_name . 'icon_colors');
652
 
653
  $widget->start_controls_tab(
654
  $control_name . '_icon_colors_normal',
655
  [
656
- 'label' => __('Normal', 'wts-eae'),
657
  ]
658
  );
659
  } else {
@@ -661,20 +609,20 @@ class Helper
661
  $widget->add_control(
662
  $control_name . '_icon_colors_normal',
663
  [
664
- 'label' => __('Normal', 'wts-eae'),
665
  'type' => Controls_Manager::HEADING,
666
  'condition' => [
667
- $control_name . 'custom_styles' => 'yes'
668
- ]
669
  ]
670
  );
671
  }
672
 
673
- if ($args['primary_color']) {
674
  $widget->add_control(
675
  $control_name . '_icon_primary_color',
676
  [
677
- 'label' => __('Primary Color', 'wts-eae'),
678
  'type' => Controls_Manager::COLOR,
679
  'default' => '',
680
  'selectors' => [
@@ -686,17 +634,17 @@ class Helper
686
  '{{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '.eae-icon-view-default svg' => 'fill: {{VALUE}};',
687
  ],
688
  'condition' => [
689
- $control_name . 'custom_styles' => 'yes'
690
- ]
691
  ]
692
  );
693
  }
694
 
695
- if ($args['secondary_color']) {
696
  $widget->add_control(
697
  $control_name . '_icon_secondary_color',
698
  [
699
- 'label' => __('Secondary Color', 'wts-eae'),
700
  'type' => Controls_Manager::COLOR,
701
  'default' => '',
702
  'condition' => [
@@ -708,47 +656,47 @@ class Helper
708
  '{{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '.eae-icon-view-stacked svg' => 'color: {{VALUE}};',
709
  ],
710
  'condition' => [
711
- $control_name . 'custom_styles' => 'yes'
712
- ]
713
  ]
714
  );
715
  }
716
 
717
- if ($args['tabs']) {
718
 
719
  $widget->end_controls_tab();
720
  }
721
 
722
- if ($args['tabs']) {
723
  $widget->start_controls_tab(
724
  $control_name . '_icon_colors_hover',
725
  [
726
- 'label' => __('Hover', 'wts-eae'),
727
  'condition' => [
728
- $control_name . 'custom_styles' => 'yes'
729
- ]
730
  ]
731
  );
732
  } else {
733
- if ($args['hover_primary_color'] || $args['hover_secondary_color']) {
734
  $widget->add_control(
735
  $control_name . '_icon_colors_hover',
736
  [
737
- 'label' => __('Hover', 'wts-eae'),
738
  'type' => Controls_Manager::HEADING,
739
  'condition' => [
740
- $control_name . 'custom_styles' => 'yes'
741
- ]
742
  ]
743
  );
744
  }
745
  }
746
 
747
- if ($args['hover_primary_color']) {
748
  $widget->add_control(
749
  $control_name . '_icon_hover_primary_color',
750
  [
751
- 'label' => __('Primary Color', 'wts-eae'),
752
  'type' => Controls_Manager::COLOR,
753
  'default' => '',
754
  'selectors' => [
@@ -760,17 +708,17 @@ class Helper
760
  '{{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '.eae-icon-view-default:hover svg' => 'fill: {{VALUE}}; border-color: {{VALUE}};',
761
  ],
762
  'condition' => [
763
- $control_name . 'custom_styles' => 'yes'
764
- ]
765
  ]
766
  );
767
  }
768
 
769
- if ($args['hover_secondary_color']) {
770
  $widget->add_control(
771
  $control_name . '_icon_hover_secondary_color',
772
  [
773
- 'label' => __('Secondary Color', 'wts-eae'),
774
  'type' => Controls_Manager::COLOR,
775
  'default' => '',
776
  'condition' => [
@@ -784,38 +732,37 @@ class Helper
784
  '{{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '.eae-icon-view-default:hover svg' => 'fill: {{VALUE}};',
785
  ],
786
  'condition' => [
787
- $control_name . 'custom_styles' => 'yes'
788
- ]
789
  ]
790
  );
791
  }
792
 
793
- if ($args['hover_animation']) {
794
  $widget->add_control(
795
  $control_name . '_icon_hover_animation',
796
  [
797
- 'label' => __('Hover Animation', 'wts-eae'),
798
  'type' => Controls_Manager::HOVER_ANIMATION,
799
  'condition' => [
800
- $control_name . 'custom_styles' => 'yes'
801
- ]
802
  ]
803
  );
804
  }
805
 
806
-
807
- if ($args['tabs']) {
808
 
809
  $widget->end_controls_tab();
810
  }
811
 
812
- if ($args['focus_item_class'] != "") {
813
- if ($args['tabs']) {
814
 
815
  $widget->start_controls_tab(
816
  $control_name . '_icon_colors_focus',
817
  [
818
- 'label' => __('Focus', 'wts-eae'),
819
  ]
820
  );
821
  } else {
@@ -823,20 +770,20 @@ class Helper
823
  $widget->add_control(
824
  $control_name . '_icon_colors_focus',
825
  [
826
- 'label' => __('Focus', 'wts-eae'),
827
  'type' => Controls_Manager::HEADING,
828
  'condition' => [
829
- $control_name . 'custom_styles' => 'yes'
830
- ]
831
  ]
832
  );
833
  }
834
 
835
- if ($args['focus_primary_color']) {
836
  $widget->add_control(
837
  $control_name . '_icon_focus_primary_color',
838
  [
839
- 'label' => __('Primary Color', 'wts-eae'),
840
  'type' => Controls_Manager::COLOR,
841
  'default' => '',
842
  'selectors' => [
@@ -848,17 +795,17 @@ class Helper
848
  '{{WRAPPER}} {{CURRENT_ITEM}}.' . $args['focus_item_class'] . ' .eae-icon-' . $control_name . '.eae-icon-view-default svg' => 'fill: {{VALUE}}; border-color: {{VALUE}};',
849
  ],
850
  'condition' => [
851
- $control_name . 'custom_styles' => 'yes'
852
- ]
853
  ]
854
  );
855
  }
856
 
857
- if ($args['focus_secondary_color']) {
858
  $widget->add_control(
859
  $control_name . '_icon_focus_secondary_color',
860
  [
861
- 'label' => __('Secondary Color', 'wts-eae'),
862
  'type' => Controls_Manager::COLOR,
863
  'default' => '',
864
  'condition' => [
@@ -870,27 +817,27 @@ class Helper
870
  '{{WRAPPER}} {{CURRENT_ITEM}}.' . $args['focus_item_class'] . ' .eae-icon-' . $control_name . '.eae-icon-view-stacked svg' => 'fill: {{VALUE}};',
871
  ],
872
  'condition' => [
873
- $control_name . 'custom_styles' => 'yes'
874
- ]
875
  ]
876
  );
877
  }
878
 
879
- if ($args['tabs']) {
880
 
881
  $widget->end_controls_tab();
882
  }
883
  }
884
- if ($args['tabs']) {
885
 
886
  $widget->end_controls_tabs();
887
  }
888
 
889
- if ($args['icon_size']) {
890
  $widget->add_responsive_control(
891
  $control_name . '_icon_size',
892
  [
893
- 'label' => __('Size', 'wts-eae'),
894
  'type' => Controls_Manager::SLIDER,
895
  'range' => [
896
  'px' => [
@@ -902,23 +849,21 @@ class Helper
902
  'selectors' => [
903
  '{{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '.eae-icon i, {{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '.eae-icon' => 'font-size: {{SIZE}}{{UNIT}};',
904
  '{{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '.eae-icon svg' => 'width: {{SIZE}}{{UNIT}};',
905
- //'{{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '_wrapper.eae-icon-type-text' => 'display: inline-block; height: calc({{SIZE}}{{UNIT}} * 1); width: calc({{SIZE}}{{UNIT}} * 1); text-align: center;',
906
  ],
907
  'condition' => [
908
- $control_name . 'custom_styles' => 'yes'
909
- ]
910
  ]
911
  );
912
  }
913
 
914
- if ($args['icon_padding']) {
915
  $widget->add_control(
916
  $control_name . '_icon_padding',
917
  [
918
- 'label' => __('Padding', 'wts-eae'),
919
  'type' => Controls_Manager::SLIDER,
920
  'selectors' => [
921
- //'{{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '_wrapper .elementor-icon' => 'padding: {{SIZE}}{{UNIT}};',
922
  '{{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '.eae-icon' => 'padding: {{SIZE}}{{UNIT}};',
923
  '{{WRAPPER}} {{CURRENT_ITEM}} .bpe-layout-left .bpe-timline-progress-bar' => 'left: calc({{SIZE}}{{UNIT}} / 2); right: auto;',
924
  '{{WRAPPER}} {{CURRENT_ITEM}} .bpe-layout-right .bpe-timline-progress-bar' => 'left: auto; right: calc({{SIZE}}{{UNIT}} / 2);',
@@ -931,17 +876,17 @@ class Helper
931
  ],
932
  'condition' => [
933
  $control_name . '_view!' => 'default',
934
- $control_name . 'custom_styles' => 'yes'
935
- ]
936
  ]
937
  );
938
  }
939
 
940
- if ($args['rotate']) {
941
  $widget->add_control(
942
  $control_name . '_icon_rotate',
943
  [
944
- 'label' => __('Rotate', 'wts-eae'),
945
  'type' => Controls_Manager::SLIDER,
946
  'default' => [
947
  'size' => 0,
@@ -952,75 +897,72 @@ class Helper
952
  '{{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '.eae-icon svg' => 'transform: rotate({{SIZE}}{{UNIT}});',
953
  ],
954
  'condition' => [
955
- $control_name . 'custom_styles' => 'yes'
956
- ]
957
  ]
958
  );
959
  }
960
- if ($args['border_style']) {
961
  $widget->add_control(
962
  $control_name . '_border_style',
963
  [
964
- 'label' => __('Border Style', 'wts-eae'),
965
  'type' => Controls_Manager::SELECT,
966
- 'options' => [
967
- 'none' => __('None', 'wts-eae'),
968
- 'solid' => __('Solid', 'wts-eae'),
969
- 'double' => __('Double', 'wts-eae'),
970
- 'dotted' => __('Dotted', 'wts-eae'),
971
- 'dashed' => __('Dashed', 'wts-eae'),
972
- ],
973
- 'default' => 'solid',
974
  'selectors' => [
975
  '{{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '.eae-icon' => 'border-style: {{VALUE}};',
976
  ],
977
  'condition' => [
978
- $control_name . 'custom_styles' => 'yes'
979
- ]
980
 
981
  ]
982
  );
983
  }
984
 
985
- if ($args['border_width']) {
986
  $widget->add_control(
987
  $control_name . '_border_width',
988
  [
989
- 'label' => __('Border Width', 'wts-eae'),
990
  'type' => Controls_Manager::DIMENSIONS,
991
  'selectors' => [
992
  '{{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '.eae-icon' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
993
  ],
994
  'condition' => [
995
- $control_name . 'custom_styles' => 'yes'
996
- ]
997
  ]
998
  );
999
  }
1000
 
1001
- if ($args['border_radius']) {
1002
  $widget->add_control(
1003
  $control_name . '_icon_border_radius',
1004
  [
1005
- 'label' => __('Border Radius', 'wts-eae'),
1006
  'type' => Controls_Manager::DIMENSIONS,
1007
- 'size_units' => ['px', '%'],
1008
  'selectors' => [
1009
  '{{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '.eae-icon' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1010
  ],
1011
  'condition' => [
1012
  $control_name . '_view!' => 'default',
1013
- $control_name . 'custom_styles' => 'yes'
1014
- ]
1015
  ]
1016
  );
1017
  }
1018
-
1019
- /*$widget->end_controls_section();*/
1020
  }
1021
 
1022
- public function group_icon_timeline_styles($widget, $args)
1023
- {
1024
 
1025
  $defaults = [
1026
  'primary_color' => true,
@@ -1041,36 +983,23 @@ class Helper
1041
  'focus_item_class' => '',
1042
  ];
1043
 
1044
- $args = wp_parse_args($args, $defaults);
1045
-
1046
- $control_name = $args['name'];
1047
- //$control_label = $args['label'];
1048
 
1049
- /*$widget->start_controls_section(
1050
- 'section_style_' . $control_name . '_icon',
1051
- [
1052
- 'label' => __( $control_label . ' Icon', 'wts-eae' ),
1053
- 'tab' => Controls_Manager::TAB_STYLE,
1054
- 'condition' => [
1055
- $control_name . '_icon!' => '',
1056
- ],
1057
- ]
1058
- );*/
1059
-
1060
- $widget->start_controls_tabs($control_name . 'icon_colors');
1061
 
1062
  $widget->start_controls_tab(
1063
  $control_name . '_icon_colors_normal',
1064
  [
1065
- 'label' => __('Normal', 'wts-eae'),
1066
  ]
1067
  );
1068
 
1069
- if ($args['primary_color']) {
1070
  $widget->add_control(
1071
  $control_name . '_icon_primary_color',
1072
  [
1073
- 'label' => __('Primary Color', 'wts-eae'),
1074
  'type' => Controls_Manager::COLOR,
1075
  'default' => '#6ec1e4',
1076
  'selectors' => [
@@ -1082,16 +1011,13 @@ class Helper
1082
  );
1083
  }
1084
 
1085
- if ($args['secondary_color']) {
1086
  $widget->add_control(
1087
  $control_name . '_icon_secondary_color',
1088
  [
1089
- 'label' => __('Secondary Color', 'wts-eae'),
1090
  'type' => Controls_Manager::COLOR,
1091
  'default' => '#ffffff',
1092
- //'condition' => [
1093
- // $control_name . '_view!' => 'default',
1094
- //],
1095
  'selectors' => [
1096
  '{{WRAPPER}} .eae-icon-' . $control_name . '_wrapper.eae-icon-view-framed' => 'background-color: {{VALUE}};',
1097
  '{{WRAPPER}} .eae-icon-' . $control_name . '_wrapper.eae-icon-view-stacked .elementor-icon' => 'color: {{VALUE}};',
@@ -1105,15 +1031,15 @@ class Helper
1105
  $widget->start_controls_tab(
1106
  $control_name . '_icon_colors_hover',
1107
  [
1108
- 'label' => __('Hover', 'wts-eae'),
1109
  ]
1110
  );
1111
 
1112
- if ($args['hover_primary_color']) {
1113
  $widget->add_control(
1114
  $control_name . '_icon_hover_primary_color',
1115
  [
1116
- 'label' => __('Primary Color', 'wts-eae'),
1117
  'type' => Controls_Manager::COLOR,
1118
  'default' => '',
1119
  'selectors' => [
@@ -1125,16 +1051,13 @@ class Helper
1125
  );
1126
  }
1127
 
1128
- if ($args['hover_secondary_color']) {
1129
  $widget->add_control(
1130
  $control_name . '_icon_hover_secondary_color',
1131
  [
1132
- 'label' => __('Secondary Color', 'wts-eae'),
1133
  'type' => Controls_Manager::COLOR,
1134
  'default' => '',
1135
- //'condition' => [
1136
- // $control_name . '_view!' => 'default',
1137
- //],
1138
  'selectors' => [
1139
  '{{WRAPPER}} .eae-icon-' . $control_name . '_wrapper.eae-icon-view-framed:hover' => 'background-color: {{VALUE}};',
1140
  '{{WRAPPER}} .eae-icon-' . $control_name . '_wrapper.eae-icon-view-stacked .elementor-icon:hover' => 'color: {{VALUE}};',
@@ -1143,11 +1066,11 @@ class Helper
1143
  );
1144
  }
1145
 
1146
- if ($args['hover_animation']) {
1147
  $widget->add_control(
1148
  $control_name . '_icon_hover_animation',
1149
  [
1150
- 'label' => __('Hover Animation', 'wts-eae'),
1151
  'type' => Controls_Manager::HOVER_ANIMATION,
1152
  ]
1153
  );
@@ -1155,21 +1078,20 @@ class Helper
1155
 
1156
  $widget->end_controls_tab();
1157
 
1158
- if ($args['focus_item_class'] != "") {
1159
 
1160
  $widget->start_controls_tab(
1161
  $control_name . '_icon_colors_focus',
1162
  [
1163
- 'label' => __('Focus', 'wts-eae'),
1164
  ]
1165
  );
1166
 
1167
-
1168
- if ($args['focus_primary_color']) {
1169
  $widget->add_control(
1170
  $control_name . '_icon_focus_primary_color',
1171
  [
1172
- 'label' => __('Primary Color', 'wts-eae'),
1173
  'type' => Controls_Manager::COLOR,
1174
  'default' => '',
1175
  'selectors' => [
@@ -1181,16 +1103,13 @@ class Helper
1181
  );
1182
  }
1183
 
1184
- if ($args['focus_secondary_color']) {
1185
  $widget->add_control(
1186
  $control_name . '_icon_focus_secondary_color',
1187
  [
1188
- 'label' => __('Secondary Color', 'wts-eae'),
1189
  'type' => Controls_Manager::COLOR,
1190
  'default' => '',
1191
- //'condition' => [
1192
- // $control_name . '_view!' => 'default',
1193
- //],
1194
  'selectors' => [
1195
  '{{WRAPPER}} .' . $args['focus_item_class'] . ' .eae-icon-' . $control_name . '_wrapper.eae-icon-view-framed' => 'background-color: {{VALUE}};',
1196
  '{{WRAPPER}} .' . $args['focus_item_class'] . ' .eae-icon-' . $control_name . '_wrapper.eae-icon-view-stacked .elementor-icon' => 'color: {{VALUE}};',
@@ -1199,18 +1118,16 @@ class Helper
1199
  );
1200
  }
1201
 
1202
-
1203
  $widget->end_controls_tab();
1204
  }
1205
 
1206
-
1207
  $widget->end_controls_tabs();
1208
 
1209
- if ($args['icon_size']) {
1210
  $widget->add_responsive_control(
1211
  $control_name . '_icon_size',
1212
  [
1213
- 'label' => __('Size', 'wts-eae'),
1214
  'type' => Controls_Manager::SLIDER,
1215
  'range' => [
1216
  'px' => [
@@ -1225,11 +1142,11 @@ class Helper
1225
  );
1226
  }
1227
 
1228
- if ($args['icon_padding']) {
1229
  $widget->add_control(
1230
  $control_name . '_icon_padding',
1231
  [
1232
- 'label' => __('Background Size', 'wts-eae'),
1233
  'type' => Controls_Manager::SLIDER,
1234
  'selectors' => [
1235
  '{{WRAPPER}} .eae-icon-' . $control_name . '_wrapper.eae-icon-wrapper' => 'display: inline-block; min-height: {{SIZE}}{{UNIT}}; min-width: {{SIZE}}{{UNIT}}; line-height: {{SIZE}}{{UNIT}};',
@@ -1242,18 +1159,15 @@ class Helper
1242
  'max' => 100,
1243
  ],
1244
  ],
1245
- //'condition' => [
1246
- // $control_name . '_view!' => 'default',
1247
- //],
1248
  ]
1249
  );
1250
  }
1251
 
1252
- if ($args['rotate']) {
1253
  $widget->add_control(
1254
  $control_name . '_icon_rotate',
1255
  [
1256
- 'label' => __('Rotate', 'wts-eae'),
1257
  'type' => Controls_Manager::SLIDER,
1258
  'default' => [
1259
  'size' => 0,
@@ -1266,253 +1180,358 @@ class Helper
1266
  );
1267
  }
1268
 
1269
- if ($args['border_width']) {
1270
  $widget->add_control(
1271
  $control_name . '_border_width',
1272
  [
1273
- 'label' => __('Border Width', 'wts-eae'),
1274
  'type' => Controls_Manager::DIMENSIONS,
1275
  'selectors' => [
1276
  '{{WRAPPER}} .eae-icon-' . $control_name . '_wrapper .elementor-icon' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1277
  ],
1278
- //'condition' => [
1279
- // $control_name . '_view' => 'framed',
1280
- //],
1281
  ]
1282
  );
1283
  }
1284
 
1285
- if ($args['border_radius']) {
1286
  $widget->add_control(
1287
  $control_name . '_icon_border_radius',
1288
  [
1289
- 'label' => __('Border Radius', 'wts-eae'),
1290
  'type' => Controls_Manager::DIMENSIONS,
1291
- 'size_units' => ['px', '%'],
1292
  'selectors' => [
1293
  '{{WRAPPER}} .eae-icon-' . $control_name . '_wrapper .elementor-icon' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1294
  ],
1295
- //'condition' => [
1296
- // $control_name . '_view!' => 'default',
1297
- //],
1298
  ]
1299
  );
1300
  }
1301
-
1302
- /*$widget->end_controls_section();*/
1303
  }
1304
 
1305
 
1306
- function box_model_controls($widget, $args)
1307
- {
1308
 
1309
  $defaults = [
1310
- 'border' => true,
1311
  'border-radius' => true,
1312
- 'margin' => true,
1313
- 'padding' => true,
1314
- 'box-shadow' => true
1315
  ];
1316
 
1317
- $args = wp_parse_args($args, $defaults);
1318
 
1319
- if ($args['border']) {
1320
  $widget->add_group_control(
1321
  Group_Control_Border::get_type(),
1322
  [
1323
- 'name' => $args['name'] . '_border',
1324
- 'label' => __($args['label'] . ' Border', 'wts-eae'),
1325
- 'selector' => $args['selector'],
1326
  'condition' => [
1327
- 'ribbons_badges_switcher!' => ''
1328
- ]
1329
  ]
1330
  );
1331
  }
1332
 
1333
- if ($args['border-radius']) {
1334
  $widget->add_control(
1335
  $args['name'] . '_border_radius',
1336
  [
1337
- 'label' => __('Border Radius', 'wts-eae'),
1338
- 'type' => Controls_Manager::DIMENSIONS,
1339
- 'size_units' => ['px', '%'],
1340
- 'selectors' => [
1341
  $args['selector'] => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1342
  ],
1343
- 'condition' => [
1344
- 'ribbons_badges_switcher!' => ''
1345
- ]
1346
  ]
1347
  );
1348
  }
1349
 
1350
- if ($args['box-shadow']) {
1351
  $widget->add_group_control(
1352
  Group_Control_Box_Shadow::get_type(),
1353
  [
1354
- 'name' => $args['name'] . '_box_shadow',
1355
- 'label' => __('Box Shadow', 'wts-eae'),
1356
- 'selector' => $args['selector'],
1357
  'condition' => [
1358
- 'ribbons_badges_switcher!' => ''
1359
- ]
1360
  ]
1361
  );
1362
  }
1363
 
1364
- if ($args['padding']) {
1365
  $widget->add_control(
1366
  $args['name'] . '_padding',
1367
  [
1368
- 'label' => __('Padding', 'wts-eae'),
1369
- 'type' => Controls_Manager::DIMENSIONS,
1370
- 'size_units' => ['px', '%'],
1371
- 'selectors' => [
1372
  $args['selector'] => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1373
  ],
1374
- 'condition' => [
1375
- 'ribbons_badges_switcher!' => ''
1376
- ]
1377
  ]
1378
  );
1379
  }
1380
 
1381
-
1382
- if ($args['margin']) {
1383
  $widget->add_control(
1384
  $args['name'] . '_margin',
1385
  [
1386
- 'label' => __('Margin', 'wts-eae'),
1387
- 'type' => Controls_Manager::DIMENSIONS,
1388
- 'size_units' => ['px', '%'],
1389
- 'selectors' => [
1390
  $args['selector'] => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1391
  ],
1392
- 'condition' => [
1393
- 'ribbons_badges_switcher!' => ''
1394
- ]
1395
  ]
1396
  );
1397
  }
1398
  }
1399
 
1400
- function get_eae_modules()
1401
- {
1402
  $modules = [
1403
- 'timeline' => ['name' => 'Timeline', 'enabled' => true, 'type' => 'widget'],
1404
- 'info-circle' => ['name' => 'Info Circle', 'enabled' => true, 'type' => 'widget'],
1405
- 'comparison-table' => ['name' => 'Comparison Table', 'enabled' => true, 'type' => 'widget'],
1406
- 'image-compare' => ['name' => 'Image Compare', 'enabled' => true, 'type' => 'widget'],
1407
- 'animated-text' => ['name' => 'Animated Text', 'enabled' => true, 'type' => 'widget'],
1408
- 'dual-button' => ['name' => 'Dual Button', 'enabled' => true, 'type' => 'widget'],
1409
- 'particles' => ['name' => 'Particles', 'enabled' => true, 'type' => 'feature'],
1410
- //'ribbon-badges' => [ 'name' => 'Ribbon & Badges', 'enabled' => true, 'type' => 'feature' ],
1411
- 'wrapper-links' => ['name' => 'Wrapper Link', 'enabled' => true, 'type' => 'feature'],
1412
- 'modal-popup' => ['name' => 'Modal Popup', 'enabled' => true, 'type' => 'widget'],
1413
- 'progress-bar' => ['name' => 'Progress Bar', 'enabled' => true, 'type' => 'widget'],
1414
- 'flip-box' => ['name' => 'Flip Box', 'enabled' => true, 'type' => 'widget'],
1415
- 'split-text' => ['name' => 'Split Text', 'enabled' => true, 'type' => 'widget'],
1416
- 'gmap' => ['name' => 'Google Map', 'enabled' => true, 'type' => 'widget'],
1417
- 'text-separator' => ['name' => 'Text Separator', 'enabled' => true, 'type' => 'widget'],
1418
- 'price-table' => ['name' => 'Price Table', 'enabled' => true, 'type' => 'widget'],
1419
- 'twitter' => ['name' => 'Twitter', 'enabled' => true, 'type' => 'widget'],
1420
- 'bg-slider' => ['name' => 'Background Slider', 'enabled' => true, 'type' => 'feature'],
1421
- 'animated-gradient' => ['name' => 'Animated Gradient', 'enabled' => true, 'type' => 'feature'],
1422
- //'unfold' => [ 'name' => 'Unfold', 'enabled' => true, 'type' => 'feature' ],
1423
- 'post-list' => ['name' => 'Post List', 'enabled' => true, 'type' => 'widget'],
1424
- 'shape-separator' => ['name' => 'Shape Separator', 'enabled' => true, 'type' => 'widget'],
1425
- 'filterable-gallery' => ['name' => 'Filterable Gallery', 'enabled' => true, 'type' => 'widget'],
1426
- 'content-switcher' => ['name' => 'Content Switcher', 'enabled' => true, 'type' => 'widget'],
1427
- 'chart' => [ 'name' => 'Chart', 'enabled' => true, 'type' => 'widget' ],
1428
- 'thumb-gallery' => ['name' => 'Thumbnail Slider', 'enabled' => true, 'type' => 'widget'],
1429
- 'data-table' => ['name' => 'Data Table', 'enabled' => true, 'type' => 'widget'],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1430
  ];
1431
 
1432
- $saved_modules = get_option('wts_eae_elements');
1433
 
1434
- if ($saved_modules !== false) {
1435
- foreach ($modules as $key => $module_name) {
1436
- if (array_key_exists($key, $saved_modules)) {
1437
- $modules[$key]['enabled'] = $saved_modules[$key];
1438
  } else {
1439
- $modules[$key]['enabled'] = true;
1440
  }
1441
  }
1442
  }
1443
 
1444
- $modules = apply_filters('wts_eae_active_modules', $modules);
1445
 
1446
  return $modules;
1447
  }
1448
 
1449
- public function get_current_url_non_paged()
1450
- {
1451
-
1452
  global $wp;
1453
- $url = get_pagenum_link(1);
1454
 
1455
- return trailingslashit($url);
1456
  }
1457
 
1458
 
1459
- public static function select_elementor_page( $type ) {
1460
- $args = array(
1461
- 'tax_query' => array(
1462
- array(
1463
- 'taxonomy' => 'elementor_library_type',
1464
- 'field' => 'slug',
1465
- 'terms' => $type,
1466
- ),
1467
- ),
1468
- 'post_type' => 'elementor_library',
1469
- 'posts_per_page' => -1,
1470
- );
1471
- $query = new \WP_Query( $args );
1472
 
1473
- $posts = $query->posts;
1474
- //$items['0'] = ['Select '.ucfirst($type)];
 
 
1475
 
 
 
 
1476
 
1477
- foreach ( $posts as $post ) {
1478
- $items[ $post->ID ] = $post->post_title;
1479
- }
1480
 
1481
- if ( empty( $items ) ) {
1482
- $items = [];
1483
- }
 
 
 
 
 
 
 
 
 
 
1484
 
1485
- return $items;
1486
- }
 
 
1487
 
1488
- public static function select_ae_templates() {
1489
- $ae_id = [];
1490
- if(isset($_GET['post'])) {
1491
- $ae_id = array($_GET['post']);
1492
- }
1493
- $args = array(
1494
- 'post_type' => 'ae_global_templates',
1495
- 'meta_key' => 'ae_render_mode',
1496
- 'meta_value' => 'block_layout',
1497
- 'posts_per_page' => -1,
1498
- 'post__not_in' => $ae_id,
1499
- );
1500
- $query = new \WP_Query( $args );
1501
-
1502
- $posts = $query->posts;
1503
- //$items['0'] = ['Select '.ucfirst($type)];
1504
-
1505
-
1506
- foreach ( $posts as $post ) {
1507
- $items[ $post->ID ] = $post->post_title;
1508
- }
1509
-
1510
- if ( empty( $items ) ) {
1511
- $items = [];
1512
- }
1513
-
1514
- return $items;
1515
- }
 
 
 
 
1516
 
1517
 
1518
  }
10
  use Elementor\Group_Control_Box_Shadow;
11
  use Elementor\Icons_Manager;
12
 
13
+ class Helper {
14
+
15
+ public function eae_get_post_data( $args ) {
16
+ $defaults = [
 
17
  'posts_per_page' => 5,
18
  'offset' => 0,
19
  'category' => '',
30
  'author' => '',
31
  'author_name' => '',
32
  'post_status' => 'publish',
33
+ 'suppress_filters' => false,
34
+ ];
35
 
36
+ $atts = wp_parse_args( $args, $defaults );
37
 
38
+ $posts = get_posts( $atts );
39
 
40
  return $posts;
41
  }
42
 
43
+ public function eae_get_post_types() {
44
+ $args = [
45
+ 'public' => true,
46
+ ];
 
47
 
48
+ $skip_post_types = [ 'attachment' ];
49
 
50
+ $post_types = get_post_types( $args );
51
 
52
  return $post_types;
53
  }
54
 
55
+ public function eae_get_post_settings( $settings ) {
 
56
  $post_args['post_type'] = $settings['post_type'];
57
 
58
+ if ( $settings['post_type'] === 'post' ) {
59
  $post_args['category'] = $settings['category'];
60
  }
61
 
67
  return $post_args;
68
  }
69
 
70
+ public function eae_get_excerpt_by_id( $post_id, $excerpt_length ) {
71
+ $the_post = get_post( $post_id ); //Gets post ID
 
72
 
73
  $the_excerpt = null;
74
+ if ( $the_post ) {
75
  $the_excerpt = $the_post->post_excerpt ? $the_post->post_excerpt : $the_post->post_content;
76
  }
77
 
78
+ $the_excerpt = wp_strip_all_tags( strip_shortcodes( $the_excerpt ) ); //Strips tags and images
79
+ $words = explode( ' ', $the_excerpt, $excerpt_length + 1 );
 
 
80
 
81
+ if ( count( $words ) > $excerpt_length ) :
82
+ array_pop( $words );
83
+ $the_excerpt = implode( ' ', $words );
 
84
  $the_excerpt .= '...'; // Don't put a space before
85
  endif;
86
 
87
  return $the_excerpt;
88
  }
89
 
90
+ public function eae_get_thumbnail_sizes() {
 
91
  $sizes = get_intermediate_image_sizes();
92
+ foreach ( $sizes as $s ) {
93
+ $ret[ $s ] = $s;
94
  }
95
 
96
  return $ret;
97
  }
98
 
99
+ public function eae_get_post_orderby_options() {
100
+ $orderby = [
 
101
  'ID' => 'Post Id',
102
  'author' => 'Post Author',
103
  'title' => 'Title',
107
  'rand' => 'Random',
108
  'comment_count' => 'Comment Count',
109
  'menu_order' => 'Menu Order',
110
+ ];
111
 
112
  return $orderby;
113
  }
114
 
115
+ public function get_icon_html( $settings, $control_name, $default, $all_settings ) {
 
116
 
117
  $icon_html = '';
118
  $skin_type = $all_settings['_skin'];
 
119
  // --------------New Work-----------------
120
 
121
+ $view = 'eae-icon-view-' . $default['view'];
122
  $shape = 'eae-icon-shape-' . $default['shape'];
123
 
124
+ $icon_migrated = isset( $all_settings['__fa4_migrated'][ $skin_type . '_global_icon_new' ] );
125
+ $icon_is_new = empty( $all_settings[ $skin_type . '_global_icon' ] );
126
 
127
+ $item_icon_migrated = isset( $settings['__fa4_migrated'][ $control_name . '_icon_new' ] );
128
+ $item_icon_is_new = empty( $settings[ $control_name . '_icon' ] );
129
+ if ( ! isset( $settings[ $control_name . '_eae_icon' ] ) || $settings[ $control_name . '_eae_icon' ] === '' ) {
130
 
131
+ switch ( $default['icon_type'] ) {
132
 
133
  case 'image':
134
  $icon_html = '<i><img src="' . $default['image']['url'] . '"/></i>';
139
  break;
140
  }
141
 
142
+ $view = 'eae-icon-view-' . $default['view'];
143
+ $shape = 'eae-icon-shape-' . $default['shape'];
144
  $icon_type = 'eae-icon-type-' . $default['icon_type'];
145
  $icon_name = 'eae-icon-' . $control_name;
146
 
147
+ if ( $default['icon_new'] !== '' ) {
148
+ ?>
149
  <div class="eae-icon <?php echo $icon_name . ' ' . $view . ' ' . $shape . ' ' . $icon_type; ?>">
150
  <div class="eae-icon-wrap">
151
+ <?php if ( $default['icon_type'] === 'icon' ) { ?>
152
+ <?php
153
+ if ( $icon_migrated || $icon_is_new ) :
154
+ Icons_Manager::render_icon( $all_settings[ $skin_type . '_global_icon_new' ], [ 'aria-hidden' => 'true' ] );
155
+ else :
156
+ ?>
157
  <i class="<?php echo $default['icon']; ?>"></i>
158
  <?php endif; ?>
159
+ <?php
160
+ } else {
161
  echo $icon_html;
162
+ }
163
+ ?>
164
  </div>
165
  </div>
166
+ <?php
167
  }
168
  } else {
169
+ switch ( $settings[ $control_name . '_icon_type' ] ) {
 
 
170
 
171
  case 'image':
172
+ $icon_html = '<i><img src="' . $settings[ $control_name . '_image' ]['url'] . '" /></i>';
173
  break;
174
 
175
  case 'text':
176
+ $icon_html = '<i class="">' . $settings[ $control_name . '_text' ] . '</i>';
177
  break;
178
  }
179
 
180
+ if ( $settings[ $control_name . '_view' ] !== 'global' ) {
181
+ $view = 'eae-icon-view-' . $settings[ $control_name . '_view' ];
182
  }
183
 
184
+ if ( $settings[ $control_name . '_shape' ] !== 'global' ) {
185
+ $shape = 'eae-icon-shape-' . $settings[ $control_name . '_shape' ];
186
  }
187
 
188
+ $icon_type = 'eae-icon-type-' . $settings[ $control_name . '_icon_type' ];
189
 
190
  $icon_name = 'eae-icon-' . $control_name;
191
  }
192
+ if ( isset( $settings[ $control_name . '_eae_icon' ] ) && $settings[ $control_name . '_eae_icon' ] !== '' ) {
193
  ?>
194
  <div class="eae-icon <?php echo $icon_name . ' ' . $view . ' ' . $shape . ' ' . $icon_type; ?>">
195
  <div class="eae-icon-wrap">
196
  <?php
197
+ if ( $settings[ $control_name . '_icon_type' ] === 'icon' ) {
198
+ ?>
199
+ <?php
200
+ if ( $item_icon_migrated || $item_icon_is_new ) :
201
+ Icons_Manager::render_icon( $settings[ $control_name . '_icon_new' ], [ 'aria-hidden' => 'true' ] );
202
+ else :
203
+ ?>
204
+ <i class="<?php echo $settings[ $control_name . '_icon' ]; ?>"></i>
205
  <?php endif; ?>
206
+ <?php
207
+ } else {
208
  echo $icon_html;
209
+ }
210
+ ?>
211
  </div>
212
  </div>
213
+ <?php
214
  }
 
215
  }
216
 
217
+ public function get_icon_timeline_html( $settings, $control_name ) {
 
218
 
219
  $icon_html = '';
 
220
  $icon_data = '';
221
 
222
+ if ( $settings[ $control_name . '_eae_icon' ] === '' ) {
223
+ $settings[ $control_name . '_icon' ] = 'fa fa-star';
224
+ $settings[ $control_name . '_view' ] = 'stacked';
225
+ $settings[ $control_name . '_shape' ] = 'cricle';
226
+ $settings[ $control_name . '_icon_type' ] = 'icon';
227
+ $icon_data = '<i class="' . $settings[ $control_name . '_icon' ] . ' hvr-icon"></i>';
228
  } else {
229
 
230
+ if ( $settings[ $control_name . '_icon_type' ] === 'icon' ) {
231
+ if ( $settings[ $control_name . '_icon' ] === '' ) {
232
+ $settings[ $control_name . '_icon' ] = 'fa fa-star';
233
+ $settings[ $control_name . '_view' ] = 'stacked';
234
+ $settings[ $control_name . '_shape' ] = '';
235
  }
236
+ if ( $settings[ $control_name . '_icon' ] !== '' ) {
237
+ $icon_data = '<i class="' . $settings[ $control_name . '_icon' ] . ' hvr-icon"></i>';
238
  }
239
+ } elseif ( $settings[ $control_name . '_icon_type' ] === 'image' ) {
240
+ if ( $settings[ $control_name . '_image' ]['id'] !== '' ) {
241
+ $icon_data = wp_get_attachment_image( $settings[ $control_name . '_image' ]['id'] );
242
  }
243
+ } elseif ( $settings[ $control_name . '_icon_type' ] === 'text' ) {
244
+ if ( $settings[ $control_name . '_text' ] !== '' ) {
245
+ $icon_data = $settings[ $control_name . '_text' ];
246
  }
247
  } else {
248
  $icon_data = '';
249
  }
250
  }
251
 
252
+ if ( $icon_data !== '' ) {
253
+ $icon_html .= '<span class="eae-icon-wrapper eae-icon-' . $control_name . '_wrapper eae-icon-view-stacked elementor-shape-' . $settings[ $control_name . '_shape' ] . ' eae-icon-type-' . $settings[ $control_name . '_icon_type' ] . '">';
254
+ $icon_html .= '<span class="elementor-icon eae-icon elementor-animation-' . $settings[ $control_name . '_icon_hover_animation' ] . '">';
 
255
  $icon_html .= $icon_data;
256
  $icon_html .= '</span>';
257
  $icon_html .= '</span>';
262
 
263
 
264
 
265
+ public function group_icon_styles( $widget, $args ) {
 
266
 
267
  $defaults = [
268
  'primary_color' => true,
284
  'focus_item_class' => '',
285
  ];
286
 
287
+ $args = wp_parse_args( $args, $defaults );
 
 
 
 
288
 
289
+ $control_name = $args['name'];
 
 
 
 
 
 
 
 
 
290
 
291
+ $widget->start_controls_tabs( $control_name . 'icon_colors' );
292
 
293
  $widget->start_controls_tab(
294
  $control_name . '_icon_colors_normal',
295
  [
296
+ 'label' => __( 'Normal', 'wts-eae' ),
297
  ]
298
  );
299
 
300
+ if ( $args['primary_color'] ) {
301
  $widget->add_control(
302
  $control_name . '_icon_primary_color',
303
  [
304
+ 'label' => __( 'Primary Color', 'wts-eae' ),
305
  'type' => Controls_Manager::COLOR,
306
+ 'global' => [
307
  'default' => Global_Colors::COLOR_PRIMARY,
308
  ],
309
  'selectors' => [
318
  );
319
  }
320
 
321
+ if ( $args['secondary_color'] ) {
322
  $widget->add_control(
323
  $control_name . '_icon_secondary_color',
324
  [
325
+ 'label' => __( 'Secondary Color', 'wts-eae' ),
326
  'type' => Controls_Manager::COLOR,
327
  'default' => '#fff',
 
 
 
328
  'selectors' => [
329
  '{{WRAPPER}} .eae-icon-' . $control_name . '.eae-icon-view-framed' => 'background-color: {{VALUE}};',
330
  '{{WRAPPER}} .eae-icon-' . $control_name . '.eae-icon-view-stacked i' => 'color: {{VALUE}};',
336
 
337
  $widget->end_controls_tab();
338
 
339
+ if ( $args['hover_primary_color'] || $args['hover_secondary_color'] ) {
340
  $widget->start_controls_tab(
341
  $control_name . '_icon_colors_hover',
342
  [
343
+ 'label' => __( 'Hover', 'wts-eae' ),
344
  ]
345
  );
346
  }
347
+ if ( $args['hover_primary_color'] ) {
348
  $widget->add_control(
349
  $control_name . '_icon_hover_primary_color',
350
  [
351
+ 'label' => __( 'Primary Color', 'wts-eae' ),
352
  'type' => Controls_Manager::COLOR,
353
  'default' => '',
354
  'selectors' => [
363
  );
364
  }
365
 
366
+ if ( $args['hover_secondary_color'] ) {
367
  $widget->add_control(
368
  $control_name . '_icon_hover_secondary_color',
369
  [
370
+ 'label' => __( 'Secondary Color', 'wts-eae' ),
371
  'type' => Controls_Manager::COLOR,
372
  'default' => '',
 
 
 
373
  'selectors' => [
374
  '{{WRAPPER}} .eae-icon-' . $control_name . '.eae-icon-view-stacked:hover i' => 'color: {{VALUE}};',
375
  '{{WRAPPER}} .eae-icon-' . $control_name . '.eae-icon-view-stacked:hover svg' => 'fill: {{VALUE}};',
379
  );
380
  }
381
 
382
+ if ( $args['hover_animation'] ) {
383
  $widget->add_control(
384
  $control_name . '_icon_hover_animation',
385
  [
386
+ 'label' => __( 'Hover Animation', 'wts-eae' ),
387
  'type' => Controls_Manager::HOVER_ANIMATION,
388
  ]
389
  );
391
 
392
  $widget->end_controls_tab();
393
 
394
+ if ( $args['focus_item_class'] !== '' ) {
395
 
396
  $widget->start_controls_tab(
397
  $control_name . '_icon_colors_focus',
398
  [
399
+ 'label' => __( 'Focus', 'wts-eae' ),
400
  ]
401
  );
402
 
403
+ if ( $args['focus_primary_color'] ) {
 
404
  $widget->add_control(
405
  $control_name . '_icon_focus_primary_color',
406
  [
407
+ 'label' => __( 'Primary Color', 'wts-eae' ),
408
  'type' => Controls_Manager::COLOR,
409
+ 'global' => [
410
  'default' => Global_Colors::COLOR_PRIMARY,
411
  ],
412
  'selectors' => [
421
  );
422
  }
423
 
424
+ if ( $args['focus_secondary_color'] ) {
425
  $widget->add_control(
426
  $control_name . '_icon_focus_secondary_color',
427
  [
428
+ 'label' => __( 'Secondary Color', 'wts-eae' ),
429
  'type' => Controls_Manager::COLOR,
430
+ 'global' => [
431
  'default' => Global_Colors::COLOR_ACCENT,
432
  ],
 
 
 
433
  'selectors' => [
434
  '{{WRAPPER}} .' . $args['focus_item_class'] . ' .eae-icon-' . $control_name . '.eae-icon-view-framed' => 'background-color: {{VALUE}};',
435
  '{{WRAPPER}} .' . $args['focus_item_class'] . ' .eae-icon-' . $control_name . '.eae-icon-view-stacked i ' => 'color: {{VALUE}};',
439
  );
440
  }
441
 
 
442
  $widget->end_controls_tab();
443
  }
444
 
 
445
  $widget->end_controls_tabs();
446
 
447
+ if ( $args['icon_size'] ) {
448
  $widget->add_responsive_control(
449
  $control_name . '_icon_size',
450
  [
451
+ 'label' => __( 'Size', 'wts-eae' ),
452
  'type' => Controls_Manager::SLIDER,
453
  'range' => [
454
  'px' => [
465
  );
466
  }
467
 
468
+ if ( $args['icon_padding'] ) {
469
  $widget->add_control(
470
  $control_name . '_icon_padding',
471
  [
472
+ 'label' => __( 'Padding', 'wts-eae' ),
473
  'type' => Controls_Manager::SLIDER,
474
  'selectors' => [
475
  '{{WRAPPER}} .eae-icon-' . $control_name . '.eae-icon' => 'padding: {{SIZE}}{{UNIT}};',
480
  'max' => 100,
481
  ],
482
  ],
 
 
 
 
483
  ]
484
  );
485
  }
486
 
487
+ if ( $args['rotate'] ) {
488
  $widget->add_control(
489
  $control_name . '_icon_rotate',
490
  [
491
+ 'label' => __( 'Rotate', 'wts-eae' ),
492
  'type' => Controls_Manager::SLIDER,
493
  'default' => [
494
  'size' => 0,
501
  );
502
  }
503
 
504
+ if ( $args['border_style'] ) {
505
  $widget->add_control(
506
  $control_name . '_border_style',
507
  [
508
+ 'label' => __( 'Border Style', 'wts-eae' ),
509
  'type' => Controls_Manager::SELECT,
510
+ 'options' => [
511
+ 'none' => __( 'None', 'wts-eae' ),
512
+ 'solid' => __( 'Solid', 'wts-eae' ),
513
+ 'double' => __( 'Double', 'wts-eae' ),
514
+ 'dotted' => __( 'Dotted', 'wts-eae' ),
515
+ 'dashed' => __( 'Dashed', 'wts-eae' ),
516
+ ],
517
+ 'default' => 'solid',
518
  'selectors' => [
519
  '{{WRAPPER}} .eae-icon-' . $control_name . '.eae-icon' => 'border-style: {{VALUE}};',
520
  ],
523
  );
524
  }
525
 
526
+ if ( $args['border_width'] ) {
527
  $widget->add_control(
528
  $control_name . '_border_width',
529
  [
530
+ 'label' => __( 'Border Width', 'wts-eae' ),
531
  'type' => Controls_Manager::DIMENSIONS,
532
  'default' => [
533
  'value' => 20,
540
  );
541
  }
542
 
543
+ if ( $args['border_radius'] ) {
544
  $widget->add_control(
545
  $control_name . '_icon_border_radius',
546
  [
547
+ 'label' => __( 'Border Radius', 'wts-eae' ),
548
  'type' => Controls_Manager::DIMENSIONS,
549
+ 'size_units' => [ 'px', '%' ],
550
  'selectors' => [
551
  '{{WRAPPER}} .eae-icon-' . $control_name . '.eae-icon' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
552
  ],
553
  ]
554
  );
555
  }
 
 
556
  }
557
 
558
+ public function group_icon_styles_repeater( $widget, $args ) {
 
559
 
560
  $defaults = [
561
  'primary_color' => true,
579
 
580
  ];
581
 
582
+ $args = wp_parse_args( $args, $defaults );
583
 
584
  $control_name = $args['name'];
585
  $control_label = $args['label'];
586
 
 
 
 
 
 
 
 
 
 
 
 
587
  $widget->add_control(
588
  $control_name . 'custom_styles',
589
  [
590
+ 'label' => __( 'Custom Icon Style', 'wts-eae' ),
591
  'type' => Controls_Manager::SWITCHER,
592
+ 'label_off' => __( 'No', 'wts-eae' ),
593
+ 'label_on' => __( 'Yes', 'wts-eae' ),
594
  'default' => '',
595
  ]
596
  );
597
 
598
+ if ( $args['tabs'] ) {
599
+ $widget->start_controls_tabs( $control_name . 'icon_colors' );
600
 
601
  $widget->start_controls_tab(
602
  $control_name . '_icon_colors_normal',
603
  [
604
+ 'label' => __( 'Normal', 'wts-eae' ),
605
  ]
606
  );
607
  } else {
609
  $widget->add_control(
610
  $control_name . '_icon_colors_normal',
611
  [
612
+ 'label' => __( 'Normal', 'wts-eae' ),
613
  'type' => Controls_Manager::HEADING,
614
  'condition' => [
615
+ $control_name . 'custom_styles' => 'yes',
616
+ ],
617
  ]
618
  );
619
  }
620
 
621
+ if ( $args['primary_color'] ) {
622
  $widget->add_control(
623
  $control_name . '_icon_primary_color',
624
  [
625
+ 'label' => __( 'Primary Color', 'wts-eae' ),
626
  'type' => Controls_Manager::COLOR,
627
  'default' => '',
628
  'selectors' => [
634
  '{{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '.eae-icon-view-default svg' => 'fill: {{VALUE}};',
635
  ],
636
  'condition' => [
637
+ $control_name . 'custom_styles' => 'yes',
638
+ ],
639
  ]
640
  );
641
  }
642
 
643
+ if ( $args['secondary_color'] ) {
644
  $widget->add_control(
645
  $control_name . '_icon_secondary_color',
646
  [
647
+ 'label' => __( 'Secondary Color', 'wts-eae' ),
648
  'type' => Controls_Manager::COLOR,
649
  'default' => '',
650
  'condition' => [
656
  '{{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '.eae-icon-view-stacked svg' => 'color: {{VALUE}};',
657
  ],
658
  'condition' => [
659
+ $control_name . 'custom_styles' => 'yes',
660
+ ],
661
  ]
662
  );
663
  }
664
 
665
+ if ( $args['tabs'] ) {
666
 
667
  $widget->end_controls_tab();
668
  }
669
 
670
+ if ( $args['tabs'] ) {
671
  $widget->start_controls_tab(
672
  $control_name . '_icon_colors_hover',
673
  [
674
+ 'label' => __( 'Hover', 'wts-eae' ),
675
  'condition' => [
676
+ $control_name . 'custom_styles' => 'yes',
677
+ ],
678
  ]
679
  );
680
  } else {
681
+ if ( $args['hover_primary_color'] || $args['hover_secondary_color'] ) {
682
  $widget->add_control(
683
  $control_name . '_icon_colors_hover',
684
  [
685
+ 'label' => __( 'Hover', 'wts-eae' ),
686
  'type' => Controls_Manager::HEADING,
687
  'condition' => [
688
+ $control_name . 'custom_styles' => 'yes',
689
+ ],
690
  ]
691
  );
692
  }
693
  }
694
 
695
+ if ( $args['hover_primary_color'] ) {
696
  $widget->add_control(
697
  $control_name . '_icon_hover_primary_color',
698
  [
699
+ 'label' => __( 'Primary Color', 'wts-eae' ),
700
  'type' => Controls_Manager::COLOR,
701
  'default' => '',
702
  'selectors' => [
708
  '{{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '.eae-icon-view-default:hover svg' => 'fill: {{VALUE}}; border-color: {{VALUE}};',
709
  ],
710
  'condition' => [
711
+ $control_name . 'custom_styles' => 'yes',
712
+ ],
713
  ]
714
  );
715
  }
716
 
717
+ if ( $args['hover_secondary_color'] ) {
718
  $widget->add_control(
719
  $control_name . '_icon_hover_secondary_color',
720
  [
721
+ 'label' => __( 'Secondary Color', 'wts-eae' ),
722
  'type' => Controls_Manager::COLOR,
723
  'default' => '',
724
  'condition' => [
732
  '{{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '.eae-icon-view-default:hover svg' => 'fill: {{VALUE}};',
733
  ],
734
  'condition' => [
735
+ $control_name . 'custom_styles' => 'yes',
736
+ ],
737
  ]
738
  );
739
  }
740
 
741
+ if ( $args['hover_animation'] ) {
742
  $widget->add_control(
743
  $control_name . '_icon_hover_animation',
744
  [
745
+ 'label' => __( 'Hover Animation', 'wts-eae' ),
746
  'type' => Controls_Manager::HOVER_ANIMATION,
747
  'condition' => [
748
+ $control_name . 'custom_styles' => 'yes',
749
+ ],
750
  ]
751
  );
752
  }
753
 
754
+ if ( $args['tabs'] ) {
 
755
 
756
  $widget->end_controls_tab();
757
  }
758
 
759
+ if ( $args['focus_item_class'] !== '' ) {
760
+ if ( $args['tabs'] ) {
761
 
762
  $widget->start_controls_tab(
763
  $control_name . '_icon_colors_focus',
764
  [
765
+ 'label' => __( 'Focus', 'wts-eae' ),
766
  ]
767
  );
768
  } else {
770
  $widget->add_control(
771
  $control_name . '_icon_colors_focus',
772
  [
773
+ 'label' => __( 'Focus', 'wts-eae' ),
774
  'type' => Controls_Manager::HEADING,
775
  'condition' => [
776
+ $control_name . 'custom_styles' => 'yes',
777
+ ],
778
  ]
779
  );
780
  }
781
 
782
+ if ( $args['focus_primary_color'] ) {
783
  $widget->add_control(
784
  $control_name . '_icon_focus_primary_color',
785
  [
786
+ 'label' => __( 'Primary Color', 'wts-eae' ),
787
  'type' => Controls_Manager::COLOR,
788
  'default' => '',
789
  'selectors' => [
795
  '{{WRAPPER}} {{CURRENT_ITEM}}.' . $args['focus_item_class'] . ' .eae-icon-' . $control_name . '.eae-icon-view-default svg' => 'fill: {{VALUE}}; border-color: {{VALUE}};',
796
  ],
797
  'condition' => [
798
+ $control_name . 'custom_styles' => 'yes',
799
+ ],
800
  ]
801
  );
802
  }
803
 
804
+ if ( $args['focus_secondary_color'] ) {
805
  $widget->add_control(
806
  $control_name . '_icon_focus_secondary_color',
807
  [
808
+ 'label' => __( 'Secondary Color', 'wts-eae' ),
809
  'type' => Controls_Manager::COLOR,
810
  'default' => '',
811
  'condition' => [
817
  '{{WRAPPER}} {{CURRENT_ITEM}}.' . $args['focus_item_class'] . ' .eae-icon-' . $control_name . '.eae-icon-view-stacked svg' => 'fill: {{VALUE}};',
818
  ],
819
  'condition' => [
820
+ $control_name . 'custom_styles' => 'yes',
821
+ ],
822
  ]
823
  );
824
  }
825
 
826
+ if ( $args['tabs'] ) {
827
 
828
  $widget->end_controls_tab();
829
  }
830
  }
831
+ if ( $args['tabs'] ) {
832
 
833
  $widget->end_controls_tabs();
834
  }
835
 
836
+ if ( $args['icon_size'] ) {
837
  $widget->add_responsive_control(
838
  $control_name . '_icon_size',
839
  [
840
+ 'label' => __( 'Size', 'wts-eae' ),
841
  'type' => Controls_Manager::SLIDER,
842
  'range' => [
843
  'px' => [
849
  'selectors' => [
850
  '{{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '.eae-icon i, {{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '.eae-icon' => 'font-size: {{SIZE}}{{UNIT}};',
851
  '{{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '.eae-icon svg' => 'width: {{SIZE}}{{UNIT}};',
 
852
  ],
853
  'condition' => [
854
+ $control_name . 'custom_styles' => 'yes',
855
+ ],
856
  ]
857
  );
858
  }
859
 
860
+ if ( $args['icon_padding'] ) {
861
  $widget->add_control(
862
  $control_name . '_icon_padding',
863
  [
864
+ 'label' => __( 'Padding', 'wts-eae' ),
865
  'type' => Controls_Manager::SLIDER,
866
  'selectors' => [
 
867
  '{{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '.eae-icon' => 'padding: {{SIZE}}{{UNIT}};',
868
  '{{WRAPPER}} {{CURRENT_ITEM}} .bpe-layout-left .bpe-timline-progress-bar' => 'left: calc({{SIZE}}{{UNIT}} / 2); right: auto;',
869
  '{{WRAPPER}} {{CURRENT_ITEM}} .bpe-layout-right .bpe-timline-progress-bar' => 'left: auto; right: calc({{SIZE}}{{UNIT}} / 2);',
876
  ],
877
  'condition' => [
878
  $control_name . '_view!' => 'default',
879
+ $control_name . 'custom_styles' => 'yes',
880
+ ],
881
  ]
882
  );
883
  }
884
 
885
+ if ( $args['rotate'] ) {
886
  $widget->add_control(
887
  $control_name . '_icon_rotate',
888
  [
889
+ 'label' => __( 'Rotate', 'wts-eae' ),
890
  'type' => Controls_Manager::SLIDER,
891
  'default' => [
892
  'size' => 0,
897
  '{{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '.eae-icon svg' => 'transform: rotate({{SIZE}}{{UNIT}});',
898
  ],
899
  'condition' => [
900
+ $control_name . 'custom_styles' => 'yes',
901
+ ],
902
  ]
903
  );
904
  }
905
+ if ( $args['border_style'] ) {
906
  $widget->add_control(
907
  $control_name . '_border_style',
908
  [
909
+ 'label' => __( 'Border Style', 'wts-eae' ),
910
  'type' => Controls_Manager::SELECT,
911
+ 'options' => [
912
+ 'none' => __( 'None', 'wts-eae' ),
913
+ 'solid' => __( 'Solid', 'wts-eae' ),
914
+ 'double' => __( 'Double', 'wts-eae' ),
915
+ 'dotted' => __( 'Dotted', 'wts-eae' ),
916
+ 'dashed' => __( 'Dashed', 'wts-eae' ),
917
+ ],
918
+ 'default' => 'solid',
919
  'selectors' => [
920
  '{{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '.eae-icon' => 'border-style: {{VALUE}};',
921
  ],
922
  'condition' => [
923
+ $control_name . 'custom_styles' => 'yes',
924
+ ],
925
 
926
  ]
927
  );
928
  }
929
 
930
+ if ( $args['border_width'] ) {
931
  $widget->add_control(
932
  $control_name . '_border_width',
933
  [
934
+ 'label' => __( 'Border Width', 'wts-eae' ),
935
  'type' => Controls_Manager::DIMENSIONS,
936
  'selectors' => [
937
  '{{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '.eae-icon' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
938
  ],
939
  'condition' => [
940
+ $control_name . 'custom_styles' => 'yes',
941
+ ],
942
  ]
943
  );
944
  }
945
 
946
+ if ( $args['border_radius'] ) {
947
  $widget->add_control(
948
  $control_name . '_icon_border_radius',
949
  [
950
+ 'label' => __( 'Border Radius', 'wts-eae' ),
951
  'type' => Controls_Manager::DIMENSIONS,
952
+ 'size_units' => [ 'px', '%' ],
953
  'selectors' => [
954
  '{{WRAPPER}} {{CURRENT_ITEM}} .eae-icon-' . $control_name . '.eae-icon' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
955
  ],
956
  'condition' => [
957
  $control_name . '_view!' => 'default',
958
+ $control_name . 'custom_styles' => 'yes',
959
+ ],
960
  ]
961
  );
962
  }
 
 
963
  }
964
 
965
+ public function group_icon_timeline_styles( $widget, $args ) {
 
966
 
967
  $defaults = [
968
  'primary_color' => true,
983
  'focus_item_class' => '',
984
  ];
985
 
986
+ $args = wp_parse_args( $args, $defaults );
 
 
 
987
 
988
+ $control_name = $args['name'];
989
+ $widget->start_controls_tabs( $control_name . 'icon_colors' );
 
 
 
 
 
 
 
 
 
 
990
 
991
  $widget->start_controls_tab(
992
  $control_name . '_icon_colors_normal',
993
  [
994
+ 'label' => __( 'Normal', 'wts-eae' ),
995
  ]
996
  );
997
 
998
+ if ( $args['primary_color'] ) {
999
  $widget->add_control(
1000
  $control_name . '_icon_primary_color',
1001
  [
1002
+ 'label' => __( 'Primary Color', 'wts-eae' ),
1003
  'type' => Controls_Manager::COLOR,
1004
  'default' => '#6ec1e4',
1005
  'selectors' => [
1011
  );
1012
  }
1013
 
1014
+ if ( $args['secondary_color'] ) {
1015
  $widget->add_control(
1016
  $control_name . '_icon_secondary_color',
1017
  [
1018
+ 'label' => __( 'Secondary Color', 'wts-eae' ),
1019
  'type' => Controls_Manager::COLOR,
1020
  'default' => '#ffffff',
 
 
 
1021
  'selectors' => [
1022
  '{{WRAPPER}} .eae-icon-' . $control_name . '_wrapper.eae-icon-view-framed' => 'background-color: {{VALUE}};',
1023
  '{{WRAPPER}} .eae-icon-' . $control_name . '_wrapper.eae-icon-view-stacked .elementor-icon' => 'color: {{VALUE}};',
1031
  $widget->start_controls_tab(
1032
  $control_name . '_icon_colors_hover',
1033
  [
1034
+ 'label' => __( 'Hover', 'wts-eae' ),
1035
  ]
1036
  );
1037
 
1038
+ if ( $args['hover_primary_color'] ) {
1039
  $widget->add_control(
1040
  $control_name . '_icon_hover_primary_color',
1041
  [
1042
+ 'label' => __( 'Primary Color', 'wts-eae' ),
1043
  'type' => Controls_Manager::COLOR,
1044
  'default' => '',
1045
  'selectors' => [
1051
  );
1052
  }
1053
 
1054
+ if ( $args['hover_secondary_color'] ) {
1055
  $widget->add_control(
1056
  $control_name . '_icon_hover_secondary_color',
1057
  [
1058
+ 'label' => __( 'Secondary Color', 'wts-eae' ),
1059
  'type' => Controls_Manager::COLOR,
1060
  'default' => '',
 
 
 
1061
  'selectors' => [
1062
  '{{WRAPPER}} .eae-icon-' . $control_name . '_wrapper.eae-icon-view-framed:hover' => 'background-color: {{VALUE}};',
1063
  '{{WRAPPER}} .eae-icon-' . $control_name . '_wrapper.eae-icon-view-stacked .elementor-icon:hover' => 'color: {{VALUE}};',
1066
  );
1067
  }
1068
 
1069
+ if ( $args['hover_animation'] ) {
1070
  $widget->add_control(
1071
  $control_name . '_icon_hover_animation',
1072
  [
1073
+ 'label' => __( 'Hover Animation', 'wts-eae' ),
1074
  'type' => Controls_Manager::HOVER_ANIMATION,
1075
  ]
1076
  );
1078
 
1079
  $widget->end_controls_tab();
1080
 
1081
+ if ( $args['focus_item_class'] !== '' ) {
1082
 
1083
  $widget->start_controls_tab(
1084
  $control_name . '_icon_colors_focus',
1085
  [
1086
+ 'label' => __( 'Focus', 'wts-eae' ),
1087
  ]
1088
  );
1089
 
1090
+ if ( $args['focus_primary_color'] ) {
 
1091
  $widget->add_control(
1092
  $control_name . '_icon_focus_primary_color',
1093
  [
1094
+ 'label' => __( 'Primary Color', 'wts-eae' ),
1095
  'type' => Controls_Manager::COLOR,
1096
  'default' => '',
1097
  'selectors' => [
1103
  );
1104
  }
1105
 
1106
+ if ( $args['focus_secondary_color'] ) {
1107
  $widget->add_control(
1108
  $control_name . '_icon_focus_secondary_color',
1109
  [
1110
+ 'label' => __( 'Secondary Color', 'wts-eae' ),
1111
  'type' => Controls_Manager::COLOR,
1112
  'default' => '',
 
 
 
1113
  'selectors' => [
1114
  '{{WRAPPER}} .' . $args['focus_item_class'] . ' .eae-icon-' . $control_name . '_wrapper.eae-icon-view-framed' => 'background-color: {{VALUE}};',
1115
  '{{WRAPPER}} .' . $args['focus_item_class'] . ' .eae-icon-' . $control_name . '_wrapper.eae-icon-view-stacked .elementor-icon' => 'color: {{VALUE}};',
1118
  );
1119
  }
1120
 
 
1121
  $widget->end_controls_tab();
1122
  }
1123
 
 
1124
  $widget->end_controls_tabs();
1125
 
1126
+ if ( $args['icon_size'] ) {
1127
  $widget->add_responsive_control(
1128
  $control_name . '_icon_size',
1129
  [
1130
+ 'label' => __( 'Size', 'wts-eae' ),
1131
  'type' => Controls_Manager::SLIDER,
1132
  'range' => [
1133
  'px' => [
1142
  );
1143
  }
1144
 
1145
+ if ( $args['icon_padding'] ) {
1146
  $widget->add_control(
1147
  $control_name . '_icon_padding',
1148
  [
1149
+ 'label' => __( 'Background Size', 'wts-eae' ),
1150
  'type' => Controls_Manager::SLIDER,
1151
  'selectors' => [
1152
  '{{WRAPPER}} .eae-icon-' . $control_name . '_wrapper.eae-icon-wrapper' => 'display: inline-block; min-height: {{SIZE}}{{UNIT}}; min-width: {{SIZE}}{{UNIT}}; line-height: {{SIZE}}{{UNIT}};',
1159
  'max' => 100,
1160
  ],
1161
  ],
 
 
 
1162
  ]
1163
  );
1164
  }
1165
 
1166
+ if ( $args['rotate'] ) {
1167
  $widget->add_control(
1168
  $control_name . '_icon_rotate',
1169
  [
1170
+ 'label' => __( 'Rotate', 'wts-eae' ),
1171
  'type' => Controls_Manager::SLIDER,
1172
  'default' => [
1173
  'size' => 0,
1180
  );
1181
  }
1182
 
1183
+ if ( $args['border_width'] ) {
1184
  $widget->add_control(
1185
  $control_name . '_border_width',
1186
  [
1187
+ 'label' => __( 'Border Width', 'wts-eae' ),
1188
  'type' => Controls_Manager::DIMENSIONS,
1189
  'selectors' => [
1190
  '{{WRAPPER}} .eae-icon-' . $control_name . '_wrapper .elementor-icon' => 'border-width: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1191
  ],
 
 
 
1192
  ]
1193
  );
1194
  }
1195
 
1196
+ if ( $args['border_radius'] ) {
1197
  $widget->add_control(
1198
  $control_name . '_icon_border_radius',
1199
  [
1200
+ 'label' => __( 'Border Radius', 'wts-eae' ),
1201
  'type' => Controls_Manager::DIMENSIONS,
1202
+ 'size_units' => [ 'px', '%' ],
1203
  'selectors' => [
1204
  '{{WRAPPER}} .eae-icon-' . $control_name . '_wrapper .elementor-icon' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1205
  ],
 
 
 
1206
  ]
1207
  );
1208
  }
 
 
1209
  }
1210
 
1211
 
1212
+ public function box_model_controls( $widget, $args ) {
 
1213
 
1214
  $defaults = [
1215
+ 'border' => true,
1216
  'border-radius' => true,
1217
+ 'margin' => true,
1218
+ 'padding' => true,
1219
+ 'box-shadow' => true,
1220
  ];
1221
 
1222
+ $args = wp_parse_args( $args, $defaults );
1223
 
1224
+ if ( $args['border'] ) {
1225
  $widget->add_group_control(
1226
  Group_Control_Border::get_type(),
1227
  [
1228
+ 'name' => $args['name'] . '_border',
1229
+ 'label' => $args['label'] . ' Border',
1230
+ 'selector' => $args['selector'],
1231
  'condition' => [
1232
+ 'ribbons_badges_switcher!' => '',
1233
+ ],
1234
  ]
1235
  );
1236
  }
1237
 
1238
+ if ( $args['border-radius'] ) {
1239
  $widget->add_control(
1240
  $args['name'] . '_border_radius',
1241
  [
1242
+ 'label' => __( 'Border Radius', 'wts-eae' ),
1243
+ 'type' => Controls_Manager::DIMENSIONS,
1244
+ 'size_units' => [ 'px', '%' ],
1245
+ 'selectors' => [
1246
  $args['selector'] => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1247
  ],
1248
+ 'condition' => [
1249
+ 'ribbons_badges_switcher!' => '',
1250
+ ],
1251
  ]
1252
  );
1253
  }
1254
 
1255
+ if ( $args['box-shadow'] ) {
1256
  $widget->add_group_control(
1257
  Group_Control_Box_Shadow::get_type(),
1258
  [
1259
+ 'name' => $args['name'] . '_box_shadow',
1260
+ 'label' => __( 'Box Shadow', 'wts-eae' ),
1261
+ 'selector' => $args['selector'],
1262
  'condition' => [
1263
+ 'ribbons_badges_switcher!' => '',
1264
+ ],
1265
  ]
1266
  );
1267
  }
1268
 
1269
+ if ( $args['padding'] ) {
1270
  $widget->add_control(
1271
  $args['name'] . '_padding',
1272
  [
1273
+ 'label' => __( 'Padding', 'wts-eae' ),
1274
+ 'type' => Controls_Manager::DIMENSIONS,
1275
+ 'size_units' => [ 'px', '%' ],
1276
+ 'selectors' => [
1277
  $args['selector'] => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1278
  ],
1279
+ 'condition' => [
1280
+ 'ribbons_badges_switcher!' => '',
1281
+ ],
1282
  ]
1283
  );
1284
  }
1285
 
1286
+ if ( $args['margin'] ) {
 
1287
  $widget->add_control(
1288
  $args['name'] . '_margin',
1289
  [
1290
+ 'label' => __( 'Margin', 'wts-eae' ),
1291
+ 'type' => Controls_Manager::DIMENSIONS,
1292
+ 'size_units' => [ 'px', '%' ],
1293
+ 'selectors' => [
1294
  $args['selector'] => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1295
  ],
1296
+ 'condition' => [
1297
+ 'ribbons_badges_switcher!' => '',
1298
+ ],
1299
  ]
1300
  );
1301
  }
1302
  }
1303
 
1304
+ public function get_eae_modules() {
 
1305
  $modules = [
1306
+ 'timeline' => [
1307
+ 'name' => 'Timeline',
1308
+ 'enabled' => true,
1309
+ 'type' => 'widget',
1310
+ ],
1311
+ 'info-circle' => [
1312
+ 'name' => 'Info Circle',
1313
+ 'enabled' => true,
1314
+ 'type' => 'widget',
1315
+ ],
1316
+ 'comparison-table' => [
1317
+ 'name' => 'Comparison Table',
1318
+ 'enabled' => true,
1319
+ 'type' => 'widget',
1320
+ ],
1321
+ 'image-compare' => [
1322
+ 'name' => 'Image Compare',
1323
+ 'enabled' => true,
1324
+ 'type' => 'widget',
1325
+ ],
1326
+ 'animated-text' => [
1327
+ 'name' => 'Animated Text',
1328
+ 'enabled' => true,
1329
+ 'type' => 'widget',
1330
+ ],
1331
+ 'dual-button' => [
1332
+ 'name' => 'Dual Button',
1333
+ 'enabled' => true,
1334
+ 'type' => 'widget',
1335
+ ],
1336
+ 'particles' => [
1337
+ 'name' => 'Particles',
1338
+ 'enabled' => true,
1339
+ 'type' => 'feature',
1340
+ ],
1341
+ 'wrapper-links' => [
1342
+ 'name' => 'Wrapper Link',
1343
+ 'enabled' => true,
1344
+ 'type' => 'feature',
1345
+ ],
1346
+ 'modal-popup' => [
1347
+ 'name' => 'Modal Popup',
1348
+ 'enabled' => true,
1349
+ 'type' => 'widget',
1350
+ ],
1351
+ 'progress-bar' => [
1352
+ 'name' => 'Progress Bar',
1353
+ 'enabled' => true,
1354
+ 'type' => 'widget',
1355
+ ],
1356
+ 'flip-box' => [
1357
+ 'name' => 'Flip Box',
1358
+ 'enabled' => true,
1359
+ 'type' => 'widget',
1360
+ ],
1361
+ 'split-text' => [
1362
+ 'name' => 'Split Text',
1363
+ 'enabled' => true,
1364
+ 'type' => 'widget',
1365
+ ],
1366
+ 'gmap' => [
1367
+ 'name' => 'Google Map',
1368
+ 'enabled' => true,
1369
+ 'type' => 'widget',
1370
+ ],
1371
+ 'text-separator' => [
1372
+ 'name' => 'Text Separator',
1373
+ 'enabled' => true,
1374
+ 'type' => 'widget',
1375
+ ],
1376
+ 'price-table' => [
1377
+ 'name' => 'Price Table',
1378
+ 'enabled' => true,
1379
+ 'type' => 'widget',
1380
+ ],
1381
+ 'twitter' => [
1382
+ 'name' => 'Twitter',
1383
+ 'enabled' => true,
1384
+ 'type' => 'widget',
1385
+ ],
1386
+ 'bg-slider' => [
1387
+ 'name' => 'Background Slider',
1388
+ 'enabled' => true,
1389
+ 'type' => 'feature',
1390
+ ],
1391
+ 'animated-gradient' => [
1392
+ 'name' => 'Animated Gradient',
1393
+ 'enabled' => true,
1394
+ 'type' => 'feature',
1395
+ ],
1396
+ 'post-list' => [
1397
+ 'name' => 'Post List',
1398
+ 'enabled' => true,
1399
+ 'type' => 'widget',
1400
+ ],
1401
+ 'shape-separator' => [
1402
+ 'name' => 'Shape Separator',
1403
+ 'enabled' => true,
1404
+ 'type' => 'widget',
1405
+ ],
1406
+ 'filterable-gallery' => [
1407
+ 'name' => 'Filterable Gallery',
1408
+ 'enabled' => true,
1409
+ 'type' => 'widget',
1410
+ ],
1411
+ 'content-switcher' => [
1412
+ 'name' => 'Content Switcher',
1413
+ 'enabled' => true,
1414
+ 'type' => 'widget',
1415
+ ],
1416
+ 'chart' => [
1417
+ 'name' => 'Chart',
1418
+ 'enabled' => true,
1419
+ 'type' => 'widget',
1420
+ ],
1421
+ 'thumb-gallery' => [
1422
+ 'name' => 'Thumbnail Slider',
1423
+ 'enabled' => true,
1424
+ 'type' => 'widget',
1425
+ ],
1426
+ 'data-table' => [
1427
+ 'name' => 'Data Table',
1428
+ 'enabled' => true,
1429
+ 'type' => 'widget',
1430
+ ],
1431
  ];
1432
 
1433
+ $saved_modules = get_option( 'wts_eae_elements' );
1434
 
1435
+ if ( $saved_modules !== false ) {
1436
+ foreach ( $modules as $key => $module_name ) {
1437
+ if ( array_key_exists( $key, $saved_modules ) ) {
1438
+ $modules[ $key ]['enabled'] = $saved_modules[ $key ];
1439
  } else {
1440
+ $modules[ $key ]['enabled'] = true;
1441
  }
1442
  }
1443
  }
1444
 
1445
+ $modules = apply_filters( 'wts_eae_active_modules', $modules );
1446
 
1447
  return $modules;
1448
  }
1449
 
1450
+ public function get_current_url_non_paged() {
 
 
1451
  global $wp;
1452
+ $url = get_pagenum_link( 1 );
1453
 
1454
+ return trailingslashit( $url );
1455
  }
1456
 
1457
 
1458
+ public static function select_elementor_page( $type ) {
1459
+ $args = [
1460
+ 'tax_query' => [
1461
+ [
1462
+ 'taxonomy' => 'elementor_library_type',
1463
+ 'field' => 'slug',
1464
+ 'terms' => $type,
1465
+ ],
1466
+ ],
1467
+ 'post_type' => 'elementor_library',
1468
+ 'posts_per_page' => -1,
1469
+ ];
1470
+ $query = new \WP_Query( $args );
1471
 
1472
+ $posts = $query->posts;
1473
+ foreach ( $posts as $post ) {
1474
+ $items[ $post->ID ] = $post->post_title;
1475
+ }
1476
 
1477
+ if ( empty( $items ) ) {
1478
+ $items = [];
1479
+ }
1480
 
1481
+ return $items;
1482
+ }
 
1483
 
1484
+ public static function select_ae_templates() {
1485
+ $ae_id = [];
1486
+ if ( wp_verify_nonce( isset( $_GET['post'] ) ) ) {
1487
+ $ae_id = wp_verify_nonce( [ $_GET['post'] ] );
1488
+ }
1489
+ $args = [
1490
+ 'post_type' => 'ae_global_templates',
1491
+ 'meta_key' => 'ae_render_mode',
1492
+ 'meta_value' => 'block_layout',
1493
+ 'posts_per_page' => -1,
1494
+ 'post__not_in' => $ae_id,
1495
+ ];
1496
+ $query = new \WP_Query( $args );
1497
 
1498
+ $posts = $query->posts;
1499
+ foreach ( $posts as $post ) {
1500
+ $items[ $post->ID ] = $post->post_title;
1501
+ }
1502
 
1503
+ if ( empty( $items ) ) {
1504
+ $items = [];
1505
+ }
1506
+
1507
+ return $items;
1508
+ }
1509
+
1510
+ public static function validate_html_tag( $tag, $allowed_tags = [], $fallback = 'div' ) {
1511
+
1512
+ if(empty($allowed_tags)){
1513
+ $allowed_tags = [
1514
+ 'article',
1515
+ 'aside',
1516
+ 'div',
1517
+ 'footer',
1518
+ 'h1',
1519
+ 'h2',
1520
+ 'h3',
1521
+ 'h4',
1522
+ 'h5',
1523
+ 'h6',
1524
+ 'header',
1525
+ 'main',
1526
+ 'nav',
1527
+ 'p',
1528
+ 'section',
1529
+ 'span',
1530
+ ];
1531
+ }
1532
+
1533
+ return in_array( strtolower( $tag ), $allowed_tags ) ? $tag : $fallback;
1534
+ }
1535
 
1536
 
1537
  }
classes/post-helper.php CHANGED
@@ -2,14 +2,13 @@
2
 
3
  namespace WTS_EAE\Classes;
4
 
5
- //use WTS_EAE\Modules\Posts\Widgets\Postgrid;
6
  use WTS_EAE\Plugin;
7
  use Elementor\Controls_Manager;
8
 
9
  class Post_Helper {
10
 
11
 
12
- function query_controls( $widget ) {
13
 
14
  $widget->add_control(
15
  'source',
@@ -17,11 +16,10 @@ class Post_Helper {
17
  'label' => __( 'Source', 'wts-eae' ),
18
  'type' => Controls_Manager::SELECT,
19
  'options' => self::get_post_types(),
20
- 'default' => 'post'
21
  ]
22
  );
23
 
24
-
25
  $taxonomies = $this->get_taxonomies();
26
 
27
  foreach ( $taxonomies as $taxonomy => $tax_object ) {
@@ -43,8 +41,8 @@ class Post_Helper {
43
  'label' => __( 'Filter Mode', 'wts-eae' ),
44
  'type' => Controls_Manager::SELECT,
45
  'options' => [
46
- 'IN' => __( 'Includes', 'wts-eae' ),
47
- 'NOT IN' => __( 'Excludes', 'wts-eae' )
48
  ],
49
  'condition' => [
50
  'source' => $tax_object->object_type,
@@ -67,10 +65,8 @@ class Post_Helper {
67
  ]
68
  );
69
 
70
-
71
  }
72
 
73
-
74
  // Ordering controls
75
 
76
  $widget->add_control(
@@ -78,82 +74,79 @@ class Post_Helper {
78
  [
79
  'label' => __( 'Order & Limit', 'wts-eae' ),
80
  'type' => Controls_Manager::HEADING,
81
- 'separator' => 'before'
82
  ]
83
  );
84
 
85
  $widget->add_control(
86
  'order_by',
87
  [
88
- 'label' => __('Order By', 'wts-eae'),
89
- 'type' => Controls_Manager::SELECT,
90
- 'options' => [
91
  'ID' => __( 'ID', 'wts-eae' ),
92
  'date' => __( 'Date', 'wts-eae' ),
93
- 'title' => __( 'Title', 'wts-eae' ),
94
  'menu_order' => __( 'Menu Order', 'wts-eae' ),
95
  'random' => __( 'Random', 'wts-eae' ),
96
- 'meta_value' => __( 'Custom Field', 'wts-eae' )
97
  ],
98
- 'default' => 'menu_order'
99
  ]
100
  );
101
 
102
  $widget->add_control(
103
  'order_meta_key',
104
  [
105
- 'label' => __('Meta Key (Custom Field Name)', 'wts-eae'),
106
- 'type' => Controls_Manager::TEXT,
107
  'condition' => [
108
- 'order_by' => 'meta_value'
109
- ]
110
  ]
111
  );
112
 
113
  $widget->add_control(
114
  'order',
115
  [
116
- 'label' => __('Order', 'wts-eae'),
117
- 'type' => Controls_Manager::SELECT,
118
- 'options' => [
119
- 'ASC' => __('Ascending', 'wts-eae'),
120
- 'DESC' => __('Descending', 'wts-eae')
121
  ],
122
- 'default' => 'DESC'
123
  ]
124
  );
125
 
126
  $widget->add_control(
127
  'offset',
128
  [
129
- 'label' => __('Offset', 'wts-eae'),
130
- 'type' => Controls_Manager::NUMBER
131
  ]
132
  );
133
 
134
  $widget->add_control(
135
  'post_count',
136
  [
137
- 'label' => __('Post Count', 'wts-eae'),
138
- 'type' => Controls_Manager::NUMBER,
139
- 'default' => '6'
140
  ]
141
  );
142
-
143
-
144
  }
145
 
146
  private function get_post_types() {
147
 
148
  $types = [];
149
 
150
- $post_types = get_post_types( array( 'public' => true ), 'object' );
151
 
152
  $exclusions = [ 'attachment', 'elementor_library', 'ae_global_templates' ];
153
 
154
-
155
  foreach ( $post_types as $post_type ) {
156
- if ( in_array( $post_type->name, $exclusions ) ) {
157
  continue;
158
  }
159
  $types[ $post_type->name ] = $post_type->label;
@@ -172,10 +165,12 @@ class Post_Helper {
172
  private function get_taxonomy_terms( $taxonomy ) {
173
 
174
  $term_array = [];
175
- $terms = get_terms( [
176
- 'taxonomy' => $taxonomy,
177
- 'hide_empty' => false
178
- ] );
 
 
179
 
180
  if ( count( $terms ) ) {
181
 
@@ -187,19 +182,19 @@ class Post_Helper {
187
  return $term_array;
188
  }
189
 
190
- public function get_queried_posts($settings, $page = 1){
191
 
192
  $query_vars = [];
193
 
194
- $query_vars['post_type'] = $settings['source'];
195
- $query_vars['orderby'] = $settings['order_by'];
196
- $query_vars['order'] = $settings['order'];
197
 
198
- $query_vars['posts_per_page'] = $settings['post_count'];
199
- $query_vars['offset'] = $settings['offset'];
200
 
201
- if($query_vars['orderby'] == 'meta_value'){
202
- $query_vars['meta_key'] = $settings['order_meta_key'];
203
  }
204
 
205
  // Taxonomy Query
@@ -208,23 +203,21 @@ class Post_Helper {
208
 
209
  $setting_key = $object->name . '_terms';
210
 
211
- if ( ! empty( $settings[ $setting_key ] ) ) {
212
 
213
- $operator = $settings[$object->name.'_rule'];
214
 
215
- $query_vars['tax_query'][] = [
216
- 'taxonomy' => $object->name,
217
- 'field' => 'term_id',
218
- 'terms' => $settings[ $setting_key ],
219
- 'operator' => $operator
220
- ];
221
- }
222
  }
223
 
224
-
225
- $posts = new \WP_Query($query_vars);
226
 
227
  return $posts;
228
-
229
  }
230
- }
2
 
3
  namespace WTS_EAE\Classes;
4
 
 
5
  use WTS_EAE\Plugin;
6
  use Elementor\Controls_Manager;
7
 
8
  class Post_Helper {
9
 
10
 
11
+ public function query_controls( $widget ) {
12
 
13
  $widget->add_control(
14
  'source',
16
  'label' => __( 'Source', 'wts-eae' ),
17
  'type' => Controls_Manager::SELECT,
18
  'options' => self::get_post_types(),
19
+ 'default' => 'post',
20
  ]
21
  );
22
 
 
23
  $taxonomies = $this->get_taxonomies();
24
 
25
  foreach ( $taxonomies as $taxonomy => $tax_object ) {
41
  'label' => __( 'Filter Mode', 'wts-eae' ),
42
  'type' => Controls_Manager::SELECT,
43
  'options' => [
44
+ 'IN' => __( 'Includes', 'wts-eae' ),
45
+ 'NOT IN' => __( 'Excludes', 'wts-eae' ),
46
  ],
47
  'condition' => [
48
  'source' => $tax_object->object_type,
65
  ]
66
  );
67
 
 
68
  }
69
 
 
70
  // Ordering controls
71
 
72
  $widget->add_control(
74
  [
75
  'label' => __( 'Order & Limit', 'wts-eae' ),
76
  'type' => Controls_Manager::HEADING,
77
+ 'separator' => 'before',
78
  ]
79
  );
80
 
81
  $widget->add_control(
82
  'order_by',
83
  [
84
+ 'label' => __( 'Order By', 'wts-eae' ),
85
+ 'type' => Controls_Manager::SELECT,
86
+ 'options' => [
87
  'ID' => __( 'ID', 'wts-eae' ),
88
  'date' => __( 'Date', 'wts-eae' ),
89
+ 'title' => __( 'Title', 'wts-eae' ),
90
  'menu_order' => __( 'Menu Order', 'wts-eae' ),
91
  'random' => __( 'Random', 'wts-eae' ),
92
+ 'meta_value' => __( 'Custom Field', 'wts-eae' ),
93
  ],
94
+ 'default' => 'menu_order',
95
  ]
96
  );
97
 
98
  $widget->add_control(
99
  'order_meta_key',
100
  [
101
+ 'label' => __( 'Meta Key (Custom Field Name)', 'wts-eae' ),
102
+ 'type' => Controls_Manager::TEXT,
103
  'condition' => [
104
+ 'order_by' => 'meta_value',
105
+ ],
106
  ]
107
  );
108
 
109
  $widget->add_control(
110
  'order',
111
  [
112
+ 'label' => __( 'Order', 'wts-eae' ),
113
+ 'type' => Controls_Manager::SELECT,
114
+ 'options' => [
115
+ 'ASC' => __( 'Ascending', 'wts-eae' ),
116
+ 'DESC' => __( 'Descending', 'wts-eae' ),
117
  ],
118
+ 'default' => 'DESC',
119
  ]
120
  );
121
 
122
  $widget->add_control(
123
  'offset',
124
  [
125
+ 'label' => __( 'Offset', 'wts-eae' ),
126
+ 'type' => Controls_Manager::NUMBER,
127
  ]
128
  );
129
 
130
  $widget->add_control(
131
  'post_count',
132
  [
133
+ 'label' => __( 'Post Count', 'wts-eae' ),
134
+ 'type' => Controls_Manager::NUMBER,
135
+ 'default' => '6',
136
  ]
137
  );
 
 
138
  }
139
 
140
  private function get_post_types() {
141
 
142
  $types = [];
143
 
144
+ $post_types = get_post_types( [ 'public' => true ], 'object' );
145
 
146
  $exclusions = [ 'attachment', 'elementor_library', 'ae_global_templates' ];
147
 
 
148
  foreach ( $post_types as $post_type ) {
149
+ if ( in_array( $post_type->name, $exclusions, true ) ) {
150
  continue;
151
  }
152
  $types[ $post_type->name ] = $post_type->label;
165
  private function get_taxonomy_terms( $taxonomy ) {
166
 
167
  $term_array = [];
168
+ $terms = get_terms(
169
+ [
170
+ 'taxonomy' => $taxonomy,
171
+ 'hide_empty' => false,
172
+ ]
173
+ );
174
 
175
  if ( count( $terms ) ) {
176
 
182
  return $term_array;
183
  }
184
 
185
+ public function get_queried_posts( $settings, $page = 1 ) {
186
 
187
  $query_vars = [];
188
 
189
+ $query_vars['post_type'] = $settings['source'];
190
+ $query_vars['orderby'] = $settings['order_by'];
191
+ $query_vars['order'] = $settings['order'];
192
 
193
+ $query_vars['posts_per_page'] = $settings['post_count'];
194
+ $query_vars['offset'] = $settings['offset'];
195
 
196
+ if ( $query_vars['orderby'] === 'meta_value' ) {
197
+ $query_vars['meta_key'] = $settings['order_meta_key'];
198
  }
199
 
200
  // Taxonomy Query
203
 
204
  $setting_key = $object->name . '_terms';
205
 
206
+ if ( ! empty( $settings[ $setting_key ] ) ) {
207
 
208
+ $operator = $settings[ $object->name . '_rule' ];
209
 
210
+ $query_vars['tax_query'][] = [
211
+ 'taxonomy' => $object->name,
212
+ 'field' => 'term_id',
213
+ 'terms' => $settings[ $setting_key ],
214
+ 'operator' => $operator,
215
+ ];
216
+ }
217
  }
218
 
219
+ $posts = new \WP_Query( $query_vars );
 
220
 
221
  return $posts;
 
222
  }
223
+ }
controls/group/grid-control.php CHANGED
@@ -31,49 +31,47 @@ class Group_Control_Grid extends Group_Control_Base {
31
  ],
32
  'default' => '3',
33
  'responsive' => true,
34
- 'selectors' => [
35
  '{{WRAPPER}} .bepl-grid-container' => 'grid-template-columns: repeat({{VALUE}}, 1fr)',
36
- ]
37
  ];
38
 
39
  $controls['col-gap'] = [
40
- 'label' => __('Column Gap', 'wts-eae'),
41
- 'type' => Controls_Manager::SLIDER,
42
- 'default' => [
43
  'size' => 30,
44
  ],
45
- 'range' => [
46
  'px' => [
47
  'min' => 0,
48
  'max' => 100,
49
  ],
50
  ],
51
  'responsive' => true,
52
- 'selectors' => [
53
  '{{WRAPPER}} .bepl-grid-container' => 'grid-column-gap: {{SIZE}}{{UNIT}}',
54
  ],
55
  ];
56
 
57
  $controls['row-gap'] = [
58
- 'label' => __('Row Gap', 'wts-eae'),
59
- 'type' => Controls_Manager::SLIDER,
60
- 'default' => [
61
  'size' => 30,
62
  ],
63
- 'range' => [
64
  'px' => [
65
  'min' => 0,
66
  'max' => 100,
67
  ],
68
  ],
69
  'responsive' => true,
70
- 'selectors' => [
71
  '{{WRAPPER}} .bepl-grid-container' => 'grid-row-gap: {{SIZE}}{{UNIT}}',
72
  ],
73
  ];
74
 
75
-
76
-
77
  return $controls;
78
  }
79
 
31
  ],
32
  'default' => '3',
33
  'responsive' => true,
34
+ 'selectors' => [
35
  '{{WRAPPER}} .bepl-grid-container' => 'grid-template-columns: repeat({{VALUE}}, 1fr)',
36
+ ],
37
  ];
38
 
39
  $controls['col-gap'] = [
40
+ 'label' => __( 'Column Gap', 'wts-eae' ),
41
+ 'type' => Controls_Manager::SLIDER,
42
+ 'default' => [
43
  'size' => 30,
44
  ],
45
+ 'range' => [
46
  'px' => [
47
  'min' => 0,
48
  'max' => 100,
49
  ],
50
  ],
51
  'responsive' => true,
52
+ 'selectors' => [
53
  '{{WRAPPER}} .bepl-grid-container' => 'grid-column-gap: {{SIZE}}{{UNIT}}',
54
  ],
55
  ];
56
 
57
  $controls['row-gap'] = [
58
+ 'label' => __( 'Row Gap', 'wts-eae' ),
59
+ 'type' => Controls_Manager::SLIDER,
60
+ 'default' => [
61
  'size' => 30,
62
  ],
63
+ 'range' => [
64
  'px' => [
65
  'min' => 0,
66
  'max' => 100,
67
  ],
68
  ],
69
  'responsive' => true,
70
+ 'selectors' => [
71
  '{{WRAPPER}} .bepl-grid-container' => 'grid-row-gap: {{SIZE}}{{UNIT}}',
72
  ],
73
  ];
74
 
 
 
75
  return $controls;
76
  }
77
 
controls/group/icon.php CHANGED
@@ -21,7 +21,6 @@ class Group_Control_Icon extends Group_Control_Base {
21
  protected function init_fields() {
22
  $controls = [];
23
 
24
-
25
  $controls['icon_type'] = [
26
  'type' => Controls_Manager::CHOOSE,
27
  'label' => __( 'Type', 'wts-eae' ),
@@ -43,58 +42,47 @@ class Group_Control_Icon extends Group_Control_Base {
43
  'label_block' => false,
44
  'toggle' => false,
45
  'condition' => [
46
- 'eae_icon!' => ''
47
- ]
48
  ];
49
 
50
-
51
- // $controls['icon'] = [
52
- // 'label' => __( 'Icon', 'wts-eae' ),
53
- // 'type' => Controls_Manager::ICON,
54
- // 'default' => 'fa fa-star',
55
- // 'condition' => [
56
- // 'eae_icon!' => '',
57
- // 'icon_type' => 'icon'
58
- // ],
59
- // ];
60
-
61
- $controls['icon_new'] = [
62
- 'label' => __( 'Icon', 'wts-eae' ),
63
- 'type' => Controls_Manager::ICONS,
64
- 'fa4compatibility' => 'item_icon_icon',
65
- 'default' => [
66
- 'value' => 'fas fa-star',
67
- 'library' => 'fa-solid',
68
- ],
69
- 'condition' => [
70
  'eae_icon!' => '',
71
- 'icon_type' => 'icon'
72
  ],
73
- ];
74
 
75
  $controls['image'] = [
76
  'label' => __( 'Custom Icon', 'wts-eae' ),
77
  'type' => Controls_Manager::MEDIA,
78
- 'dynamic' => [
79
- 'active' => true,
80
- ],
81
  'label_block' => true,
82
  'condition' => [
83
  'eae_icon!' => '',
84
- 'icon_type' => 'image'
85
  ],
86
  ];
87
 
88
  $controls['text'] = [
89
  'label' => __( 'Text', 'wts-eae' ),
90
  'type' => Controls_Manager::TEXT,
91
- 'dynamic' => [
92
- 'active' => true,
93
- ],
94
  'label_block' => false,
95
  'condition' => [
96
  'eae_icon!' => '',
97
- 'icon_type' => 'text'
98
  ],
99
  ];
100
 
@@ -102,7 +90,7 @@ class Group_Control_Icon extends Group_Control_Base {
102
  'label' => __( 'View', 'wts-eae' ),
103
  'type' => Controls_Manager::SELECT,
104
  'options' => [
105
- 'global' => __( 'Global', 'wts-eae'),
106
  'default' => __( 'Default', 'wts-eae' ),
107
  'stacked' => __( 'Stacked', 'wts-eae' ),
108
  'framed' => __( 'Framed', 'wts-eae' ),
@@ -110,7 +98,7 @@ class Group_Control_Icon extends Group_Control_Base {
110
  'default' => 'global',
111
  'condition' => [
112
  'eae_icon!' => '',
113
- 'icon_new!' => ''
114
  ],
115
  ];
116
 
@@ -118,15 +106,15 @@ class Group_Control_Icon extends Group_Control_Base {
118
  'label' => __( 'Shape', 'wts-eae' ),
119
  'type' => Controls_Manager::SELECT,
120
  'options' => [
121
- 'global' => __( 'Global', 'wts-eae'),
122
  'circle' => __( 'Circle', 'wts-eae' ),
123
  'square' => __( 'Square', 'wts-eae' ),
124
  ],
125
  'default' => 'global',
126
  'condition' => [
127
- 'view!' => 'default',
128
  'eae_icon!' => '',
129
- 'icon_new!' => ''
130
  ],
131
  ];
132
 
@@ -136,9 +124,9 @@ class Group_Control_Icon extends Group_Control_Base {
136
  protected function get_default_options() {
137
  return [
138
  'popover' => [
139
- 'starter_title' => _x( 'Icon', 'wts-eae' ),
140
  'starter_name' => 'eae_icon',
141
- ]
142
  ];
143
  }
144
  }
21
  protected function init_fields() {
22
  $controls = [];
23
 
 
24
  $controls['icon_type'] = [
25
  'type' => Controls_Manager::CHOOSE,
26
  'label' => __( 'Type', 'wts-eae' ),
42
  'label_block' => false,
43
  'toggle' => false,
44
  'condition' => [
45
+ 'eae_icon!' => '',
46
+ ],
47
  ];
48
 
49
+ $controls['icon_new'] = [
50
+ 'label' => __( 'Icon', 'wts-eae' ),
51
+ 'type' => Controls_Manager::ICONS,
52
+ 'fa4compatibility' => 'item_icon_icon',
53
+ 'default' => [
54
+ 'value' => 'fas fa-star',
55
+ 'library' => 'fa-solid',
56
+ ],
57
+ 'condition' => [
 
 
 
 
 
 
 
 
 
 
 
58
  'eae_icon!' => '',
59
+ 'icon_type' => 'icon',
60
  ],
61
+ ];
62
 
63
  $controls['image'] = [
64
  'label' => __( 'Custom Icon', 'wts-eae' ),
65
  'type' => Controls_Manager::MEDIA,
66
+ 'dynamic' => [
67
+ 'active' => true,
68
+ ],
69
  'label_block' => true,
70
  'condition' => [
71
  'eae_icon!' => '',
72
+ 'icon_type' => 'image',
73
  ],
74
  ];
75
 
76
  $controls['text'] = [
77
  'label' => __( 'Text', 'wts-eae' ),
78
  'type' => Controls_Manager::TEXT,
79
+ 'dynamic' => [
80
+ 'active' => true,
81
+ ],
82
  'label_block' => false,
83
  'condition' => [
84
  'eae_icon!' => '',
85
+ 'icon_type' => 'text',
86
  ],
87
  ];
88
 
90
  'label' => __( 'View', 'wts-eae' ),
91
  'type' => Controls_Manager::SELECT,
92
  'options' => [
93
+ 'global' => __( 'Global', 'wts-eae' ),
94
  'default' => __( 'Default', 'wts-eae' ),
95
  'stacked' => __( 'Stacked', 'wts-eae' ),
96
  'framed' => __( 'Framed', 'wts-eae' ),
98
  'default' => 'global',
99
  'condition' => [
100
  'eae_icon!' => '',
101
+ 'icon_new!' => '',
102
  ],
103
  ];
104
 
106
  'label' => __( 'Shape', 'wts-eae' ),
107
  'type' => Controls_Manager::SELECT,
108
  'options' => [
109
+ 'global' => __( 'Global', 'wts-eae' ),
110
  'circle' => __( 'Circle', 'wts-eae' ),
111
  'square' => __( 'Square', 'wts-eae' ),
112
  ],
113
  'default' => 'global',
114
  'condition' => [
115
+ 'view!' => 'default',
116
  'eae_icon!' => '',
117
+ 'icon_new!' => '',
118
  ],
119
  ];
120
 
124
  protected function get_default_options() {
125
  return [
126
  'popover' => [
127
+ 'starter_title' => __( 'Icon', 'wts-eae' ),
128
  'starter_name' => 'eae_icon',
129
+ ],
130
  ];
131
  }
132
  }
controls/group/icon_timeline.php CHANGED
@@ -21,7 +21,6 @@ class Group_Control_Icon_Timeline extends Group_Control_Base {
21
  protected function init_fields() {
22
  $controls = [];
23
 
24
-
25
  $controls['icon_type'] = [
26
  'type' => Controls_Manager::CHOOSE,
27
  'label' => __( 'Type', 'wts-eae' ),
@@ -43,18 +42,17 @@ class Group_Control_Icon_Timeline extends Group_Control_Base {
43
  'label_block' => false,
44
  'toggle' => false,
45
  'condition' => [
46
- 'eae_icon!' => ''
47
- ]
48
  ];
49
 
50
-
51
  $controls['icon'] = [
52
  'label' => __( 'Icon', 'wts-eae' ),
53
  'type' => Controls_Manager::ICON,
54
  'default' => 'fa fa-star',
55
  'condition' => [
56
  'eae_icon!' => '',
57
- 'icon_type' => 'icon'
58
  ],
59
  ];
60
 
@@ -64,7 +62,7 @@ class Group_Control_Icon_Timeline extends Group_Control_Base {
64
  'label_block' => false,
65
  'condition' => [
66
  'eae_icon!' => '',
67
- 'icon_type' => 'image'
68
  ],
69
  ];
70
 
@@ -74,25 +72,10 @@ class Group_Control_Icon_Timeline extends Group_Control_Base {
74
  'label_block' => false,
75
  'condition' => [
76
  'eae_icon!' => '',
77
- 'icon_type' => 'text'
78
  ],
79
  ];
80
 
81
- /*$controls['view'] = [
82
- 'label' => __( 'View', 'wts-eae' ),
83
- 'type' => Controls_Manager::SELECT,
84
- 'options' => [
85
- //'default' => __( 'Default', 'wts-eae' ),
86
- 'stacked' => __( 'Stacked', 'wts-eae' ),
87
- //'framed' => __( 'Framed', 'wts-eae' ),
88
- ],
89
- 'default' => 'stacked',
90
- 'condition' => [
91
- 'eae_icon!' => '',
92
- 'icon!' => ''
93
- ],
94
- ];*/
95
-
96
  $controls['shape'] = [
97
  'label' => __( 'Shape', 'wts-eae' ),
98
  'type' => Controls_Manager::SELECT,
@@ -103,7 +86,7 @@ class Group_Control_Icon_Timeline extends Group_Control_Base {
103
  'default' => 'circle',
104
  'condition' => [
105
  'eae_icon!' => '',
106
- 'icon!' => ''
107
  ],
108
  ];
109
 
@@ -113,10 +96,10 @@ class Group_Control_Icon_Timeline extends Group_Control_Base {
113
  protected function get_default_options() {
114
  return [
115
  'popover' => [
116
- 'starter_title' => _x( 'Icon', 'wts-eae' ),
117
  'starter_name' => 'eae_icon',
118
  'starter_value' => 'yes',
119
- ]
120
  ];
121
  }
122
  }
21
  protected function init_fields() {
22
  $controls = [];
23
 
 
24
  $controls['icon_type'] = [
25
  'type' => Controls_Manager::CHOOSE,
26
  'label' => __( 'Type', 'wts-eae' ),
42
  'label_block' => false,
43
  'toggle' => false,
44
  'condition' => [
45
+ 'eae_icon!' => '',
46
+ ],
47
  ];
48
 
 
49
  $controls['icon'] = [
50
  'label' => __( 'Icon', 'wts-eae' ),
51
  'type' => Controls_Manager::ICON,
52
  'default' => 'fa fa-star',
53
  'condition' => [
54
  'eae_icon!' => '',
55
+ 'icon_type' => 'icon',
56
  ],
57
  ];
58
 
62
  'label_block' => false,
63
  'condition' => [
64
  'eae_icon!' => '',
65
+ 'icon_type' => 'image',
66
  ],
67
  ];
68
 
72
  'label_block' => false,
73
  'condition' => [
74
  'eae_icon!' => '',
75
+ 'icon_type' => 'text',
76
  ],
77
  ];
78
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  $controls['shape'] = [
80
  'label' => __( 'Shape', 'wts-eae' ),
81
  'type' => Controls_Manager::SELECT,
86
  'default' => 'circle',
87
  'condition' => [
88
  'eae_icon!' => '',
89
+ 'icon!' => '',
90
  ],
91
  ];
92
 
96
  protected function get_default_options() {
97
  return [
98
  'popover' => [
99
+ 'starter_title' => __( 'Icon', 'wts-eae' ),
100
  'starter_name' => 'eae_icon',
101
  'starter_value' => 'yes',
102
+ ],
103
  ];
104
  }
105
  }
controls/hover-transition.php CHANGED
@@ -127,7 +127,7 @@ class Hover_Transition extends Base_Data_Control {
127
  'hvr-shadow-radial' => __( 'Shadow Radial', 'wts-eae' ),
128
  'hvr-box-shadow-outset' => __( 'Box Shadow Outset', 'wts-eae' ),
129
  'hvr-box-shadow-inset' => __( 'Box Shadow Inset', 'wts-eae' ),
130
- ]
131
 
132
  ];
133
  }
@@ -137,7 +137,7 @@ class Hover_Transition extends Base_Data_Control {
137
 
138
  public function enqueue() {
139
 
140
- wp_register_script( 'eae-control', EAE_URL . 'assets/js/editor.js', [ 'jquery' ], '1.0.0' );
141
  wp_enqueue_script( 'eae-control' );
142
  }
143
 
@@ -145,24 +145,24 @@ class Hover_Transition extends Base_Data_Control {
145
  public function content_template() {
146
  $control_uid = $this->get_control_uid();
147
  ?>
148
- <div class="elementor-control-field">
149
- <label for="<?php echo $control_uid; ?>" class="elementor-control-title">{{{ data.label }}}</label>
150
- <div class="elementor-control-input-wrapper">
151
- <select id="<?php echo $control_uid; ?>" data-setting="{{ data.name }}">
152
- <option value=""><?php echo __( 'None', 'wts-eae' ); ?></option>
153
  <?php foreach ( self::get_transitions() as $transitions_group_name => $transitions_group ) : ?>
154
- <optgroup label="<?php echo $transitions_group_name; ?>">
155
  <?php foreach ( $transitions_group as $transition_name => $transition_title ) : ?>
156
- <option value="<?php echo $transition_name; ?>"><?php echo $transition_title; ?></option>
157
  <?php endforeach; ?>
158
- </optgroup>
159
  <?php endforeach; ?>
160
- </select>
161
- </div>
162
- </div>
163
- <# if ( data.description ) { #>
164
- <div class="elementor-control-field-description">{{{ data.description }}}</div>
165
- <# } #>
166
  <?php
167
  }
168
  }
127
  'hvr-shadow-radial' => __( 'Shadow Radial', 'wts-eae' ),
128
  'hvr-box-shadow-outset' => __( 'Box Shadow Outset', 'wts-eae' ),
129
  'hvr-box-shadow-inset' => __( 'Box Shadow Inset', 'wts-eae' ),
130
+ ],
131
 
132
  ];
133
  }
137
 
138
  public function enqueue() {
139
 
140
+ wp_register_script( 'eae-control', EAE_URL . 'assets/js/editor.js', [ 'jquery' ], '1.0.0', true );
141
  wp_enqueue_script( 'eae-control' );
142
  }
143
 
145
  public function content_template() {
146
  $control_uid = $this->get_control_uid();
147
  ?>
148
+ <div class="elementor-control-field">
149
+ <label for="<?php echo esc_attr( $control_uid ); ?>" class="elementor-control-title">{{{ data.label }}}</label>
150
+ <div class="elementor-control-input-wrapper">
151
+ <select id="<?php echo esc_attr( $control_uid ); ?>" data-setting="{{ data.name }}">
152
+ <option value=""><?php echo esc_html__( 'None', 'wts-eae' ); ?></option>
153
  <?php foreach ( self::get_transitions() as $transitions_group_name => $transitions_group ) : ?>
154
+ <optgroup label="<?php echo esc_attr( $transitions_group_name ); ?>">
155
  <?php foreach ( $transitions_group as $transition_name => $transition_title ) : ?>
156
+ <option value="<?php echo esc_attr( $transition_name ); ?>"><?php echo esc_attr( $transition_title ); ?></option>
157
  <?php endforeach; ?>
158
+ </optgroup>
159
  <?php endforeach; ?>
160
+ </select>
161
+ </div>
162
+ </div>
163
+ <# if ( data.description ) { #>
164
+ <div class="elementor-control-field-description">{{{ data.description }}}</div>
165
+ <# } #>
166
  <?php
167
  }
168
  }
elementor-addon-elements.php CHANGED
@@ -4,59 +4,58 @@
4
  * Plugin Name: Elementor Addon Elements
5
  * Description: Elementor Addon Elements comes with 25+ widgets and extensions to extend the power of Elementor Page Builder.
6
  * Plugin URI: https://www.elementoraddons.com/elements-addon-elements/
7
- * Author: WP Vibes
8
- * Version: 1.11.1
9
  * Author URI: https://wpvibes.com/
10
- * Elementor tested up to: 3.2.0
11
  * Elementor Pro tested up to: 3.2.0
12
  * Text Domain: wts-eae
13
  * @package WTS_EAE
14
  */
15
- define('EAE_FILE', __FILE__);
16
- define('EAE_URL', plugins_url('/', __FILE__));
17
- define('EAE_PATH', plugin_dir_path(__FILE__));
18
- define('EAE_SCRIPT_SUFFIX', defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min');
19
- define('EAE_VERSION', '1.11.1');
20
 
21
 
22
- if (!function_exists('_is_elementor_installed')) {
23
 
24
- function _is_elementor_installed()
25
- {
26
- $file_path = 'elementor/elementor.php';
27
  $installed_plugins = get_plugins();
28
 
29
- return isset($installed_plugins[$file_path]);
30
  }
31
  }
32
 
33
- if (!function_exists('is_plugin_active')) {
34
- include_once(ABSPATH . 'wp-admin/includes/plugin.php');
35
  }
36
- if (!function_exists('wpv_eae')) {
37
  // Create a helper function for easy SDK access.
38
- function wpv_eae()
39
- {
40
-
41
  global $wpv_eae;
42
 
43
- if (!isset($wpv_eae)) {
44
  // Include Freemius SDK.
45
- require_once dirname(__FILE__) . '/freemius/start.php';
46
- $wpv_eae = fs_dynamic_init(array(
47
- 'id' => '4599',
48
- 'slug' => 'addon-elements-for-elementor-page-builder',
49
- 'type' => 'plugin',
50
- 'public_key' => 'pk_086ef046431438c9a172bb55fde28',
51
- 'is_premium' => false,
52
- 'has_addons' => false,
53
- 'has_paid_plans' => false,
54
- 'menu' => array(
55
- 'slug' => 'eae-settings',
56
- 'account' => false,
57
- 'contact' => false,
58
- ),
59
- ));
 
 
60
  }
61
 
62
  return $wpv_eae;
@@ -65,19 +64,18 @@ if (!function_exists('wpv_eae')) {
65
  // Init Freemius.
66
  wpv_eae();
67
  // Signal that SDK was initiated.
68
- do_action('wpv_eae_loaded');
69
  }
70
  /**
71
  * Handles plugin activation actions.
72
  *
73
  * @since 1.0
74
  */
75
- function eae_activate()
76
- {
77
- if (!is_plugin_active('elementor/elementor.php')) {
78
  return;
79
  }
80
  \Elementor\Plugin::$instance->files_manager->clear_cache();
81
  }
82
- register_activation_hook(__FILE__, 'eae_activate');
83
  require_once 'inc/bootstrap.php';
4
  * Plugin Name: Elementor Addon Elements
5
  * Description: Elementor Addon Elements comes with 25+ widgets and extensions to extend the power of Elementor Page Builder.
6
  * Plugin URI: https://www.elementoraddons.com/elements-addon-elements/
7
+ * Author: WPVibes
8
+ * Version: 1.11.2
9
  * Author URI: https://wpvibes.com/
10
+ * Elementor tested up to: 3.1.0
11
  * Elementor Pro tested up to: 3.2.0
12
  * Text Domain: wts-eae
13
  * @package WTS_EAE
14
  */
15
+ define( 'EAE_FILE', __FILE__ );
16
+ define( 'EAE_URL', plugins_url( '/', __FILE__ ) );
17
+ define( 'EAE_PATH', plugin_dir_path( __FILE__ ) );
18
+ define( 'EAE_SCRIPT_SUFFIX', defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min' );
19
+ define( 'EAE_VERSION', '1.11.2' );
20
 
21
 
22
+ if ( ! function_exists( '_is_elementor_installed' ) ) {
23
 
24
+ function _is_elementor_installed() {
25
+ $file_path = 'elementor/elementor.php';
 
26
  $installed_plugins = get_plugins();
27
 
28
+ return isset( $installed_plugins[ $file_path ] );
29
  }
30
  }
31
 
32
+ if ( ! function_exists( 'is_plugin_active' ) ) {
33
+ include_once ABSPATH . 'wp-admin/includes/plugin.php';
34
  }
35
+ if ( ! function_exists( 'wpv_eae' ) ) {
36
  // Create a helper function for easy SDK access.
37
+ function wpv_eae() {
 
 
38
  global $wpv_eae;
39
 
40
+ if ( ! isset( $wpv_eae ) ) {
41
  // Include Freemius SDK.
42
+ require_once dirname( __FILE__ ) . '/freemius/start.php';
43
+ $wpv_eae = fs_dynamic_init(
44
+ [
45
+ 'id' => '4599',
46
+ 'slug' => 'addon-elements-for-elementor-page-builder',
47
+ 'type' => 'plugin',
48
+ 'public_key' => 'pk_086ef046431438c9a172bb55fde28',
49
+ 'is_premium' => false,
50
+ 'has_addons' => false,
51
+ 'has_paid_plans' => false,
52
+ 'menu' => [
53
+ 'slug' => 'eae-settings',
54
+ 'account' => false,
55
+ 'contact' => false,
56
+ ],
57
+ ]
58
+ );
59
  }
60
 
61
  return $wpv_eae;
64
  // Init Freemius.
65
  wpv_eae();
66
  // Signal that SDK was initiated.
67
+ do_action( 'wpv_eae_loaded' );
68
  }
69
  /**
70
  * Handles plugin activation actions.
71
  *
72
  * @since 1.0
73
  */
74
+ function eae_activate() {
75
+ if ( ! is_plugin_active( 'elementor/elementor.php' ) ) {
 
76
  return;
77
  }
78
  \Elementor\Plugin::$instance->files_manager->clear_cache();
79
  }
80
+ register_activation_hook( __FILE__, 'eae_activate' );
81
  require_once 'inc/bootstrap.php';
inc/admin/Settings.php CHANGED
@@ -5,31 +5,21 @@
5
  * Date: 10/01/18
6
  * Time: 12:18 PM
7
  */
8
-
9
  namespace WTS_EAE;
10
 
11
-
12
  class Settings extends Settings_Page {
13
 
14
  const PAGE_ID = 'eae';
15
 
16
  public function __construct() {
17
  parent::__construct();
18
- add_action('wp_ajax_eae_save_gmap',[ $this, 'eae_save_gmap_key']);
19
- add_action('wp_ajax_eae_elements_save',[ $this, 'eae_save_elements']);
20
  add_action( 'admin_menu', [ $this, 'register_admin_menu' ], 20 );
21
  }
22
 
23
  public function register_admin_menu() {
24
- /*add_menu_page(
25
- __( 'Elementor Addon Elements', 'wts-eae' ),
26
- __( 'Elementor Addon Elements', 'wts-eae' ),
27
- 'manage_options',
28
- self::PAGE_ID,
29
- [ $this, 'display_settings_page' ],
30
- '',
31
- 99
32
- );*/
33
  add_menu_page(
34
  __( 'Elementor Addons Elements', 'wts-eae' ),
35
  __( 'Elementor Addons Elements', 'wts-eae' ),
@@ -41,33 +31,36 @@ class Settings extends Settings_Page {
41
  );
42
  }
43
 
44
- public function eae_save_gmap_key(){
45
- $key = sanitize_text_field($_REQUEST['mapkey']);
46
 
47
- if(current_user_can( 'manage_options' ) && check_ajax_referer('eae_ajax_nonce','nonce')){
48
- update_option('wts_eae_gmap_key',$key);
49
  }
50
- }
 
 
 
 
51
 
52
- public function eae_save_elements(){
53
  $elements = $_REQUEST['eae_items'];
54
- $items = [];
55
- for($i=0; $i <count($elements);$i++){
56
- if($elements[$i]['enabled'] === 'true' || $elements[$i]['enabled'] === 'false'){
57
- $items[$elements[$i]['key']] = $elements[$i]['enabled'];
 
58
  }
59
- }
60
-
61
- if(current_user_can( 'manage_options' ) && check_ajax_referer('eae_ajax_nonce','nonce')) {
62
- update_option('wts_eae_elements',$items);
63
  }
64
 
65
- }
 
 
 
66
 
67
- public function display_settings_page_new(){
68
  ?>
69
  <div id="eae-settings"></div>
70
- <?php
71
  }
72
 
73
  protected function get_page_title() {
@@ -78,42 +71,42 @@ class Settings extends Settings_Page {
78
 
79
  return [
80
  'general' => [
81
- 'label' => __( 'General', 'wts-eae' ),
82
  'sections' => [
83
  'general' => [
84
  'fields' => [
85
  'gmap_key' => [
86
- 'label' => __( 'Google Map Key', 'wts-eae' ),
87
  'field_args' => [
88
  'type' => 'text',
89
  'desc' => '<a href="https://developers.google.com/maps/documentation/javascript/get-api-key" target="_blank">'
90
- . __('Click Here', 'wts-eae') .
91
- '</a> to generate API KEY'
92
  ],
93
- ]
94
- ]
95
- ]
96
- ]
97
  ],
98
  'other_products' => [
99
- 'label' => __('Other Products', 'wts-eae'),
100
- 'sections' => [
101
  'other_products' => [
102
- 'fields' => [
103
  'aepro' => [
104
  'field_args' => [
105
- 'type' => 'raw_html',
106
- 'html' => $this->get_aepro_promo()
107
- ]
108
- ]
109
- ]
110
- ]
111
- ]
112
- ]
113
  ];
114
  }
115
 
116
- function get_aepro_promo(){
117
 
118
  $promo_html = '<h2>AnyWhere Elementor Pro</h2>';
119
 
@@ -145,11 +138,11 @@ class Settings extends Settings_Page {
145
  </p></div>
146
 
147
  <div class="logo-box">
148
- <img src="'.EAE_URL.'assets/aep.png" title="AnyWhere Elementor Pro" />
149
  </div> ';
150
 
151
  return $promo_html;
152
  }
153
  }
154
 
155
- new Settings();
5
  * Date: 10/01/18
6
  * Time: 12:18 PM
7
  */
 
8
  namespace WTS_EAE;
9
 
 
10
  class Settings extends Settings_Page {
11
 
12
  const PAGE_ID = 'eae';
13
 
14
  public function __construct() {
15
  parent::__construct();
16
+ add_action( 'wp_ajax_eae_save_gmap', [ $this, 'eae_save_gmap_key' ] );
17
+ add_action( 'wp_ajax_eae_elements_save', [ $this, 'eae_save_elements' ] );
18
  add_action( 'admin_menu', [ $this, 'register_admin_menu' ], 20 );
19
  }
20
 
21
  public function register_admin_menu() {
22
+
 
 
 
 
 
 
 
 
23
  add_menu_page(
24
  __( 'Elementor Addons Elements', 'wts-eae' ),
25
  __( 'Elementor Addons Elements', 'wts-eae' ),
31
  );
32
  }
33
 
34
+ public function eae_save_gmap_key() {
35
+ $key = sanitize_text_field( $_REQUEST['mapkey'] );
36
 
37
+ if ( current_user_can( 'manage_options' ) && check_ajax_referer( 'eae_ajax_nonce', 'nonce' ) ) {
38
+ update_option( 'wts_eae_gmap_key', $key );
39
  }
40
+ }
41
+
42
+ public function eae_save_elements() {
43
+
44
+ check_ajax_referer( 'eae_ajax_nonce', 'nonce' );
45
 
 
46
  $elements = $_REQUEST['eae_items'];
47
+ $items = [];
48
+ $count = count( $elements );
49
+ for ( $i = 0; $i < $count; $i++ ) {
50
+ if ( $elements[ $i ]['enabled'] === 'true' || $elements[ $i ]['enabled'] === 'false' ) {
51
+ $items[ $elements[ $i ]['key'] ] = $elements[ $i ]['enabled'];
52
  }
 
 
 
 
53
  }
54
 
55
+ if ( current_user_can( 'manage_options' ) && check_ajax_referer( 'eae_ajax_nonce', 'nonce' ) ) {
56
+ update_option( 'wts_eae_elements', $items );
57
+ }
58
+ }
59
 
60
+ public function display_settings_page_new() {
61
  ?>
62
  <div id="eae-settings"></div>
63
+ <?php
64
  }
65
 
66
  protected function get_page_title() {
71
 
72
  return [
73
  'general' => [
74
+ 'label' => __( 'General', 'wts-eae' ),
75
  'sections' => [
76
  'general' => [
77
  'fields' => [
78
  'gmap_key' => [
79
+ 'label' => __( 'Google Map Key', 'wts-eae' ),
80
  'field_args' => [
81
  'type' => 'text',
82
  'desc' => '<a href="https://developers.google.com/maps/documentation/javascript/get-api-key" target="_blank">'
83
+ . __( 'Click Here', 'wts-eae' ) .
84
+ '</a> to generate API KEY',
85
  ],
86
+ ],
87
+ ],
88
+ ],
89
+ ],
90
  ],
91
  'other_products' => [
92
+ 'label' => __( 'Other Products', 'wts-eae' ),
93
+ 'sections' => [
94
  'other_products' => [
95
+ 'fields' => [
96
  'aepro' => [
97
  'field_args' => [
98
+ 'type' => 'raw_html',
99
+ 'html' => $this->get_aepro_promo(),
100
+ ],
101
+ ],
102
+ ],
103
+ ],
104
+ ],
105
+ ],
106
  ];
107
  }
108
 
109
+ public function get_aepro_promo() {
110
 
111
  $promo_html = '<h2>AnyWhere Elementor Pro</h2>';
112
 
138
  </p></div>
139
 
140
  <div class="logo-box">
141
+ <img src="' . EAE_URL . 'assets/aep.png" title="AnyWhere Elementor Pro" />
142
  </div> ';
143
 
144
  return $promo_html;
145
  }
146
  }
147
 
148
+ new Settings();
inc/admin/admin-notice.php CHANGED
@@ -2,54 +2,49 @@
2
 
3
  namespace WTS_EAE;
4
 
5
- class Admin_Notice
6
- {
7
- public static $instance;
8
-
9
- public $module_manager;
10
-
11
- public static function get_instance()
12
- {
13
- if (!isset(self::$instance)) {
14
- self::$instance = new self;
15
  }
16
 
17
  return self::$instance;
18
  }
19
 
20
- public function __construct()
21
- {
22
- //add_filter('eae/admin_notices', [$this,'add_notice']);
23
- add_filter('eae/admin_notices', [$this,'eae_notice']);
24
- add_filter('eae/admin_notices', [$this,'fv_notice']);
25
- //$this->eae_notice();
26
- //$this->fv_download_box();
27
- }
28
 
29
- function eae_notice($notice){
30
- $check_review = get_option('eae_review');
31
 
32
- if (!$check_review) {
33
  $review = [
34
- 'installed' => current_time('yy/m/d'),
35
- 'status' => '',
36
  ];
37
 
38
- update_option('eae_review', $review);
39
  }
40
 
41
- $check_review = get_option('eae_review');
42
 
43
  $start = $check_review['installed'];
44
- $end = current_time('yy/m/d');
45
 
46
- $days = $this->dateDiff($start, $end);
47
 
48
  $usage = [];
49
- $usage = get_option('elementor_controls_usage');
50
 
51
- if ($usage) {
52
- if (array_key_exists('wp-page', $usage)) {
53
  $usage = $usage['wp-page'];
54
  } else {
55
  $usage = [];
@@ -58,65 +53,60 @@ class Admin_Notice
58
  $usage = [];
59
  }
60
 
61
- $eae_widget = ['eae-info-circle', 'eae-dual-button', 'wts-flipbox', 'wts-splittext', 'wts-modal-popup', 'eae-timeline', 'wts-AnimatedText', 'wts-ab-image', 'wts-gmap', 'eae-progress-bar', 'wts-textseparator', 'wts-postlist', 'eae-content-switcher', 'eae-filterableGallery', 'wts-shape-separator', 'wts-twitter', 'wts-pricetable'];
62
  $widget_count = 0;
63
- foreach ($eae_widget as $key => $value) {
64
- if (array_key_exists($value, $usage)) {
65
- $widget_count = $widget_count + $usage[$value]['count'];
66
  }
67
- }
68
-
69
- if ($days < 11 && $widget_count < 5) {
 
 
 
 
 
 
 
70
  return $notice;
71
- }
72
-
73
- $remind_later = get_transient('eae_remind_later');
74
- //echo 'remind '. $remind_later;
75
- //echo '<br/>review '. $check_review['status'];
76
-
77
- if ($check_review['status'] === '' && $remind_later == '') {
78
- $notice[] = 'eae_review';
79
- return $notice;
80
- }
81
- }
82
- function dateDiff($start, $end)
83
- {
84
- $start_time = strtotime($start);
85
- $end_time = strtotime($end);
86
- $datediff = $end_time - $start_time;
87
- return round($datediff / 86400);
88
  }
89
 
90
- function fv_notice($notice){
91
- $download_later = get_transient('fv_download_later');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
 
93
- $fv_downloaded = get_option('fv_downloaded');
94
-
95
- if($fv_downloaded === 'done' || $download_later){
 
96
  return $notice;
97
- }
98
-
99
-
100
- if (!is_plugin_active('form-vibes/form-vibes.php')) {
101
- $query = array(
102
- 'post_type' => 'page',
103
- 'post_status' => 'publish',
104
- 'meta_query' => array(
105
- array(
106
- 'key' => '_elementor_data',
107
- 'value' => '"widgetType":"form"',
108
- 'compare' => 'LIKE',
109
- ),
110
- ),
111
- );
112
- //print_r($query);
113
- $data = new \WP_Query($query);
114
-
115
- if (count($data->posts) <= 0) {
116
- return $notice;
117
- }
118
- $notice[] = 'fv_download_box';
119
- return $notice;
120
  }
121
- }
122
- }
2
 
3
  namespace WTS_EAE;
4
 
5
+ class Admin_Notice {
6
+
7
+ public static $instance;
8
+
9
+ public $module_manager;
10
+
11
+ public static function get_instance() {
12
+ if ( ! isset( self::$instance ) ) {
13
+ self::$instance = new self();
 
14
  }
15
 
16
  return self::$instance;
17
  }
18
 
19
+ public function __construct() {
20
+ add_filter( 'eae/admin_notices', [ $this, 'eae_notice' ] );
21
+ add_filter( 'eae/admin_notices', [ $this, 'fv_notice' ] );
22
+ }
 
 
 
 
23
 
24
+ public function eae_notice( $notice ) {
25
+ $check_review = get_option( 'eae_review' );
26
 
27
+ if ( ! $check_review ) {
28
  $review = [
29
+ 'installed' => current_time( 'yy/m/d' ),
30
+ 'status' => '',
31
  ];
32
 
33
+ update_option( 'eae_review', $review );
34
  }
35
 
36
+ $check_review = get_option( 'eae_review' );
37
 
38
  $start = $check_review['installed'];
39
+ $end = current_time( 'yy/m/d' );
40
 
41
+ $days = $this->dateDiff( $start, $end );
42
 
43
  $usage = [];
44
+ $usage = get_option( 'elementor_controls_usage' );
45
 
46
+ if ( $usage ) {
47
+ if ( array_key_exists( 'wp-page', $usage ) ) {
48
  $usage = $usage['wp-page'];
49
  } else {
50
  $usage = [];
53
  $usage = [];
54
  }
55
 
56
+ $eae_widget = [ 'eae-info-circle', 'eae-dual-button', 'wts-flipbox', 'wts-splittext', 'wts-modal-popup', 'eae-timeline', 'wts-AnimatedText', 'wts-ab-image', 'wts-gmap', 'eae-progress-bar', 'wts-textseparator', 'wts-postlist', 'eae-content-switcher', 'eae-filterableGallery', 'wts-shape-separator', 'wts-twitter', 'wts-pricetable' ];
57
  $widget_count = 0;
58
+ foreach ( $eae_widget as $key => $value ) {
59
+ if ( array_key_exists( $value, $usage ) ) {
60
+ $widget_count = $widget_count + $usage[ $value ]['count'];
61
  }
62
+ }
63
+
64
+ if ( $days < 11 && $widget_count < 5 ) {
65
+ return $notice;
66
+ }
67
+
68
+ $remind_later = get_transient( 'eae_remind_later' );
69
+
70
+ if ( $check_review['status'] === '' && $remind_later === '' ) {
71
+ $notice[] = 'eae_review';
72
  return $notice;
73
+ }
74
+ }
75
+ public function dateDiff( $start, $end ) {
76
+ $start_time = strtotime( $start );
77
+ $end_time = strtotime( $end );
78
+ $datediff = $end_time - $start_time;
79
+ return round( $datediff / 86400 );
 
 
 
 
 
 
 
 
 
 
80
  }
81
 
82
+ public function fv_notice( $notice ) {
83
+ $download_later = get_transient( 'fv_download_later' );
84
+
85
+ $fv_downloaded = get_option( 'fv_downloaded' );
86
+
87
+ if ( $fv_downloaded === 'done' || $download_later ) {
88
+ return $notice;
89
+ }
90
+
91
+ if ( ! is_plugin_active( 'form-vibes/form-vibes.php' ) ) {
92
+ $query = [
93
+ 'post_type' => 'page',
94
+ 'post_status' => 'publish',
95
+ 'meta_query' => [
96
+ [
97
+ 'key' => '_elementor_data',
98
+ 'value' => '"widgetType":"form"',
99
+ 'compare' => 'LIKE',
100
+ ],
101
+ ],
102
+ ];
103
+ $data = new \WP_Query( $query );
104
 
105
+ if ( count( $data->posts ) <= 0 ) {
106
+ return $notice;
107
+ }
108
+ $notice[] = 'fv_download_box';
109
  return $notice;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
110
  }
111
+ }
112
+ }
inc/admin/controls.php CHANGED
@@ -18,11 +18,11 @@ class Settings_Controls {
18
  }
19
 
20
  $defaults = [
21
- 'type' => '',
22
  'placeholder' => '',
23
- 'classes' => [],
24
- 'std' => '',
25
- 'desc' => '',
26
  ];
27
 
28
  $field = array_merge( $defaults, $field );
@@ -46,15 +46,15 @@ class Settings_Controls {
46
  $field['classes'] = [ 'regular-text' ];
47
  }
48
  ?>
49
- <input type="<?php echo esc_attr( $field['type'] ); ?>" class="<?php echo esc_attr( implode( ' ', $field['classes'] ) ); ?>" id="<?php echo esc_attr( $field['id'] ); ?>" name="<?php echo esc_attr( $field['id'] ); ?>" value="<?php echo esc_attr( get_option( $field['id'], $field['std'] ) ); ?>"<?php echo ! empty( $field['placeholder'] ) ? ' placeholder="' . $field['placeholder'] . '"' : ''; ?> />
50
  <?php
51
  if ( ! empty( $field['sub_desc'] ) ) :
52
- echo $field['sub_desc'];
53
  endif;
54
  ?>
55
  <?php if ( ! empty( $field['desc'] ) ) : ?>
56
- <p class="description"><?php echo $field['desc']; ?></p>
57
- <?php
58
  endif;
59
  }
60
 
@@ -66,16 +66,16 @@ class Settings_Controls {
66
  private static function _checkbox( array $field ) {
67
  ?>
68
  <label>
69
- <input type="<?php echo esc_attr( $field['type'] ); ?>" id="<?php echo esc_attr( $field['id'] ); ?>" name="<?php echo esc_attr( $field['id'] ); ?>" value="<?php echo $field['value']; ?>"<?php checked( $field['value'], get_option( $field['id'], $field['std'] ) ); ?> />
70
  <?php
71
  if ( ! empty( $field['sub_desc'] ) ) :
72
- echo $field['sub_desc'];
73
  endif;
74
  ?>
75
  </label>
76
  <?php if ( ! empty( $field['desc'] ) ) : ?>
77
- <p class="description"><?php echo $field['desc']; ?></p>
78
- <?php
79
  endif;
80
  }
81
 
@@ -91,15 +91,15 @@ class Settings_Controls {
91
  }
92
 
93
  foreach ( $field['options'] as $option_key => $option_value ) :
94
- ?>
95
  <label>
96
- <input type="checkbox" name="<?php echo $field['id']; ?>[]" value="<?php echo $option_key; ?>"<?php checked( in_array( $option_key, $old_value ), true ); ?> />
97
- <?php echo $option_value; ?>
98
  </label><br />
99
  <?php endforeach; ?>
100
  <?php if ( ! empty( $field['desc'] ) ) : ?>
101
- <p class="description"><?php echo $field['desc']; ?></p>
102
- <?php
103
  endif;
104
  }
105
 
@@ -113,17 +113,17 @@ class Settings_Controls {
113
  ?>
114
  <select name="<?php echo esc_attr( $field['id'] ); ?>">
115
  <?php if ( ! empty( $field['show_select'] ) ) : ?>
116
- <option value="">— <?php _e( 'Select', 'wts-eae' ); ?> —</option>
117
  <?php endif; ?>
118
 
119
  <?php foreach ( $field['options'] as $value => $label ) : ?>
120
- <option value="<?php echo esc_attr( $value ); ?>"<?php selected( $value, $old_value ); ?>><?php echo $label; ?></option>
121
  <?php endforeach; ?>
122
  </select>
123
 
124
  <?php if ( ! empty( $field['desc'] ) ) : ?>
125
- <p class="description"><?php echo $field['desc']; ?></p>
126
- <?php
127
  endif;
128
  }
129
 
@@ -136,16 +136,17 @@ class Settings_Controls {
136
  $defaults = [
137
  'exclude' => [],
138
  ];
139
- $field = array_merge( $defaults, $field );
140
 
141
  $post_types_objects = get_post_types(
142
  [
143
  'public' => true,
144
- ], 'objects'
 
145
  );
146
- $field['options'] = [];
147
  foreach ( $post_types_objects as $cpt_slug => $post_type ) {
148
- if ( in_array( $cpt_slug, $field['exclude'] ) ) {
149
  continue;
150
  }
151
 
@@ -164,11 +165,11 @@ class Settings_Controls {
164
  $defaults = [
165
  'exclude' => [],
166
  ];
167
- $field = array_merge( $defaults, $field );
168
 
169
  $field['options'] = [];
170
  foreach ( get_editable_roles() as $role_slug => $role_data ) {
171
- if ( in_array( $role_slug, $field['exclude'] ) ) {
172
  continue;
173
  }
174
 
@@ -188,16 +189,16 @@ class Settings_Controls {
188
  return;
189
  }
190
  ?>
191
- <div id="<?php echo $field['id']; ?>">
192
 
193
- <div><?php echo $field['html']; ?></div>
194
  <?php
195
  if ( ! empty( $field['sub_desc'] ) ) :
196
- echo $field['sub_desc'];
197
  endif;
198
  ?>
199
  <?php if ( ! empty( $field['desc'] ) ) : ?>
200
- <p class="description"><?php echo $field['desc']; ?></p>
201
  <?php endif; ?>
202
  </div>
203
  <?php
18
  }
19
 
20
  $defaults = [
21
+ 'type' => '',
22
  'placeholder' => '',
23
+ 'classes' => [],
24
+ 'std' => '',
25
+ 'desc' => '',
26
  ];
27
 
28
  $field = array_merge( $defaults, $field );
46
  $field['classes'] = [ 'regular-text' ];
47
  }
48
  ?>
49
+ <input type="<?php echo esc_attr( $field['type'] ); ?>" class="<?php echo esc_attr( implode( ' ', $field['classes'] ) ); ?>" id="<?php echo esc_attr( $field['id'] ); ?>" name="<?php echo esc_attr( $field['id'] ); ?>" value="<?php echo esc_attr( get_option( $field['id'], $field['std'] ) ); ?>"<?php echo esc_attr( ! empty( $field['placeholder'] ) ) ? ' placeholder="' . esc_attr( $field['placeholder'] ) . '"' : ''; ?> />
50
  <?php
51
  if ( ! empty( $field['sub_desc'] ) ) :
52
+ echo esc_attr( $field['sub_desc'] );
53
  endif;
54
  ?>
55
  <?php if ( ! empty( $field['desc'] ) ) : ?>
56
+ <p class="description"><?php echo esc_attr( $field['desc'] ); ?></p>
57
+ <?php
58
  endif;
59
  }
60
 
66
  private static function _checkbox( array $field ) {
67
  ?>
68
  <label>
69
+ <input type="<?php echo esc_attr( $field['type'] ); ?>" id="<?php echo esc_attr( $field['id'] ); ?>" name="<?php echo esc_attr( $field['id'] ); ?>" value="<?php echo esc_attr( $field['value'] ); ?>"<?php checked( $field['value'], get_option( $field['id'], $field['std'] ) ); ?> />
70
  <?php
71
  if ( ! empty( $field['sub_desc'] ) ) :
72
+ echo esc_attr( $field['sub_desc'] );
73
  endif;
74
  ?>
75
  </label>
76
  <?php if ( ! empty( $field['desc'] ) ) : ?>
77
+ <p class="description"><?php echo esc_attr( $field['desc'] ); ?></p>
78
+ <?php
79
  endif;
80
  }
81
 
91
  }
92
 
93
  foreach ( $field['options'] as $option_key => $option_value ) :
94
+ ?>
95
  <label>
96
+ <input type="checkbox" name="<?php echo esc_attr( $field['id'] ); ?>[]" value="<?php echo esc_attr( $option_key ); ?>"<?php checked( in_array( $option_key, $old_value, true ), true ); ?> />
97
+ <?php echo esc_attr( $option_value ); ?>
98
  </label><br />
99
  <?php endforeach; ?>
100
  <?php if ( ! empty( $field['desc'] ) ) : ?>
101
+ <p class="description"><?php echo esc_attr( $field['desc'] ); ?></p>
102
+ <?php
103
  endif;
104
  }
105
 
113
  ?>
114
  <select name="<?php echo esc_attr( $field['id'] ); ?>">
115
  <?php if ( ! empty( $field['show_select'] ) ) : ?>
116
+ <option value="">— <?php echo esc_html__( 'Select', 'wts-eae' ); ?> —</option>
117
  <?php endif; ?>
118
 
119
  <?php foreach ( $field['options'] as $value => $label ) : ?>
120
+ <option value="<?php echo esc_attr( $value ); ?>"<?php selected( $value, $old_value ); ?>><?php echo esc_attr( $label ); ?></option>
121
  <?php endforeach; ?>
122
  </select>
123
 
124
  <?php if ( ! empty( $field['desc'] ) ) : ?>
125
+ <p class="description"><?php echo esc_attr( $field['desc'] ); ?></p>
126
+ <?php
127
  endif;
128
  }
129
 
136
  $defaults = [
137
  'exclude' => [],
138
  ];
139
+ $field = array_merge( $defaults, $field );
140
 
141
  $post_types_objects = get_post_types(
142
  [
143
  'public' => true,
144
+ ],
145
+ 'objects'
146
  );
147
+ $field['options'] = [];
148
  foreach ( $post_types_objects as $cpt_slug => $post_type ) {
149
+ if ( in_array( $cpt_slug, $field['exclude'], true ) ) {
150
  continue;
151
  }
152
 
165
  $defaults = [
166
  'exclude' => [],
167
  ];
168
+ $field = array_merge( $defaults, $field );
169
 
170
  $field['options'] = [];
171
  foreach ( get_editable_roles() as $role_slug => $role_data ) {
172
+ if ( in_array( $role_slug, $field['exclude'], true ) ) {
173
  continue;
174
  }
175
 
189
  return;
190
  }
191
  ?>
192
+ <div id="<?php echo esc_attr( $field['id'] ); ?>">
193
 
194
+ <div><?php echo esc_attr( $field['html'] ); ?></div>
195
  <?php
196
  if ( ! empty( $field['sub_desc'] ) ) :
197
+ echo esc_attr( $field['sub_desc'] );
198
  endif;
199
  ?>
200
  <?php if ( ! empty( $field['desc'] ) ) : ?>
201
+ <p class="description"><?php echo esc_attr( $field['desc'] ); ?></p>
202
  <?php endif; ?>
203
  </div>
204
  <?php
inc/admin/settings-page.php CHANGED
@@ -29,7 +29,7 @@ abstract class Settings_Page {
29
  * @since 1.5.0
30
  * @access public
31
  */
32
- public final static function get_url() {
33
  return admin_url( 'admin.php?page=' . static::PAGE_ID );
34
  }
35
 
@@ -45,7 +45,7 @@ abstract class Settings_Page {
45
  * @since 1.5.0
46
  * @access public
47
  */
48
- public final function get_tabs() {
49
  $this->ensure_tabs();
50
 
51
  return $this->tabs;
@@ -55,7 +55,7 @@ abstract class Settings_Page {
55
  * @since 1.5.0
56
  * @access public
57
  */
58
- public final function add_tab( $tab_id, array $tab_args = [] ) {
59
  $this->ensure_tabs();
60
 
61
  if ( isset( $this->tabs[ $tab_id ] ) ) {
@@ -74,7 +74,7 @@ abstract class Settings_Page {
74
  * @since 1.5.0
75
  * @access public
76
  */
77
- public final function add_section( $tab_id, $section_id, array $section_args = [] ) {
78
  $this->ensure_tabs();
79
 
80
  if ( ! isset( $this->tabs[ $tab_id ] ) ) {
@@ -98,7 +98,7 @@ abstract class Settings_Page {
98
  * @since 1.5.0
99
  * @access public
100
  */
101
- public final function add_field( $tab_id, $section_id, $field_id, array $field_args ) {
102
  $this->ensure_tabs();
103
 
104
  if ( ! isset( $this->tabs[ $tab_id ] ) ) {
@@ -123,7 +123,7 @@ abstract class Settings_Page {
123
  * @since 1.5.0
124
  * @access public
125
  */
126
- public final function add_fields( $tab_id, $section_id, array $fields ) {
127
  foreach ( $fields as $field_id => $field ) {
128
  $this->add_field( $tab_id, $section_id, $field_id, $field );
129
  }
@@ -133,7 +133,7 @@ abstract class Settings_Page {
133
  * @since 1.5.0
134
  * @access public
135
  */
136
- public final function register_settings_fields() {
137
  $controls_class_name = __NAMESPACE__ . '\Settings_Controls';
138
 
139
  $tabs = $this->get_tabs();
@@ -183,77 +183,6 @@ abstract class Settings_Page {
183
  }
184
  }
185
 
186
- /**
187
- * @since 1.5.0
188
- * @access public
189
- */
190
- public function display_settings_page() {
191
- $tabs = $this->get_tabs();
192
- ?>
193
- <div class="wrap">
194
- <h1><?php echo $this->get_page_title(); ?></h1>
195
- <div id="elementor-settings-tabs-wrapper" class="nav-tab-wrapper">
196
- <?php
197
- foreach ( $tabs as $tab_id => $tab ) {
198
- if ( empty( $tab['sections'] ) ) {
199
- continue;
200
- }
201
-
202
- $active_class = '';
203
-
204
- if ( 'general' === $tab_id ) {
205
- $active_class = ' nav-tab-active';
206
- }
207
-
208
- echo "<a id='elementor-settings-tab-$tab_id' class='nav-tab$active_class' href='#tab-$tab_id'>$tab[label]</a>";
209
- }
210
- ?>
211
- </div>
212
- <form id="elementor-settings-form" method="post" action="options.php">
213
- <?php
214
- settings_fields( static::PAGE_ID );
215
-
216
- foreach ( $tabs as $tab_id => $tab ) {
217
- if ( empty( $tab['sections'] ) ) {
218
- continue;
219
- }
220
-
221
- $active_class = '';
222
-
223
- if ( 'general' === $tab_id ) {
224
- $active_class = ' elementor-active';
225
- }
226
-
227
- echo "<div id='tab-$tab_id' class='elementor-settings-form-page$active_class'>";
228
-
229
- foreach ( $tab['sections'] as $section_id => $section ) {
230
- $full_section_id = 'elementor_' . $section_id . '_section';
231
-
232
- if ( ! empty( $section['label'] ) ) {
233
- echo "<h2>$section[label]</h2>";
234
- }
235
-
236
- if ( ! empty( $section['callback'] ) ) {
237
- $section['callback']();
238
- }
239
-
240
- echo '<table class="form-table">';
241
-
242
- do_settings_fields( static::PAGE_ID, $full_section_id );
243
-
244
- echo '</table>';
245
- }
246
-
247
- echo '</div>';
248
- }
249
-
250
- submit_button();
251
- ?>
252
- </form>
253
- </div><!-- /.wrap -->
254
- <?php
255
- }
256
-
257
  /**
258
  * @since 1.5.0
259
  * @access private
29
  * @since 1.5.0
30
  * @access public
31
  */
32
+ final public static function get_url() {
33
  return admin_url( 'admin.php?page=' . static::PAGE_ID );
34
  }
35
 
45
  * @since 1.5.0
46
  * @access public
47
  */
48
+ final public function get_tabs() {
49
  $this->ensure_tabs();
50
 
51
  return $this->tabs;
55
  * @since 1.5.0
56
  * @access public
57
  */
58
+ final public function add_tab( $tab_id, array $tab_args = [] ) {
59
  $this->ensure_tabs();
60
 
61
  if ( isset( $this->tabs[ $tab_id ] ) ) {
74
  * @since 1.5.0
75
  * @access public
76
  */
77
+ final public function add_section( $tab_id, $section_id, array $section_args = [] ) {
78
  $this->ensure_tabs();
79
 
80
  if ( ! isset( $this->tabs[ $tab_id ] ) ) {
98
  * @since 1.5.0
99
  * @access public
100
  */
101
+ final public function add_field( $tab_id, $section_id, $field_id, array $field_args ) {
102
  $this->ensure_tabs();
103
 
104
  if ( ! isset( $this->tabs[ $tab_id ] ) ) {
123
  * @since 1.5.0
124
  * @access public
125
  */
126
+ final public function add_fields( $tab_id, $section_id, array $fields ) {
127
  foreach ( $fields as $field_id => $field ) {
128
  $this->add_field( $tab_id, $section_id, $field_id, $field );
129
  }
133
  * @since 1.5.0
134
  * @access public
135
  */
136
+ final public function register_settings_fields() {
137
  $controls_class_name = __NAMESPACE__ . '\Settings_Controls';
138
 
139
  $tabs = $this->get_tabs();
183
  }
184
  }
185
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
186
  /**
187
  * @since 1.5.0
188
  * @access private
inc/bootstrap.php CHANGED
@@ -6,82 +6,68 @@ use Elementor;
6
  use WTS_EAE\Classes\Helper;
7
  use const EAE_PATH;
8
 
9
- class Plugin
10
- {
11
 
12
  public static $instance;
13
 
14
  public $module_manager;
15
 
16
- public static $helper = null;
17
  private static $show_notice = true;
18
 
19
- public static function get_instance()
20
- {
21
- if (!isset(self::$instance)) {
22
- self::$instance = new self;
23
  }
24
 
25
  return self::$instance;
26
  }
27
 
28
- public function __construct()
29
- {
30
- //die('---');
31
  $this->register_autoloader();
32
  self::$helper = new Helper();
33
 
34
- add_action('elementor/init', [$this, 'eae_elementor_init'], -10);
35
- add_action('elementor/elements/categories_registered', [$this, 'register_category']);
36
- add_action('wp_enqueue_scripts', [$this, 'eae_scripts']);
37
- add_action('elementor/editor/wp_head', [$this, 'eae_editor_enqueue_scripts']);
38
- add_action('elementor/controls/controls_registered', [$this, 'register_controls']);
39
- add_action('plugins_loaded', [$this, '_plugins_loaded']);
40
- //add_action('elementor/widgets/widgets_registered','widgets_registered');
41
- add_action('admin_enqueue_scripts', [$this, 'eae_admin_scripts']);
42
 
43
  $this->_includes();
44
 
45
-
46
-
47
  $this->module_manager = new Managers\Module_Manager();
48
 
49
  $wpv_notice = [];
50
 
51
- $wpv_notice = apply_filters('eae/admin_notices', $wpv_notice);
52
-
53
- if($wpv_notice){
54
- add_action('admin_init',[$this, $wpv_notice[0] ],10);
55
- }
56
- //$this->eae_review();
57
- //$this->fv_download_box();
58
- }
59
 
60
- function eae_elementor_init()
61
- {
 
62
  }
63
 
64
- public function _plugins_loaded()
65
- {
66
-
67
 
68
- if (!did_action('elementor/loaded')) {
 
69
  /* TO DO */
70
- add_action('admin_notices', array($this, 'wts_eae_pro_fail_load'));
71
 
72
  return;
73
  }
74
  $elementor_version_required = '3.0';
75
 
76
-
77
  // Check for required Elementor version
78
- if (!version_compare(ELEMENTOR_VERSION, $elementor_version_required, '>=')) {
79
- add_action('admin_notices', array($this, 'elementor_requried_version_fail'));
80
  return;
81
  }
82
 
83
  // WPML Compatibility
84
- if (is_plugin_active('sitepress-multilingual-cms/sitepress.php') && is_plugin_active('wpml-string-translation/plugin.php')) {
85
  require_once EAE_PATH . 'wpml/modules/class-wpml-eae-animated-text.php';
86
  require_once EAE_PATH . 'wpml/modules/class-wpml-eae-gmap.php';
87
  require_once EAE_PATH . 'wpml/modules/class-wpml-eae-filterable-gallery.php';
@@ -93,384 +79,313 @@ class Plugin
93
  }
94
  }
95
 
96
- public function register_category($elements)
97
- {
98
 
99
  \Elementor\Plugin::instance()->elements_manager->add_category(
100
  'wts-eae',
101
  [
102
  'title' => 'Elementor Addon Elements',
103
- 'icon' => 'font'
104
  ],
105
  1
106
  );
107
-
108
- //require_once EAE_PATH.'modules/animated-gradient.php';
109
- //require_once EAE_PATH.'modules/particles.php';
110
- //require_once EAE_PATH.'modules/bg-slider.php';
111
  }
112
 
113
- public function _includes()
114
- {
115
- if (is_admin()) {
116
  require_once EAE_PATH . 'inc/admin/settings-page.php';
117
  require_once EAE_PATH . 'inc/admin/controls.php';
118
  require_once EAE_PATH . 'inc/admin/Settings.php';
119
  require_once EAE_PATH . 'inc/admin/admin-notice.php';
120
-
121
  $admin_notice = new Admin_Notice();
122
  }
123
  }
124
- public function register_controls(Elementor\Controls_Manager $controls_manager)
125
- {
126
 
127
  require_once EAE_PATH . 'controls/group/icon.php';
128
  require_once EAE_PATH . 'controls/group/icon_timeline.php';
129
  require_once EAE_PATH . 'controls/group/grid-control.php';
130
 
131
- //$controls_manager->register_control( self::BPEL_HOVER_TRANSITION, new \BPEL\Controls\Hover_Transition() );
132
-
133
- $controls_manager->add_group_control('eae-icon', new \WTS_EAE\Controls\Group\Group_Control_Icon());
134
 
135
- $controls_manager->add_group_control('eae-icon-timeline', new \WTS_EAE\Controls\Group\Group_Control_Icon_Timeline());
136
 
137
- $controls_manager->add_group_control('eae-grid', new \WTS_EAE\Controls\Group\Group_Control_Grid());
138
  }
139
- function eae_admin_scripts()
140
- {
141
  $screen = get_current_screen();
142
 
143
- wp_enqueue_style('eae-admin-css', EAE_URL . 'assets/css/eae-admin.css');
144
 
145
- if ($screen->id == 'toplevel_page_eae-settings') {
146
- add_action('admin_print_scripts', [$this, 'eae_disable_admin_notices']);
147
 
148
- wp_enqueue_script('eae-admin', EAE_URL . 'assets/js/admin.js', ['wp-components'], '1.0', true);
149
 
150
  $modules = self::$helper->get_eae_modules();
151
 
152
- wp_localize_script('eae-admin', 'eaeGlobalVar', array(
153
- 'site_url' => site_url(),
154
- 'eae_dir' => EAE_URL,
155
- 'ajax_url' => admin_url('admin-ajax.php'),
156
- 'map_key' => get_option('wts_eae_gmap_key'),
157
- 'eae_elements' => $modules,
158
- 'eae_version' => EAE_VERSION,
159
- 'nonce' => wp_create_nonce('eae_ajax_nonce')
160
- ));
 
 
 
 
161
  }
162
  }
163
 
164
- function eae_disable_admin_notices()
165
- {
166
  global $wp_filter;
167
- if (is_user_admin()) {
168
- if (isset($wp_filter['user_admin_notices'])) {
169
- unset($wp_filter['user_admin_notices']);
170
  }
171
- } elseif (isset($wp_filter['admin_notices'])) {
172
- unset($wp_filter['admin_notices']);
173
  }
174
- if (isset($wp_filter['all_admin_notices'])) {
175
- unset($wp_filter['all_admin_notices']);
176
  }
177
  }
178
 
179
- function eae_scripts()
180
- {
181
- wp_enqueue_style('eae-css', EAE_URL . 'assets/css/eae' . EAE_SCRIPT_SUFFIX . '.css');
182
 
183
  /* chart js file */
184
- wp_register_script('eae-chart', EAE_URL . 'assets/js/Chart.bundle' . EAE_SCRIPT_SUFFIX . '.js');
185
- wp_register_script('eae-data-table', EAE_URL. 'assets/lib/tablesorter/tablesorter.js');
186
- wp_register_script('eae-lottie', EAE_URL. 'assets/lib/lottie/lottie'. EAE_SCRIPT_SUFFIX. '.js');
187
-
188
 
189
  /* animated text css and js file*/
 
190
 
191
-
192
- wp_register_script('animated-main', EAE_URL . 'assets/js/animated-main' . EAE_SCRIPT_SUFFIX . '.js', array('jquery'), '1.0', true);
193
-
194
- wp_enqueue_script('eae-main', EAE_URL . 'assets/js/eae' . EAE_SCRIPT_SUFFIX . '.js', array(
195
- 'jquery',
196
- ), '1.0', true);
197
- if (is_plugin_active('elementor/elementor.php')) {
198
- wp_localize_script('eae-main', 'eae', array(
199
- 'ajaxurl' => admin_url('admin-ajax.php'),
200
- 'current_url' => base64_encode(self::$helper->get_current_url_non_paged()),
201
- 'breakpoints' => Elementor\Core\Responsive\Responsive::get_breakpoints()
202
- ));
 
 
 
 
 
 
 
203
  }
204
- wp_register_script('eae-particles', EAE_URL . 'assets/js/particles' . EAE_SCRIPT_SUFFIX . '.js', array('jquery'), '1.0', true);
205
-
206
- wp_register_style('vegas-css', EAE_URL . 'assets/lib/vegas/vegas' . EAE_SCRIPT_SUFFIX . '.css');
207
- wp_register_script('vegas', EAE_URL . 'assets/lib/vegas/vegas' . EAE_SCRIPT_SUFFIX . '.js', array('jquery'), '2.4.0', true);
208
-
209
- wp_register_script('wts-magnific', EAE_URL . 'assets/lib/magnific' . EAE_SCRIPT_SUFFIX . '.js', array('jquery'), '1.9', true);
210
- wp_register_script('wts-isotope', EAE_URL . 'assets/lib/isotope/isotope.pkgd' . EAE_SCRIPT_SUFFIX . '.js', array('jquery'), '2.6.2', true);
211
- wp_register_script('wts-tilt', EAE_URL . 'assets/lib/tilt/tilt.jquery' . EAE_SCRIPT_SUFFIX . '.js', array('jquery'), '', true);
212
- if (is_plugin_active('elementor/elementor.php')) {
213
  wp_register_style(
214
  'font-awesome-5-all',
215
- ELEMENTOR_ASSETS_URL . 'lib/font-awesome/css/all.min.css'
 
 
216
  );
217
  wp_register_style(
218
  'font-awesome-4-shim',
219
- ELEMENTOR_ASSETS_URL . 'lib/font-awesome/css/v4-shims.min.css'
 
 
220
  );
221
  wp_register_script(
222
  'font-awesome-4-shim',
223
- ELEMENTOR_ASSETS_URL . 'lib/font-awesome/js/v4-shims.min.js'
 
 
 
224
  );
225
  }
226
- $map_key = get_option('wts_eae_gmap_key');
227
- if (isset($map_key) && $map_key != '') {
228
- wp_register_script('eae-gmap', 'https://maps.googleapis.com/maps/api/js?key=' . $map_key);
229
  }
230
 
231
- wp_register_script('pinit', '//assets.pinterest.com/js/pinit.js', '', '', false);
232
 
 
233
 
234
- wp_register_script('eae-stickyanything', EAE_URL . 'assets/js/stickyanything.js', array('jquery'), '1.1.2', true);
235
-
236
- $localize_data = array(
237
- 'plugin_url' => EAE_URL
238
- );
239
- wp_localize_script('eae-main', 'eae_editor', $localize_data);
240
  }
241
 
242
- function eae_editor_enqueue_scripts()
243
- {
244
-
245
- wp_enqueue_style('eae-icons', EAE_URL . 'assets/lib/eae-icons/style.css');
246
  }
247
 
248
- private function register_autoloader()
249
- {
250
- spl_autoload_register([__CLASS__, 'autoload']);
251
  }
252
 
253
- function autoload($class)
254
- {
255
-
256
- /*require_once EAE_PATH.'inc/helper.php';*/
257
- if (0 !== strpos($class, __NAMESPACE__)) {
258
  return;
259
  }
260
 
261
-
262
- if (!class_exists($class)) {
263
 
264
  $filename = strtolower(
265
  preg_replace(
266
- ['/^' . __NAMESPACE__ . '\\\/', '/([a-z])([A-Z])/', '/_/', '/\\\/'],
267
- ['', '$1-$2', '-', DIRECTORY_SEPARATOR],
268
  $class
269
  )
270
  );
271
 
272
  $filename = EAE_PATH . $filename . '.php';
273
 
274
- if (is_readable($filename)) {
275
- include($filename);
276
  }
277
  }
278
  }
279
- function elementor_requried_version_fail()
280
- {
281
- if (!current_user_can('update_plugins')) {
282
  return;
283
  }
284
  $elementor_version_required = '3.0.0';
285
- $file_path = 'elementor/elementor.php';
286
 
287
- $upgrade_link = wp_nonce_url(self_admin_url('update.php?action=upgrade-plugin&plugin=') . $file_path, 'upgrade-plugin_' . $file_path);
288
- $message = '<p>' . __('Elementor Addon Elements requires Elementor ' . $elementor_version_required . '. Please update Elementor to continue.', 'wts-eae') . '</p>';
289
- $message .= '<p>' . sprintf('<a href="%s" class="button-primary">%s</a>', $upgrade_link, __('Update Elementor Now', 'elementor-pro')) . '</p>';
290
 
291
- echo '<div class="error">' . $message . '</div>';
 
292
  }
293
 
294
- public function wts_eae_pro_fail_load()
295
- {
296
-
297
  $plugin = 'elementor/elementor.php';
298
 
299
- if (_is_elementor_installed()) {
300
- if (!current_user_can('activate_plugins')) {
301
  return;
302
  }
303
 
304
- $message = sprintf(__('<b>Elementor Addon Elements</b> is not working because you need to activate the <b>Elementor</b> plugin.', 'wts-eae'), '<strong>', '</strong>');
305
- $action_url = wp_nonce_url('plugins.php?action=activate&amp;plugin=' . $plugin . '&amp;plugin_status=all&amp;paged=1&amp;s', 'activate-plugin_' . $plugin);
306
- $button_label = __('Activate Elementor', 'wts-eae');
307
  } else {
308
- if (!current_user_can('install_plugins')) {
309
  return;
310
  }
311
- $message = sprintf(__('<b>Elementor Addon Elements</b> is not working because you need to install the <b>Elementor</b> plugin.', 'wts-eae'), '<strong>', '</strong>');
312
- $action_url = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=elementor'), 'install-plugin_elementor');
313
- $button_label = __('Install Elementor', 'wts-eae');
314
  }
315
 
316
  $button = '<p><a href="' . $action_url . '" class="button-primary">' . $button_label . '</a></p><p></p>';
317
 
318
- printf('<div class="%1$s"><p>%2$s</p>%3$s</div>', 'notice notice-error', $message, $button);
 
319
  }
320
- function dateDiff($start, $end)
321
- {
322
- $start_time = strtotime($start);
323
- $end_time = strtotime($end);
324
- $datediff = $end_time - $start_time;
325
- return round($datediff / 86400);
326
  }
327
- function eae_review()
328
- {
329
- if (isset($_GET['remind_later'])) {
330
- //add_action('admin_notices', [$this, 'eae_remind_later']);
331
  $this->eae_remind_later();
332
- } else if (isset($_GET['review_done'])) {
333
- //add_action('admin_notices', [$this, 'eae_review_done']);
334
  $this->eae_review_done();
335
  } else {
336
- add_action('admin_notices', [$this, 'eae_review_box']);
337
- }
338
-
339
- /*
340
- $check_review = get_option('eae_review');
341
-
342
- if (!$check_review) {
343
- $review = [
344
- 'installed' => current_time('yy/m/d'),
345
- 'status' => '',
346
- ];
347
-
348
- update_option('eae_review', $review);
349
- }
350
-
351
- $check_review = get_option('eae_review');
352
-
353
- $start = $check_review['installed'];
354
- $end = current_time('yy/m/d');
355
-
356
- $days = $this->dateDiff($start, $end);
357
-
358
- $usage = [];
359
- $usage = get_option('elementor_controls_usage');
360
-
361
- if ($usage) {
362
- if (array_key_exists('wp-page', $usage)) {
363
- $usage = $usage['wp-page'];
364
- } else {
365
- $usage = [];
366
- }
367
- } else {
368
- $usage = [];
369
- }
370
-
371
- $eae_widget = ['eae-info-circle', 'eae-dual-button', 'wts-flipbox', 'wts-splittext', 'wts-modal-popup', 'eae-timeline', 'wts-AnimatedText', 'wts-ab-image', 'wts-gmap', 'eae-progress-bar', 'wts-textseparator', 'wts-postlist', 'eae-content-switcher', 'eae-filterableGallery', 'wts-shape-separator', 'wts-twitter', 'wts-pricetable'];
372
- $widget_count = 0;
373
- foreach ($eae_widget as $key => $value) {
374
- if (array_key_exists($value, $usage)) {
375
- $widget_count = $widget_count + $usage[$value]['count'];
376
- }
377
- }
378
-
379
- if ($days < 11 || $widget_count < 5) {
380
- return;
381
  }
382
- if ($check_review['status'] === '' || $check_review['status'] === 'remind_later') {
383
- */
384
- //add_action('admin_notices', [$this, 'eae_review_box'], 10);
385
- //}
386
  }
387
 
388
- function eae_review_box($review)
389
- {
390
- /*$review = get_option('eae_review');
391
-
392
- $remind_later = get_transient('eae_remind_later');
393
- $status = $review['status'];
394
-
395
- if ($status !== 'done') {
396
- if ($status == '' && $remind_later == '' && self::$show_notice) {
397
- self::$show_notice = false;*/
398
- ?>
399
  <div class="notice notice-success is-dismissible">
400
- <p><?php _e('I hope you are enjoying using <b>Elementor Addon Elements</b>. Could you please do a BIG favor and give it a 5-star rating on WordPress.org ? <br/> Just to help us spread the word and boost our motivation. <br/><b>~ Anand Upadhyay</b>', 'wts-eae'); ?></p>
401
  <p>
402
- <a class="eae-notice-link" style="padding-right: 5px;" target="_blank" href="https://wordpress.org/support/plugin/addon-elements-for-elementor-page-builder/reviews/#new-post" class="button button-primary"><span class="dashicons dashicons-heart" style="text-decoration : none; margin : 0px 3px 0px 0px;"></span><?php _e('Ok, you deserve it!', 'wts-eae'); ?></a>
403
- <a class="eae-notice-link" style="padding-right: 5px;" href="<?php echo add_query_arg('remind_later', 'later'); ?>"><span class="dashicons dashicons-schedule" style="text-decoration : none; margin : 0px 3px;"></span><?php _e('May Be Later', 'wts-eae'); ?></a>
404
- <a class="eae-notice-link" style="padding-right: 5px;" href="<?php echo add_query_arg('review_done', 'done'); ?>"><span class="dashicons dashicons-smiley" style="text-decoration : none; margin : 0px 3px;"></span><?php _e('Already Done', 'wts-eae'); ?></a>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
405
  </p>
406
  </div>
407
  <?php
408
- //}
409
- //}
410
  }
411
 
412
 
413
- function eae_remind_later()
414
- {
415
- set_transient('eae_remind_later', 'show again', WEEK_IN_SECONDS);
416
  }
417
 
418
- function eae_review_done()
419
- {
420
- $review = get_option('eae_review');
421
- $review['status'] = 'done';
422
- $review['reviwed'] = current_time('yy/m/d');
423
- update_option('eae_review', $review, false);
424
  }
425
 
426
- function fv_download_box(){
427
- if (isset($_GET['fv_download_later'])) {
428
- //add_action('admin_notices', [$this, 'fv_download_later']);
429
  $this->fv_download_later();
430
- } else if (isset($_GET['fv_not_interested'])) {
431
- //add_action('admin_notices', [$this, 'fv_not_interested']);
432
  $this->fv_not_interested();
433
- } else {
434
- $this->check_form_used();
435
- }
436
- }
437
- function check_form_used()
438
- {
439
- /*if(!self::$show_notice){
440
- return;
441
  }
442
-
443
-
444
- $download_later = get_transient('fv_download_later');
445
-
446
- $fv_downloaded = get_option('fv_downloaded');
447
-
448
- if($fv_downloaded === 'done' || $download_later){
449
- return;
450
- }*/
451
- if (!is_plugin_active('form-vibes/form-vibes.php')) {
452
- add_action('admin_notices', [$this, 'fv_add_box'], 10);
453
  }
454
-
455
  }
456
 
457
- function fv_add_box()
458
- {
459
- $query = array(
460
  'post_type' => 'page',
461
  'post_status' => 'publish',
462
- 'meta_query' => array(
463
- array(
464
  'key' => '_elementor_data',
465
  'value' => '"widgetType":"form"',
466
  'compare' => 'LIKE',
467
- ),
468
- ),
469
- );
470
- //print_r($query);
471
- $data = new \WP_Query($query);
472
 
473
- if (count($data->posts) <= 0) {
474
  return;
475
  }
476
  self::$show_notice = false;
@@ -489,40 +404,41 @@ class Plugin
489
  </svg>
490
  </div>
491
  <div class="fv-add-content">
492
- <?php
493
- /*
494
  <div>
495
- <p><?php _e('Look like You are using elementor forms on your site.! <br/> Save elementor form submission to database!', 'wpv-fv'); ?></p>
496
- </div>
497
- <div>
498
- <?php echo '<a class="fv-download" href="'.admin_url().'plugin-install.php?s=form+vibes&tab=search&type=term">Download Now</a>' ?>
499
- </div> */
500
- ?>
501
- <div>
502
- <p><?php _e('I hope you are enjoying using <b>Elementor Addon Elements</b>. Here is another useful plugin by us - <b>Form Vibes</b>. <br/>If you are using Elementor Pro Form, then you can capture form submissions within WordPress Admin.', 'wpv-fv'); ?></p>
503
 
504
  <p>
505
- <?php echo '<a class="eae-notice-link" style="padding: 5px;" href="' . admin_url() . 'plugin-install.php?s=form+vibes&tab=search&type=term">Download Now</a>' ?>
506
- <a class="eae-notice-link" style="padding: 5px;" href="<?php echo add_query_arg('fv_download_later', 'later'); ?>"><span class="dashicons dashicons-schedule" style="text-decoration : none; margin : 0px 3px;"></span><?php _e('May Be Later', 'wts-eae'); ?></a>
507
- <a class="eae-notice-link" style="padding: 5px;" href="<?php echo add_query_arg('fv_not_interested', 'done'); ?>"><span class="dashicons dashicons-smiley" style="text-decoration : none; margin : 0px 3px;"></span><?php _e('Not Interested', 'wts-eae'); ?></a>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
508
  </p>
509
  </div>
510
  </div>
511
  </div>
512
- <?php
513
  }
514
 
515
- function fv_download_later()
516
- {
517
- set_transient('fv_download_later', 'show again', WEEK_IN_SECONDS);
518
- }
519
-
520
- function fv_not_interested()
521
- {
522
- //set_transient( 'fv_review_done', 'Already Reviewed !', 3 * MONTH_IN_SECONDS );
523
 
524
- update_option('fv_downloaded', 'done', false);
525
- }
 
526
  }
527
 
528
  Plugin::get_instance();
6
  use WTS_EAE\Classes\Helper;
7
  use const EAE_PATH;
8
 
9
+ class Plugin {
10
+
11
 
12
  public static $instance;
13
 
14
  public $module_manager;
15
 
16
+ public static $helper = null;
17
  private static $show_notice = true;
18
 
19
+ public static function get_instance() {
20
+ if ( ! isset( self::$instance ) ) {
21
+ self::$instance = new self();
 
22
  }
23
 
24
  return self::$instance;
25
  }
26
 
27
+ public function __construct() {
 
 
28
  $this->register_autoloader();
29
  self::$helper = new Helper();
30
 
31
+ add_action( 'elementor/init', [ $this, 'eae_elementor_init' ], -10 );
32
+ add_action( 'elementor/elements/categories_registered', [ $this, 'register_category' ] );
33
+ add_action( 'wp_enqueue_scripts', [ $this, 'eae_scripts' ] );
34
+ add_action( 'elementor/editor/wp_head', [ $this, 'eae_editor_enqueue_scripts' ] );
35
+ add_action( 'elementor/controls/controls_registered', [ $this, 'register_controls' ] );
36
+ add_action( 'plugins_loaded', [ $this, '_plugins_loaded' ] );
37
+ add_action( 'admin_enqueue_scripts', [ $this, 'eae_admin_scripts' ] );
 
38
 
39
  $this->_includes();
40
 
 
 
41
  $this->module_manager = new Managers\Module_Manager();
42
 
43
  $wpv_notice = [];
44
 
45
+ $wpv_notice = apply_filters( 'eae/admin_notices', $wpv_notice );
 
 
 
 
 
 
 
46
 
47
+ if ( $wpv_notice ) {
48
+ add_action( 'admin_init', [ $this, $wpv_notice[0] ], 10 );
49
+ }
50
  }
51
 
52
+ public function eae_elementor_init() { }
 
 
53
 
54
+ public function _plugins_loaded() {
55
+ if ( ! did_action( 'elementor/loaded' ) ) {
56
  /* TO DO */
57
+ add_action( 'admin_notices', [ $this, 'wts_eae_pro_fail_load' ] );
58
 
59
  return;
60
  }
61
  $elementor_version_required = '3.0';
62
 
 
63
  // Check for required Elementor version
64
+ if ( ! version_compare( ELEMENTOR_VERSION, $elementor_version_required, '>=' ) ) {
65
+ add_action( 'admin_notices', [ $this, 'elementor_requried_version_fail' ] );
66
  return;
67
  }
68
 
69
  // WPML Compatibility
70
+ if ( is_plugin_active( 'sitepress-multilingual-cms/sitepress.php' ) && is_plugin_active( 'wpml-string-translation/plugin.php' ) ) {
71
  require_once EAE_PATH . 'wpml/modules/class-wpml-eae-animated-text.php';
72
  require_once EAE_PATH . 'wpml/modules/class-wpml-eae-gmap.php';
73
  require_once EAE_PATH . 'wpml/modules/class-wpml-eae-filterable-gallery.php';
79
  }
80
  }
81
 
82
+ public function register_category( $elements ) {
 
83
 
84
  \Elementor\Plugin::instance()->elements_manager->add_category(
85
  'wts-eae',
86
  [
87
  'title' => 'Elementor Addon Elements',
88
+ 'icon' => 'font',
89
  ],
90
  1
91
  );
 
 
 
 
92
  }
93
 
94
+ public function _includes() {
95
+ if ( is_admin() ) {
 
96
  require_once EAE_PATH . 'inc/admin/settings-page.php';
97
  require_once EAE_PATH . 'inc/admin/controls.php';
98
  require_once EAE_PATH . 'inc/admin/Settings.php';
99
  require_once EAE_PATH . 'inc/admin/admin-notice.php';
100
+
101
  $admin_notice = new Admin_Notice();
102
  }
103
  }
104
+ public function register_controls( Elementor\Controls_Manager $controls_manager ) {
 
105
 
106
  require_once EAE_PATH . 'controls/group/icon.php';
107
  require_once EAE_PATH . 'controls/group/icon_timeline.php';
108
  require_once EAE_PATH . 'controls/group/grid-control.php';
109
 
110
+ $controls_manager->add_group_control( 'eae-icon', new \WTS_EAE\Controls\Group\Group_Control_Icon() );
 
 
111
 
112
+ $controls_manager->add_group_control( 'eae-icon-timeline', new \WTS_EAE\Controls\Group\Group_Control_Icon_Timeline() );
113
 
114
+ $controls_manager->add_group_control( 'eae-grid', new \WTS_EAE\Controls\Group\Group_Control_Grid() );
115
  }
116
+ public function eae_admin_scripts() {
 
117
  $screen = get_current_screen();
118
 
119
+ wp_enqueue_style( 'eae-admin-css', EAE_URL . 'assets/css/eae-admin.css', [], '1.0', '' );
120
 
121
+ if ( $screen->id === 'toplevel_page_eae-settings' ) {
122
+ add_action( 'admin_print_scripts', [ $this, 'eae_disable_admin_notices' ] );
123
 
124
+ wp_enqueue_script( 'eae-admin', EAE_URL . 'assets/js/admin.js', [ 'wp-components' ], '1.0', true );
125
 
126
  $modules = self::$helper->get_eae_modules();
127
 
128
+ wp_localize_script(
129
+ 'eae-admin',
130
+ 'eaeGlobalVar',
131
+ [
132
+ 'site_url' => site_url(),
133
+ 'eae_dir' => EAE_URL,
134
+ 'ajax_url' => admin_url( 'admin-ajax.php' ),
135
+ 'map_key' => get_option( 'wts_eae_gmap_key' ),
136
+ 'eae_elements' => $modules,
137
+ 'eae_version' => EAE_VERSION,
138
+ 'nonce' => wp_create_nonce( 'eae_ajax_nonce' ),
139
+ ]
140
+ );
141
  }
142
  }
143
 
144
+ public function eae_disable_admin_notices() {
 
145
  global $wp_filter;
146
+ if ( is_user_admin() ) {
147
+ if ( isset( $wp_filter['user_admin_notices'] ) ) {
148
+ unset( $wp_filter['user_admin_notices'] );
149
  }
150
+ } elseif ( isset( $wp_filter['admin_notices'] ) ) {
151
+ unset( $wp_filter['admin_notices'] );
152
  }
153
+ if ( isset( $wp_filter['all_admin_notices'] ) ) {
154
+ unset( $wp_filter['all_admin_notices'] );
155
  }
156
  }
157
 
158
+ public function eae_scripts() {
159
+ wp_enqueue_style( 'eae-css', EAE_URL . 'assets/css/eae' . EAE_SCRIPT_SUFFIX . '.css', [], '1.0' );
 
160
 
161
  /* chart js file */
162
+ wp_register_script( 'eae-chart', EAE_URL . 'assets/js/Chart.bundle' . EAE_SCRIPT_SUFFIX . '.js', [], '1.0', true );
163
+ wp_register_script( 'eae-data-table', EAE_URL . 'assets/lib/tablesorter/tablesorter.js', [], '1.0', true );
164
+ wp_register_script( 'eae-lottie', EAE_URL . 'assets/lib/lottie/lottie' . EAE_SCRIPT_SUFFIX . '.js', [], '1.0', true );
 
165
 
166
  /* animated text css and js file*/
167
+ wp_register_script( 'animated-main', EAE_URL . 'assets/js/animated-main' . EAE_SCRIPT_SUFFIX . '.js', [ 'jquery' ], '1.0', true );
168
 
169
+ wp_enqueue_script(
170
+ 'eae-main',
171
+ EAE_URL . 'assets/js/eae' . EAE_SCRIPT_SUFFIX . '.js',
172
+ [
173
+ 'jquery',
174
+ ],
175
+ '1.0',
176
+ true
177
+ );
178
+ if ( is_plugin_active( 'elementor/elementor.php' ) ) {
179
+ wp_localize_script(
180
+ 'eae-main',
181
+ 'eae',
182
+ [
183
+ 'ajaxurl' => admin_url( 'admin-ajax.php' ),
184
+ 'current_url' => base64_encode( self::$helper->get_current_url_non_paged() ),
185
+ 'breakpoints' => Elementor\Core\Responsive\Responsive::get_breakpoints(),
186
+ ]
187
+ );
188
  }
189
+ wp_register_script( 'eae-particles', EAE_URL . 'assets/js/particles' . EAE_SCRIPT_SUFFIX . '.js', [ 'jquery' ], '1.0', true );
190
+ //wp_register_script( 'eae-tsparticles', EAE_URL . 'assets/js/tsparticles.js', [ 'jquery' ], '1.0', true );
191
+ wp_register_style( 'vegas-css', EAE_URL . 'assets/lib/vegas/vegas' . EAE_SCRIPT_SUFFIX . '.css', [], '1.0' );
192
+ wp_register_script( 'vegas', EAE_URL . 'assets/lib/vegas/vegas' . EAE_SCRIPT_SUFFIX . '.js', [ 'jquery' ], '2.4.0', true );
193
+
194
+ wp_register_script( 'wts-magnific', EAE_URL . 'assets/lib/magnific' . EAE_SCRIPT_SUFFIX . '.js', [ 'jquery' ], '1.9', true );
195
+ wp_register_script( 'wts-isotope', EAE_URL . 'assets/lib/isotope/isotope.pkgd' . EAE_SCRIPT_SUFFIX . '.js', [ 'jquery' ], '2.6.2', true );
196
+ wp_register_script( 'wts-tilt', EAE_URL . 'assets/lib/tilt/tilt.jquery' . EAE_SCRIPT_SUFFIX . '.js', [ 'jquery' ], '1.0', true );
197
+ if ( is_plugin_active( 'elementor/elementor.php' ) ) {
198
  wp_register_style(
199
  'font-awesome-5-all',
200
+ ELEMENTOR_ASSETS_URL . 'lib/font-awesome/css/all.min.css',
201
+ [],
202
+ '1.0'
203
  );
204
  wp_register_style(
205
  'font-awesome-4-shim',
206
+ ELEMENTOR_ASSETS_URL . 'lib/font-awesome/css/v4-shims.min.css',
207
+ [],
208
+ '1.0'
209
  );
210
  wp_register_script(
211
  'font-awesome-4-shim',
212
+ ELEMENTOR_ASSETS_URL . 'lib/font-awesome/js/v4-shims.min.js',
213
+ [],
214
+ '1.0',
215
+ true
216
  );
217
  }
218
+ $map_key = get_option( 'wts_eae_gmap_key' );
219
+ if ( isset( $map_key ) && $map_key !== '' ) {
220
+ wp_register_script( 'eae-gmap', 'https://maps.googleapis.com/maps/api/js?key=' . $map_key, [], '1.0', true );
221
  }
222
 
223
+ wp_register_script( 'pinit', '//assets.pinterest.com/js/pinit.js', [], '1.0', true );
224
 
225
+ wp_register_script( 'eae-stickyanything', EAE_URL . 'assets/js/stickyanything.js', [ 'jquery' ], '1.1.2', true );
226
 
227
+ $localize_data = [
228
+ 'plugin_url' => EAE_URL,
229
+ ];
230
+ wp_localize_script( 'eae-main', 'eae_editor', $localize_data );
 
 
231
  }
232
 
233
+ public function eae_editor_enqueue_scripts() {
234
+ wp_enqueue_style( 'eae-icons', EAE_URL . 'assets/lib/eae-icons/style.css', [], '1.0', '' );
 
 
235
  }
236
 
237
+ private function register_autoloader() {
238
+ spl_autoload_register( [ __CLASS__, 'autoload' ] );
 
239
  }
240
 
241
+ public function autoload( $class ) {
242
+ if ( 0 !== strpos( $class, __NAMESPACE__ ) ) {
 
 
 
243
  return;
244
  }
245
 
246
+ if ( ! class_exists( $class ) ) {
 
247
 
248
  $filename = strtolower(
249
  preg_replace(
250
+ [ '/^' . __NAMESPACE__ . '\\\/', '/([a-z])([A-Z])/', '/_/', '/\\\/' ],
251
+ [ '', '$1-$2', '-', DIRECTORY_SEPARATOR ],
252
  $class
253
  )
254
  );
255
 
256
  $filename = EAE_PATH . $filename . '.php';
257
 
258
+ if ( is_readable( $filename ) ) {
259
+ include $filename;
260
  }
261
  }
262
  }
263
+ public function elementor_requried_version_fail() {
264
+ if ( ! current_user_can( 'update_plugins' ) ) {
 
265
  return;
266
  }
267
  $elementor_version_required = '3.0.0';
268
+ $file_path = 'elementor/elementor.php';
269
 
270
+ $upgrade_link = wp_nonce_url( self_admin_url( 'update.php?action=upgrade-plugin&plugin=' ) . $file_path, 'upgrade-plugin_' . $file_path );
271
+ $message = '<p>' . sprintf( __( 'Elementor Addon Elements requires Elementor %s Please update Elementor to continue.', 'wts-eae' ), $elementor_version_required ) . '</p>';
272
+ $message .= '<p>' . sprintf( '<a href="%s" class="button-primary">%s</a>', $upgrade_link, __( 'Update Elementor Now', 'wts-eae' ) ) . '</p>';
273
 
274
+ //phpcs:ignore WordPress.WP.I18n.NonSingularStringLiteralText
275
+ printf( '<div class="%1$s">%2$s</div>', 'error', esc_attr__( $message, 'wts-eae' ) );
276
  }
277
 
278
+ public function wts_eae_pro_fail_load() {
 
 
279
  $plugin = 'elementor/elementor.php';
280
 
281
+ if ( _is_elementor_installed() ) {
282
+ if ( ! current_user_can( 'activate_plugins' ) ) {
283
  return;
284
  }
285
 
286
+ $message = esc_html__( 'Elementor Addon Elements is not working because you need to activate the Elementor plugin.', 'wts-eae' );
287
+ $action_url = wp_nonce_url( 'plugins.php?action=activate&amp;plugin=' . $plugin . '&amp;plugin_status=all&amp;paged=1&amp;s', 'activate-plugin_' . $plugin );
288
+ $button_label = __( 'Activate Elementor', 'wts-eae' );
289
  } else {
290
+ if ( ! current_user_can( 'install_plugins' ) ) {
291
  return;
292
  }
293
+ $message = esc_html__( 'Elementor Addon Elements is not working because you need to install the Elementor plugin.', 'wts-eae' );
294
+ $action_url = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=elementor' ), 'install-plugin_elementor' );
295
+ $button_label = __( 'Install Elementor', 'wts-eae' );
296
  }
297
 
298
  $button = '<p><a href="' . $action_url . '" class="button-primary">' . $button_label . '</a></p><p></p>';
299
 
300
+ //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
301
+ printf( '<div class="%1$s"><p>%2$s</p>%3$s</div>', 'notice notice-error', $message, $button );
302
  }
303
+ public function dateDiff( $start, $end ) {
304
+ $start_time = strtotime( $start );
305
+ $end_time = strtotime( $end );
306
+ $datediff = $end_time - $start_time;
307
+ return round( $datediff / 86400 );
 
308
  }
309
+ public function eae_review() {
310
+ if ( wp_verify_nonce( isset( $_GET['remind_later'] ) ) ) {
 
 
311
  $this->eae_remind_later();
312
+ } elseif ( wp_verify_nonce( isset( $_GET['review_done'] ) ) ) {
 
313
  $this->eae_review_done();
314
  } else {
315
+ add_action( 'admin_notices', [ $this, 'eae_review_box' ] );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
316
  }
 
 
 
 
317
  }
318
 
319
+ public function eae_review_box( $review ) {
320
+ ?>
 
 
 
 
 
 
 
 
 
321
  <div class="notice notice-success is-dismissible">
322
+ <p><?php esc_attr_e( 'I hope you are enjoying using <b>Elementor Addon Elements</b>. Could you please do a BIG favor and give it a 5-star rating on WordPress.org ? <br/> Just to help us spread the word and boost our motivation. <br/><b>~ Anand Upadhyay</b>', 'wts-eae' ); ?></p>
323
  <p>
324
+ <?php
325
+ printf(
326
+ '<a class="eae-notice-link" style="padding-right: 5px;" target="_blank" href="https://wordpress.org/support/plugin/addon-elements-for-elementor-page-builder/reviews/#new-post" class="button button-primary"><span class="dashicons dashicons-heart" style="text-decoration : none; margin : 0px 3px 0px 0px;"></span>%1$s</a>',
327
+ esc_html__( 'Ok, you deserve it!', 'wts-eae' )
328
+ );
329
+
330
+ printf(
331
+ '<a class="eae-notice-link" style="padding-right: 5px;" href="%1$s"><span class="dashicons dashicons-schedule" style="text-decoration : none; margin : 0px 3px;"></span>%2$s</a>',
332
+ esc_url( add_query_arg( 'remind_later', 'later' ) ),
333
+ esc_html__( 'May Be Later', 'wts-eae' ),
334
+ );
335
+
336
+ printf(
337
+ '<a class="eae-notice-link" style="padding-right: 5px;" href="%1$s"><span class="dashicons dashicons-smiley" style="text-decoration : none; margin : 0px 3px;"></span>%2$s</a>',
338
+ esc_url( add_query_arg( 'review_done', 'done' ) ),
339
+ esc_html__( 'Already Done', 'wts-eae' ),
340
+ );
341
+ ?>
342
  </p>
343
  </div>
344
  <?php
 
 
345
  }
346
 
347
 
348
+ public function eae_remind_later() {
349
+ set_transient( 'eae_remind_later', 'show again', WEEK_IN_SECONDS );
 
350
  }
351
 
352
+ public function eae_review_done() {
353
+ $review = get_option( 'eae_review' );
354
+ $review['status'] = 'done';
355
+ $review['reviwed'] = current_time( 'yy/m/d' );
356
+ update_option( 'eae_review', $review, false );
 
357
  }
358
 
359
+ public function fv_download_box() {
360
+ if ( wp_verify_nonce( isset( $_GET['fv_download_later'] ) ) ) {
 
361
  $this->fv_download_later();
362
+ } elseif ( wp_verify_nonce( isset( $_GET['fv_not_interested'] ) ) ) {
 
363
  $this->fv_not_interested();
364
+ } else {
365
+ $this->check_form_used();
 
 
 
 
 
 
366
  }
367
+ }
368
+ public function check_form_used() {
369
+ if ( ! is_plugin_active( 'form-vibes/form-vibes.php' ) ) {
370
+ add_action( 'admin_notices', [ $this, 'fv_add_box' ], 10 );
 
 
 
 
 
 
 
371
  }
 
372
  }
373
 
374
+ public function fv_add_box() {
375
+ $query = [
 
376
  'post_type' => 'page',
377
  'post_status' => 'publish',
378
+ 'meta_query' => [
379
+ [
380
  'key' => '_elementor_data',
381
  'value' => '"widgetType":"form"',
382
  'compare' => 'LIKE',
383
+ ],
384
+ ],
385
+ ];
386
+ $data = new \WP_Query( $query );
 
387
 
388
+ if ( count( $data->posts ) <= 0 ) {
389
  return;
390
  }
391
  self::$show_notice = false;
404
  </svg>
405
  </div>
406
  <div class="fv-add-content">
 
 
407
  <div>
408
+ <p><?php printf( 'I hope you are enjoying using <b>%1$s</b>. Here is another useful plugin by us - <b>%2$s</b>. <br/>If you are using Elementor Pro Form, then you can capture form submissions within WordPress Admin.', 'Elementor Addon Elements', 'Form Vibes' ); ?></p>
 
 
 
 
 
 
 
409
 
410
  <p>
411
+ <?php
412
+
413
+ printf(
414
+ '<a class="eae-notice-link" style="padding: 5px;" href=" %splugin-install.php?s=form+vibes&tab=search&type=term">Download Now</a>',
415
+ esc_url( admin_url() )
416
+ );
417
+ printf(
418
+ '<a class="eae-notice-link" style="padding-right: 5px;" href="%1$s"><span class="dashicons dashicons-schedule" style="text-decoration : none; margin : 0px 3px;"></span>%2$s</a>',
419
+ esc_url( add_query_arg( 'fv_download_later', 'later' ) ),
420
+ esc_html__( 'May Be Later', 'wts-eae' ),
421
+ );
422
+ printf(
423
+ '<a class="eae-notice-link" style="padding-right: 5px;" href="%1$s"><span class="dashicons dashicons-smiley" style="text-decoration : none; margin : 0px 3px;"></span>%2$s</a>',
424
+ esc_url( add_query_arg( 'fv_not_interested', 'done' ) ),
425
+ esc_html__( 'Not Interested', 'wts-eae' ),
426
+ );
427
+ ?>
428
  </p>
429
  </div>
430
  </div>
431
  </div>
432
+ <?php
433
  }
434
 
435
+ public function fv_download_later() {
436
+ set_transient( 'fv_download_later', 'show again', WEEK_IN_SECONDS );
437
+ }
 
 
 
 
 
438
 
439
+ public function fv_not_interested() {
440
+ update_option( 'fv_downloaded', 'done', false );
441
+ }
442
  }
443
 
444
  Plugin::get_instance();
managers/module-manager.php CHANGED
@@ -1,26 +1,23 @@
1
  <?php
2
  namespace WTS_EAE\Managers;
 
3
  use WTS_EAE\Classes\Helper;
4
 
5
  class Module_Manager {
6
  protected $modules = [];
7
  public function __construct() {
8
- $helper = new Helper();
9
- $this->modules = $helper->get_eae_modules() ;
10
 
11
- $this->modules = apply_filters('wts_eae_active_modules', $this->modules);
12
  // Todo:: apply filter for modules that depends on third party plugins
13
-
14
  foreach ( $this->modules as $key => $module_name ) {
15
- if($module_name['enabled'] == 'true' || trim($module_name['enabled']) === '' || $module_name['enabled'] == null){
16
  $class_name = str_replace( '-', ' ', $key );
17
- //$class_name = $module_name['Name'];
18
  $class_name = str_replace( ' ', '', ucwords( $class_name ) );
19
- $class_name = 'WTS_EAE' . '\\Modules\\' . $class_name . '\Module';
20
-
21
  $this->modules[ $module_name['name'] ] = $class_name::instance();
22
  }
23
-
24
  }
25
  }
26
- }
1
  <?php
2
  namespace WTS_EAE\Managers;
3
+
4
  use WTS_EAE\Classes\Helper;
5
 
6
  class Module_Manager {
7
  protected $modules = [];
8
  public function __construct() {
9
+ $helper = new Helper();
10
+ $this->modules = $helper->get_eae_modules();
11
 
12
+ $this->modules = apply_filters( 'wts_eae_active_modules', $this->modules );
13
  // Todo:: apply filter for modules that depends on third party plugins
 
14
  foreach ( $this->modules as $key => $module_name ) {
15
+ if ( $module_name['enabled'] == 'true' || trim( $module_name['enabled'] ) === '' || $module_name['enabled'] === null ) {
16
  $class_name = str_replace( '-', ' ', $key );
 
17
  $class_name = str_replace( ' ', '', ucwords( $class_name ) );
18
+ $class_name = 'WTS_EAE\\Modules\\' . $class_name . '\Module';
 
19
  $this->modules[ $module_name['name'] ] = $class_name::instance();
20
  }
 
21
  }
22
  }
23
+ }
modules/animated-gradient/module.php CHANGED
@@ -5,178 +5,165 @@ namespace WTS_EAE\Modules\AnimatedGradient;
5
  use Elementor\Controls_Manager;
6
  use Elementor\Repeater;
7
 
8
- class Module {
9
- private static $_instance = null;
10
-
11
- public function __construct()
12
- {
13
- add_action( 'elementor/element/after_section_end', [ $this, 'register_controls' ], 10, 3 );
14
- add_action( 'elementor/element/print_template', [ $this, '_print_template'],10,2);
15
- add_action( 'elementor/section/print_template', [ $this, '_print_template'],10,2);
16
- add_action( 'elementor/column/print_template', [ $this, '_print_template'],10,2);
17
- add_action( 'elementor/frontend/before_render', [ $this, '_before_render']);
18
- }
19
-
20
- public function register_controls($element, $section_id, $args){
21
- if ( ('section' === $element->get_name() && 'section_background' === $section_id) || ('column' === $element->get_name() && 'section_style' === $section_id)) {
22
-
23
- $element->start_controls_section(
24
- 'eae_animated_gradient',
25
- [
26
- 'tab' => Controls_Manager::TAB_STYLE,
27
- 'label' => __('EAE - Animated Gradient Background', 'wts-eae')
28
- ]
29
- );
30
- $element->add_control(
31
- 'eae_animated_gradient_enable',
32
- [
33
- 'type' => Controls_Manager::SWITCHER,
34
- 'label' => __('Enable', 'wts-eae'),
35
- 'default' => '',
36
- 'label_on' => __( 'Yes', 'wts-eae' ),
37
- 'label_off' => __( 'No', 'wts-eae' ),
38
- 'return_value' => 'yes',
39
- 'prefix_class' => 'eae-animated-gradient-',
40
- 'render_type' => 'template',
41
- ]
42
- );
43
- $element->add_control(
44
- 'gradient_background_angle',
45
- [
46
- 'label' => __( 'Angle', 'wts-eae' ),
47
- 'type' => Controls_Manager::SLIDER,
48
- 'size_units' => [ 'deg' ],
49
- 'range' => [
50
- 'deg' => [
51
- 'min' => -45,
52
- 'max' => 180,
53
- 'step' => 2,
54
- ],
55
- ],
56
- 'default' => [
57
- 'unit' => 'deg',
58
- 'size' => -45,
59
- ],
60
- 'selectors' => [
61
- '{{WRAPPER}} .box' => 'width: {{SIZE}}{{UNIT}};',
62
- ],
63
- 'condition' => [
64
- 'eae_animated_gradient_enable' => 'yes',
65
- ]
66
- ]
67
- );
68
- $repeater = new Repeater();
69
-
70
- $repeater->add_control(
71
- 'eae_animated_gradient_color',
72
- [
73
- 'label' => __('Add Color' , 'wts-eae'),
74
- 'type' => Controls_Manager::COLOR,
75
- ]
76
- );
77
-
78
- $element->add_control(
79
- 'gradient_color_list',
80
- [
81
- 'label' => __('Color' , 'wts-eae'),
82
- 'type' => Controls_Manager::REPEATER,
83
- 'fields' => $repeater->get_controls(),
84
- 'title_field' => 'Color {{{eae_animated_gradient_color}}}',
85
- 'show_label' => true,
86
-
87
- 'default' => [
88
- [
89
- 'eae_animated_gradient_color' => '#00a6d8'
90
- ],
91
- [
92
- 'eae_animated_gradient_color' => '#b800c9'
93
- ],
94
- [
95
- 'eae_animated_gradient_color' => '#e57600'
96
- ]
97
- ],
98
-
99
- /*'selectors' => [
100
- '{{WRAPPER}}' => 'background : linear-gradient({{gradient_background_angle.SIZE}}{{gradient_background_angle.UNIT}} );',
101
- ],*/
102
-
103
- 'condition' => [
104
- 'eae_animated_gradient_enable' => 'yes',
105
- ]
106
- ]
107
- );
108
-
109
-
110
-
111
-
112
- $element->end_controls_section();
113
- }
114
- }
115
-
116
- public function _before_render($element){
117
- if($element->get_name() != 'section' && $element->get_name() != 'column'){
118
- return;
119
- }
120
-
121
- $settings = $element->get_settings();
122
- //echo '<pre>'; print_r($settings); echo '</pre>';
123
- if($settings['eae_animated_gradient_enable'] == 'yes') {
124
- $angle = $settings['gradient_background_angle']['size'];
125
- $element->add_render_attribute('_wrapper' , 'data-angle' , $settings['gradient_background_angle']['size'].'deg');
126
- $gradient_color_list = $settings['gradient_color_list'];
127
- foreach ($gradient_color_list as $gradient_color) {
128
- $color[] = $gradient_color['eae_animated_gradient_color'];
129
- };
130
- $colors = implode(',', $color);
131
- $element->add_render_attribute('_wrapper' , 'data-color' , $colors);
132
- ?>
133
- <!-- <style>
134
- .elementor-element-<?php echo $element->get_id(); ?>.eae-animated-gradient-yes{
135
- background : <?php echo 'linear-gradient('.$angle.'deg'.','.$colors.')'; ?>;
136
- }
137
-
138
- </style>-->
139
- <?php
140
-
141
- }
142
-
143
- }
144
-
145
- function _print_template($template,$widget){
146
- ?>
147
- <?php
148
- if ( $widget->get_name() != 'section' && $widget->get_name() != 'column' ) {
149
- return $template;
150
- }
151
- $old_template = $template;
152
- ob_start();
153
- ?>
154
- <#
155
- color_list = settings.gradient_color_list;
156
- angle = settings.gradient_background_angle.size;
157
- var color = [];
158
- var i = 0;
159
- _.each(color_list , function(color_list){
160
- color[i] = color_list.eae_animated_gradient_color;
161
- i = i+1;
162
- });
163
- view.addRenderAttribute('_wrapper', 'data-color', color);
164
- #>
165
- <div class="animated-gradient" data-angle="{{{ angle }}}deg" data-color="{{{ color }}}"></div>
166
- <?php
167
- $slider_content = ob_get_contents();
168
- ob_end_clean();
169
- $template = $slider_content . $old_template;
170
- return $template;
171
- }
172
-
173
-
174
-
175
- public static function instance() {
176
- if ( is_null( self::$_instance ) ) {
177
- self::$_instance = new self();
178
- }
179
- return self::$_instance;
180
- }
181
  }
182
- //AnimatedGradientBackground::instance();
5
  use Elementor\Controls_Manager;
6
  use Elementor\Repeater;
7
 
8
+ class Module {
9
+ // phpcs:ignore PSR2.Classes.PropertyDeclaration.Underscore
10
+ private static $_instance = null;
11
+
12
+ public function __construct() {
13
+ add_action( 'elementor/element/after_section_end', [ $this, 'register_controls' ], 10, 3 );
14
+ add_action( 'elementor/element/print_template', [ $this, '_print_template' ], 10, 2 );
15
+ add_action( 'elementor/section/print_template', [ $this, '_print_template' ], 10, 2 );
16
+ add_action( 'elementor/column/print_template', [ $this, '_print_template' ], 10, 2 );
17
+ add_action( 'elementor/frontend/before_render', [ $this, '_before_render' ] );
18
+ }
19
+
20
+ public function register_controls( $element, $section_id, $args ) {
21
+ if ( ( 'section' === $element->get_name() && 'section_background' === $section_id ) || ( 'column' === $element->get_name() && 'section_style' === $section_id ) ) {
22
+
23
+ $element->start_controls_section(
24
+ 'eae_animated_gradient',
25
+ [
26
+ 'tab' => Controls_Manager::TAB_STYLE,
27
+ 'label' => __( 'EAE - Animated Gradient Background', 'wts-eae' ),
28
+ ]
29
+ );
30
+ $element->add_control(
31
+ 'eae_animated_gradient_enable',
32
+ [
33
+ 'type' => Controls_Manager::SWITCHER,
34
+ 'label' => __( 'Enable', 'wts-eae' ),
35
+ 'default' => '',
36
+ 'label_on' => __( 'Yes', 'wts-eae' ),
37
+ 'label_off' => __( 'No', 'wts-eae' ),
38
+ 'return_value' => 'yes',
39
+ 'prefix_class' => 'eae-animated-gradient-',
40
+ 'render_type' => 'template',
41
+ ]
42
+ );
43
+ $element->add_control(
44
+ 'gradient_background_angle',
45
+ [
46
+ 'label' => __( 'Angle', 'wts-eae' ),
47
+ 'type' => Controls_Manager::SLIDER,
48
+ 'size_units' => [ 'deg' ],
49
+ 'range' => [
50
+ 'deg' => [
51
+ 'min' => -45,
52
+ 'max' => 180,
53
+ 'step' => 2,
54
+ ],
55
+ ],
56
+ 'default' => [
57
+ 'unit' => 'deg',
58
+ 'size' => -45,
59
+ ],
60
+ 'selectors' => [
61
+ '{{WRAPPER}} .box' => 'width: {{SIZE}}{{UNIT}};',
62
+ ],
63
+ 'condition' => [
64
+ 'eae_animated_gradient_enable' => 'yes',
65
+ ],
66
+ ]
67
+ );
68
+ $repeater = new Repeater();
69
+
70
+ $repeater->add_control(
71
+ 'eae_animated_gradient_color',
72
+ [
73
+ 'label' => __( 'Add Color', 'wts-eae' ),
74
+ 'type' => Controls_Manager::COLOR,
75
+ ]
76
+ );
77
+
78
+ $element->add_control(
79
+ 'gradient_color_list',
80
+ [
81
+ 'label' => __( 'Color', 'wts-eae' ),
82
+ 'type' => Controls_Manager::REPEATER,
83
+ 'fields' => $repeater->get_controls(),
84
+ 'title_field' => 'Color {{{eae_animated_gradient_color}}}',
85
+ 'show_label' => true,
86
+
87
+ 'default' => [
88
+ [
89
+ 'eae_animated_gradient_color' => '#00a6d8',
90
+ ],
91
+ [
92
+ 'eae_animated_gradient_color' => '#b800c9',
93
+ ],
94
+ [
95
+ 'eae_animated_gradient_color' => '#e57600',
96
+ ],
97
+ ],
98
+
99
+ 'condition' => [
100
+ 'eae_animated_gradient_enable' => 'yes',
101
+ ],
102
+ ]
103
+ );
104
+
105
+ $element->end_controls_section();
106
+ }
107
+ }
108
+
109
+ public function _before_render( $element ) {
110
+ if ( $element->get_name() !== 'section' && $element->get_name() !== 'column' ) {
111
+ return;
112
+ }
113
+
114
+ $settings = $element->get_settings();
115
+
116
+ if ( $settings['eae_animated_gradient_enable'] === 'yes' ) {
117
+ $angle = $settings['gradient_background_angle']['size'];
118
+ $element->add_render_attribute( '_wrapper', 'data-angle', $settings['gradient_background_angle']['size'] . 'deg' );
119
+ $gradient_color_list = $settings['gradient_color_list'];
120
+ foreach ( $gradient_color_list as $gradient_color ) {
121
+ $color[] = $gradient_color['eae_animated_gradient_color'];
122
+ };
123
+ $colors = implode( ',', $color );
124
+ $element->add_render_attribute( '_wrapper', 'data-color', $colors );
125
+ ?>
126
+
127
+ <?php
128
+
129
+ }
130
+ }
131
+
132
+ public function _print_template( $template, $widget ) {
133
+ ?>
134
+ <?php
135
+ if ( $widget->get_name() !== 'section' && $widget->get_name() !== 'column' ) {
136
+ return $template;
137
+ }
138
+ $old_template = $template;
139
+ ob_start();
140
+ ?>
141
+ <#
142
+ color_list = settings.gradient_color_list;
143
+ angle = settings.gradient_background_angle.size;
144
+ var color = [];
145
+ var i = 0;
146
+ _.each(color_list , function(color_list){
147
+ color[i] = color_list.eae_animated_gradient_color;
148
+ i = i+1;
149
+ });
150
+ view.addRenderAttribute('_wrapper', 'data-color', color);
151
+ #>
152
+ <div class="animated-gradient" data-angle="{{{ angle }}}deg" data-color="{{{ color }}}"></div>
153
+ <?php
154
+ $slider_content = ob_get_contents();
155
+ ob_end_clean();
156
+ $template = $slider_content . $old_template;
157
+ return $template;
158
+ }
159
+
160
+
161
+
162
+ public static function instance() {
163
+ if ( is_null( self::$_instance ) ) {
164
+ self::$_instance = new self();
165
+ }
166
+ return self::$_instance;
167
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
168
  }
169
+
modules/animated-text/module.php CHANGED
@@ -16,8 +16,8 @@ class Module extends Module_Base {
16
  return 'eae-animatedtext';
17
  }
18
 
19
- public function add_dependent_js_css(){
20
- wp_enqueue_script('animated-main');
21
  }
22
 
23
- }
16
  return 'eae-animatedtext';
17
  }
18
 
19
+ public function add_dependent_js_css() {
20
+ wp_enqueue_script( 'animated-main' );
21
  }
22
 
23
+ }
modules/animated-text/widgets/animated-text.php CHANGED
@@ -10,18 +10,20 @@ use WTS_EAE\Base\EAE_Widget_Base;
10
  use Elementor\Group_Control_Typography;
11
 
12
 
13
- if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
 
 
14
 
15
  class AnimatedText extends EAE_Widget_Base {
16
-
17
  public function get_name() {
18
  return 'wts-AnimatedText';
19
  }
20
-
21
  public function get_title() {
22
  return __( 'EAE - Animated Text', 'wts-eae' );
23
  }
24
-
25
  public function get_icon() {
26
  return 'eicon-animation-text wts-eae-pe';
27
  }
@@ -29,62 +31,60 @@ class AnimatedText extends EAE_Widget_Base {
29
  public function get_categories() {
30
  return [ 'wts-eae' ];
31
  }
32
-
33
  protected function _register_controls() {
34
  $this->start_controls_section(
35
  'section_general',
36
  [
37
- 'label' => __( 'General', 'wts-eae' )
38
  ]
39
  );
40
 
41
-
42
  $this->add_responsive_control(
43
- 'text-align',
44
- [
45
- 'label' => __( 'Alignment', 'wts-eae' ),
46
- 'type' => Controls_Manager::CHOOSE,
47
- 'options' => [
48
- 'left' => [
49
- 'title' => __( 'Left', 'wts-eae' ),
50
- 'icon' => 'fa fa-align-left',
51
- ],
52
- 'center' => [
53
- 'title' => __( 'Center', 'wts-eae' ),
54
- 'icon' => 'fa fa-align-center',
55
- ],
56
- 'right' => [
57
- 'title' => __( 'Right', 'wts-eae' ),
58
- 'icon' => 'fa fa-align-right',
59
- ]
60
- ],
61
- 'default' => '',
62
- 'selectors' => [
63
- '{{WRAPPER}} .eae-at-animation' => 'text-align: {{VALUE}};',
64
- ]
65
- ]
66
  );
67
 
68
  $this->add_control(
69
  'pre-text',
70
  [
71
- 'label' => __( 'Pre Text', 'wts-eae' ),
72
- 'type' => Controls_Manager::TEXTAREA,
73
- 'dynamic' => [
74
- 'active' => true,
75
- ],
76
  'placeholder' => __( 'Enter text', 'wts-eae' ),
77
- 'default' => __( 'I Love', 'wts-eae' ),
78
  ]
79
  );
80
-
81
-
82
  $this->add_control(
83
  'animation-text-list',
84
  [
85
- 'label' => __( 'Animated Text List', 'wts-eae' ),
86
- 'type' => Controls_Manager::REPEATER,
87
- 'default' => [
88
  [
89
  'text' => __( 'Football', 'wts-eae' ),
90
  ],
@@ -95,33 +95,33 @@ class AnimatedText extends EAE_Widget_Base {
95
  'text' => __( 'Basketball', 'wts-eae' ),
96
  ],
97
  ],
98
- 'fields' => [
99
  [
100
- 'name' => 'text',
101
- 'label' => __( 'Text', 'wts-eae' ),
102
- 'type' => Controls_Manager::TEXT,
103
- 'dynamic' => [
104
- 'active' => true,
105
- ],
106
  'label_block' => true,
107
  'placeholder' => __( 'Text to animate', 'wts-eae' ),
108
- 'default' => __( '', 'wts-eae' ),
109
  ],
110
  ],
111
- 'title_field' => '{{{ text }}}'
112
  ]
113
  );
114
 
115
  $this->add_control(
116
  'post-text',
117
  [
118
- 'label' => __( 'Post Text', 'wts-eae' ),
119
- 'type' => Controls_Manager::TEXTAREA,
120
- 'dynamic' => [
121
- 'active' => true,
122
- ],
123
  'placeholder' => __( 'Enter text', 'wts-eae' ),
124
- 'default' => __( 'Very Much', 'wts-eae' ),
125
  ]
126
  );
127
 
@@ -131,17 +131,16 @@ class AnimatedText extends EAE_Widget_Base {
131
  'section_pre_text_style',
132
  [
133
  'label' => __( 'Pre Text', 'wts-eae' ),
134
- 'tab' => Controls_Manager::TAB_STYLE,
135
  ]
136
  );
137
-
138
-
139
  $this->add_control(
140
  'pre_text_color',
141
  [
142
- 'label' => __( 'Pre Text Color', 'wts-eae' ),
143
- 'type' => Controls_Manager::COLOR,
144
- 'global' => [
145
  'default' => Global_Colors::COLOR_PRIMARY,
146
  ],
147
  'selectors' => [
@@ -149,49 +148,45 @@ class AnimatedText extends EAE_Widget_Base {
149
  ],
150
  ]
151
  );
152
-
153
  $this->add_group_control(
154
  Group_Control_Typography::get_type(),
155
  [
156
- 'name' => 'pre_text_typography',
157
- 'global' => [
158
- 'default' => Global_Typography::TYPOGRAPHY_PRIMARY
159
  ],
160
  'selector' => '{{WRAPPER}} .eae-at-pre-text',
161
  ]
162
  );
163
 
164
-
165
  $this->end_controls_section();
166
 
167
-
168
- $this->start_controls_section(
169
  'section_animation_text_style',
170
  [
171
  'label' => __( 'Animated Text', 'wts-eae' ),
172
- 'tab' => Controls_Manager::TAB_STYLE,
173
  ]
174
  );
175
 
176
-
177
  $this->add_group_control(
178
- Group_Control_Typography::get_type(),
179
- [
180
- 'name' => 'animation_color_typography',
181
- 'global' => [
182
- 'default' => Global_Typography::TYPOGRAPHY_PRIMARY
183
- ],
184
- 'selector' => '{{WRAPPER}} .eae-at-animation-text, {{WRAPPER}} .eae-at-animation-text i',
185
- ]
186
  );
187
-
188
-
189
  $this->add_control(
190
  'animation_color',
191
  [
192
- 'label' => __( 'Animation Text Color', 'wts-eae' ),
193
- 'type' => Controls_Manager::COLOR,
194
- 'global' => [
195
  'default' => Global_Colors::COLOR_ACCENT,
196
  ],
197
  'selectors' => [
@@ -203,33 +198,31 @@ class AnimatedText extends EAE_Widget_Base {
203
  $this->add_group_control(
204
  Group_Control_Border::get_type(),
205
  [
206
- 'name' => 'animated_text_border',
207
- 'label' => __( 'Box Border', 'wts-eae' ),
208
  'selector' => '{{WRAPPER}} .eae-at-animation-text-wrapper .eae-at-animation-text.is-visible',
209
  ]
210
  );
211
 
212
-
213
-
214
  $this->add_control(
215
  'box_border_radius',
216
  [
217
- 'label' => __( 'Border Radius', 'wts-eae' ),
218
- 'type' => Controls_Manager::DIMENSIONS,
219
  'size_units' => [ 'px', '%' ],
220
- 'selectors' => [
221
  '{{WRAPPER}} .eae-at-animation-text-wrapper .eae-at-animation-text.is-visible' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
222
- ],
223
  ]
224
  );
225
 
226
  $this->add_control(
227
  'box_padding',
228
  [
229
- 'label' => __( 'Padding', 'wts-eae' ),
230
- 'type' => Controls_Manager::DIMENSIONS,
231
  'size_units' => [ 'px', '%' ],
232
- 'selectors' => [
233
  '{{WRAPPER}} .eae-at-animation-text-wrapper .eae-at-animation-text.is-visible' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
234
  ],
235
  ]
@@ -237,50 +230,45 @@ class AnimatedText extends EAE_Widget_Base {
237
  $this->add_control(
238
  'box_margin',
239
  [
240
- 'label' => __( 'Margin', 'wts-eae' ),
241
- 'type' => Controls_Manager::DIMENSIONS,
242
  'size_units' => [ 'px', '%' ],
243
- 'selectors' => [
244
  '{{WRAPPER}} .eae-at-animation-text-wrapper .eae-at-animation-text.is-visible' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
245
  ],
246
  ]
247
  );
248
-
249
 
250
-
251
  $this->add_group_control(
252
  Group_Control_Background::get_type(),
253
  [
254
- 'name' => 'animation_section_bg',
255
- 'label' => __( 'Section Background', 'wts-eae' ),
256
- 'types' => [ 'classic','gradient' ],
257
  'selector' => '{{WRAPPER}} .eae-at-animation-text-wrapper .eae-at-animation-text.is-visible',
258
  ]
259
  );
260
 
261
-
262
-
263
  $this->end_controls_section();
264
 
265
  $this->start_controls_section(
266
  'section_cursor_style',
267
  [
268
  'label' => __( 'Cursor Control', 'wts-eae' ),
269
- 'tab' => Controls_Manager::TAB_STYLE,
270
  ]
271
  );
272
 
273
-
274
  $this->add_control(
275
  'cursor_color',
276
  [
277
- 'label' => __( 'Color', 'wts-eae' ),
278
- 'type' => Controls_Manager::COLOR,
279
 
280
- 'global' => [
281
  'default' => Global_Colors::COLOR_PRIMARY,
282
  ],
283
- 'default' => '#54595f',
284
  'selectors' => [
285
  '{{WRAPPER}} .eae-at-animation-text-wrapper::after' => 'background-color: {{VALUE}};',
286
  ],
@@ -290,20 +278,20 @@ class AnimatedText extends EAE_Widget_Base {
290
  $this->add_responsive_control(
291
  'cursor_width',
292
  [
293
- 'label' => __( 'Width', 'wts-eae' ),
294
- 'type' => Controls_Manager::SLIDER,
295
  'size_units' => [ 'px' ],
296
- 'default' => [
297
  'size' => 1,
298
  'unit' => 'px',
299
  ],
300
- 'range' => [
301
  'px' => [
302
  'min' => 1,
303
  'max' => 5,
304
  ],
305
  ],
306
- 'selectors' => [
307
  '{{WRAPPER}} .eae-at-animation.type .eae-at-animation-text-wrapper::after' => 'width: {{SIZE}}{{UNIT}};',
308
  ],
309
  ]
@@ -315,17 +303,16 @@ class AnimatedText extends EAE_Widget_Base {
315
  'section_post_text_style',
316
  [
317
  'label' => __( 'Post Text', 'wts-eae' ),
318
- 'tab' => Controls_Manager::TAB_STYLE,
319
  ]
320
  );
321
 
322
-
323
  $this->add_control(
324
  'post_text_color',
325
  [
326
- 'label' => __( 'Post Text Color', 'wts-eae' ),
327
- 'type' => Controls_Manager::COLOR,
328
- 'global' => [
329
  'default' => Global_Colors::COLOR_PRIMARY,
330
  ],
331
  'selectors' => [
@@ -337,8 +324,8 @@ class AnimatedText extends EAE_Widget_Base {
337
  $this->add_group_control(
338
  Group_Control_Typography::get_type(),
339
  [
340
- 'name' => 'post_text_typography',
341
- 'global' => [
342
  'default' => Global_Typography::TYPOGRAPHY_PRIMARY,
343
  ],
344
  'selector' => '{{WRAPPER}} .eae-at-post-text',
@@ -347,45 +334,47 @@ class AnimatedText extends EAE_Widget_Base {
347
 
348
  $this->end_controls_section();
349
  }
350
-
351
- protected function render(){
352
  $settings = $this->get_settings_for_display();
353
 
354
- $this->add_render_attribute('eae-at-animated-text-wrapper','class','eae-at-animation-text-wrapper');
355
 
356
- $this->add_render_attribute('eae-at-animated-text-wrapper','class','waiting');
357
 
358
- $this->add_render_attribute('eae-at-animated-text','class','eae-at-animation-text');
359
 
360
- $this->add_render_attribute('eae-at-pre-txt','class','eae-at-pre-text');
361
 
362
- $this->add_render_attribute('eae-at-animated','class','eae-at-animation');
363
 
364
- $this->add_render_attribute('eae-at-animated','class','type');
365
 
366
- $this->add_render_attribute('eae-at-animated','class','letters');
367
 
368
- $this->add_render_attribute('eae-at-post-txt','class','eae-at-post-text');
369
 
370
  ?>
371
  <div id="eae-at-<?php echo $this->get_id(); ?>" class="eae-animtext-wrapper">
372
  <div <?php echo $this->get_render_attribute_string( 'eae-at-animated' ); ?>>
373
  <span <?php echo $this->get_render_attribute_string( 'eae-at-pre-txt' ); ?>><?php echo $settings['pre-text']; ?></span>
374
- <?php if(count($settings['animation-text-list'])){
375
- ?>
 
376
  <span <?php echo $this->get_render_attribute_string( 'eae-at-animated-text-wrapper' ); ?>>
377
  <?php
378
- foreach($settings['animation-text-list'] as $animation_text){
379
- ?>
380
 
381
  <span <?php echo $this->get_render_attribute_string( 'eae-at-animated-text' ); ?>><?php echo $animation_text['text']; ?></span>
382
 
383
- <?php
384
- }
385
  ?>
386
  </span>
387
- <?php
388
- }?>
 
389
  <span <?php echo $this->get_render_attribute_string( 'eae-at-post-txt' ); ?>><?php echo $settings['post-text']; ?></span>
390
  </div>
391
  </div>
@@ -396,10 +385,9 @@ class AnimatedText extends EAE_Widget_Base {
396
  jQuery(document).trigger('elementor/render/animation-text','#eae-at-<?php echo $this->get_id(); ?>');
397
  });
398
  </script>
399
- <?php
400
  }
401
 
402
  }
403
 
404
- //Plugin::instance()->widgets_manager->register_widget_type( new Widget_AnimatedText() );
405
- ?>
10
  use Elementor\Group_Control_Typography;
11
 
12
 
13
+ if ( ! defined( 'ABSPATH' ) ) {
14
+ exit; // Exit if accessed directly
15
+ }
16
 
17
  class AnimatedText extends EAE_Widget_Base {
18
+
19
  public function get_name() {
20
  return 'wts-AnimatedText';
21
  }
22
+
23
  public function get_title() {
24
  return __( 'EAE - Animated Text', 'wts-eae' );
25
  }
26
+
27
  public function get_icon() {
28
  return 'eicon-animation-text wts-eae-pe';
29
  }
31
  public function get_categories() {
32
  return [ 'wts-eae' ];
33
  }
34
+
35
  protected function _register_controls() {
36
  $this->start_controls_section(
37
  'section_general',
38
  [
39
+ 'label' => __( 'General', 'wts-eae' ),
40
  ]
41
  );
42
 
 
43
  $this->add_responsive_control(
44
+ 'text-align',
45
+ [
46
+ 'label' => __( 'Alignment', 'wts-eae' ),
47
+ 'type' => Controls_Manager::CHOOSE,
48
+ 'options' => [
49
+ 'left' => [
50
+ 'title' => __( 'Left', 'wts-eae' ),
51
+ 'icon' => 'fa fa-align-left',
52
+ ],
53
+ 'center' => [
54
+ 'title' => __( 'Center', 'wts-eae' ),
55
+ 'icon' => 'fa fa-align-center',
56
+ ],
57
+ 'right' => [
58
+ 'title' => __( 'Right', 'wts-eae' ),
59
+ 'icon' => 'fa fa-align-right',
60
+ ],
61
+ ],
62
+ 'default' => '',
63
+ 'selectors' => [
64
+ '{{WRAPPER}} .eae-at-animation' => 'text-align: {{VALUE}};',
65
+ ],
66
+ ]
67
  );
68
 
69
  $this->add_control(
70
  'pre-text',
71
  [
72
+ 'label' => __( 'Pre Text', 'wts-eae' ),
73
+ 'type' => Controls_Manager::TEXTAREA,
74
+ 'dynamic' => [
75
+ 'active' => true,
76
+ ],
77
  'placeholder' => __( 'Enter text', 'wts-eae' ),
78
+ 'default' => __( 'I Love', 'wts-eae' ),
79
  ]
80
  );
81
+
 
82
  $this->add_control(
83
  'animation-text-list',
84
  [
85
+ 'label' => __( 'Animated Text List', 'wts-eae' ),
86
+ 'type' => Controls_Manager::REPEATER,
87
+ 'default' => [
88
  [
89
  'text' => __( 'Football', 'wts-eae' ),
90
  ],
95
  'text' => __( 'Basketball', 'wts-eae' ),
96
  ],
97
  ],
98
+ 'fields' => [
99
  [
100
+ 'name' => 'text',
101
+ 'label' => __( 'Text', 'wts-eae' ),
102
+ 'type' => Controls_Manager::TEXT,
103
+ 'dynamic' => [
104
+ 'active' => true,
105
+ ],
106
  'label_block' => true,
107
  'placeholder' => __( 'Text to animate', 'wts-eae' ),
108
+ 'default' => '',
109
  ],
110
  ],
111
+ 'title_field' => '{{{ text }}}',
112
  ]
113
  );
114
 
115
  $this->add_control(
116
  'post-text',
117
  [
118
+ 'label' => __( 'Post Text', 'wts-eae' ),
119
+ 'type' => Controls_Manager::TEXTAREA,
120
+ 'dynamic' => [
121
+ 'active' => true,
122
+ ],
123
  'placeholder' => __( 'Enter text', 'wts-eae' ),
124
+ 'default' => __( 'Very Much', 'wts-eae' ),
125
  ]
126
  );
127
 
131
  'section_pre_text_style',
132
  [
133
  'label' => __( 'Pre Text', 'wts-eae' ),
134
+ 'tab' => Controls_Manager::TAB_STYLE,
135
  ]
136
  );
137
+
 
138
  $this->add_control(
139
  'pre_text_color',
140
  [
141
+ 'label' => __( 'Pre Text Color', 'wts-eae' ),
142
+ 'type' => Controls_Manager::COLOR,
143
+ 'global' => [
144
  'default' => Global_Colors::COLOR_PRIMARY,
145
  ],
146
  'selectors' => [
148
  ],
149
  ]
150
  );
151
+
152
  $this->add_group_control(
153
  Group_Control_Typography::get_type(),
154
  [
155
+ 'name' => 'pre_text_typography',
156
+ 'global' => [
157
+ 'default' => Global_Typography::TYPOGRAPHY_PRIMARY,
158
  ],
159
  'selector' => '{{WRAPPER}} .eae-at-pre-text',
160
  ]
161
  );
162
 
 
163
  $this->end_controls_section();
164
 
165
+ $this->start_controls_section(
 
166
  'section_animation_text_style',
167
  [
168
  'label' => __( 'Animated Text', 'wts-eae' ),
169
+ 'tab' => Controls_Manager::TAB_STYLE,
170
  ]
171
  );
172
 
 
173
  $this->add_group_control(
174
+ Group_Control_Typography::get_type(),
175
+ [
176
+ 'name' => 'animation_color_typography',
177
+ 'global' => [
178
+ 'default' => Global_Typography::TYPOGRAPHY_PRIMARY,
179
+ ],
180
+ 'selector' => '{{WRAPPER}} .eae-at-animation-text, {{WRAPPER}} .eae-at-animation-text i',
181
+ ]
182
  );
183
+
 
184
  $this->add_control(
185
  'animation_color',
186
  [
187
+ 'label' => __( 'Animation Text Color', 'wts-eae' ),
188
+ 'type' => Controls_Manager::COLOR,
189
+ 'global' => [
190
  'default' => Global_Colors::COLOR_ACCENT,
191
  ],
192
  'selectors' => [
198
  $this->add_group_control(
199
  Group_Control_Border::get_type(),
200
  [
201
+ 'name' => 'animated_text_border',
202
+ 'label' => __( 'Box Border', 'wts-eae' ),
203
  'selector' => '{{WRAPPER}} .eae-at-animation-text-wrapper .eae-at-animation-text.is-visible',
204
  ]
205
  );
206
 
 
 
207
  $this->add_control(
208
  'box_border_radius',
209
  [
210
+ 'label' => __( 'Border Radius', 'wts-eae' ),
211
+ 'type' => Controls_Manager::DIMENSIONS,
212
  'size_units' => [ 'px', '%' ],
213
+ 'selectors' => [
214
  '{{WRAPPER}} .eae-at-animation-text-wrapper .eae-at-animation-text.is-visible' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
215
+ ],
216
  ]
217
  );
218
 
219
  $this->add_control(
220
  'box_padding',
221
  [
222
+ 'label' => __( 'Padding', 'wts-eae' ),
223
+ 'type' => Controls_Manager::DIMENSIONS,
224
  'size_units' => [ 'px', '%' ],
225
+ 'selectors' => [
226
  '{{WRAPPER}} .eae-at-animation-text-wrapper .eae-at-animation-text.is-visible' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
227
  ],
228
  ]
230
  $this->add_control(
231
  'box_margin',
232
  [
233
+ 'label' => __( 'Margin', 'wts-eae' ),
234
+ 'type' => Controls_Manager::DIMENSIONS,
235
  'size_units' => [ 'px', '%' ],
236
+ 'selectors' => [
237
  '{{WRAPPER}} .eae-at-animation-text-wrapper .eae-at-animation-text.is-visible' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
238
  ],
239
  ]
240
  );
 
241
 
 
242
  $this->add_group_control(
243
  Group_Control_Background::get_type(),
244
  [
245
+ 'name' => 'animation_section_bg',
246
+ 'label' => __( 'Section Background', 'wts-eae' ),
247
+ 'types' => [ 'classic', 'gradient' ],
248
  'selector' => '{{WRAPPER}} .eae-at-animation-text-wrapper .eae-at-animation-text.is-visible',
249
  ]
250
  );
251
 
 
 
252
  $this->end_controls_section();
253
 
254
  $this->start_controls_section(
255
  'section_cursor_style',
256
  [
257
  'label' => __( 'Cursor Control', 'wts-eae' ),
258
+ 'tab' => Controls_Manager::TAB_STYLE,
259
  ]
260
  );
261
 
 
262
  $this->add_control(
263
  'cursor_color',
264
  [
265
+ 'label' => __( 'Color', 'wts-eae' ),
266
+ 'type' => Controls_Manager::COLOR,
267
 
268
+ 'global' => [
269
  'default' => Global_Colors::COLOR_PRIMARY,
270
  ],
271
+ 'default' => '#54595f',
272
  'selectors' => [
273
  '{{WRAPPER}} .eae-at-animation-text-wrapper::after' => 'background-color: {{VALUE}};',
274
  ],
278
  $this->add_responsive_control(
279
  'cursor_width',
280
  [
281
+ 'label' => __( 'Width', 'wts-eae' ),
282
+ 'type' => Controls_Manager::SLIDER,
283
  'size_units' => [ 'px' ],
284
+ 'default' => [
285
  'size' => 1,
286
  'unit' => 'px',
287
  ],
288
+ 'range' => [
289
  'px' => [
290
  'min' => 1,
291
  'max' => 5,
292
  ],
293
  ],
294
+ 'selectors' => [
295
  '{{WRAPPER}} .eae-at-animation.type .eae-at-animation-text-wrapper::after' => 'width: {{SIZE}}{{UNIT}};',
296
  ],
297
  ]
303
  'section_post_text_style',
304
  [
305
  'label' => __( 'Post Text', 'wts-eae' ),
306
+ 'tab' => Controls_Manager::TAB_STYLE,
307
  ]
308
  );
309
 
 
310
  $this->add_control(
311
  'post_text_color',
312
  [
313
+ 'label' => __( 'Post Text Color', 'wts-eae' ),
314
+ 'type' => Controls_Manager::COLOR,
315
+ 'global' => [
316
  'default' => Global_Colors::COLOR_PRIMARY,
317
  ],
318
  'selectors' => [
324
  $this->add_group_control(
325
  Group_Control_Typography::get_type(),
326
  [
327
+ 'name' => 'post_text_typography',
328
+ 'global' => [
329
  'default' => Global_Typography::TYPOGRAPHY_PRIMARY,
330
  ],
331
  'selector' => '{{WRAPPER}} .eae-at-post-text',
334
 
335
  $this->end_controls_section();
336
  }
337
+
338
+ protected function render() {
339
  $settings = $this->get_settings_for_display();
340
 
341
+ $this->add_render_attribute( 'eae-at-animated-text-wrapper', 'class', 'eae-at-animation-text-wrapper' );
342
 
343
+ $this->add_render_attribute( 'eae-at-animated-text-wrapper', 'class', 'waiting' );
344
 
345
+ $this->add_render_attribute( 'eae-at-animated-text', 'class', 'eae-at-animation-text' );
346
 
347
+ $this->add_render_attribute( 'eae-at-pre-txt', 'class', 'eae-at-pre-text' );
348
 
349
+ $this->add_render_attribute( 'eae-at-animated', 'class', 'eae-at-animation' );
350
 
351
+ $this->add_render_attribute( 'eae-at-animated', 'class', 'type' );
352
 
353
+ $this->add_render_attribute( 'eae-at-animated', 'class', 'letters' );
354
 
355
+ $this->add_render_attribute( 'eae-at-post-txt', 'class', 'eae-at-post-text' );
356
 
357
  ?>
358
  <div id="eae-at-<?php echo $this->get_id(); ?>" class="eae-animtext-wrapper">
359
  <div <?php echo $this->get_render_attribute_string( 'eae-at-animated' ); ?>>
360
  <span <?php echo $this->get_render_attribute_string( 'eae-at-pre-txt' ); ?>><?php echo $settings['pre-text']; ?></span>
361
+ <?php
362
+ if ( count( $settings['animation-text-list'] ) ) {
363
+ ?>
364
  <span <?php echo $this->get_render_attribute_string( 'eae-at-animated-text-wrapper' ); ?>>
365
  <?php
366
+ foreach ( $settings['animation-text-list'] as $animation_text ) {
367
+ ?>
368
 
369
  <span <?php echo $this->get_render_attribute_string( 'eae-at-animated-text' ); ?>><?php echo $animation_text['text']; ?></span>
370
 
371
+ <?php
372
+ }
373
  ?>
374
  </span>
375
+ <?php
376
+ }
377
+ ?>
378
  <span <?php echo $this->get_render_attribute_string( 'eae-at-post-txt' ); ?>><?php echo $settings['post-text']; ?></span>
379
  </div>
380
  </div>
385
  jQuery(document).trigger('elementor/render/animation-text','#eae-at-<?php echo $this->get_id(); ?>');
386
  });
387
  </script>
388
+ <?php
389
  }
390
 
391
  }
392
 
393
+ ?>
 
modules/bg-slider/module.php CHANGED
@@ -7,6 +7,7 @@ use Elementor\Group_Control_Background;
7
  use Elementor\Utils;
8
 
9
  class Module {
 
10
  private static $_instance = null;
11
 
12
  public static function instance() {
@@ -17,47 +18,47 @@ class Module {
17
  }
18
 
19
  private function __construct() {
20
- add_action('elementor/element/after_section_end',[ $this, '_add_controls'],10,3);
21
 
22
- add_action( 'elementor/frontend/element/before_render', [ $this, '_before_render'],10,1);
23
 
24
- add_action( 'elementor/frontend/column/before_render', [ $this, '_before_render'],10,1);
25
- add_action( 'elementor/frontend/section/before_render', [ $this, '_before_render'],10,1);
26
 
27
- add_action( 'elementor/element/print_template', [ $this, '_print_template'],10,2);
28
- add_action( 'elementor/section/print_template', [ $this, '_print_template'],10,2);
29
- add_action( 'elementor/column/print_template', [ $this, '_print_template'],10,2);
30
 
31
  add_action( 'wp_enqueue_scripts', [ $this, 'eae_add_js_css' ] );
32
  }
33
 
34
- function eae_add_js_css(){
35
- wp_enqueue_style('vegas-css');
36
- wp_enqueue_script('vegas');
37
- wp_enqueue_script('wts-swiper-script');
38
- wp_enqueue_style('wts-swiper-style');
39
- }
40
 
41
  public function _add_controls( $element, $section_id, $args ) {
42
- if ( ('section' === $element->get_name() && 'section_background' === $section_id) || ('column' === $element->get_name() && 'section_style' === $section_id)) {
43
 
44
  $element->start_controls_section(
45
  '_eae_section_bg_slider',
46
  [
47
  'label' => __( 'EAE - Background Slider', 'wts-eae' ),
48
- 'tab' => Controls_Manager::TAB_STYLE
49
  ]
50
  );
51
 
52
  $element->add_control(
53
  'eae_bg_slider_images',
54
  [
55
- 'label' => __( 'Add Images', 'wts-eae' ),
56
- 'type' => Controls_Manager::GALLERY,
57
- 'default' => [],
58
- 'dynamic' => [
59
- 'active' => true,
60
- ],
61
  ]
62
  );
63
 
@@ -68,29 +69,6 @@ class Module {
68
  ]
69
  );
70
 
71
- /*$slides_to_show = range( 1, 10 );
72
- $slides_to_show = array_combine( $slides_to_show, $slides_to_show );
73
-
74
- $element->add_control(
75
- 'slides_to_show',
76
- [
77
- 'label' => __( 'Slides to Show', 'wts-eae' ),
78
- 'type' => Controls_Manager::SELECT,
79
- 'default' => '3',
80
- 'options' => $slides_to_show,
81
- ]
82
- );*/
83
- /*$element->add_control(
84
- 'slide',
85
- [
86
- 'label' => __( 'Initial Slide', 'wts-eae' ),
87
- 'type' => Controls_Manager::TEXT,
88
- 'label_block' => true,
89
- 'placeholder' => __( 'Initial Slide', 'wts-eae' ),
90
- 'default' => __( '0', 'wts-eae' ),
91
- ]
92
- );*/
93
-
94
  $element->add_control(
95
  'eae_slider_transition',
96
  [
@@ -121,7 +99,7 @@ class Module {
121
  'blur2' => __( 'Blur 2', 'wts-eae' ),
122
  'flash' => __( 'Flash', 'wts-eae' ),
123
  'flash2' => __( 'Flash 2', 'wts-eae' ),
124
- 'random' => __( 'Random', 'wts-eae' )
125
  ],
126
  'default' => 'fade',
127
  ]
@@ -142,7 +120,7 @@ class Module {
142
  'kenburnsDownLeft' => __( 'Kenburns Down Left', 'wts-eae' ),
143
  'kenburnsDownRight' => __( 'Kenburns Down Right', 'wts-eae' ),
144
  'random' => __( 'Random', 'wts-eae' ),
145
- '' => __( 'None', 'wts-eae' )
146
  ],
147
  'default' => 'kenburns',
148
  ]
@@ -159,16 +137,7 @@ class Module {
159
  'return_value' => 'yes',
160
  ]
161
  );
162
- /*$element->add_control(
163
- 'custom_overlay',
164
- [
165
- 'label' => __( 'Overlay Image', 'wts-eae' ),
166
- 'type' => Controls_Manager::MEDIA,
167
- 'condition' => [
168
- 'eae_custom_overlay_switcher' => 'yes',
169
- ]
170
- ]
171
- );*/
172
  $element->add_group_control(
173
  Group_Control_Background::get_type(),
174
  [
@@ -178,7 +147,7 @@ class Module {
178
  'selector' => '{{WRAPPER}} .vegas-overlay',
179
  'condition' => [
180
  'eae_custom_overlay_switcher' => 'yes',
181
- ]
182
  ]
183
  );
184
  $element->add_control(
@@ -196,12 +165,12 @@ class Module {
196
  '06' => __( 'Style 6', 'wts-eae' ),
197
  '07' => __( 'Style 7', 'wts-eae' ),
198
  '08' => __( 'Style 8', 'wts-eae' ),
199
- '09' => __( 'Style 9', 'wts-eae' )
200
  ],
201
  'default' => '01',
202
  'condition' => [
203
  'eae_custom_overlay_switcher' => '',
204
- ]
205
  ]
206
  );
207
  $element->add_control(
@@ -211,7 +180,7 @@ class Module {
211
  'type' => Controls_Manager::SELECT,
212
  'options' => [
213
  'true' => __( 'True', 'wts-eae' ),
214
- 'false' => __( 'False', 'wts-eae' )
215
  ],
216
  'default' => 'true',
217
  ]
@@ -233,7 +202,7 @@ class Module {
233
  'type' => Controls_Manager::SELECT,
234
  'options' => [
235
  'true' => __( 'True', 'wts-eae' ),
236
- 'false' => __( 'False', 'wts-eae' )
237
  ],
238
  'default' => 'true',
239
  ]
@@ -244,13 +213,12 @@ class Module {
244
  }
245
  }
246
 
247
- function _before_render( \Elementor\Element_Base $element ) {
248
 
249
- if ( $element->get_name() != 'section' && $element->get_name() != 'column' ) {
250
  return;
251
  }
252
  $settings = $element->get_settings_for_display();
253
- //echo '<pre>'; print_r($settings);
254
 
255
  $element->add_render_attribute( '_wrapper', 'class', 'has_eae_slider' );
256
  $element->add_render_attribute( 'eae-bs-background-slideshow-wrapper', 'class', 'eae-bs-background-slideshow-wrapper' );
@@ -259,128 +227,122 @@ class Module {
259
 
260
  $slides = [];
261
 
262
- if ( empty( $settings['eae_bg_slider_images'] ) ) {
263
  return;
264
  }
265
- foreach ( $settings['eae_bg_slider_images'] as $attachment ) {
266
- if(array_key_exists('url',$attachment)){
267
- $image_url = Group_Control_Image_Size::get_attachment_image_src( $attachment['id'], 'eae_thumbnail', $settings );
268
- }else{
269
- //echo 'Hello';
270
- $image_url = Group_Control_Image_Size::get_attachment_image_src( $attachment['id'], 'eae_thumbnail', $settings );;
271
- //echo '<pre>'; print_r($image_url); echo '</pre>';
272
- }
273
- $slides[] = [ 'src' => $image_url ];
274
- }
275
- //echo '<pre>'; print_r($slides); echo '</pre>';
276
- //echo '<pre>'; print_r(json_encode( $slides )); echo '</pre>';
277
- // echo 'fadsfadf';
278
  if ( empty( $slides ) ) {
279
  return;
280
  }
281
 
282
  ?>
283
 
284
- <script type="text/javascript">
285
- jQuery(document).ready(function () {
286
- jQuery(".elementor-element-<?php echo $element->get_id(); ?>").prepend('<div class="eae-section-bs"><div class="eae-section-bs-inner"></div></div>');
287
- if ('<?php echo $settings["eae_custom_overlay_switcher"]; ?>' == 'yes') {
288
-
289
- //if(bgimage == ''){
290
- //}else{
291
- var bgoverlay = '<?php echo EAE_URL . "/assets/lib/vegas/overlays/00.png"; ?>';
292
- // }
293
- } else {
294
- if ('<?php echo $settings["eae_slider_overlay"]; ?>') {
295
- var bgoverlay = '<?php echo EAE_URL . "assets/lib/vegas/overlays/" . $settings["eae_slider_overlay"] . ".png"; ?>';
296
- } else {
297
- var bgoverlay = '<?php echo EAE_URL . "assets/lib/vegas/overlays/00.png"; ?>';
298
- }
299
- }
300
-
301
-
302
- jQuery(".elementor-element-<?php echo $element->get_id(); ?>").children('.eae-section-bs').children('.eae-section-bs-inner').vegas({
303
- slides: <?php echo json_encode( $slides ) ?>,
304
- transition: '<?php echo $settings['eae_slider_transition']; ?>',
305
- animation: '<?php echo $settings['eae_slider_animation']; ?>',
306
- overlay: bgoverlay,
307
- cover: <?php echo $settings['eae_slider_cover']; ?>,
308
- delay: <?php echo $settings['eae_slider_delay']; ?>,
309
- timer: <?php echo $settings['eae_slider_timer_bar']; ?>
310
- });
311
- if ('<?php echo $settings["eae_custom_overlay_switcher"]; ?>' == 'yes') {
312
- jQuery(".elementor-element-<?php echo $element->get_id(); ?>").children('.eae-section-bs').children('.eae-section-bs-inner').children('.vegas-overlay').css('background-image', '');
313
- }
314
- });
315
- </script>
316
  <?php
317
  }
318
-
319
- function _print_template( $template, $widget ) {
320
- if ( $widget->get_name() != 'section' && $widget->get_name() != 'column' ) {
321
- return $template;
322
- }
323
-
324
- $old_template = $template;
325
- ob_start();
326
- ?>
327
- <#
328
-
329
- var rand_id = Math.random().toString(36).substring(7);
330
- var slides_path_string = '';
331
- var eae_transition = settings.eae_slider_transition;
332
- var eae_animation = settings.eae_slider_animation;
333
- var eae_custom_overlay = settings.eae_custom_overlay_switcher;
334
- var eae_overlay = '';
335
- var eae_cover = settings.eae_slider_cover;
336
- var eae_delay = settings.eae_slider_delay;
337
- var eae_timer = settings.eae_slider_timer_bar;
338
-
339
- if(!_.isUndefined(settings.eae_bg_slider_images) && settings.eae_bg_slider_images.length){
340
- var slider_data = [];
341
- slides = settings.eae_bg_slider_images;
342
- for(var i in slides){
343
- slider_data[i] = slides[i].url;
344
- }
345
- slides_path_string = slider_data.join();
346
- }
347
-
348
- if(settings.eae_custom_overlay_switcher == 'yes'){
349
- //if(settings.eae_slider_custom_overlay_image.url){
350
- //eae_overlay = settings.eae_slider_custom_overlay_image.url;
351
- //}else{
352
- eae_overlay = '00.png';
353
- //}
354
- }else{
355
- if(settings.eae_slider_overlay){
356
- eae_overlay = settings.eae_slider_overlay + '.png';
357
- }else{
358
- eae_overlay = '00.png';
359
- }
360
- }
361
- #>
362
-
363
- <div class="eae-section-bs">
364
- <div class="eae-section-bs-inner"
365
- data-eae-bg-slider="{{ slides_path_string }}"
366
- data-eae-bg-slider-transition="{{ eae_transition }}"
367
- data-eae-bg-slider-animation="{{ eae_animation }}"
368
- data-eae-bg-custom-overlay="{{ eae_custom_overlay }}"
369
- data-eae-bg-slider-overlay="{{ eae_overlay }}"
370
- data-eae-bg-slider-cover="{{ eae_cover }}"
371
- data-eae-bs-slider-delay="{{ eae_delay }}"
372
- data-eae-bs-slider-timer="{{ eae_timer }}"
373
- ></div>
374
- </div>
375
-
376
- <?php
377
- $slider_content = ob_get_contents();
378
- ob_end_clean();
379
- $template = $slider_content . $old_template;
380
-
381
- return $template;
382
- }
383
 
384
  }
385
 
386
- //EAE_Bg_Slider::instance();
7
  use Elementor\Utils;
8
 
9
  class Module {
10
+ // phpcs:ignore PSR2.Classes.PropertyDeclaration.Underscore
11
  private static $_instance = null;
12
 
13
  public static function instance() {
18
  }
19
 
20
  private function __construct() {
21
+ add_action( 'elementor/element/after_section_end', [ $this, '_add_controls' ], 10, 3 );
22
 
23
+ add_action( 'elementor/frontend/element/before_render', [ $this, '_before_render' ], 10, 1 );
24
 
25
+ add_action( 'elementor/frontend/column/before_render', [ $this, '_before_render' ], 10, 1 );
26
+ add_action( 'elementor/frontend/section/before_render', [ $this, '_before_render' ], 10, 1 );
27
 
28
+ add_action( 'elementor/element/print_template', [ $this, '_print_template' ], 10, 2 );
29
+ add_action( 'elementor/section/print_template', [ $this, '_print_template' ], 10, 2 );
30
+ add_action( 'elementor/column/print_template', [ $this, '_print_template' ], 10, 2 );
31
 
32
  add_action( 'wp_enqueue_scripts', [ $this, 'eae_add_js_css' ] );
33
  }
34
 
35
+ public function eae_add_js_css() {
36
+ wp_enqueue_style( 'vegas-css' );
37
+ wp_enqueue_script( 'vegas' );
38
+ wp_enqueue_script( 'wts-swiper-script' );
39
+ wp_enqueue_style( 'wts-swiper-style' );
40
+ }
41
 
42
  public function _add_controls( $element, $section_id, $args ) {
43
+ if ( ( 'section' === $element->get_name() && 'section_background' === $section_id ) || ( 'column' === $element->get_name() && 'section_style' === $section_id ) ) {
44
 
45
  $element->start_controls_section(
46
  '_eae_section_bg_slider',
47
  [
48
  'label' => __( 'EAE - Background Slider', 'wts-eae' ),
49
+ 'tab' => Controls_Manager::TAB_STYLE,
50
  ]
51
  );
52
 
53
  $element->add_control(
54
  'eae_bg_slider_images',
55
  [
56
+ 'label' => __( 'Add Images', 'wts-eae' ),
57
+ 'type' => Controls_Manager::GALLERY,
58
+ 'default' => [],
59
+ 'dynamic' => [
60
+ 'active' => true,
61
+ ],
62
  ]
63
  );
64
 
69
  ]
70
  );
71
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
  $element->add_control(
73
  'eae_slider_transition',
74
  [
99
  'blur2' => __( 'Blur 2', 'wts-eae' ),
100
  'flash' => __( 'Flash', 'wts-eae' ),
101
  'flash2' => __( 'Flash 2', 'wts-eae' ),
102
+ 'random' => __( 'Random', 'wts-eae' ),
103
  ],
104
  'default' => 'fade',
105
  ]
120
  'kenburnsDownLeft' => __( 'Kenburns Down Left', 'wts-eae' ),
121
  'kenburnsDownRight' => __( 'Kenburns Down Right', 'wts-eae' ),
122
  'random' => __( 'Random', 'wts-eae' ),
123
+ '' => __( 'None', 'wts-eae' ),
124
  ],
125
  'default' => 'kenburns',
126
  ]
137
  'return_value' => 'yes',
138
  ]
139
  );
140
+
 
 
 
 
 
 
 
 
 
141
  $element->add_group_control(
142
  Group_Control_Background::get_type(),
143
  [
147
  'selector' => '{{WRAPPER}} .vegas-overlay',
148
  'condition' => [
149
  'eae_custom_overlay_switcher' => 'yes',
150
+ ],
151
  ]
152
  );
153
  $element->add_control(
165
  '06' => __( 'Style 6', 'wts-eae' ),
166
  '07' => __( 'Style 7', 'wts-eae' ),
167
  '08' => __( 'Style 8', 'wts-eae' ),
168
+ '09' => __( 'Style 9', 'wts-eae' ),
169
  ],
170
  'default' => '01',
171
  'condition' => [
172
  'eae_custom_overlay_switcher' => '',
173
+ ],
174
  ]
175
  );
176
  $element->add_control(
180
  'type' => Controls_Manager::SELECT,
181
  'options' => [
182
  'true' => __( 'True', 'wts-eae' ),
183
+ 'false' => __( 'False', 'wts-eae' ),
184
  ],
185
  'default' => 'true',
186
  ]
202
  'type' => Controls_Manager::SELECT,
203
  'options' => [
204
  'true' => __( 'True', 'wts-eae' ),
205
+ 'false' => __( 'False', 'wts-eae' ),
206
  ],
207
  'default' => 'true',
208
  ]
213
  }
214
  }
215
 
216
+ public function _before_render( \Elementor\Element_Base $element ) {
217
 
218
+ if ( $element->get_name() !== 'section' && $element->get_name() !== 'column' ) {
219
  return;
220
  }
221
  $settings = $element->get_settings_for_display();
 
222
 
223
  $element->add_render_attribute( '_wrapper', 'class', 'has_eae_slider' );
224
  $element->add_render_attribute( 'eae-bs-background-slideshow-wrapper', 'class', 'eae-bs-background-slideshow-wrapper' );
227
 
228
  $slides = [];
229
 
230
+ if ( empty( $settings['eae_bg_slider_images'] ) ) {
231
  return;
232
  }
233
+ foreach ( $settings['eae_bg_slider_images'] as $attachment ) {
234
+ if ( array_key_exists( 'url', $attachment ) ) {
235
+ $image_url = Group_Control_Image_Size::get_attachment_image_src( $attachment['id'], 'eae_thumbnail', $settings );
236
+ } else {
237
+
238
+ $image_url = Group_Control_Image_Size::get_attachment_image_src( $attachment['id'], 'eae_thumbnail', $settings );
239
+
240
+ }
241
+ $slides[] = [ 'src' => $image_url ];
242
+ }
243
+
 
 
244
  if ( empty( $slides ) ) {
245
  return;
246
  }
247
 
248
  ?>
249
 
250
+ <script type="text/javascript">
251
+ jQuery(document).ready(function () {
252
+ jQuery(".elementor-element-<?php echo $element->get_id(); ?>").prepend('<div class="eae-section-bs"><div class="eae-section-bs-inner"></div></div>');
253
+ if ('<?php echo $settings['eae_custom_overlay_switcher']; ?>' === 'yes') {
254
+
255
+ var bgoverlay = '<?php echo EAE_URL . '/assets/lib/vegas/overlays/00.png'; ?>';
256
+ } else {
257
+ if ('<?php echo $settings['eae_slider_overlay']; ?>') {
258
+ var bgoverlay = '<?php echo EAE_URL . 'assets/lib/vegas/overlays/' . $settings['eae_slider_overlay'] . '.png'; ?>';
259
+ } else {
260
+ var bgoverlay = '<?php echo EAE_URL . 'assets/lib/vegas/overlays/00.png'; ?>';
261
+ }
262
+ }
263
+
264
+
265
+ jQuery(".elementor-element-<?php echo $element->get_id(); ?>").children('.eae-section-bs').children('.eae-section-bs-inner').vegas({
266
+ slides: <?php echo wp_json_encode( $slides ); ?>,
267
+ transition: '<?php echo $settings['eae_slider_transition']; ?>',
268
+ animation: '<?php echo $settings['eae_slider_animation']; ?>',
269
+ overlay: bgoverlay,
270
+ cover: <?php echo $settings['eae_slider_cover']; ?>,
271
+ delay: <?php echo $settings['eae_slider_delay']; ?>,
272
+ timer: <?php echo $settings['eae_slider_timer_bar']; ?>
273
+ });
274
+ if ('<?php echo $settings['eae_custom_overlay_switcher']; ?>' === 'yes') {
275
+ jQuery(".elementor-element-<?php echo $element->get_id(); ?>").children('.eae-section-bs').children('.eae-section-bs-inner').children('.vegas-overlay').css('background-image', '');
276
+ }
277
+ });
278
+ </script>
 
 
 
279
  <?php
280
  }
281
+
282
+ public function _print_template( $template, $widget ) {
283
+ if ( $widget->get_name() !== 'section' && $widget->get_name() !== 'column' ) {
284
+ return $template;
285
+ }
286
+
287
+ $old_template = $template;
288
+ ob_start();
289
+ ?>
290
+ <#
291
+
292
+ var rand_id = Math.random().toString(36).substring(7);
293
+ var slides_path_string = '';
294
+ var eae_transition = settings.eae_slider_transition;
295
+ var eae_animation = settings.eae_slider_animation;
296
+ var eae_custom_overlay = settings.eae_custom_overlay_switcher;
297
+ var eae_overlay = '';
298
+ var eae_cover = settings.eae_slider_cover;
299
+ var eae_delay = settings.eae_slider_delay;
300
+ var eae_timer = settings.eae_slider_timer_bar;
301
+
302
+ if(!_.isUndefined(settings.eae_bg_slider_images) && settings.eae_bg_slider_images.length){
303
+ var slider_data = [];
304
+ slides = settings.eae_bg_slider_images;
305
+ for(var i in slides){
306
+ slider_data[i] = slides[i].url;
307
+ }
308
+ slides_path_string = slider_data.join();
309
+ }
310
+
311
+ if(settings.eae_custom_overlay_switcher == 'yes'){
312
+ //if(settings.eae_slider_custom_overlay_image.url){
313
+ //eae_overlay = settings.eae_slider_custom_overlay_image.url;
314
+ //}else{
315
+ eae_overlay = '00.png';
316
+ //}
317
+ }else{
318
+ if(settings.eae_slider_overlay){
319
+ eae_overlay = settings.eae_slider_overlay + '.png';
320
+ }else{
321
+ eae_overlay = '00.png';
322
+ }
323
+ }
324
+ #>
325
+
326
+ <div class="eae-section-bs">
327
+ <div class="eae-section-bs-inner"
328
+ data-eae-bg-slider="{{ slides_path_string }}"
329
+ data-eae-bg-slider-transition="{{ eae_transition }}"
330
+ data-eae-bg-slider-animation="{{ eae_animation }}"
331
+ data-eae-bg-custom-overlay="{{ eae_custom_overlay }}"
332
+ data-eae-bg-slider-overlay="{{ eae_overlay }}"
333
+ data-eae-bg-slider-cover="{{ eae_cover }}"
334
+ data-eae-bs-slider-delay="{{ eae_delay }}"
335
+ data-eae-bs-slider-timer="{{ eae_timer }}"
336
+ ></div>
337
+ </div>
338
+
339
+ <?php
340
+ $slider_content = ob_get_contents();
341
+ ob_end_clean();
342
+ $template = $slider_content . $old_template;
343
+
344
+ return $template;
345
+ }
346
 
347
  }
348
 
 
modules/chart/classes/map-data.php CHANGED
@@ -6,258 +6,252 @@ namespace WTS_EAE\Modules\Chart\Classes;
6
 
7
  class Map_Data {
8
 
9
- public static function render_chart($settings) {
10
- $chart_settings = json_encode(
11
- [
12
- 'type' => $settings['_skin'],
13
- 'data' => [
14
- 'labels' => explode(',', esc_html( $settings['labels'] ) ),
15
- 'datasets' => self::chart_data($settings),
16
- ],
17
- 'options' => self::chart_option($settings),
18
- ]
19
- );
20
-
21
- return $chart_settings;
22
- }
23
-
24
- public static function chart_data($settings) {
25
-
26
- $chart_data = [];
27
- $datasets = $settings['dataset'];
28
-
29
- if(!empty($datasets)){
30
- foreach ($datasets as $dataset){
31
- $dataset['label'] = !empty( $dataset['dataset_label'] ) ? esc_html( $dataset['dataset_label'] ) : '';
32
- $dataset['data'] = !empty( $dataset['dataset_data'] ) ? array_map( 'trim', explode(',', $dataset['dataset_data'] ) ) : '';
33
-
34
- if($settings['_skin'] == 'bar' || $settings['_skin'] == 'horizontalBar'){
35
- $dataset['backgroundColor'] = !empty( $dataset['background_color'] ) ? $dataset['background_color'] : '#52C0C0BA';
36
- $dataset['hoverBackgroundColor'] = !empty( $dataset['background_hover_color'] ) ? $dataset['background_hover_color'] : '#52C0C0E0';
37
- $dataset['borderWidth'] = !empty( $settings['bar_border_width'] ) ? $settings['bar_border_width'] : 1;
38
- $dataset['borderColor'] = !empty( $dataset['border_color'] ) ? $dataset['border_color'] : '#49C4C4';
39
- $dataset['hoverBorderColor'] = !empty( $dataset['border_hover_color'] ) ? $dataset['border_hover_color'] : '#49C4C4';
40
- }
41
-
42
- // Line Chart
43
- if($settings['_skin'] == 'line'){
44
- $dataset['pointBackgroundColor'] = !empty( $dataset['point_background_color'] ) ? $dataset['point_background_color'] : '#49C4C4';
45
- $dataset['pointHoverBackgroundColor'] = !empty( $dataset['point_background_hover_color'] ) ? $dataset['point_background_hover_color'] : '#49C4C4';
46
- $dataset['pointBorderColor'] = !empty( $dataset['point_border_color'] ) ? $dataset['point_border_color'] : '#49C4C4';
47
- $dataset['pointHoverBorderColor'] = !empty( $dataset['point_border_hover_color'] ) ? $dataset['point_border_hover_color'] : '#49C4C4';
48
- $dataset['borderWidth'] = !empty( $settings['line_border_width'] ) ? $settings['line_border_width'] : 2;
49
- $dataset['borderColor'] = !empty( $dataset['line_border_color'] ) ? $dataset['line_border_color'] : '#49C4C4';
50
- $dataset['pointRadius'] = !empty( $settings['line_point_size'] ) ? $settings['line_point_size'] : 4;
51
- $dataset['pointHoverRadius'] = !empty( $settings['line_point_hover_size'] ) ? $settings['line_point_hover_size'] : 4;
52
- $dataset['fill'] = $dataset['line_fill_color'] == 'yes' ? true : false;
53
- $dataset['backgroundColor'] = $dataset['fill'] == true ? $dataset['line_bg_color'] : 'rgba(0, 0, 0, 0)';
54
- $dataset['borderJoinStyle'] = !empty( $settings['line_joint_style'] ) ? $settings['line_joint_style'] : 'miter';
55
- $dataset['pointStyle'] = !empty( $settings['line_point_style'] ) ? $settings['line_point_style'] : 'circle';
56
- $dataset['steppedLine'] = $settings['line_stepped'] == 'yes' ? true : false;
57
- }
58
-
59
- $chart_data[] = $dataset;
60
-
61
- }
62
- }
63
-
64
- return $chart_data;
65
-
66
- }
67
-
68
- public static function chart_option($settings) {
69
-
70
- $xaxes_grid_line = $settings['xaxes_grid_line'] == 'yes' ? true : false;
71
- $xaxes_title_display = $settings['xaxes_display_title'] == 'yes' ? true : false;
72
- $xaxes_labels_display = $settings['xaxes_labels_display'] == 'yes' ? true : false;
73
- $yaxes_labels_display = $settings['yaxes_labels_display'] == 'yes' ? true : false;
74
- $yaxes_grid_line = $settings['yaxes_grid_line'] == 'yes' ? true : false;
75
- $yaxes_title_display = $settings['yaxes_display_title'] == 'yes' ? true : false;
76
- $legend_display = $settings['legend_display'] == 'yes' ? true : false;
77
- $title_display = $settings['title_display'] == 'yes' ? true : false;
78
- $display_tooltip = $settings['tooltip_display'] == 'yes' ? true : false;
79
-
80
-
81
- $title = [
82
- 'display' => $title_display,
83
- 'text' => $settings['title'],
84
- 'position' => !empty( $settings['title_position'] ) ? $settings['title_position'] : 'top',
85
- 'fontColor' => !empty( $settings['heading_color'] ) ? $settings['heading_color'] : '#666',
86
- 'fontFamily' => !empty( $settings['heading_font_family'] ) ? $settings['heading_font_family'] : 'auto',
87
- 'fontSize' => !empty( $settings['heading_font_size']['size'] ) ? $settings['heading_font_size']['size'] : 16,
88
- 'fontStyle' => ( !empty( $settings['heading_font_style'] ) ? $settings['heading_font_style'] : '' ) . ' '. ( !empty( $settings['heading_font_weight'] ) ? $settings['heading_font_weight'] : '' ),
89
- 'lineHeight' => !empty( $settings['heading_line_height'] ) ? $settings['heading_line_height'] : 1.2,
90
- 'padding' => !empty( $settings['chart_heading_padding']['size'] ) ? $settings['chart_heading_padding']['size'] : 10,
91
- ];
92
-
93
- $Legend = [
94
- 'display' => $legend_display,
95
- 'position' => !empty( $settings['legend_position'] ) ? $settings['legend_position'] : 'top',
96
- 'align' => $settings['legend_align'],
97
- 'reverse' => $settings['legend_reverse'] == 'yes' ? true : false,
98
- 'labels' => [
99
- 'boxWidth' => !empty( $settings['legend_box_width']['size'] ) ? $settings['legend_box_width']['size'] : 40,
100
- 'fontColor' => !empty( $settings['legend_color'] ) ? $settings['legend_color'] : '#666',
101
- 'fontFamily' => !empty( $settings['legend_font_family'] ) ? $settings['legend_font_family'] : 'auto',
102
- 'fontSize' => !empty( $settings['legend_font_size']['size'] ) ? $settings['legend_font_size']['size'] : 12,
103
- 'fontStyle' => ( !empty( $settings['legend_font_style'] ) ? $settings['legend_font_style'] : '' ) . ' '. ( !empty( $settings['legend_font_weight'] ) ? $settings['legend_font_weight'] : '' ),
104
- 'lineHeight' => !empty( $settings['legend_line_height'] ) ? $settings['legend_line_height'] : 1.2,
105
- 'padding' => !empty( $settings['legend_padding']['size'] ) ? $settings['legend_padding']['size'] : 10,
106
- ],
107
- ];
108
-
109
- $tooltip = [
110
- 'enabled' => $display_tooltip,
111
- 'mode' => !empty( $settings['tooltip_mode'] ) ? $settings['tooltip_mode'] : 'nearest',
112
- 'backgroundColor' => !empty( $settings['tooltip_background_color'] ) ? $settings['tooltip_background_color'] : 'rgba(0, 0, 0, 0.8)',
113
- 'borderColor' => !empty( $settings['tooltip_border_color'] ) ? $settings['tooltip_border_color'] : 'rgba(0, 0, 0, 0.8)',
114
- 'borderWidth' => !empty( $settings['tooltip_border_width']['size'] ) ? $settings['tooltip_border_width']['size'] : 1,
115
- 'cornerRadius' => !empty( $settings['tooltip_border_radius'] ) ? $settings['tooltip_border_radius'] : 6,
116
- 'xPadding' => !empty( $settings['tooltip_padding'] ) ? $settings['tooltip_padding'] : 6,
117
- 'yPadding' => !empty( $settings['tooltip_padding'] ) ? $settings['tooltip_padding'] : 6,
118
- 'caretSize' => !empty( $settings['tooltip_arrow_size'] ) ? $settings['tooltip_arrow_size'] : 5,
119
- 'titleFontColor' => !empty( $settings['tooltip_title_color'] ) ? $settings['tooltip_title_color'] : '#fff',
120
- 'titleFontFamily' => !empty( $settings['tooltip_title_font_family'] ) ? $settings['tooltip_title_font_family'] : 'auto',
121
- 'titleFontSize' => !empty( $settings['tooltip_title_font_size']['size'] ) ? $settings['tooltip_title_font_size']['size'] : 12,
122
- 'titleFontStyle' => ( !empty( $settings['tooltip_title_font_style'] ) ? $settings['tooltip_title_font_style'] : '' ) . ' '. ( !empty( $settings['tooltip_title_font_weight'] ) ? $settings['tooltip_title_font_weight'] : '' ),
123
- 'titleAlign' => !empty( $settings['tooltip_title_align'] ) ? $settings['tooltip_title_align'] : 'left',
124
- 'titleMarginBottom' => !empty( $settings['tooltip_title_margin'] ) ? $settings['tooltip_title_margin'] : 6,
125
- 'bodyFontColor' => !empty( $settings['tooltip_body_color'] ) ? $settings['tooltip_body_color'] : '#fff',
126
- 'bodyFontFamily' => !empty( $settings['tooltip_body_font_family'] ) ? $settings['tooltip_body_font_family'] : 'auto',
127
- 'bodyFontSize' => !empty( $settings['tooltip_body_font_size']['size']) ? $settings['tooltip_body_font_size']['size'] : 12,
128
- 'bodyFontStyle' => ( !empty( $settings['tooltip_body_font_style'] ) ? $settings['tooltip_body_font_style'] : '' ) . ' '. ( !empty( $settings['tooltip_body_font_weight'] ) ? $settings['tooltip_body_font_weight'] : '' ),
129
- 'bodySpacing' => 6,
130
- 'bodyAlign' => !empty( $settings['tooltip_body_align'] ) ? $settings['tooltip_body_align'] : 'left',
131
- ];
132
-
133
- /** X- Axes configuration */
134
-
135
- if( $xaxes_grid_line == 'yes' ){
136
- $xaxes_grid = [
137
- 'drawBorder' => false,
138
- 'color' => !empty( $settings['xaxes_grid_color'] ) ? $settings['xaxes_grid_color'] : 'rgba(0, 0, 0, 0.1)',
139
- 'lineWidth' => !empty( $settings['xaxes_grid_width']['size'] ) ? $settings['xaxes_grid_width']['size'] : 1,
140
- ];
141
- } else {
142
  $xaxes_grid = [];
143
- }
144
-
145
- $xaxes_labels =[
146
- 'display' => $xaxes_labels_display,
147
- 'beginAtZero' => true,
148
- 'stepSize' => isset( $settings['step_size'] ) ? $settings['step_size'] : 10,
149
- 'max' => isset( $settings['axis_range'] ) ? $settings['axis_range'] : 100,
150
- 'fontColor' => !empty( $settings['xaxes_label_color'] ) ? $settings['xaxes_label_color'] : '#666',
151
- 'fontFamily' => !empty( $settings['xaxes_lable_font_family'] ) ? $settings['xaxes_lable_font_family'] : 'auto',
152
- 'fontSize' => !empty( $settings['xaxes_lable_font_size']['size'] ) ? $settings['xaxes_lable_font_size']['size'] : 12,
153
- 'fontStyle' => ( !empty( $settings['xaxes_lable_font_style'] ) ? $settings['xaxes_lable_font_style'] : '' ) . ' '. ( !empty( $settings['xaxes_lable_font_weight'] ) ? $settings['xaxes_lable_font_weight'] : '' ),
154
- 'lineHeight' => !empty( $settings['xaxes_lable_line_height'] ) ? $settings['xaxes_lable_line_height'] : 1.2,
155
- 'padding' => !empty( $settings['xaxes_labels_padding']['size'] ) ? $settings['xaxes_labels_padding']['size'] : 10,
156
- ];
157
-
158
- if( $xaxes_title_display == 'yes' ){
159
- $xaxes_Title = [
160
- 'display' => $xaxes_title_display,
161
- 'labelString' => $settings['xaxes_title'],
162
- 'fontColor' => !empty( $settings['xaxes_title_color'] ) ? $settings['xaxes_title_color'] : '#666',
163
- 'fontFamily' => !empty( $settings['xaxes_title_font_family'] ) ? $settings['xaxes_title_font_family'] : 'auto',
164
- 'fontSize' => !empty( $settings['xaxes_title_font_size']['size'] ) ? $settings['xaxes_title_font_size']['size'] : 15,
165
- 'fontStyle' => ( !empty( $settings['xaxes_title_font_style'] ) ? $settings['xaxes_title_font_style'] : '' ) . ' '. ( !empty( $settings['xaxes_title_font_weight'] ) ? $settings['xaxes_title_font_weight'] : '' ),
166
- 'lineHeight' => !empty( $settings['xaxes_title_line_height'] ) ? $settings['xaxes_title_line_height'] : 1.2,
167
- ];
168
- } else {
169
- $xaxes_Title = [];
170
- }
171
-
172
-
173
- /** Y- Axes configuration */
174
-
175
- if( $yaxes_grid_line == 'yes' ){
176
- $yaxes_grid = [
177
- 'drawBorder' => false,
178
- 'color' => !empty( $settings['yaxes_grid_color'] ) ? $settings['yaxes_grid_color'] : 'rgba(0, 0, 0, 0.1)',
179
- 'lineWidth' => !empty( $settings['yaxes_grid_width']['size'] ) ? $settings['yaxes_grid_width']['size'] : 1,
180
- ];
181
- } else {
182
  $yaxes_grid = [];
183
- }
184
-
185
- $yaxes_labels =[
186
- 'display' => $yaxes_labels_display,
187
- 'beginAtZero' => true,
188
- 'stepSize' => isset( $settings['step_size'] ) ? $settings['step_size'] : 1,
189
- 'max' => isset( $settings['axis_range'] ) ? $settings['axis_range'] : 10,
190
- 'fontColor' => !empty( $settings['yaxes_label_color'] ) ? $settings['yaxes_label_color'] : '#666',
191
- 'fontFamily' => !empty( $settings['yaxes_lable_font_family'] ) ? $settings['yaxes_lable_font_family'] : 'auto',
192
- 'fontSize' => !empty( $settings['yaxes_lable_font_size']['size'] ) ? $settings['yaxes_lable_font_size']['size'] : 12,
193
- 'fontStyle' => ( !empty( $settings['yaxes_lable_font_style'] ) ? $settings['yaxes_lable_font_style'] : '' ) . ' '. ( !empty( $settings['yaxes_lable_font_weight'] ) ? $settings['yaxes_lable_font_weight'] : '' ),
194
- 'lineHeight' => !empty( $settings['yaxes_lable_line_height'] ) ? $settings['yaxes_lable_line_height'] : 1.2,
195
- 'padding' => !empty( $settings['yaxes_labels_padding']['size'] ) ? $settings['yaxes_labels_padding']['size'] : 10,
196
- ];
197
-
198
- if( $yaxes_title_display == 'yes' ){
199
- $yaxes_Title = [
200
- 'display' => $yaxes_title_display,
201
- 'labelString' => $settings['yaxes_title'],
202
- 'fontColor' => !empty( $settings['yaxes_title_color'] ) ? $settings['yaxes_title_color'] : '#666',
203
- 'fontFamily' => !empty( $settings['yaxes_title_font_family'] ) ? $settings['yaxes_title_font_family'] : 'auto',
204
- 'fontSize' => !empty( $settings['yaxes_title_font_size']['size'] ) ? $settings['yaxes_title_font_size']['size'] : 15,
205
- 'fontStyle' => ( !empty( $settings['yaxes_title_font_style'] ) ? $settings['yaxes_title_font_style'] : '' ) . ' '. ( !empty( $settings['yaxes_title_font_weight'] ) ? $settings['yaxes_title_font_weight'] : '' ),
206
- 'lineHeight' => !empty( $settings['yaxes_title_line_height'] ) ? $settings['yaxes_title_line_height'] : 1.2,
207
- ];
208
- } else {
209
- $yaxes_Title = [];
210
- }
211
-
212
- //echo'<pre>'; print_r($xaxes_Title); echo'</pre>';
213
-
214
- /** Options Array */
215
-
216
- $options = [
217
-
218
- 'title' => $title,
219
- 'tooltips' => $tooltip,
220
- 'legend' => $Legend,
221
- 'animation' => [
222
  'easing' => $settings['chart_animation'],
223
  'duration' => $settings['duration_animation'],
224
- ],
225
- 'layout' => [
226
  'padding' => [
227
- 'top' => $settings['eae_chart_padding']['top'],
228
- 'right' => $settings['eae_chart_padding']['right'],
229
  'bottom' => $settings['eae_chart_padding']['bottom'],
230
- 'left' => $settings['eae_chart_padding']['left']
231
- ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
232
  ],
233
- 'maintainAspectRatio' => false,
234
- 'scales' => [
235
- 'xAxes' => [
236
- [
237
- 'ticks' => $xaxes_labels,
238
- 'scaleLabel' => $xaxes_Title,
239
- 'gridLines' => $xaxes_grid,
240
- 'barPercentage' => ( !empty( $settings['bar_width']['size'] ) ) ? $settings['bar_width']['size'] / 100 : '0.80000000000000004',
241
- 'categoryPercentage' => ( !empty( $settings['bar_category_width']['size'] ) ) ? $settings['bar_category_width']['size'] / 100 : '0.84999999999999998',
242
- ]
243
- ],
244
- 'yAxes' => [
245
- [
246
- 'ticks' => $yaxes_labels,
247
- 'scaleLabel' => $yaxes_Title,
248
- 'gridLines' => $yaxes_grid,
249
- 'barPercentage' => ( !empty( $settings['bar_width']['size'] ) ) ? $settings['bar_width']['size'] / 100 : '0.80000000000000004',
250
- 'categoryPercentage' => ( !empty( $settings['bar_category_width']['size'] ) ) ? $settings['bar_category_width']['size'] / 100 : '0.84999999999999998',
251
- ]
252
-
253
- ],
254
-
255
- ],
256
-
257
- ];
258
-
259
- return $options;
260
-
261
- }
262
-
263
- }
6
 
7
  class Map_Data {
8
 
9
+ public static function render_chart( $settings ) {
10
+ $chart_settings = wp_json_encode(
11
+ [
12
+ 'type' => $settings['_skin'],
13
+ 'data' => [
14
+ 'labels' => explode( ',', esc_html( $settings['labels'] ) ),
15
+ 'datasets' => self::chart_data( $settings ),
16
+ ],
17
+ 'options' => self::chart_option( $settings ),
18
+ ]
19
+ );
20
+
21
+ return $chart_settings;
22
+ }
23
+
24
+ public static function chart_data( $settings ) {
25
+
26
+ $chart_data = [];
27
+ $datasets = $settings['dataset'];
28
+
29
+ if ( ! empty( $datasets ) ) {
30
+ foreach ( $datasets as $dataset ) {
31
+ $dataset['label'] = ! empty( $dataset['dataset_label'] ) ? esc_html( $dataset['dataset_label'] ) : '';
32
+ $dataset['data'] = ! empty( $dataset['dataset_data'] ) ? array_map( 'trim', explode( ',', $dataset['dataset_data'] ) ) : '';
33
+
34
+ if ( $settings['_skin'] === 'bar' || $settings['_skin'] === 'horizontalBar' ) {
35
+ $dataset['backgroundColor'] = ! empty( $dataset['background_color'] ) ? $dataset['background_color'] : '#52C0C0BA';
36
+ $dataset['hoverBackgroundColor'] = ! empty( $dataset['background_hover_color'] ) ? $dataset['background_hover_color'] : '#52C0C0E0';
37
+ $dataset['borderWidth'] = ! empty( $settings['bar_border_width'] ) ? $settings['bar_border_width'] : 1;
38
+ $dataset['borderColor'] = ! empty( $dataset['border_color'] ) ? $dataset['border_color'] : '#49C4C4';
39
+ $dataset['hoverBorderColor'] = ! empty( $dataset['border_hover_color'] ) ? $dataset['border_hover_color'] : '#49C4C4';
40
+ }
41
+
42
+ // Line Chart
43
+ if ( $settings['_skin'] === 'line' ) {
44
+ $dataset['pointBackgroundColor'] = ! empty( $dataset['point_background_color'] ) ? $dataset['point_background_color'] : '#49C4C4';
45
+ $dataset['pointHoverBackgroundColor'] = ! empty( $dataset['point_background_hover_color'] ) ? $dataset['point_background_hover_color'] : '#49C4C4';
46
+ $dataset['pointBorderColor'] = ! empty( $dataset['point_border_color'] ) ? $dataset['point_border_color'] : '#49C4C4';
47
+ $dataset['pointHoverBorderColor'] = ! empty( $dataset['point_border_hover_color'] ) ? $dataset['point_border_hover_color'] : '#49C4C4';
48
+ $dataset['borderWidth'] = ! empty( $settings['line_border_width'] ) ? $settings['line_border_width'] : 2;
49
+ $dataset['borderColor'] = ! empty( $dataset['line_border_color'] ) ? $dataset['line_border_color'] : '#49C4C4';
50
+ $dataset['pointRadius'] = ! empty( $settings['line_point_size'] ) ? $settings['line_point_size'] : 4;
51
+ $dataset['pointHoverRadius'] = ! empty( $settings['line_point_hover_size'] ) ? $settings['line_point_hover_size'] : 4;
52
+ $dataset['fill'] = $dataset['line_fill_color'] === 'yes' ? true : false;
53
+ $dataset['backgroundColor'] = $dataset['fill'] === true ? $dataset['line_bg_color'] : 'rgba(0, 0, 0, 0)';
54
+ $dataset['borderJoinStyle'] = ! empty( $settings['line_joint_style'] ) ? $settings['line_joint_style'] : 'miter';
55
+ $dataset['pointStyle'] = ! empty( $settings['line_point_style'] ) ? $settings['line_point_style'] : 'circle';
56
+ $dataset['steppedLine'] = $settings['line_stepped'] === 'yes' ? true : false;
57
+ }
58
+
59
+ $chart_data[] = $dataset;
60
+
61
+ }
62
+ }
63
+
64
+ return $chart_data;
65
+ }
66
+
67
+ public static function chart_option( $settings ) {
68
+
69
+ $xaxes_grid_line = $settings['xaxes_grid_line'] === 'yes' ? true : false;
70
+ $xaxes_title_display = $settings['xaxes_display_title'] === 'yes' ? true : false;
71
+ $xaxes_labels_display = $settings['xaxes_labels_display'] === 'yes' ? true : false;
72
+ $yaxes_labels_display = $settings['yaxes_labels_display'] === 'yes' ? true : false;
73
+ $yaxes_grid_line = $settings['yaxes_grid_line'] === 'yes' ? true : false;
74
+ $yaxes_title_display = $settings['yaxes_display_title'] === 'yes' ? true : false;
75
+ $legend_display = $settings['legend_display'] === 'yes' ? true : false;
76
+ $title_display = $settings['title_display'] === 'yes' ? true : false;
77
+ $display_tooltip = $settings['tooltip_display'] === 'yes' ? true : false;
78
+
79
+ $title = [
80
+ 'display' => $title_display,
81
+ 'text' => $settings['title'],
82
+ 'position' => ! empty( $settings['title_position'] ) ? $settings['title_position'] : 'top',
83
+ 'fontColor' => ! empty( $settings['heading_color'] ) ? $settings['heading_color'] : '#666',
84
+ 'fontFamily' => ! empty( $settings['heading_font_family'] ) ? $settings['heading_font_family'] : 'auto',
85
+ 'fontSize' => ! empty( $settings['heading_font_size']['size'] ) ? $settings['heading_font_size']['size'] : 16,
86
+ 'fontStyle' => ( ! empty( $settings['heading_font_style'] ) ? $settings['heading_font_style'] : '' ) . ' ' . ( ! empty( $settings['heading_font_weight'] ) ? $settings['heading_font_weight'] : '' ),
87
+ 'lineHeight' => ! empty( $settings['heading_line_height'] ) ? $settings['heading_line_height'] : 1.2,
88
+ 'padding' => ! empty( $settings['chart_heading_padding']['size'] ) ? $settings['chart_heading_padding']['size'] : 10,
89
+ ];
90
+
91
+ $Legend = [
92
+ 'display' => $legend_display,
93
+ 'position' => ! empty( $settings['legend_position'] ) ? $settings['legend_position'] : 'top',
94
+ 'align' => $settings['legend_align'],
95
+ 'reverse' => $settings['legend_reverse'] === 'yes' ? true : false,
96
+ 'labels' => [
97
+ 'boxWidth' => ! empty( $settings['legend_box_width']['size'] ) ? $settings['legend_box_width']['size'] : 40,
98
+ 'fontColor' => ! empty( $settings['legend_color'] ) ? $settings['legend_color'] : '#666',
99
+ 'fontFamily' => ! empty( $settings['legend_font_family'] ) ? $settings['legend_font_family'] : 'auto',
100
+ 'fontSize' => ! empty( $settings['legend_font_size']['size'] ) ? $settings['legend_font_size']['size'] : 12,
101
+ 'fontStyle' => ( ! empty( $settings['legend_font_style'] ) ? $settings['legend_font_style'] : '' ) . ' ' . ( ! empty( $settings['legend_font_weight'] ) ? $settings['legend_font_weight'] : '' ),
102
+ 'lineHeight' => ! empty( $settings['legend_line_height'] ) ? $settings['legend_line_height'] : 1.2,
103
+ 'padding' => ! empty( $settings['legend_padding']['size'] ) ? $settings['legend_padding']['size'] : 10,
104
+ ],
105
+ ];
106
+
107
+ $tooltip = [
108
+ 'enabled' => $display_tooltip,
109
+ 'mode' => ! empty( $settings['tooltip_mode'] ) ? $settings['tooltip_mode'] : 'nearest',
110
+ 'backgroundColor' => ! empty( $settings['tooltip_background_color'] ) ? $settings['tooltip_background_color'] : 'rgba(0, 0, 0, 0.8)',
111
+ 'borderColor' => ! empty( $settings['tooltip_border_color'] ) ? $settings['tooltip_border_color'] : 'rgba(0, 0, 0, 0.8)',
112
+ 'borderWidth' => ! empty( $settings['tooltip_border_width']['size'] ) ? $settings['tooltip_border_width']['size'] : 1,
113
+ 'cornerRadius' => ! empty( $settings['tooltip_border_radius'] ) ? $settings['tooltip_border_radius'] : 6,
114
+ 'xPadding' => ! empty( $settings['tooltip_padding'] ) ? $settings['tooltip_padding'] : 6,
115
+ 'yPadding' => ! empty( $settings['tooltip_padding'] ) ? $settings['tooltip_padding'] : 6,
116
+ 'caretSize' => ! empty( $settings['tooltip_arrow_size'] ) ? $settings['tooltip_arrow_size'] : 5,
117
+ 'titleFontColor' => ! empty( $settings['tooltip_title_color'] ) ? $settings['tooltip_title_color'] : '#fff',
118
+ 'titleFontFamily' => ! empty( $settings['tooltip_title_font_family'] ) ? $settings['tooltip_title_font_family'] : 'auto',
119
+ 'titleFontSize' => ! empty( $settings['tooltip_title_font_size']['size'] ) ? $settings['tooltip_title_font_size']['size'] : 12,
120
+ 'titleFontStyle' => ( ! empty( $settings['tooltip_title_font_style'] ) ? $settings['tooltip_title_font_style'] : '' ) . ' ' . ( ! empty( $settings['tooltip_title_font_weight'] ) ? $settings['tooltip_title_font_weight'] : '' ),
121
+ 'titleAlign' => ! empty( $settings['tooltip_title_align'] ) ? $settings['tooltip_title_align'] : 'left',
122
+ 'titleMarginBottom' => ! empty( $settings['tooltip_title_margin'] ) ? $settings['tooltip_title_margin'] : 6,
123
+ 'bodyFontColor' => ! empty( $settings['tooltip_body_color'] ) ? $settings['tooltip_body_color'] : '#fff',
124
+ 'bodyFontFamily' => ! empty( $settings['tooltip_body_font_family'] ) ? $settings['tooltip_body_font_family'] : 'auto',
125
+ 'bodyFontSize' => ! empty( $settings['tooltip_body_font_size']['size'] ) ? $settings['tooltip_body_font_size']['size'] : 12,
126
+ 'bodyFontStyle' => ( ! empty( $settings['tooltip_body_font_style'] ) ? $settings['tooltip_body_font_style'] : '' ) . ' ' . ( ! empty( $settings['tooltip_body_font_weight'] ) ? $settings['tooltip_body_font_weight'] : '' ),
127
+ 'bodySpacing' => 6,
128
+ 'bodyAlign' => ! empty( $settings['tooltip_body_align'] ) ? $settings['tooltip_body_align'] : 'left',
129
+ ];
130
+
131
+ /** X- Axes configuration */
132
+
133
+ if ( $xaxes_grid_line === 'yes' ) {
134
+ $xaxes_grid = [
135
+ 'drawBorder' => false,
136
+ 'color' => ! empty( $settings['xaxes_grid_color'] ) ? $settings['xaxes_grid_color'] : 'rgba(0, 0, 0, 0.1)',
137
+ 'lineWidth' => ! empty( $settings['xaxes_grid_width']['size'] ) ? $settings['xaxes_grid_width']['size'] : 1,
138
+ ];
139
+ } else {
 
 
140
  $xaxes_grid = [];
141
+ }
142
+
143
+ $xaxes_labels = [
144
+ 'display' => $xaxes_labels_display,
145
+ 'beginAtZero' => true,
146
+ 'stepSize' => isset( $settings['step_size'] ) ? $settings['step_size'] : 10,
147
+ 'max' => isset( $settings['axis_range'] ) ? $settings['axis_range'] : 100,
148
+ 'fontColor' => ! empty( $settings['xaxes_label_color'] ) ? $settings['xaxes_label_color'] : '#666',
149
+ 'fontFamily' => ! empty( $settings['xaxes_lable_font_family'] ) ? $settings['xaxes_lable_font_family'] : 'auto',
150
+ 'fontSize' => ! empty( $settings['xaxes_lable_font_size']['size'] ) ? $settings['xaxes_lable_font_size']['size'] : 12,
151
+ 'fontStyle' => ( ! empty( $settings['xaxes_lable_font_style'] ) ? $settings['xaxes_lable_font_style'] : '' ) . ' ' . ( ! empty( $settings['xaxes_lable_font_weight'] ) ? $settings['xaxes_lable_font_weight'] : '' ),
152
+ 'lineHeight' => ! empty( $settings['xaxes_lable_line_height'] ) ? $settings['xaxes_lable_line_height'] : 1.2,
153
+ 'padding' => ! empty( $settings['xaxes_labels_padding']['size'] ) ? $settings['xaxes_labels_padding']['size'] : 10,
154
+ ];
155
+
156
+ if ( $xaxes_title_display === 'yes' ) {
157
+ $xaxes_Title = [
158
+ 'display' => $xaxes_title_display,
159
+ 'labelString' => $settings['xaxes_title'],
160
+ 'fontColor' => ! empty( $settings['xaxes_title_color'] ) ? $settings['xaxes_title_color'] : '#666',
161
+ 'fontFamily' => ! empty( $settings['xaxes_title_font_family'] ) ? $settings['xaxes_title_font_family'] : 'auto',
162
+ 'fontSize' => ! empty( $settings['xaxes_title_font_size']['size'] ) ? $settings['xaxes_title_font_size']['size'] : 15,
163
+ 'fontStyle' => ( ! empty( $settings['xaxes_title_font_style'] ) ? $settings['xaxes_title_font_style'] : '' ) . ' ' . ( ! empty( $settings['xaxes_title_font_weight'] ) ? $settings['xaxes_title_font_weight'] : '' ),
164
+ 'lineHeight' => ! empty( $settings['xaxes_title_line_height'] ) ? $settings['xaxes_title_line_height'] : 1.2,
165
+ ];
166
+ } else {
167
+ $xaxes_Title = [];
168
+ }
169
+
170
+ /** Y- Axes configuration */
171
+
172
+ if ( $yaxes_grid_line === 'yes' ) {
173
+ $yaxes_grid = [
174
+ 'drawBorder' => false,
175
+ 'color' => ! empty( $settings['yaxes_grid_color'] ) ? $settings['yaxes_grid_color'] : 'rgba(0, 0, 0, 0.1)',
176
+ 'lineWidth' => ! empty( $settings['yaxes_grid_width']['size'] ) ? $settings['yaxes_grid_width']['size'] : 1,
177
+ ];
178
+ } else {
 
179
  $yaxes_grid = [];
180
+ }
181
+
182
+ $yaxes_labels = [
183
+ 'display' => $yaxes_labels_display,
184
+ 'beginAtZero' => true,
185
+ 'stepSize' => isset( $settings['step_size'] ) ? $settings['step_size'] : 1,
186
+ 'max' => isset( $settings['axis_range'] ) ? $settings['axis_range'] : 10,
187
+ 'fontColor' => ! empty( $settings['yaxes_label_color'] ) ? $settings['yaxes_label_color'] : '#666',
188
+ 'fontFamily' => ! empty( $settings['yaxes_lable_font_family'] ) ? $settings['yaxes_lable_font_family'] : 'auto',
189
+ 'fontSize' => ! empty( $settings['yaxes_lable_font_size']['size'] ) ? $settings['yaxes_lable_font_size']['size'] : 12,
190
+ 'fontStyle' => ( ! empty( $settings['yaxes_lable_font_style'] ) ? $settings['yaxes_lable_font_style'] : '' ) . ' ' . ( ! empty( $settings['yaxes_lable_font_weight'] ) ? $settings['yaxes_lable_font_weight'] : '' ),
191
+ 'lineHeight' => ! empty( $settings['yaxes_lable_line_height'] ) ? $settings['yaxes_lable_line_height'] : 1.2,
192
+ 'padding' => ! empty( $settings['yaxes_labels_padding']['size'] ) ? $settings['yaxes_labels_padding']['size'] : 10,
193
+ ];
194
+
195
+ if ( $yaxes_title_display === 'yes' ) {
196
+ $yaxes_Title = [
197
+ 'display' => $yaxes_title_display,
198
+ 'labelString' => $settings['yaxes_title'],
199
+ 'fontColor' => ! empty( $settings['yaxes_title_color'] ) ? $settings['yaxes_title_color'] : '#666',
200
+ 'fontFamily' => ! empty( $settings['yaxes_title_font_family'] ) ? $settings['yaxes_title_font_family'] : 'auto',
201
+ 'fontSize' => ! empty( $settings['yaxes_title_font_size']['size'] ) ? $settings['yaxes_title_font_size']['size'] : 15,
202
+ 'fontStyle' => ( ! empty( $settings['yaxes_title_font_style'] ) ? $settings['yaxes_title_font_style'] : '' ) . ' ' . ( ! empty( $settings['yaxes_title_font_weight'] ) ? $settings['yaxes_title_font_weight'] : '' ),
203
+ 'lineHeight' => ! empty( $settings['yaxes_title_line_height'] ) ? $settings['yaxes_title_line_height'] : 1.2,
204
+ ];
205
+ } else {
206
+ $yaxes_Title = [];
207
+ }
208
+
209
+ /** Options Array */
210
+
211
+ $options = [
212
+
213
+ 'title' => $title,
214
+ 'tooltips' => $tooltip,
215
+ 'legend' => $Legend,
216
+ 'animation' => [
 
 
217
  'easing' => $settings['chart_animation'],
218
  'duration' => $settings['duration_animation'],
219
+ ],
220
+ 'layout' => [
221
  'padding' => [
222
+ 'top' => $settings['eae_chart_padding']['top'],
223
+ 'right' => $settings['eae_chart_padding']['right'],
224
  'bottom' => $settings['eae_chart_padding']['bottom'],
225
+ 'left' => $settings['eae_chart_padding']['left'],
226
+ ],
227
+ ],
228
+ 'maintainAspectRatio' => false,
229
+ 'scales' => [
230
+ 'xAxes' => [
231
+ [
232
+ 'ticks' => $xaxes_labels,
233
+ 'scaleLabel' => $xaxes_Title,
234
+ 'gridLines' => $xaxes_grid,
235
+ 'barPercentage' => ( ! empty( $settings['bar_width']['size'] ) ) ? $settings['bar_width']['size'] / 100 : '0.80000000000000004',
236
+ 'categoryPercentage' => ( ! empty( $settings['bar_category_width']['size'] ) ) ? $settings['bar_category_width']['size'] / 100 : '0.84999999999999998',
237
+ ],
238
+ ],
239
+ 'yAxes' => [
240
+ [
241
+ 'ticks' => $yaxes_labels,
242
+ 'scaleLabel' => $yaxes_Title,
243
+ 'gridLines' => $yaxes_grid,
244
+ 'barPercentage' => ( ! empty( $settings['bar_width']['size'] ) ) ? $settings['bar_width']['size'] / 100 : '0.80000000000000004',
245
+ 'categoryPercentage' => ( ! empty( $settings['bar_category_width']['size'] ) ) ? $settings['bar_category_width']['size'] / 100 : '0.84999999999999998',
246
+ ],
247
+
248
+ ],
249
+
250
  ],
251
+
252
+ ];
253
+
254
+ return $options;
255
+ }
256
+
257
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
modules/chart/module.php CHANGED
@@ -4,25 +4,21 @@ namespace WTS_EAE\Modules\Chart;
4
 
5
  use WTS_EAE\Base\Module_Base;
6
 
7
- class Module extends Module_Base{
8
 
9
- public function get_widgets() {
10
- return [
11
- 'Chart',
12
- ];
13
- }
14
 
15
- public function get_name() {
16
- return 'eae-chart';
17
- }
18
 
19
- public function get_title() {
20
 
21
- return __('Chart', 'wts-eae');
 
22
 
23
- }
24
-
25
- function add_dependent_js_css() {
26
- parent::add_dependent_js_css(); // TODO: Change the autogenerated stub
27
- }
28
- }
4
 
5
  use WTS_EAE\Base\Module_Base;
6
 
7
+ class Module extends Module_Base {
8
 
9
+ public function get_widgets() {
10
+ return [
11
+ 'Chart',
12
+ ];
13
+ }
14
 
15
+ public function get_name() {
16
+ return 'eae-chart';
17
+ }
18
 
19
+ public function get_title() {
20
 
21
+ return __( 'Chart', 'wts-eae' );
22
+ }
23
 
24
+ }
 
 
 
 
 
modules/chart/skins/skin-bar-chart.php CHANGED
@@ -6,25 +6,22 @@ use Elementor\Widget_Base;
6
 
7
  class Skin_Bar_Chart extends Skin_Base {
8
 
9
- public function get_id() {
10
- return 'bar';
11
- }
12
-
13
- public function get_title() {
14
- return __( 'Vertical Bar', 'wts-eae' );
15
- }
16
 
17
- public function register_items_control( Widget_Base $widget ) {
18
- $this->parent = $widget;
19
- }
20
 
21
- public function register_style_controls() {
22
- //parent::register_style_controls(); // TODO: Change the autogenerated stub
23
- // $this->eae_charts_style_section();
24
 
25
- }
 
26
 
27
  public function render() {
28
  $this->common_render();
29
  }
30
- }
6
 
7
  class Skin_Bar_Chart extends Skin_Base {
8
 
9
+ public function get_id() {
10
+ return 'bar';
11
+ }
 
 
 
 
12
 
13
+ public function get_title() {
14
+ return __( 'Vertical Bar', 'wts-eae' );
15
+ }
16
 
17
+ public function register_items_control( Widget_Base $widget ) {
18
+ $this->parent = $widget;
19
+ }
20
 
21
+ public function register_style_controls() {
22
+ }
23
 
24
  public function render() {
25
  $this->common_render();
26
  }
27
+ }
modules/chart/skins/skin-base.php CHANGED
@@ -6,45 +6,42 @@ use WTS_EAE\Classes\Post_Helper;
6
  use Elementor\Skin_Base as Elementor_Skin_Base;
7
  use WTS_EAE\Modules\Chart\Classes\Map_Data;
8
  use Elementor\Widget_Base;
9
- abstract class Skin_Base extends Elementor_Skin_Base{
10
-
11
- protected function _register_controls_actions() {
12
-
13
- add_action( 'elementor/element/eae-charts/tl_skins/after_section_end', [ $this, 'register_style_controls'] );
14
- }
15
-
16
- public function register_controls( Widget_Base $widget ) {
17
- $this->parent = $widget;
18
- }
19
-
20
- function common_render(){
21
- $settings = $this->parent->get_settings_for_display();
22
-
23
- //echo '<pre>'; print_r($settings); echo '</pre>';
24
- require_once EAE_PATH. "modules/chart/classes/map-data.php";
25
-
26
- $this->parent->add_render_attribute(
27
- 'chart-container',
28
- [
29
- 'class' => 'eae-chart-outer-container',
30
- 'data-settings' => Map_Data::render_chart($settings)
31
- ]
32
- );
33
- $this->parent->add_render_attribute('wrapper' , 'class' , 'eae-chart-wrapper');
34
- $this->parent->add_render_attribute('chart-canvas', 'id', 'eae-chart-canvas');
35
-
36
-
37
-
38
- ?>
39
- <div <?php echo $this->parent->get_render_attribute_string('chart-container');?>>
40
- <?php if( !empty($settings['eae_chart_background_color_image']['id']) && $settings['chart_overlay'] == 'yes' ){ ?>
41
- <div class="eae-chart-overlay"></div>
42
- <?php } ?>
43
- <div <?php echo $this->parent->get_render_attribute_string('wrapper');?>>
44
- <canvas <?php echo $this->parent->get_render_attribute_string('chart-canvas');?> ></canvas>
45
- </div>
46
- </div>
47
-
48
- <?php
49
- }
50
- }
6
  use Elementor\Skin_Base as Elementor_Skin_Base;
7
  use WTS_EAE\Modules\Chart\Classes\Map_Data;
8
  use Elementor\Widget_Base;
9
+ abstract class Skin_Base extends Elementor_Skin_Base {
10
+
11
+ protected function _register_controls_actions() {
12
+
13
+ add_action( 'elementor/element/eae-charts/tl_skins/after_section_end', [ $this, 'register_style_controls' ] );
14
+ }
15
+
16
+ public function register_controls( Widget_Base $widget ) {
17
+ $this->parent = $widget;
18
+ }
19
+
20
+ public function common_render() {
21
+ $settings = $this->parent->get_settings_for_display();
22
+
23
+ require_once EAE_PATH . 'modules/chart/classes/map-data.php';
24
+
25
+ $this->parent->add_render_attribute(
26
+ 'chart-container',
27
+ [
28
+ 'class' => 'eae-chart-outer-container',
29
+ 'data-settings' => Map_Data::render_chart( $settings ),
30
+ ]
31
+ );
32
+ $this->parent->add_render_attribute( 'wrapper', 'class', 'eae-chart-wrapper' );
33
+ $this->parent->add_render_attribute( 'chart-canvas', 'id', 'eae-chart-canvas' );
34
+
35
+ ?>
36
+ <div <?php echo $this->parent->get_render_attribute_string( 'chart-container' ); ?>>
37
+ <?php if ( ! empty( $settings['eae_chart_background_color_image']['id'] ) && $settings['chart_overlay'] === 'yes' ) { ?>
38
+ <div class="eae-chart-overlay"></div>
39
+ <?php } ?>
40
+ <div <?php echo $this->parent->get_render_attribute_string( 'wrapper' ); ?>>
41
+ <canvas <?php echo $this->parent->get_render_attribute_string( 'chart-canvas' ); ?> ></canvas>
42
+ </div>
43
+ </div>
44
+
45
+ <?php
46
+ }
47
+ }
 
 
 
modules/chart/skins/skin-doughnut-chart.php CHANGED
@@ -6,18 +6,18 @@ use Elementor\Widget_Base;
6
 
7
  class Skin_Doughnut_Chart extends Skin_Base {
8
 
9
- public function get_id() {
10
- return 'doughnut';
11
- }
12
 
13
- public function get_title() {
14
- return __( 'Doughnut', 'wts-eae' );
15
- }
16
 
17
- public function register_items_control( Widget_Base $widget ) {
18
- $this->parent = $widget;
19
- }
20
- public function render() {
21
- $this->common_render();
22
- }
23
- }
6
 
7
  class Skin_Doughnut_Chart extends Skin_Base {
8
 
9
+ public function get_id() {
10
+ return 'doughnut';
11
+ }
12
 
13
+ public function get_title() {
14
+ return __( 'Doughnut', 'wts-eae' );
15
+ }
16
 
17
+ public function register_items_control( Widget_Base $widget ) {
18
+ $this->parent = $widget;
19
+ }
20
+ public function render() {
21
+ $this->common_render();
22
+ }
23
+ }
modules/chart/skins/skin-horizontal-bar-chart.php CHANGED
@@ -4,20 +4,20 @@ namespace WTS_EAE\Modules\Chart\Skins;
4
 
5
  use Elementor\Widget_Base;
6
 
7
- class Skin_horizontal_Bar_Chart extends Skin_Base {
8
 
9
- public function get_id() {
10
- return 'horizontalBar';
11
- }
12
 
13
- public function get_title() {
14
- return __( 'Horizontal Bar', 'wts-eae' );
15
- }
16
 
17
- public function register_items_control( Widget_Base $widget ) {
18
- $this->parent = $widget;
19
- }
20
- public function render() {
21
- $this->common_render();
22
- }
23
- }
4
 
5
  use Elementor\Widget_Base;
6
 
7
+ class Skin_Horizontal_Bar_Chart extends Skin_Base {
8
 
9
+ public function get_id() {
10
+ return 'horizontalBar';
11
+ }
12
 
13
+ public function get_title() {
14
+ return __( 'Horizontal Bar', 'wts-eae' );
15
+ }
16
 
17
+ public function register_items_control( Widget_Base $widget ) {
18
+ $this->parent = $widget;
19
+ }
20
+ public function render() {
21
+ $this->common_render();
22
+ }
23
+ }
modules/chart/skins/skin-line-chart.php CHANGED
@@ -6,18 +6,18 @@ use Elementor\Widget_Base;
6
 
7
  class Skin_Line_Chart extends Skin_Base {
8
 
9
- public function get_id() {
10
- return 'line';
11
- }
12
 
13
- public function get_title() {
14
- return __( 'Line', 'wts-eae' );
15
- }
16
 
17
- public function register_items_control( Widget_Base $widget ) {
18
- $this->parent = $widget;
19
- }
20
- public function render() {
21
- $this->common_render();
22
- }
23
- }
6
 
7
  class Skin_Line_Chart extends Skin_Base {
8
 
9
+ public function get_id() {
10
+ return 'line';
11
+ }
12
 
13
+ public function get_title() {
14
+ return __( 'Line', 'wts-eae' );
15
+ }
16
 
17
+ public function register_items_control( Widget_Base $widget ) {
18
+ $this->parent = $widget;
19
+ }
20
+ public function render() {
21
+ $this->common_render();
22
+ }
23
+ }
modules/chart/skins/skin-pie-chart.php CHANGED
@@ -6,18 +6,18 @@ use Elementor\Widget_Base;
6
 
7
  class Skin_Pie_Chart extends Skin_Base {
8
 
9
- public function get_id() {
10
- return 'pie';
11
- }
12
 
13
- public function get_title() {
14
- return __( 'Pie', 'wts-eae' );
15
- }
16
 
17
- public function register_items_control( Widget_Base $widget ) {
18
- $this->parent = $widget;
19
- }
20
- public function render() {
21
- $this->common_render();
22
- }
23
- }
6
 
7
  class Skin_Pie_Chart extends Skin_Base {
8
 
9
+ public function get_id() {
10
+ return 'pie';
11
+ }
12
 
13
+ public function get_title() {
14
+ return __( 'Pie', 'wts-eae' );
15
+ }
16
 
17
+ public function register_items_control( Widget_Base $widget ) {
18
+ $this->parent = $widget;
19
+ }
20
+ public function render() {
21
+ $this->common_render();
22
+ }
23
+ }
modules/chart/skins/skin-polar-area-chart.php CHANGED
@@ -6,18 +6,18 @@ use Elementor\Widget_Base;
6
 
7
  class Skin_Polar_Area_Chart extends Skin_Base {
8
 
9
- public function get_id() {
10
- return 'polarArea';
11
- }
12
 
13
- public function get_title() {
14
- return __( 'Polar Area', 'wts-eae' );
15
- }
16
 
17
- public function register_items_control( Widget_Base $widget ) {
18
- $this->parent = $widget;
19
- }
20
- public function render() {
21
- $this->common_render();
22
- }
23
- }
6
 
7
  class Skin_Polar_Area_Chart extends Skin_Base {
8
 
9
+ public function get_id() {
10
+ return 'polarArea';
11
+ }
12
 
13
+ public function get_title() {
14
+ return __( 'Polar Area', 'wts-eae' );
15
+ }
16
 
17
+ public function register_items_control( Widget_Base $widget ) {
18
+ $this->parent = $widget;
19
+ }
20
+ public function render() {
21
+ $this->common_render();
22
+ }
23
+ }
modules/chart/skins/skin-radar-chart.php CHANGED
@@ -6,18 +6,18 @@ use Elementor\Widget_Base;
6
 
7
  class Skin_Radar_Chart extends Skin_Base {
8
 
9
- public function get_id() {
10
- return 'radar';
11
- }
12
 
13
- public function get_title() {
14
- return __( 'Radar', 'wts-eae' );
15
- }
16
 
17
- public function register_items_control( Widget_Base $widget ) {
18
- $this->parent = $widget;
19
- }
20
- public function render() {
21
- $this->common_render();
22
- }
23
- }
6
 
7
  class Skin_Radar_Chart extends Skin_Base {
8
 
9
+ public function get_id() {
10
+ return 'radar';
11
+ }
12
 
13
+ public function get_title() {
14
+ return __( 'Radar', 'wts-eae' );
15
+ }
16
 
17
+ public function register_items_control( Widget_Base $widget ) {
18
+ $this->parent = $widget;
19
+ }
20
+ public function render() {
21
+ $this->common_render();
22
+ }
23
+ }
modules/chart/widgets/chart.php CHANGED
@@ -11,2493 +11,2469 @@ use Elementor\Group_Control_Background;
11
 
12
 
13
  class Chart extends EAE_Widget_Base {
14
- public function get_name() {
15
- return 'eae-chart';
16
- }
17
-
18
- public function get_title() {
19
-
20
- return __('EAE - Chart', 'wts-eae');
21
-
22
- }
23
-
24
- public function get_icon() {
25
- return 'eicon-text-align-left';
26
- }
27
-
28
- public function get_categories() {
29
- return [ 'wts-eae' ];
30
- }
31
-
32
- public function get_script_depends() {
33
- return [ 'eae-chart' ];
34
- }
35
-
36
-
37
-
38
- protected function _register_skins(){
39
- $this->add_skin( new Skins\Skin_Bar_Chart( $this ) );
40
- $this->add_skin( new Skins\Skin_horizontal_Bar_Chart( $this ) );
41
- $this->add_skin( new Skins\Skin_Line_Chart( $this ) );
42
- // $this->add_skin( new Skins\Skin_Pie_Chart( $this ) );
43
- // $this->add_skin( new Skins\Skin_Doughnut_Chart( $this ) );
44
- // $this->add_skin( new Skins\Skin_Polar_Area_Chart( $this ) );
45
- // $this->add_skin( new Skins\Skin_Radar_Chart( $this ) );
46
-
47
-
48
- }
49
-
50
- protected $_has_template_content = false;
51
-
52
- protected function _register_controls()
53
- {
54
- $this->start_controls_section(
55
- 'section_layout',
56
- [
57
- 'label' => __('Layout', 'wts-eae')
58
- ]
59
- );
60
-
61
- $this->add_control(
62
- 'labels',
63
- [
64
- 'label' => __('Labels', 'wts-eae'),
65
- 'type' => Controls_Manager::TEXT,
66
- 'label_block' => true,
67
- 'default' => '2017, 2018, 2019, 2020',
68
- 'placeholder' => __("January, February, March", 'wts-eae'),
69
- 'description' => __("Enter multiple Labels Separated With ( , ). Example: January, February, March etc. "),
70
- ]
71
- );
72
-
73
- $repeater = new Repeater();
74
-
75
- $repeater->start_controls_tabs('chart_data_tab');
76
-
77
- $repeater->start_controls_tab(
78
- 'content',
79
- [
80
- 'label' => __('Content', 'wts-eae'),
81
- ]
82
- );
83
-
84
- $repeater->add_control(
85
- 'dataset_label',
86
- [
87
- 'label' => __('Label', 'wts-eae'),
88
- 'label_block' => true,
89
- 'type' => Controls_Manager::TEXT,
90
- 'default' => __('Lable', 'wts-eae'),
91
- 'placeholder' => __('Enter your label', 'wts-eae')
92
- ]
93
- );
94
-
95
- $repeater->add_control(
96
- 'dataset_data',
97
- [
98
- 'label' => __('Data', 'wts-eae'),
99
- 'type' => Controls_Manager::TEXT,
100
- 'label_block' => true,
101
- 'default' => '10, 50, 13, 35',
102
- 'placeholder' => __("10, 20, 30", 'wts-eae'),
103
- 'description' => __("Enter Data Values Separated With ( , ). Example: 10, 20, 30 "),
104
- ]
105
- );
106
-
107
- $repeater->end_controls_tab();
108
-
109
- $repeater->start_controls_tab(
110
- 'style',
111
- [
112
- 'label' => __('Style', 'wts-eae'),
113
- ]
114
- );
115
-
116
- $repeater->add_control(
117
- 'background_color',
118
- [
119
- 'label' => __('Background Color', 'wts-eae'),
120
- 'type' => Controls_Manager::COLOR,
121
- 'default' => '#52C0C0BA',
122
- ]
123
- );
124
-
125
-
126
- $repeater->add_control(
127
- 'background_hover_color',
128
- [
129
- 'label' => __('Background Hover Color', 'wts-eae'),
130
- 'type' => Controls_Manager::COLOR,
131
- 'default' => '#52C0C0E0',
132
- ]
133
- );
134
-
135
- $repeater->add_control(
136
- 'border_color',
137
- [
138
- 'label' => __('Border Color', 'wts-eae'),
139
- 'type' => Controls_Manager::COLOR,
140
- 'default' => '#49C4C4',
141
- ]
142
- );
143
-
144
- $repeater->add_control(
145
- 'border_hover_color',
146
- [
147
- 'label' => __('Border Hover Color', 'wts-eae'),
148
- 'type' => Controls_Manager::COLOR,
149
- 'default' => '#49C4C4',
150
- ]
151
- );
152
-
153
- $repeater->add_control(
154
- 'line_title',
155
- [
156
- 'label' => __('Line', 'wts-eae'),
157
- 'type' => Controls_Manager::HEADING,
158
- 'separator' => 'before',
159
- 'description' => __("Note: These options only work with line chart."),
160
- ]
161
- );
162
-
163
- $repeater->add_control(
164
- 'line_description',
165
- [
166
- 'label' => __('', 'wts-eae'),
167
- 'type' => Controls_Manager::RAW_HTML,
168
- 'raw' => __( 'Note: These options only work with line chart.', 'wts-eae' ),
169
- ]
170
- );
171
-
172
- $repeater->add_control(
173
- 'line_fill_color',
174
- [
175
- 'label' => __('Background Color', 'wts-eae'),
176
- 'type' => Controls_Manager::SWITCHER,
177
- 'default' => '',
178
- 'label_on' => __( 'Yes', 'wts-eae' ),
179
- 'label_off' => __( 'No', 'wts-eae' ),
180
- 'return_value' => 'yes',
181
- ]
182
- );
183
-
184
- $repeater->add_control(
185
- 'line_bg_color',
186
- [
187
- 'label' => __('Color', 'wts-eae'),
188
- 'type' => Controls_Manager::COLOR,
189
- 'label_block' => false,
190
- 'default' => 'rgba(0, 0, 0, 0.1)',
191
- 'condition' => [
192
- 'line_fill_color' => 'yes'
193
- ]
194
- ]
195
- );
196
-
197
- $repeater->add_control(
198
- 'line_border_color',
199
- [
200
- 'label' => __('Border Color', 'wts-eae'),
201
- 'type' => Controls_Manager::COLOR,
202
- 'default' => '#49C4C4',
203
- ]
204
- );
205
-
206
- $repeater->add_control(
207
- 'point_background_color',
208
- [
209
- 'label' => __('Point Background Color', 'wts-eae'),
210
- 'type' => Controls_Manager::COLOR,
211
- 'default' => '#49C4C4',
212
- ]
213
- );
214
-
215
- $repeater->add_control(
216
- 'point_background_hover_color',
217
- [
218
- 'label' => __('Point Background Hover Color', 'wts-eae'),
219
- 'type' => Controls_Manager::COLOR,
220
- 'default' => '#49C4C4',
221
- ]
222
- );
223
-
224
- $repeater->add_control(
225
- 'point_border_color',
226
- [
227
- 'label' => __('Point Border Color', 'wts-eae'),
228
- 'type' => Controls_Manager::COLOR,
229
- 'default' => '#49C4C4',
230
- ]
231
- );
232
-
233
- $repeater->add_control(
234
- 'point_border_hover_color',
235
- [
236
- 'label' => __('Point Border Hover Color', 'wts-eae'),
237
- 'type' => Controls_Manager::COLOR,
238
- 'default' => '#49C4C4',
239
- ]
240
- );
241
-
242
- $repeater->end_controls_tab();
243
-
244
- $this->add_control(
245
- 'dataset',
246
- [
247
- 'label' => __( 'Datasets', 'wts-eae' ),
248
- 'type' => Controls_Manager::REPEATER,
249
- 'show_label' => true,
250
- 'fields' => $repeater->get_controls(),
251
- 'default' => [
252
- [
253
- 'dataset_label' => __( 'Company A', 'wts-eae' ),
254
- 'dataset_data' => '30, 40, 27, 45',
255
- 'background_color' => '#EE6083B8',
256
- 'background_hover_color' => '#EE6083D9',
257
- 'border_color' => '#F34A74',
258
- 'border_hover_color' => '#F34A74',
259
- 'line_border_color' => '#ee6083',
260
- 'point_background_color' => '#ee6083',
261
- 'point_background_hover_color' => '#ee6083',
262
- 'point_border_color' => '#ee6083',
263
- 'point_border_hover_color' => '#ee6083',
264
- ],
265
- [
266
- 'dataset_label' => __( 'Company B', 'wts-eae' ),
267
- 'dataset_data' => '37, 45, 39, 50',
268
- 'background_color' => '#3BA3ECB8',
269
- 'background_hover_color' => '#3BA3ECDE',
270
- 'border_color' => '#2999E8',
271
- 'border_hover_color' => '#2999E8',
272
- 'line_border_color' => '#3ba3eb',
273
- 'point_background_color' => '#3ba3eb',
274
- 'point_background_hover_color' => '#3ba3eb',
275
- 'point_border_color' => '#3ba3eb',
276
- 'point_border_hover_color' => '#3ba3eb',
277
- ],
278
- ],
279
- 'title_field' => '{{{ dataset_label }}}',
280
- ]
281
- );
282
-
283
- $this->end_controls_section();
284
-
285
- $this->start_controls_section(
286
- 'section_additional_settings',
287
- [
288
- 'label' => __('Additional Settings', 'wts-eae')
289
- ]
290
- );
291
-
292
- $this->add_responsive_control(
293
- 'eae_chart_height',
294
- [
295
- 'label' => __('Chart Height', 'wts-eae'),
296
- 'type' => Controls_Manager::NUMBER,
297
- 'min' => 50,
298
- 'max' => 1500,
299
- 'step' => 5,
300
- 'default' => 500,
301
- 'selectors' => [
302
- '{{WRAPPER}} .eae-chart-outer-container' => 'height: {{SIZE}}px;',
303
- '{{WRAPPER}} #eae-chart-canvas' => 'height: {{SIZE}}px !important;',
304
- ]
305
- ]
306
- );
307
-
308
- $this->add_control(
309
- 'bar_settings_heading',
310
- [
311
- 'label' => __('Bar Chart', 'wts-eae'),
312
- 'type' => Controls_Manager::HEADING,
313
- 'separator' => 'before',
314
- 'condition' => [
315
- '_skin!' => 'line',
316
- ],
317
- ]
318
- );
319
-
320
- $this->add_control(
321
  'bar_width',
322
  [
323
- 'label' => __( 'Bar Width', 'wts-eae' ),
324
- 'type' => Controls_Manager::SLIDER,
325
- 'range' => [
326
- 'px' => [
327
- 'min' => 0,
328
- 'max' => 99,
329
- ],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
 
13
  class Chart extends EAE_Widget_Base {
14
+ public function get_name() {
15
+ return 'eae-chart';
16
+ }
17
+
18
+ public function get_title() {
19
+
20
+ return __( 'EAE - Chart', 'wts-eae' );
21
+ }
22
+
23
+ public function get_icon() {
24
+ return 'eicon-text-align-left';
25
+ }
26
+
27
+ public function get_categories() {
28
+ return [ 'wts-eae' ];
29
+ }
30
+
31
+ public function get_script_depends() {
32
+ return [ 'eae-chart' ];
33
+ }
34
+
35
+
36
+ protected function _register_skins() {
37
+ $this->add_skin( new Skins\Skin_Bar_Chart( $this ) );
38
+ $this->add_skin( new Skins\Skin_Horizontal_Bar_Chart( $this ) );
39
+ $this->add_skin( new Skins\Skin_Line_Chart( $this ) );
40
+ }
41
+
42
+ // phpcs:ignore PSR2.Classes.PropertyDeclaration.Underscore
43
+ protected $_has_template_content = false;
44
+
45
+ protected function _register_controls() {
46
+ $this->start_controls_section(
47
+ 'section_layout',
48
+ [
49
+ 'label' => __( 'Layout', 'wts-eae' ),
50
+ ]
51
+ );
52
+
53
+ $this->add_control(
54
+ 'labels',
55
+ [
56
+ 'label' => __( 'Labels', 'wts-eae' ),
57
+ 'type' => Controls_Manager::TEXT,
58
+ 'label_block' => true,
59
+ 'default' => '2017, 2018, 2019, 2020',
60
+ 'placeholder' => __( 'January, February, March', 'wts-eae' ),
61
+ 'description' => __( 'Enter multiple Labels Separated With ( , ). Example: January, February, March etc. ', 'wts-eae' ),
62
+ ]
63
+ );
64
+
65
+ $repeater = new Repeater();
66
+
67
+ $repeater->start_controls_tabs( 'chart_data_tab' );
68
+
69
+ $repeater->start_controls_tab(
70
+ 'content',
71
+ [
72
+ 'label' => __( 'Content', 'wts-eae' ),
73
+ ]
74
+ );
75
+
76
+ $repeater->add_control(
77
+ 'dataset_label',
78
+ [
79
+ 'label' => __( 'Label', 'wts-eae' ),
80
+ 'label_block' => true,
81
+ 'type' => Controls_Manager::TEXT,
82
+ 'default' => __( 'Lable', 'wts-eae' ),
83
+ 'placeholder' => __( 'Enter your label', 'wts-eae' ),
84
+ ]
85
+ );
86
+
87
+ $repeater->add_control(
88
+ 'dataset_data',
89
+ [
90
+ 'label' => __( 'Data', 'wts-eae' ),
91
+ 'type' => Controls_Manager::TEXT,
92
+ 'label_block' => true,
93
+ 'default' => '10, 50, 13, 35',
94
+ 'placeholder' => __( '10, 20, 30', 'wts-eae' ),
95
+ 'description' => __( 'Enter Data Values Separated With ( , ). Example: 10, 20, 30 ', 'wts-eae' ),
96
+ ]
97
+ );
98
+
99
+ $repeater->end_controls_tab();
100
+
101
+ $repeater->start_controls_tab(
102
+ 'style',
103
+ [
104
+ 'label' => __( 'Style', 'wts-eae' ),
105
+ ]
106
+ );
107
+
108
+ $repeater->add_control(
109
+ 'background_color',
110
+ [
111
+ 'label' => __( 'Background Color', 'wts-eae' ),
112
+ 'type' => Controls_Manager::COLOR,
113
+ 'default' => '#52C0C0BA',
114
+ ]
115
+ );
116
+
117
+ $repeater->add_control(
118
+ 'background_hover_color',
119
+ [
120
+ 'label' => __( 'Background Hover Color', 'wts-eae' ),
121
+ 'type' => Controls_Manager::COLOR,
122
+ 'default' => '#52C0C0E0',
123
+ ]
124
+ );
125
+
126
+ $repeater->add_control(
127
+ 'border_color',
128
+ [
129
+ 'label' => __( 'Border Color', 'wts-eae' ),
130
+ 'type' => Controls_Manager::COLOR,
131
+ 'default' => '#49C4C4',
132
+ ]
133
+ );
134
+
135
+ $repeater->add_control(
136
+ 'border_hover_color',
137
+ [
138
+ 'label' => __( 'Border Hover Color', 'wts-eae' ),
139
+ 'type' => Controls_Manager::COLOR,
140
+ 'default' => '#49C4C4',
141
+ ]
142
+ );
143
+
144
+ $repeater->add_control(
145
+ 'line_title',
146
+ [
147
+ 'label' => __( 'Line', 'wts-eae' ),
148
+ 'type' => Controls_Manager::HEADING,
149
+ 'separator' => 'before',
150
+ 'description' => __( 'Note: These options only work with line chart.', 'wts-eae' ),
151
+ ]
152
+ );
153
+
154
+ $repeater->add_control(
155
+ 'line_description',
156
+ [
157
+ 'label' => __( 'line chart note', 'wts-eae' ),
158
+ 'show_label' => false,
159
+ 'type' => Controls_Manager::RAW_HTML,
160
+ 'raw' => __( 'Note: These options only work with line chart.', 'wts-eae' ),
161
+ ]
162
+ );
163
+
164
+ $repeater->add_control(
165
+ 'line_fill_color',
166
+ [
167
+ 'label' => __( 'Background Color', 'wts-eae' ),
168
+ 'type' => Controls_Manager::SWITCHER,
169
+ 'default' => '',
170
+ 'label_on' => __( 'Yes', 'wts-eae' ),
171
+ 'label_off' => __( 'No', 'wts-eae' ),
172
+ 'return_value' => 'yes',
173
+ ]
174
+ );
175
+
176
+ $repeater->add_control(
177
+ 'line_bg_color',
178
+ [
179
+ 'label' => __( 'Color', 'wts-eae' ),
180
+ 'type' => Controls_Manager::COLOR,
181
+ 'label_block' => false,
182
+ 'default' => 'rgba(0, 0, 0, 0.1)',
183
+ 'condition' => [
184
+ 'line_fill_color' => 'yes',
185
+ ],
186
+ ]
187
+ );
188
+
189
+ $repeater->add_control(
190
+ 'line_border_color',
191
+ [
192
+ 'label' => __( 'Border Color', 'wts-eae' ),
193
+ 'type' => Controls_Manager::COLOR,
194
+ 'default' => '#49C4C4',
195
+ ]
196
+ );
197
+
198
+ $repeater->add_control(
199
+ 'point_background_color',
200
+ [
201
+ 'label' => __( 'Point Background Color', 'wts-eae' ),
202
+ 'type' => Controls_Manager::COLOR,
203
+ 'default' => '#49C4C4',
204
+ ]
205
+ );
206
+
207
+ $repeater->add_control(
208
+ 'point_background_hover_color',
209
+ [
210
+ 'label' => __( 'Point Background Hover Color', 'wts-eae' ),
211
+ 'type' => Controls_Manager::COLOR,
212
+ 'default' => '#49C4C4',
213
+ ]
214
+ );
215
+
216
+ $repeater->add_control(
217
+ 'point_border_color',
218
+ [
219
+ 'label' => __( 'Point Border Color', 'wts-eae' ),
220
+ 'type' => Controls_Manager::COLOR,
221
+ 'default' => '#49C4C4',
222
+ ]
223
+ );
224
+
225
+ $repeater->add_control(
226
+ 'point_border_hover_color',
227
+ [
228
+ 'label' => __( 'Point Border Hover Color', 'wts-eae' ),
229
+ 'type' => Controls_Manager::COLOR,
230
+ 'default' => '#49C4C4',
231
+ ]
232
+ );
233
+
234
+ $repeater->end_controls_tab();
235
+
236
+ $this->add_control(
237
+ 'dataset',
238
+ [
239
+ 'label' => __( 'Datasets', 'wts-eae' ),
240
+ 'type' => Controls_Manager::REPEATER,
241
+ 'show_label' => true,
242
+ 'fields' => $repeater->get_controls(),
243
+ 'default' => [
244
+ [
245
+ 'dataset_label' => __( 'Company A', 'wts-eae' ),
246
+ 'dataset_data' => '30, 40, 27, 45',
247
+ 'background_color' => '#EE6083B8',
248
+ 'background_hover_color' => '#EE6083D9',
249
+ 'border_color' => '#F34A74',
250
+ 'border_hover_color' => '#F34A74',
251
+ 'line_border_color' => '#ee6083',
252
+ 'point_background_color' => '#ee6083',
253
+ 'point_background_hover_color' => '#ee6083',
254
+ 'point_border_color' => '#ee6083',
255
+ 'point_border_hover_color' => '#ee6083',
256
+ ],
257
+ [
258
+ 'dataset_label' => __( 'Company B', 'wts-eae' ),
259
+ 'dataset_data' => '37, 45, 39, 50',
260
+ 'background_color' => '#3BA3ECB8',
261
+ 'background_hover_color' => '#3BA3ECDE',
262
+ 'border_color' => '#2999E8',
263
+ 'border_hover_color' => '#2999E8',
264
+ 'line_border_color' => '#3ba3eb',
265
+ 'point_background_color' => '#3ba3eb',
266
+ 'point_background_hover_color' => '#3ba3eb',
267
+ 'point_border_color' => '#3ba3eb',
268
+ 'point_border_hover_color' => '#3ba3eb',
269
+ ],
270
+ ],
271
+ 'title_field' => '{{{ dataset_label }}}',
272
+ ]
273
+ );
274
+
275
+ $this->end_controls_section();
276
+
277
+ $this->start_controls_section(
278
+ 'section_additional_settings',
279
+ [
280
+ 'label' => __( 'Additional Settings', 'wts-eae' ),
281
+ ]
282
+ );
283
+
284
+ $this->add_responsive_control(
285
+ 'eae_chart_height',
286
+ [
287
+ 'label' => __( 'Chart Height', 'wts-eae' ),
288
+ 'type' => Controls_Manager::NUMBER,
289
+ 'min' => 50,
290
+ 'max' => 1500,
291
+ 'step' => 5,
292
+ 'default' => 500,
293
+ 'selectors' => [
294
+ '{{WRAPPER}} .eae-chart-outer-container' => 'height: {{SIZE}}px;',
295
+ '{{WRAPPER}} #eae-chart-canvas' => 'height: {{SIZE}}px !important;',
296
+ ],
297
+ ]
298
+ );
299
+
300
+ $this->add_control(
301
+ 'bar_settings_heading',
302
+ [
303
+ 'label' => __( 'Bar Chart', 'wts-eae' ),
304
+ 'type' => Controls_Manager::HEADING,
305
+ 'separator' => 'before',
306
+ 'condition' => [
307
+ '_skin!' => 'line',
308
+ ],
309
+ ]
310
+ );
311
+
312
+ $this->add_control(
 
 
 
 
 
 
 
 
313
  'bar_width',
314
  [
315
+ 'label' => __( 'Bar Width', 'wts-eae' ),
316
+ 'type' => Controls_Manager::SLIDER,
317
+ 'range' => [
318
+ 'px' => [
319
+ 'min' => 0,
320
+ 'max' => 99,
321
+ ],
322
+ ],
323
+ 'default' => [
324
+ 'unit' => 'px',
325
+ 'size' => 80,
326
+ ],
327
+ 'condition' => [
328
+ '_skin!' => 'line',
329
+ ],
330
+ ]
331
+ );
332
+
333
+ $this->add_control(
334
+ 'bar_category_width',
335
+ [
336
+ 'label' => __( 'Bar Category Width', 'wts-eae' ),
337
+ 'type' => Controls_Manager::SLIDER,
338
+ 'range' => [
339
+ 'px' => [
340
+ 'min' => 0,
341
+ 'max' => 99,
342
+ ],
343
+ ],
344
+ 'default' => [
345
+ 'unit' => 'px',
346
+ 'size' => 85,
347
+ ],
348
+ 'condition' => [
349
+ '_skin!' => 'line',
350
+ ],
351
+ ]
352
+ );
353
+
354
+ $this->add_control(
355
+ 'bar_border_width',
356
+ [
357
+ 'label' => __( 'Bar Border Width', 'wts-eae' ),
358
+ 'type' => Controls_Manager::NUMBER,
359
+ 'default' => 1,
360
+ 'min' => 1,
361
+ 'max' => 10,
362
+ 'condition' => [
363
+ '_skin!' => 'line',
364
+ ],
365
+ ]
366
+ );
367
+
368
+ $this->add_control(
369
+ 'line_settings',
370
+ [
371
+ 'label' => __( 'Line Chart', 'wts-eae' ),
372
+ 'type' => Controls_Manager::HEADING,
373
+ 'separator' => 'before',
374
+ 'condition' => [
375
+ '_skin' => 'line',
376
+ ],
377
+ ]
378
+ );
379
+
380
+ $this->add_control(
381
+ 'line_stepped',
382
+ [
383
+ 'label' => __( 'Stepped Line', 'wts-eae' ),
384
+ 'type' => Controls_Manager::SWITCHER,
385
+ 'default' => '',
386
+ 'label_on' => __( 'Yes', 'wts-eae' ),
387
+ 'label_off' => __( 'No', 'wts-eae' ),
388
+ 'return_value' => 'yes',
389
+ 'condition' => [
390
+ '_skin' => 'line',
391
+ ],
392
+ ]
393
+ );
394
+
395
+ $this->add_control(
396
+ 'line_border_width',
397
+ [
398
+ 'label' => __( 'Line Border Width', 'wts-eae' ),
399
+ 'type' => Controls_Manager::NUMBER,
400
+ 'default' => 2,
401
+ 'min' => 1,
402
+ 'max' => 20,
403
+ 'condition' => [
404
+ '_skin' => 'line',
405
+ ],
406
+ ]
407
+ );
408
+
409
+ $this->add_control(
410
+ 'line_point_size',
411
+ [
412
+ 'label' => __( 'Line Point Size', 'wts-eae' ),
413
+ 'type' => Controls_Manager::NUMBER,
414
+ 'default' => 3,
415
+ 'min' => 1,
416
+ 'max' => 20,
417
+ 'condition' => [
418
+ '_skin' => 'line',
419
+ ],
420
+ ]
421
+ );
422
+
423
+ $this->add_control(
424
+ 'line_point_hover_size',
425
+ [
426
+ 'label' => __( 'Line Point Hover Size', 'wts-eae' ),
427
+ 'type' => Controls_Manager::NUMBER,
428
+ 'default' => 3,
429
+ 'min' => 1,
430
+ 'max' => 20,
431
+ 'condition' => [
432
+ '_skin' => 'line',
433
+ ],
434
+ ]
435
+ );
436
+
437
+ $this->add_control(
438
+ 'line_joint_style',
439
+ [
440
+ 'label' => __( 'Line Joint Style', 'wts-eae' ),
441
+ 'type' => Controls_Manager::SELECT,
442
+ 'default' => 'miter',
443
+ 'options' => [
444
+ 'miter' => __( 'Miter', 'wts-eae' ),
445
+ 'round' => __( 'Round', 'wts-eae' ),
446
+ 'bevel' => __( 'Bevel', 'wts-eae' ),
447
+ ],
448
+ 'condition' => [
449
+ '_skin' => 'line',
450
+ 'line_stepped' => 'yes',
451
+ ],
452
+ ]
453
+ );
454
+
455
+ $this->add_control(
456
+ 'line_point_style',
457
+ [
458
+ 'label' => __( 'Line Point Style', 'wts-eae' ),
459
+ 'type' => Controls_Manager::SELECT,
460
+ 'default' => 'circle',
461
+ 'options' => [
462
+ 'circle' => __( 'Circle', 'wts-eae' ),
463
+ 'cross' => __( 'Cross', 'wts-eae' ),
464
+ 'crossRot' => __( 'CrossRot', 'wts-eae' ),
465
+ 'rect' => __( 'Rect', 'wts-eae' ),
466
+ 'rectRounded' => __( 'RectRounded', 'wts-eae' ),
467
+ 'rectRot' => __( 'RectRot', 'wts-eae' ),
468
+ 'star' => __( 'Star', 'wts-eae' ),
469
+ 'triangle' => __( 'Triangle', 'wts-eae' ),
470
+ ],
471
+ 'condition' => [
472
+ '_skin' => 'line',
473
+ ],
474
+ ]
475
+ );
476
+
477
+ $this->add_control(
478
+ 'xaxes_display',
479
+ [
480
+ 'label' => __( 'X-Axis', 'wts-eae' ),
481
+ 'type' => Controls_Manager::HEADING,
482
+ 'separator' => 'before',
483
+ ]
484
+ );
485
+
486
+ $this->add_control(
487
+ 'xaxes_grid_line',
488
+ [
489
+ 'label' => __( 'Enable Grid Lines', 'wts-eae' ),
490
+ 'type' => Controls_Manager::SWITCHER,
491
+ 'default' => 'yes',
492
+ 'label_on' => __( 'Yes', 'wts-eae' ),
493
+ 'label_off' => __( 'No', 'wts-eae' ),
494
+ 'return_value' => 'yes',
495
+ 'description' => __( ' Enable or Disable X-Axis Grid Lines ', 'wts-eae' ),
496
+ ]
497
+ );
498
+
499
+ $this->add_control(
500
+ 'xaxes_display_title',
501
+ [
502
+ 'label' => __( 'Enable Title', 'wts-eae' ),
503
+ 'type' => Controls_Manager::SWITCHER,
504
+ 'default' => '',
505
+ 'label_on' => __( 'Yes', 'wts-eae' ),
506
+ 'label_off' => __( 'No', 'wts-eae' ),
507
+ 'return_value' => 'yes',
508
+ ]
509
+ );
510
+
511
+ $this->add_control(
512
+ 'xaxes_title',
513
+ [
514
+ 'label' => __( 'Title', 'wts-eae' ),
515
+ 'type' => Controls_Manager::TEXT,
516
+ 'default' => 'X-Axis Title',
517
+ 'placeholder' => __( 'Enter Title', 'wts-eae' ),
518
+ 'condition' => [
519
+ 'xaxes_display_title' => 'yes',
520
+ ],
521
+ ]
522
+ );
523
+
524
+ $this->add_control(
525
+ 'xaxes_labels_display',
526
+ [
527
+ 'label' => __( 'Enable Labels', 'wts-eae' ),
528
+ 'type' => Controls_Manager::SWITCHER,
529
+ 'default' => 'yes',
530
+ 'label_on' => __( 'Yes', 'wts-eae' ),
531
+ 'label_off' => __( 'No', 'wts-eae' ),
532
+ 'return_value' => 'yes',
533
+ ]
534
+ );
535
+
536
+ $this->add_control(
537
+ 'yaxes_display',
538
+ [
539
+ 'label' => __( 'Y-Axis', 'wts-eae' ),
540
+ 'type' => Controls_Manager::HEADING,
541
+ 'separator' => 'before',
542
+ ]
543
+ );
544
+
545
+ $this->add_control(
546
+ 'yaxes_grid_line',
547
+ [
548
+ 'label' => __( 'Enable Grid Lines', 'wts-eae' ),
549
+ 'type' => Controls_Manager::SWITCHER,
550
+ 'default' => 'yes',
551
+ 'label_on' => __( 'Yes', 'wts-eae' ),
552
+ 'label_off' => __( 'No', 'wts-eae' ),
553
+ 'return_value' => 'yes',
554
+ 'description' => __( ' Enable or Disable Y-Axis Grid Lines ', 'wts-eae' ),
555
+ ]
556
+ );
557
+
558
+ $this->add_control(
559
+ 'yaxes_display_title',
560
+ [
561
+ 'label' => __( 'Enable Title', 'wts-eae' ),
562
+ 'type' => Controls_Manager::SWITCHER,
563
+ 'default' => '',
564
+ 'label_on' => __( 'Yes', 'wts-eae' ),
565
+ 'label_off' => __( 'No', 'wts-eae' ),
566
+ 'return_value' => 'yes',
567
+ ]
568
+ );
569
+
570
+ $this->add_control(
571
+ 'yaxes_title',
572
+ [
573
+ 'label' => __( 'Title', 'wts-eae' ),
574
+ 'type' => Controls_Manager::TEXT,
575
+ 'default' => 'Y-Axis Title',
576
+ 'placeholder' => __( 'Enter Title', 'wts-eae' ),
577
+ 'condition' => [
578
+ 'yaxes_display_title' => 'yes',
579
+ ],
580
+ ]
581
+ );
582
+
583
+ $this->add_control(
584
+ 'yaxes_labels_display',
585
+ [
586
+ 'label' => __( 'Enable Labels', 'wts-eae' ),
587
+ 'type' => Controls_Manager::SWITCHER,
588
+ 'default' => 'yes',
589
+ 'label_on' => __( 'Yes', 'wts-eae' ),
590
+ 'label_off' => __( 'No', 'wts-eae' ),
591
+ 'return_value' => 'yes',
592
+ 'separator' => 'after',
593
+ ]
594
+ );
595
+
596
+ $this->add_control(
597
+ 'step_size',
598
+ [
599
+ 'label' => __( 'Step Size', 'wts-eae' ),
600
+ 'type' => Controls_Manager::NUMBER,
601
+ 'default' => 10,
602
+ 'min' => 0,
603
+ 'step' => 1,
604
+ ]
605
+ );
606
+
607
+ $this->add_control(
608
+ 'axis_range',
609
+ [
610
+ 'label' => __( 'Scale Axis Range', 'wts-eae' ),
611
+ 'type' => Controls_Manager::NUMBER,
612
+ 'default' => 100,
613
+ 'description' => __( 'Maximum number for the scale.', 'wts-eae' ),
614
+ ]
615
+ );
616
+
617
+ $this->add_control(
618
+ 'heading',
619
+ [
620
+ 'label' => __( 'Title', 'wts-eae' ),
621
+ 'type' => Controls_Manager::HEADING,
622
+ 'separator' => 'before',
623
+ ]
624
+ );
625
+
626
+ $this->add_control(
627
+ 'title_display',
628
+ [
629
+ 'label' => __( 'Enable Title', 'wts-eae' ),
630
+ 'type' => Controls_Manager::SWITCHER,
631
+ 'default' => '',
632
+ 'label_on' => __( 'Yes', 'wts-eae' ),
633
+ 'label_off' => __( 'No', 'wts-eae' ),
634
+ 'return_value' => 'yes',
635
+ ]
636
+ );
637
+
638
+ $this->add_control(
639
+ 'title',
640
+ [
641
+ 'label' => __( 'Title', 'wts-eae' ),
642
+ 'type' => Controls_Manager::TEXT,
643
+ 'default' => 'Add Your Heading',
644
+ 'placeholder' => __( 'Enter Title', 'wts-eae' ),
645
+ 'condition' => [
646
+ 'title_display' => 'yes',
647
+ ],
648
+ ]
649
+ );
650
+
651
+ $this->add_control(
652
+ 'title_position',
653
+ [
654
+ 'type' => Controls_Manager::SELECT,
655
+ 'label' => __( 'Position', 'wts-eae' ),
656
+ 'default' => 'top',
657
+ 'options' => [
658
+ 'top' => __( 'Top', 'wts-eae' ),
659
+ 'bottom' => __( 'Bottom', 'wts-eae' ),
660
+ ],
661
+ 'condition' => [
662
+ 'title_display' => 'yes',
663
+ ],
664
+
665
+ ]
666
+ );
667
+
668
+ $this->add_control(
669
+ 'legend',
670
+ [
671
+ 'label' => __( 'Legend', 'wts-eae' ),
672
+ 'type' => Controls_Manager::HEADING,
673
+ 'separator' => 'before',
674
+ ]
675
+ );
676
+
677
+ $this->add_control(
678
+ 'legend_display',
679
+ [
680
+ 'label' => __( 'Enable Legend', 'wts-eae' ),
681
+ 'type' => Controls_Manager::SWITCHER,
682
+ 'default' => 'yes',
683
+ 'label_on' => 'Yes',
684
+ 'label_off' => 'No',
685
+ 'return_value' => 'yes',
686
+ ]
687
+ );
688
+
689
+ $this->add_control(
690
+ 'legend_position',
691
+ [
692
+ 'label' => __( 'Position', 'wts-eae' ),
693
+ 'type' => Controls_Manager::SELECT,
694
+ 'options' => [
695
+ 'top' => __( 'Top', 'wts-eae' ),
696
+ 'left' => __( 'Left', 'wts-eae' ),
697
+ 'bottom' => __( 'Bottom', 'wts-eae' ),
698
+ 'right' => __( 'Right', 'wts-eae' ),
699
+ ],
700
+ 'default' => 'top',
701
+ 'condition' => [
702
+ 'legend_display' => 'yes',
703
+ ],
704
+ ]
705
+ );
706
+
707
+ $this->add_control(
708
+ 'legend_align',
709
+ [
710
+ 'label' => __( 'Alignment', 'wts-eae' ),
711
+ 'type' => Controls_Manager::CHOOSE,
712
+ 'options' => [
713
+ 'start' => [
714
+ 'title' => __( 'Left', 'wts-eae' ),
715
+ 'icon' => 'fa fa-align-left',
716
+ ],
717
+ 'center' => [
718
+ 'title' => __( 'Center', 'wts-eae' ),
719
+ 'icon' => 'fa fa-align-center',
720
+ ],
721
+ 'end' => [
722
+ 'title' => __( 'Right', 'wts-eae' ),
723
+ 'icon' => 'fa fa-align-right',
724
+ ],
725
+ ],
726
+ 'default' => 'center',
727
+ 'condition' => [
728
+ 'legend_display' => 'yes',
729
+ ],
730
+ ]
731
+ );
732
+
733
+ $this->add_control(
734
+ 'legend_reverse',
735
+ [
736
+ 'label' => __( 'Reverse', 'wts-eae' ),
737
+ 'type' => Controls_Manager::SWITCHER,
738
+ 'default' => 'no',
739
+ 'label_on' => 'Yes',
740
+ 'label_off' => 'No',
741
+ 'return_value' => 'yes',
742
+ 'condition' => [
743
+ 'legend_display' => 'yes',
744
+ ],
745
+ ]
746
+ );
747
+
748
+ $this->add_control(
749
+ 'tooltip',
750
+ [
751
+ 'label' => __( 'Tooltip', 'wts-eae' ),
752
+ 'type' => Controls_Manager::HEADING,
753
+ 'separator' => 'before',
754
+ ]
755
+ );
756
+
757
+ $this->add_control(
758
+ 'tooltip_display',
759
+ [
760
+ 'label' => __( 'Enable Tooltips', 'wts-eae' ),
761
+ 'type' => Controls_Manager::SWITCHER,
762
+ 'default' => 'yes',
763
+ 'label_on' => 'Yes',
764
+ 'label_off' => 'No',
765
+ 'return_value' => 'yes',
766
+ ]
767
+ );
768
+
769
+ $this->add_control(
770
+ 'tooltip_mode',
771
+ [
772
+ 'label' => __( 'Mode', 'wts-eae' ),
773
+ 'type' => Controls_Manager::SELECT,
774
+ 'options' => [
775
+ 'index' => __( 'Index', 'wts-eae' ),
776
+ 'point' => __( 'Point', 'wts-eae' ),
777
+ ],
778
+ 'default' => 'point',
779
+ 'condition' => [
780
+ 'tooltip_display' => 'yes',
781
+ ],
782
+ ]
783
+ );
784
+
785
+ $this->add_control(
786
+ 'animation_title',
787
+ [
788
+ 'label' => __( 'Animation', 'wts-eae' ),
789
+ 'type' => Controls_Manager::HEADING,
790
+ 'separator' => 'before',
791
+ ]
792
+ );
793
+
794
+ $this->add_control(
795
+ 'chart_animation',
796
+ [
797
+ 'label' => __( 'Animation', 'wts-eae' ),
798
+ 'type' => Controls_Manager::SELECT,
799
+ 'options' => [
800
+ 'linear' => __( 'Linear', 'wts-eae' ),
801
+ 'easeInQuad' => __( 'Ease in Quad', 'wts-eae' ),
802
+ 'easeOutQuad' => __( 'Ease out Quad', 'wts-eae' ),
803
+ 'easeInOutQuad' => __( 'Ease in out Quad', 'wts-eae' ),
804
+ 'easeInCubic' => __( 'Ease in Cubic', 'wts-eae' ),
805
+ 'easeOutCubic' => __( 'Ease out Cubic', 'wts-eae' ),
806
+ 'easeInOutCubic' => __( 'Ease in out Cubic', 'wts-eae' ),
807
+ 'easeInQuart' => __( 'Ease in Quart', 'wts-eae' ),
808
+ 'easeOutQuart' => __( 'Ease out Quart', 'wts-eae' ),
809
+ 'easeInOutQuart' => __( 'Ease in out Quart', 'wts-eae' ),
810
+ 'easeInQuint' => __( 'Ease in Quint', 'wts-eae' ),
811
+ 'easeOutQuint' => __( 'Ease out Quint', 'wts-eae' ),
812
+ 'easeInOutQuint' => __( 'Ease in out Quint', 'wts-eae' ),
813
+ 'easeInSine' => __( 'Ease in Sine', 'wts-eae' ),
814
+ 'easeOutSine' => __( 'Ease out Sine', 'wts-eae' ),
815
+ 'easeInOutSine' => __( 'Ease in out Sine', 'wts-eae' ),
816
+ 'easeInExpo' => __( 'Ease in Expo', 'wts-eae' ),
817
+ 'easeOutExpo' => __( 'Ease out Expo', 'wts-eae' ),
818
+ 'easeInOutExpo' => __( 'Ease in out Cubic', 'wts-eae' ),
819
+ 'easeInCirc' => __( 'Ease in Circle', 'wts-eae' ),
820
+ 'easeOutCirc' => __( 'Ease out Circle', 'wts-eae' ),
821
+ 'easeInOutCirc' => __( 'Ease in out Circle', 'wts-eae' ),
822
+ 'easeInElastic' => __( 'Ease in Elastic', 'wts-eae' ),
823
+ 'easeOutElastic' => __( 'Ease out Elastic', 'wts-eae' ),
824
+ 'easeInOutElastic' => __( 'Ease in out Elastic', 'wts-eae' ),
825
+ 'easeInBack' => __( 'Ease in Back', 'wts-eae' ),
826
+ 'easeOutBack' => __( 'Ease out Back', 'wts-eae' ),
827
+ 'easeInOutBack' => __( 'Ease in Out Back', 'wts-eae' ),
828
+ 'easeInBounce' => __( 'Ease in Bounce', 'wts-eae' ),
829
+ 'easeOutBounce' => __( 'Ease out Bounce', 'wts-eae' ),
830
+ 'easeInOutBounce' => __( 'Ease in out Bounce', 'wts-eae' ),
831
+ ],
832
+ 'default' => 'linear',
833
+ ]
834
+ );
835
+
836
+ $this->add_control(
837
+ 'duration_animation',
838
+ [
839
+ 'label' => __( 'Animation Duration', 'wts-eae' ),
840
+ 'type' => Controls_Manager::NUMBER,
841
+ 'min' => 0,
842
+ 'max' => 10000,
843
+ 'step' => 100,
844
+ 'default' => 1000,
845
+ ]
846
+ );
847
+
848
+ $this->end_controls_section();
849
+
850
+ $this->start_controls_section(
851
+ 'section_style',
852
+ [
853
+ 'label' => __( 'General', 'wts-eae' ),
854
+ 'tab' => Controls_Manager::TAB_STYLE,
855
+ ]
856
+ );
857
+
858
+ $this->add_group_control(
859
+ Group_Control_Background::get_type(),
860
+ [
861
+ 'name' => 'eae_chart_background_color',
862
+ 'label' => __( 'Background Color', 'wts-eae' ),
863
+ 'types' => [ 'none', 'classic', 'gradient' ],
864
+ 'selector' => '{{WRAPPER}} .eae-chart-outer-container',
865
+ ]
866
+ );
867
+
868
+ $this->add_control(
869
+ 'chart_overlay',
870
+ [
871
+ 'label' => __( 'Overlay', 'wts-eae' ),
872
+ 'type' => Controls_Manager::SWITCHER,
873
+ 'default' => '',
874
+ 'label_on' => 'Yes',
875
+ 'label_off' => 'No',
876
+ 'return_value' => 'yes',
877
+ 'condition' => [
878
+ 'eae_chart_background_color_background' => 'classic',
879
+ ],
880
+ ]
881
+ );
882
+
883
+ $this->add_control(
884
+ 'chart_overlay_color',
885
+ [
886
+ 'label' => __( 'Overlay Color', 'wts-eae' ),
887
+ 'type' => Controls_Manager::COLOR,
888
+ 'default' => 'rgba(0,0,0,0.5)',
889
+ 'conditions' => [
890
+ 'terms' => [
891
+ [
892
+ 'name' => 'chart_overlay',
893
+ 'value' => 'yes',
894
+ ],
895
+ ],
896
+ ],
897
+ 'selectors' => [
898
+ '{{WRAPPER}} .eae-chart-overlay' => 'background-color: {{VALUE}}',
899
+ ],
900
+ ]
901
+ );
902
+
903
+ $this->add_control(
904
+ 'chart_overlay_blend_mode',
905
+ [
906
+ 'label' => __( 'Blend Mode', 'wts-eae' ),
907
+ 'type' => Controls_Manager::SELECT,
908
+ 'options' => [
909
+ '' => __( 'Normal', 'wts-eae' ),
910
+ 'multiply' => 'Multiply',
911
+ 'screen' => 'Screen',
912
+ 'overlay' => 'Overlay',
913
+ 'darken' => 'Darken',
914
+ 'lighten' => 'Lighten',
915
+ 'color-dodge' => 'Color Dodge',
916
+ 'color-burn' => 'Color Burn',
917
+ 'hue' => 'Hue',
918
+ 'saturation' => 'Saturation',
919
+ 'color' => 'Color',
920
+ 'exclusion' => 'Exclusion',
921
+ 'luminosity' => 'Luminosity',
922
+ ],
923
+ 'conditions' => [
924
+ 'terms' => [
925
+ [
926
+ 'name' => 'chart_overlay',
927
+ 'value' => 'yes',
928
+ ],
929
+ ],
930
+ ],
931
+ 'selectors' => [
932
+ '{{WRAPPER}} .eae-chart-overlay' => 'mix-blend-mode: {{VALUE}}',
933
+ ],
934
+ ]
935
+ );
936
+
937
+ $this->add_group_control(
938
+ Group_Control_Border::get_type(),
939
+ [
940
+ 'name' => 'eae_chart_border',
941
+ 'label' => __( 'Border', 'wts-eae' ),
942
+ 'selector' => '{{WRAPPER}} .eae-chart-outer-container',
943
+ 'separator' => 'before',
944
+ ]
945
+ );
946
+
947
+ $this->add_control(
948
+ 'eae_chart_border_radius',
949
+ [
950
+ 'label' => __( 'Border Radius', 'wts-eae' ),
951
+ 'type' => Controls_Manager::DIMENSIONS,
952
+ 'size_units' => [ 'px', '%' ],
953
+ 'selectors' => [
954
+ '{{WRAPPER}} .eae-chart-outer-container' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
955
+ ],
956
+ ]
957
+ );
958
+
959
+ $this->add_responsive_control(
960
+ 'eae_chart_margin',
961
+ [
962
+ 'label' => __( 'Margin', 'wts-eae' ),
963
+ 'type' => Controls_Manager::DIMENSIONS,
964
+ 'size_units' => [ 'px', 'em', '%' ],
965
+ 'selectors' => [
966
+ '{{WRAPPER}} .eae-chart-outer-container' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}}',
967
+ ],
968
+ 'separator' => 'before',
969
+ ]
970
+ );
971
+
972
+ $this->add_responsive_control(
973
+ 'eae_chart_padding',
974
+ [
975
+ 'label' => __( 'Padding', 'wts-eae' ),
976
+ 'type' => Controls_Manager::DIMENSIONS,
977
+ 'size_units' => [ 'px', 'em', '%' ],
978
+ ]
979
+ );
980
+
981
+ $this->end_controls_section();
982
+
983
+ $this->start_controls_section(
984
+ 'xaxes_style',
985
+ [
986
+ 'label' => __( 'X-Axis', 'wts-eae' ),
987
+ 'tab' => Controls_Manager::TAB_STYLE,
988
+ 'conditions' => [
989
+ 'relation' => 'or',
990
+ 'terms' => [
991
+ [
992
+ 'name' => 'xaxes_grid_line',
993
+ 'operator' => '==',
994
+ 'value' => 'yes',
995
+ ],
996
+ [
997
+ 'name' => 'xaxes_display_title',
998
+ 'operator' => '==',
999
+ 'value' => 'yes',
1000
+ ],
1001
+ [
1002
+ 'name' => 'xaxes_labels_display',
1003
+ 'operator' => '==',
1004
+ 'value' => 'yes',
1005
+ ],
1006
+ ],
1007
+ ],
1008
+ ]
1009
+ );
1010
+
1011
+ $this->add_control(
1012
+ 'xaxes_grid_heading',
1013
+ [
1014
+ 'label' => __( 'Grid', 'wts-eae' ),
1015
+ 'type' => Controls_Manager::HEADING,
1016
+ 'condition' => [
1017
+ 'xaxes_grid_line' => 'yes',
1018
+ ],
1019
+ ]
1020
+ );
1021
+
1022
+ $this->add_control(
1023
+ 'xaxes_grid_color',
1024
+ [
1025
+ 'label' => __( 'Color', 'wts-eae' ),
1026
+ 'type' => Controls_Manager::COLOR,
1027
+ 'condition' => [
1028
+ 'xaxes_grid_line' => 'yes',
1029
+ ],
1030
+ ]
1031
+ );
1032
+
1033
+ $this->add_control(
1034
+ 'xaxes_grid_width',
1035
+ [
1036
+ 'label' => __( 'Width', 'wts-eae' ),
1037
+ 'type' => Controls_Manager::SLIDER,
1038
+ 'range' => [
1039
+ 'px' => [
1040
+ 'min' => 0,
1041
+ 'max' => 10,
1042
+ ],
1043
+ ],
1044
+ 'default' => [
1045
+ 'unit' => 'px',
1046
+ 'size' => 1,
1047
+ ],
1048
+ 'condition' => [
1049
+ 'xaxes_grid_line' => 'yes',
1050
+ ],
1051
+ 'separator' => 'after',
1052
+ ]
1053
+ );
1054
+
1055
+ $this->add_control(
1056
+ 'xaxes_title_heading',
1057
+ [
1058
+ 'label' => __( 'Title', 'wts-eae' ),
1059
+ 'type' => Controls_Manager::HEADING,
1060
+ 'condition' => [
1061
+ 'xaxes_display_title' => 'yes',
1062
+ ],
1063
+ ]
1064
+ );
1065
+
1066
+ $this->add_control(
1067
+ 'xaxes_title_color',
1068
+ [
1069
+ 'label' => __( 'Color', 'wts-eae' ),
1070
+ 'type' => Controls_Manager::COLOR,
1071
+ 'condition' => [
1072
+ 'xaxes_display_title' => 'yes',
1073
+ ],
1074
+ ]
1075
+ );
1076
+
1077
+ $this->add_control(
1078
+ 'xaxes_title_style',
1079
+ [
1080
+ 'label' => __( 'Typography', 'wts-eae' ),
1081
+ 'type' => Controls_Manager::POPOVER_TOGGLE,
1082
+ 'return_value' => 'yes',
1083
+ 'condition' => [
1084
+ 'xaxes_display_title' => 'yes',
1085
+ ],
1086
+ 'separator' => 'after',
1087
+ ]
1088
+ );
1089
+
1090
+ $this->start_popover();
1091
+
1092
+ $this->add_control(
1093
+ 'xaxes_title_typo',
1094
+ [
1095
+ 'label' => __( 'Typography', 'wts-eae' ),
1096
+ 'type' => Controls_Manager::HEADING,
1097
+ 'separator' => 'after',
1098
+ 'condition' => [
1099
+ 'xaxes_display_title' => 'yes',
1100
+ 'xaxes_title_style' => 'yes',
1101
+ ],
1102
+ ]
1103
+ );
1104
+
1105
+ $this->add_control(
1106
+ 'xaxes_title_font_family',
1107
+ [
1108
+ 'label' => __( 'Family', 'wts-eae' ),
1109
+ 'type' => Controls_Manager::FONT,
1110
+ 'default' => '',
1111
+ 'condition' => [
1112
+ 'xaxes_display_title' => 'yes',
1113
+ 'xaxes_title_style' => 'yes',
1114
+ ],
1115
+ ]
1116
+ );
1117
+
1118
+ $this->add_control(
1119
+ 'xaxes_title