Happy Addons for Elementor (Mega Menu, Post Grid, Woocommerce Product Grid, Table, Event Calendar, Slider Elementor Widget) - Version 1.0.2

Version Description

  • Update: Floating effects settings
  • Update: Info box link updated to button
  • Fix: Some minor styling issues
Download this release

Release Info

Developer thehappymonster
Plugin Icon 128x128 Happy Addons for Elementor (Mega Menu, Post Grid, Woocommerce Product Grid, Table, Event Calendar, Slider Elementor Widget)
Version 1.0.2
Comparing to
See all releases

Code changes from version 1.0.1 to 1.0.2

assets/admin/js/happy-addons.js CHANGED
@@ -7,6 +7,7 @@
7
  .find('.hm')
8
  .parents('.elementor-element')
9
  .addClass('happy-addons-addon');
10
- }, 170));
11
  });
 
12
  }(jQuery, window.elementor));
7
  .find('.hm')
8
  .parents('.elementor-element')
9
  .addClass('happy-addons-addon');
10
+ }, 100));
11
  });
12
+
13
  }(jQuery, window.elementor));
assets/admin/js/happy-addons.min.js CHANGED
@@ -1 +1 @@
1
- !function(e,n){"use strict";n.on("panel:init",function(){e("#elementor-panel-elements-search-input").on("keyup",_.debounce(function(){e("#elementor-panel-elements").find(".hm").parents(".elementor-element").addClass("happy-addons-addon")},170))})}(jQuery,window.elementor);
1
+ !function(e,n){"use strict";n.on("panel:init",function(){e("#elementor-panel-elements-search-input").on("keyup",_.debounce(function(){e("#elementor-panel-elements").find(".hm").parents(".elementor-element").addClass("happy-addons-addon")},100))})}(jQuery,window.elementor);
assets/css/main.css CHANGED
@@ -41,50 +41,36 @@
41
 
42
  .ha-btn {
43
  display: inline-block;
44
- padding: .7rem 1.3rem;
45
- border-radius: .25rem;
46
- background-color: #8c8c8c;
47
- color: #fff;
48
  vertical-align: middle;
49
  text-align: center;
50
  text-decoration: none;
51
- font-weight: bold;
52
  font-size: 14px;
53
  line-height: 1;
54
  -webkit-transition: all .3s;
55
  transition: all .3s;
56
  }
57
- .ha-btn:hover,
58
- .ha-btn:focus {
59
- background-color: #242424;
60
- }
61
- .ha-btn--block {
62
- display: block;
63
  }
64
- .ha-btn-icon + .ha-btn-text,
65
- .ha-btn-text + .ha-btn-icon {
66
- margin-left: 5px;
67
  }
68
-
69
- .ha-link {
70
- position: relative;
71
- display: inline-block;
72
- margin-right: 15px;
73
  color: #3ca6ff;
74
- text-decoration: none;
75
  }
76
- .ha-link:after {
77
- position: absolute;
78
- top: 2px;
79
- right: -15px;
80
- content: "\f105";
81
- font-size: 15px;
82
- font-family: "FontAwesome";
83
  -webkit-transition: all .3s;
84
  transition: all .3s;
85
  }
86
- .ha-link:hover:after {
87
- right: -25px;
 
88
  }
89
 
90
  .ha-card-figure {
@@ -271,7 +257,7 @@
271
  vertical-align: bottom;
272
  }
273
 
274
- .ha-infobox-text + .ha-link {
275
  margin-top: 1rem;
276
  }
277
 
41
 
42
  .ha-btn {
43
  display: inline-block;
 
 
 
 
44
  vertical-align: middle;
45
  text-align: center;
46
  text-decoration: none;
47
+ font-weight: bold;
48
  font-size: 14px;
49
  line-height: 1;
50
  -webkit-transition: all .3s;
51
  transition: all .3s;
52
  }
53
+ .ha-btn:not(.ha-btn--link) {
54
+ padding: .7rem 1.3rem;
55
+ border-radius: .25rem;
56
+ background-color: #8c8c8c;
57
+ color: #fff;
58
+ text-align: center;
59
  }
60
+ .ha-btn:not(.ha-btn--link):hover,
61
+ .ha-btn:not(.ha-btn--link):focus {
62
+ background-color: #242424;
63
  }
64
+ .ha-btn.ha-btn--link {
 
 
 
 
65
  color: #3ca6ff;
 
66
  }
67
+ .ha-btn-icon {
 
 
 
 
 
 
68
  -webkit-transition: all .3s;
69
  transition: all .3s;
70
  }
71
+ .ha-btn-icon + .ha-btn-text,
72
+ .ha-btn-text + .ha-btn-icon {
73
+ margin-left: 5px;
74
  }
75
 
76
  .ha-card-figure {
257
  vertical-align: bottom;
258
  }
259
 
260
+ .ha-infobox-text + .ha-btn--link {
261
  margin-top: 1rem;
262
  }
263
 
assets/css/main.min.css CHANGED
@@ -1 +1 @@
1
- .ha-card>.elementor-widget-container,.ha-icon-box>.elementor-widget-container,.ha-image-compare>.elementor-widget-container,.ha-infobox>.elementor-widget-container,.ha-member>.elementor-widget-container,.ha-review>.elementor-widget-container{border-radius:.5rem;background-color:#fff;box-shadow:0 .2rem 2.8rem rgba(36,36,36,.1);word-wrap:break-word;overflow-wrap:break-word}.happy-addon,.happy-addon *{box-sizing:border-box}.happy-addon img{max-width:100%;height:auto;-o-object-fit:cover;object-fit:cover}.happy-addon p:empty{display:none}.ha-cf:after,.ha-cf:before{display:table;content:" "}.ha-cf:after{clear:both}.ha-btn{display:inline-block;padding:.7rem 1.3rem;border-radius:.25rem;background-color:#8c8c8c;color:#fff;vertical-align:middle;text-align:center;text-decoration:none;font-weight:700;font-size:14px;line-height:1;-webkit-transition:all .3s;transition:all .3s}.ha-btn:focus,.ha-btn:hover{background-color:#242424}.ha-btn--block{display:block}.ha-btn-icon+.ha-btn-text,.ha-btn-text+.ha-btn-icon{margin-left:5px}.ha-link{position:relative;display:inline-block;margin-right:15px;color:#3ca6ff;text-decoration:none}.ha-link:after{position:absolute;top:2px;right:-15px;content:"\f105";font-size:15px;font-family:"FontAwesome";-webkit-transition:all .3s;transition:all .3s}.ha-link:hover:after{right:-25px}.ha-card-figure{position:relative;height:250px}.ha-card-figure>img{border-top-left-radius:calc(.5rem - 1px);border-top-right-radius:calc(.5rem - 1px)}.ha-card-body{padding:1.5rem}.ha-card-title{margin-top:0;margin-bottom:.75rem;color:#151515;font-size:24px}.ha-card-text{margin-bottom:2rem;color:#616161;font-size:16px;line-height:1.7}.ha-card-text>p,.ha-infobox-text>p{margin-top:0;margin-bottom:0}.ha-card--top .ha-card-figure,.ha-member-links>a{display:inline-block}.ha-card--left>.elementor-widget-container,.ha-card--right>.elementor-widget-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center}.ha-card--left>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-card--left .ha-card-body,.ha-card--left .ha-card-figure,.ha-card--right .ha-card-body,.ha-card--right .ha-card-figure{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.ha-card--left .ha-card-body,.ha-card--right .ha-card-body{padding:2.5rem}.ha-card--left .ha-card-figure>img{border-radius:calc(.5rem - 1px) 0 0 calc(.5rem - 1px)}.ha-card--right>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;text-align:right}.ha-card--right .ha-card-figure>img{border-radius:0 calc(.5rem - 1px) calc(.5rem - 1px) 0}.ha-card .ha-badge{position:absolute}.ha-badge{padding:.475rem 1.1rem;border-radius:50px;background-color:#fff;font-size:12px}.ha-badge--top-left{top:1rem;left:1rem}.ha-badge--top-center{top:1rem;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-badge--top-right{top:1rem;right:1rem}.ha-badge--middle-left{top:50%;left:1rem;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.ha-badge--middle-center{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ha-badge--middle-right{top:50%;right:1rem;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.ha-badge--bottom-left{bottom:1rem;left:1rem}.ha-badge--bottom-center{bottom:1rem;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-badge--bottom-right{right:1rem;bottom:1rem}.ha-infobox>.elementor-widget-container{padding:1.5rem}.ha-infobox-title{margin-top:0;margin-bottom:1rem;color:#151515;font-size:24px}.ha-infobox-figure{display:inline-block;margin:0 0 1.5rem!important}.ha-infobox-figure--icon{text-align:center;font-size:3rem}.ha-infobox-figure>i{position:relative;display:block;width:1em;height:1em}.ha-card-figure>img,.ha-infobox-figure>img,.ha-member-figure img{width:100%;height:100%;vertical-align:bottom}.ha-infobox-text+.ha-link{margin-top:1rem}.ha-icon-box>.elementor-widget-container{position:relative;padding:1.25rem}.ha-icon-box-title{margin-top:0;margin-bottom:0;color:#151515;font-size:24px;-webkit-transition:color .3s;transition:color .3s}.ha-icon-box-icon{display:inline-block;margin-bottom:1rem;color:#151515;text-align:center;font-size:3rem;-webkit-transition:border .3s,background .3s,color .3s,-webkit-transform .3s;transition:transform .3s,border .3s,background .3s,color .3s;transition:transform .3s,border .3s,background .3s,color .3s,-webkit-transform .3s}.ha-icon-box-icon>i{display:block;width:1em;height:1em;-webkit-transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ha-icon-box-link{display:block;color:transparent;text-decoration:none}.ha-icon-box .ha-badge{position:absolute;z-index:9999;background-color:#e2498a;color:#fff}.ha-member>.elementor-widget-container{padding:1.25rem}.ha-member-figure{display:inline-block;margin:0 0 1.5rem!important}.ha-member-name{margin-top:0;margin-bottom:.5rem;color:#151515;font-size:18px}.ha-member-position{margin-bottom:1.5rem;color:#7f7f7f;font-size:14px}.ha-member-bio{margin-bottom:1.5rem;font-size:14px;line-height:1.6}.ha-member-links>a{color:#9895ad;text-align:center;line-height:1;-webkit-transition:all .2s;transition:all .2s}.ha-member-links>a:focus,.ha-member-links>a:hover{color:#222}.ha-member-links>a>i{width:1em;height:1em}.ha-member-links>a:not(:last-child){margin-right:.3rem}.ha-review-header{margin-top:1.5rem}.ha-review-desc p,.ha-review-figure{margin:0}.ha-review-figure>img{width:100%;height:100%;border-radius:50%;vertical-align:bottom}.ha-review-reviewer{margin-top:0;margin-bottom:.3rem;color:#151515;font-size:18px}.ha-review-position{margin-bottom:.5rem;color:#7f7f7f;font-size:15px}.ha-review-ratting{display:inline-block;font-size:12px;line-height:1}.ha-review-ratting--num{padding:.25em .66em;border-radius:2.5em;background-color:#287dfe;color:#fff}.ha-review-ratting--star{display:inline-block;color:#ffbf36;font-family:"Fontawesome"}.ha-review-ratting--star>span{position:relative;overflow:hidden;height:1em}.ha-review-ratting--star span>span{position:absolute;top:0;left:0;overflow:hidden;padding-top:1.5em}.ha-review-ratting--star span>span:before,span .ha-review-ratting--star:before{position:absolute;top:0;left:0}.ha-review-ratting--star span:before{content:"\f006\f006\f006\f006\f006"}.ha-review-ratting--star span>span:before{content:"\f005\f005\f005\f005\f005"}.ha-review-desc{margin-top:1.5rem;font-size:16px;line-height:1.6}.ha-review--top>.elementor-widget-container{padding:2rem}.ha-review--top .ha-review-figure{display:inline-block;max-width:70px;height:70px}.ha-review--left>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-review--left>.elementor-widget-container,.ha-review--right>.elementor-widget-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;padding-left:2rem}.ha-review--left .ha-review-figure,.ha-review--right .ha-review-figure{-webkit-box-flex:0;-webkit-flex:0 0 150px;-ms-flex:0 0 150px;flex:0 0 150px;max-width:150px;height:150px}.ha-review--left .ha-review-body,.ha-review--right .ha-review-body{-webkit-box-flex:0;-webkit-flex:0 0 calc(100% - 150px);-ms-flex:0 0 calc(100% - 150px);flex:0 0 calc(100% - 150px);padding:2rem;max-width:calc(100% - 150px)}.ha-review--left .ha-review-body>:first-child,.ha-review--right .ha-review-body>:first-child{margin-top:0}.ha-review--right>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;padding-right:2rem;padding-left:0;text-align:right}.ha-image-compare .twentytwenty-container,.ha-image-compare .twentytwenty-wrapper{border-radius:inherit}.ha-skills>.elementor-widget-container{padding-top:1px}.ha-skill{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;background-color:#e9ecef;font-size:.75rem}.ha-skill--inside .ha-skill-info,.ha-skill--outside .ha-skill-info{text-align:left;font-size:14px}.ha-skill--inside .ha-skill-level-text,.ha-skill--outside .ha-skill-level-text{float:right}.ha-skill--outside{height:2px}.ha-skill--outside .ha-skill-level{position:relative}.ha-skill--outside .ha-skill-info{position:absolute;top:-25px;width:100%;color:#242424}.ha-skill--inside{overflow:hidden;height:30px;border-radius:.3rem}.ha-skill--inside .ha-skill-info{padding-right:1rem;padding-left:1rem;color:#fff}.ha-skill-level{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;background-color:#007bff;color:#fff;text-align:center;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.ha-skill--outside{margin-top:40px}.ha-skill--inside:not(:first-child){margin-top:20px}.ha-gradient-heading{margin-top:0;margin-bottom:0}.ha-gradient-heading>a{color:inherit;text-decoration:none}
1
+ .ha-card>.elementor-widget-container,.ha-icon-box>.elementor-widget-container,.ha-image-compare>.elementor-widget-container,.ha-infobox>.elementor-widget-container,.ha-member>.elementor-widget-container,.ha-review>.elementor-widget-container{border-radius:.5rem;background-color:#fff;box-shadow:0 .2rem 2.8rem rgba(36,36,36,.1);word-wrap:break-word;overflow-wrap:break-word}.happy-addon,.happy-addon *{box-sizing:border-box}.happy-addon img{max-width:100%;height:auto;-o-object-fit:cover;object-fit:cover}.happy-addon p:empty{display:none}.ha-cf:after,.ha-cf:before{display:table;content:" "}.ha-cf:after{clear:both}.ha-btn{display:inline-block;vertical-align:middle;text-align:center;text-decoration:none;font-weight:700;font-size:14px;line-height:1;-webkit-transition:all .3s;transition:all .3s}.ha-btn:not(.ha-btn--link){padding:.7rem 1.3rem;border-radius:.25rem;background-color:#8c8c8c;color:#fff;text-align:center}.ha-btn:not(.ha-btn--link):focus,.ha-btn:not(.ha-btn--link):hover{background-color:#242424}.ha-btn.ha-btn--link{color:#3ca6ff}.ha-btn-icon{-webkit-transition:all .3s;transition:all .3s}.ha-btn-icon+.ha-btn-text,.ha-btn-text+.ha-btn-icon{margin-left:5px}.ha-card-figure{position:relative;height:250px}.ha-card-figure>img{border-top-left-radius:calc(.5rem - 1px);border-top-right-radius:calc(.5rem - 1px)}.ha-card-body{padding:1.5rem}.ha-card-title{margin-top:0;margin-bottom:.75rem;color:#151515;font-size:24px}.ha-card-text{margin-bottom:2rem;color:#616161;font-size:16px;line-height:1.7}.ha-card-text>p,.ha-infobox-text>p{margin-top:0;margin-bottom:0}.ha-card--top .ha-card-figure,.ha-member-links>a{display:inline-block}.ha-card--left>.elementor-widget-container,.ha-card--right>.elementor-widget-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center}.ha-card--left>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-card--left .ha-card-body,.ha-card--left .ha-card-figure,.ha-card--right .ha-card-body,.ha-card--right .ha-card-figure{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.ha-card--left .ha-card-body,.ha-card--right .ha-card-body{padding:2.5rem}.ha-card--left .ha-card-figure>img{border-radius:calc(.5rem - 1px) 0 0 calc(.5rem - 1px)}.ha-card--right>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;text-align:right}.ha-card--right .ha-card-figure>img{border-radius:0 calc(.5rem - 1px) calc(.5rem - 1px) 0}.ha-card .ha-badge{position:absolute}.ha-badge{padding:.475rem 1.1rem;border-radius:50px;background-color:#fff;font-size:12px}.ha-badge--top-left{top:1rem;left:1rem}.ha-badge--top-center{top:1rem;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-badge--top-right{top:1rem;right:1rem}.ha-badge--middle-left{top:50%;left:1rem;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.ha-badge--middle-center{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ha-badge--middle-right{top:50%;right:1rem;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.ha-badge--bottom-left{bottom:1rem;left:1rem}.ha-badge--bottom-center{bottom:1rem;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-badge--bottom-right{right:1rem;bottom:1rem}.ha-infobox>.elementor-widget-container{padding:1.5rem}.ha-infobox-title{margin-top:0;margin-bottom:1rem;color:#151515;font-size:24px}.ha-infobox-figure{display:inline-block;margin:0 0 1.5rem!important}.ha-infobox-figure--icon{text-align:center;font-size:3rem}.ha-infobox-figure>i{position:relative;display:block;width:1em;height:1em}.ha-card-figure>img,.ha-infobox-figure>img,.ha-member-figure img{width:100%;height:100%;vertical-align:bottom}.ha-infobox-text+.ha-btn--link{margin-top:1rem}.ha-icon-box>.elementor-widget-container{position:relative;padding:1.25rem}.ha-icon-box-title{margin-top:0;margin-bottom:0;color:#151515;font-size:24px;-webkit-transition:color .3s;transition:color .3s}.ha-icon-box-icon{display:inline-block;margin-bottom:1rem;color:#151515;text-align:center;font-size:3rem;-webkit-transition:border .3s,background .3s,color .3s,-webkit-transform .3s;transition:transform .3s,border .3s,background .3s,color .3s;transition:transform .3s,border .3s,background .3s,color .3s,-webkit-transform .3s}.ha-icon-box-icon>i{display:block;width:1em;height:1em;-webkit-transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ha-icon-box-link{display:block;color:transparent;text-decoration:none}.ha-icon-box .ha-badge{position:absolute;z-index:9999;background-color:#e2498a;color:#fff}.ha-member>.elementor-widget-container{padding:1.25rem}.ha-member-figure{display:inline-block;margin:0 0 1.5rem!important}.ha-member-name{margin-top:0;margin-bottom:.5rem;color:#151515;font-size:18px}.ha-member-position{margin-bottom:1.5rem;color:#7f7f7f;font-size:14px}.ha-member-bio{margin-bottom:1.5rem;font-size:14px;line-height:1.6}.ha-member-links>a{color:#9895ad;text-align:center;line-height:1;-webkit-transition:all .2s;transition:all .2s}.ha-member-links>a:focus,.ha-member-links>a:hover{color:#222}.ha-member-links>a>i{width:1em;height:1em}.ha-member-links>a:not(:last-child){margin-right:.3rem}.ha-review-header{margin-top:1.5rem}.ha-review-desc p,.ha-review-figure{margin:0}.ha-review-figure>img{width:100%;height:100%;border-radius:50%;vertical-align:bottom}.ha-review-reviewer{margin-top:0;margin-bottom:.3rem;color:#151515;font-size:18px}.ha-review-position{margin-bottom:.5rem;color:#7f7f7f;font-size:15px}.ha-review-ratting{display:inline-block;font-size:12px;line-height:1}.ha-review-ratting--num{padding:.25em .66em;border-radius:2.5em;background-color:#287dfe;color:#fff}.ha-review-ratting--star{display:inline-block;color:#ffbf36;font-family:"Fontawesome"}.ha-review-ratting--star>span{position:relative;overflow:hidden;height:1em}.ha-review-ratting--star span>span{position:absolute;top:0;left:0;overflow:hidden;padding-top:1.5em}.ha-review-ratting--star span>span:before,span .ha-review-ratting--star:before{position:absolute;top:0;left:0}.ha-review-ratting--star span:before{content:"\f006\f006\f006\f006\f006"}.ha-review-ratting--star span>span:before{content:"\f005\f005\f005\f005\f005"}.ha-review-desc{margin-top:1.5rem;font-size:16px;line-height:1.6}.ha-review--top>.elementor-widget-container{padding:2rem}.ha-review--top .ha-review-figure{display:inline-block;max-width:70px;height:70px}.ha-review--left>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-review--left>.elementor-widget-container,.ha-review--right>.elementor-widget-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;padding-left:2rem}.ha-review--left .ha-review-figure,.ha-review--right .ha-review-figure{-webkit-box-flex:0;-webkit-flex:0 0 150px;-ms-flex:0 0 150px;flex:0 0 150px;max-width:150px;height:150px}.ha-review--left .ha-review-body,.ha-review--right .ha-review-body{-webkit-box-flex:0;-webkit-flex:0 0 calc(100% - 150px);-ms-flex:0 0 calc(100% - 150px);flex:0 0 calc(100% - 150px);padding:2rem;max-width:calc(100% - 150px)}.ha-review--left .ha-review-body>:first-child,.ha-review--right .ha-review-body>:first-child{margin-top:0}.ha-review--right>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;padding-right:2rem;padding-left:0;text-align:right}.ha-image-compare .twentytwenty-container,.ha-image-compare .twentytwenty-wrapper{border-radius:inherit}.ha-skills>.elementor-widget-container{padding-top:1px}.ha-skill{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;background-color:#e9ecef;font-size:.75rem}.ha-skill--inside .ha-skill-info,.ha-skill--outside .ha-skill-info{text-align:left;font-size:14px}.ha-skill--inside .ha-skill-level-text,.ha-skill--outside .ha-skill-level-text{float:right}.ha-skill--outside{height:2px}.ha-skill--outside .ha-skill-level{position:relative}.ha-skill--outside .ha-skill-info{position:absolute;top:-25px;width:100%;color:#242424}.ha-skill--inside{overflow:hidden;height:30px;border-radius:.3rem}.ha-skill--inside .ha-skill-info{padding-right:1rem;padding-left:1rem;color:#fff}.ha-skill-level{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;background-color:#007bff;color:#fff;text-align:center;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.ha-skill--outside{margin-top:40px}.ha-skill--inside:not(:first-child){margin-top:20px}.ha-gradient-heading{margin-top:0;margin-bottom:0}.ha-gradient-heading>a{color:inherit;text-decoration:none}
assets/dev/admin/js/happy-addon.js DELETED
@@ -1,12 +0,0 @@
1
- ;(function($, elementor) {
2
- 'use strict';
3
-
4
- elementor.on('panel:init', function() {
5
- $('#elementor-panel-elements-search-input').on('keyup', _.debounce(function() {
6
- $('#elementor-panel-elements')
7
- .find('.hm')
8
- .parents('.elementor-element')
9
- .addClass('happy-addons-addon');
10
- }, 170));
11
- });
12
- }(jQuery, window.elementor));
 
 
 
 
 
 
 
 
 
 
 
 
assets/dev/admin/sass/main.scss DELETED
@@ -1,27 +0,0 @@
1
- .elementor-panel {
2
- #elementor-panel-category-happy_addons .elementor-element,
3
- #elementor-panel-elements .happy-addons-addon {
4
- transition: background-image .3s;
5
-
6
- .icon,
7
- .title {
8
- background-image: linear-gradient(135deg, #e2498a 25%, #562dd4 100%);
9
- -webkit-background-clip: text;
10
- -webkit-text-fill-color: transparent;
11
-
12
- transition: background-image .2s, color .2s;
13
- }
14
-
15
- &:hover,
16
- &:focus {
17
- background-image: linear-gradient(135deg, #e2498a 0%, #562dd4 100%);
18
-
19
- .icon,
20
- .title {
21
- color: #fff;
22
- background: transparent;
23
- -webkit-text-fill-color: initial;
24
- }
25
- }
26
- }
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/dev/js/happy-addons.js DELETED
@@ -1,140 +0,0 @@
1
- 'use strict';
2
- window.Happy = window.Happy || {};
3
-
4
- (function ($, Happy) {
5
- var $window = $(window);
6
-
7
- $.fn.getHappySettings = function() {
8
- return this.data('happy-settings');
9
- };
10
-
11
- Happy.initImageComparison = function($scope) {
12
- var $item = $scope.find('.hajs-image-comparison'),
13
- settings = $item.getHappySettings(),
14
- fieldMap = {
15
- on_hover: 'move_slider_on_hover',
16
- on_swipe: 'move_with_handle_only',
17
- on_click: 'click_to_move'
18
- };
19
-
20
- settings[fieldMap[settings.move_handle || 'on_swipe']] = true;
21
- delete settings.move_handle;
22
- $item.imagesLoaded().done(function() {
23
- $item.twentytwenty(settings);
24
- });
25
- };
26
-
27
- $window.on( 'elementor/frontend/init', function() {
28
- var FloatingFx = elementorModules.frontend.handlers.Base.extend({
29
- onInit: function() {
30
- elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
31
- this.run();
32
- },
33
-
34
- getTheElement: function() {
35
- return this.$element.find('.elementor-widget-container')[0];
36
- },
37
-
38
- resetFx: function() {
39
- anime.remove(this.getTheElement());
40
- this.getTheElement() && this.getTheElement().removeAttribute('style');
41
- },
42
-
43
- onDestroy: function() {
44
- elementorModules.frontend.handlers.Base.prototype.onDestroy.apply(this, arguments);
45
- this.resetFx();
46
- },
47
-
48
- onElementChange: function() {
49
- this.resetFx();
50
- this.run();
51
- },
52
-
53
- run: function() {
54
- var settings = this.getElementSettings(),
55
- fxSettings = {
56
- targets: this.getTheElement(),
57
- loop: true,
58
- direction: 'alternate',
59
- easing: 'easeInOutSine'
60
- };
61
-
62
- if (settings.ha_floating_fx_translate_toggle) {
63
- if (settings.ha_floating_fx_translate_x.size) {
64
- fxSettings.translateX = {
65
- value: settings.ha_floating_fx_translate_x.size,
66
- duration: settings.ha_floating_fx_translate_duration.size,
67
- delay: settings.ha_floating_fx_translate_delay.size || 0
68
- }
69
- }
70
- if (settings.ha_floating_fx_translate_y.size) {
71
- fxSettings.translateY = {
72
- value: settings.ha_floating_fx_translate_y.size,
73
- duration: settings.ha_floating_fx_translate_duration.size,
74
- delay: settings.ha_floating_fx_translate_delay.size || 0
75
- }
76
- }
77
- }
78
-
79
- if (settings.ha_floating_fx_rotate_toggle) {
80
- if (settings.ha_floating_fx_rotate_x.size) {
81
- fxSettings.rotateX = {
82
- value: settings.ha_floating_fx_rotate_x.size,
83
- duration: settings.ha_floating_fx_rotate_duration.size,
84
- delay: settings.ha_floating_fx_rotate_delay.size || 0
85
- }
86
- }
87
- if (settings.ha_floating_fx_rotate_y.size) {
88
- fxSettings.rotateY = {
89
- value: settings.ha_floating_fx_rotate_y.size,
90
- duration: settings.ha_floating_fx_rotate_duration.size,
91
- delay: settings.ha_floating_fx_rotate_delay.size || 0
92
- }
93
- }
94
- if (settings.ha_floating_fx_rotate_z.size) {
95
- fxSettings.rotateZ = {
96
- value: settings.ha_floating_fx_rotate_z.size,
97
- duration: settings.ha_floating_fx_rotate_duration.size,
98
- delay: settings.ha_floating_fx_rotate_delay.size || 0
99
- }
100
- }
101
- }
102
-
103
- if (settings.ha_floating_fx_scale_toggle) {
104
- if (settings.ha_floating_fx_scale_x.size) {
105
- fxSettings.scaleX = {
106
- value: settings.ha_floating_fx_scale_x.size,
107
- duration: settings.ha_floating_fx_scale_duration.size,
108
- delay: settings.ha_floating_fx_scale_delay.size || 0
109
- }
110
- }
111
- if (settings.ha_floating_fx_scale_y.size) {
112
- fxSettings.scaleY = {
113
- value: settings.ha_floating_fx_scale_y.size,
114
- duration: settings.ha_floating_fx_scale_duration.size,
115
- delay: settings.ha_floating_fx_scale_delay.size || 0
116
- }
117
- }
118
- }
119
-
120
- if (settings.ha_floating_fx_translate_toggle || settings.ha_floating_fx_rotate_toggle || settings.ha_floating_fx_scale_toggle) {
121
- this.getTheElement() && this.getTheElement().style.setProperty('will-change', 'transform');
122
- anime(fxSettings);
123
- }
124
- }
125
- });
126
-
127
- elementorFrontend.hooks.addAction(
128
- 'frontend/element_ready/ha-image-compare.default',
129
- Happy.initImageComparison
130
- );
131
-
132
- elementorFrontend.hooks.addAction(
133
- 'frontend/element_ready/widget',
134
- function ($scope) {
135
- new FloatingFx({ $element: $scope });
136
- }
137
- );
138
- });
139
-
140
- } (jQuery, Happy));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/dev/sass/_btn.scss DELETED
@@ -1,28 +0,0 @@
1
- .ha-btn {
2
- background-color: #8c8c8c;
3
- color: #fff;
4
- text-decoration: none;
5
- padding: .7rem 1.3rem;
6
- line-height: 1;
7
- border-radius: .25rem;
8
- text-align: center;
9
- vertical-align: middle;
10
- display: inline-block;
11
- font-size: 14px;
12
- font-weight: bold;
13
- transition: all .3s;
14
-
15
- &:hover,
16
- &:focus {
17
- background-color: #242424;
18
- }
19
-
20
- &--block {
21
- display: block;
22
- }
23
-
24
- &-icon + &-text,
25
- &-text + &-icon {
26
- margin-left: 5px;
27
- }
28
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/dev/sass/_card.scss DELETED
@@ -1,146 +0,0 @@
1
- .ha-card {
2
-
3
- @extend %happyWidgetContainer;
4
-
5
- &-figure {
6
- position: relative;
7
- height: 250px;
8
-
9
- > img {
10
- border-top-left-radius: calc(.5rem - 1px);
11
- border-top-right-radius: calc(.5rem - 1px);
12
- vertical-align: bottom;
13
- height: 100%;
14
- width: 100%;
15
- }
16
- }
17
-
18
- &-body {
19
- padding: 1.5rem;
20
- }
21
-
22
- &-title {
23
- margin-top: 0;
24
- margin-bottom: .75rem;
25
- color: #151515;
26
- font-size: 24px;
27
- }
28
-
29
- &-text {
30
- margin-bottom: 2rem;
31
- color: #616161;
32
- font-size: 16px;
33
- line-height: 1.7;
34
-
35
- > p {
36
- margin-top: 0;
37
- margin-bottom: 0;
38
- }
39
- }
40
-
41
- // Card variation
42
- &--top {
43
- .ha-card-figure {
44
- display: inline-block;
45
- }
46
- }
47
-
48
- &--right,
49
- &--left {
50
- @include widgetContainer {
51
- display: flex;
52
- flex-direction: row;
53
- align-items: center;
54
- }
55
-
56
- .ha-card-figure {
57
- flex: 0 0 50%;
58
- max-width: 50%;
59
- }
60
-
61
- .ha-card-body {
62
- padding: 2.5rem;
63
- flex: 0 0 50%;
64
- max-width: 50%;
65
- }
66
- }
67
-
68
- &--left {
69
- .ha-card-figure > img {
70
- border-radius: calc(.5rem - 1px) 0 0 calc(.5rem - 1px);
71
- }
72
- }
73
-
74
- &--right {
75
- @include widgetContainer {
76
- flex-direction: row-reverse;
77
- text-align: right;
78
- }
79
-
80
- .ha-card-figure > img {
81
- border-radius: 0 calc(.5rem - 1px) calc(.5rem - 1px) 0;
82
- }
83
- }
84
- }
85
-
86
- // Card label
87
- .ha-card .ha-badge {
88
- position: absolute;
89
- }
90
-
91
- .ha-badge {
92
- background-color: #fff;
93
- padding: .475rem 1.1rem;
94
- border-radius: 50px;
95
- font-size: 12px;
96
-
97
- &--top-left {
98
- left: 1rem;
99
- top: 1rem;
100
- }
101
-
102
- &--top-center {
103
- left: 50%;
104
- transform: translateX(-50%);
105
- top: 1rem;
106
- }
107
-
108
- &--top-right {
109
- right: 1rem;
110
- top: 1rem;
111
- }
112
-
113
- &--middle-left {
114
- top: 50%;
115
- transform: translateY(-50%);
116
- left: 1rem;
117
- }
118
-
119
- &--middle-center {
120
- left: 50%;
121
- top: 50%;
122
- transform: translate(-50%,-50%);
123
- }
124
-
125
- &--middle-right {
126
- top: 50%;
127
- transform: translateY(-50%);
128
- right: 1rem;
129
- }
130
-
131
- &--bottom-left {
132
- left: 1rem;
133
- bottom: 1rem;
134
- }
135
-
136
- &--bottom-center {
137
- left: 50%;
138
- transform: translateX(-50%);
139
- bottom: 1rem;
140
- }
141
-
142
- &--bottom-right {
143
- right: 1rem;
144
- bottom: 1rem;
145
- }
146
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/dev/sass/_common.scss DELETED
@@ -1,28 +0,0 @@
1
- .happy-addon {
2
- box-sizing: border-box;
3
- * {
4
- box-sizing: border-box;
5
- }
6
-
7
- img {
8
- max-width: 100%;
9
- height: auto;
10
- object-fit: cover;
11
- }
12
-
13
- p:empty {
14
- display: none;
15
- }
16
- }
17
-
18
- .ha-cf {
19
- &:before,
20
- &:after {
21
- content: " ";
22
- display: table;
23
- }
24
-
25
- &:after {
26
- clear: both;
27
- }
28
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/dev/sass/_dual-btn.scss DELETED
@@ -1,83 +0,0 @@
1
- .ha-dual-btn{
2
- position: relative;
3
- display: inline-block;
4
- &-link {
5
- float: left;
6
- position: relative;
7
- .ha-dual-btn-link-primary{
8
- background: #3266fd;
9
- border: none;
10
- color: #fff
11
- }
12
- .ha-dual-btn-link-secondary{
13
- background: #27374c;
14
- border: none;
15
- color: #fff
16
- }
17
- a{
18
- display: block;
19
- vertical-align: middle;
20
- overflow: hidden;
21
- text-align: center;
22
- position: relative;
23
- transition: border-color ease .5s,background ease .5s,color ease .5s;
24
- font-size: 14px;
25
- font-weight: 400;
26
- line-height: 1.428571429;
27
- color: #7f7f7f;
28
- border: 1px solid #e7e7e7;
29
- background-color: #fff;
30
- padding: 1.2rem 3rem;
31
- text-transform: uppercase;
32
- text-decoration: none;
33
- box-sizing: initial;
34
- border-radius: 50px;
35
- i{
36
- position: relative;
37
- top: 3px;
38
- }
39
- }
40
-
41
- }
42
-
43
- &-link:first-child a{
44
- border-top-right-radius: 0;
45
- border-bottom-right-radius: 0;
46
- border-right: none;
47
- i {
48
- float: left;
49
- padding-right: 1rem;
50
- }
51
- }
52
- &-link:last-child a{
53
- border-top-left-radius: 0;
54
- border-bottom-left-radius: 0;
55
- i {
56
- float: right;
57
- padding-left: 1rem;
58
- }
59
- }
60
-
61
- .ha-middle-text {
62
- display: block;
63
- position: absolute;
64
- top: 50%;
65
- right: 0;
66
- transform: translate(50%,-50%);
67
- height: 30px;
68
- width: 30px;
69
- line-height: 30px;
70
- text-align: center;
71
- background: #fff;
72
- color: #7f7f7f;
73
- box-sizing: content-box;
74
- border-radius: 100%;
75
- font-size: 12px;
76
- //border: 5px solid rgba(255,255,255, .6);
77
- box-shadow: 0 0 0 5px rgba(255,255,255,0.3);
78
- font-weight: 400;
79
- z-index: 12;
80
- transition: border-color ease .5s,background ease .5s,color ease .5s;
81
- text-transform: uppercase;
82
- }
83
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/dev/sass/_gallery-filter.scss DELETED
@@ -1,39 +0,0 @@
1
- .ha-gallery-filter {
2
- list-style: none;
3
- margin-bottom: 2rem;
4
- padding: 0;
5
-
6
- > li {
7
- display: inline-block;
8
- margin-right: 5px;
9
- margin-bottom: 20px;
10
- margin-left: 5px;
11
-
12
- > button {
13
- color: #000;
14
- background-color: transparent;
15
- text-transform: capitalize;
16
- font-size: 16px;
17
- border: 1px solid transparent;
18
- padding: .3rem 1rem;
19
- transition: all .3s;
20
- cursor: pointer;
21
-
22
- &:hover {
23
- color: #b0b0b0;
24
- border-color: #b0b0b0;
25
- }
26
-
27
- &:focus {
28
- outline: 0;
29
- }
30
- }
31
- }
32
-
33
- > .ha-filter-active {
34
- > button {
35
- color: #b0b0b0;
36
- border-color: #b0b0b0;
37
- }
38
- }
39
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/dev/sass/_gradient-heading.scss DELETED
@@ -1,9 +0,0 @@
1
- .ha-gradient-heading {
2
- margin-top: 0;
3
- margin-bottom: 0;
4
-
5
- > a {
6
- color: inherit;
7
- text-decoration: none;
8
- }
9
- }
 
 
 
 
 
 
 
 
 
assets/dev/sass/_icon-box.scss DELETED
@@ -1,48 +0,0 @@
1
- .ha-icon-box {
2
- @extend %happyWidgetContainer;
3
-
4
- @include widgetContainer {
5
- position: relative;
6
- padding: 1.25rem;
7
- }
8
-
9
- &-title {
10
- margin-top: 0;
11
- margin-bottom: 0;
12
- color: #151515;
13
- font-size: 24px;
14
-
15
- transition: color .3s;
16
- }
17
-
18
- &-icon {
19
- display: inline-block;
20
- margin-bottom: 1rem;
21
- font-size: 3rem;
22
- text-align: center;
23
- color: #151515;
24
-
25
- transition: transform .3s, border .3s, background .3s, color .3s;
26
-
27
- > i {
28
- width: 1em;
29
- height: 1em;
30
- display: block;
31
-
32
- transition: transform .3s;
33
- }
34
- }
35
-
36
- &-link {
37
- display: block;
38
- text-decoration: none;
39
- color: transparent;
40
- }
41
-
42
- .ha-badge {
43
- position: absolute;
44
- background-color: $secondary-color;
45
- color: #fff;
46
- z-index: 9999;
47
- }
48
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/dev/sass/_image-comparison.scss DELETED
@@ -1,9 +0,0 @@
1
- .ha-image-compare {
2
-
3
- @extend %happyWidgetContainer;
4
-
5
- .twentytwenty-container,
6
- .twentytwenty-wrapper {
7
- border-radius: inherit;
8
- }
9
- }
 
 
 
 
 
 
 
 
 
assets/dev/sass/_image-grid.scss DELETED
@@ -1,184 +0,0 @@
1
- .ha-image-grid {
2
- &-item {
3
- float: left;
4
- }
5
-
6
- &-link {
7
- display: block;
8
- text-decoration: none;
9
- position: relative;
10
- overflow: hidden;
11
- margin: 10px;
12
-
13
- &:focus {
14
- outline: none;
15
- }
16
-
17
- img {
18
- vertical-align: bottom;
19
- transition: transform 0.25s linear;
20
- }
21
-
22
- &:hover {
23
- img {
24
- transform: scale(1.25);
25
- }
26
-
27
- .ha-image-grid {
28
- &-overlay {
29
- opacity: 1;
30
- }
31
- &-content {
32
- opacity: 1;
33
- &:before {
34
- width: 80px;
35
- }
36
- }
37
- }
38
- }
39
- }
40
-
41
- &-overlay {
42
- position: absolute;
43
- top: 0;
44
- right: 0;
45
- bottom: 0;
46
- left: 0;
47
- opacity: 0;
48
- background-color: rgba(0, 0, 0, .8);
49
- padding: 30px;
50
- transition: opacity .5s;
51
- }
52
-
53
- &-content {
54
- position: absolute;
55
- transition: opacity .5s;
56
- color: #fff;
57
- font-size: 16px;
58
- width: 100%;
59
- opacity: 0;
60
-
61
- &:before {
62
- content: '';
63
- background: #fe413b;
64
- width: 35px;
65
- height: 1px;
66
- position: absolute;
67
- top: -15px;
68
- transition: all .3s;
69
- }
70
-
71
- &--topleft {
72
- top: 2.9rem;
73
- left: 2rem;
74
- text-align: left;
75
- &:before {
76
- left: 0;
77
- }
78
- }
79
-
80
- &--topcenter {
81
- top: 2.9rem;
82
- left: 50%;
83
- transform: translateX(-50%);
84
- text-align: center;
85
- &:before {
86
- left: 50%;
87
- transform: translateX(-50%);
88
- }
89
- }
90
-
91
- &--topright {
92
- top: 2.9rem;
93
- right: 2rem;
94
- text-align: right;
95
- &:before {
96
- right: 0;
97
- }
98
- }
99
-
100
- &--bottomleft {
101
- bottom: 2rem;
102
- left: 2rem;
103
- text-align: left;
104
- &:before {
105
- left: 0;
106
- }
107
- }
108
-
109
- &--bottomcenter {
110
- bottom: 2rem;
111
- left: 50%;
112
- transform: translateX(-50%);
113
- text-align: center;
114
- &:before {
115
- left: 50%;
116
- transform: translateX(-50%);
117
- }
118
- }
119
-
120
- &--bottomright {
121
- bottom: 2rem;
122
- right: 2rem;
123
- text-align: right;
124
- &:before {
125
- right: 0;
126
- }
127
- }
128
-
129
- &--middleleft {
130
- top: 50%;
131
- transform: translateY(-50%);
132
- left: 2rem;
133
- text-align: left;
134
- &:before {
135
- left: 0;
136
- }
137
- }
138
-
139
- &--middlecenter {
140
- top: 50%;
141
- transform: translateX(-50%);
142
- left: 50%;
143
- text-align: center;
144
- &:before {
145
- left: 50%;
146
- transform: translateX(-50%);
147
- }
148
- }
149
-
150
- &--middleright {
151
- top: 50%;
152
- transform: translateY(-50%);
153
- right: 2rem;
154
- text-align: right;
155
- &:before {
156
- right: 0;
157
- }
158
- }
159
- }
160
-
161
- &--col-2 {
162
- .ha-image-grid-item {
163
- width: 50%;
164
- }
165
- }
166
-
167
- &--col-3 {
168
- .ha-image-grid-item {
169
- width: 33.33%;
170
- }
171
- }
172
-
173
- &--col-4 {
174
- .ha-image-grid-item {
175
- width: 25%;
176
- }
177
- }
178
-
179
- &--col-5 {
180
- .ha-image-grid-item {
181
- width: 20%;
182
- }
183
- }
184
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/dev/sass/_infobox.scss DELETED
@@ -1,48 +0,0 @@
1
- .ha-infobox {
2
- @extend %happyWidgetContainer;
3
-
4
- @include widgetContainer {
5
- padding: 1.5rem;
6
- }
7
-
8
- &-title {
9
- margin-top: 0;
10
- margin-bottom: 1rem;
11
- color: #151515;
12
- font-size: 24px;
13
- }
14
-
15
- &-figure {
16
- display: inline-block;
17
- margin: 0 0 1.5rem !important;
18
-
19
- &--icon {
20
- font-size: 3rem;
21
- text-align: center;
22
- }
23
-
24
- > i {
25
- width: 1em;
26
- height: 1em;
27
- position: relative;
28
- display: block;
29
- }
30
-
31
- > img {
32
- width: 100%;
33
- height: 100%;
34
- vertical-align: bottom;
35
- }
36
- }
37
-
38
- &-text {
39
- & + .ha-link {
40
- margin-top: 1rem;
41
- }
42
-
43
- > p {
44
- margin-top: 0;
45
- margin-bottom: 0;
46
- }
47
- }
48
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/dev/sass/_justified-gallery.scss DELETED
@@ -1,48 +0,0 @@
1
- .ha-justified-gallery-item {
2
- transition: all .3s;
3
- border-radius: 6px;
4
-
5
- > img {
6
- width: 100%;
7
- transition: all 0.25s !important;
8
- }
9
-
10
- &:hover {
11
- > img {
12
- transform: scale(1.25);
13
- }
14
- }
15
- }
16
-
17
- //modified justified gallery css
18
- .justified-gallery > a > .caption,
19
- .justified-gallery > div > .caption,
20
- .justified-gallery > figure > .caption{
21
- padding: 10px;
22
- }
23
-
24
- .justified-gallery > a > .caption,
25
- .justified-gallery > div > .caption,
26
- .justified-gallery > figure > .caption {
27
- bottom: -100px !important;
28
- transition: all 0.25s !important;
29
- animation: haSmoothReveal .3s forwards;
30
- }
31
-
32
- .justified-gallery > a > .caption.caption-visible,
33
- .justified-gallery > div > .caption.caption-visible,
34
- .justified-gallery > figure > .caption.caption-visible {
35
- bottom: 0 !important;
36
- }
37
-
38
- @keyframes haSmoothReveal {
39
- 0% {
40
- -webkit-transform: translateY(100px);
41
- transform: translateY(100px)
42
- }
43
-
44
- to {
45
- -webkit-transform: translateY(0);
46
- transform: translateY(0)
47
- }
48
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/dev/sass/_link.scss DELETED
@@ -1,23 +0,0 @@
1
- .ha-link {
2
- display: inline-block;
3
- position: relative;
4
- text-decoration: none;
5
- color: #3ca6ff;
6
- margin-right: 15px;
7
-
8
- &:after {
9
- font-family: "FontAwesome";
10
- font-size: 15px;
11
- position: absolute;
12
- top: 2px;
13
- right: -15px;
14
- content: "\f105";
15
- transition: all .3s;
16
- }
17
-
18
- &:hover {
19
- &:after {
20
- right: -25px;
21
- }
22
- }
23
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/dev/sass/_logo-grid.scss DELETED
@@ -1,97 +0,0 @@
1
- .ha-logo-grid {
2
- &-wrapper {
3
- @extend .ha-cf;
4
- }
5
-
6
- &-item {
7
- height: 180px;
8
- float: left;
9
- overflow: hidden;
10
- padding: 30px;
11
- border-color: #e7e7e7;
12
- }
13
-
14
- &-img {
15
- object-fit: cover;
16
- width: 100%;
17
- }
18
-
19
- @for $i from 2 through 6 {
20
- &--col-#{$i} > &-item {
21
- width: calc(100% / #{$i});
22
- }
23
- }
24
-
25
- // TicTacToe style
26
- &--tictactoe &-item {
27
- border-width: 2px 2px 0 0;
28
- border-style: solid;
29
- }
30
-
31
- @for $i from 2 through 6 {
32
- &--tictactoe #{&}--col-#{$i} > &-item {
33
- &:nth-child(#{$i}n) {
34
- border-right-width: 0 !important;
35
- }
36
-
37
- &:nth-child(-n + #{$i}) {
38
- border-top-width: 0 !important;
39
- }
40
- }
41
- }
42
-
43
- // Border style
44
- &--border {
45
- border-radius: .5rem;
46
- }
47
-
48
- &--border &-item {
49
- border-width: 0 2px 2px 0;
50
- border-style: solid;
51
-
52
- &:first-child {
53
- border-top-left-radius: 10px;
54
- }
55
-
56
- &:last-child {
57
- border-bottom-right-radius: 10px;
58
- }
59
- }
60
-
61
- @for $i from 2 through 6 {
62
- &--border #{&}--col-#{$i} > &-item {
63
- &:nth-child(-n + #{$i}) {
64
- border-top-width: 3px;
65
- }
66
-
67
- &:nth-child(#{$i}n + 1) {
68
- border-left-width: 3px;
69
- }
70
-
71
- &:nth-child(#{$i}) {
72
- border-top-right-radius: 10px;
73
- }
74
-
75
- &:nth-last-child(#{$i}) {
76
- border-bottom-left-radius: 10px;
77
- }
78
- }
79
- }
80
-
81
- &--box &-wrapper {
82
- margin: -.5rem;
83
- }
84
-
85
- &--box &-item {
86
- margin: .5rem;
87
- border-radius: .5rem;
88
- border-width: 2px;
89
- border-style: solid;
90
- }
91
-
92
- @for $i from 2 through 6 {
93
- &--box #{&}--col-#{$i} > &-item {
94
- width: calc((100% / #{$i}) - 1rem);
95
- }
96
- }
97
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/dev/sass/_member.scss DELETED
@@ -1,61 +0,0 @@
1
- .ha-member {
2
- @extend %happyWidgetContainer;
3
-
4
- @include widgetContainer {
5
- padding: 1.25rem;
6
- }
7
-
8
- &-figure {
9
- display: inline-block;
10
- margin: 0 0 1.5rem !important;
11
-
12
- img {
13
- width: 100%;
14
- height: 100%;
15
- vertical-align: bottom;
16
- }
17
- }
18
-
19
- &-name {
20
- margin-top: 0;
21
- margin-bottom: .5rem;
22
- color: #151515;
23
- font-size: 18px;
24
- }
25
-
26
- &-position {
27
- color: #7f7f7f;
28
- font-size: 14px;
29
- margin-bottom: 1.5rem;
30
- }
31
-
32
- &-bio {
33
- font-size: 14px;
34
- line-height: 1.6;
35
- margin-bottom: 1.5rem;
36
- }
37
-
38
- &-links {
39
- > a {
40
- color: #9895ad;
41
- transition: all .2s;
42
- text-align: center;
43
- display: inline-block;
44
- line-height: 1;
45
-
46
- &:hover,
47
- &:focus {
48
- color: #222;
49
- }
50
-
51
- > i {
52
- width: 1em;
53
- height: 1em;
54
- }
55
-
56
- &:not(:last-child) {
57
- margin-right: .3rem;
58
- }
59
- }
60
- }
61
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/dev/sass/_mixins.scss DELETED
@@ -1,15 +0,0 @@
1
- @mixin widgetContainer {
2
- > .elementor-widget-container {
3
- @content;
4
- }
5
- }
6
-
7
- %happyWidgetContainer {
8
- @include widgetContainer {
9
- background-color: #fff;
10
- box-shadow: 0 0.2rem 2.8rem rgba(36, 36, 36, .1);
11
- word-wrap: break-word;
12
- overflow-wrap: break-word;
13
- border-radius: .5rem;
14
- }
15
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/dev/sass/_review.scss DELETED
@@ -1,138 +0,0 @@
1
- .ha-review {
2
- @extend %happyWidgetContainer;
3
-
4
- &-header {
5
- margin-top: 1.5rem;
6
- }
7
-
8
- &-figure {
9
- margin: 0;
10
-
11
- > img {
12
- border-radius: 50%;
13
- vertical-align: bottom;
14
- height: 100%;
15
- width: 100%;
16
- }
17
- }
18
-
19
- &-reviewer {
20
- margin-top: 0;
21
- margin-bottom: .3rem;
22
- color: #151515;
23
- font-size: 18px;
24
- }
25
-
26
- &-position {
27
- color: #7f7f7f;
28
- font-size: 15px;
29
- margin-bottom: .5rem;
30
- }
31
-
32
- &-ratting {
33
- display: inline-block;
34
- font-size: 12px;
35
- line-height: 1;
36
- }
37
-
38
- &-ratting--num {
39
- background-color: #287dfe;
40
- color: #fff;
41
- padding: .25em .66em;
42
- border-radius: 2.5em;
43
- }
44
-
45
- &-ratting--star {
46
- display: inline-block;
47
- color: #ffbf36;
48
- font-family: "Fontawesome";
49
-
50
- > span {
51
- overflow: hidden;
52
- position: relative;
53
- height: 1em;
54
- }
55
-
56
- span > span {
57
- padding-top: 1.5em;
58
- overflow: hidden;
59
- top: 0;
60
- left: 0;
61
- position: absolute;
62
- }
63
-
64
- span &:before,
65
- span > span:before {
66
- top: 0;
67
- left: 0;
68
- position: absolute;
69
- }
70
-
71
- span:before {
72
- content: "\f006\f006\f006\f006\f006";
73
- }
74
-
75
- span > span:before {
76
- content: "\f005\f005\f005\f005\f005";
77
- }
78
- }
79
-
80
- &-desc {
81
- margin-top: 1.5rem;
82
- font-size: 16px;
83
- line-height: 1.6;
84
-
85
- p {
86
- margin: 0;
87
- }
88
- }
89
-
90
- &--top {
91
- @include widgetContainer {
92
- padding: 2rem;
93
- }
94
-
95
- .ha-review-figure {
96
- display: inline-block;
97
- max-width: 70px;
98
- height: 70px;
99
- }
100
- }
101
-
102
- &--left,
103
- &--right {
104
- @include widgetContainer {
105
- display: flex;
106
- flex-direction: row;
107
- padding-left: 2rem;
108
- align-items: center;
109
- }
110
-
111
- .ha-review {
112
- &-figure {
113
- flex: 0 0 150px;
114
- max-width: 150px;
115
- height: 150px;
116
- }
117
-
118
- &-body {
119
- flex: 0 0 calc(100% - 150px);
120
- max-width: calc(100% - 150px);
121
- padding: 2rem;
122
-
123
- > :first-child {
124
- margin-top: 0;
125
- }
126
- }
127
- }
128
- }
129
-
130
- &--right {
131
- @include widgetContainer {
132
- flex-direction: row-reverse;
133
- padding-right: 2rem;
134
- padding-left: 0;
135
- text-align: right;
136
- }
137
- }
138
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/dev/sass/_skills.scss DELETED
@@ -1,69 +0,0 @@
1
- .ha-skills {
2
- @include widgetContainer {
3
- padding-top: 1px;
4
- }
5
- }
6
-
7
- .ha-skill {
8
- display: flex;
9
- font-size: .75rem;
10
- background-color: #e9ecef;
11
-
12
- &--outside,
13
- &--inside {
14
- .ha-skill-info {
15
- font-size: 14px;
16
- text-align: left;
17
- }
18
-
19
- .ha-skill-level-text {
20
- float: right;
21
- }
22
- }
23
-
24
- &--outside {
25
- height: 2px;
26
-
27
- .ha-skill-level {
28
- position: relative;
29
- }
30
-
31
- .ha-skill-info {
32
- position: absolute;
33
- width: 100%;
34
- top: -25px;
35
- color: #242424;
36
- }
37
- }
38
-
39
- &--inside {
40
- height: 30px;
41
- overflow: hidden;
42
- border-radius: .3rem;
43
-
44
- .ha-skill-info {
45
- padding-right: 1rem;
46
- padding-left: 1rem;
47
- color: #fff;
48
- }
49
- }
50
-
51
- &-level {
52
- display: flex;
53
- flex-direction: column;
54
- justify-content: center;
55
- color: #fff;
56
- text-align: center;
57
- white-space: nowrap;
58
- background-color: #007bff;
59
- transition: width .6s ease;
60
- }
61
-
62
- &--outside {
63
- margin-top: 40px;
64
- }
65
-
66
- &--inside:not(:first-child) {
67
- margin-top: 20px;
68
- }
69
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/dev/sass/_slider-carousel.scss DELETED
@@ -1,110 +0,0 @@
1
- .ha-slider,
2
- .ha-carousel {
3
- .slick-prev,
4
- .slick-next {
5
- color: #8c8c8c;
6
- background-color: rgba(255,255,255,.8);
7
- border: 1px solid rgba(255,255,255,.8);
8
- font-size: 12px;
9
- text-align: center;
10
- border-radius: 50%;
11
- z-index: 999;
12
- opacity: 1;
13
- padding: 0;
14
-
15
- &:hover,
16
- &:focus {
17
- background-color: white;
18
- }
19
-
20
- &:before {
21
- content: '';
22
- }
23
- }
24
-
25
- .slick-disabled {
26
- opacity: .7;
27
- }
28
-
29
- .slick-prev {
30
- left: 25px;
31
- }
32
-
33
- .slick-next {
34
- right: 25px;
35
- }
36
-
37
- .slick-dots {
38
- bottom: -40px;
39
-
40
- li {
41
- margin-left: 2px;
42
- margin-right: 2px;
43
- }
44
-
45
- li button:before {
46
- color: #1b1b1b;
47
- opacity: 1;
48
- }
49
-
50
- li button:hover:before,
51
- .slick-active button:before {
52
- transform: scale(1.5);
53
- }
54
- }
55
- }
56
-
57
- .ha-carousel {
58
- .slick-prev,
59
- .slick-next {
60
- width: 40px;
61
- height: 40px;
62
- line-height: 40px;
63
- }
64
- }
65
-
66
- .ha-slider {
67
- .slick-prev,
68
- .slick-next {
69
- width: 50px;
70
- height: 50px;
71
- line-height: 50px;
72
- }
73
- }
74
-
75
- .ha-carousel {
76
- .slick-slide > div {
77
- padding-left: 5px;
78
- padding-right: 5px;
79
- }
80
- .slick-slide > div + div {
81
- padding-top: 10px;
82
- }
83
- }
84
-
85
- .ha-slider {
86
- &-item {
87
- position: relative;
88
- vertical-align: bottom;
89
- }
90
-
91
- &-content {
92
- position: absolute;
93
- bottom: 0;
94
- padding: 1.5rem;
95
- background: linear-gradient(rgba(0,0,0,0), rgba(0,0,0,0.3));
96
- width: 100%;
97
- }
98
-
99
- &-title {
100
- font-size: 20px;
101
- margin-top: 0;
102
- margin-bottom: .2rem;
103
- color: #fff;
104
- }
105
-
106
- &-subtitle {
107
- margin: 0;
108
- color: #fff;
109
- }
110
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/dev/sass/_testimonial.scss DELETED
@@ -1,89 +0,0 @@
1
- .ha-testimonial{
2
- &:before {
3
- visibility: hidden;
4
- height: 0;
5
- display: block;
6
- clear: both;
7
- }
8
- &-info{
9
- background-color: #fff;
10
- box-shadow: 0 0.2rem 2.8rem rgba(36, 36, 36, .1);
11
- border-radius: 6px;
12
- line-height: 1.6rem;
13
- }
14
-
15
- &-thumb{
16
- display: inline-block;
17
- width: 65px;
18
- height: auto;
19
- img{
20
- width: 100%;
21
- height: auto;
22
- border-radius: 50%;
23
- }
24
- }
25
- &-author{
26
- font-size: 18px;
27
- font-weight: bold;
28
- color: #242424;
29
- }
30
- &-designation{
31
- font-size: 16px;
32
- color: #8c8c8c;
33
- }
34
- }
35
-
36
- // left align
37
- .ha-position--left {
38
- .ha-testimonial-media{
39
- display: block;
40
- text-align: left;
41
- }
42
- .ha-testimonial-media-body{
43
- flex: 1;
44
- }
45
- .ha-testimonial-thumb{
46
- margin-right: 1rem;
47
- }
48
- .ha-testimonial-info {
49
- text-align: left;
50
- }
51
- }
52
-
53
- .ha-position--center {
54
- .ha-testimonial-media{
55
- display: block;
56
- text-align: center;
57
- }
58
- .ha-testimonial-thumb{
59
- margin-right: 0;
60
- }
61
- .ha-testimonial-media-body{
62
- align-self: center;
63
- }
64
- .ha-testimonial-info {
65
- text-align: center;
66
- }
67
- }
68
-
69
-
70
- // right align
71
-
72
- .ha-position--right {
73
- .ha-testimonial-media{
74
- display: block;
75
- text-align: right;
76
- }
77
- .ha-testimonial-media-body{
78
- flex: 1;
79
- }
80
- .ha-testimonial-thumb{
81
- margin-left: 1rem;
82
- }
83
- .ha-testimonial-media-body{
84
- align-self: center;
85
- }
86
- .ha-testimonial-info {
87
- text-align: right;
88
- }
89
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/dev/sass/_variables.scss DELETED
@@ -1,2 +0,0 @@
1
- $primary-color: #562dd4;
2
- $secondary-color: #e2498a;
 
 
assets/dev/sass/main.scss DELETED
@@ -1,21 +0,0 @@
1
- @import "variables";
2
-
3
- @import "mixins";
4
- @import "common";
5
- @import "btn";
6
- @import "link";
7
- @import "card";
8
- @import "infobox";
9
- @import "icon-box";
10
- @import "member";
11
- @import "review";
12
- @import "image-comparison";
13
- //@import "gallery-filter";
14
- //@import "image-grid";
15
- //@import "justified-gallery";
16
- //@import "slider-carousel";
17
- @import "skills";
18
- @import "gradient-heading";
19
- //@import "logo-grid";
20
- //@import "dual-btn";
21
- //@import "testimonial";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/vendor/twentytwenty/.gitignore DELETED
@@ -1,5 +0,0 @@
1
- *.DS_Store
2
- .sass-cache/*
3
- components/*
4
- *.old
5
- node_modules
 
 
 
 
 
base.php CHANGED
@@ -10,7 +10,7 @@ defined( 'ABSPATH' ) || die();
10
 
11
  class Base {
12
 
13
- const VERSION = '1.0.0';
14
 
15
  const MINIMUM_ELEMENTOR_VERSION = '2.0.0';
16
 
10
 
11
  class Base {
12
 
13
+ const VERSION = '1.0.2';
14
 
15
  const MINIMUM_ELEMENTOR_VERSION = '2.0.0';
16
 
base/widget-base.php CHANGED
@@ -83,32 +83,6 @@ abstract class Base extends Widget_Base {
83
  ]
84
  );
85
 
86
- $this->add_control(
87
- '_design_notes',
88
- [
89
- 'type' => Controls_Manager::RAW_HTML,
90
- 'raw' => sprintf(
91
- __( 'We know how bad you feel when you see the same design over and over again across the web. You don\'t have to feel that way anymore. %sJoin us and experience the exception.%s', 'plugin-name' ),
92
- '<a href="https://fb.me/obiPlabon" target="_blank">',
93
- '</a>'
94
- ),
95
- 'content_classes' => 'elementor-panel-alert elementor-panel-alert-info',
96
- ]
97
- );
98
-
99
- if ( empty( $this->get_skins() ) ) {
100
- $this->add_control(
101
- '_skin',
102
- [
103
- 'label' => __( 'Skin', 'happy_addons' ),
104
- 'type' => 'select',
105
- 'options' => ['' => __( 'Default', 'happy_addons' )],
106
- 'default' => '',
107
- 'render_type' => 'none'
108
- ]
109
- );
110
- }
111
-
112
  $this->end_controls_section();
113
  }
114
 
83
  ]
84
  );
85
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
  $this->end_controls_section();
87
  }
88
 
classes/asset-manager.php CHANGED
@@ -35,7 +35,7 @@ class Asset_Manager {
35
  * Enqueue frontend scripts
36
  */
37
  public function enqueue_frontend_scripts() {
38
- $suffix = ha_is_script_debug_enabled() ? '.min.' : '.';
39
 
40
  wp_enqueue_style(
41
  'happy-icon',
@@ -115,6 +115,14 @@ class Asset_Manager {
115
  true
116
  );
117
 
 
 
 
 
 
 
 
 
118
  }
119
 
120
  public function enqueue_preview_style() {
35
  * Enqueue frontend scripts
36
  */
37
  public function enqueue_frontend_scripts() {
38
+ $suffix = ha_is_script_debug_enabled() ? '.' : '.';
39
 
40
  wp_enqueue_style(
41
  'happy-icon',
115
  true
116
  );
117
 
118
+ wp_localize_script(
119
+ 'happy-elementor-addons-admin',
120
+ 'happy',
121
+ [
122
+ 'ajax_url' => admin_url( 'admin-ajax.php' ),
123
+ 'nonce' => wp_create_nonce( 'ha_get_preset' ),
124
+ ]
125
+ );
126
  }
127
 
128
  public function enqueue_preview_style() {
classes/widget-manager.php CHANGED
@@ -396,6 +396,7 @@ class Widget_Manager {
396
  'skills',
397
  'gradient-heading',
398
  'wpform',
 
399
  'calderaform',
400
  'weform',
401
  ];
396
  'skills',
397
  'gradient-heading',
398
  'wpform',
399
+ 'ninjaform',
400
  'calderaform',
401
  'weform',
402
  ];
plugin.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Happy Elementor Addons
4
  * Plugin URI: http://happymonster.me/plugins/happy-addons-elementor
5
  * Description: Best Addons for Elementor
6
- * Version: 1.0.1
7
  * Author: HappyMonster
8
  * Author URI: http://happymonster.me/
9
  * License: GPLv2
3
  * Plugin Name: Happy Elementor Addons
4
  * Plugin URI: http://happymonster.me/plugins/happy-addons-elementor
5
  * Description: Best Addons for Elementor
6
+ * Version: 1.0.2
7
  * Author: HappyMonster
8
  * Author URI: http://happymonster.me/
9
  * License: GPLv2
readme.txt CHANGED
@@ -1,6 +1,6 @@
1
  === Happy Elementor Addons ===
2
  Plugin Name: Happy Elementor Addons
3
- Version: 1.0.1
4
  Author: HappyMonster
5
  Author URI: http://happymonster.me/
6
  Contributors: thehappymonster, happyaddons, hasinhayder, obiplabon, sourav926
@@ -8,7 +8,7 @@ Tags: elementor, card, blurb, contact form 7, icon box, widget, page builder
8
  Requires at least: 4.5
9
  Tested up to: 5.2.1
10
  Requires PHP: 5.4
11
- Stable tag: 1.0.1
12
  License: GPLv2
13
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
14
 
@@ -16,22 +16,36 @@ Most advanced, highly customizable, flexible and easy-to-use widgets for Element
16
 
17
  == Description ==
18
 
19
- Most advanced, highly customizable, flexible and easy-to-use FREE widgets for Elementor with lots of options and possibilities.
20
-
21
- ### Included Free Widgets
22
-
23
- 1. Card
24
- 2. Gradient Heading
25
- 3. Info Box
26
- 4. Icon Box
27
- 5. Image Compare
28
- 6. Member
29
- 7. Review
30
- 8. Skill Bars
31
- 9. Contact Form 7
32
- 10. Caldera Form
33
- 11. We Forms
34
- 12. WP Forms
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
 
36
  == Installation ==
37
 
@@ -50,6 +64,12 @@ It's really easy and super simple to install **Happy Elementor Addons** plugin b
50
 
51
  == Changelog ==
52
 
 
 
 
 
 
 
53
  = 1.0.1 =
54
 
55
  * Fix: Some minor issues
@@ -68,7 +88,7 @@ It's really easy and super simple to install **Happy Elementor Addons** plugin b
68
  * New: Caldera Form Widget
69
  * New: We Forms Widget
70
  * New: WP Forms Widget
71
- * New: Surprising extension
72
  * Update: Plugin structure
73
  * Update: Widgets CSS
74
  * Fix: Card layout issue
1
  === Happy Elementor Addons ===
2
  Plugin Name: Happy Elementor Addons
3
+ Version: 1.0.2
4
  Author: HappyMonster
5
  Author URI: http://happymonster.me/
6
  Contributors: thehappymonster, happyaddons, hasinhayder, obiplabon, sourav926
8
  Requires at least: 4.5
9
  Tested up to: 5.2.1
10
  Requires PHP: 5.4
11
+ Stable tag: 1.0.2
12
  License: GPLv2
13
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
14
 
16
 
17
  == Description ==
18
 
19
+ [HappyAddons](https://happyaddons.com/) is a collection of slick, powerful widgets that works seamlessly with Elementor page builder. It’s trendy look with detail customization features allows to create extraordinary designs instantly. [HappyAddons](https://happyaddons.com/) is free, rapidly growing and comes with great support.
20
+
21
+ ### Check The Demos
22
+
23
+ 1. [Card](https://happyaddons.com/elementor-card-widget-demo/)
24
+ 2. [Gradient Heading](https://happyaddons.com/elementor-gradient-heading-widget-demo/)
25
+ 3. [Info Box](https://happyaddons.com/elementor-info-box-widget-demo/)
26
+ 4. [Icon Box](https://happyaddons.com/elementor-icon-box-widget-demo/)
27
+ 5. [Image Compare](https://happyaddons.com/elementor-image-compare-widget-demo/)
28
+ 6. [Member](https://happyaddons.com/elementor-team-member-widget-demo/)
29
+ 7. [Review](https://happyaddons.com/elementor-review-widget-demo/)
30
+ 8. [Skill Bars](https://happyaddons.com/elementor-skill-bars-widget-demo/)
31
+ 9. [Contact Form 7](https://happyaddons.com/elementor-contact-form-7-widget-demo/)
32
+ 10. [Caldera Form](https://happyaddons.com/elementor-caldera-forms-widget-demo/)
33
+ 11. [We Forms](https://happyaddons.com/elementor-we-forms-widget-demo/)
34
+ 12. [Ninja Forms](https://happyaddons.com/elementor-ninja-form-widget-demo/)
35
+
36
+ ### Features
37
+
38
+ The widgets in [HappyAddons](https://happyaddons.com/) are well tested on different devices to give you the best responsive output. Our code doesn’t stink and we don’t leave you blind folded when you need support from us. Before jumping into the details, let’s have a look at the features at a glance
39
+
40
+ * Just because it’s free, we don’t compromise with the quality at all. You’re still getting the same carefully crafted collection of widgets that you get elsewhere which comes for a price
41
+ * Responsive and tested on different screens to ensure it doesn’t break
42
+ * Compatible with almost every themes out there. In case of any exception, let us know and we will fix it for you
43
+ * Comes with demo designs so that you can quickly copy the styles without spending too much to design everything from scratch
44
+ * Ever growing, which means that we’re constantly adding new features and widgets to this collection every week
45
+ * Comes with excellent support, and that is sweet. If you don’t understand a feature, or fail to give it a desired look which was already demonstrated in a demo, or it’s not working as expected - we got your back. Just drop us a line and we will do our best to help you figure a way out.
46
+ * Lightweight and fast. The widgets are carefully designed to remain fat-less and bloat free. We understand how important it is to serve your page faster and we took extra care for that
47
+ * Comes with cohesive elements, which means that these widgets are so customizable that you can easily fit them in your existing designs, and they work nicely together with each other without making anything look bad.
48
+ * [HappyAddons](https://happyaddons.com/) brings you some powerful features to the built-in motion effects section that helps you to animate and rotate objects on their x-axis, y-axis, and z-axis like never seen before, and brings lovely effects to help your websites stand out from others.
49
 
50
  == Installation ==
51
 
64
 
65
  == Changelog ==
66
 
67
+ = 1.0.2 =
68
+
69
+ * Update: Floating effects settings
70
+ * Update: Info box link updated to button
71
+ * Fix: Some minor styling issues
72
+
73
  = 1.0.1 =
74
 
75
  * Fix: Some minor issues
88
  * New: Caldera Form Widget
89
  * New: We Forms Widget
90
  * New: WP Forms Widget
91
+ * New: Floating effects (check motion effect panel)
92
  * Update: Plugin structure
93
  * Update: Widgets CSS
94
  * Fix: Card layout issue
widgets/card/widget.php CHANGED
@@ -280,11 +280,6 @@ class Card extends Base {
280
  [
281
  'label' => __( 'Icon Spacing', 'happy_addons' ),
282
  'type' => Controls_Manager::SLIDER,
283
- 'range' => [
284
- 'px' => [
285
- 'max' => 50,
286
- ],
287
- ],
288
  'condition' => [
289
  'button_icon!' => '',
290
  ],
@@ -912,7 +907,7 @@ class Card extends Base {
912
  $this->add_render_attribute( 'button', 'target', '_blank' );
913
  }
914
  if ( ! empty( $settings['button_link']['nofollow'] ) ) {
915
- $this->set_render_attribute( 'button', 'rel', 'nofollow' );
916
  }
917
  ?>
918
 
@@ -1044,8 +1039,7 @@ class Card extends Base {
1044
  view.addRenderAttribute( 'button', 'class', 'ha-btn--icon-after' );
1045
  var button_after = '<i class="ha-btn-icon ' + settings.button_icon + '"></i>';
1046
  var button_before = '<span ' + view.getRenderAttributeString( 'button_text' ) + '>' + settings.button_text + '</span>';
1047
- }
1048
- #>
1049
  <a {{{ view.getRenderAttributeString( 'button' ) }}}>{{{ button_before }}} {{{ button_after }}}</a>
1050
  <# } #>
1051
  </div>
280
  [
281
  'label' => __( 'Icon Spacing', 'happy_addons' ),
282
  'type' => Controls_Manager::SLIDER,
 
 
 
 
 
283
  'condition' => [
284
  'button_icon!' => '',
285
  ],
907
  $this->add_render_attribute( 'button', 'target', '_blank' );
908
  }
909
  if ( ! empty( $settings['button_link']['nofollow'] ) ) {
910
+ $this->add_render_attribute( 'button', 'rel', 'nofollow' );
911
  }
912
  ?>
913
 
1039
  view.addRenderAttribute( 'button', 'class', 'ha-btn--icon-after' );
1040
  var button_after = '<i class="ha-btn-icon ' + settings.button_icon + '"></i>';
1041
  var button_before = '<span ' + view.getRenderAttributeString( 'button_text' ) + '>' + settings.button_text + '</span>';
1042
+ } #>
 
1043
  <a {{{ view.getRenderAttributeString( 'button' ) }}}>{{{ button_before }}} {{{ button_after }}}</a>
1044
  <# } #>
1045
  </div>
widgets/gradient-heading/widget.php CHANGED
@@ -37,7 +37,7 @@ class Gradient_Heading extends Base {
37
  * @return string Widget icon.
38
  */
39
  public function get_icon() {
40
- return 'hm hm-spark';
41
  }
42
 
43
  public function get_keywords() {
37
  * @return string Widget icon.
38
  */
39
  public function get_icon() {
40
+ return 'hm hm-drag';
41
  }
42
 
43
  public function get_keywords() {
widgets/infobox/widget.php CHANGED
@@ -228,9 +228,9 @@ class InfoBox extends Base {
228
  $this->end_controls_section();
229
 
230
  $this->start_controls_section(
231
- '_section_link',
232
  [
233
- 'label' => __( 'Link', 'happy_addons' ),
234
  'tab' => Controls_Manager::TAB_CONTENT,
235
  ]
236
  );
@@ -240,22 +240,73 @@ class InfoBox extends Base {
240
  [
241
  'label' => __( 'Text', 'happy_addons' ),
242
  'type' => Controls_Manager::TEXT,
 
 
243
  'label_block' => true,
244
- 'default' => __( 'Link Text', 'happy_addons' ),
245
- 'placeholder' => __( 'Type Link Text', 'happy_addons' ),
246
  ]
247
  );
248
 
249
  $this->add_control(
250
  'button_link',
251
  [
252
- 'label' => __( 'URL', 'happy_addons' ),
253
  'type' => Controls_Manager::URL,
254
- 'label_block' => true,
255
  'placeholder' => __( 'https://example.com/', 'happy_addons' ),
256
  ]
257
  );
258
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
259
  $this->end_controls_section();
260
  }
261
 
@@ -646,9 +697,9 @@ class InfoBox extends Base {
646
  $this->end_controls_section();
647
 
648
  $this->start_controls_section(
649
- '_section_link_style',
650
  [
651
- 'label' => __( 'Link', 'happy_addons' ),
652
  'tab' => Controls_Manager::TAB_STYLE,
653
  ]
654
  );
@@ -660,7 +711,7 @@ class InfoBox extends Base {
660
  'type' => Controls_Manager::DIMENSIONS,
661
  'size_units' => [ 'px', 'em', '%' ],
662
  'selectors' => [
663
- '{{WRAPPER}} .ha-link' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
664
  ],
665
  ]
666
  );
@@ -669,15 +720,51 @@ class InfoBox extends Base {
669
  Group_Control_Typography::get_type(),
670
  [
671
  'name' => 'btn_typography',
672
- 'selector' => '{{WRAPPER}} .ha-link',
673
  'scheme' => Scheme_Typography::TYPOGRAPHY_4,
674
  ]
675
  );
676
 
677
- $this->start_controls_tabs( 'tabs_link_style' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
678
 
679
  $this->start_controls_tab(
680
- 'tab_link_normal',
681
  [
682
  'label' => __( 'Normal', 'happy_addons' ),
683
  ]
@@ -690,7 +777,36 @@ class InfoBox extends Base {
690
  'type' => Controls_Manager::COLOR,
691
  'default' => '',
692
  'selectors' => [
693
- '{{WRAPPER}} .ha-link' => 'color: {{VALUE}};',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
694
  ],
695
  ]
696
  );
@@ -698,7 +814,7 @@ class InfoBox extends Base {
698
  $this->end_controls_tab();
699
 
700
  $this->start_controls_tab(
701
- 'tab_link_hover',
702
  [
703
  'label' => __( 'Hover', 'happy_addons' ),
704
  ]
@@ -710,7 +826,53 @@ class InfoBox extends Base {
710
  'label' => __( 'Text Color', 'happy_addons' ),
711
  'type' => Controls_Manager::COLOR,
712
  'selectors' => [
713
- '{{WRAPPER}} .ha-link:hover, {{WRAPPER}} .ha-link:focus' => 'color: {{VALUE}};',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
714
  ],
715
  ]
716
  );
@@ -731,15 +893,15 @@ class InfoBox extends Base {
731
  $this->add_render_attribute( 'description', 'class', 'ha-infobox-text' );
732
 
733
  $this->add_inline_editing_attributes( 'button_text', 'none' );
734
- $this->add_render_attribute( 'button_text', 'class', 'ha-link' );
735
 
736
- $this->add_render_attribute( 'button_text', 'href', esc_url( $settings['button_link']['url'] ) );
 
737
  if ( ! empty( $settings['button_link']['is_external'] ) ) {
738
- $this->add_render_attribute( 'button_text', 'target', '_blank' );
739
  }
740
-
741
  if ( ! empty( $settings['button_link']['nofollow'] ) ) {
742
- $this->set_render_attribute( 'button_text', 'rel', 'nofollow' );
743
  }
744
  ?>
745
 
@@ -777,12 +939,34 @@ class InfoBox extends Base {
777
  </div>
778
  <?php endif; ?>
779
 
780
- <?php if ( $settings['button_text'] ):
 
 
 
 
 
 
781
  printf( '<a %1$s>%2$s</a>',
782
- $this->get_render_attribute_string( 'button_text' ),
783
- esc_html( $settings['button_text'] )
784
  );
785
- endif; ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
786
  </div>
787
  <?php
788
  }
@@ -797,8 +981,10 @@ class InfoBox extends Base {
797
  view.addRenderAttribute( 'description', 'class', 'ha-infobox-text' );
798
 
799
  view.addInlineEditingAttributes( 'button_text', 'none' );
800
- view.addRenderAttribute( 'button_text', 'class', 'ha-link' );
801
- view.addRenderAttribute( 'button_text', 'href', settings.button_link.url );
 
 
802
 
803
  if ( settings.type === 'image' ) {
804
  if ( settings.image.url ) {
@@ -832,8 +1018,22 @@ class InfoBox extends Base {
832
  </div>
833
  <# } #>
834
 
835
- <# if ( settings.button_text ) { #>
836
- <a {{{ view.getRenderAttributeString( 'button_text' ) }}}>{{ settings.button_text }}</a>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
837
  <# } #>
838
  </div>
839
  <?php
228
  $this->end_controls_section();
229
 
230
  $this->start_controls_section(
231
+ '_section_button',
232
  [
233
+ 'label' => __( 'Button', 'happy_addons' ),
234
  'tab' => Controls_Manager::TAB_CONTENT,
235
  ]
236
  );
240
  [
241
  'label' => __( 'Text', 'happy_addons' ),
242
  'type' => Controls_Manager::TEXT,
243
+ 'default' => __( 'Button Text', 'happy_addons' ),
244
+ 'placeholder' => __( 'Type button text here', 'happy_addons' ),
245
  'label_block' => true,
 
 
246
  ]
247
  );
248
 
249
  $this->add_control(
250
  'button_link',
251
  [
252
+ 'label' => __( 'Link', 'happy_addons' ),
253
  'type' => Controls_Manager::URL,
 
254
  'placeholder' => __( 'https://example.com/', 'happy_addons' ),
255
  ]
256
  );
257
 
258
+ $this->add_control(
259
+ 'button_icon',
260
+ [
261
+ 'label' => __( 'Icon', 'happy_addons' ),
262
+ 'type' => Controls_Manager::ICON,
263
+ 'options' => ha_get_happy_icons(),
264
+ 'default' => 'fa fa-angle-right'
265
+ ]
266
+ );
267
+
268
+ $this->add_control(
269
+ 'button_icon_position',
270
+ [
271
+ 'label' => __( 'Icon Position', 'happy_addons' ),
272
+ 'type' => Controls_Manager::CHOOSE,
273
+ 'label_block' => false,
274
+ 'options' => [
275
+ 'before' => [
276
+ 'title' => __( 'Before', 'happy_addons' ),
277
+ 'icon' => 'eicon-h-align-left',
278
+ ],
279
+ 'after' => [
280
+ 'title' => __( 'After', 'happy_addons' ),
281
+ 'icon' => 'eicon-h-align-right',
282
+ ],
283
+ ],
284
+ 'default' => 'after',
285
+ 'toggle' => false,
286
+ 'condition' => [
287
+ 'button_icon!' => '',
288
+ ],
289
+ ]
290
+ );
291
+
292
+ $this->add_control(
293
+ 'button_icon_spacing',
294
+ [
295
+ 'label' => __( 'Icon Spacing', 'happy_addons' ),
296
+ 'type' => Controls_Manager::SLIDER,
297
+ 'default' => [
298
+ 'size' => 10
299
+ ],
300
+ 'condition' => [
301
+ 'button_icon!' => '',
302
+ ],
303
+ 'selectors' => [
304
+ '{{WRAPPER}} .ha-btn--icon-before .ha-btn-icon' => 'margin-right: {{SIZE}}{{UNIT}};',
305
+ '{{WRAPPER}} .ha-btn--icon-after .ha-btn-icon' => 'margin-left: {{SIZE}}{{UNIT}};',
306
+ ],
307
+ ]
308
+ );
309
+
310
  $this->end_controls_section();
311
  }
312
 
697
  $this->end_controls_section();
698
 
699
  $this->start_controls_section(
700
+ '_section_style_button',
701
  [
702
+ 'label' => __( 'Button', 'happy_addons' ),
703
  'tab' => Controls_Manager::TAB_STYLE,
704
  ]
705
  );
711
  'type' => Controls_Manager::DIMENSIONS,
712
  'size_units' => [ 'px', 'em', '%' ],
713
  'selectors' => [
714
+ '{{WRAPPER}} .ha-btn' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
715
  ],
716
  ]
717
  );
720
  Group_Control_Typography::get_type(),
721
  [
722
  'name' => 'btn_typography',
723
+ 'selector' => '{{WRAPPER}} .ha-btn',
724
  'scheme' => Scheme_Typography::TYPOGRAPHY_4,
725
  ]
726
  );
727
 
728
+ $this->add_group_control(
729
+ Group_Control_Border::get_type(),
730
+ [
731
+ 'name' => 'button_border',
732
+ 'selector' => '{{WRAPPER}} .ha-btn',
733
+ ]
734
+ );
735
+
736
+ $this->add_control(
737
+ 'button_border_radius',
738
+ [
739
+ 'label' => __( 'Border Radius', 'happy_addons' ),
740
+ 'type' => Controls_Manager::DIMENSIONS,
741
+ 'size_units' => [ 'px', '%' ],
742
+ 'selectors' => [
743
+ '{{WRAPPER}} .ha-btn' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
744
+ ],
745
+ ]
746
+ );
747
+
748
+ $this->add_group_control(
749
+ Group_Control_Box_Shadow::get_type(),
750
+ [
751
+ 'name' => 'button_box_shadow',
752
+ 'selector' => '{{WRAPPER}} .ha-btn',
753
+ ]
754
+ );
755
+
756
+ $this->add_control(
757
+ 'hr',
758
+ [
759
+ 'type' => Controls_Manager::DIVIDER,
760
+ 'style' => 'thick',
761
+ ]
762
+ );
763
+
764
+ $this->start_controls_tabs( '_tabs_button' );
765
 
766
  $this->start_controls_tab(
767
+ '_tab_button_normal',
768
  [
769
  'label' => __( 'Normal', 'happy_addons' ),
770
  ]
777
  'type' => Controls_Manager::COLOR,
778
  'default' => '',
779
  'selectors' => [
780
+ '{{WRAPPER}} .ha-btn' => 'color: {{VALUE}};',
781
+ ],
782
+ ]
783
+ );
784
+
785
+ $this->add_control(
786
+ 'button_bg_color',
787
+ [
788
+ 'label' => __( 'Background Color', 'happy_addons' ),
789
+ 'type' => Controls_Manager::COLOR,
790
+ 'selectors' => [
791
+ '{{WRAPPER}} .ha-btn' => 'background-color: {{VALUE}};',
792
+ ],
793
+ ]
794
+ );
795
+
796
+ $this->add_control(
797
+ 'button_icon_translate',
798
+ [
799
+ 'label' => __( 'Icon Translate X', 'happy_addons' ),
800
+ 'type' => Controls_Manager::SLIDER,
801
+ 'range' => [
802
+ 'px' => [
803
+ 'min' => -100,
804
+ 'max' => 100,
805
+ ],
806
+ ],
807
+ 'selectors' => [
808
+ '{{WRAPPER}} .ha-btn--icon-before .ha-btn-icon' => '-webkit-transform: translateX(calc(-1 * {{SIZE}}{{UNIT}})); transform: translateX(calc(-1 * {{SIZE}}{{UNIT}}));',
809
+ '{{WRAPPER}} .ha-btn--icon-after .ha-btn-icon' => '-webkit-transform: translateX({{SIZE}}{{UNIT}}); transform: translateX({{SIZE}}{{UNIT}});',
810
  ],
811
  ]
812
  );
814
  $this->end_controls_tab();
815
 
816
  $this->start_controls_tab(
817
+ '_tab_button_hover',
818
  [
819
  'label' => __( 'Hover', 'happy_addons' ),
820
  ]
826
  'label' => __( 'Text Color', 'happy_addons' ),
827
  'type' => Controls_Manager::COLOR,
828
  'selectors' => [
829
+ '{{WRAPPER}} .ha-btn:hover, {{WRAPPER}} .ha-btn:focus' => 'color: {{VALUE}};',
830
+ ],
831
+ ]
832
+ );
833
+
834
+ $this->add_control(
835
+ 'button_hover_bg_color',
836
+ [
837
+ 'label' => __( 'Background Color', 'happy_addons' ),
838
+ 'type' => Controls_Manager::COLOR,
839
+ 'selectors' => [
840
+ '{{WRAPPER}} .ha-btn:hover, {{WRAPPER}} .ha-btn:focus' => 'background-color: {{VALUE}};',
841
+ ],
842
+ ]
843
+ );
844
+
845
+ $this->add_control(
846
+ 'button_hover_border_color',
847
+ [
848
+ 'label' => __( 'Border Color', 'happy_addons' ),
849
+ 'type' => Controls_Manager::COLOR,
850
+ 'condition' => [
851
+ 'button_border_border!' => '',
852
+ ],
853
+ 'selectors' => [
854
+ '{{WRAPPER}} .ha-btn:hover, {{WRAPPER}} .ha-btn:focus' => 'border-color: {{VALUE}};',
855
+ ],
856
+ ]
857
+ );
858
+
859
+ $this->add_control(
860
+ 'button_hover_icon_translate',
861
+ [
862
+ 'label' => __( 'Icon Translate X', 'happy_addons' ),
863
+ 'type' => Controls_Manager::SLIDER,
864
+ 'default' => [
865
+ 'size' => 10
866
+ ],
867
+ 'range' => [
868
+ 'px' => [
869
+ 'min' => -100,
870
+ 'max' => 100,
871
+ ],
872
+ ],
873
+ 'selectors' => [
874
+ '{{WRAPPER}} .ha-btn.ha-btn--icon-before:hover .ha-btn-icon' => '-webkit-transform: translateX(calc(-1 * {{SIZE}}{{UNIT}})); transform: translateX(calc(-1 * {{SIZE}}{{UNIT}}));',
875
+ '{{WRAPPER}} .ha-btn.ha-btn--icon-after:hover .ha-btn-icon' => '-webkit-transform: translateX({{SIZE}}{{UNIT}}); transform: translateX({{SIZE}}{{UNIT}});',
876
  ],
877
  ]
878
  );
893
  $this->add_render_attribute( 'description', 'class', 'ha-infobox-text' );
894
 
895
  $this->add_inline_editing_attributes( 'button_text', 'none' );
896
+ $this->add_render_attribute( 'button_text', 'class', 'ha-btn-text' );
897
 
898
+ $this->add_render_attribute( 'button', 'class', 'ha-btn ha-btn--link' );
899
+ $this->add_render_attribute( 'button', 'href', esc_url( $settings['button_link']['url'] ) );
900
  if ( ! empty( $settings['button_link']['is_external'] ) ) {
901
+ $this->add_render_attribute( 'button', 'target', '_blank' );
902
  }
 
903
  if ( ! empty( $settings['button_link']['nofollow'] ) ) {
904
+ $this->set_render_attribute( 'button', 'rel', 'nofollow' );
905
  }
906
  ?>
907
 
939
  </div>
940
  <?php endif; ?>
941
 
942
+ <?php
943
+ if ( $settings['button_text'] && empty( $settings['button_icon'] ) ) :
944
+ printf( '<a %1$s>%2$s</a>',
945
+ $this->get_render_attribute_string( 'button' ),
946
+ sprintf( '<span %1$s>%2$s</span>', $this->get_render_attribute_string( 'button_text' ), esc_html( $settings['button_text'] ) )
947
+ );
948
+ elseif ( empty( $settings['button_text'] ) && $settings['button_icon'] ) :
949
  printf( '<a %1$s>%2$s</a>',
950
+ $this->get_render_attribute_string( 'button' ),
951
+ sprintf( '<i class="%1$s"></i>', esc_attr( $settings['button_icon'] ) )
952
  );
953
+ elseif ( $settings['button_text'] && $settings['button_icon'] ) :
954
+ if ( $settings['button_icon_position'] === 'before' ) :
955
+ $this->add_render_attribute( 'button', 'class', 'ha-btn--icon-before' );
956
+ $btn_before = sprintf( '<i class="ha-btn-icon %1$s"></i>', esc_attr( $settings['button_icon'] ) );
957
+ $btn_after = sprintf( '<span %1$s>%2$s</span>', $this->get_render_attribute_string( 'button_text' ), esc_html( $settings['button_text'] ) );
958
+ else :
959
+ $this->add_render_attribute( 'button', 'class', 'ha-btn--icon-after' );
960
+ $btn_before = sprintf( '<span %1$s>%2$s</span>', $this->get_render_attribute_string( 'button_text' ), esc_html( $settings['button_text'] ) );
961
+ $btn_after = sprintf( '<i class="ha-btn-icon %1$s"></i>', esc_attr( $settings['button_icon'] ) );
962
+ endif;
963
+ printf( '<a %1$s>%2$s %3$s</a>',
964
+ $this->get_render_attribute_string( 'button' ),
965
+ $btn_before,
966
+ $btn_after
967
+ );
968
+ endif;
969
+ ?>
970
  </div>
971
  <?php
972
  }
981
  view.addRenderAttribute( 'description', 'class', 'ha-infobox-text' );
982
 
983
  view.addInlineEditingAttributes( 'button_text', 'none' );
984
+ view.addRenderAttribute( 'button_text', 'class', 'ha-btn-text' );
985
+
986
+ view.addRenderAttribute( 'button', 'class', 'ha-btn ha-btn--link' );
987
+ view.addRenderAttribute( 'button', 'href', settings.button_link.url );
988
 
989
  if ( settings.type === 'image' ) {
990
  if ( settings.image.url ) {
1018
  </div>
1019
  <# } #>
1020
 
1021
+ <# if ( settings.button_text && ! settings.button_icon ) { #>
1022
+ <a {{{ view.getRenderAttributeString( 'button' ) }}}><span {{{ view.getRenderAttributeString( 'button_text' ) }}}>{{ settings.button_text }}</span></a>
1023
+ <# } else if ( ! settings.button_text && settings.button_icon ) { #>
1024
+ <a {{{ view.getRenderAttributeString( 'button' ) }}}><i class="{{ settings.button_icon }}"></i></a>
1025
+ <# } else if ( settings.button_text && settings.button_icon ) {
1026
+ var button_before = button_after = '';
1027
+ if ( settings.button_icon_position === 'before' ) {
1028
+ view.addRenderAttribute( 'button', 'class', 'ha-btn--icon-before' );
1029
+ button_before = '<i class="ha-btn-icon ' + settings.button_icon + '"></i>';
1030
+ button_after = '<span ' + view.getRenderAttributeString( 'button_text' ) + '>' + settings.button_text + '</span>';
1031
+ } else {
1032
+ view.addRenderAttribute( 'button', 'class', 'ha-btn--icon-after' );
1033
+ button_after = '<i class="ha-btn-icon ' + settings.button_icon + '"></i>';
1034
+ button_before = '<span ' + view.getRenderAttributeString( 'button_text' ) + '>' + settings.button_text + '</span>';
1035
+ } #>
1036
+ <a {{{ view.getRenderAttributeString( 'button' ) }}}>{{{ button_before }}} {{{ button_after }}}</a>
1037
  <# } #>
1038
  </div>
1039
  <?php
widgets/member/widget.php CHANGED
@@ -488,7 +488,7 @@ class Member extends Base {
488
  Group_Control_Border::get_type(),
489
  [
490
  'name' => 'image_border',
491
- 'selector' => '{{WRAPPER}} .ha-member-figure > img, {{WRAPPER}} .ha-blurb-figure--icon'
492
  ]
493
  );
494
 
@@ -515,6 +515,17 @@ class Member extends Base {
515
  ]
516
  );
517
 
 
 
 
 
 
 
 
 
 
 
 
518
  $this->end_controls_section();
519
 
520
  $this->start_controls_section(
488
  Group_Control_Border::get_type(),
489
  [
490
  'name' => 'image_border',
491
+ 'selector' => '{{WRAPPER}} .ha-member-figure > img'
492
  ]
493
  );
494
 
515
  ]
516
  );
517
 
518
+ $this->add_control(
519
+ 'image_bg_color',
520
+ [
521
+ 'label' => __( 'Background Color', 'happy_addons' ),
522
+ 'type' => Controls_Manager::COLOR,
523
+ 'selectors' => [
524
+ '{{WRAPPER}} .ha-member-figure > img' => 'background-color: {{VALUE}}',
525
+ ],
526
+ ]
527
+ );
528
+
529
  $this->end_controls_section();
530
 
531
  $this->start_controls_section(
widgets/ninjaform/widget.php ADDED
@@ -0,0 +1,532 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Ninja Form widget class
4
+ *
5
+ * @package Happy_Addons
6
+ */
7
+ namespace Happy_Addons\Elementor\Widget;
8
+
9
+ use Elementor\Controls_Manager;
10
+ use Elementor\Group_Control_Border;
11
+ use Elementor\Group_Control_Box_Shadow;
12
+ use Elementor\Group_Control_Typography;
13
+
14
+ defined( 'ABSPATH' ) || die();
15
+
16
+ class NinjaForm extends Base {
17
+
18
+ /**
19
+ * Get widget title.
20
+ *
21
+ * @since 1.0.0
22
+ * @access public
23
+ *
24
+ * @return string Widget title.
25
+ */
26
+ public function get_title() {
27
+ return __( 'Ninja Form', 'happy_addons' );
28
+ }
29
+
30
+ /**
31
+ * Get widget icon.
32
+ *
33
+ * @since 1.0.0
34
+ * @access public
35
+ *
36
+ * @return string Widget icon.
37
+ */
38
+ public function get_icon() {
39
+ return 'hm hm-form';
40
+ }
41
+
42
+ public function get_keywords() {
43
+ return [ 'wpf','wpform' , 'form', 'contact', 'cf7', 'contact form', 'gravity', 'ninja' ];
44
+ }
45
+
46
+ protected function register_content_controls() {
47
+ $this->start_controls_section(
48
+ '_section_ninjaf',
49
+ [
50
+ 'label' => ha_is_ninjaf_activated() ? __( 'Ninja Form', 'happy_addons' ) : __( 'Notice', 'happy_addons' ),
51
+ 'tab' => Controls_Manager::TAB_CONTENT,
52
+ ]
53
+ );
54
+
55
+ if ( ! ha_is_ninjaf_activated() ) {
56
+ $this->add_control(
57
+ 'ninjaf_missing_notice',
58
+ [
59
+ 'type' => Controls_Manager::RAW_HTML,
60
+ 'raw' => sprintf(
61
+ __( 'Hi, it seems %1$s is missing in your site. Please install and activate %1$s first.', 'happy_addons' ),
62
+ '<a href="https://wordpress.org/plugins/ninja-forms/" target="_blank" rel="noopener">Ninja Form</a>'
63
+ )
64
+ ]
65
+ );
66
+ $this->end_controls_section();
67
+ return;
68
+ }
69
+
70
+ $this->add_control(
71
+ 'form_id',
72
+ [
73
+ 'label' => __( 'Select Your Form', 'happy_addons' ),
74
+ 'type' => Controls_Manager::SELECT,
75
+ 'label_block' => true,
76
+ 'options' => ['' => __( '', 'happy_addons' ) ] + \ha_get_ninjaform(),
77
+ ]
78
+ );
79
+
80
+ $this->end_controls_section();
81
+ }
82
+
83
+ protected function register_style_controls() {
84
+ $this->start_controls_section(
85
+ '_section_fields_style',
86
+ [
87
+ 'label' => __( 'Form Fields', 'happy_addons' ),
88
+ 'tab' => Controls_Manager::TAB_STYLE,
89
+ ]
90
+ );
91
+
92
+ $this->add_responsive_control(
93
+ 'field_margin',
94
+ [
95
+ 'label' => __( 'Field Spacing', 'happy_addons' ),
96
+ 'type' => Controls_Manager::DIMENSIONS,
97
+ 'size_units' => [ 'px', '%' ],
98
+ 'selectors' => [
99
+ '{{WRAPPER}} .nf-field-container:not(.submit-container)' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
100
+ ],
101
+ ]
102
+ );
103
+
104
+ $this->add_responsive_control(
105
+ 'field_padding',
106
+ [
107
+ 'label' => __( 'Padding', 'happy_addons' ),
108
+ 'type' => Controls_Manager::DIMENSIONS,
109
+ 'size_units' => [ 'px', 'em', '%' ],
110
+ 'selectors' => [
111
+ '{{WRAPPER}} .textbox-wrap input[type=text], {{WRAPPER}} .email-wrap input, {{WRAPPER}} .textarea-wrap textarea' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
112
+ ],
113
+ ]
114
+ );
115
+
116
+ $this->add_responsive_control(
117
+ 'field_border_radius',
118
+ [
119
+ 'label' => __( 'Border Radius', 'happy_addons' ),
120
+ 'type' => Controls_Manager::DIMENSIONS,
121
+ 'size_units' => [ 'px', '%' ],
122
+ 'selectors' => [
123
+ '{{WRAPPER}} .textbox-wrap input[type=text], {{WRAPPER}} .email-wrap input, {{WRAPPER}} .textarea-wrap textarea' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
124
+ ],
125
+ ]
126
+ );
127
+
128
+ $this->add_group_control(
129
+ Group_Control_Typography::get_type(),
130
+ [
131
+ 'name' => 'field_typography',
132
+ 'label' => __( 'Typography', 'happy_addons' ),
133
+ 'selector' => '{{WRAPPER}} .textbox-wrap input[type=text], {{WRAPPER}} .email-wrap input, {{WRAPPER}} .textarea-wrap textarea',
134
+ ]
135
+ );
136
+
137
+ $this->add_control(
138
+ 'field_textcolor',
139
+ [
140
+ 'label' => __( 'Field Text Color', 'happy_addons' ),
141
+ 'type' => Controls_Manager::COLOR,
142
+ 'selectors' => [
143
+ '{{WRAPPER}} .textbox-wrap input[type=text], {{WRAPPER}} .email-wrap input, {{WRAPPER}} .textarea-wrap textarea' => 'color: {{VALUE}}',
144
+ ],
145
+ ]
146
+ );
147
+
148
+ $this->add_control(
149
+ 'field_placeholder_color',
150
+ [
151
+ 'label' => __( 'Field Placeholder Color', 'happy_addons' ),
152
+ 'type' => Controls_Manager::COLOR,
153
+ 'selectors' => [
154
+ '{{WRAPPER}} ::-webkit-input-placeholder' => 'color: {{VALUE}};',
155
+ '{{WRAPPER}} ::-moz-placeholder' => 'color: {{VALUE}};',
156
+ '{{WRAPPER}} ::-ms-input-placeholder' => 'color: {{VALUE}};',
157
+ ],
158
+ ]
159
+ );
160
+
161
+ $this->start_controls_tabs( 'tabs_field_state' );
162
+
163
+ $this->start_controls_tab(
164
+ 'tab_field_normal',
165
+ [
166
+ 'label' => __( 'Normal', 'happy_addons' ),
167
+ ]
168
+ );
169
+
170
+ $this->add_group_control(
171
+ Group_Control_Border::get_type(),
172
+ [
173
+ 'name' => 'field_border',
174
+ 'selector' => '{{WRAPPER}} .textbox-wrap input[type=text], {{WRAPPER}} .email-wrap input, {{WRAPPER}} .textarea-wrap textarea',
175
+ ]
176
+ );
177
+
178
+ $this->add_group_control(
179
+ Group_Control_Box_Shadow::get_type(),
180
+ [
181
+ 'name' => 'field_box_shadow',
182
+ 'selector' => '{{WRAPPER}} .textbox-wrap input[type=text], {{WRAPPER}} .email-wrap input, {{WRAPPER}} .textarea-wrap textarea',
183
+ ]
184
+ );
185
+
186
+ $this->add_control(
187
+ 'field_bg_color',
188
+ [
189
+ 'label' => __( 'Background Color', 'happy_addons' ),
190
+ 'type' => Controls_Manager::COLOR,
191
+ 'selectors' => [
192
+ '{{WRAPPER}} .textbox-wrap input[type=text], {{WRAPPER}} .email-wrap input, {{WRAPPER}} .textarea-wrap textarea' => 'background-color: {{VALUE}}',
193
+ ],
194
+ ]
195
+ );
196
+
197
+ $this->end_controls_tab();
198
+
199
+ $this->start_controls_tab(
200
+ 'tab_field_focus',
201
+ [
202
+ 'label' => __( 'Focus', 'happy_addons' ),
203
+ ]
204
+ );
205
+
206
+ $this->add_group_control(
207
+ Group_Control_Border::get_type(),
208
+ [
209
+ 'name' => 'field_focus_border',
210
+ 'selector' => '{{WRAPPER}} .textbox-wrap input[type=text]:focus, {{WRAPPER}} .email-wrap input:focus, {{WRAPPER}} .textarea-wrap textarea:focus',
211
+ ]
212
+ );
213
+
214
+ $this->add_group_control(
215
+ Group_Control_Box_Shadow::get_type(),
216
+ [
217
+ 'name' => 'field_focus_box_shadow',
218
+ 'exclude' => [
219
+ 'box_shadow_position',
220
+ ],
221
+ 'selector' => '{{WRAPPER}} .textbox-wrap input[type=text]:focus, {{WRAPPER}} .email-wrap input:focus, {{WRAPPER}} .textarea-wrap textarea:focus',
222
+ ]
223
+ );
224
+
225
+ $this->add_control(
226
+ 'field_focus_bg_color',
227
+ [
228
+ 'label' => __( 'Background Color', 'happy_addons' ),
229
+ 'type' => Controls_Manager::COLOR,
230
+ 'selectors' => [
231
+ '{{WRAPPER}} .textbox-wrap input[type=text]:focus, {{WRAPPER}} .email-wrap input:focus, {{WRAPPER}} .textarea-wrap textarea:focus' => 'background-color: {{VALUE}}',
232
+ ],
233
+ ]
234
+ );
235
+
236
+ $this->end_controls_tab();
237
+ $this->end_controls_tabs();
238
+
239
+
240
+ $this->end_controls_section();
241
+
242
+ $this->start_controls_section(
243
+ 'ninjaf-form-label',
244
+ [
245
+ 'label' => __( 'Form Fields Label', 'happy_addons' ),
246
+ 'tab' => Controls_Manager::TAB_STYLE,
247
+ ]
248
+ );
249
+
250
+ $this->add_responsive_control(
251
+ 'label_margin',
252
+ [
253
+ 'label' => __( 'Margin', 'happy_addons' ),
254
+ 'type' => Controls_Manager::DIMENSIONS,
255
+ 'size_units' => [ 'px', '%' ],
256
+ 'selectors' => [
257
+ '{{WRAPPER}} .textbox-wrap label, {{WRAPPER}} .email-wrap label, {{WRAPPER}} .textarea-wrap label' => 'display: inline-block; padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
258
+ ],
259
+ ]
260
+ );
261
+
262
+ $this->add_responsive_control(
263
+ 'label_padding',
264
+ [
265
+ 'label' => __( 'Padding', 'happy_addons' ),
266
+ 'type' => Controls_Manager::DIMENSIONS,
267
+ 'size_units' => [ 'px', 'em', '%' ],
268
+ 'selectors' => [
269
+ '{{WRAPPER}} .textbox-wrap label, {{WRAPPER}} .email-wrap label, {{WRAPPER}} .textarea-wrap label' => 'display: inline-block; padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
270
+ ],
271
+ ]
272
+ );
273
+
274
+ $this->add_control(
275
+ 'hr3',
276
+ [
277
+ 'type' => Controls_Manager::DIVIDER,
278
+ 'style' => 'thick',
279
+ ]
280
+ );
281
+
282
+ $this->add_group_control(
283
+ Group_Control_Typography::get_type(),
284
+ [
285
+ 'name' => 'label_typography',
286
+ 'label' => __( 'Label Typography', 'happy_addons' ),
287
+ 'selector' => '{{WRAPPER}} .textbox-wrap label, {{WRAPPER}} .email-wrap label, {{WRAPPER}} .textarea-wrap label',
288
+ ]
289
+ );
290
+
291
+ $this->add_group_control(
292
+ Group_Control_Typography::get_type(),
293
+ [
294
+ 'name' => 'desc_typography',
295
+ 'label' => __( 'Description Typography', 'happy_addons' ),
296
+ 'selector' => '{{WRAPPER}} .nf-field-description p',
297
+ ]
298
+ );
299
+
300
+ $this->add_control(
301
+ 'label_color',
302
+ [
303
+ 'label' => __( 'Label Text Color', 'happy_addons' ),
304
+ 'type' => Controls_Manager::COLOR,
305
+ 'selectors' => [
306
+ '{{WRAPPER}} .textbox-wrap label, {{WRAPPER}} .email-wrap label, {{WRAPPER}} .textarea-wrap label' => 'color: {{VALUE}}',
307
+ ],
308
+ ]
309
+ );
310
+
311
+ $this->add_control(
312
+ 'requered_label',
313
+ [
314
+ 'label' => __( 'Required Label Color', 'happy_addons' ),
315
+ 'type' => Controls_Manager::COLOR,
316
+ 'selectors' => [
317
+ '{{WRAPPER}} .ninja-forms-req-symbol' => 'color: {{VALUE}}',
318
+ ],
319
+ ]
320
+ );
321
+
322
+ $this->add_control(
323
+ 'desc_color',
324
+ [
325
+ 'label' => __( 'Description Text Color', 'happy_addons' ),
326
+ 'type' => Controls_Manager::COLOR,
327
+ 'selectors' => [
328
+ '{{WRAPPER}} .nf-field-description p' => 'color: {{VALUE}}',
329
+ ],
330
+ ]
331
+ );
332
+
333
+ $this->end_controls_section();
334
+
335
+ $this->start_controls_section(
336
+ 'submit',
337
+ [
338
+ 'label' => __( 'Submit Button', 'happy_addons' ),
339
+ 'tab' => Controls_Manager::TAB_STYLE,
340
+ ]
341
+ );
342
+
343
+ $this->add_responsive_control(
344
+ 'submit_btn_position',
345
+ [
346
+ 'label' => __( 'Button Position', 'happy_addons' ),
347
+ 'type' => Controls_Manager::CHOOSE,
348
+ 'options' => [
349
+ 'left' => [
350
+ 'title' => __( 'Left', 'happy_addons' ),
351
+ 'icon' => 'eicon-h-align-left',
352
+ ],
353
+ 'center' => [
354
+ 'title' => __( 'Center', 'happy_addons' ),
355
+ 'icon' => 'eicon-h-align-center',
356
+ ],
357
+ 'right' => [
358
+ 'title' => __( 'Right', 'happy_addons' ),
359
+ 'icon' => 'eicon-h-align-right',
360
+ ],
361
+ ],
362
+ 'desktop_default' => 'left',
363
+ 'toggle' => false,
364
+ 'prefix_class' => 'ha-form-btn--%s',
365
+ 'selectors' => [
366
+ '{{WRAPPER}} .field-wrap.submit-wrap' => 'text-align: {{Value}};',
367
+ ],
368
+ ]
369
+ );
370
+
371
+ $this->add_responsive_control(
372
+ 'submit_margin',
373
+ [
374
+ 'label' => __( 'Margin', 'happy_addons' ),
375
+ 'type' => Controls_Manager::DIMENSIONS,
376
+ 'size_units' => [ 'px', '%' ],
377
+ 'selectors' => [
378
+ '{{WRAPPER}} .submit-container input' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
379
+ ],
380
+ ]
381
+ );
382
+
383
+ $this->add_responsive_control(
384
+ 'submit_padding',
385
+ [
386
+ 'label' => __( 'Padding', 'happy_addons' ),
387
+ 'type' => Controls_Manager::DIMENSIONS,
388
+ 'size_units' => [ 'px', 'em', '%' ],
389
+ 'selectors' => [
390
+ '{{WRAPPER}} .submit-container input' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
391
+ ],
392
+ ]
393
+ );
394
+
395
+ $this->add_group_control(
396
+ Group_Control_Typography::get_type(),
397
+ [
398
+ 'name' => 'submit_typography',
399
+ 'selector' => '{{WRAPPER}} .submit-container input',
400
+ ]
401
+ );
402
+
403
+ $this->add_group_control(
404
+ Group_Control_Border::get_type(),
405
+ [
406
+ 'name' => 'submit_border',
407
+ 'selector' => '{{WRAPPER}} .submit-container input',
408
+ ]
409
+ );
410
+
411
+ $this->add_control(
412
+ 'submit_border_radius',
413
+ [
414
+ 'label' => __( 'Border Radius', 'happy_addons' ),
415
+ 'type' => Controls_Manager::DIMENSIONS,
416
+ 'size_units' => [ 'px', '%' ],
417
+ 'selectors' => [
418
+ '{{WRAPPER}} .submit-container input' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
419
+ ],
420
+ ]
421
+ );
422
+
423
+ $this->add_group_control(
424
+ Group_Control_Box_Shadow::get_type(),
425
+ [
426
+ 'name' => 'submit_box_shadow',
427
+ 'selector' => '{{WRAPPER}} .submit-container input',
428
+ ]
429
+ );
430
+
431
+ $this->add_control(
432
+ 'hr4',
433
+ [
434
+ 'type' => Controls_Manager::DIVIDER,
435
+ 'style' => 'thick',
436
+ ]
437
+ );
438
+
439
+ $this->start_controls_tabs( 'tabs_button_style' );
440
+
441
+ $this->start_controls_tab(
442
+ 'tab_button_normal',
443
+ [
444
+ 'label' => __( 'Normal', 'happy_addons' ),
445
+ ]
446
+ );
447
+
448
+ $this->add_control(
449
+ 'submit_color',
450
+ [
451
+ 'label' => __( 'Text Color', 'happy_addons' ),
452
+ 'type' => Controls_Manager::COLOR,
453
+ 'default' => '',
454
+ 'selectors' => [
455
+ '{{WRAPPER}} .submit-container input' => 'color: {{VALUE}};',
456
+ ],
457
+ ]
458
+ );
459
+
460
+ $this->add_control(
461
+ 'submit_bg_color',
462
+ [
463
+ 'label' => __( 'Background Color', 'happy_addons' ),
464
+ 'type' => Controls_Manager::COLOR,
465
+ 'selectors' => [
466
+ '{{WRAPPER}} .submit-container input' => 'background-color: {{VALUE}};',
467
+ ],
468
+ ]
469
+ );
470
+
471
+ $this->end_controls_tab();
472
+
473
+ $this->start_controls_tab(
474
+ 'tab_button_hover',
475
+ [
476
+ 'label' => __( 'Hover', 'happy_addons' ),
477
+ ]
478
+ );
479
+
480
+ $this->add_control(
481
+ 'submit_hover_color',
482
+ [
483
+ 'label' => __( 'Text Color', 'happy_addons' ),
484
+ 'type' => Controls_Manager::COLOR,
485
+ 'selectors' => [
486
+ '{{WRAPPER}} .submit-container input:hover, {{WRAPPER}} .submit-container input:focus' => 'color: {{VALUE}};',
487
+ ],
488
+ ]
489
+ );
490
+
491
+ $this->add_control(
492
+ 'submit_hover_bg_color',
493
+ [
494
+ 'label' => __( 'Background Color', 'happy_addons' ),
495
+ 'type' => Controls_Manager::COLOR,
496
+ 'selectors' => [
497
+ '{{WRAPPER}} .submit-container input:hover, {{WRAPPER}} .submit-container input:focus' => 'background-color: {{VALUE}};',
498
+ ],
499
+ ]
500
+ );
501
+
502
+ $this->add_control(
503
+ 'submit_hover_border_color',
504
+ [
505
+ 'label' => __( 'Border Color', 'happy_addons' ),
506
+ 'type' => Controls_Manager::COLOR,
507
+ 'selectors' => [
508
+ '{{WRAPPER}} .submit-container input:hover, {{WRAPPER}} .submit-container input:focus' => 'border-color: {{VALUE}};',
509
+ ],
510
+ ]
511
+ );
512
+
513
+ $this->end_controls_tab();
514
+ $this->end_controls_tabs();
515
+
516
+ $this->end_controls_section();
517
+ }
518
+
519
+ protected function render() {
520
+ if ( ! ha_is_ninjaf_activated() ) {
521
+ return;
522
+ }
523
+
524
+ $settings = $this->get_settings_for_display();
525
+
526
+ if ( ! empty( $settings['form_id'] ) ) {
527
+ echo ha_do_shortcode( 'ninja_form', [
528
+ 'id' => $settings['form_id'],
529
+ ] );
530
+ }
531
+ }
532
+ }