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

Version Description

  • 27 July 2020 =

  • New: Data Table widget

  • New: happyaddons/extensions/grid_layer hook to control Grid Layer

  • New: happyaddons/extensions/background_overlay hook to control Background Overlay

  • New: happyaddons/extensions/wrapper_link hook to control Wrapper Link

  • New: happyaddons/extensions/happy_clone hook to control Happy Clone

  • New: happyaddons/extensions/adminbar_menu hook to control Adminbar menu

  • New: happyaddons/extensions/floating_effects hook to control Floating Effects

  • New: happyaddons/extensions/css_transform hook to control CSS Transform

  • New: happyaddons/extensions/on_demand_cache hook to control On Demand Assets Loading

  • Tweak: Added CSS Transform hover state support

  • Tweak: Added Stepflow direction arrow rotatation support

  • Tweak: Added Card button full width support

  • Tweak: Added Card responsive image positioning

  • Tweak: Restored justify alignment in all widgets

  • Tweak: Improved base styles in all widgets

  • Tweak: Removed widget control panel link from editor panel

  • Tweak: Removed HappyAddons shortcut link from finder

  • Tweak: Removed unnecessary css

  • Tweak: Post List content on/off option

  • Tweak: Post List feature image left & top show option

  • Fix: Post List date issue

  • Fix: WPML link translation issue

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 2.13.0
Comparing to
See all releases

Code changes from version 2.12.3 to 2.13.0

Files changed (64) hide show
  1. assets/admin/js/editor.min.js +1 -1
  2. assets/css/main.css +639 -418
  3. assets/css/main.min.css +1 -1
  4. assets/css/widgets/badge.min.css +1 -1
  5. assets/css/widgets/btn.min.css +1 -1
  6. assets/css/widgets/card.min.css +1 -1
  7. assets/css/widgets/common.min.css +1 -1
  8. assets/css/widgets/data-table.min.css +1 -0
  9. assets/css/widgets/icon-box.min.css +1 -1
  10. assets/css/widgets/image-comparison.min.css +1 -1
  11. assets/css/widgets/infobox.min.css +1 -1
  12. assets/css/widgets/member.min.css +1 -1
  13. assets/css/widgets/post-list.min.css +1 -1
  14. assets/css/widgets/pricing-table.min.css +1 -1
  15. assets/css/widgets/review.min.css +1 -1
  16. assets/css/widgets/steps-flow.min.css +1 -1
  17. assets/css/widgets/testimonial.min.css +1 -1
  18. assets/js/happy-addons.js +15 -2
  19. assets/js/happy-addons.min.js +1 -1
  20. base.php +10 -41
  21. changelog.txt +25 -0
  22. classes/admin-bar.php +94 -92
  23. classes/assets-manager.php +12 -11
  24. classes/attention-seeker.php +2 -0
  25. classes/cache-manager.php +3 -1
  26. classes/clone-handler.php +187 -187
  27. classes/dashboard.php +2 -0
  28. classes/extensions-manager.php +42 -24
  29. classes/finder.php +0 -71
  30. classes/icons-manager.php +2 -0
  31. classes/library-manager.php +2 -0
  32. classes/select2-handler.php +2 -0
  33. classes/updater.php +2 -0
  34. classes/widgets-manager.php +550 -537
  35. classes/wpml-manager.php +18 -16
  36. extensions/background-overlay.php +2 -0
  37. extensions/column-extended.php +2 -0
  38. extensions/happy-effects.php +1147 -810
  39. extensions/happy-grid.php +2 -1
  40. extensions/widgets-extended.php +2 -0
  41. extensions/wrapper-link.php +2 -0
  42. inc/functions-extensions.php +98 -0
  43. inc/functions.php +58 -65
  44. plugin.php +2 -2
  45. readme.txt +26 -1
  46. widgets/bar-chart/widget.php +4 -2
  47. widgets/card/widget.php +99 -45
  48. widgets/data-table/widget.php +1131 -0
  49. widgets/dual-button/widget.php +8 -2
  50. widgets/fun-factor/widget.php +42 -38
  51. widgets/gradient-heading/widget.php +220 -216
  52. widgets/icon-box/widget.php +754 -756
  53. widgets/image-compare/widget.php +2 -8
  54. widgets/infobox/widget.php +18 -17
  55. widgets/member/widget.php +57 -43
  56. widgets/post-list/widget.php +138 -2
  57. widgets/pricing-table/widget.php +19 -19
  58. widgets/review/widget.php +800 -806
  59. widgets/step-flow/widget.php +744 -692
  60. widgets/testimonial/widget.php +378 -371
  61. wpml/carousel.php +9 -1
  62. wpml/logo-grid.php +8 -1
  63. wpml/slider.php +9 -1
  64. wpml/social-icons.php +8 -1
assets/admin/js/editor.min.js CHANGED
@@ -1 +1 @@
1
- !function(e){"use strict";function t(){var t=e("#happy-addons-editor-dark-css");t.length||(t=e("<link>",{id:"happy-addons-editor-dark-css",rel:"stylesheet",href:HappyAddonsEditor.darkStylesheetURL})),elementor.settings.editorPreferences.model.on("change:ui_theme",function(e,n){if("light"===n)return void t.remove();t.attr("media","auto"===n?"(prefers-color-scheme: dark)":"").appendTo(elementorCommon.elements.$body)})}function n(){return{translate:["x","y","x_tablet","y_tablet","x_mobile","y_mobile"],skew:["x","y","x_tablet","y_tablet","x_mobile","y_mobile"],scale:["x","y","x_tablet","y_tablet","x_mobile","y_mobile"],rotate:["x","y","z","x_tablet","y_tablet","z_tablet","x_mobile","y_mobile","z_mobile"]}}function o(e,t,n){e="ha_transform_fx_"+e,t="ha_transform_fx_"+t,n.on("change:"+e,function(e,o){if(!o){var a=elementor.getPanelView().getCurrentPageView().children.find(function(e){return e.model.get("name")===t});n.set(t,_.extend({},n.defaults[t])),a&&a.render()}})}function a(e){var t=elementorFrontend.config.elements.data[e.cid];_.each(n(),function(e,n){_.each(e,function(e){o(n+"_toggle",n+"_"+e,t)})}),elementor.getPanelView().getCurrentPageView().model.on("editor:close",function(){_.each(n(),function(e,n){t.off("change:ha_transform_fx_"+n+"_toggle")})})}if(window.ha=window.ha||{},ha.hasIconLibrary=function(){return elementor.helpers&&elementor.helpers.renderIcon},ha.getFeatureLabel=function(e){var t=document.createElement("DIV");return t.innerHTML=e,e=t.textContent||t.innerText||e,e.length>20?e.substring(0,20)+"...":e},ha.translate=function(e,t){return elementorCommon.translate(e,null,t,HappyAddonsEditor.i18n)},window.ha_get_feature_label=ha.getFeatureLabel,window.ha_has_icon_library=ha.hasIconLibrary,window.ha_translate=ha.translate,ha.getButtonWithIcon=function(e,t){var n,o,a,i,r,s=[],l={};if(t=t||{},t=_.defaults(t,{oldIcon:"button_icon",iconPos:"button_icon_position",newIcon:"button_selected_icon",text:"button_text",link:"button_link",class:"ha-btn ha-btn--link",textClass:"ha-btn-text"}),!_.isObject(e)||_.isUndefined(e.getContainer))return"";l=e.getContainer().settings.toJSON();var d=_.isUndefined(l[t.text])?"":l[t.text],c=!(_.isUndefined(l[t.oldIcon])||!l[t.oldIcon]),h=!(_.isUndefined(l[t.newIcon])||!_.isObject(l[t.newIcon])||!l[t.newIcon].value);return d||h||c?(ha.hasIconLibrary()&&(n=elementor.helpers.renderIcon(e,l[t.newIcon],{"aria-hidden":!0,class:"ha-btn-icon"},"i","object"),o=elementor.helpers.isIconMigrated(l,t.newIcon)),e.addInlineEditingAttributes(t.text,"none"),e.addRenderAttribute(t.text,"class",t.textClass),e.addRenderAttribute("button","class",t.class),e.addRenderAttribute("button","href",l[t.link].url),(h||c)&&(ha.hasIconLibrary()&&n&&n.rendered&&(!c||o)?a="svg"===l[t.newIcon].library?'<span class="ha-btn-icon ha-btn-icon--svg">'+n.value+"</span>":n.value:c&&(a='<i class="ha-btn-icon '+t.oldIcon+'" aria-hidden="true"></i>')),!d||h||c?d||!h&&!c?d&&(h||c)&&("before"===l[t.iconPos]?(e.addRenderAttribute("button","class","ha-btn--icon-before"),i=a,r="<span "+e.getRenderAttributeString(t.text)+">"+d+"</span>"):(e.addRenderAttribute("button","class","ha-btn--icon-after"),r=a,i="<span "+e.getRenderAttributeString(t.text)+">"+d+"</span>"),s=["<a "+e.getRenderAttributeString("button")+">",i,r,"</a>"]):s=["<a "+e.getRenderAttributeString("button")+">",a,"</a>"]:s=["<a "+e.getRenderAttributeString("button")+">","<span "+e.getRenderAttributeString(t.text)+">",d,"</span>","</a>"],s.join("")):void 0},elementor.on("panel:init",function(){if(e("#elementor-panel-elements-search-input").on("keyup",_.debounce(function(){e("#elementor-panel-elements").find(".hm").parents(".elementor-element").addClass("is-ha-widget")},100)),"undefined"!=typeof $e||null!==$e){var n={callback:function(){var e=elementor.settings.page.model.attributes.ha_grid;""===e?elementor.settings.page.model.setExternalChange("ha_grid","yes"):"yes"===e&&elementor.settings.page.model.setExternalChange("ha_grid","")}};$e.shortcuts.register("ctrl+shift+g",n),$e.shortcuts.register("cmd+shift+g",n)}t()}),elementor.hooks.addAction("panel/open_editor/widget",function(e,t){a(t)}),elementor.modules.controls.Icons){var i=elementor.modules.controls.Icons.extend({getControlValue:function(){var e=this.constructor.__super__.getControlValue.call(this),t=this.model,n=this.getValueToMigrate(),o={value:"",library:"happy-icons"},a=this.container&&this.container.settings||this.elementSettingsModel;if(_.isObject(e)&&!_.isEmpty(e)&&"svg"!==e.library&&0===e.value.indexOf("fashm"))return o.value=e.value.substr(e.value.indexOf("hm hm-")),a.set(t.get("name"),o),o;if(!_.isObject(e)&&n&&0===n.indexOf("hm hm-"))return o.value=n,a.set(t.get("name"),o),o;if(!this.isMigrationAllowed())return n;if(!n)return e;var i=a.get(this.dataKeys.migratedKey),r=t.get("name");return this.cache.migratedFlag[r]?this.cache.migratedFlag[r]:i&&i[r]?e:this.migrateFa4toFa5(n)}});elementor.addControlView("icons",i)}elementor.modules.layouts.panel.pages.menu.Menu.addItem({name:"happyaddons-home",icon:"hm hm-happyaddons",title:ha.translate("editorPanelHomeLinkTitle"),type:"link",link:HappyAddonsEditor.editorPanelHomeLinkURL,newTab:!0},"settings"),elementor.modules.layouts.panel.pages.menu.Menu.addItem({name:"happyaddons-widgets",icon:"hm hm-cross-game",title:ha.translate("editorPanelWidgetsLinkTitle"),type:"link",link:HappyAddonsEditor.editorPanelWidgetsLinkURL,newTab:!0},"settings"),elementor.hooks.addFilter("panel/elements/regionViews",function(e){if(HappyAddonsEditor.hasPro||_.isEmpty(HappyAddonsEditor.proWidgets))return e;var t,n,o=e.elements.view,a=e.categories.view,i=e.elements.options.collection,r=e.categories.options.collection,s=[];return _.each(HappyAddonsEditor.proWidgets,function(e,t){i.add({name:"ha-"+t,title:e.title,icon:e.icon,categories:["happy_addons_pro"],editable:!1})}),i.each(function(e){"happy_addons_pro"===e.get("categories")[0]&&s.push(e)}),n=r.findIndex({name:"happy_addons_category"}),n&&r.add({name:"happy_addons_pro_category",title:"Happy Addons Pro",icon:"hm hm-happyaddons",defaultActive:!1,items:s},{at:n+1}),t={className:function(){var e=this.constructor.__super__.className.call(this);return!this.isEditable()&&this.isHappyWidget()&&(e+=" ha-element--promotion"),e},isHappyWidget:function(){return 0===this.model.get("name").indexOf("ha-")},onMouseDown:function(){if(!this.isHappyWidget())return elementor.promotion.dialog.buttons[0].removeClass("ha-btn--promotion"),void this.constructor.__super__.onMouseDown.call(this);elementor.promotion.dialog.buttons[0].addClass("ha-btn--promotion"),elementor.promotion.showDialog({headerMessage:ha.translate("promotionDialogHeader",[this.model.get("title")]),message:ha.translate("promotionDialogMessage",[this.model.get("title")]),top:"-7",element:this.el,actionURL:"https://demo.happyaddons.com/"})}},e.elements.view=o.extend({childView:o.prototype.childView.extend(t)}),e.categories.view=a.extend({childView:a.prototype.childView.extend({childView:a.prototype.childView.prototype.childView.extend(t)})}),e})}(jQuery);
1
+ !function(e){"use strict";function t(){var t=e("#happy-addons-editor-dark-css");t.length||(t=e("<link>",{id:"happy-addons-editor-dark-css",rel:"stylesheet",href:HappyAddonsEditor.darkStylesheetURL})),elementor.settings.editorPreferences.model.on("change:ui_theme",function(e,n){if("light"===n)return void t.remove();t.attr("media","auto"===n?"(prefers-color-scheme: dark)":"").appendTo(elementorCommon.elements.$body)})}if(window.ha=window.ha||{},ha.hasIconLibrary=function(){return elementor.helpers&&elementor.helpers.renderIcon},ha.getFeatureLabel=function(e){var t=document.createElement("DIV");return t.innerHTML=e,e=t.textContent||t.innerText||e,e.length>20?e.substring(0,20)+"...":e},ha.translate=function(e,t){return elementorCommon.translate(e,null,t,HappyAddonsEditor.i18n)},window.ha_get_feature_label=ha.getFeatureLabel,window.ha_has_icon_library=ha.hasIconLibrary,window.ha_translate=ha.translate,ha.getButtonWithIcon=function(e,t){var n,o,i,a,r,s=[],d={};if(t=t||{},t=_.defaults(t,{oldIcon:"button_icon",iconPos:"button_icon_position",newIcon:"button_selected_icon",text:"button_text",link:"button_link",class:"ha-btn ha-btn--link",textClass:"ha-btn-text"}),!_.isObject(e)||_.isUndefined(e.getContainer))return"";d=e.getContainer().settings.toJSON();var l=_.isUndefined(d[t.text])?"":d[t.text],c=!(_.isUndefined(d[t.oldIcon])||!d[t.oldIcon]),h=!(_.isUndefined(d[t.newIcon])||!_.isObject(d[t.newIcon])||!d[t.newIcon].value);return l||h||c?(ha.hasIconLibrary()&&(n=elementor.helpers.renderIcon(e,d[t.newIcon],{"aria-hidden":!0,class:"ha-btn-icon"},"i","object"),o=elementor.helpers.isIconMigrated(d,t.newIcon)),e.addInlineEditingAttributes(t.text,"none"),e.addRenderAttribute(t.text,"class",t.textClass),e.addRenderAttribute("button","class",t.class),e.addRenderAttribute("button","href",d[t.link].url),(h||c)&&(ha.hasIconLibrary()&&n&&n.rendered&&(!c||o)?i="svg"===d[t.newIcon].library?'<span class="ha-btn-icon ha-btn-icon--svg">'+n.value+"</span>":n.value:c&&(i='<i class="ha-btn-icon '+t.oldIcon+'" aria-hidden="true"></i>')),!l||h||c?l||!h&&!c?l&&(h||c)&&("before"===d[t.iconPos]?(e.addRenderAttribute("button","class","ha-btn--icon-before"),a=i,r="<span "+e.getRenderAttributeString(t.text)+">"+l+"</span>"):(e.addRenderAttribute("button","class","ha-btn--icon-after"),r=i,a="<span "+e.getRenderAttributeString(t.text)+">"+l+"</span>"),s=["<a "+e.getRenderAttributeString("button")+">",a,r,"</a>"]):s=["<a "+e.getRenderAttributeString("button")+">",i,"</a>"]:s=["<a "+e.getRenderAttributeString("button")+">","<span "+e.getRenderAttributeString(t.text)+">",l,"</span>","</a>"],s.join("")):void 0},elementor.on("panel:init",function(){if(e("#elementor-panel-elements-search-input").on("keyup",_.debounce(function(){e("#elementor-panel-elements").find(".hm").parents(".elementor-element").addClass("is-ha-widget")},100)),"undefined"!=typeof $e||null!==$e){var n={callback:function(){var e=elementor.settings.page.model.attributes.ha_grid;""===e?elementor.settings.page.model.setExternalChange("ha_grid","yes"):"yes"===e&&elementor.settings.page.model.setExternalChange("ha_grid","")}};$e.shortcuts.register("ctrl+shift+g",n),$e.shortcuts.register("cmd+shift+g",n)}t()}),elementor.modules.controls.Icons){var n=elementor.modules.controls.Icons.extend({getControlValue:function(){var e=this.constructor.__super__.getControlValue.call(this),t=this.model,n=this.getValueToMigrate(),o={value:"",library:"happy-icons"},i=this.container&&this.container.settings||this.elementSettingsModel;if(_.isObject(e)&&!_.isEmpty(e)&&"svg"!==e.library&&0===e.value.indexOf("fashm"))return o.value=e.value.substr(e.value.indexOf("hm hm-")),i.set(t.get("name"),o),o;if(!_.isObject(e)&&n&&0===n.indexOf("hm hm-"))return o.value=n,i.set(t.get("name"),o),o;if(!this.isMigrationAllowed())return n;if(!n)return e;var a=i.get(this.dataKeys.migratedKey),r=t.get("name");return this.cache.migratedFlag[r]?this.cache.migratedFlag[r]:a&&a[r]?e:this.migrateFa4toFa5(n)}});elementor.addControlView("icons",n)}elementor.modules.layouts.panel.pages.menu.Menu.addItem({name:"happyaddons-home",icon:"hm hm-happyaddons",title:ha.translate("editorPanelHomeLinkTitle"),type:"link",link:HappyAddonsEditor.editorPanelHomeLinkURL,newTab:!0},"settings"),elementor.hooks.addFilter("panel/elements/regionViews",function(e){if(HappyAddonsEditor.hasPro||_.isEmpty(HappyAddonsEditor.proWidgets))return e;var t,n,o=e.elements.view,i=e.categories.view,a=e.elements.options.collection,r=e.categories.options.collection,s=[];return _.each(HappyAddonsEditor.proWidgets,function(e,t){a.add({name:"ha-"+t,title:e.title,icon:e.icon,categories:["happy_addons_pro"],editable:!1})}),a.each(function(e){"happy_addons_pro"===e.get("categories")[0]&&s.push(e)}),n=r.findIndex({name:"happy_addons_category"}),n&&r.add({name:"happy_addons_pro_category",title:"Happy Addons Pro",icon:"hm hm-happyaddons",defaultActive:!1,items:s},{at:n+1}),t={className:function(){var e=this.constructor.__super__.className.call(this);return!this.isEditable()&&this.isHappyWidget()&&(e+=" ha-element--promotion"),e},isHappyWidget:function(){return 0===this.model.get("name").indexOf("ha-")},onMouseDown:function(){if(!this.isHappyWidget())return elementor.promotion.dialog.buttons[0].removeClass("ha-btn--promotion"),void this.constructor.__super__.onMouseDown.call(this);elementor.promotion.dialog.buttons[0].addClass("ha-btn--promotion"),elementor.promotion.showDialog({headerMessage:ha.translate("promotionDialogHeader",[this.model.get("title")]),message:ha.translate("promotionDialogMessage",[this.model.get("title")]),top:"-7",element:this.el,actionURL:"https://demo.happyaddons.com/"})}},e.elements.view=o.extend({childView:o.prototype.childView.extend(t)}),e.categories.view=i.extend({childView:i.prototype.childView.extend({childView:i.prototype.childView.prototype.childView.extend(t)})}),e})}(jQuery);
assets/css/main.css CHANGED
@@ -1,39 +1,30 @@
1
- .ha-card > .elementor-widget-container,
2
- .ha-infobox > .elementor-widget-container,
3
- .ha-icon-box > .elementor-widget-container,
4
- .ha-member > .elementor-widget-container,
5
- .ha-review > .elementor-widget-container,
6
- .ha-image-compare > .elementor-widget-container,
7
- .ha-pricing-table > .elementor-widget-container {
8
- border-radius: .5rem;
9
- background-color: #fff;
10
- box-shadow: 0 .2rem 2.8rem rgba(36, 36, 36, .1);
11
- }
12
-
13
  .ha-logo-grid-wrapper:after {
14
  display: block;
15
  clear: both;
16
  content: "";
17
  }
18
 
19
- .ha-card > .elementor-widget-container,
20
- .ha-infobox > .elementor-widget-container,
21
- .ha-icon-box > .elementor-widget-container,
22
- .ha-member > .elementor-widget-container,
23
- .ha-review > .elementor-widget-container,
24
- .ha-image-compare > .elementor-widget-container,
25
- .ha-pricing-table > .elementor-widget-container {
26
- border-radius: .5rem;
27
- background-color: #fff;
28
- box-shadow: 0 .2rem 2.8rem rgba(36, 36, 36, .1);
29
- }
30
-
31
  .ha-logo-grid-wrapper:after {
32
  display: block;
33
  clear: both;
34
  content: "";
35
  }
36
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  .happy-addon > .elementor-widget-container {
38
  word-wrap: break-word;
39
 
@@ -56,6 +47,10 @@
56
  display: none;
57
  }
58
 
 
 
 
 
59
  .ha-screen-reader-text {
60
  position: absolute;
61
  overflow: hidden;
@@ -100,18 +95,6 @@
100
  outline-width: thin;
101
  }
102
 
103
- .ha-card > .elementor-widget-container,
104
- .ha-infobox > .elementor-widget-container,
105
- .ha-icon-box > .elementor-widget-container,
106
- .ha-member > .elementor-widget-container,
107
- .ha-review > .elementor-widget-container,
108
- .ha-image-compare > .elementor-widget-container,
109
- .ha-pricing-table > .elementor-widget-container {
110
- border-radius: .5rem;
111
- background-color: #fff;
112
- box-shadow: 0 .2rem 2.8rem rgba(36, 36, 36, .1);
113
- }
114
-
115
  .ha-logo-grid-wrapper:after {
116
  display: block;
117
  clear: both;
@@ -131,7 +114,7 @@
131
  }
132
  .ha-btn:not(.ha-btn--link) {
133
  padding: 15px 25px;
134
- border-radius: .25rem;
135
  background-color: #562dd4;
136
  color: #fff;
137
  }
@@ -159,74 +142,64 @@
159
  }
160
 
161
  .ha-badge {
162
- padding: .475rem 1.1rem;
163
- max-width: 100%;
164
  border-radius: 50px;
165
  background-color: #fff;
166
  font-size: 12px;
 
 
 
 
 
 
 
167
  }
168
  .ha-badge--top-left {
169
- top: 1rem;
170
- left: 1rem;
171
  }
172
  .ha-badge--top-center {
173
- top: 1rem;
174
  left: 50%;
175
- -webkit-transform: translateX(-50%);
176
- -ms-transform: translateX(-50%);
177
- transform: translateX(-50%);
178
  }
179
  .ha-badge--top-right {
180
- top: 1rem;
181
- right: 1rem;
182
  }
183
  .ha-badge--middle-left {
184
  top: 50%;
185
- left: 1rem;
186
- -webkit-transform: translateY(-50%);
187
- -ms-transform: translateY(-50%);
188
- transform: translateY(-50%);
189
  }
190
  .ha-badge--middle-center {
191
  top: 50%;
192
  left: 50%;
193
- -webkit-transform: translate(-50%, -50%);
194
- -ms-transform: translate(-50%, -50%);
195
- transform: translate(-50%, -50%);
196
  }
197
  .ha-badge--middle-right {
198
  top: 50%;
199
- right: 1rem;
200
- -webkit-transform: translateY(-50%);
201
- -ms-transform: translateY(-50%);
202
- transform: translateY(-50%);
203
  }
204
  .ha-badge--bottom-left {
205
- bottom: 1rem;
206
- left: 1rem;
207
  }
208
  .ha-badge--bottom-center {
209
- bottom: 1rem;
210
  left: 50%;
211
- -webkit-transform: translateX(-50%);
212
- -ms-transform: translateX(-50%);
213
- transform: translateX(-50%);
214
  }
215
  .ha-badge--bottom-right {
216
- right: 1rem;
217
- bottom: 1rem;
218
- }
219
-
220
- .ha-card > .elementor-widget-container,
221
- .ha-infobox > .elementor-widget-container,
222
- .ha-icon-box > .elementor-widget-container,
223
- .ha-member > .elementor-widget-container,
224
- .ha-review > .elementor-widget-container,
225
- .ha-image-compare > .elementor-widget-container,
226
- .ha-pricing-table > .elementor-widget-container {
227
- border-radius: .5rem;
228
- background-color: #fff;
229
- box-shadow: 0 .2rem 2.8rem rgba(36, 36, 36, .1);
230
  }
231
 
232
  .ha-logo-grid-wrapper:after {
@@ -235,32 +208,52 @@
235
  content: "";
236
  }
237
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
238
  .ha-card-figure {
239
  position: relative;
 
 
 
 
 
240
  height: 250px;
 
 
 
241
  }
242
  .ha-card-figure img {
243
  width: 100%;
244
  height: 100%;
245
- border-top-left-radius: calc(.5rem - 1px);
246
- border-top-right-radius: calc(.5rem - 1px);
247
  vertical-align: bottom;
248
  }
249
 
250
  .ha-card-body {
251
- padding: 1.5rem;
252
  }
253
 
254
  .ha-card-title {
255
  margin-top: 0;
256
- margin-bottom: .75rem;
257
  color: #151515;
258
  font-weight: 700;
259
  font-size: 22px;
260
  }
261
 
262
  .ha-card-text {
263
- margin-bottom: 2rem;
264
  color: #616161;
265
  font-size: 16px;
266
  line-height: 1.7;
@@ -272,9 +265,21 @@
272
 
273
  .ha-card--top .ha-card-figure {
274
  display: inline-block;
 
 
 
 
 
 
 
 
275
  width: 100%;
276
  }
277
 
 
 
 
 
278
  .ha-card--right > .elementor-widget-container,
279
  .ha-card--left > .elementor-widget-container {
280
  display: -webkit-box;
@@ -285,63 +290,150 @@
285
  -webkit-align-items: center;
286
  align-items: center;
287
  -ms-flex-align: center;
288
- -webkit-box-orient: horizontal;
289
- -webkit-box-direction: normal;
290
- -webkit-flex-direction: row;
291
- -ms-flex-direction: row;
292
- flex-direction: row;
293
  }
294
-
295
- .ha-card--right .ha-card-figure,
296
- .ha-card--left .ha-card-figure {
297
- -webkit-box-flex: 0;
298
- -webkit-flex: 0 0 50%;
299
- -ms-flex: 0 0 50%;
300
- flex: 0 0 50%;
301
- max-width: 50%;
302
  }
303
 
304
- .ha-card--right .ha-card-body,
305
  .ha-card--left .ha-card-body {
306
  -webkit-box-flex: 0;
307
- -webkit-flex: 0 0 50%;
308
- -ms-flex: 0 0 50%;
309
- flex: 0 0 50%;
310
- padding: 2.5rem;
311
- max-width: 50%;
312
  }
313
 
314
  .ha-card--left .ha-card-figure img {
315
- border-radius: calc(.5rem - 1px) 0 0 calc(.5rem - 1px);
316
  }
317
 
318
- .ha-card--right > .elementor-widget-container {
319
- -webkit-box-orient: horizontal;
320
- -webkit-box-direction: reverse;
321
- -webkit-flex-direction: row-reverse;
322
- -ms-flex-direction: row-reverse;
323
- flex-direction: row-reverse;
324
- text-align: right;
325
  }
326
 
327
  .ha-card--right .ha-card-figure img {
328
- border-radius: 0 calc(.5rem - 1px) calc(.5rem - 1px) 0;
329
  }
330
 
331
- .ha-card .ha-badge {
332
- position: absolute;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
333
  }
334
 
335
- .ha-card > .elementor-widget-container,
336
- .ha-infobox > .elementor-widget-container,
337
- .ha-icon-box > .elementor-widget-container,
338
- .ha-member > .elementor-widget-container,
339
- .ha-review > .elementor-widget-container,
340
- .ha-image-compare > .elementor-widget-container,
341
- .ha-pricing-table > .elementor-widget-container {
342
- border-radius: .5rem;
343
- background-color: #fff;
344
- box-shadow: 0 .2rem 2.8rem rgba(36, 36, 36, .1);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
345
  }
346
 
347
  .ha-logo-grid-wrapper:after {
@@ -350,32 +442,47 @@
350
  content: "";
351
  }
352
 
 
 
 
 
 
353
  .ha-infobox > .elementor-widget-container {
354
- padding: 1.5rem;
 
 
 
355
  }
356
-
357
  .ha-infobox-title {
358
  margin-top: 0;
359
- margin-bottom: 1rem;
360
  color: #151515;
361
  font-size: 24px;
362
  }
363
-
364
  .ha-infobox-figure {
365
  display: inline-block;
366
- margin: 0 0 1.5rem !important;
 
 
 
367
  }
368
  .ha-infobox-figure--icon {
369
  text-align: center;
370
- font-size: 3rem;
371
  line-height: 1;
 
 
 
372
  }
373
  .ha-infobox-figure i,
374
  .ha-infobox-figure svg {
375
  position: relative;
376
- display: block;
377
  width: 1em;
378
  height: 1em;
 
 
 
379
  }
380
  .ha-infobox-figure i:before {
381
  position: absolute;
@@ -389,26 +496,15 @@
389
  height: 100%;
390
  vertical-align: bottom;
391
  }
392
-
 
 
393
  .ha-infobox-text p {
394
  margin-top: 0;
395
  margin-bottom: 0;
396
  }
397
-
398
  .ha-infobox-text + .ha-btn--link {
399
- margin-top: 1rem;
400
- }
401
-
402
- .ha-card > .elementor-widget-container,
403
- .ha-infobox > .elementor-widget-container,
404
- .ha-icon-box > .elementor-widget-container,
405
- .ha-member > .elementor-widget-container,
406
- .ha-review > .elementor-widget-container,
407
- .ha-image-compare > .elementor-widget-container,
408
- .ha-pricing-table > .elementor-widget-container {
409
- border-radius: .5rem;
410
- background-color: #fff;
411
- box-shadow: 0 .2rem 2.8rem rgba(36, 36, 36, .1);
412
  }
413
 
414
  .ha-logo-grid-wrapper:after {
@@ -419,7 +515,10 @@
419
 
420
  .ha-icon-box > .elementor-widget-container {
421
  position: relative;
422
- padding: 1.25rem;
 
 
 
423
  }
424
 
425
  .ha-icon-box-title {
@@ -433,10 +532,10 @@
433
 
434
  .ha-icon-box-icon {
435
  display: inline-block;
436
- margin-bottom: 1rem;
437
  color: #151515;
438
  text-align: center;
439
- font-size: 3rem;
440
  -webkit-transition: border .3s, background .3s, color .3s, -webkit-transform .3s;
441
  transition: border .3s, background .3s, color .3s, -webkit-transform .3s;
442
  transition: transform .3s, border .3s, background .3s, color .3s;
@@ -476,18 +575,6 @@
476
  color: #fff;
477
  }
478
 
479
- .ha-card > .elementor-widget-container,
480
- .ha-infobox > .elementor-widget-container,
481
- .ha-icon-box > .elementor-widget-container,
482
- .ha-member > .elementor-widget-container,
483
- .ha-review > .elementor-widget-container,
484
- .ha-image-compare > .elementor-widget-container,
485
- .ha-pricing-table > .elementor-widget-container {
486
- border-radius: .5rem;
487
- background-color: #fff;
488
- box-shadow: 0 .2rem 2.8rem rgba(36, 36, 36, .1);
489
- }
490
-
491
  .ha-logo-grid-wrapper:after {
492
  display: block;
493
  clear: both;
@@ -495,12 +582,15 @@
495
  }
496
 
497
  .ha-member > .elementor-widget-container {
498
- padding: 1.25rem;
 
 
 
499
  }
500
 
501
  .ha-member-figure {
502
  display: inline-block;
503
- margin: 0 0 1.5rem !important;
504
  }
505
  .ha-member-figure img {
506
  width: 100%;
@@ -510,19 +600,19 @@
510
 
511
  .ha-member-name {
512
  margin-top: 0;
513
- margin-bottom: .5rem;
514
  color: #151515;
515
  font-size: 18px;
516
  }
517
 
518
  .ha-member-position {
519
- margin-bottom: 1.5rem;
520
  color: #7f7f7f;
521
  font-size: 14px;
522
  }
523
 
524
  .ha-member-bio {
525
- margin-bottom: 1.5rem;
526
  font-size: 14px;
527
  line-height: 1.6;
528
  }
@@ -544,99 +634,102 @@
544
  height: 1em;
545
  }
546
  .ha-member-links > a:not(:last-child) {
547
- margin-right: .3rem;
548
  }
549
 
550
  .ha-member .ha-btn {
551
- margin-bottom: 10px;
552
  }
553
 
554
- .ha-member-links + .ha-btn {
555
- margin-top: 10px;
556
  margin-bottom: 0;
557
  }
558
 
559
- .ha-card > .elementor-widget-container,
560
- .ha-infobox > .elementor-widget-container,
561
- .ha-icon-box > .elementor-widget-container,
562
- .ha-member > .elementor-widget-container,
563
- .ha-review > .elementor-widget-container,
564
- .ha-image-compare > .elementor-widget-container,
565
- .ha-pricing-table > .elementor-widget-container {
566
- border-radius: .5rem;
567
- background-color: #fff;
568
- box-shadow: 0 .2rem 2.8rem rgba(36, 36, 36, .1);
569
- }
570
-
571
  .ha-logo-grid-wrapper:after {
572
  display: block;
573
  clear: both;
574
  content: "";
575
  }
576
 
 
 
 
 
 
 
 
 
 
 
 
577
  .ha-review-header {
578
- margin-top: 1.5rem;
579
  }
580
-
581
  .ha-review-figure {
 
 
 
 
582
  margin: 0;
 
 
 
 
583
  }
584
  .ha-review-figure img {
585
- width: 100%;
586
  height: 100%;
587
  border-radius: 50%;
588
  vertical-align: bottom;
589
  }
590
-
591
  .ha-review-reviewer {
592
  margin-top: 0;
593
- margin-bottom: .3rem;
594
  color: #151515;
595
  font-size: 18px;
596
  }
597
-
598
  .ha-review-position {
599
- margin-bottom: .5rem;
600
  color: #7f7f7f;
601
  font-size: 15px;
602
  }
603
-
604
  .ha-review-ratting {
605
  display: inline-block;
606
  font-size: 12px;
607
  line-height: 1;
608
  }
609
-
610
  .ha-review-ratting--num {
611
- padding: .25em .66em;
612
- border-radius: 2.5em;
613
  background-color: #562dd4;
614
  color: #fff;
615
  }
616
-
617
  .ha-review-ratting--star {
618
  color: #ffbf36;
619
  }
620
-
621
  .ha-review-desc {
622
- margin-top: 1.5rem;
623
  font-size: 16px;
624
  line-height: 1.6;
625
  }
626
  .ha-review-desc p {
627
  margin: 0;
628
  }
629
-
630
  .ha-review--top > .elementor-widget-container {
631
- padding: 2rem;
632
  }
633
-
634
  .ha-review--top .ha-review-figure {
635
  display: inline-block;
636
- max-width: 70px;
637
  height: 70px;
638
  }
639
-
 
 
 
 
 
 
640
  .ha-review--left > .elementor-widget-container,
641
  .ha-review--right > .elementor-widget-container {
642
  display: -webkit-box;
@@ -647,59 +740,51 @@
647
  -webkit-align-items: center;
648
  align-items: center;
649
  -ms-flex-align: center;
650
- -webkit-box-orient: horizontal;
651
- -webkit-box-direction: normal;
652
- -webkit-flex-direction: row;
653
- -ms-flex-direction: row;
654
- flex-direction: row;
655
- padding-left: 2rem;
656
  }
657
-
658
  .ha-review--left .ha-review-figure,
659
  .ha-review--right .ha-review-figure {
660
- -webkit-box-flex: 0;
661
- -webkit-flex: 0 0 150px;
662
- -ms-flex: 0 0 150px;
663
- flex: 0 0 150px;
664
- max-width: 150px;
665
  height: 150px;
666
  }
667
-
668
  .ha-review--left .ha-review-body,
669
  .ha-review--right .ha-review-body {
670
- -webkit-box-flex: 0;
671
- -webkit-flex: 0 0 calc(100% - 150px);
672
- -ms-flex: 0 0 calc(100% - 150px);
673
- flex: 0 0 calc(100% - 150px);
674
- padding: 2rem;
675
- max-width: calc(100% - 150px);
676
  }
677
  .ha-review--left .ha-review-body > :first-child,
678
  .ha-review--right .ha-review-body > :first-child {
679
  margin-top: 0;
680
  }
681
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
682
  .ha-review--right > .elementor-widget-container {
683
  -webkit-box-orient: horizontal;
684
  -webkit-box-direction: reverse;
685
  -webkit-flex-direction: row-reverse;
686
  -ms-flex-direction: row-reverse;
687
  flex-direction: row-reverse;
688
- padding-right: 2rem;
689
- padding-left: 0;
690
  text-align: right;
691
  }
692
-
693
- .ha-card > .elementor-widget-container,
694
- .ha-infobox > .elementor-widget-container,
695
- .ha-icon-box > .elementor-widget-container,
696
- .ha-member > .elementor-widget-container,
697
- .ha-review > .elementor-widget-container,
698
- .ha-image-compare > .elementor-widget-container,
699
- .ha-pricing-table > .elementor-widget-container {
700
- border-radius: .5rem;
701
- background-color: #fff;
702
- box-shadow: 0 .2rem 2.8rem rgba(36, 36, 36, .1);
703
  }
704
 
705
  .ha-logo-grid-wrapper:after {
@@ -708,23 +793,17 @@
708
  content: "";
709
  }
710
 
 
 
 
 
 
 
711
  .ha-image-compare .twentytwenty-container,
712
  .ha-image-compare .twentytwenty-wrapper {
713
  border-radius: inherit;
714
  }
715
 
716
- .ha-card > .elementor-widget-container,
717
- .ha-infobox > .elementor-widget-container,
718
- .ha-icon-box > .elementor-widget-container,
719
- .ha-member > .elementor-widget-container,
720
- .ha-review > .elementor-widget-container,
721
- .ha-image-compare > .elementor-widget-container,
722
- .ha-pricing-table > .elementor-widget-container {
723
- border-radius: .5rem;
724
- background-color: #fff;
725
- box-shadow: 0 .2rem 2.8rem rgba(36, 36, 36, .1);
726
- }
727
-
728
  .ha-logo-grid-wrapper:after {
729
  display: block;
730
  clear: both;
@@ -771,18 +850,6 @@
771
  color: #fff;
772
  }
773
 
774
- .ha-card > .elementor-widget-container,
775
- .ha-infobox > .elementor-widget-container,
776
- .ha-icon-box > .elementor-widget-container,
777
- .ha-member > .elementor-widget-container,
778
- .ha-review > .elementor-widget-container,
779
- .ha-image-compare > .elementor-widget-container,
780
- .ha-pricing-table > .elementor-widget-container {
781
- border-radius: .5rem;
782
- background-color: #fff;
783
- box-shadow: 0 .2rem 2.8rem rgba(36, 36, 36, .1);
784
- }
785
-
786
  .ha-logo-grid-wrapper:after {
787
  display: block;
788
  clear: both;
@@ -814,18 +881,6 @@
814
  height: 100%;
815
  }
816
 
817
- .ha-card > .elementor-widget-container,
818
- .ha-infobox > .elementor-widget-container,
819
- .ha-icon-box > .elementor-widget-container,
820
- .ha-member > .elementor-widget-container,
821
- .ha-review > .elementor-widget-container,
822
- .ha-image-compare > .elementor-widget-container,
823
- .ha-pricing-table > .elementor-widget-container {
824
- border-radius: .5rem;
825
- background-color: #fff;
826
- box-shadow: 0 .2rem 2.8rem rgba(36, 36, 36, .1);
827
- }
828
-
829
  .ha-logo-grid-wrapper:after {
830
  display: block;
831
  clear: both;
@@ -878,18 +933,6 @@
878
  }
879
  }
880
 
881
- .ha-card > .elementor-widget-container,
882
- .ha-infobox > .elementor-widget-container,
883
- .ha-icon-box > .elementor-widget-container,
884
- .ha-member > .elementor-widget-container,
885
- .ha-review > .elementor-widget-container,
886
- .ha-image-compare > .elementor-widget-container,
887
- .ha-pricing-table > .elementor-widget-container {
888
- border-radius: .5rem;
889
- background-color: #fff;
890
- box-shadow: 0 .2rem 2.8rem rgba(36, 36, 36, .1);
891
- }
892
-
893
  .ha-logo-grid-wrapper:after {
894
  display: block;
895
  clear: both;
@@ -1029,18 +1072,6 @@
1029
  color: #fff;
1030
  }
1031
 
1032
- .ha-card > .elementor-widget-container,
1033
- .ha-infobox > .elementor-widget-container,
1034
- .ha-icon-box > .elementor-widget-container,
1035
- .ha-member > .elementor-widget-container,
1036
- .ha-review > .elementor-widget-container,
1037
- .ha-image-compare > .elementor-widget-container,
1038
- .ha-pricing-table > .elementor-widget-container {
1039
- border-radius: .5rem;
1040
- background-color: #fff;
1041
- box-shadow: 0 .2rem 2.8rem rgba(36, 36, 36, .1);
1042
- }
1043
-
1044
  .ha-logo-grid-wrapper:after {
1045
  display: block;
1046
  clear: both;
@@ -1126,18 +1157,6 @@
1126
  text-overflow: ellipsis;
1127
  }
1128
 
1129
- .ha-card > .elementor-widget-container,
1130
- .ha-infobox > .elementor-widget-container,
1131
- .ha-icon-box > .elementor-widget-container,
1132
- .ha-member > .elementor-widget-container,
1133
- .ha-review > .elementor-widget-container,
1134
- .ha-image-compare > .elementor-widget-container,
1135
- .ha-pricing-table > .elementor-widget-container {
1136
- border-radius: .5rem;
1137
- background-color: #fff;
1138
- box-shadow: 0 .2rem 2.8rem rgba(36, 36, 36, .1);
1139
- }
1140
-
1141
  .ha-logo-grid-wrapper:after {
1142
  display: block;
1143
  clear: both;
@@ -1153,18 +1172,6 @@
1153
  text-decoration: none;
1154
  }
1155
 
1156
- .ha-card > .elementor-widget-container,
1157
- .ha-infobox > .elementor-widget-container,
1158
- .ha-icon-box > .elementor-widget-container,
1159
- .ha-member > .elementor-widget-container,
1160
- .ha-review > .elementor-widget-container,
1161
- .ha-image-compare > .elementor-widget-container,
1162
- .ha-pricing-table > .elementor-widget-container {
1163
- border-radius: .5rem;
1164
- background-color: #fff;
1165
- box-shadow: 0 .2rem 2.8rem rgba(36, 36, 36, .1);
1166
- }
1167
-
1168
  .ha-logo-grid-wrapper:after {
1169
  display: block;
1170
  clear: both;
@@ -1624,18 +1631,6 @@
1624
  }
1625
  }
1626
 
1627
- .ha-card > .elementor-widget-container,
1628
- .ha-infobox > .elementor-widget-container,
1629
- .ha-icon-box > .elementor-widget-container,
1630
- .ha-member > .elementor-widget-container,
1631
- .ha-review > .elementor-widget-container,
1632
- .ha-image-compare > .elementor-widget-container,
1633
- .ha-pricing-table > .elementor-widget-container {
1634
- border-radius: .5rem;
1635
- background-color: #fff;
1636
- box-shadow: 0 .2rem 2.8rem rgba(36, 36, 36, .1);
1637
- }
1638
-
1639
  .ha-logo-grid-wrapper:after {
1640
  display: block;
1641
  clear: both;
@@ -1971,18 +1966,6 @@
1971
  }
1972
  }
1973
 
1974
- .ha-card > .elementor-widget-container,
1975
- .ha-infobox > .elementor-widget-container,
1976
- .ha-icon-box > .elementor-widget-container,
1977
- .ha-member > .elementor-widget-container,
1978
- .ha-review > .elementor-widget-container,
1979
- .ha-image-compare > .elementor-widget-container,
1980
- .ha-pricing-table > .elementor-widget-container {
1981
- border-radius: .5rem;
1982
- background-color: #fff;
1983
- box-shadow: 0 .2rem 2.8rem rgba(36, 36, 36, .1);
1984
- }
1985
-
1986
  .ha-logo-grid-wrapper:after {
1987
  display: block;
1988
  clear: both;
@@ -1990,23 +1973,23 @@
1990
  }
1991
 
1992
  .ha-testimonial--basic > .elementor-widget-container {
1993
- padding: 2rem;
1994
  border: 1px solid #ececec;
1995
- border-radius: .5rem;
1996
  }
1997
 
1998
  .ha-testimonial--basic .ha-testimonial__content {
1999
- margin-bottom: 2.5em;
2000
  }
2001
 
2002
  .ha-testimonial--bubble .ha-testimonial__content {
2003
  position: relative;
2004
- margin-bottom: 1.5rem;
2005
- padding: 2rem;
2006
  border-radius: 6px;
2007
- background-color: #fff;
2008
- box-shadow: 0 .2rem 2.8rem rgba(36, 36, 36, .1);
2009
- line-height: 1.6rem;
2010
  }
2011
  .ha-testimonial--bubble .ha-testimonial__content:after {
2012
  position: absolute;
@@ -2067,7 +2050,7 @@
2067
  object-fit: cover;
2068
  }
2069
  .ha-testimonial__reviewer-name {
2070
- margin-bottom: .3rem;
2071
  color: #562dd4;
2072
  font-weight: bold;
2073
  font-size: 18px;
@@ -2078,7 +2061,7 @@
2078
  }
2079
 
2080
  .ha-testimonial--left .ha-testimonial__reviewer-meta {
2081
- padding-left: 1em;
2082
  }
2083
 
2084
  .ha-testimonial--center .ha-testimonial__reviewer {
@@ -2089,7 +2072,7 @@
2089
  flex-direction: column;
2090
  }
2091
  .ha-testimonial--center .ha-testimonial__reviewer-meta {
2092
- padding-top: 1em;
2093
  max-width: 100%;
2094
  }
2095
 
@@ -2110,31 +2093,7 @@
2110
  flex-direction: row-reverse;
2111
  }
2112
  .ha-testimonial--right .ha-testimonial__reviewer-meta {
2113
- padding-right: 1em;
2114
- }
2115
-
2116
- .ha-testimonial--left {
2117
- text-align: left;
2118
- }
2119
-
2120
- .ha-testimonial--right {
2121
- text-align: right;
2122
- }
2123
-
2124
- .ha-testimonial--center {
2125
- text-align: center;
2126
- }
2127
-
2128
- .ha-card > .elementor-widget-container,
2129
- .ha-infobox > .elementor-widget-container,
2130
- .ha-icon-box > .elementor-widget-container,
2131
- .ha-member > .elementor-widget-container,
2132
- .ha-review > .elementor-widget-container,
2133
- .ha-image-compare > .elementor-widget-container,
2134
- .ha-pricing-table > .elementor-widget-container {
2135
- border-radius: .5rem;
2136
- background-color: #fff;
2137
- box-shadow: 0 .2rem 2.8rem rgba(36, 36, 36, .1);
2138
  }
2139
 
2140
  .ha-logo-grid-wrapper:after {
@@ -2181,18 +2140,6 @@
2181
  flex: 1;
2182
  }
2183
 
2184
- .ha-card > .elementor-widget-container,
2185
- .ha-infobox > .elementor-widget-container,
2186
- .ha-icon-box > .elementor-widget-container,
2187
- .ha-member > .elementor-widget-container,
2188
- .ha-review > .elementor-widget-container,
2189
- .ha-image-compare > .elementor-widget-container,
2190
- .ha-pricing-table > .elementor-widget-container {
2191
- border-radius: .5rem;
2192
- background-color: #fff;
2193
- box-shadow: 0 .2rem 2.8rem rgba(36, 36, 36, .1);
2194
- }
2195
-
2196
  .ha-logo-grid-wrapper:after {
2197
  display: block;
2198
  clear: both;
@@ -2431,18 +2378,6 @@
2431
  transition: transform .6s cubic-bezier(.2, .85, .4, 1.275), -webkit-transform .6s cubic-bezier(.2, .85, .4, 1.275);
2432
  }
2433
 
2434
- .ha-card > .elementor-widget-container,
2435
- .ha-infobox > .elementor-widget-container,
2436
- .ha-icon-box > .elementor-widget-container,
2437
- .ha-member > .elementor-widget-container,
2438
- .ha-review > .elementor-widget-container,
2439
- .ha-image-compare > .elementor-widget-container,
2440
- .ha-pricing-table > .elementor-widget-container {
2441
- border-radius: .5rem;
2442
- background-color: #fff;
2443
- box-shadow: 0 .2rem 2.8rem rgba(36, 36, 36, .1);
2444
- }
2445
-
2446
  .ha-logo-grid-wrapper:after {
2447
  display: block;
2448
  clear: both;
@@ -2451,8 +2386,11 @@
2451
 
2452
  .ha-pricing-table > .elementor-widget-container {
2453
  position: relative;
2454
- overflow: hidden;
2455
  padding: 3em 4em;
 
 
 
2456
  }
2457
 
2458
  .ha-pricing-table-badge {
@@ -2563,36 +2501,35 @@
2563
  color: #fff;
2564
  }
2565
 
2566
- .ha-card > .elementor-widget-container,
2567
- .ha-infobox > .elementor-widget-container,
2568
- .ha-icon-box > .elementor-widget-container,
2569
- .ha-member > .elementor-widget-container,
2570
- .ha-review > .elementor-widget-container,
2571
- .ha-image-compare > .elementor-widget-container,
2572
- .ha-pricing-table > .elementor-widget-container {
2573
- border-radius: .5rem;
2574
- background-color: #fff;
2575
- box-shadow: 0 .2rem 2.8rem rgba(36, 36, 36, .1);
2576
- }
2577
-
2578
  .ha-logo-grid-wrapper:after {
2579
  display: block;
2580
  clear: both;
2581
  content: "";
2582
  }
2583
 
 
 
 
 
 
2584
  .ha-step-flow > .elementor-widget-container {
2585
- padding: 30px;
2586
  text-align: center;
2587
  }
2588
 
2589
  .ha-step-arrow {
2590
  position: absolute;
2591
  top: 49%;
2592
- left: calc( 100% + 20px);
2593
  display: inline-block;
2594
  width: 100px;
2595
  border-top: 1px solid #ddd;
 
 
 
 
 
 
2596
  }
2597
  .ha-step-arrow:after {
2598
  position: absolute;
@@ -2617,7 +2554,6 @@
2617
  padding: 40px;
2618
  border-radius: 50%;
2619
  background-color: #e9ecf0;
2620
- box-shadow: 0 2px 6px -2px #989898;
2621
  color: #8056ee;
2622
  text-align: center;
2623
  font-size: 46px;
@@ -2641,7 +2577,7 @@
2641
  top: 5px;
2642
  right: 0;
2643
  overflow: hidden;
2644
- padding: 12px 8px;
2645
  max-width: 200%;
2646
  border: 3px solid #fff;
2647
  border-radius: 20px;
@@ -3305,6 +3241,11 @@ span.ha-post-list-icon svg {
3305
  margin-right: 3px;
3306
  }
3307
 
 
 
 
 
 
3308
  .ha-post-tab .ha-post-tab-filter {
3309
  padding: 0;
3310
  border-bottom: 1px solid #ddd;
@@ -3712,3 +3653,283 @@ span.ha-threesixty-rotation-magnify {
3712
  -webkit-transition: all .5s ease 0s;
3713
  transition: all .5s ease 0s;
3714
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  .ha-logo-grid-wrapper:after {
2
  display: block;
3
  clear: both;
4
  content: "";
5
  }
6
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  .ha-logo-grid-wrapper:after {
8
  display: block;
9
  clear: both;
10
  content: "";
11
  }
12
 
13
+ .elementor-widget {
14
+ -webkit-transition-duration: var(--ha-tfx-transition-duration, .2s);
15
+ transition-duration: var(--ha-tfx-transition-duration, .2s);
16
+ -webkit-transition-property: -webkit-transform;
17
+ transition-property: -webkit-transform;
18
+ transition-property: transform;
19
+ transition-property: transform, -webkit-transform;
20
+ -webkit-transform: translate(var(--ha-tfx-translate-x, 0), var(--ha-tfx-translate-y, 0)) scale(var(--ha-tfx-scale-x, 1), var(--ha-tfx-scale-y, 1)) skew(var(--ha-tfx-skew-x, 0), var(--ha-tfx-skew-y, 0)) rotateX(var(--ha-tfx-rotate-x, 0)) rotateY(var(--ha-tfx-rotate-y, 0)) rotateZ(var(--ha-tfx-rotate-z, 0));
21
+ transform: translate(var(--ha-tfx-translate-x, 0), var(--ha-tfx-translate-y, 0)) scale(var(--ha-tfx-scale-x, 1), var(--ha-tfx-scale-y, 1)) skew(var(--ha-tfx-skew-x, 0), var(--ha-tfx-skew-y, 0)) rotateX(var(--ha-tfx-rotate-x, 0)) rotateY(var(--ha-tfx-rotate-y, 0)) rotateZ(var(--ha-tfx-rotate-z, 0));
22
+ }
23
+ .elementor-widget:hover {
24
+ -webkit-transform: translate(var(--ha-tfx-translate-x-hover, 0), var(--ha-tfx-translate-y-hover, 0)) scale(var(--ha-tfx-scale-x-hover, 1), var(--ha-tfx-scale-y-hover, 1)) skew(var(--ha-tfx-skew-x-hover, 0), var(--ha-tfx-skew-y-hover, 0)) rotateX(var(--ha-tfx-rotate-x-hover, 0)) rotateY(var(--ha-tfx-rotate-y-hover, 0)) rotateZ(var(--ha-tfx-rotate-z-hover, 0));
25
+ transform: translate(var(--ha-tfx-translate-x-hover, 0), var(--ha-tfx-translate-y-hover, 0)) scale(var(--ha-tfx-scale-x-hover, 1), var(--ha-tfx-scale-y-hover, 1)) skew(var(--ha-tfx-skew-x-hover, 0), var(--ha-tfx-skew-y-hover, 0)) rotateX(var(--ha-tfx-rotate-x-hover, 0)) rotateY(var(--ha-tfx-rotate-y-hover, 0)) rotateZ(var(--ha-tfx-rotate-z-hover, 0));
26
+ }
27
+
28
  .happy-addon > .elementor-widget-container {
29
  word-wrap: break-word;
30
 
47
  display: none;
48
  }
49
 
50
+ .happy-addon .elementor-inline-editing {
51
+ min-height: auto !important;
52
+ }
53
+
54
  .ha-screen-reader-text {
55
  position: absolute;
56
  overflow: hidden;
95
  outline-width: thin;
96
  }
97
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  .ha-logo-grid-wrapper:after {
99
  display: block;
100
  clear: both;
114
  }
115
  .ha-btn:not(.ha-btn--link) {
116
  padding: 15px 25px;
117
+ border-radius: 5px;
118
  background-color: #562dd4;
119
  color: #fff;
120
  }
142
  }
143
 
144
  .ha-badge {
145
+ padding: 10px 18px;
 
146
  border-radius: 50px;
147
  background-color: #fff;
148
  font-size: 12px;
149
+ line-height: 1;
150
+ -webkit-transform: translate(var(--ha-badge-translate-x), var(--ha-badge-translate-y));
151
+ -ms-transform: translate(var(--ha-badge-translate-x), var(--ha-badge-translate-y));
152
+ transform: translate(var(--ha-badge-translate-x), var(--ha-badge-translate-y));
153
+
154
+ --ha-badge-translate-x: 0;
155
+ --ha-badge-translate-y: 0;
156
  }
157
  .ha-badge--top-left {
158
+ top: 25px;
159
+ left: 25px;
160
  }
161
  .ha-badge--top-center {
162
+ top: 25px;
163
  left: 50%;
164
+
165
+ --ha-badge-translate-x: -50%;
 
166
  }
167
  .ha-badge--top-right {
168
+ top: 25px;
169
+ right: 25px;
170
  }
171
  .ha-badge--middle-left {
172
  top: 50%;
173
+ left: 25px;
174
+
175
+ --ha-badge-translate-x: -50%;
 
176
  }
177
  .ha-badge--middle-center {
178
  top: 50%;
179
  left: 50%;
180
+
181
+ --ha-badge-translate-x: -50%;
182
+ --ha-badge-translate-y: -50%;
183
  }
184
  .ha-badge--middle-right {
185
  top: 50%;
186
+ right: 25px;
187
+
188
+ --ha-badge-translate-y: -50%;
 
189
  }
190
  .ha-badge--bottom-left {
191
+ bottom: 25px;
192
+ left: 25px;
193
  }
194
  .ha-badge--bottom-center {
195
+ bottom: 25px;
196
  left: 50%;
197
+
198
+ --ha-badge-translate-x: -50%;
 
199
  }
200
  .ha-badge--bottom-right {
201
+ right: 25px;
202
+ bottom: 25px;
 
 
 
 
 
 
 
 
 
 
 
 
203
  }
204
 
205
  .ha-logo-grid-wrapper:after {
208
  content: "";
209
  }
210
 
211
+ .ha-card {
212
+ --ha-card-body-width-left: calc(100% - var(--ha-card-image-width) + (-1 * var(--ha-card-image-offset-x)));
213
+ --ha-card-body-width-right: calc(100% - var(--ha-card-image-width) + var(--ha-card-image-offset-x));
214
+ --ha-card-image-offset-x: calc(1px - 1px);
215
+ --ha-card-image-offset-y: calc(1px - 1px);
216
+ --ha-card-image-width: 100%;
217
+ }
218
+
219
+ .ha-card > .elementor-widget-container {
220
+ border-radius: 5px;
221
+ background-color: #fff;
222
+ box-shadow: 0 3px 40px rgba(36, 36, 36, .1);
223
+ }
224
+
225
  .ha-card-figure {
226
  position: relative;
227
+ -webkit-box-flex: 0;
228
+ -webkit-flex: 0 0 var(--ha-card-image-width);
229
+ -ms-flex: 0 0 var(--ha-card-image-width);
230
+ flex: 0 0 var(--ha-card-image-width);
231
+ max-width: var(--ha-card-image-width);
232
  height: 250px;
233
+ -webkit-transform: translate(var(--ha-card-image-offset-x), var(--ha-card-image-offset-y));
234
+ -ms-transform: translate(var(--ha-card-image-offset-x), var(--ha-card-image-offset-y));
235
+ transform: translate(var(--ha-card-image-offset-x), var(--ha-card-image-offset-y));
236
  }
237
  .ha-card-figure img {
238
  width: 100%;
239
  height: 100%;
 
 
240
  vertical-align: bottom;
241
  }
242
 
243
  .ha-card-body {
244
+ padding: 25px;
245
  }
246
 
247
  .ha-card-title {
248
  margin-top: 0;
249
+ margin-bottom: 10px;
250
  color: #151515;
251
  font-weight: 700;
252
  font-size: 22px;
253
  }
254
 
255
  .ha-card-text {
256
+ margin-bottom: 25px;
257
  color: #616161;
258
  font-size: 16px;
259
  line-height: 1.7;
265
 
266
  .ha-card--top .ha-card-figure {
267
  display: inline-block;
268
+ }
269
+ .ha-card--top .ha-card-figure img {
270
+ border-radius: 5px 5px 0 0;
271
+ }
272
+
273
+ .ha-card--top .ha-card-body {
274
+ margin-top: var(--ha-card-image-offset-y);
275
+ max-width: initial;
276
  width: 100%;
277
  }
278
 
279
+ .ha-card--right,
280
+ .ha-card--left {
281
+ --ha-card-image-width: 50%;
282
+ }
283
  .ha-card--right > .elementor-widget-container,
284
  .ha-card--left > .elementor-widget-container {
285
  display: -webkit-box;
290
  -webkit-align-items: center;
291
  align-items: center;
292
  -ms-flex-align: center;
 
 
 
 
 
293
  }
294
+ .ha-card--right .ha-card-body,
295
+ .ha-card--left .ha-card-body {
296
+ padding: 35px;
 
 
 
 
 
297
  }
298
 
 
299
  .ha-card--left .ha-card-body {
300
  -webkit-box-flex: 0;
301
+ -webkit-flex: 0 0 var(--ha-card-body-width-left);
302
+ -ms-flex: 0 0 var(--ha-card-body-width-left);
303
+ flex: 0 0 var(--ha-card-body-width-left);
304
+ margin-left: var(--ha-card-image-offset-x);
305
+ max-width: var(--ha-card-body-width-left);
306
  }
307
 
308
  .ha-card--left .ha-card-figure img {
309
+ border-radius: 5px 0 0 5px;
310
  }
311
 
312
+ .ha-card--right .ha-card-body {
313
+ -webkit-box-flex: 0;
314
+ -webkit-flex: 0 0 var(--ha-card-body-width-right);
315
+ -ms-flex: 0 0 var(--ha-card-body-width-right);
316
+ flex: 0 0 var(--ha-card-body-width-right);
317
+ margin-right: calc(-1 * var(--ha-card-image-offset-x));
318
+ max-width: var(--ha-card-body-width-right);
319
  }
320
 
321
  .ha-card--right .ha-card-figure img {
322
+ border-radius: 0 5px 5px 0;
323
  }
324
 
325
+ @media (max-width: 1024px) {
326
+ .ha-card--tablet-top {
327
+ --ha-card-image-width: 100%;
328
+ }
329
+ .ha-card--tablet-top .ha-card-figure {
330
+ display: inline-block;
331
+ }
332
+ .ha-card--tablet-top .ha-card-figure img {
333
+ border-radius: 5px 5px 0 0;
334
+ }
335
+ .ha-card--tablet-top .ha-card-body {
336
+ margin-top: var(--ha-card-image-offset-y);
337
+ padding: 25px;
338
+ max-width: initial;
339
+ width: 100%;
340
+ }
341
+ .ha-card--tablet-right,
342
+ .ha-card--tablet-left {
343
+ --ha-card-image-width: 50%;
344
+ }
345
+ .ha-card--tablet-right > .elementor-widget-container,
346
+ .ha-card--tablet-left > .elementor-widget-container {
347
+ display: -webkit-box;
348
+ display: -webkit-flex;
349
+ display: -ms-flexbox;
350
+ display: flex;
351
+ -webkit-box-align: center;
352
+ -webkit-align-items: center;
353
+ align-items: center;
354
+ -ms-flex-align: center;
355
+ }
356
+ .ha-card--tablet-left .ha-card-body {
357
+ -webkit-box-flex: 0;
358
+ -webkit-flex: 0 0 var(--ha-card-body-width-left);
359
+ -ms-flex: 0 0 var(--ha-card-body-width-left);
360
+ flex: 0 0 var(--ha-card-body-width-left);
361
+ margin-left: var(--ha-card-image-offset-x);
362
+ max-width: var(--ha-card-body-width-left);
363
+ }
364
+ .ha-card--tablet-left .ha-card-figure img {
365
+ border-radius: 5px 0 0 5px;
366
+ }
367
+ .ha-card--tablet-right .ha-card-body {
368
+ -webkit-box-flex: 0;
369
+ -webkit-flex: 0 0 var(--ha-card-body-width-right);
370
+ -ms-flex: 0 0 var(--ha-card-body-width-right);
371
+ flex: 0 0 var(--ha-card-body-width-right);
372
+ margin-right: calc(-1 * var(--ha-card-image-offset-x));
373
+ max-width: var(--ha-card-body-width-right);
374
+ }
375
+ .ha-card--tablet-right .ha-card-figure img {
376
+ border-radius: 0 5px 5px 0;
377
+ }
378
  }
379
 
380
+ @media (max-width: 767px) {
381
+ .ha-card--tablet-top {
382
+ --ha-card-image-width: 100%;
383
+ }
384
+ .ha-card--tablet-top .ha-card-figure {
385
+ display: inline-block;
386
+ }
387
+ .ha-card--tablet-top .ha-card-figure img {
388
+ border-radius: 5px 5px 0 0;
389
+ }
390
+ .ha-card--tablet-top .ha-card-body {
391
+ margin-top: var(--ha-card-image-offset-y);
392
+ padding: 25px;
393
+ max-width: initial;
394
+ width: 100%;
395
+ }
396
+ .ha-card--mobile-right,
397
+ .ha-card--mobile-left {
398
+ --ha-card-image-width: 50%;
399
+ }
400
+ .ha-card--mobile-right > .elementor-widget-container,
401
+ .ha-card--mobile-left > .elementor-widget-container {
402
+ display: -webkit-box;
403
+ display: -webkit-flex;
404
+ display: -ms-flexbox;
405
+ display: flex;
406
+ -webkit-box-align: center;
407
+ -webkit-align-items: center;
408
+ align-items: center;
409
+ -ms-flex-align: center;
410
+ }
411
+ .ha-card--mobile-left .ha-card-body {
412
+ -webkit-box-flex: 0;
413
+ -webkit-flex: 0 0 var(--ha-card-body-width-left);
414
+ -ms-flex: 0 0 var(--ha-card-body-width-left);
415
+ flex: 0 0 var(--ha-card-body-width-left);
416
+ margin-left: var(--ha-card-image-offset-x);
417
+ max-width: var(--ha-card-body-width-left);
418
+ }
419
+ .ha-card--mobile-left .ha-card-figure img {
420
+ border-radius: 5px 0 0 5px;
421
+ }
422
+ .ha-card--mobile-right .ha-card-body {
423
+ -webkit-box-flex: 0;
424
+ -webkit-flex: 0 0 var(--ha-card-body-width-right);
425
+ -ms-flex: 0 0 var(--ha-card-body-width-right);
426
+ flex: 0 0 var(--ha-card-body-width-right);
427
+ margin-right: calc(-1 * var(--ha-card-image-offset-x));
428
+ max-width: var(--ha-card-body-width-right);
429
+ }
430
+ .ha-card--mobile-right .ha-card-figure img {
431
+ border-radius: 0 5px 5px 0;
432
+ }
433
+ }
434
+
435
+ .ha-card .ha-badge {
436
+ position: absolute;
437
  }
438
 
439
  .ha-logo-grid-wrapper:after {
442
  content: "";
443
  }
444
 
445
+ .ha-infobox {
446
+ --ha-infobox-media-offset-x: 0;
447
+ --ha-infobox-media-offset-y: 0;
448
+ --ha-infobox-media-rotate: 0;
449
+ }
450
  .ha-infobox > .elementor-widget-container {
451
+ padding: 25px;
452
+ border-radius: 5px;
453
+ background-color: #fff;
454
+ box-shadow: 0 3px 40px rgba(36, 36, 36, .1);
455
  }
 
456
  .ha-infobox-title {
457
  margin-top: 0;
458
+ margin-bottom: 10px;
459
  color: #151515;
460
  font-size: 24px;
461
  }
 
462
  .ha-infobox-figure {
463
  display: inline-block;
464
+ margin: 0 0 25px !important;
465
+ -webkit-transform: translate(var(--ha-infobox-media-offset-x), var(--ha-infobox-media-offset-y));
466
+ -ms-transform: translate(var(--ha-infobox-media-offset-x), var(--ha-infobox-media-offset-y));
467
+ transform: translate(var(--ha-infobox-media-offset-x), var(--ha-infobox-media-offset-y));
468
  }
469
  .ha-infobox-figure--icon {
470
  text-align: center;
471
+ font-size: 48px;
472
  line-height: 1;
473
+ -webkit-transform: translate(var(--ha-infobox-media-offset-x), var(--ha-infobox-media-offset-y)) rotate(var(--ha-infobox-media-rotate));
474
+ -ms-transform: translate(var(--ha-infobox-media-offset-x), var(--ha-infobox-media-offset-y)) rotate(var(--ha-infobox-media-rotate));
475
+ transform: translate(var(--ha-infobox-media-offset-x), var(--ha-infobox-media-offset-y)) rotate(var(--ha-infobox-media-rotate));
476
  }
477
  .ha-infobox-figure i,
478
  .ha-infobox-figure svg {
479
  position: relative;
480
+ display: block;
481
  width: 1em;
482
  height: 1em;
483
+ -webkit-transform: rotate(calc(-1 * var(--ha-infobox-media-rotate)));
484
+ -ms-transform: rotate(calc(-1 * var(--ha-infobox-media-rotate)));
485
+ transform: rotate(calc(-1 * var(--ha-infobox-media-rotate)));
486
  }
487
  .ha-infobox-figure i:before {
488
  position: absolute;
496
  height: 100%;
497
  vertical-align: bottom;
498
  }
499
+ .ha-infobox-body {
500
+ margin-top: var(--ha-infobox-media-offset-y);
501
+ }
502
  .ha-infobox-text p {
503
  margin-top: 0;
504
  margin-bottom: 0;
505
  }
 
506
  .ha-infobox-text + .ha-btn--link {
507
+ margin-top: 25px;
 
 
 
 
 
 
 
 
 
 
 
 
508
  }
509
 
510
  .ha-logo-grid-wrapper:after {
515
 
516
  .ha-icon-box > .elementor-widget-container {
517
  position: relative;
518
+ padding: 25px;
519
+ border-radius: 5px;
520
+ background-color: #fff;
521
+ box-shadow: 0 3px 40px rgba(36, 36, 36, .1);
522
  }
523
 
524
  .ha-icon-box-title {
532
 
533
  .ha-icon-box-icon {
534
  display: inline-block;
535
+ margin-bottom: 20px;
536
  color: #151515;
537
  text-align: center;
538
+ font-size: 48px;
539
  -webkit-transition: border .3s, background .3s, color .3s, -webkit-transform .3s;
540
  transition: border .3s, background .3s, color .3s, -webkit-transform .3s;
541
  transition: transform .3s, border .3s, background .3s, color .3s;
575
  color: #fff;
576
  }
577
 
 
 
 
 
 
 
 
 
 
 
 
 
578
  .ha-logo-grid-wrapper:after {
579
  display: block;
580
  clear: both;
582
  }
583
 
584
  .ha-member > .elementor-widget-container {
585
+ padding: 25px;
586
+ border-radius: 5px;
587
+ background-color: #fff;
588
+ box-shadow: 0 3px 40px rgba(36, 36, 36, .1);
589
  }
590
 
591
  .ha-member-figure {
592
  display: inline-block;
593
+ margin: 0 0 25px !important;
594
  }
595
  .ha-member-figure img {
596
  width: 100%;
600
 
601
  .ha-member-name {
602
  margin-top: 0;
603
+ margin-bottom: 10px;
604
  color: #151515;
605
  font-size: 18px;
606
  }
607
 
608
  .ha-member-position {
609
+ margin-bottom: 25px;
610
  color: #7f7f7f;
611
  font-size: 14px;
612
  }
613
 
614
  .ha-member-bio {
615
+ margin-bottom: 25px;
616
  font-size: 14px;
617
  line-height: 1.6;
618
  }
634
  height: 1em;
635
  }
636
  .ha-member-links > a:not(:last-child) {
637
+ margin-right: 10px;
638
  }
639
 
640
  .ha-member .ha-btn {
641
+ margin-bottom: 15px;
642
  }
643
 
644
+ .ha-member-body .ha-btn:last-child {
645
+ margin-top: 15px;
646
  margin-bottom: 0;
647
  }
648
 
 
 
 
 
 
 
 
 
 
 
 
 
649
  .ha-logo-grid-wrapper:after {
650
  display: block;
651
  clear: both;
652
  content: "";
653
  }
654
 
655
+ .ha-review {
656
+ --ha-review-left-body-width: calc(100% - var(--ha-review-media-width) + (-1 * var(--ha-review-media-offset-x)));
657
+ --ha-review-media-offset-x: calc(1px - 1px);
658
+ --ha-review-media-offset-y: calc(1px - 1px);
659
+ --ha-review-right-body-width: calc(100% - var(--ha-review-media-width) + (var(--ha-review-media-offset-x)));
660
+ }
661
+ .ha-review > .elementor-widget-container {
662
+ border-radius: 5px;
663
+ background-color: #fff;
664
+ box-shadow: 0 3px 40px rgba(36, 36, 36, .1);
665
+ }
666
  .ha-review-header {
667
+ margin-top: 25px;
668
  }
 
669
  .ha-review-figure {
670
+ -webkit-box-flex: 0;
671
+ -webkit-flex: 0 0 var(--ha-review-media-width, 70px);
672
+ -ms-flex: 0 0 var(--ha-review-media-width, 70px);
673
+ flex: 0 0 var(--ha-review-media-width, 70px);
674
  margin: 0;
675
+ max-width: var(--ha-review-media-width, 70px);
676
+ -webkit-transform: translate(var(--ha-review-media-offset-x), var(--ha-review-media-offset-y));
677
+ -ms-transform: translate(var(--ha-review-media-offset-x), var(--ha-review-media-offset-y));
678
+ transform: translate(var(--ha-review-media-offset-x), var(--ha-review-media-offset-y));
679
  }
680
  .ha-review-figure img {
681
+ width: 100%;
682
  height: 100%;
683
  border-radius: 50%;
684
  vertical-align: bottom;
685
  }
 
686
  .ha-review-reviewer {
687
  margin-top: 0;
688
+ margin-bottom: 10px;
689
  color: #151515;
690
  font-size: 18px;
691
  }
 
692
  .ha-review-position {
693
+ margin-bottom: 10px;
694
  color: #7f7f7f;
695
  font-size: 15px;
696
  }
 
697
  .ha-review-ratting {
698
  display: inline-block;
699
  font-size: 12px;
700
  line-height: 1;
701
  }
 
702
  .ha-review-ratting--num {
703
+ padding: 5px 10px;
704
+ border-radius: 20px;
705
  background-color: #562dd4;
706
  color: #fff;
707
  }
 
708
  .ha-review-ratting--star {
709
  color: #ffbf36;
710
  }
 
711
  .ha-review-desc {
712
+ margin-top: 25px;
713
  font-size: 16px;
714
  line-height: 1.6;
715
  }
716
  .ha-review-desc p {
717
  margin: 0;
718
  }
 
719
  .ha-review--top > .elementor-widget-container {
720
+ padding: 25px;
721
  }
 
722
  .ha-review--top .ha-review-figure {
723
  display: inline-block;
 
724
  height: 70px;
725
  }
726
+ .ha-review--top .ha-review-body {
727
+ margin-top: var(--ha-review-media-offset-y);
728
+ }
729
+ .ha-review--left,
730
+ .ha-review--right {
731
+ --ha-review-media-width: 150px;
732
+ }
733
  .ha-review--left > .elementor-widget-container,
734
  .ha-review--right > .elementor-widget-container {
735
  display: -webkit-box;
740
  -webkit-align-items: center;
741
  align-items: center;
742
  -ms-flex-align: center;
 
 
 
 
 
 
743
  }
 
744
  .ha-review--left .ha-review-figure,
745
  .ha-review--right .ha-review-figure {
 
 
 
 
 
746
  height: 150px;
747
  }
 
748
  .ha-review--left .ha-review-body,
749
  .ha-review--right .ha-review-body {
750
+ padding: 25px;
 
 
 
 
 
751
  }
752
  .ha-review--left .ha-review-body > :first-child,
753
  .ha-review--right .ha-review-body > :first-child {
754
  margin-top: 0;
755
  }
756
+ .ha-review--left > .elementor-widget-container {
757
+ -webkit-box-orient: horizontal;
758
+ -webkit-box-direction: normal;
759
+ -webkit-flex-direction: row;
760
+ -ms-flex-direction: row;
761
+ flex-direction: row;
762
+ padding-left: 25px;
763
+ }
764
+ .ha-review--left .ha-review-body {
765
+ -webkit-box-flex: 0;
766
+ -webkit-flex: 0 0 var(--ha-review-left-body-width);
767
+ -ms-flex: 0 0 var(--ha-review-left-body-width);
768
+ flex: 0 0 var(--ha-review-left-body-width);
769
+ margin-left: var(--ha-review-media-offset-x);
770
+ max-width: var(--ha-review-left-body-width);
771
+ }
772
  .ha-review--right > .elementor-widget-container {
773
  -webkit-box-orient: horizontal;
774
  -webkit-box-direction: reverse;
775
  -webkit-flex-direction: row-reverse;
776
  -ms-flex-direction: row-reverse;
777
  flex-direction: row-reverse;
778
+ padding-right: 25px;
 
779
  text-align: right;
780
  }
781
+ .ha-review--right .ha-review-body {
782
+ -webkit-box-flex: 0;
783
+ -webkit-flex: 0 0 var(--ha-review-right-body-width);
784
+ -ms-flex: 0 0 var(--ha-review-right-body-width);
785
+ flex: 0 0 var(--ha-review-right-body-width);
786
+ margin-right: calc(-1 * var(--ha-review-media-offset-x));
787
+ max-width: var(--ha-review-right-body-width);
 
 
 
 
788
  }
789
 
790
  .ha-logo-grid-wrapper:after {
793
  content: "";
794
  }
795
 
796
+ .ha-image-compare > .elementor-widget-container {
797
+ border-radius: 5px;
798
+ background-color: #fff;
799
+ box-shadow: 0 3px 40px rgba(36, 36, 36, .1);
800
+ }
801
+
802
  .ha-image-compare .twentytwenty-container,
803
  .ha-image-compare .twentytwenty-wrapper {
804
  border-radius: inherit;
805
  }
806
 
 
 
 
 
 
 
 
 
 
 
 
 
807
  .ha-logo-grid-wrapper:after {
808
  display: block;
809
  clear: both;
850
  color: #fff;
851
  }
852
 
 
 
 
 
 
 
 
 
 
 
 
 
853
  .ha-logo-grid-wrapper:after {
854
  display: block;
855
  clear: both;
881
  height: 100%;
882
  }
883
 
 
 
 
 
 
 
 
 
 
 
 
 
884
  .ha-logo-grid-wrapper:after {
885
  display: block;
886
  clear: both;
933
  }
934
  }
935
 
 
 
 
 
 
 
 
 
 
 
 
 
936
  .ha-logo-grid-wrapper:after {
937
  display: block;
938
  clear: both;
1072
  color: #fff;
1073
  }
1074
 
 
 
 
 
 
 
 
 
 
 
 
 
1075
  .ha-logo-grid-wrapper:after {
1076
  display: block;
1077
  clear: both;
1157
  text-overflow: ellipsis;
1158
  }
1159
 
 
 
 
 
 
 
 
 
 
 
 
 
1160
  .ha-logo-grid-wrapper:after {
1161
  display: block;
1162
  clear: both;
1172
  text-decoration: none;
1173
  }
1174
 
 
 
 
 
 
 
 
 
 
 
 
 
1175
  .ha-logo-grid-wrapper:after {
1176
  display: block;
1177
  clear: both;
1631
  }
1632
  }
1633
 
 
 
 
 
 
 
 
 
 
 
 
 
1634
  .ha-logo-grid-wrapper:after {
1635
  display: block;
1636
  clear: both;
1966
  }
1967
  }
1968
 
 
 
 
 
 
 
 
 
 
 
 
 
1969
  .ha-logo-grid-wrapper:after {
1970
  display: block;
1971
  clear: both;
1973
  }
1974
 
1975
  .ha-testimonial--basic > .elementor-widget-container {
1976
+ padding: 25px;
1977
  border: 1px solid #ececec;
1978
+ border-radius: 5px;
1979
  }
1980
 
1981
  .ha-testimonial--basic .ha-testimonial__content {
1982
+ margin-bottom: 25px;
1983
  }
1984
 
1985
  .ha-testimonial--bubble .ha-testimonial__content {
1986
  position: relative;
1987
+ margin-bottom: 25px;
1988
+ padding: 25px;
1989
  border-radius: 6px;
1990
+ background-color: #fff;
1991
+ box-shadow: 0 .2rem 2.8rem rgba(36, 36, 36, .1);
1992
+ line-height: 1.6;
1993
  }
1994
  .ha-testimonial--bubble .ha-testimonial__content:after {
1995
  position: absolute;
2050
  object-fit: cover;
2051
  }
2052
  .ha-testimonial__reviewer-name {
2053
+ margin-bottom: 10px;
2054
  color: #562dd4;
2055
  font-weight: bold;
2056
  font-size: 18px;
2061
  }
2062
 
2063
  .ha-testimonial--left .ha-testimonial__reviewer-meta {
2064
+ padding-left: 25px;
2065
  }
2066
 
2067
  .ha-testimonial--center .ha-testimonial__reviewer {
2072
  flex-direction: column;
2073
  }
2074
  .ha-testimonial--center .ha-testimonial__reviewer-meta {
2075
+ padding-top: 15px;
2076
  max-width: 100%;
2077
  }
2078
 
2093
  flex-direction: row-reverse;
2094
  }
2095
  .ha-testimonial--right .ha-testimonial__reviewer-meta {
2096
+ padding-right: 25px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2097
  }
2098
 
2099
  .ha-logo-grid-wrapper:after {
2140
  flex: 1;
2141
  }
2142
 
 
 
 
 
 
 
 
 
 
 
 
 
2143
  .ha-logo-grid-wrapper:after {
2144
  display: block;
2145
  clear: both;
2378
  transition: transform .6s cubic-bezier(.2, .85, .4, 1.275), -webkit-transform .6s cubic-bezier(.2, .85, .4, 1.275);
2379
  }
2380
 
 
 
 
 
 
 
 
 
 
 
 
 
2381
  .ha-logo-grid-wrapper:after {
2382
  display: block;
2383
  clear: both;
2386
 
2387
  .ha-pricing-table > .elementor-widget-container {
2388
  position: relative;
2389
+ overflow: hidden;
2390
  padding: 3em 4em;
2391
+ border-radius: 5px;
2392
+ background-color: #fff;
2393
+ box-shadow: 0 3px 40px rgba(36, 36, 36, .1);
2394
  }
2395
 
2396
  .ha-pricing-table-badge {
2501
  color: #fff;
2502
  }
2503
 
 
 
 
 
 
 
 
 
 
 
 
 
2504
  .ha-logo-grid-wrapper:after {
2505
  display: block;
2506
  clear: both;
2507
  content: "";
2508
  }
2509
 
2510
+ .ha-step-flow {
2511
+ --ha-stepflow-direction-origin-x: calc(-1 * ((var(--ha-stepflow-icon-size, 46px) / 2)
2512
+ + var(--ha-stepflow-icon-padding, 40px)
2513
+ + var(--ha-stepflow-direction-offset-x, 20px)));
2514
+ }
2515
  .ha-step-flow > .elementor-widget-container {
2516
+ padding: 25px;
2517
  text-align: center;
2518
  }
2519
 
2520
  .ha-step-arrow {
2521
  position: absolute;
2522
  top: 49%;
2523
+ left: calc( 100% + 20px);
2524
  display: inline-block;
2525
  width: 100px;
2526
  border-top: 1px solid #ddd;
2527
+ -webkit-transform: rotate(var(--ha-stepflow-direction-angle, 0));
2528
+ -ms-transform: rotate(var(--ha-stepflow-direction-angle, 0));
2529
+ transform: rotate(var(--ha-stepflow-direction-angle, 0));
2530
+ -webkit-transform-origin: var(--ha-stepflow-direction-origin-x) center;
2531
+ -ms-transform-origin: var(--ha-stepflow-direction-origin-x) center;
2532
+ transform-origin: var(--ha-stepflow-direction-origin-x) center;
2533
  }
2534
  .ha-step-arrow:after {
2535
  position: absolute;
2554
  padding: 40px;
2555
  border-radius: 50%;
2556
  background-color: #e9ecf0;
 
2557
  color: #8056ee;
2558
  text-align: center;
2559
  font-size: 46px;
2577
  top: 5px;
2578
  right: 0;
2579
  overflow: hidden;
2580
+ padding: 8px 10px;
2581
  max-width: 200%;
2582
  border: 3px solid #fff;
2583
  border-radius: 20px;
3241
  margin-right: 3px;
3242
  }
3243
 
3244
+ .ha-post-list-excerpt p {
3245
+ margin-bottom: 0;
3246
+ color: #8c8c8c;
3247
+ }
3248
+
3249
  .ha-post-tab .ha-post-tab-filter {
3250
  padding: 0;
3251
  border-bottom: 1px solid #ddd;
3653
  -webkit-transition: all .5s ease 0s;
3654
  transition: all .5s ease 0s;
3655
  }
3656
+
3657
+ .ha-data-table .elementor-widget-container {
3658
+ overflow: hidden;
3659
+ }
3660
+
3661
+ .ha-data-table .ha-table {
3662
+ margin-bottom: 0;
3663
+ }
3664
+
3665
+ .ha-data-table .ha-table__head-column-cell {
3666
+ padding: 20px;
3667
+ border: 1px solid;
3668
+ border-color: #5636d1 #320ebd #5636d1 #5636d1;
3669
+ background-color: #5636d1;
3670
+ color: #fff;
3671
+ vertical-align: middle;
3672
+ text-align: center;
3673
+ }
3674
+
3675
+ .ha-data-table .ha-table__head-column-cell-wrap {
3676
+ display: -webkit-inline-box;
3677
+ display: -webkit-inline-flex;
3678
+ display: -ms-inline-flexbox;
3679
+ display: inline-flex;
3680
+ -webkit-box-align: center;
3681
+ -webkit-align-items: center;
3682
+ align-items: center;
3683
+ -ms-flex-align: center;
3684
+ -webkit-box-orient: horizontal;
3685
+ -webkit-box-direction: normal;
3686
+ -webkit-flex-direction: row;
3687
+ -ms-flex-direction: row;
3688
+ flex-direction: row;
3689
+ }
3690
+
3691
+ .ha-data-table .ha-table__head-column-cell-icon {
3692
+ padding-left: 10px;
3693
+ line-height: 1;
3694
+ }
3695
+
3696
+ .ha-data-table .ha-table__head-column-cell-icon img {
3697
+ width: 40px;
3698
+ }
3699
+
3700
+ .ha-data-table .ha-table__head-column-cell-icon svg {
3701
+ width: 40px;
3702
+ }
3703
+
3704
+ .ha-data-table .ha-table__body-row:nth-child(even) {
3705
+ background-color: #fff;
3706
+ }
3707
+ .ha-data-table .ha-table__body-row:nth-child(even):hover {
3708
+ background-color: rgba(86, 54, 209, .08);
3709
+ }
3710
+
3711
+ .ha-data-table .ha-table__body-row:nth-child(odd) {
3712
+ background-color: #fff;
3713
+ }
3714
+ .ha-data-table .ha-table__body-row:nth-child(odd):hover {
3715
+ background-color: rgba(232, 53, 124, .08);
3716
+ }
3717
+
3718
+ .ha-data-table .ha-table__body-row-cell {
3719
+ padding: 15px;
3720
+ border: 1px solid #ddd;
3721
+ background-color: transparent;
3722
+ vertical-align: middle;
3723
+ }
3724
+
3725
+ .ha-data-table .ha-table__body-row-cell-wrap {
3726
+ display: -webkit-inline-box;
3727
+ display: -webkit-inline-flex;
3728
+ display: -ms-inline-flexbox;
3729
+ display: inline-flex;
3730
+ -webkit-box-align: center;
3731
+ -webkit-align-items: center;
3732
+ align-items: center;
3733
+ -ms-flex-align: center;
3734
+ -webkit-box-orient: horizontal;
3735
+ -webkit-box-direction: normal;
3736
+ -webkit-flex-direction: row;
3737
+ -ms-flex-direction: row;
3738
+ flex-direction: row;
3739
+ }
3740
+
3741
+ .ha-data-table .ha-table__body-row-cell-icon {
3742
+ padding-left: 10px;
3743
+ line-height: 1;
3744
+ }
3745
+
3746
+ .ha-data-table .ha-table__body-row-cell-icon img {
3747
+ width: 40px;
3748
+ }
3749
+
3750
+ .ha-data-table .ha-table__body-row-cell-icon svg {
3751
+ width: 40px;
3752
+ }
3753
+
3754
+ .ha-data-table .ha-table__body .ha-table__head-column-cell {
3755
+ display: none;
3756
+ }
3757
+
3758
+ .ha-data-table.ha-column-icon-top .ha-table__head-column-cell-icon,
3759
+ .ha-data-table.ha-column-icon-bottom .ha-table__head-column-cell-icon {
3760
+ width: 100%;
3761
+ }
3762
+
3763
+ .ha-data-table.ha-column-icon-left .ha-table__head-column-cell-icon,
3764
+ .ha-data-table.ha-column-icon-right .ha-table__head-column-cell-icon {
3765
+ width: auto;
3766
+ }
3767
+
3768
+ .ha-data-table.ha-row-icon-top .ha-table__body-row-cell-icon,
3769
+ .ha-data-table.ha-row-icon-bottom .ha-table__body-row-cell-icon {
3770
+ width: 100%;
3771
+ }
3772
+
3773
+ .ha-data-table.ha-row-icon-left .ha-table__body-row-cell-icon,
3774
+ .ha-data-table.ha-row-icon-right .ha-table__body-row-cell-icon {
3775
+ width: auto;
3776
+ }
3777
+
3778
+ .ha-data-table.ha-column-icon-left .ha-table__head-column-cell-wrap {
3779
+ -webkit-box-orient: horizontal;
3780
+ -webkit-box-direction: reverse;
3781
+ -webkit-flex-direction: row-reverse;
3782
+ -ms-flex-direction: row-reverse;
3783
+ flex-direction: row-reverse;
3784
+ }
3785
+
3786
+ .ha-data-table.ha-column-icon-right .ha-table__head-column-cell-wrap {
3787
+ -webkit-box-orient: horizontal;
3788
+ -webkit-box-direction: normal;
3789
+ -webkit-flex-direction: row;
3790
+ -ms-flex-direction: row;
3791
+ flex-direction: row;
3792
+ }
3793
+
3794
+ .ha-data-table.ha-column-icon-top .ha-table__head-column-cell-wrap {
3795
+ -webkit-box-orient: vertical;
3796
+ -webkit-box-direction: reverse;
3797
+ -webkit-flex-direction: column-reverse;
3798
+ -ms-flex-direction: column-reverse;
3799
+ flex-direction: column-reverse;
3800
+ }
3801
+
3802
+ .ha-data-table.ha-column-icon-bottom .ha-table__head-column-cell-wrap {
3803
+ -webkit-box-orient: vertical;
3804
+ -webkit-box-direction: normal;
3805
+ -webkit-flex-direction: column;
3806
+ -ms-flex-direction: column;
3807
+ flex-direction: column;
3808
+ }
3809
+
3810
+ .ha-data-table.ha-row-icon-left .ha-table__body-row-cell-wrap {
3811
+ -webkit-box-orient: horizontal;
3812
+ -webkit-box-direction: reverse;
3813
+ -webkit-flex-direction: row-reverse;
3814
+ -ms-flex-direction: row-reverse;
3815
+ flex-direction: row-reverse;
3816
+ }
3817
+
3818
+ .ha-data-table.ha-row-icon-right .ha-table__body-row-cell-wrap {
3819
+ -webkit-box-orient: horizontal;
3820
+ -webkit-box-direction: normal;
3821
+ -webkit-flex-direction: row;
3822
+ -ms-flex-direction: row;
3823
+ flex-direction: row;
3824
+ }
3825
+
3826
+ .ha-data-table.ha-row-icon-top .ha-table__body-row-cell-wrap {
3827
+ -webkit-box-orient: vertical;
3828
+ -webkit-box-direction: reverse;
3829
+ -webkit-flex-direction: column-reverse;
3830
+ -ms-flex-direction: column-reverse;
3831
+ flex-direction: column-reverse;
3832
+ }
3833
+
3834
+ .ha-data-table.ha-row-icon-bottom .ha-table__body-row-cell-wrap {
3835
+ -webkit-box-orient: vertical;
3836
+ -webkit-box-direction: normal;
3837
+ -webkit-flex-direction: column;
3838
+ -ms-flex-direction: column;
3839
+ flex-direction: column;
3840
+ }
3841
+
3842
+ @media (max-width: 767px) {
3843
+ .ha-data-table .ha-table__head {
3844
+ display: none;
3845
+ }
3846
+ .ha-data-table .ha-table__body .ha-table__body-row {
3847
+ display: -webkit-box;
3848
+ display: -webkit-flex;
3849
+ display: -ms-flexbox;
3850
+ display: flex;
3851
+ -webkit-box-orient: vertical;
3852
+ -webkit-box-direction: normal;
3853
+ -webkit-flex-direction: column;
3854
+ -ms-flex-direction: column;
3855
+ flex-direction: column;
3856
+ }
3857
+ .ha-data-table .ha-table__body .ha-table__body-row-cell {
3858
+ display: -webkit-box;
3859
+ display: -webkit-flex;
3860
+ display: -ms-flexbox;
3861
+ display: flex;
3862
+ overflow: hidden;
3863
+ -webkit-box-pack: justify;
3864
+ -ms-flex-pack: justify;
3865
+ -webkit-justify-content: space-between;
3866
+ justify-content: space-between;
3867
+ margin-top: -1px;
3868
+ padding: 0 !important;
3869
+ }
3870
+ .ha-data-table .ha-table__body .ha-table__body-row-cell:first-child {
3871
+ margin-top: auto;
3872
+ }
3873
+ .ha-data-table .ha-table__body .ha-table__head-column-cell {
3874
+ display: block;
3875
+ width: 100%;
3876
+ }
3877
+ .ha-data-table .ha-table__body .ha-table__body-row-cell-wrap {
3878
+ display: -webkit-box;
3879
+ display: -webkit-flex;
3880
+ display: -ms-flexbox;
3881
+ display: flex;
3882
+ width: 100%;
3883
+ }
3884
+ .ha-data-table.ha-row-icon-left.ha-row-alignment-left .ha-table__body-row-cell-wrap {
3885
+ -webkit-box-pack: end;
3886
+ -ms-flex-pack: end;
3887
+ -webkit-justify-content: flex-end;
3888
+ justify-content: flex-end;
3889
+ }
3890
+ .ha-data-table.ha-row-icon-left.ha-row-alignment-center .ha-table__body-row-cell-wrap {
3891
+ -webkit-box-pack: center;
3892
+ -ms-flex-pack: center;
3893
+ -webkit-justify-content: center;
3894
+ justify-content: center;
3895
+ }
3896
+ .ha-data-table.ha-row-icon-left.ha-row-alignment-right .ha-table__body-row-cell-wrap {
3897
+ -webkit-box-pack: start;
3898
+ -ms-flex-pack: start;
3899
+ -webkit-justify-content: flex-start;
3900
+ justify-content: flex-start;
3901
+ }
3902
+ .ha-data-table.ha-row-icon-top.ha-row-alignment-left .ha-table__body-row-cell-wrap,
3903
+ .ha-data-table.ha-row-icon-bottom.ha-row-alignment-left .ha-table__body-row-cell-wrap {
3904
+ -webkit-box-align: start;
3905
+ -webkit-align-items: flex-start;
3906
+ align-items: flex-start;
3907
+ -ms-flex-align: start;
3908
+ -webkit-box-pack: center;
3909
+ -ms-flex-pack: center;
3910
+ -webkit-justify-content: center;
3911
+ justify-content: center;
3912
+ }
3913
+ .ha-data-table.ha-row-icon-top.ha-row-alignment-center .ha-table__body-row-cell-wrap,
3914
+ .ha-data-table.ha-row-icon-bottom.ha-row-alignment-center .ha-table__body-row-cell-wrap {
3915
+ -webkit-box-align: center;
3916
+ -webkit-align-items: center;
3917
+ align-items: center;
3918
+ -ms-flex-align: center;
3919
+ -webkit-box-pack: center;
3920
+ -ms-flex-pack: center;
3921
+ -webkit-justify-content: center;
3922
+ justify-content: center;
3923
+ }
3924
+ .ha-data-table.ha-row-icon-top.ha-row-alignment-right .ha-table__body-row-cell-wrap,
3925
+ .ha-data-table.ha-row-icon-bottom.ha-row-alignment-right .ha-table__body-row-cell-wrap {
3926
+ -webkit-box-align: end;
3927
+ -webkit-align-items: flex-end;
3928
+ align-items: flex-end;
3929
+ -ms-flex-align: end;
3930
+ -webkit-box-pack: center;
3931
+ -ms-flex-pack: center;
3932
+ -webkit-justify-content: center;
3933
+ justify-content: center;
3934
+ }
3935
+ }
assets/css/main.min.css CHANGED
@@ -1 +1 @@
1
- .happy-addon>.elementor-widget-container{word-wrap:break-word;overflow-wrap:break-word;box-sizing:border-box}.happy-addon>.elementor-widget-container *{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-screen-reader-text{position:absolute;overflow:hidden;clip:rect(1px,1px,1px,1px);margin:-1px;padding:0;width:1px;height:1px;border:0;word-wrap:normal!important;-webkit-clip-path:inset(50%);clip-path:inset(50%)}.ha-has-background-overlay>.elementor-widget-container{position:relative;z-index:1}.ha-has-background-overlay>.elementor-widget-container:before{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;content:""}.ha-popup--is-enabled .ha-js-popup,.ha-popup--is-enabled .ha-js-popup img{cursor:-webkit-zoom-in!important;cursor:zoom-in!important}.mfp-wrap .mfp-arrow,.mfp-wrap .mfp-close{background-color:transparent}.mfp-wrap .mfp-arrow:focus,.mfp-wrap .mfp-close:focus{outline-width:thin}.ha-btn{display:inline-block;max-width:100%;vertical-align:middle;text-align:center;text-decoration:none;font-size:14px;line-height:1;-webkit-transition:all .3s;transition:all .3s}.ha-btn:not(.ha-btn--link){padding:15px 25px;border-radius:.25rem;background-color:#562dd4;color:#fff}.ha-btn:not(.ha-btn--link):focus,.ha-btn:not(.ha-btn--link):hover{background-color:#e2498a}.ha-btn.ha-btn--link{color:#562dd4}.ha-btn.ha-btn--link:focus,.ha-btn.ha-btn--link:hover{color:#e2498a}.ha-btn-icon+.ha-btn-text,.ha-btn-text+.ha-btn-icon{margin-left:5px}.ha-btn-icon--svg,.ha-member-links>a{display:inline-block}.ha-btn-icon--svg svg{width:auto;height:1em}.ha-badge{padding:.475rem 1.1rem;max-width:100%;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-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-weight:700;font-size:22px}.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{display:inline-block;width:100%}.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-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;line-height:1}.ha-icon-box-icon i,.ha-icon-box-icon svg,.ha-infobox-figure i,.ha-infobox-figure svg{position:relative;display:block;width:1em;height:1em}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-icon i:before,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon i:before,.ha-icon-box-icon i:before,.ha-infobox-figure i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.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{-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-member .ha-btn{margin-bottom:10px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-text p,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-text p,.ha-member-links+.ha-btn{margin-top:10px;margin-bottom:0}.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:#562dd4;color:#fff}.ha-review-ratting--star{color:#ffbf36}.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,a.ha-social-icon:after,a.ha-social-icon:before{border-radius:inherit}.ha-gallery-filter{margin:0 10px 2rem;padding:0;list-style:none}.ha-gallery-filter>li{display:inline-block;margin-bottom:10px;max-width:100%}.ha-gallery-filter>li:not(:last-child){margin-right:10px}.ha-gallery-filter>li>button{display:block;overflow:hidden;padding:10px 25px;max-width:100%;border:2px solid #562dd4;border-radius:.25rem;background-color:transparent;color:#562dd4;text-transform:uppercase;text-overflow:ellipsis;font-size:14px;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ha-gallery-filter>li>button:focus,.ha-gallery-filter>li>button:hover{outline:0;background-color:#562dd4;color:#fff}.ha-gallery-filter>.ha-filter-active>button{background-color:#562dd4;color:#fff}.ha-image-grid-item{float:left}.ha-image-grid-inner{position:relative;display:block;overflow:hidden;margin:10px;text-decoration:none}.ha-image-grid-inner img{display:block;width:100%;-webkit-transition:all .25s;transition:all .25s}.ha-image-grid--layout-even .ha-image-grid-inner{height:250px}.ha-image-grid--layout-even .ha-image-grid-inner img{height:100%}.ha-justified-gallery-item,.ha-justified-gallery-item>img{border-radius:6px}.ha-justified-gallery .justified-gallery>.ha-justified-gallery-item>.caption{bottom:-100px!important;padding:10px;-webkit-transition:all .25s!important;transition:all .25s!important;-webkit-animation:haSmoothReveal .3s forwards;animation:haSmoothReveal .3s forwards}.ha-justified-gallery .justified-gallery>.ha-justified-gallery-item>.caption.caption-visible{bottom:0!important}.ha-justified-gallery .justified-gallery>.entry-visible>a>img,.ha-justified-gallery .justified-gallery>.entry-visible>img{-webkit-transition:all 300ms,opacity 500ms ease-in;transition:all 300ms,opacity 500ms ease-in}@-webkit-keyframes haSmoothReveal{0%{-webkit-transform:translateY(100px);transform:translateY(100px)}to{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes haSmoothReveal{0%{-webkit-transform:translateY(100px);transform:translateY(100px)}to{-webkit-transform:translateY(0);transform:translateY(0)}}.ha-carousel .slick-vertical .slick-slide,.ha-slider .slick-vertical .slick-slide{border:0}.ha-carousel .slick-next,.ha-carousel .slick-prev,.ha-slider .slick-next,.ha-slider .slick-prev{z-index:999;padding:0;border:1px solid rgba(255,255,255,.8);border-radius:50%;background-color:rgba(255,255,255,.8);color:#8c8c8c;text-align:center;font-size:12px;opacity:1}.ha-carousel .slick-next:focus,.ha-carousel .slick-next:hover,.ha-carousel .slick-prev:focus,.ha-carousel .slick-prev:hover,.ha-slider .slick-next:focus,.ha-slider .slick-next:hover,.ha-slider .slick-prev:focus,.ha-slider .slick-prev:hover{background-color:#fff;color:#8c8c8c}.ha-carousel .slick-next:before,.ha-carousel .slick-prev:before,.ha-slider .slick-next:before,.ha-slider .slick-prev:before{content:""}.ha-carousel .slick-disabled,.ha-slider .slick-disabled{opacity:.7}.ha-carousel .slick-prev,.ha-slider .slick-prev{left:25px}.ha-carousel .slick-next,.ha-slider .slick-next{right:25px}.ha-carousel .slick-dots,.ha-slider .slick-dots{bottom:-40px}.ha-carousel .slick-dots li,.ha-slider .slick-dots li{margin-right:2px;margin-left:2px}.ha-carousel .slick-dots li button:focus,.ha-carousel .slick-dots li button:hover,.ha-slider .slick-dots li button:focus,.ha-slider .slick-dots li button:hover{background-color:transparent}.ha-carousel .slick-dots li button:before,.ha-slider .slick-dots li button:before{color:#1b1b1b;opacity:1}.ha-carousel .slick-dots .slick-active button:before,.ha-carousel .slick-dots li button:hover:before,.ha-slider .slick-dots .slick-active button:before,.ha-slider .slick-dots li button:hover:before{-webkit-transform:scale(1.5);-ms-transform:scale(1.5);transform:scale(1.5)}.ha-carousel .slick-next,.ha-carousel .slick-prev{width:40px;height:40px;line-height:40px}.ha-slider .slick-next,.ha-slider .slick-prev{width:50px;height:50px;line-height:50px}.ha-carousel .slick-slider:not(.slick-vertical) .slick-slide{padding-right:5px;padding-left:5px}.ha-carousel .slick-slider.slick-vertical .slick-slide{padding-top:5px;padding-bottom:5px}.ha-slick-item{position:relative;display:inline-block;overflow:hidden;vertical-align:bottom}.ha-slick-content{position:absolute;bottom:0;padding:1.5rem;width:100%;background:-webkit-linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.3));background:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.3))}.ha-slick-title{margin-top:0;margin-bottom:.2rem;color:#fff;font-size:20px}.ha-slick-subtitle{margin:0;color:#fff}.ha-skills>.elementor-widget-container{padding-top:1px}.ha-skill{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border-radius:15px;background-color:#e9ecef;font-size:.75rem}.ha-skill--inside .ha-skill-info,.ha-skill--outside .ha-skill-info{text-align:left;font-size:14px;line-height:1}.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{height:30px}.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;width:10%;border-radius:inherit;background-color:#562dd4;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-skill-name{display:inline-block;overflow:hidden;max-width:70%;text-overflow:ellipsis}.ha-gradient-heading{margin-top:0;margin-bottom:0}.ha-gradient-heading>a{color:inherit;text-decoration:none}.ha-logo-grid-item{float:left;overflow:hidden;height:180px;border-color:#e7e7e7}.ha-logo-grid-figure{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;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;margin:0;padding:30px;width:100%;height:100%}.ha-logo-grid-img{max-height:100%}@media (min-width:1025px){.ha-logo-grid--col-2 .ha-logo-grid-item{width:calc(100%/2)}.ha-logo-grid--col-3 .ha-logo-grid-item{width:calc(100%/3)}.ha-logo-grid--col-4 .ha-logo-grid-item{width:calc(100%/4)}.ha-logo-grid--col-5 .ha-logo-grid-item{width:calc(100%/5)}.ha-logo-grid--col-6 .ha-logo-grid-item{width:calc(100%/6)}}@media (max-width:1024px) and (min-width:768px){.ha-logo-grid--col--tablet2 .ha-logo-grid-item{width:calc(100%/2)}.ha-logo-grid--col--tablet3 .ha-logo-grid-item{width:calc(100%/3)}.ha-logo-grid--col--tablet4 .ha-logo-grid-item{width:calc(100%/4)}.ha-logo-grid--col--tablet5 .ha-logo-grid-item{width:calc(100%/5)}.ha-logo-grid--col--tablet6 .ha-logo-grid-item{width:calc(100%/6)}}@media (max-width:767px){.ha-logo-grid--col--mobile2 .ha-logo-grid-item{width:calc(100%/2)}.ha-logo-grid--col--mobile3 .ha-logo-grid-item{width:calc(100%/3)}.ha-logo-grid--col--mobile4 .ha-logo-grid-item{width:calc(100%/4)}.ha-logo-grid--col--mobile5 .ha-logo-grid-item{width:calc(100%/5)}.ha-logo-grid--col--mobile6 .ha-logo-grid-item{width:calc(100%/6)}}.ha-logo-grid--tictactoe .ha-logo-grid-item{border-width:2px 2px 0 0;border-style:solid}@media (min-width:1025px){.ha-logo-grid--tictactoe.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:0!important}}@media (max-width:1024px) and (min-width:768px){.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(2n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(3n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(4n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(5n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(6n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:0!important}}@media (max-width:767px){.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(2n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(3n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(4n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(5n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(6n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:0!important}}.ha-logo-grid--border .ha-logo-grid-item{border-width:0 2px 2px 0;border-style:solid}.ha-logo-grid--border .ha-logo-grid-item:first-child{border-top-left-radius:10px}.ha-logo-grid--border .ha-logo-grid-item:last-child{border-bottom-right-radius:10px}@media (min-width:1025px){.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-last-child(2){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-last-child(3){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-last-child(4){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-last-child(5){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-last-child(6){border-bottom-left-radius:10px}}@media (max-width:1024px) and (min-width:768px){.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(2n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(2){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-last-child(2){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(3n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(3){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-last-child(3){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(4n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(4){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-last-child(4){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(5n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(5){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-last-child(5){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(6n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(6){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-last-child(6){border-bottom-left-radius:10px}}@media (max-width:767px){.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(2n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(2){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-last-child(2){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(3n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(3){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-last-child(3){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(4n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(4){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-last-child(4){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(5n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(5){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-last-child(5){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(6n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(6){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-last-child(6){border-bottom-left-radius:10px}}.ha-logo-grid--box .ha-logo-grid-wrapper{margin:-.5rem}.ha-logo-grid--box .ha-logo-grid-item{margin:.5rem;border-width:2px;border-style:solid;border-radius:.5rem}@media (min-width:1025px){.ha-logo-grid--box.ha-logo-grid--col-2 .ha-logo-grid-item{width:calc((100%/2) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col-3 .ha-logo-grid-item{width:calc((100%/3) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col-4 .ha-logo-grid-item{width:calc((100%/4) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col-5 .ha-logo-grid-item{width:calc((100%/5) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col-6 .ha-logo-grid-item{width:calc((100%/6) - 1rem)}}@media (max-width:1024px) and (min-width:768px){.ha-logo-grid--box.ha-logo-grid--col--tablet2 .ha-logo-grid-item{width:calc((100%/2) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--tablet3 .ha-logo-grid-item{width:calc((100%/3) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--tablet4 .ha-logo-grid-item{width:calc((100%/4) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--tablet5 .ha-logo-grid-item{width:calc((100%/5) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--tablet6 .ha-logo-grid-item{width:calc((100%/6) - 1rem)}}@media (max-width:767px){.ha-logo-grid--box.ha-logo-grid--col--mobile2 .ha-logo-grid-item{width:calc((100%/2) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--mobile3 .ha-logo-grid-item{width:calc((100%/3) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--mobile4 .ha-logo-grid-item{width:calc((100%/4) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--mobile5 .ha-logo-grid-item{width:calc((100%/5) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--mobile6 .ha-logo-grid-item{width:calc((100%/6) - 1rem)}}.ha-dual-btn,.ha-dual-btn-connector{display:inline-block}.ha-dual-btn-wrapper{position:relative;text-align:center;font-weight:400}.ha-dual-btn{padding:1.2rem 3rem;max-width:100%;color:#fff;text-decoration:none;font-size:14px}.ha-dual-btn--left{background-color:#562dd4}.ha-dual-btn--left:focus,.ha-dual-btn--left:hover{background-color:#4423ab;color:#fff}.ha-dual-btn--right{background-color:#e2498a}.ha-dual-btn--right:focus,.ha-dual-btn--right:hover{background-color:#d6226e;color:#fff}.ha-dual-btn-connector{position:absolute!important;z-index:9;overflow:hidden;width:30px;height:30px;border-radius:100%;background-color:#fff;box-shadow:0 0 0 5px rgba(255,255,255,.3);color:#27374c;text-transform:uppercase;font-size:12px;line-height:30px;-webkit-transform:translate(50%,-50%);-ms-transform:translate(50%,-50%);transform:translate(50%,-50%)}.ha-dual-btn-icon>svg{width:1em;height:auto}.ha-dual-btn-icon>i{font-size:1em}.ha-dual-btn-icon--before{margin-right:5px}.ha-dual-btn-icon--after{margin-left:5px}.ha-dual-button>.elementor-widget-container,.ha-news-ticker-wrapper ul.ha-news-ticker-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-dual-button--mobile-layout-stack>.elementor-widget-container{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-dual-button--mobile-layout-stack .ha-dual-btn-wrapper{max-width:100%}.ha-dual-button--mobile-layout-stack .ha-dual-btn-connector{top:100%;right:50%}.ha-dual-button--mobile-layout-stack .ha-dual-btn--left{border-radius:30px 30px 0 0}.ha-dual-button--mobile-layout-stack .ha-dual-btn--right{border-radius:0 0 30px 30px}.ha-dual-button--mobile-layout-stack.ha-dual-button--mobile-align-left>.elementor-widget-container{-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start;-ms-flex-align:start}.ha-dual-button--mobile-layout-stack.ha-dual-button--mobile-align-center>.elementor-widget-container,.ha-testimonial__reviewer{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center}.ha-dual-button--mobile-layout-stack.ha-dual-button--mobile-align-right>.elementor-widget-container{-webkit-box-align:end;-webkit-align-items:flex-end;align-items:flex-end;-ms-flex-align:end}.ha-dual-button--mobile-layout-queue.ha-dual-button--mobile-align-left>.elementor-widget-container{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.ha-dual-button--mobile-layout-queue.ha-dual-button--mobile-align-center>.elementor-widget-container{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.ha-dual-button--mobile-layout-queue.ha-dual-button--mobile-align-right>.elementor-widget-container{-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.ha-dual-button--mobile-layout-queue>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-dual-button--mobile-layout-queue .ha-dual-btn-wrapper{max-width:50%}.ha-dual-button--mobile-layout-queue .ha-dual-btn-connector{top:50%;right:0}.ha-dual-button--mobile-layout-queue .ha-dual-btn--left{border-radius:50px 0 0 50px}.ha-dual-button--mobile-layout-queue .ha-dual-btn--right{border-radius:0 50px 50px 0}@media (min-width:768px){.ha-dual-button--tablet-layout-stack.ha-dual-button--tablet-align-left>.elementor-widget-container{-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start;-ms-flex-align:start}.ha-dual-button--tablet-layout-stack.ha-dual-button--tablet-align-center>.elementor-widget-container{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center}.ha-dual-button--tablet-layout-stack.ha-dual-button--tablet-align-right>.elementor-widget-container{-webkit-box-align:end;-webkit-align-items:flex-end;align-items:flex-end;-ms-flex-align:end}.ha-dual-button--tablet-layout-queue.ha-dual-button--tablet-align-left>.elementor-widget-container{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.ha-dual-button--tablet-layout-queue.ha-dual-button--tablet-align-center>.elementor-widget-container{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.ha-dual-button--tablet-layout-queue.ha-dual-button--tablet-align-right>.elementor-widget-container{-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.ha-dual-button--tablet-layout-stack>.elementor-widget-container{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-dual-button--tablet-layout-stack .ha-dual-btn-wrapper{max-width:100%}.ha-dual-button--tablet-layout-stack .ha-dual-btn-connector{top:100%;right:50%}.ha-dual-button--tablet-layout-stack .ha-dual-btn--left{border-radius:30px 30px 0 0}.ha-dual-button--tablet-layout-stack .ha-dual-btn--right{border-radius:0 0 30px 30px}.ha-dual-button--tablet-layout-queue>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-dual-button--tablet-layout-queue .ha-dual-btn-wrapper{max-width:50%}.ha-dual-button--tablet-layout-queue .ha-dual-btn-connector{top:50%;right:0}.ha-dual-button--tablet-layout-queue .ha-dual-btn--left{border-radius:50px 0 0 50px}.ha-dual-button--tablet-layout-queue .ha-dual-btn--right{border-radius:0 50px 50px 0}}@media (min-width:1025px){.ha-dual-button--layout-stack.ha-dual-button--align-left>.elementor-widget-container{-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start;-ms-flex-align:start}.ha-dual-button--layout-stack.ha-dual-button--align-center>.elementor-widget-container{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center}.ha-dual-button--layout-stack.ha-dual-button--align-right>.elementor-widget-container{-webkit-box-align:end;-webkit-align-items:flex-end;align-items:flex-end;-ms-flex-align:end}.ha-dual-button--layout-queue.ha-dual-button--align-left>.elementor-widget-container{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.ha-dual-button--layout-queue.ha-dual-button--align-center>.elementor-widget-container{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.ha-dual-button--layout-queue.ha-dual-button--align-right>.elementor-widget-container{-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.ha-dual-button--layout-stack>.elementor-widget-container{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-dual-button--layout-stack .ha-dual-btn-wrapper{max-width:100%}.ha-dual-button--layout-stack .ha-dual-btn-connector{top:100%;right:50%}.ha-dual-button--layout-stack .ha-dual-btn--left{border-radius:30px 30px 0 0}.ha-dual-button--layout-stack .ha-dual-btn--right{border-radius:0 0 30px 30px}.ha-dual-button--layout-queue>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-dual-button--layout-queue .ha-dual-btn-wrapper{max-width:50%}.ha-dual-button--layout-queue .ha-dual-btn-connector{top:50%;right:0}.ha-dual-button--layout-queue .ha-dual-btn--left{border-radius:50px 0 0 50px}.ha-dual-button--layout-queue .ha-dual-btn--right{border-radius:0 50px 50px 0}}.ha-testimonial--basic>.elementor-widget-container{padding:2rem;border:1px solid #ececec;border-radius:.5rem}.ha-testimonial--basic .ha-testimonial__content{margin-bottom:2.5em}.ha-testimonial--bubble .ha-testimonial__content{position:relative;margin-bottom:1.5rem;padding:2rem;border-radius:6px;background-color:#fff;box-shadow:0 .2rem 2.8rem rgba(36,36,36,.1);line-height:1.6rem}.ha-testimonial--bubble .ha-testimonial__content:after{position:absolute;bottom:-14px;color:#fff;content:"\e911";font-style:normal;font-size:36px;font-family:"Happy Icons";-webkit-transform:rotate(-180deg);-ms-transform:rotate(-180deg);transform:rotate(-180deg)}.ha-testimonial--left.ha-testimonial--bubble .ha-testimonial__content:after{left:15px}.ha-testimonial--center.ha-testimonial--bubble .ha-testimonial__content:after{left:50%;-webkit-transform:translateX(-50%) rotate(-180deg);-ms-transform:translateX(-50%) rotate(-180deg);transform:translateX(-50%) rotate(-180deg)}.ha-testimonial--right.ha-testimonial--bubble .ha-testimonial__content:after{right:15px}.ha-testimonial__reviewer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.ha-testimonial__reviewer-thumb{-webkit-box-flex:0;-webkit-flex:0 0 65px;-ms-flex:0 0 65px;flex:0 0 65px;max-width:65px;height:65px}.ha-testimonial__reviewer-thumb img{width:100%;height:100%;border-radius:50%;-o-object-fit:cover;object-fit:cover}.ha-testimonial__reviewer-name{margin-bottom:.3rem;color:#562dd4;font-weight:700;font-size:18px}.ha-testimonial__reviewer-title{color:#8c8c8c;font-size:16px}.ha-testimonial--left .ha-testimonial__reviewer-meta{padding-left:1em}.ha-testimonial--center .ha-testimonial__reviewer{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-testimonial--center .ha-testimonial__reviewer-meta{padding-top:1em;max-width:100%}.ha-testimonial--left .ha-testimonial__reviewer-meta,.ha-testimonial--right .ha-testimonial__reviewer-meta{-webkit-box-flex:0;-webkit-flex:0 0 calc(100% - 65px);-ms-flex:0 0 calc(100% - 65px);flex:0 0 calc(100% - 65px);max-width:calc(100% - 65px)}.ha-testimonial--right .ha-testimonial__reviewer{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ha-testimonial--right .ha-testimonial__reviewer-meta{padding-right:1em}.ha-testimonial--left{text-align:left}.ha-testimonial--right{text-align:right}.ha-number-body,.ha-testimonial--center{text-align:center}.ha-number-body{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;padding:6px;width:50px;height:50px;border-radius:100%;background-color:#562dd4;color:#fff;font-size:20px}.ha-number-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ha-number-text{position:relative;z-index:1;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.ha-flip-box-container:after{display:block;visibility:hidden;clear:both;height:0;content:" ";font-size:0}.ha-flip-box-container .ha-flip-box-inner{position:relative;z-index:1;margin:0;padding:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.ha-flip-box-container .ha-flip-box-inner:hover .ha-flip-box-back{z-index:1}.ha-flip-box-container .ha-flip-box-inner:hover .ha-flip-box-front{z-index:-1}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-inner-wrapper{position:relative;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-perspective:1000px;perspective:1000px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front{top:0;right:0;left:0;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;height:250px;background-position:center;background-clip:padding-box;background-size:cover;background-repeat:no-repeat;text-align:center;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front{background-color:transparent;position:relative;bottom:0;z-index:10;padding:30px;border:1px solid #ddd;border-radius:.3rem}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back:before,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front:before{position:absolute;top:0;left:0;z-index:-9;width:100%;height:100%;background-color:transparent;content:""}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back{position:absolute;z-index:-1;padding:46px;border-radius:.3rem;background-color:#562dd4;color:#fff}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner{position:relative;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;width:100%}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-text,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-text{text-align:center}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon.icon{padding:20px;border-radius:50%;background-color:#f1f4f8;color:#242424}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon{display:inline-block;margin-bottom:20px;text-align:center;font-size:28px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon i,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon svg{display:block;width:1em;height:1em}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon i{position:relative}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-icon img,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon img{width:60px;height:60px;vertical-align:middle}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-box-heading{margin:0;font-weight:700;font-size:20px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner p{margin-bottom:0;font-size:16px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-box-heading-back{margin:0;color:#fff;font-size:18px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-icon{display:inline-block;margin-bottom:20px;text-align:center;font-size:20px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-icon i,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-icon svg{display:block;width:1em;height:1em}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-icon i{position:relative;color:#fff}.ha-flip-box-container .ha-flip-box-inner.ha-flip-right .ha-flip-box-front,.ha-flip-box-container .ha-flip-box-inner.ha-flip-right:hover .ha-flip-box-back{-webkit-transform:rotateY(0);transform:rotateY(0)}.ha-flip-box-container .ha-flip-box-inner.ha-flip-right .ha-flip-box-back{-webkit-transform:rotateY(-180deg);transform:rotateY(-180deg)}.ha-flip-box-container .ha-flip-box-inner.ha-flip-right:hover .ha-flip-box-front{-webkit-transform:rotateY(180deg);transform:rotateY(180deg)}.ha-flip-box-container .ha-flip-box-inner.ha-flip-up .ha-flip-box-front,.ha-flip-box-container .ha-flip-box-inner.ha-flip-up:hover .ha-flip-box-back{-webkit-transform:rotateX(0);transform:rotateX(0)}.ha-flip-box-container .ha-flip-box-inner.ha-flip-up .ha-flip-box-back{-webkit-transform:rotateX(-180deg);transform:rotateX(-180deg)}.ha-flip-box-container .ha-flip-box-inner.ha-flip-up:hover .ha-flip-box-front{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.ha-flip-box-container.ha-flip-effect-classic .ha-flip-box-back,.ha-flip-box-container.ha-flip-effect-classic .ha-flip-box-front{-webkit-transition:-webkit-transform .6s cubic-bezier(.2,.85,.4,1.275);transition:transform .6s cubic-bezier(.2,.85,.4,1.275);transition:transform .6s cubic-bezier(.2,.85,.4,1.275),-webkit-transform .6s cubic-bezier(.2,.85,.4,1.275)}.ha-logo-grid-wrapper:after{display:block;clear:both;content:""}.ha-pricing-table>.elementor-widget-container{position:relative;overflow:hidden;padding:3em 4em}.ha-pricing-table-badge{position:absolute;top:-1px;padding:.8rem 1rem;background-color:#e2498a;color:#fff;line-height:1}.ha-pricing-table-badge--left{left:0;-webkit-transform:rotate(-90deg) translateX(-100%);-ms-transform:rotate(-90deg) translateX(-100%);transform:rotate(-90deg) translateX(-100%);-webkit-transform-origin:left top;-ms-transform-origin:left top;transform-origin:left top}.ha-pricing-table-badge--right{right:0;-webkit-transform:rotate(-90deg) translateY(-100%);-ms-transform:rotate(-90deg) translateY(-100%);transform:rotate(-90deg) translateY(-100%);-webkit-transform-origin:right top;-ms-transform-origin:right top;transform-origin:right top}.ha-pricing-table-title{margin-top:0;margin-bottom:.5rem;color:#242424;font-weight:400;font-size:24px}.ha-pricing-table-price{margin-bottom:3rem}.ha-pricing-table-price-tag{margin-bottom:.5rem;color:#242424;font-weight:700;font-size:60px;line-height:normal}.ha-pricing-table-currency{font-size:24px}.ha-pricing-table-period{color:#8c8c8c;font-size:16px}.ha-pricing-table-body{margin-bottom:3rem}.ha-pricing-table-features-title{margin-top:0;margin-bottom:1rem;font-weight:700;font-size:16px}.ha-pricing-table-features-list{margin:0;padding:0;list-style:none}.ha-pricing-table-features-list li{margin-bottom:1rem;font-size:16px}.ha-pricing-table-features-list i,.ha-pricing-table-features-list svg{margin-right:.5rem;min-width:15px;font-size:.8em}.ha-pricing-table-features-list svg,span.ha-post-list-icon svg{width:auto;height:1em}.ha-pricing-table-feature-text{display:inline-block}.ha-pricing-table-btn{display:inline-block;padding:.8rem 2rem;border-radius:40px;background-color:#e2498a;color:#fff;text-decoration:none;text-transform:uppercase;font-size:12px;-webkit-transition:all .3s;transition:all .3s}.ha-pricing-table-btn:hover{background-color:#562dd4;color:#fff}.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-pricing-table>.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)}.ha-step-flow>.elementor-widget-container{padding:30px;text-align:center}.ha-step-arrow,.ha-step-arrow:after{position:absolute;display:inline-block;border-top:1px solid #ddd}.ha-step-arrow{left:calc(100% + 20px);top:49%;width:100px}.ha-step-arrow:after{top:-2px;right:5px;width:12px;height:12px;border-right:1px solid #ddd;color:#ddd;content:"";-webkit-transform:rotate(45deg) translateY(-50%);-ms-transform:rotate(45deg) translateY(-50%);transform:rotate(45deg) translateY(-50%)}.ha-steps-icon{position:relative;display:inline-block;margin-bottom:2rem;padding:40px;border-radius:50%;background-color:#e9ecf0;box-shadow:0 2px 6px -2px #989898;color:#8056ee;text-align:center;font-size:46px}.ha-fun-factor__media--icon i,.ha-fun-factor__media--icon svg,.ha-steps-icon i,.ha-steps-icon svg{position:relative;display:block;width:1em;height:1em}.ha-fun-factor__media--icon i:before,.ha-steps-icon i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-steps-icon .ha-steps-label{position:absolute;top:5px;right:0;overflow:hidden;padding:12px 8px;max-width:200%;border:3px solid #fff;border-radius:20px;background-color:#8056ee;color:#fff;text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:1}.ha-steps-title{margin-top:0;margin-bottom:30px;font-weight:700;font-size:16px}.ha-steps-title a{display:block;color:#562dd4}.ha-news-ticker-wrapper li.ha-news-ticker-item a,.ha-steps-title a:hover{color:#242424}.ha-step-description{margin:0;color:#616161;font-weight:400;font-size:16px;line-height:1.5}.ha-news-ticker-wrapper{position:relative;overflow:hidden;padding:20px 0;border:1px solid #d2d2d2;border-radius:5px}.ha-news-ticker-wrapper ul.ha-news-ticker-container{margin:0;padding:0;list-style:none}.ha-news-ticker-wrapper ul.ha-news-ticker-container:focus,.ha-news-ticker-wrapper ul.ha-news-ticker-container:hover{-webkit-animation-play-state:paused!important;animation-play-state:paused!important}.ha-news-ticker-wrapper span.ha-news-ticker-sticky-title{position:absolute;top:50%;left:auto;z-index:1;padding:20px;background:#333;color:#fff;font-size:1rem;line-height:1;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.ha-news-ticker-wrapper li.ha-news-ticker-item{margin-right:20px;white-space:nowrap}.ha-news-ticker-wrapper li.ha-news-ticker-item:last-child,.ha-post-list-meta-wrap span:last-child{margin-right:0}.ha-news-ticker-wrapper .ha-news-ticker-title{margin:0;font-size:1rem;line-height:1}.ha-news-ticker-wrapper li.ha-news-ticker-item a:hover{color:#e04c8a}.ha-fun-factor__content .ha-fun-factor__content-number,.ha-fun-factor__content .ha-fun-factor__content-text{margin-top:0;margin-bottom:15px;font-size:24px}.ha-ff-icon--left .ha-fun-factor__content{padding-left:20px}.ha-ff-icon--right .ha-fun-factor__content{padding-right:20px}.ha-fun-factor__divider{display:block;margin-bottom:15px;height:1px;background-color:#ccc}.ha-ff-icon--top .ha-fun-factor__media{display:inline-block;margin-top:10px;margin-bottom:10px}.ha-ff-icon--top .ha-fun-factor__media--image{width:200px}:not(.ha-ff-icon--top) .ha-fun-factor__media--image{-webkit-box-flex:0;-webkit-flex:0 0 200px;-ms-flex:0 0 200px;flex:0 0 200px;max-width:200px}.ha-fun-factor__media--image img{width:100%;height:100%;vertical-align:bottom}.ha-fun-factor__media--icon{font-size:3rem}.ha-fun-factor__wrap{padding:10px;word-wrap:break-word;overflow-wrap:break-word}.ha-ff-icon--left>.elementor-widget-container .ha-fun-factor__wrap,.ha-ff-icon--right>.elementor-widget-container .ha-fun-factor__wrap{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-ff-icon--left>.elementor-widget-container .ha-fun-factor__wrap{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-ff-icon--right>.elementor-widget-container .ha-fun-factor__wrap{-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-ff-icon--left>.elementor-widget-container .ha-fun-factor__wrap .ha-fun-factor__divider,.ha-ff-icon--right>.elementor-widget-container .ha-fun-factor__wrap .ha-fun-factor__divider{display:block;margin-right:auto;margin-left:auto}.ha-ff-icon--top>.elementor-widget-container .ha-fun-factor__wrap .ha-fun-factor__divider{display:block;margin-right:auto;margin-left:auto;width:100px}.ha-ff-icon--left>.elementor-widget-container .ha-fun-factor__wrap .ha-fun-factor__divider,.ha-ff-icon--right>.elementor-widget-container .ha-fun-factor__wrap .ha-fun-factor__divider{width:100%!important}.ha-fun-factor__divider-align-left{margin-left:0!important;text-align:left}.ha-fun-factor__divider-align-right{margin-right:0!important;text-align:right}.ha-fun-factor__divider-align-center{margin-right:auto!important;margin-left:auto!important;text-align:center}.ha-social-icons-wrapper,.ha-social-icons-wrapper a{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center}.ha-social-icons-wrapper a{padding:15px;border-radius:4px;color:#fff;font-size:30px;-webkit-transition:all .3s;transition:all .3s}a.ha-social-icon:hover{position:relative;z-index:1;background:#e2498a}.ha-social-icons-wrapper a.elementor-social-icon-label{color:#d30c5c}.ha-social-icon:not(:last-child){margin-right:2px}.ha-social-icon i{position:relative;display:initial;width:1em;height:1em}.ha-social-icon-label{margin:0 0 0 10px;width:100%;height:100%;font-size:18px;line-height:1}.elementor-social-icon-label .ha-social-icon-label{margin-left:0}.elementor-element-edit-mode .ha-social-icon-sticky{z-index:9999}.ha-social-icons:not(.elementor-element-edit-mode) .ha-social-icon-sticky{position:fixed}.ha-social-icon-separator{margin-right:10px}.ha-separator--stroke .ha-social-icon-separator{width:1px;height:1em;background:#d30c5c}.ha-separator--custom .ha-social-icon-separator{color:#d30c5c;font-size:24px}.ha-social-icon-separator:last-child{display:none}.ha-twitter-feed .ha-tweeter-feed-icon i{position:absolute;top:15px;right:15px;color:#1da1f2;font-size:22px}.ha-twitter-feed .ha-tweet-items{display:-ms-grid;display:grid;grid-gap:30px}.ha-twitter-feed .ha-tweet-item{position:relative;z-index:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;box-shadow:1px 1px 8px 1px rgba(0,0,0,.1)}.ha-twitter-feed .ha-tweet-content:before,.ha-twitter-feed .ha-tweet-item:before{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;content:""}.ha-twitter-feed .ha-tweet-inner-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding:30px 10px}.ha-twitter-feed .ha-tweet-author,.ha-twitter-feed .ha-tweet-inner-wrapper,.ha-twitter-feed .ha-tweet-user{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-twitter-feed .ha-tweet-author{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;margin-bottom:10px}.ha-twitter-feed .ha-tweet-avatar{width:45px;border-radius:50%}.ha-twitter-feed .ha-tweet-user{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-twitter-feed .ha-tweet-author-name,.ha-twitter-feed .ha-tweet-content p a:hover{color:#e2498a}.ha-twitter-feed .ha-tweet-author-name:hover,.ha-twitter-feed .ha-tweet-content p a{color:#562dd4}.ha-twitter-feed .ha-tweet-username{color:#a7a7a7}.ha-twitter-feed .ha-tweet-username:hover{color:#818181}.ha-twitter-feed .ha-tweet-content{position:relative;color:#222}.ha-twitter-feed .ha-tweet-content p{margin-bottom:5px}.ha-twitter-feed .ha-tweet-footer{position:absolute;bottom:15px;left:0;padding:0 15px;width:100%;text-align:right}.ha-twitter-feed .ha-tweet-date{color:#a7a7a7}.ha-twitter-feed .ha-tweet-meta{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;-webkit-justify-content:space-around;justify-content:space-around;padding:15px}.ha-twitter-feed .ha-tweet-favorite,.ha-twitter-feed .ha-tweet-retweet{display:inline-block;color:#a7a7a7}.ha-twitter-feed .ha-tweet-favorite{margin-right:12px}.ha-twitter-feed .ha-twitter-load-more-wrapper{margin-top:30px;text-align:center}.ha-twitter-feed .ha-twitter-load-more{display:inline-block;padding:10px 25px;outline:none;border:none;border-radius:50px;background-color:#302a8c;color:#fff;text-align:center;font-weight:400;font-size:16px;-webkit-transition:all .3s;transition:all .3s}.ha-twitter-feed .ha-twitter-load-more:hover{background-color:#e2498a}.ha-twitter-feed .ha-tweet-error-message{padding:20px;border-left:4px solid #ff7726;background-color:#fff9f5}.ha-post-list-item a img,.ha-twitter-feed.ha-twitter-left .ha-tweet-avatar{margin-right:15px}.ha-twitter-feed.ha-twitter-left .ha-tweet-content{text-align:left}.ha-twitter-feed.ha-twitter-center .ha-tweet-author{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-twitter-feed.ha-twitter-center .ha-tweet-content{text-align:center}.ha-twitter-feed.ha-twitter-right .ha-tweeter-feed-icon i{right:auto;left:5px;-webkit-transform:rotateY(-180deg);transform:rotateY(-180deg)}.ha-twitter-feed.ha-twitter-right .ha-tweet-author{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ha-twitter-feed.ha-twitter-right .ha-tweet-content{text-align:right}.ha-twitter-feed.ha-twitter-user-bottom .ha-tweet-inner-wrapper{-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.ha-twitter-feed.ha-twitter-user-bottom .ha-tweet-author{margin-top:10px;margin-bottom:0}.ha-twitter-feed.ha-tweet-glassy-yes .ha-tweet-content:before{background-color:rgba(255,255,255,.4);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.ha-post-list{margin:0;padding:0;list-style:none}.ha-post-list .ha-post-list-item,.ha-post-list.ha-post-list-inline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-post-list.ha-post-list-inline{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.ha-post-list .ha-post-list-item{margin:0 0 10px;padding:0}.ha-post-list.ha-post-list-inline .ha-post-list-item{margin-right:21px}.ha-post-list .ha-post-list-item:last-child,.ha-post-list.ha-post-list-inline .ha-post-list-item:last-child{margin-right:0;margin-bottom:0}.ha-post-list .ha-post-list-item a{width:100%}.ha-post-list-title{display:block;margin-top:0;margin-bottom:0;color:#242424;font-size:1rem;-webkit-transition:all .4s;transition:all .4s}.ha-post-list .ha-post-list-item a:hover .ha-post-list-title,.ha-taxonomy-list .ha-taxonomy-list-item a:hover .ha-taxonomy-list-title{color:#e04d8b}span.ha-post-list-icon{margin-right:8px;color:#242424;font-size:14px}.ha-post-list .ha-post-list-item a,.ha-post-list-meta-wrap,.ha-post-tab span.ha-post-tab-loading{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-post-list-meta-wrap{margin-top:3px}.ha-post-list-meta-wrap span{margin-right:10px;color:#8c8c8c;font-size:13px}.ha-post-list-meta-wrap span i{margin-right:3px}.ha-post-tab .ha-post-tab-filter{padding:0;border-bottom:1px solid #ddd;list-style:none}.ha-post-tab .ha-post-tab-filter li{display:inline-block;margin:0 5px 0 0;padding:15px 25px;background:#fff;color:#333;text-decoration:none;-webkit-transition:all .3s;transition:all .3s}.ha-post-tab .ha-post-tab-filter li.active,.ha-post-tab .ha-post-tab-filter li:hover,.ha-post-tab.ha-post-tab-left .ha-post-tab-filter li.active,.ha-post-tab.ha-post-tab-left .ha-post-tab-filter li:hover{background:#6d39ef;color:#fff}.ha-post-tab .ha-post-tab-item-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;visibility:hidden;overflow:hidden;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;height:0;opacity:0}.ha-post-tab span.ha-post-tab-loading{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;width:100%;height:100%;text-align:center;font-size:60px;opacity:.5}.ha-post-tab .ha-post-tab-item-wrapper.active{visibility:visible;height:auto;opacity:1}.ha-post-tab .ha-post-tab-item{margin-bottom:30px;padding-right:15px;padding-left:15px}.ha-post-tab .ha-post-tab-item-inner{box-sizing:border-box;padding:20px;height:100%;border-radius:5px;background:#fff;box-shadow:0 1px 20px rgba(0,0,0,.09)}.ha-post-tab .ha-post-tab-item-inner .ha-post-tab-thumb{position:relative;display:block;overflow:hidden;margin-bottom:15px;padding-right:0;padding-left:0}.ha-post-tab .ha-post-tab-item-inner .ha-post-tab-thumb img{max-width:100%;height:auto}.ha-post-tab .ha-post-tab-item-inner .ha-post-tab-title{margin-top:0;margin-bottom:10px;font-size:16px}.ha-post-tab .ha-post-tab-item-inner .ha-post-tab-title a,.ha-post-tab .ha-post-tab-meta span a{color:#333;text-decoration:none;-webkit-transition:all .4s;transition:all .4s}.ha-post-tab .ha-post-tab-meta span a:hover,.ha-post-tab .ha-post-tab-title a:hover{color:#6d39ef}.ha-post-tab .ha-post-tab-meta{font-size:14px}.ha-post-tab .ha-post-tab-meta span{display:inline-block;margin-top:10px;margin-right:15px;color:#9b9b9b;-webkit-transition:all .4s;transition:all .4s}.ha-post-tab .ha-post-tab-meta span i{padding-right:5px}.ha-post-tab .ha-post-tab-meta span a{color:#9b9b9b}.ha-post-tab .ha-post-tab-excerpt p{margin:0}.ha-post-tab.ha-post-tab-left,.ha-post-tab.ha-post-tab-right{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.ha-post-tab.ha-post-tab-left .ha-post-tab-filter{-webkit-box-flex:0;-webkit-flex:0 0 200px;-ms-flex:0 0 200px;flex:0 0 200px;min-width:200px;border-right:1px solid #f1f1f1;border-bottom:none}.ha-post-tab.ha-post-tab-left .ha-post-tab-filter li,.ha-post-tab.ha-post-tab-right .ha-post-tab-filter li{text-align:left;display:block;margin:0;text-decoration:none;-webkit-transition:all .3s;transition:all .3s}.ha-post-tab.ha-post-tab-right .ha-post-tab-filter li{text-align:right}.ha-post-tab.ha-post-tab-left .ha-post-tab-content{-webkit-box-flex:0;-webkit-flex:0 0 calc(100% - 200px);-ms-flex:0 0 calc(100% - 200px);flex:0 0 calc(100% - 200px);min-width:calc(100% - 200px);min-height:100%}.ha-post-tab.ha-post-tab-right{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ha-post-tab.ha-post-tab-right .ha-post-tab-filter{-webkit-box-flex:0;-webkit-flex:0 0 200px;-ms-flex:0 0 200px;flex:0 0 200px;min-width:200px;border-bottom:none;border-left:1px solid #f1f1f1}.ha-post-tab.ha-post-tab-right .ha-post-tab-content{-webkit-box-flex:0;-webkit-flex:0 0 calc(100% - 200px);-ms-flex:0 0 calc(100% - 200px);flex:0 0 calc(100% - 200px);min-width:calc(100% - 200px);min-height:100%}@media (max-width:767px){.ha-post-tab.ha-post-tab-right{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ha-post-tab.ha-post-tab-left .ha-post-tab-filter,.ha-post-tab.ha-post-tab-right .ha-post-tab-filter{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;min-width:100%;border-right:0;border-bottom:1px solid #f1f1f1;border-left:0}.ha-post-tab.ha-post-tab-left .ha-post-tab-content,.ha-post-tab.ha-post-tab-right .ha-post-tab-content{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;min-width:100%;min-height:100%}.ha-post-tab.ha-post-tab-left .ha-post-tab-filter li,.ha-post-tab.ha-post-tab-right .ha-post-tab-filter li{display:inline-block}}.ha-taxonomy-list{margin:0;padding:0;list-style:none}.ha-taxonomy-list.ha-taxonomy-list-inline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.ha-taxonomy-list .ha-taxonomy-list-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:0 0 10px;padding:0}.ha-taxonomy-list.ha-taxonomy-list-inline .ha-taxonomy-list-item{margin-right:21px}.ha-taxonomy-list .ha-taxonomy-list-item:last-child,.ha-taxonomy-list.ha-taxonomy-list-inline .ha-taxonomy-list-item:last-child{margin-right:0;margin-bottom:0}.ha-taxonomy-list .ha-taxonomy-list-item a{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;width:100%}.ha-taxonomy-list-title{display:block;margin-top:0;margin-bottom:0;color:#242424;font-size:1rem;-webkit-transition:all .4s;transition:all .4s}.ha-taxonomy-list span.ha-taxonomy-list-icon{margin-right:8px;color:#242424;font-size:14px}.ha-taxonomy-list span.ha-taxonomy-list-icon svg{display:block;width:auto;height:1em}.ha-taxonomy-list span.ha-taxonomy-list-image{margin-right:15px;line-height:1}.ha-taxonomy-list span.ha-taxonomy-list-image img{width:50px}.ha-threesixty-rotation-inner{overflow:hidden;background:#0c5460}.ha-threesixty-rotation-inner img{cursor:move}.ha-img-magnifier-glass{position:absolute;width:200px;height:200px;border:3px solid #000;border-radius:50%;cursor:none}span.ha-threesixty-rotation-magnify{position:absolute;top:15px;right:15px;display:inline-block;font-size:22px;line-height:1}.ha-threesixty-rotation-autoplay{display:none}.ha-threesixty-rotation-autoplay-button button{display:inline-block;padding:.4rem 2rem;outline:none;border-radius:40px;background-color:#e2498a;color:#fff;text-decoration:none;text-transform:uppercase;font-size:24px;-webkit-transition:all .3s;transition:all .3s}.ha-threesixty-rotation-autoplay-button button:focus{outline:none}.ha-threesixty-rotation-autoplay-button button:hover{outline:none;background-color:#562dd4;color:#fff}.ha-threesixty-rotation-360img{position:absolute;top:0;right:0;bottom:0;left:0;z-index:2;margin:auto;width:100px;height:100px;border-radius:50%;background-color:rgba(38,39,39,.5);background-position:50% 50%;background-size:contain;background-repeat:no-repeat;box-shadow:rgba(255,255,255,.5) 0 0 4px;color:#505050;text-align:center;line-height:100px;-webkit-transition:all .5s ease 0s;transition:all .5s ease 0s}
1
+ .elementor-widget{-webkit-transition-duration:var(--ha-tfx-transition-duration,.2s);transition-duration:var(--ha-tfx-transition-duration,.2s);-webkit-transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transform:translate(var(--ha-tfx-translate-x,0),var(--ha-tfx-translate-y,0)) scale(var(--ha-tfx-scale-x,1),var(--ha-tfx-scale-y,1)) skew(var(--ha-tfx-skew-x,0),var(--ha-tfx-skew-y,0)) rotateX(var(--ha-tfx-rotate-x,0)) rotateY(var(--ha-tfx-rotate-y,0)) rotateZ(var(--ha-tfx-rotate-z,0));transform:translate(var(--ha-tfx-translate-x,0),var(--ha-tfx-translate-y,0)) scale(var(--ha-tfx-scale-x,1),var(--ha-tfx-scale-y,1)) skew(var(--ha-tfx-skew-x,0),var(--ha-tfx-skew-y,0)) rotateX(var(--ha-tfx-rotate-x,0)) rotateY(var(--ha-tfx-rotate-y,0)) rotateZ(var(--ha-tfx-rotate-z,0))}.elementor-widget:hover{-webkit-transform:translate(var(--ha-tfx-translate-x-hover,0),var(--ha-tfx-translate-y-hover,0)) scale(var(--ha-tfx-scale-x-hover,1),var(--ha-tfx-scale-y-hover,1)) skew(var(--ha-tfx-skew-x-hover,0),var(--ha-tfx-skew-y-hover,0)) rotateX(var(--ha-tfx-rotate-x-hover,0)) rotateY(var(--ha-tfx-rotate-y-hover,0)) rotateZ(var(--ha-tfx-rotate-z-hover,0));transform:translate(var(--ha-tfx-translate-x-hover,0),var(--ha-tfx-translate-y-hover,0)) scale(var(--ha-tfx-scale-x-hover,1),var(--ha-tfx-scale-y-hover,1)) skew(var(--ha-tfx-skew-x-hover,0),var(--ha-tfx-skew-y-hover,0)) rotateX(var(--ha-tfx-rotate-x-hover,0)) rotateY(var(--ha-tfx-rotate-y-hover,0)) rotateZ(var(--ha-tfx-rotate-z-hover,0))}.happy-addon>.elementor-widget-container{word-wrap:break-word;overflow-wrap:break-word;box-sizing:border-box}.happy-addon>.elementor-widget-container *{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}.happy-addon .elementor-inline-editing{min-height:auto!important}.ha-screen-reader-text{position:absolute;overflow:hidden;clip:rect(1px,1px,1px,1px);margin:-1px;padding:0;width:1px;height:1px;border:0;word-wrap:normal!important;-webkit-clip-path:inset(50%);clip-path:inset(50%)}.ha-has-background-overlay>.elementor-widget-container{position:relative;z-index:1}.ha-has-background-overlay>.elementor-widget-container:before{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;content:""}.ha-popup--is-enabled .ha-js-popup,.ha-popup--is-enabled .ha-js-popup img{cursor:-webkit-zoom-in!important;cursor:zoom-in!important}.mfp-wrap .mfp-arrow,.mfp-wrap .mfp-close{background-color:transparent}.mfp-wrap .mfp-arrow:focus,.mfp-wrap .mfp-close:focus{outline-width:thin}.ha-btn{display:inline-block;max-width:100%;vertical-align:middle;text-align:center;text-decoration:none;font-size:14px;line-height:1;-webkit-transition:all .3s;transition:all .3s}.ha-btn:not(.ha-btn--link){padding:15px 25px;border-radius:5px;background-color:#562dd4;color:#fff}.ha-btn:not(.ha-btn--link):focus,.ha-btn:not(.ha-btn--link):hover{background-color:#e2498a}.ha-btn.ha-btn--link{color:#562dd4}.ha-btn.ha-btn--link:focus,.ha-btn.ha-btn--link:hover{color:#e2498a}.ha-btn-icon+.ha-btn-text,.ha-btn-text+.ha-btn-icon{margin-left:5px}.ha-btn-icon--svg{display:inline-block}.ha-btn-icon--svg svg{width:auto;height:1em}.ha-badge{padding:10px 18px;border-radius:50px;background-color:#fff;font-size:12px;line-height:1;-webkit-transform:translate(var(--ha-badge-translate-x),var(--ha-badge-translate-y));-ms-transform:translate(var(--ha-badge-translate-x),var(--ha-badge-translate-y));transform:translate(var(--ha-badge-translate-x),var(--ha-badge-translate-y));--ha-badge-translate-x:0;--ha-badge-translate-y:0}.ha-badge--top-left{top:25px;left:25px}.ha-badge--top-center{top:25px;left:50%;--ha-badge-translate-x:-50%}.ha-badge--top-right{top:25px;right:25px}.ha-badge--middle-center,.ha-badge--middle-left{top:50%;left:25px;--ha-badge-translate-x:-50%}.ha-badge--middle-center{left:50%;--ha-badge-translate-y:-50%}.ha-badge--middle-right{top:50%;right:25px;--ha-badge-translate-y:-50%}.ha-badge--bottom-left{bottom:25px;left:25px}.ha-badge--bottom-center{bottom:25px;left:50%;--ha-badge-translate-x:-50%}.ha-badge--bottom-right{right:25px;bottom:25px}.ha-card{--ha-card-body-width-left:calc(100% - var(--ha-card-image-width) + (-1*var(--ha-card-image-offset-x)));--ha-card-body-width-right:calc(100% - var(--ha-card-image-width) + var(--ha-card-image-offset-x));--ha-card-image-offset-x:calc(1px - 1px);--ha-card-image-offset-y:calc(1px - 1px);--ha-card-image-width:100%}.ha-card>.elementor-widget-container{border-radius:5px;background-color:#fff;box-shadow:0 3px 40px rgba(36,36,36,.1)}.ha-card-figure{position:relative;-webkit-box-flex:0;-webkit-flex:0 0 var(--ha-card-image-width);-ms-flex:0 0 var(--ha-card-image-width);flex:0 0 var(--ha-card-image-width);max-width:var(--ha-card-image-width);height:250px;-webkit-transform:translate(var(--ha-card-image-offset-x),var(--ha-card-image-offset-y));-ms-transform:translate(var(--ha-card-image-offset-x),var(--ha-card-image-offset-y));transform:translate(var(--ha-card-image-offset-x),var(--ha-card-image-offset-y))}.ha-card-figure img,.ha-infobox-figure img,.ha-member-figure img{width:100%;height:100%;vertical-align:bottom}.ha-card-body{padding:25px}.ha-card-title{margin-top:0;margin-bottom:10px;color:#151515;font-weight:700;font-size:22px}.ha-card-text{margin-bottom:25px;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--top .ha-card-figure img{border-radius:5px 5px 0 0}.ha-card--top .ha-card-body{margin-top:var(--ha-card-image-offset-y);max-width:initial;width:100%}.ha-card--left,.ha-card--right{--ha-card-image-width:50%}.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 .ha-card-body,.ha-card--right .ha-card-body{padding:35px}.ha-card--left .ha-card-body{-webkit-box-flex:0;-webkit-flex:0 0 var(--ha-card-body-width-left);-ms-flex:0 0 var(--ha-card-body-width-left);flex:0 0 var(--ha-card-body-width-left);margin-left:var(--ha-card-image-offset-x);max-width:var(--ha-card-body-width-left)}.ha-card--left .ha-card-figure img{border-radius:5px 0 0 5px}.ha-card--right .ha-card-body{-webkit-box-flex:0;-webkit-flex:0 0 var(--ha-card-body-width-right);-ms-flex:0 0 var(--ha-card-body-width-right);flex:0 0 var(--ha-card-body-width-right);margin-right:calc(-1*var(--ha-card-image-offset-x));max-width:var(--ha-card-body-width-right)}.ha-card--right .ha-card-figure img{border-radius:0 5px 5px 0}@media (max-width:1024px){.ha-card--tablet-top{--ha-card-image-width:100%}.ha-card--tablet-top .ha-card-figure{display:inline-block}.ha-card--tablet-top .ha-card-figure img{border-radius:5px 5px 0 0}.ha-card--tablet-top .ha-card-body{margin-top:var(--ha-card-image-offset-y);padding:25px;max-width:initial;width:100%}.ha-card--tablet-left,.ha-card--tablet-right{--ha-card-image-width:50%}.ha-card--tablet-left>.elementor-widget-container,.ha-card--tablet-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--tablet-left .ha-card-body{-webkit-box-flex:0;-webkit-flex:0 0 var(--ha-card-body-width-left);-ms-flex:0 0 var(--ha-card-body-width-left);flex:0 0 var(--ha-card-body-width-left);margin-left:var(--ha-card-image-offset-x);max-width:var(--ha-card-body-width-left)}.ha-card--tablet-left .ha-card-figure img{border-radius:5px 0 0 5px}.ha-card--tablet-right .ha-card-body{-webkit-box-flex:0;-webkit-flex:0 0 var(--ha-card-body-width-right);-ms-flex:0 0 var(--ha-card-body-width-right);flex:0 0 var(--ha-card-body-width-right);margin-right:calc(-1*var(--ha-card-image-offset-x));max-width:var(--ha-card-body-width-right)}.ha-card--tablet-right .ha-card-figure img{border-radius:0 5px 5px 0}}@media (max-width:767px){.ha-card--tablet-top{--ha-card-image-width:100%}.ha-card--tablet-top .ha-card-figure{display:inline-block}.ha-card--tablet-top .ha-card-figure img{border-radius:5px 5px 0 0}.ha-card--tablet-top .ha-card-body{margin-top:var(--ha-card-image-offset-y);padding:25px;max-width:initial;width:100%}.ha-card--mobile-left,.ha-card--mobile-right{--ha-card-image-width:50%}.ha-card--mobile-left>.elementor-widget-container,.ha-card--mobile-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--mobile-left .ha-card-body{-webkit-box-flex:0;-webkit-flex:0 0 var(--ha-card-body-width-left);-ms-flex:0 0 var(--ha-card-body-width-left);flex:0 0 var(--ha-card-body-width-left);margin-left:var(--ha-card-image-offset-x);max-width:var(--ha-card-body-width-left)}.ha-card--mobile-left .ha-card-figure img{border-radius:5px 0 0 5px}.ha-card--mobile-right .ha-card-body{-webkit-box-flex:0;-webkit-flex:0 0 var(--ha-card-body-width-right);-ms-flex:0 0 var(--ha-card-body-width-right);flex:0 0 var(--ha-card-body-width-right);margin-right:calc(-1*var(--ha-card-image-offset-x));max-width:var(--ha-card-body-width-right)}.ha-card--mobile-right .ha-card-figure img{border-radius:0 5px 5px 0}}.ha-card .ha-badge{position:absolute}.ha-infobox{--ha-infobox-media-offset-x:0;--ha-infobox-media-offset-y:0;--ha-infobox-media-rotate:0}.ha-infobox>.elementor-widget-container{padding:25px;border-radius:5px;background-color:#fff;box-shadow:0 3px 40px rgba(36,36,36,.1)}.ha-infobox-title{margin-top:0;margin-bottom:10px;color:#151515;font-size:24px}.ha-infobox-figure{display:inline-block;margin:0 0 25px!important;-webkit-transform:translate(var(--ha-infobox-media-offset-x),var(--ha-infobox-media-offset-y));-ms-transform:translate(var(--ha-infobox-media-offset-x),var(--ha-infobox-media-offset-y));transform:translate(var(--ha-infobox-media-offset-x),var(--ha-infobox-media-offset-y))}.ha-infobox-figure--icon{text-align:center;font-size:48px;line-height:1;-webkit-transform:translate(var(--ha-infobox-media-offset-x),var(--ha-infobox-media-offset-y)) rotate(var(--ha-infobox-media-rotate));-ms-transform:translate(var(--ha-infobox-media-offset-x),var(--ha-infobox-media-offset-y)) rotate(var(--ha-infobox-media-rotate));transform:translate(var(--ha-infobox-media-offset-x),var(--ha-infobox-media-offset-y)) rotate(var(--ha-infobox-media-rotate))}.ha-infobox-figure i,.ha-infobox-figure svg{-webkit-transform:rotate(calc(-1*var(--ha-infobox-media-rotate)));-ms-transform:rotate(calc(-1*var(--ha-infobox-media-rotate)));transform:rotate(calc(-1*var(--ha-infobox-media-rotate)))}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-icon i:before,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon i:before,.ha-icon-box-icon i:before,.ha-infobox-figure i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-infobox-body{margin-top:var(--ha-infobox-media-offset-y)}.ha-infobox-text+.ha-btn--link{margin-top:25px}.ha-icon-box>.elementor-widget-container{position:relative;padding:25px;border-radius:5px;background-color:#fff;box-shadow:0 3px 40px rgba(36,36,36,.1)}.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:20px;color:#151515;text-align:center;font-size:48px;-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,.ha-icon-box-icon svg,.ha-infobox-figure i,.ha-infobox-figure svg{position:relative;display:block;width:1em;height:1em}.ha-icon-box-icon i{-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:25px;border-radius:5px;background-color:#fff;box-shadow:0 3px 40px rgba(36,36,36,.1)}.ha-member-figure{display:inline-block;margin:0 0 25px!important}.ha-member-name{margin-top:0;margin-bottom:10px;color:#151515;font-size:18px}.ha-member-position{margin-bottom:25px;color:#7f7f7f;font-size:14px}.ha-member-bio{margin-bottom:25px;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-gallery-filter>li:not(:last-child),.ha-member-links>a:not(:last-child){margin-right:10px}.ha-member .ha-btn{margin-bottom:15px}.ha-member-body .ha-btn:last-child{margin-top:15px;margin-bottom:0}.ha-review{--ha-review-left-body-width:calc(100% - var(--ha-review-media-width) + (-1*var(--ha-review-media-offset-x)));--ha-review-media-offset-x:calc(1px - 1px);--ha-review-media-offset-y:calc(1px - 1px);--ha-review-right-body-width:calc(100% - var(--ha-review-media-width) + (var(--ha-review-media-offset-x)))}.ha-review>.elementor-widget-container{border-radius:5px;background-color:#fff;box-shadow:0 3px 40px rgba(36,36,36,.1)}.ha-review-header{margin-top:25px}.ha-review-figure{-webkit-box-flex:0;-webkit-flex:0 0 var(--ha-review-media-width,70px);-ms-flex:0 0 var(--ha-review-media-width,70px);flex:0 0 var(--ha-review-media-width,70px);margin:0;max-width:var(--ha-review-media-width,70px);-webkit-transform:translate(var(--ha-review-media-offset-x),var(--ha-review-media-offset-y));-ms-transform:translate(var(--ha-review-media-offset-x),var(--ha-review-media-offset-y));transform:translate(var(--ha-review-media-offset-x),var(--ha-review-media-offset-y))}.ha-review-figure img{width:100%;height:100%;border-radius:50%;vertical-align:bottom}.ha-review-reviewer{margin-top:0;margin-bottom:10px;color:#151515;font-size:18px}.ha-review-position{margin-bottom:10px;color:#7f7f7f;font-size:15px}.ha-review-ratting{display:inline-block;font-size:12px;line-height:1}.ha-review-ratting--num{padding:5px 10px;border-radius:20px;background-color:#562dd4;color:#fff}.ha-review-ratting--star{color:#ffbf36}.ha-review-desc{margin-top:25px;font-size:16px;line-height:1.6}.ha-review-desc p{margin:0}.ha-review--top>.elementor-widget-container{padding:25px}.ha-review--top .ha-review-figure{display:inline-block;height:70px}.ha-review--top .ha-review-body{margin-top:var(--ha-review-media-offset-y)}.ha-review--left,.ha-review--right{--ha-review-media-width:150px}.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}.ha-review--left .ha-review-figure,.ha-review--right .ha-review-figure{height:150px}.ha-review--left .ha-review-body,.ha-review--right .ha-review-body{padding:25px}.ha-review--left .ha-review-body>:first-child,.ha-review--right .ha-review-body>:first-child{margin-top:0}.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;padding-left:25px}.ha-review--left .ha-review-body{-webkit-box-flex:0;-webkit-flex:0 0 var(--ha-review-left-body-width);-ms-flex:0 0 var(--ha-review-left-body-width);flex:0 0 var(--ha-review-left-body-width);margin-left:var(--ha-review-media-offset-x);max-width:var(--ha-review-left-body-width)}.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:25px;text-align:right}.ha-review--right .ha-review-body{-webkit-box-flex:0;-webkit-flex:0 0 var(--ha-review-right-body-width);-ms-flex:0 0 var(--ha-review-right-body-width);flex:0 0 var(--ha-review-right-body-width);margin-right:calc(-1*var(--ha-review-media-offset-x));max-width:var(--ha-review-right-body-width)}.ha-image-compare>.elementor-widget-container{border-radius:5px;background-color:#fff;box-shadow:0 3px 40px rgba(36,36,36,.1)}.ha-image-compare .twentytwenty-container,.ha-image-compare .twentytwenty-wrapper,a.ha-social-icon:after,a.ha-social-icon:before{border-radius:inherit}.ha-gallery-filter{margin:0 10px 2rem;padding:0;list-style:none}.ha-gallery-filter>li{display:inline-block;margin-bottom:10px;max-width:100%}.ha-gallery-filter>li>button{display:block;overflow:hidden;padding:10px 25px;max-width:100%;border:2px solid #562dd4;border-radius:.25rem;background-color:transparent;color:#562dd4;text-transform:uppercase;text-overflow:ellipsis;font-size:14px;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ha-gallery-filter>li>button:focus,.ha-gallery-filter>li>button:hover{outline:0;background-color:#562dd4;color:#fff}.ha-gallery-filter>.ha-filter-active>button{background-color:#562dd4;color:#fff}.ha-image-grid-item{float:left}.ha-image-grid-inner{position:relative;display:block;overflow:hidden;margin:10px;text-decoration:none}.ha-image-grid-inner img{display:block;width:100%;-webkit-transition:all .25s;transition:all .25s}.ha-image-grid--layout-even .ha-image-grid-inner{height:250px}.ha-image-grid--layout-even .ha-image-grid-inner img{height:100%}.ha-justified-gallery-item,.ha-justified-gallery-item>img{border-radius:6px}.ha-justified-gallery .justified-gallery>.ha-justified-gallery-item>.caption{bottom:-100px!important;padding:10px;-webkit-transition:all .25s!important;transition:all .25s!important;-webkit-animation:haSmoothReveal .3s forwards;animation:haSmoothReveal .3s forwards}.ha-justified-gallery .justified-gallery>.ha-justified-gallery-item>.caption.caption-visible{bottom:0!important}.ha-justified-gallery .justified-gallery>.entry-visible>a>img,.ha-justified-gallery .justified-gallery>.entry-visible>img{-webkit-transition:all 300ms,opacity 500ms ease-in;transition:all 300ms,opacity 500ms ease-in}@-webkit-keyframes haSmoothReveal{0%{-webkit-transform:translateY(100px);transform:translateY(100px)}to{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes haSmoothReveal{0%{-webkit-transform:translateY(100px);transform:translateY(100px)}to{-webkit-transform:translateY(0);transform:translateY(0)}}.ha-carousel .slick-vertical .slick-slide,.ha-slider .slick-vertical .slick-slide{border:0}.ha-carousel .slick-next,.ha-carousel .slick-prev,.ha-slider .slick-next,.ha-slider .slick-prev{z-index:999;padding:0;border:1px solid rgba(255,255,255,.8);border-radius:50%;background-color:rgba(255,255,255,.8);color:#8c8c8c;text-align:center;font-size:12px;opacity:1}.ha-carousel .slick-next:focus,.ha-carousel .slick-next:hover,.ha-carousel .slick-prev:focus,.ha-carousel .slick-prev:hover,.ha-slider .slick-next:focus,.ha-slider .slick-next:hover,.ha-slider .slick-prev:focus,.ha-slider .slick-prev:hover{background-color:#fff;color:#8c8c8c}.ha-carousel .slick-next:before,.ha-carousel .slick-prev:before,.ha-slider .slick-next:before,.ha-slider .slick-prev:before{content:""}.ha-carousel .slick-disabled,.ha-slider .slick-disabled{opacity:.7}.ha-carousel .slick-prev,.ha-slider .slick-prev{left:25px}.ha-carousel .slick-next,.ha-slider .slick-next{right:25px}.ha-carousel .slick-dots,.ha-slider .slick-dots{bottom:-40px}.ha-carousel .slick-dots li,.ha-slider .slick-dots li{margin-right:2px;margin-left:2px}.ha-carousel .slick-dots li button:focus,.ha-carousel .slick-dots li button:hover,.ha-slider .slick-dots li button:focus,.ha-slider .slick-dots li button:hover{background-color:transparent}.ha-carousel .slick-dots li button:before,.ha-slider .slick-dots li button:before{color:#1b1b1b;opacity:1}.ha-carousel .slick-dots .slick-active button:before,.ha-carousel .slick-dots li button:hover:before,.ha-slider .slick-dots .slick-active button:before,.ha-slider .slick-dots li button:hover:before{-webkit-transform:scale(1.5);-ms-transform:scale(1.5);transform:scale(1.5)}.ha-carousel .slick-next,.ha-carousel .slick-prev{width:40px;height:40px;line-height:40px}.ha-slider .slick-next,.ha-slider .slick-prev{width:50px;height:50px;line-height:50px}.ha-carousel .slick-slider:not(.slick-vertical) .slick-slide{padding-right:5px;padding-left:5px}.ha-carousel .slick-slider.slick-vertical .slick-slide{padding-top:5px;padding-bottom:5px}.ha-slick-item{position:relative;display:inline-block;overflow:hidden;vertical-align:bottom}.ha-slick-content{position:absolute;bottom:0;padding:1.5rem;width:100%;background:-webkit-linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.3));background:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.3))}.ha-slick-title{margin-top:0;margin-bottom:.2rem;color:#fff;font-size:20px}.ha-slick-subtitle{margin:0;color:#fff}.ha-skills>.elementor-widget-container{padding-top:1px}.ha-skill{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border-radius:15px;background-color:#e9ecef;font-size:.75rem}.ha-skill--inside .ha-skill-info,.ha-skill--outside .ha-skill-info{text-align:left;font-size:14px;line-height:1}.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{height:30px}.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;width:10%;border-radius:inherit;background-color:#562dd4;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-skill-name{display:inline-block;overflow:hidden;max-width:70%;text-overflow:ellipsis}.ha-gradient-heading{margin-top:0;margin-bottom:0}.ha-gradient-heading>a{color:inherit;text-decoration:none}.ha-logo-grid-item{float:left;overflow:hidden;height:180px;border-color:#e7e7e7}.ha-logo-grid-figure{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;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;margin:0;padding:30px;width:100%;height:100%}.ha-logo-grid-img{max-height:100%}@media (min-width:1025px){.ha-logo-grid--col-2 .ha-logo-grid-item{width:calc(100%/2)}.ha-logo-grid--col-3 .ha-logo-grid-item{width:calc(100%/3)}.ha-logo-grid--col-4 .ha-logo-grid-item{width:calc(100%/4)}.ha-logo-grid--col-5 .ha-logo-grid-item{width:calc(100%/5)}.ha-logo-grid--col-6 .ha-logo-grid-item{width:calc(100%/6)}}@media (max-width:1024px) and (min-width:768px){.ha-logo-grid--col--tablet2 .ha-logo-grid-item{width:calc(100%/2)}.ha-logo-grid--col--tablet3 .ha-logo-grid-item{width:calc(100%/3)}.ha-logo-grid--col--tablet4 .ha-logo-grid-item{width:calc(100%/4)}.ha-logo-grid--col--tablet5 .ha-logo-grid-item{width:calc(100%/5)}.ha-logo-grid--col--tablet6 .ha-logo-grid-item{width:calc(100%/6)}}@media (max-width:767px){.ha-logo-grid--col--mobile2 .ha-logo-grid-item{width:calc(100%/2)}.ha-logo-grid--col--mobile3 .ha-logo-grid-item{width:calc(100%/3)}.ha-logo-grid--col--mobile4 .ha-logo-grid-item{width:calc(100%/4)}.ha-logo-grid--col--mobile5 .ha-logo-grid-item{width:calc(100%/5)}.ha-logo-grid--col--mobile6 .ha-logo-grid-item{width:calc(100%/6)}}.ha-logo-grid--tictactoe .ha-logo-grid-item{border-width:2px 2px 0 0;border-style:solid}@media (min-width:1025px){.ha-logo-grid--tictactoe.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:0!important}}@media (max-width:1024px) and (min-width:768px){.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(2n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(3n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(4n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(5n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(6n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:0!important}}@media (max-width:767px){.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(2n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(3n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(4n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(5n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(6n){border-right-width:0!important}.ha-logo-grid--tictactoe.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:0!important}}.ha-logo-grid--border .ha-logo-grid-item{border-width:0 2px 2px 0;border-style:solid}.ha-logo-grid--border .ha-logo-grid-item:first-child{border-top-left-radius:10px}.ha-logo-grid--border .ha-logo-grid-item:last-child{border-bottom-right-radius:10px}@media (min-width:1025px){.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-child(2){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-2 .ha-logo-grid-item:nth-last-child(2){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-child(3){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-3 .ha-logo-grid-item:nth-last-child(3){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-child(4){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-4 .ha-logo-grid-item:nth-last-child(4){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-child(5){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-5 .ha-logo-grid-item:nth-last-child(5){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-child(6){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col-6 .ha-logo-grid-item:nth-last-child(6){border-bottom-left-radius:10px}}@media (max-width:1024px) and (min-width:768px){.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(2n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-child(2){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet2 .ha-logo-grid-item:nth-last-child(2){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(3n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-child(3){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet3 .ha-logo-grid-item:nth-last-child(3){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(4n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-child(4){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet4 .ha-logo-grid-item:nth-last-child(4){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(5n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-child(5){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet5 .ha-logo-grid-item:nth-last-child(5){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(6n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-child(6){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--tablet6 .ha-logo-grid-item:nth-last-child(6){border-bottom-left-radius:10px}}@media (max-width:767px){.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(-n+2){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(2n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-child(2){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile2 .ha-logo-grid-item:nth-last-child(2){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(-n+3){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(3n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-child(3){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile3 .ha-logo-grid-item:nth-last-child(3){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(-n+4){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(4n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-child(4){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile4 .ha-logo-grid-item:nth-last-child(4){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(-n+5){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(5n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-child(5){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile5 .ha-logo-grid-item:nth-last-child(5){border-bottom-left-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(-n+6){border-top-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(6n+1){border-left-width:2px}.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-child(6){border-top-right-radius:10px}.ha-logo-grid--border.ha-logo-grid--col--mobile6 .ha-logo-grid-item:nth-last-child(6){border-bottom-left-radius:10px}}.ha-logo-grid--box .ha-logo-grid-wrapper{margin:-.5rem}.ha-logo-grid--box .ha-logo-grid-item{margin:.5rem;border-width:2px;border-style:solid;border-radius:.5rem}@media (min-width:1025px){.ha-logo-grid--box.ha-logo-grid--col-2 .ha-logo-grid-item{width:calc((100%/2) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col-3 .ha-logo-grid-item{width:calc((100%/3) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col-4 .ha-logo-grid-item{width:calc((100%/4) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col-5 .ha-logo-grid-item{width:calc((100%/5) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col-6 .ha-logo-grid-item{width:calc((100%/6) - 1rem)}}@media (max-width:1024px) and (min-width:768px){.ha-logo-grid--box.ha-logo-grid--col--tablet2 .ha-logo-grid-item{width:calc((100%/2) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--tablet3 .ha-logo-grid-item{width:calc((100%/3) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--tablet4 .ha-logo-grid-item{width:calc((100%/4) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--tablet5 .ha-logo-grid-item{width:calc((100%/5) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--tablet6 .ha-logo-grid-item{width:calc((100%/6) - 1rem)}}@media (max-width:767px){.ha-logo-grid--box.ha-logo-grid--col--mobile2 .ha-logo-grid-item{width:calc((100%/2) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--mobile3 .ha-logo-grid-item{width:calc((100%/3) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--mobile4 .ha-logo-grid-item{width:calc((100%/4) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--mobile5 .ha-logo-grid-item{width:calc((100%/5) - 1rem)}.ha-logo-grid--box.ha-logo-grid--col--mobile6 .ha-logo-grid-item{width:calc((100%/6) - 1rem)}}.ha-dual-btn,.ha-dual-btn-connector{display:inline-block}.ha-dual-btn-wrapper{position:relative;text-align:center;font-weight:400}.ha-dual-btn{padding:1.2rem 3rem;max-width:100%;color:#fff;text-decoration:none;font-size:14px}.ha-dual-btn--left{background-color:#562dd4}.ha-dual-btn--left:focus,.ha-dual-btn--left:hover{background-color:#4423ab;color:#fff}.ha-dual-btn--right{background-color:#e2498a}.ha-dual-btn--right:focus,.ha-dual-btn--right:hover{background-color:#d6226e;color:#fff}.ha-dual-btn-connector{position:absolute!important;z-index:9;overflow:hidden;width:30px;height:30px;border-radius:100%;background-color:#fff;box-shadow:0 0 0 5px rgba(255,255,255,.3);color:#27374c;text-transform:uppercase;font-size:12px;line-height:30px;-webkit-transform:translate(50%,-50%);-ms-transform:translate(50%,-50%);transform:translate(50%,-50%)}.ha-dual-btn-icon>svg{width:1em;height:auto}.ha-dual-btn-icon>i{font-size:1em}.ha-dual-btn-icon--before{margin-right:5px}.ha-dual-btn-icon--after{margin-left:5px}.ha-dual-button>.elementor-widget-container,.ha-news-ticker-wrapper ul.ha-news-ticker-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-dual-button--mobile-layout-stack>.elementor-widget-container{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-dual-button--mobile-layout-stack .ha-dual-btn-wrapper{max-width:100%}.ha-dual-button--mobile-layout-stack .ha-dual-btn-connector{top:100%;right:50%}.ha-dual-button--mobile-layout-stack .ha-dual-btn--left{border-radius:30px 30px 0 0}.ha-dual-button--mobile-layout-stack .ha-dual-btn--right{border-radius:0 0 30px 30px}.ha-dual-button--mobile-layout-stack.ha-dual-button--mobile-align-left>.elementor-widget-container{-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start;-ms-flex-align:start}.ha-dual-button--mobile-layout-stack.ha-dual-button--mobile-align-center>.elementor-widget-container,.ha-testimonial__reviewer{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center}.ha-dual-button--mobile-layout-stack.ha-dual-button--mobile-align-right>.elementor-widget-container{-webkit-box-align:end;-webkit-align-items:flex-end;align-items:flex-end;-ms-flex-align:end}.ha-dual-button--mobile-layout-queue.ha-dual-button--mobile-align-left>.elementor-widget-container{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.ha-dual-button--mobile-layout-queue.ha-dual-button--mobile-align-center>.elementor-widget-container{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.ha-dual-button--mobile-layout-queue.ha-dual-button--mobile-align-right>.elementor-widget-container{-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.ha-dual-button--mobile-layout-queue>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-dual-button--mobile-layout-queue .ha-dual-btn-wrapper{max-width:50%}.ha-dual-button--mobile-layout-queue .ha-dual-btn-connector{top:50%;right:0}.ha-dual-button--mobile-layout-queue .ha-dual-btn--left{border-radius:50px 0 0 50px}.ha-dual-button--mobile-layout-queue .ha-dual-btn--right{border-radius:0 50px 50px 0}@media (min-width:768px){.ha-dual-button--tablet-layout-stack.ha-dual-button--tablet-align-left>.elementor-widget-container{-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start;-ms-flex-align:start}.ha-dual-button--tablet-layout-stack.ha-dual-button--tablet-align-center>.elementor-widget-container{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center}.ha-dual-button--tablet-layout-stack.ha-dual-button--tablet-align-right>.elementor-widget-container{-webkit-box-align:end;-webkit-align-items:flex-end;align-items:flex-end;-ms-flex-align:end}.ha-dual-button--tablet-layout-queue.ha-dual-button--tablet-align-left>.elementor-widget-container{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.ha-dual-button--tablet-layout-queue.ha-dual-button--tablet-align-center>.elementor-widget-container{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.ha-dual-button--tablet-layout-queue.ha-dual-button--tablet-align-right>.elementor-widget-container{-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.ha-dual-button--tablet-layout-stack>.elementor-widget-container{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-dual-button--tablet-layout-stack .ha-dual-btn-wrapper{max-width:100%}.ha-dual-button--tablet-layout-stack .ha-dual-btn-connector{top:100%;right:50%}.ha-dual-button--tablet-layout-stack .ha-dual-btn--left{border-radius:30px 30px 0 0}.ha-dual-button--tablet-layout-stack .ha-dual-btn--right{border-radius:0 0 30px 30px}.ha-dual-button--tablet-layout-queue>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-dual-button--tablet-layout-queue .ha-dual-btn-wrapper{max-width:50%}.ha-dual-button--tablet-layout-queue .ha-dual-btn-connector{top:50%;right:0}.ha-dual-button--tablet-layout-queue .ha-dual-btn--left{border-radius:50px 0 0 50px}.ha-dual-button--tablet-layout-queue .ha-dual-btn--right{border-radius:0 50px 50px 0}}@media (min-width:1025px){.ha-dual-button--layout-stack.ha-dual-button--align-left>.elementor-widget-container{-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start;-ms-flex-align:start}.ha-dual-button--layout-stack.ha-dual-button--align-center>.elementor-widget-container{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center}.ha-dual-button--layout-stack.ha-dual-button--align-right>.elementor-widget-container{-webkit-box-align:end;-webkit-align-items:flex-end;align-items:flex-end;-ms-flex-align:end}.ha-dual-button--layout-queue.ha-dual-button--align-left>.elementor-widget-container{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.ha-dual-button--layout-queue.ha-dual-button--align-center>.elementor-widget-container{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.ha-dual-button--layout-queue.ha-dual-button--align-right>.elementor-widget-container{-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.ha-dual-button--layout-stack>.elementor-widget-container{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-dual-button--layout-stack .ha-dual-btn-wrapper{max-width:100%}.ha-dual-button--layout-stack .ha-dual-btn-connector{top:100%;right:50%}.ha-dual-button--layout-stack .ha-dual-btn--left{border-radius:30px 30px 0 0}.ha-dual-button--layout-stack .ha-dual-btn--right{border-radius:0 0 30px 30px}.ha-dual-button--layout-queue>.elementor-widget-container{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-dual-button--layout-queue .ha-dual-btn-wrapper{max-width:50%}.ha-dual-button--layout-queue .ha-dual-btn-connector{top:50%;right:0}.ha-dual-button--layout-queue .ha-dual-btn--left{border-radius:50px 0 0 50px}.ha-dual-button--layout-queue .ha-dual-btn--right{border-radius:0 50px 50px 0}}.ha-testimonial--basic>.elementor-widget-container{padding:25px;border:1px solid #ececec;border-radius:5px}.ha-testimonial--basic .ha-testimonial__content{margin-bottom:25px}.ha-testimonial--bubble .ha-testimonial__content{position:relative;margin-bottom:25px;padding:25px;border-radius:6px;background-color:#fff;box-shadow:0 .2rem 2.8rem rgba(36,36,36,.1);line-height:1.6}.ha-testimonial--bubble .ha-testimonial__content:after{position:absolute;bottom:-14px;color:#fff;content:"\e911";font-style:normal;font-size:36px;font-family:"Happy Icons";-webkit-transform:rotate(-180deg);-ms-transform:rotate(-180deg);transform:rotate(-180deg)}.ha-testimonial--left.ha-testimonial--bubble .ha-testimonial__content:after{left:15px}.ha-testimonial--center.ha-testimonial--bubble .ha-testimonial__content:after{left:50%;-webkit-transform:translateX(-50%) rotate(-180deg);-ms-transform:translateX(-50%) rotate(-180deg);transform:translateX(-50%) rotate(-180deg)}.ha-testimonial--right.ha-testimonial--bubble .ha-testimonial__content:after{right:15px}.ha-testimonial__reviewer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.ha-testimonial__reviewer-thumb{-webkit-box-flex:0;-webkit-flex:0 0 65px;-ms-flex:0 0 65px;flex:0 0 65px;max-width:65px;height:65px}.ha-testimonial__reviewer-thumb img{width:100%;height:100%;border-radius:50%;-o-object-fit:cover;object-fit:cover}.ha-testimonial__reviewer-name{margin-bottom:10px;color:#562dd4;font-weight:700;font-size:18px}.ha-testimonial__reviewer-title{color:#8c8c8c;font-size:16px}.ha-testimonial--left .ha-testimonial__reviewer-meta{padding-left:25px}.ha-testimonial--center .ha-testimonial__reviewer{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-testimonial--center .ha-testimonial__reviewer-meta{padding-top:15px;max-width:100%}.ha-testimonial--left .ha-testimonial__reviewer-meta,.ha-testimonial--right .ha-testimonial__reviewer-meta{-webkit-box-flex:0;-webkit-flex:0 0 calc(100% - 65px);-ms-flex:0 0 calc(100% - 65px);flex:0 0 calc(100% - 65px);max-width:calc(100% - 65px)}.ha-testimonial--right .ha-testimonial__reviewer{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ha-testimonial--right .ha-testimonial__reviewer-meta{padding-right:25px}.ha-number-body{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;padding:6px;width:50px;height:50px;border-radius:100%;background-color:#562dd4;color:#fff;text-align:center;font-size:20px}.ha-number-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ha-number-text{position:relative;z-index:1;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.ha-flip-box-container:after{display:block;visibility:hidden;clear:both;height:0;content:" ";font-size:0}.ha-flip-box-container .ha-flip-box-inner{position:relative;z-index:1;margin:0;padding:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.ha-flip-box-container .ha-flip-box-inner:hover .ha-flip-box-back{z-index:1}.ha-flip-box-container .ha-flip-box-inner:hover .ha-flip-box-front{z-index:-1}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-inner-wrapper{position:relative;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-perspective:1000px;perspective:1000px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front{top:0;right:0;left:0;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;height:250px;background-position:center;background-clip:padding-box;background-size:cover;background-repeat:no-repeat;text-align:center;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front{background-color:transparent;position:relative;bottom:0;z-index:10;padding:30px;border:1px solid #ddd;border-radius:.3rem}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back:before,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front:before{position:absolute;top:0;left:0;z-index:-9;width:100%;height:100%;background-color:transparent;content:""}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back{position:absolute;z-index:-1;padding:46px;border-radius:.3rem;background-color:#562dd4;color:#fff}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner{position:relative;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;width:100%}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-text,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-text{text-align:center}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-text p,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-text p{margin-top:10px;margin-bottom:0}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon.icon{padding:20px;border-radius:50%;background-color:#f1f4f8;color:#242424}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon{display:inline-block;margin-bottom:20px;text-align:center;font-size:28px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon i,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon svg{display:block;width:1em;height:1em}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon i{position:relative}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-icon img,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon img{width:60px;height:60px;vertical-align:middle}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-box-heading{margin:0;font-weight:700;font-size:20px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner p{margin-bottom:0;font-size:16px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-box-heading-back{margin:0;color:#fff;font-size:18px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-icon{display:inline-block;margin-bottom:20px;text-align:center;font-size:20px}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-icon i,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-icon svg{display:block;width:1em;height:1em}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-icon i{position:relative;color:#fff}.ha-flip-box-container .ha-flip-box-inner.ha-flip-right .ha-flip-box-front,.ha-flip-box-container .ha-flip-box-inner.ha-flip-right:hover .ha-flip-box-back{-webkit-transform:rotateY(0);transform:rotateY(0)}.ha-flip-box-container .ha-flip-box-inner.ha-flip-right .ha-flip-box-back{-webkit-transform:rotateY(-180deg);transform:rotateY(-180deg)}.ha-flip-box-container .ha-flip-box-inner.ha-flip-right:hover .ha-flip-box-front{-webkit-transform:rotateY(180deg);transform:rotateY(180deg)}.ha-flip-box-container .ha-flip-box-inner.ha-flip-up .ha-flip-box-front,.ha-flip-box-container .ha-flip-box-inner.ha-flip-up:hover .ha-flip-box-back{-webkit-transform:rotateX(0);transform:rotateX(0)}.ha-flip-box-container .ha-flip-box-inner.ha-flip-up .ha-flip-box-back{-webkit-transform:rotateX(-180deg);transform:rotateX(-180deg)}.ha-flip-box-container .ha-flip-box-inner.ha-flip-up:hover .ha-flip-box-front{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.ha-flip-box-container.ha-flip-effect-classic .ha-flip-box-back,.ha-flip-box-container.ha-flip-effect-classic .ha-flip-box-front{-webkit-transition:-webkit-transform .6s cubic-bezier(.2,.85,.4,1.275);transition:transform .6s cubic-bezier(.2,.85,.4,1.275);transition:transform .6s cubic-bezier(.2,.85,.4,1.275),-webkit-transform .6s cubic-bezier(.2,.85,.4,1.275)}.ha-logo-grid-wrapper:after{display:block;clear:both;content:""}.ha-pricing-table>.elementor-widget-container{position:relative;overflow:hidden;padding:3em 4em;border-radius:5px;background-color:#fff;box-shadow:0 3px 40px rgba(36,36,36,.1)}.ha-pricing-table-badge{position:absolute;top:-1px;padding:.8rem 1rem;background-color:#e2498a;color:#fff;line-height:1}.ha-pricing-table-badge--left{left:0;-webkit-transform:rotate(-90deg) translateX(-100%);-ms-transform:rotate(-90deg) translateX(-100%);transform:rotate(-90deg) translateX(-100%);-webkit-transform-origin:left top;-ms-transform-origin:left top;transform-origin:left top}.ha-pricing-table-badge--right{right:0;-webkit-transform:rotate(-90deg) translateY(-100%);-ms-transform:rotate(-90deg) translateY(-100%);transform:rotate(-90deg) translateY(-100%);-webkit-transform-origin:right top;-ms-transform-origin:right top;transform-origin:right top}.ha-pricing-table-title{margin-top:0;margin-bottom:.5rem;color:#242424;font-weight:400;font-size:24px}.ha-pricing-table-price{margin-bottom:3rem}.ha-pricing-table-price-tag{margin-bottom:.5rem;color:#242424;font-weight:700;font-size:60px;line-height:normal}.ha-pricing-table-currency{font-size:24px}.ha-pricing-table-period{color:#8c8c8c;font-size:16px}.ha-pricing-table-body{margin-bottom:3rem}.ha-pricing-table-features-title{margin-top:0;margin-bottom:1rem;font-weight:700;font-size:16px}.ha-pricing-table-features-list{margin:0;padding:0;list-style:none}.ha-pricing-table-features-list li{margin-bottom:1rem;font-size:16px}.ha-pricing-table-features-list i,.ha-pricing-table-features-list svg{margin-right:.5rem;min-width:15px;font-size:.8em}.ha-pricing-table-features-list svg,span.ha-post-list-icon svg{width:auto;height:1em}.ha-pricing-table-feature-text{display:inline-block}.ha-pricing-table-btn{display:inline-block;padding:.8rem 2rem;border-radius:40px;background-color:#e2498a;color:#fff;text-decoration:none;text-transform:uppercase;font-size:12px;-webkit-transition:all .3s;transition:all .3s}.ha-pricing-table-btn:hover{background-color:#562dd4;color:#fff}.ha-step-flow{--ha-stepflow-direction-origin-x:calc(-1*((var(--ha-stepflow-icon-size,46px)/2) + var(--ha-stepflow-icon-padding,40px) + var(--ha-stepflow-direction-offset-x,20px)))}.ha-step-flow>.elementor-widget-container{padding:25px;text-align:center}.ha-step-arrow,.ha-step-arrow:after{position:absolute;display:inline-block;border-top:1px solid #ddd}.ha-step-arrow{left:calc(100% + 20px);-webkit-transform:rotate(var(--ha-stepflow-direction-angle,0));-ms-transform:rotate(var(--ha-stepflow-direction-angle,0));transform:rotate(var(--ha-stepflow-direction-angle,0));-webkit-transform-origin:var(--ha-stepflow-direction-origin-x) center;-ms-transform-origin:var(--ha-stepflow-direction-origin-x) center;transform-origin:var(--ha-stepflow-direction-origin-x) center;top:49%;width:100px}.ha-step-arrow:after{top:-2px;right:5px;width:12px;height:12px;border-right:1px solid #ddd;color:#ddd;content:"";-webkit-transform:rotate(45deg) translateY(-50%);-ms-transform:rotate(45deg) translateY(-50%);transform:rotate(45deg) translateY(-50%)}.ha-steps-icon{position:relative;display:inline-block;margin-bottom:2rem;padding:40px;border-radius:50%;background-color:#e9ecf0;color:#8056ee;text-align:center;font-size:46px}.ha-fun-factor__media--icon i,.ha-fun-factor__media--icon svg,.ha-steps-icon i,.ha-steps-icon svg{position:relative;display:block;width:1em;height:1em}.ha-fun-factor__media--icon i:before,.ha-steps-icon i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-steps-icon .ha-steps-label{position:absolute;top:5px;right:0;overflow:hidden;padding:8px 10px;max-width:200%;border:3px solid #fff;border-radius:20px;background-color:#8056ee;color:#fff;text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:1}.ha-steps-title{margin-top:0;margin-bottom:30px;font-weight:700;font-size:16px}.ha-steps-title a{display:block;color:#562dd4}.ha-news-ticker-wrapper li.ha-news-ticker-item a,.ha-steps-title a:hover{color:#242424}.ha-step-description{margin:0;color:#616161;font-weight:400;font-size:16px;line-height:1.5}.ha-news-ticker-wrapper{position:relative;overflow:hidden;padding:20px 0;border:1px solid #d2d2d2;border-radius:5px}.ha-news-ticker-wrapper ul.ha-news-ticker-container{margin:0;padding:0;list-style:none}.ha-news-ticker-wrapper ul.ha-news-ticker-container:focus,.ha-news-ticker-wrapper ul.ha-news-ticker-container:hover{-webkit-animation-play-state:paused!important;animation-play-state:paused!important}.ha-news-ticker-wrapper span.ha-news-ticker-sticky-title{position:absolute;top:50%;left:auto;z-index:1;padding:20px;background:#333;color:#fff;font-size:1rem;line-height:1;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.ha-news-ticker-wrapper li.ha-news-ticker-item{margin-right:20px;white-space:nowrap}.ha-news-ticker-wrapper li.ha-news-ticker-item:last-child,.ha-post-list-meta-wrap span:last-child{margin-right:0}.ha-news-ticker-wrapper .ha-news-ticker-title{margin:0;font-size:1rem;line-height:1}.ha-news-ticker-wrapper li.ha-news-ticker-item a:hover{color:#e04c8a}.ha-fun-factor__content .ha-fun-factor__content-number,.ha-fun-factor__content .ha-fun-factor__content-text{margin-top:0;margin-bottom:15px;font-size:24px}.ha-ff-icon--left .ha-fun-factor__content{padding-left:20px}.ha-ff-icon--right .ha-fun-factor__content{padding-right:20px}.ha-fun-factor__divider{display:block;margin-bottom:15px;height:1px;background-color:#ccc}.ha-ff-icon--top .ha-fun-factor__media{display:inline-block;margin-top:10px;margin-bottom:10px}.ha-ff-icon--top .ha-fun-factor__media--image{width:200px}:not(.ha-ff-icon--top) .ha-fun-factor__media--image{-webkit-box-flex:0;-webkit-flex:0 0 200px;-ms-flex:0 0 200px;flex:0 0 200px;max-width:200px}.ha-fun-factor__media--image img{width:100%;height:100%;vertical-align:bottom}.ha-fun-factor__media--icon{font-size:3rem}.ha-fun-factor__wrap{padding:10px;word-wrap:break-word;overflow-wrap:break-word}.ha-ff-icon--left>.elementor-widget-container .ha-fun-factor__wrap,.ha-ff-icon--right>.elementor-widget-container .ha-fun-factor__wrap{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-ff-icon--left>.elementor-widget-container .ha-fun-factor__wrap{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-ff-icon--right>.elementor-widget-container .ha-fun-factor__wrap{-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-ff-icon--left>.elementor-widget-container .ha-fun-factor__wrap .ha-fun-factor__divider,.ha-ff-icon--right>.elementor-widget-container .ha-fun-factor__wrap .ha-fun-factor__divider{display:block;margin-right:auto;margin-left:auto}.ha-ff-icon--top>.elementor-widget-container .ha-fun-factor__wrap .ha-fun-factor__divider{display:block;margin-right:auto;margin-left:auto;width:100px}.ha-ff-icon--left>.elementor-widget-container .ha-fun-factor__wrap .ha-fun-factor__divider,.ha-ff-icon--right>.elementor-widget-container .ha-fun-factor__wrap .ha-fun-factor__divider{width:100%!important}.ha-fun-factor__divider-align-left{margin-left:0!important;text-align:left}.ha-fun-factor__divider-align-right{margin-right:0!important;text-align:right}.ha-fun-factor__divider-align-center{margin-right:auto!important;margin-left:auto!important;text-align:center}.ha-social-icons-wrapper,.ha-social-icons-wrapper a{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center}.ha-social-icons-wrapper a{padding:15px;border-radius:4px;color:#fff;font-size:30px;-webkit-transition:all .3s;transition:all .3s}a.ha-social-icon:hover{position:relative;z-index:1;background:#e2498a}.ha-social-icons-wrapper a.elementor-social-icon-label{color:#d30c5c}.ha-social-icon:not(:last-child){margin-right:2px}.ha-social-icon i{position:relative;display:initial;width:1em;height:1em}.ha-social-icon-label{margin:0 0 0 10px;width:100%;height:100%;font-size:18px;line-height:1}.elementor-social-icon-label .ha-social-icon-label{margin-left:0}.elementor-element-edit-mode .ha-social-icon-sticky{z-index:9999}.ha-social-icons:not(.elementor-element-edit-mode) .ha-social-icon-sticky{position:fixed}.ha-social-icon-separator{margin-right:10px}.ha-separator--stroke .ha-social-icon-separator{width:1px;height:1em;background:#d30c5c}.ha-separator--custom .ha-social-icon-separator{color:#d30c5c;font-size:24px}.ha-social-icon-separator:last-child{display:none}.ha-twitter-feed .ha-tweeter-feed-icon i{position:absolute;top:15px;right:15px;color:#1da1f2;font-size:22px}.ha-twitter-feed .ha-tweet-items{display:-ms-grid;display:grid;grid-gap:30px}.ha-twitter-feed .ha-tweet-item{position:relative;z-index:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;box-shadow:1px 1px 8px 1px rgba(0,0,0,.1)}.ha-twitter-feed .ha-tweet-content:before,.ha-twitter-feed .ha-tweet-item:before{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;content:""}.ha-twitter-feed .ha-tweet-inner-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding:30px 10px}.ha-twitter-feed .ha-tweet-author,.ha-twitter-feed .ha-tweet-inner-wrapper,.ha-twitter-feed .ha-tweet-user{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-twitter-feed .ha-tweet-author{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;margin-bottom:10px}.ha-twitter-feed .ha-tweet-avatar{width:45px;border-radius:50%}.ha-twitter-feed .ha-tweet-user{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-twitter-feed .ha-tweet-author-name,.ha-twitter-feed .ha-tweet-content p a:hover{color:#e2498a}.ha-twitter-feed .ha-tweet-author-name:hover,.ha-twitter-feed .ha-tweet-content p a{color:#562dd4}.ha-twitter-feed .ha-tweet-username{color:#a7a7a7}.ha-twitter-feed .ha-tweet-username:hover{color:#818181}.ha-twitter-feed .ha-tweet-content{position:relative;color:#222}.ha-twitter-feed .ha-tweet-content p{margin-bottom:5px}.ha-twitter-feed .ha-tweet-footer{position:absolute;bottom:15px;left:0;padding:0 15px;width:100%;text-align:right}.ha-twitter-feed .ha-tweet-date{color:#a7a7a7}.ha-twitter-feed .ha-tweet-meta{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;-webkit-justify-content:space-around;justify-content:space-around;padding:15px}.ha-twitter-feed .ha-tweet-favorite,.ha-twitter-feed .ha-tweet-retweet{display:inline-block;color:#a7a7a7}.ha-twitter-feed .ha-tweet-favorite{margin-right:12px}.ha-twitter-feed .ha-twitter-load-more-wrapper{margin-top:30px;text-align:center}.ha-twitter-feed .ha-twitter-load-more{display:inline-block;padding:10px 25px;outline:none;border:none;border-radius:50px;background-color:#302a8c;color:#fff;text-align:center;font-weight:400;font-size:16px;-webkit-transition:all .3s;transition:all .3s}.ha-twitter-feed .ha-twitter-load-more:hover{background-color:#e2498a}.ha-twitter-feed .ha-tweet-error-message{padding:20px;border-left:4px solid #ff7726;background-color:#fff9f5}.ha-post-list-item a img,.ha-twitter-feed.ha-twitter-left .ha-tweet-avatar{margin-right:15px}.ha-twitter-feed.ha-twitter-left .ha-tweet-content{text-align:left}.ha-twitter-feed.ha-twitter-center .ha-tweet-author{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-twitter-feed.ha-twitter-center .ha-tweet-content{text-align:center}.ha-twitter-feed.ha-twitter-right .ha-tweeter-feed-icon i{right:auto;left:5px;-webkit-transform:rotateY(-180deg);transform:rotateY(-180deg)}.ha-twitter-feed.ha-twitter-right .ha-tweet-author{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ha-twitter-feed.ha-twitter-right .ha-tweet-content{text-align:right}.ha-twitter-feed.ha-twitter-user-bottom .ha-tweet-inner-wrapper{-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.ha-twitter-feed.ha-twitter-user-bottom .ha-tweet-author{margin-top:10px;margin-bottom:0}.ha-twitter-feed.ha-tweet-glassy-yes .ha-tweet-content:before{background-color:rgba(255,255,255,.4);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.ha-post-list{margin:0;padding:0;list-style:none}.ha-post-list .ha-post-list-item,.ha-post-list.ha-post-list-inline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-post-list.ha-post-list-inline{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.ha-post-list .ha-post-list-item{margin:0 0 10px;padding:0}.ha-post-list.ha-post-list-inline .ha-post-list-item{margin-right:21px}.ha-post-list .ha-post-list-item:last-child,.ha-post-list.ha-post-list-inline .ha-post-list-item:last-child{margin-right:0;margin-bottom:0}.ha-post-list .ha-post-list-item a{width:100%}.ha-post-list-title{display:block;margin-top:0;margin-bottom:0;color:#242424;font-size:1rem;-webkit-transition:all .4s;transition:all .4s}.ha-post-list .ha-post-list-item a:hover .ha-post-list-title,.ha-taxonomy-list .ha-taxonomy-list-item a:hover .ha-taxonomy-list-title{color:#e04d8b}span.ha-post-list-icon{margin-right:8px;color:#242424;font-size:14px}.ha-post-list .ha-post-list-item a,.ha-post-list-meta-wrap,.ha-post-tab span.ha-post-tab-loading{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-post-list-meta-wrap{margin-top:3px}.ha-post-list-meta-wrap span{margin-right:10px;color:#8c8c8c;font-size:13px}.ha-post-list-meta-wrap span i{margin-right:3px}.ha-post-list-excerpt p{margin-bottom:0;color:#8c8c8c}.ha-post-tab .ha-post-tab-filter{padding:0;border-bottom:1px solid #ddd;list-style:none}.ha-post-tab .ha-post-tab-filter li{display:inline-block;margin:0 5px 0 0;padding:15px 25px;background:#fff;color:#333;text-decoration:none;-webkit-transition:all .3s;transition:all .3s}.ha-post-tab .ha-post-tab-filter li.active,.ha-post-tab .ha-post-tab-filter li:hover,.ha-post-tab.ha-post-tab-left .ha-post-tab-filter li.active,.ha-post-tab.ha-post-tab-left .ha-post-tab-filter li:hover{background:#6d39ef;color:#fff}.ha-post-tab .ha-post-tab-item-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;visibility:hidden;overflow:hidden;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;height:0;opacity:0}.ha-post-tab span.ha-post-tab-loading{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;width:100%;height:100%;text-align:center;font-size:60px;opacity:.5}.ha-post-tab .ha-post-tab-item-wrapper.active{visibility:visible;height:auto;opacity:1}.ha-post-tab .ha-post-tab-item{margin-bottom:30px;padding-right:15px;padding-left:15px}.ha-post-tab .ha-post-tab-item-inner{box-sizing:border-box;padding:20px;height:100%;border-radius:5px;background:#fff;box-shadow:0 1px 20px rgba(0,0,0,.09)}.ha-post-tab .ha-post-tab-item-inner .ha-post-tab-thumb{position:relative;display:block;overflow:hidden;margin-bottom:15px;padding-right:0;padding-left:0}.ha-post-tab .ha-post-tab-item-inner .ha-post-tab-thumb img{max-width:100%;height:auto}.ha-post-tab .ha-post-tab-item-inner .ha-post-tab-title{margin-top:0;margin-bottom:10px;font-size:16px}.ha-post-tab .ha-post-tab-item-inner .ha-post-tab-title a,.ha-post-tab .ha-post-tab-meta span a{color:#333;text-decoration:none;-webkit-transition:all .4s;transition:all .4s}.ha-post-tab .ha-post-tab-meta span a:hover,.ha-post-tab .ha-post-tab-title a:hover{color:#6d39ef}.ha-post-tab .ha-post-tab-meta{font-size:14px}.ha-post-tab .ha-post-tab-meta span{display:inline-block;margin-top:10px;margin-right:15px;color:#9b9b9b;-webkit-transition:all .4s;transition:all .4s}.ha-post-tab .ha-post-tab-meta span i{padding-right:5px}.ha-post-tab .ha-post-tab-meta span a{color:#9b9b9b}.ha-post-tab .ha-post-tab-excerpt p{margin:0}.ha-post-tab.ha-post-tab-left,.ha-post-tab.ha-post-tab-right{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.ha-post-tab.ha-post-tab-left .ha-post-tab-filter{-webkit-box-flex:0;-webkit-flex:0 0 200px;-ms-flex:0 0 200px;flex:0 0 200px;min-width:200px;border-right:1px solid #f1f1f1;border-bottom:none}.ha-post-tab.ha-post-tab-left .ha-post-tab-filter li,.ha-post-tab.ha-post-tab-right .ha-post-tab-filter li{text-align:left;display:block;margin:0;text-decoration:none;-webkit-transition:all .3s;transition:all .3s}.ha-post-tab.ha-post-tab-right .ha-post-tab-filter li{text-align:right}.ha-post-tab.ha-post-tab-left .ha-post-tab-content{-webkit-box-flex:0;-webkit-flex:0 0 calc(100% - 200px);-ms-flex:0 0 calc(100% - 200px);flex:0 0 calc(100% - 200px);min-width:calc(100% - 200px);min-height:100%}.ha-post-tab.ha-post-tab-right{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ha-post-tab.ha-post-tab-right .ha-post-tab-filter{-webkit-box-flex:0;-webkit-flex:0 0 200px;-ms-flex:0 0 200px;flex:0 0 200px;min-width:200px;border-bottom:none;border-left:1px solid #f1f1f1}.ha-post-tab.ha-post-tab-right .ha-post-tab-content{-webkit-box-flex:0;-webkit-flex:0 0 calc(100% - 200px);-ms-flex:0 0 calc(100% - 200px);flex:0 0 calc(100% - 200px);min-width:calc(100% - 200px);min-height:100%}@media (max-width:767px){.ha-post-tab.ha-post-tab-right{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ha-post-tab.ha-post-tab-left .ha-post-tab-filter,.ha-post-tab.ha-post-tab-right .ha-post-tab-filter{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;min-width:100%;border-right:0;border-bottom:1px solid #f1f1f1;border-left:0}.ha-post-tab.ha-post-tab-left .ha-post-tab-content,.ha-post-tab.ha-post-tab-right .ha-post-tab-content{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;min-width:100%;min-height:100%}.ha-post-tab.ha-post-tab-left .ha-post-tab-filter li,.ha-post-tab.ha-post-tab-right .ha-post-tab-filter li{display:inline-block}}.ha-taxonomy-list{margin:0;padding:0;list-style:none}.ha-taxonomy-list.ha-taxonomy-list-inline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.ha-taxonomy-list .ha-taxonomy-list-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:0 0 10px;padding:0}.ha-taxonomy-list.ha-taxonomy-list-inline .ha-taxonomy-list-item{margin-right:21px}.ha-taxonomy-list .ha-taxonomy-list-item:last-child,.ha-taxonomy-list.ha-taxonomy-list-inline .ha-taxonomy-list-item:last-child{margin-right:0;margin-bottom:0}.ha-taxonomy-list .ha-taxonomy-list-item a{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;width:100%}.ha-taxonomy-list-title{display:block;margin-top:0;margin-bottom:0;color:#242424;font-size:1rem;-webkit-transition:all .4s;transition:all .4s}.ha-taxonomy-list span.ha-taxonomy-list-icon{margin-right:8px;color:#242424;font-size:14px}.ha-taxonomy-list span.ha-taxonomy-list-icon svg{display:block;width:auto;height:1em}.ha-taxonomy-list span.ha-taxonomy-list-image{margin-right:15px;line-height:1}.ha-taxonomy-list span.ha-taxonomy-list-image img{width:50px}.ha-threesixty-rotation-inner{overflow:hidden;background:#0c5460}.ha-threesixty-rotation-inner img{cursor:move}.ha-img-magnifier-glass{position:absolute;width:200px;height:200px;border:3px solid #000;border-radius:50%;cursor:none}span.ha-threesixty-rotation-magnify{position:absolute;top:15px;right:15px;display:inline-block;font-size:22px;line-height:1}.ha-threesixty-rotation-autoplay{display:none}.ha-threesixty-rotation-autoplay-button button{display:inline-block;padding:.4rem 2rem;outline:none;border-radius:40px;background-color:#e2498a;color:#fff;text-decoration:none;text-transform:uppercase;font-size:24px;-webkit-transition:all .3s;transition:all .3s}.ha-threesixty-rotation-autoplay-button button:focus{outline:none}.ha-threesixty-rotation-autoplay-button button:hover{outline:none;background-color:#562dd4;color:#fff}.ha-threesixty-rotation-360img{position:absolute;top:0;right:0;bottom:0;left:0;z-index:2;margin:auto;width:100px;height:100px;border-radius:50%;background-color:rgba(38,39,39,.5);background-position:50% 50%;background-size:contain;background-repeat:no-repeat;box-shadow:rgba(255,255,255,.5) 0 0 4px;color:#505050;text-align:center;line-height:100px;-webkit-transition:all .5s ease 0s;transition:all .5s ease 0s}.ha-data-table .elementor-widget-container{overflow:hidden}.ha-data-table .ha-table{margin-bottom:0}.ha-data-table .ha-table__head-column-cell{padding:20px;border:1px solid;border-color:#5636d1 #320ebd #5636d1 #5636d1;background-color:#5636d1;color:#fff;vertical-align:middle;text-align:center}.ha-data-table .ha-table__head-column-cell-wrap{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-data-table .ha-table__head-column-cell-icon{padding-left:10px;line-height:1}.ha-data-table .ha-table__body-row-cell-icon img,.ha-data-table .ha-table__body-row-cell-icon svg,.ha-data-table .ha-table__head-column-cell-icon img,.ha-data-table .ha-table__head-column-cell-icon svg{width:40px}.ha-data-table .ha-table__body-row:nth-child(even),.ha-data-table .ha-table__body-row:nth-child(odd){background-color:#fff}.ha-data-table .ha-table__body-row:nth-child(even):hover{background-color:rgba(86,54,209,.08)}.ha-data-table .ha-table__body-row:nth-child(odd):hover{background-color:rgba(232,53,124,.08)}.ha-data-table .ha-table__body-row-cell{padding:15px;border:1px solid #ddd;background-color:transparent;vertical-align:middle}.ha-data-table .ha-table__body-row-cell-wrap{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-data-table .ha-table__body-row-cell-icon{padding-left:10px;line-height:1}.ha-data-table .ha-table__body .ha-table__head-column-cell{display:none}.ha-data-table.ha-column-icon-bottom .ha-table__head-column-cell-icon,.ha-data-table.ha-column-icon-top .ha-table__head-column-cell-icon{width:100%}.ha-data-table.ha-column-icon-left .ha-table__head-column-cell-icon,.ha-data-table.ha-column-icon-right .ha-table__head-column-cell-icon{width:auto}.ha-data-table.ha-row-icon-bottom .ha-table__body-row-cell-icon,.ha-data-table.ha-row-icon-top .ha-table__body-row-cell-icon{width:100%}.ha-data-table.ha-row-icon-left .ha-table__body-row-cell-icon,.ha-data-table.ha-row-icon-right .ha-table__body-row-cell-icon{width:auto}.ha-data-table.ha-column-icon-left .ha-table__head-column-cell-wrap{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ha-data-table.ha-column-icon-right .ha-table__head-column-cell-wrap{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-data-table.ha-column-icon-top .ha-table__head-column-cell-wrap{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.ha-data-table.ha-column-icon-bottom .ha-table__head-column-cell-wrap{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-data-table.ha-row-icon-left .ha-table__body-row-cell-wrap{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ha-data-table.ha-row-icon-right .ha-table__body-row-cell-wrap{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-data-table.ha-row-icon-top .ha-table__body-row-cell-wrap{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.ha-data-table.ha-row-icon-bottom .ha-table__body-row-cell-wrap{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}@media (max-width:767px){.ha-data-table .ha-table__head{display:none}.ha-data-table .ha-table__body .ha-table__body-row{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}.ha-data-table .ha-table__body .ha-table__body-row-cell{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;margin-top:-1px;padding:0!important}.ha-data-table .ha-table__body .ha-table__body-row-cell:first-child{margin-top:auto}.ha-data-table .ha-table__body .ha-table__head-column-cell{display:block;width:100%}.ha-data-table .ha-table__body .ha-table__body-row-cell-wrap{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%}.ha-data-table.ha-row-icon-left.ha-row-alignment-left .ha-table__body-row-cell-wrap{-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.ha-data-table.ha-row-icon-left.ha-row-alignment-center .ha-table__body-row-cell-wrap{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.ha-data-table.ha-row-icon-left.ha-row-alignment-right .ha-table__body-row-cell-wrap{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.ha-data-table.ha-row-icon-bottom.ha-row-alignment-left .ha-table__body-row-cell-wrap,.ha-data-table.ha-row-icon-top.ha-row-alignment-left .ha-table__body-row-cell-wrap{-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start;-ms-flex-align:start;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.ha-data-table.ha-row-icon-bottom.ha-row-alignment-center .ha-table__body-row-cell-wrap,.ha-data-table.ha-row-icon-top.ha-row-alignment-center .ha-table__body-row-cell-wrap{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.ha-data-table.ha-row-icon-bottom.ha-row-alignment-right .ha-table__body-row-cell-wrap,.ha-data-table.ha-row-icon-top.ha-row-alignment-right .ha-table__body-row-cell-wrap{-webkit-box-align:end;-webkit-align-items:flex-end;align-items:flex-end;-ms-flex-align:end;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}}
assets/css/widgets/badge.min.css CHANGED
@@ -1 +1 @@
1
- .ha-badge{padding:.475rem 1.1rem;max-width:100%;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}
1
+ .ha-badge{padding:10px 18px;border-radius:50px;background-color:#fff;font-size:12px;line-height:1;-webkit-transform:translate(var(--ha-badge-translate-x),var(--ha-badge-translate-y));-ms-transform:translate(var(--ha-badge-translate-x),var(--ha-badge-translate-y));transform:translate(var(--ha-badge-translate-x),var(--ha-badge-translate-y));--ha-badge-translate-x:0;--ha-badge-translate-y:0}.ha-badge--top-left{top:25px;left:25px}.ha-badge--top-center{top:25px;left:50%;--ha-badge-translate-x:-50%}.ha-badge--top-right{top:25px;right:25px}.ha-badge--middle-center,.ha-badge--middle-left{top:50%;left:25px;--ha-badge-translate-x:-50%}.ha-badge--middle-center{left:50%;--ha-badge-translate-y:-50%}.ha-badge--middle-right{top:50%;right:25px;--ha-badge-translate-y:-50%}.ha-badge--bottom-left{bottom:25px;left:25px}.ha-badge--bottom-center{bottom:25px;left:50%;--ha-badge-translate-x:-50%}.ha-badge--bottom-right{right:25px;bottom:25px}
assets/css/widgets/btn.min.css CHANGED
@@ -1 +1 @@
1
- .ha-btn{display:inline-block;max-width:100%;vertical-align:middle;text-align:center;text-decoration:none;font-size:14px;line-height:1;-webkit-transition:all .3s;transition:all .3s}.ha-btn:not(.ha-btn--link){padding:15px 25px;border-radius:.25rem;background-color:#562dd4;color:#fff}.ha-btn:not(.ha-btn--link):focus,.ha-btn:not(.ha-btn--link):hover{background-color:#e2498a}.ha-btn.ha-btn--link{color:#562dd4}.ha-btn.ha-btn--link:focus,.ha-btn.ha-btn--link:hover{color:#e2498a}.ha-btn-icon+.ha-btn-text,.ha-btn-text+.ha-btn-icon{margin-left:5px}.ha-btn-icon--svg{display:inline-block}.ha-btn-icon--svg svg{width:auto;height:1em}
1
+ .ha-btn{display:inline-block;max-width:100%;vertical-align:middle;text-align:center;text-decoration:none;font-size:14px;line-height:1;-webkit-transition:all .3s;transition:all .3s}.ha-btn:not(.ha-btn--link){padding:15px 25px;border-radius:5px;background-color:#562dd4;color:#fff}.ha-btn:not(.ha-btn--link):focus,.ha-btn:not(.ha-btn--link):hover{background-color:#e2498a}.ha-btn.ha-btn--link{color:#562dd4}.ha-btn.ha-btn--link:focus,.ha-btn.ha-btn--link:hover{color:#e2498a}.ha-btn-icon+.ha-btn-text,.ha-btn-text+.ha-btn-icon{margin-left:5px}.ha-btn-icon--svg{display:inline-block}.ha-btn-icon--svg svg{width:auto;height:1em}
assets/css/widgets/card.min.css CHANGED
@@ -1 +1 @@
1
- .ha-card>.elementor-widget-container{border-radius:.5rem;background-color:#fff;box-shadow:0 .2rem 2.8rem rgba(36,36,36,.1)}.ha-card-figure{position:relative;height:250px}.ha-card-figure img{width:100%;height:100%;border-top-left-radius:calc(.5rem - 1px);border-top-right-radius:calc(.5rem - 1px);vertical-align:bottom}.ha-card-body{padding:1.5rem}.ha-card-title{margin-top:0;margin-bottom:.75rem;color:#151515;font-weight:700;font-size:22px}.ha-card-text{margin-bottom:2rem;color:#616161;font-size:16px;line-height:1.7}.ha-card-text>p{margin-top:0;margin-bottom:0}.ha-card--top .ha-card-figure{display:inline-block;width:100%}.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}
1
+ .ha-card{--ha-card-body-width-left:calc(100% - var(--ha-card-image-width) + (-1*var(--ha-card-image-offset-x)));--ha-card-body-width-right:calc(100% - var(--ha-card-image-width) + var(--ha-card-image-offset-x));--ha-card-image-offset-x:calc(1px - 1px);--ha-card-image-offset-y:calc(1px - 1px);--ha-card-image-width:100%}.ha-card>.elementor-widget-container{border-radius:5px;background-color:#fff;box-shadow:0 3px 40px rgba(36,36,36,.1)}.ha-card-figure{position:relative;-webkit-box-flex:0;-webkit-flex:0 0 var(--ha-card-image-width);-ms-flex:0 0 var(--ha-card-image-width);flex:0 0 var(--ha-card-image-width);max-width:var(--ha-card-image-width);height:250px;-webkit-transform:translate(var(--ha-card-image-offset-x),var(--ha-card-image-offset-y));-ms-transform:translate(var(--ha-card-image-offset-x),var(--ha-card-image-offset-y));transform:translate(var(--ha-card-image-offset-x),var(--ha-card-image-offset-y))}.ha-card-figure img{width:100%;height:100%;vertical-align:bottom}.ha-card-body{padding:25px}.ha-card-title{margin-top:0;margin-bottom:10px;color:#151515;font-weight:700;font-size:22px}.ha-card-text{margin-bottom:25px;color:#616161;font-size:16px;line-height:1.7}.ha-card-text>p{margin-top:0;margin-bottom:0}.ha-card--top .ha-card-figure{display:inline-block}.ha-card--top .ha-card-figure img{border-radius:5px 5px 0 0}.ha-card--top .ha-card-body{margin-top:var(--ha-card-image-offset-y);max-width:initial;width:100%}.ha-card--left,.ha-card--right{--ha-card-image-width:50%}.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 .ha-card-body,.ha-card--right .ha-card-body{padding:35px}.ha-card--left .ha-card-body{-webkit-box-flex:0;-webkit-flex:0 0 var(--ha-card-body-width-left);-ms-flex:0 0 var(--ha-card-body-width-left);flex:0 0 var(--ha-card-body-width-left);margin-left:var(--ha-card-image-offset-x);max-width:var(--ha-card-body-width-left)}.ha-card--left .ha-card-figure img{border-radius:5px 0 0 5px}.ha-card--right .ha-card-body{-webkit-box-flex:0;-webkit-flex:0 0 var(--ha-card-body-width-right);-ms-flex:0 0 var(--ha-card-body-width-right);flex:0 0 var(--ha-card-body-width-right);margin-right:calc(-1*var(--ha-card-image-offset-x));max-width:var(--ha-card-body-width-right)}.ha-card--right .ha-card-figure img{border-radius:0 5px 5px 0}@media (max-width:1024px){.ha-card--tablet-top{--ha-card-image-width:100%}.ha-card--tablet-top .ha-card-figure{display:inline-block}.ha-card--tablet-top .ha-card-figure img{border-radius:5px 5px 0 0}.ha-card--tablet-top .ha-card-body{margin-top:var(--ha-card-image-offset-y);padding:25px;max-width:initial;width:100%}.ha-card--tablet-left,.ha-card--tablet-right{--ha-card-image-width:50%}.ha-card--tablet-left>.elementor-widget-container,.ha-card--tablet-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--tablet-left .ha-card-body{-webkit-box-flex:0;-webkit-flex:0 0 var(--ha-card-body-width-left);-ms-flex:0 0 var(--ha-card-body-width-left);flex:0 0 var(--ha-card-body-width-left);margin-left:var(--ha-card-image-offset-x);max-width:var(--ha-card-body-width-left)}.ha-card--tablet-left .ha-card-figure img{border-radius:5px 0 0 5px}.ha-card--tablet-right .ha-card-body{-webkit-box-flex:0;-webkit-flex:0 0 var(--ha-card-body-width-right);-ms-flex:0 0 var(--ha-card-body-width-right);flex:0 0 var(--ha-card-body-width-right);margin-right:calc(-1*var(--ha-card-image-offset-x));max-width:var(--ha-card-body-width-right)}.ha-card--tablet-right .ha-card-figure img{border-radius:0 5px 5px 0}}@media (max-width:767px){.ha-card--tablet-top{--ha-card-image-width:100%}.ha-card--tablet-top .ha-card-figure{display:inline-block}.ha-card--tablet-top .ha-card-figure img{border-radius:5px 5px 0 0}.ha-card--tablet-top .ha-card-body{margin-top:var(--ha-card-image-offset-y);padding:25px;max-width:initial;width:100%}.ha-card--mobile-left,.ha-card--mobile-right{--ha-card-image-width:50%}.ha-card--mobile-left>.elementor-widget-container,.ha-card--mobile-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--mobile-left .ha-card-body{-webkit-box-flex:0;-webkit-flex:0 0 var(--ha-card-body-width-left);-ms-flex:0 0 var(--ha-card-body-width-left);flex:0 0 var(--ha-card-body-width-left);margin-left:var(--ha-card-image-offset-x);max-width:var(--ha-card-body-width-left)}.ha-card--mobile-left .ha-card-figure img{border-radius:5px 0 0 5px}.ha-card--mobile-right .ha-card-body{-webkit-box-flex:0;-webkit-flex:0 0 var(--ha-card-body-width-right);-ms-flex:0 0 var(--ha-card-body-width-right);flex:0 0 var(--ha-card-body-width-right);margin-right:calc(-1*var(--ha-card-image-offset-x));max-width:var(--ha-card-body-width-right)}.ha-card--mobile-right .ha-card-figure img{border-radius:0 5px 5px 0}}.ha-card .ha-badge{position:absolute}
assets/css/widgets/common.min.css CHANGED
@@ -1 +1 @@
1
- .happy-addon>.elementor-widget-container{word-wrap:break-word;overflow-wrap:break-word;box-sizing:border-box}.happy-addon>.elementor-widget-container *{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-screen-reader-text{position:absolute;overflow:hidden;clip:rect(1px,1px,1px,1px);margin:-1px;padding:0;width:1px;height:1px;border:0;word-wrap:normal!important;-webkit-clip-path:inset(50%);clip-path:inset(50%)}.ha-has-background-overlay>.elementor-widget-container{position:relative;z-index:1}.ha-has-background-overlay>.elementor-widget-container:before{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;content:""}.ha-popup--is-enabled .ha-js-popup,.ha-popup--is-enabled .ha-js-popup img{cursor:-webkit-zoom-in!important;cursor:zoom-in!important}.mfp-wrap .mfp-arrow,.mfp-wrap .mfp-close{background-color:transparent}.mfp-wrap .mfp-arrow:focus,.mfp-wrap .mfp-close:focus{outline-width:thin}
1
+ .elementor-widget{-webkit-transition-duration:var(--ha-tfx-transition-duration,.2s);transition-duration:var(--ha-tfx-transition-duration,.2s);-webkit-transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transform:translate(var(--ha-tfx-translate-x,0),var(--ha-tfx-translate-y,0)) scale(var(--ha-tfx-scale-x,1),var(--ha-tfx-scale-y,1)) skew(var(--ha-tfx-skew-x,0),var(--ha-tfx-skew-y,0)) rotateX(var(--ha-tfx-rotate-x,0)) rotateY(var(--ha-tfx-rotate-y,0)) rotateZ(var(--ha-tfx-rotate-z,0));transform:translate(var(--ha-tfx-translate-x,0),var(--ha-tfx-translate-y,0)) scale(var(--ha-tfx-scale-x,1),var(--ha-tfx-scale-y,1)) skew(var(--ha-tfx-skew-x,0),var(--ha-tfx-skew-y,0)) rotateX(var(--ha-tfx-rotate-x,0)) rotateY(var(--ha-tfx-rotate-y,0)) rotateZ(var(--ha-tfx-rotate-z,0))}.elementor-widget:hover{-webkit-transform:translate(var(--ha-tfx-translate-x-hover,0),var(--ha-tfx-translate-y-hover,0)) scale(var(--ha-tfx-scale-x-hover,1),var(--ha-tfx-scale-y-hover,1)) skew(var(--ha-tfx-skew-x-hover,0),var(--ha-tfx-skew-y-hover,0)) rotateX(var(--ha-tfx-rotate-x-hover,0)) rotateY(var(--ha-tfx-rotate-y-hover,0)) rotateZ(var(--ha-tfx-rotate-z-hover,0));transform:translate(var(--ha-tfx-translate-x-hover,0),var(--ha-tfx-translate-y-hover,0)) scale(var(--ha-tfx-scale-x-hover,1),var(--ha-tfx-scale-y-hover,1)) skew(var(--ha-tfx-skew-x-hover,0),var(--ha-tfx-skew-y-hover,0)) rotateX(var(--ha-tfx-rotate-x-hover,0)) rotateY(var(--ha-tfx-rotate-y-hover,0)) rotateZ(var(--ha-tfx-rotate-z-hover,0))}.happy-addon>.elementor-widget-container{word-wrap:break-word;overflow-wrap:break-word;box-sizing:border-box}.happy-addon>.elementor-widget-container *{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}.happy-addon .elementor-inline-editing{min-height:auto!important}.ha-screen-reader-text{position:absolute;overflow:hidden;clip:rect(1px,1px,1px,1px);margin:-1px;padding:0;width:1px;height:1px;border:0;word-wrap:normal!important;-webkit-clip-path:inset(50%);clip-path:inset(50%)}.ha-has-background-overlay>.elementor-widget-container{position:relative;z-index:1}.ha-has-background-overlay>.elementor-widget-container:before{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;content:""}.ha-popup--is-enabled .ha-js-popup,.ha-popup--is-enabled .ha-js-popup img{cursor:-webkit-zoom-in!important;cursor:zoom-in!important}.mfp-wrap .mfp-arrow,.mfp-wrap .mfp-close{background-color:transparent}.mfp-wrap .mfp-arrow:focus,.mfp-wrap .mfp-close:focus{outline-width:thin}
assets/css/widgets/data-table.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .ha-data-table .elementor-widget-container{overflow:hidden}.ha-data-table .ha-table{margin-bottom:0}.ha-data-table .ha-table__head-column-cell{padding:20px;border:1px solid;border-color:#5636d1 #320ebd #5636d1 #5636d1;background-color:#5636d1;color:#fff;vertical-align:middle;text-align:center}.ha-data-table .ha-table__head-column-cell-wrap{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-data-table .ha-table__head-column-cell-icon{padding-left:10px;line-height:1}.ha-data-table .ha-table__body-row-cell-icon img,.ha-data-table .ha-table__body-row-cell-icon svg,.ha-data-table .ha-table__head-column-cell-icon img,.ha-data-table .ha-table__head-column-cell-icon svg{width:40px}.ha-data-table .ha-table__body-row:nth-child(even),.ha-data-table .ha-table__body-row:nth-child(odd){background-color:#fff}.ha-data-table .ha-table__body-row:nth-child(even):hover{background-color:rgba(86,54,209,.08)}.ha-data-table .ha-table__body-row:nth-child(odd):hover{background-color:rgba(232,53,124,.08)}.ha-data-table .ha-table__body-row-cell{padding:15px;border:1px solid #ddd;background-color:transparent;vertical-align:middle}.ha-data-table .ha-table__body-row-cell-wrap{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-data-table .ha-table__body-row-cell-icon{padding-left:10px;line-height:1}.ha-data-table .ha-table__body .ha-table__head-column-cell{display:none}.ha-data-table.ha-column-icon-bottom .ha-table__head-column-cell-icon,.ha-data-table.ha-column-icon-top .ha-table__head-column-cell-icon{width:100%}.ha-data-table.ha-column-icon-left .ha-table__head-column-cell-icon,.ha-data-table.ha-column-icon-right .ha-table__head-column-cell-icon{width:auto}.ha-data-table.ha-row-icon-bottom .ha-table__body-row-cell-icon,.ha-data-table.ha-row-icon-top .ha-table__body-row-cell-icon{width:100%}.ha-data-table.ha-row-icon-left .ha-table__body-row-cell-icon,.ha-data-table.ha-row-icon-right .ha-table__body-row-cell-icon{width:auto}.ha-data-table.ha-column-icon-left .ha-table__head-column-cell-wrap{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ha-data-table.ha-column-icon-right .ha-table__head-column-cell-wrap{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-data-table.ha-column-icon-top .ha-table__head-column-cell-wrap{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.ha-data-table.ha-column-icon-bottom .ha-table__head-column-cell-wrap{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-data-table.ha-row-icon-left .ha-table__body-row-cell-wrap{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ha-data-table.ha-row-icon-right .ha-table__body-row-cell-wrap{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.ha-data-table.ha-row-icon-top .ha-table__body-row-cell-wrap{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.ha-data-table.ha-row-icon-bottom .ha-table__body-row-cell-wrap{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}@media (max-width:767px){.ha-data-table .ha-table__head{display:none}.ha-data-table .ha-table__body .ha-table__body-row{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}.ha-data-table .ha-table__body .ha-table__body-row-cell{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;margin-top:-1px;padding:0!important}.ha-data-table .ha-table__body .ha-table__body-row-cell:first-child{margin-top:auto}.ha-data-table .ha-table__body .ha-table__head-column-cell{display:block;width:100%}.ha-data-table .ha-table__body .ha-table__body-row-cell-wrap{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%}.ha-data-table.ha-row-icon-left.ha-row-alignment-left .ha-table__body-row-cell-wrap{-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.ha-data-table.ha-row-icon-left.ha-row-alignment-center .ha-table__body-row-cell-wrap{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.ha-data-table.ha-row-icon-left.ha-row-alignment-right .ha-table__body-row-cell-wrap{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.ha-data-table.ha-row-icon-bottom.ha-row-alignment-left .ha-table__body-row-cell-wrap,.ha-data-table.ha-row-icon-top.ha-row-alignment-left .ha-table__body-row-cell-wrap{-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start;-ms-flex-align:start;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.ha-data-table.ha-row-icon-bottom.ha-row-alignment-center .ha-table__body-row-cell-wrap,.ha-data-table.ha-row-icon-top.ha-row-alignment-center .ha-table__body-row-cell-wrap{-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.ha-data-table.ha-row-icon-bottom.ha-row-alignment-right .ha-table__body-row-cell-wrap,.ha-data-table.ha-row-icon-top.ha-row-alignment-right .ha-table__body-row-cell-wrap{-webkit-box-align:end;-webkit-align-items:flex-end;align-items:flex-end;-ms-flex-align:end;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}}
assets/css/widgets/icon-box.min.css CHANGED
@@ -1 +1 @@
1
- .ha-icon-box>.elementor-widget-container{border-radius:.5rem;background-color:#fff;box-shadow:0 .2rem 2.8rem rgba(36,36,36,.1);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,.ha-icon-box-icon svg{position:relative;display:block;width:1em;height:1em}.ha-icon-box-icon i{-webkit-transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ha-icon-box-icon i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.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}
1
+ .ha-icon-box>.elementor-widget-container{position:relative;padding:25px;border-radius:5px;background-color:#fff;box-shadow:0 3px 40px rgba(36,36,36,.1)}.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:20px;color:#151515;text-align:center;font-size:48px;-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,.ha-icon-box-icon svg{position:relative;display:block;width:1em;height:1em}.ha-icon-box-icon i{-webkit-transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.ha-icon-box-icon i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.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}
assets/css/widgets/image-comparison.min.css CHANGED
@@ -1 +1 @@
1
- .ha-image-compare>.elementor-widget-container{border-radius:.5rem;background-color:#fff;box-shadow:0 .2rem 2.8rem rgba(36,36,36,.1)}.ha-image-compare .twentytwenty-container,.ha-image-compare .twentytwenty-wrapper{border-radius:inherit}
1
+ .ha-image-compare>.elementor-widget-container{border-radius:5px;background-color:#fff;box-shadow:0 3px 40px rgba(36,36,36,.1)}.ha-image-compare .twentytwenty-container,.ha-image-compare .twentytwenty-wrapper{border-radius:inherit}
assets/css/widgets/infobox.min.css CHANGED
@@ -1 +1 @@
1
- .ha-infobox>.elementor-widget-container{border-radius:.5rem;background-color:#fff;box-shadow:0 .2rem 2.8rem rgba(36,36,36,.1);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;line-height:1}.ha-infobox-figure i,.ha-infobox-figure svg{position:relative;display:block;width:1em;height:1em}.ha-infobox-figure i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-infobox-figure img{width:100%;height:100%;vertical-align:bottom}.ha-infobox-text p{margin-top:0;margin-bottom:0}.ha-infobox-text+.ha-btn--link{margin-top:1rem}
1
+ .ha-infobox{--ha-infobox-media-offset-x:0;--ha-infobox-media-offset-y:0;--ha-infobox-media-rotate:0}.ha-infobox>.elementor-widget-container{padding:25px;border-radius:5px;background-color:#fff;box-shadow:0 3px 40px rgba(36,36,36,.1)}.ha-infobox-title{margin-top:0;margin-bottom:10px;color:#151515;font-size:24px}.ha-infobox-figure{display:inline-block;margin:0 0 25px!important;-webkit-transform:translate(var(--ha-infobox-media-offset-x),var(--ha-infobox-media-offset-y));-ms-transform:translate(var(--ha-infobox-media-offset-x),var(--ha-infobox-media-offset-y));transform:translate(var(--ha-infobox-media-offset-x),var(--ha-infobox-media-offset-y))}.ha-infobox-figure--icon{text-align:center;font-size:48px;line-height:1;-webkit-transform:translate(var(--ha-infobox-media-offset-x),var(--ha-infobox-media-offset-y)) rotate(var(--ha-infobox-media-rotate));-ms-transform:translate(var(--ha-infobox-media-offset-x),var(--ha-infobox-media-offset-y)) rotate(var(--ha-infobox-media-rotate));transform:translate(var(--ha-infobox-media-offset-x),var(--ha-infobox-media-offset-y)) rotate(var(--ha-infobox-media-rotate))}.ha-infobox-figure i,.ha-infobox-figure svg{position:relative;display:block;width:1em;height:1em;-webkit-transform:rotate(calc(-1*var(--ha-infobox-media-rotate)));-ms-transform:rotate(calc(-1*var(--ha-infobox-media-rotate)));transform:rotate(calc(-1*var(--ha-infobox-media-rotate)))}.ha-infobox-figure i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-infobox-figure img{width:100%;height:100%;vertical-align:bottom}.ha-infobox-body{margin-top:var(--ha-infobox-media-offset-y)}.ha-infobox-text p{margin-top:0;margin-bottom:0}.ha-infobox-text+.ha-btn--link{margin-top:25px}
assets/css/widgets/member.min.css CHANGED
@@ -1 +1 @@
1
- .ha-member>.elementor-widget-container{border-radius:.5rem;background-color:#fff;box-shadow:0 .2rem 2.8rem rgba(36,36,36,.1);padding:1.25rem}.ha-member-figure{display:inline-block;margin:0 0 1.5rem!important}.ha-member-figure img{width:100%;height:100%;vertical-align:bottom}.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{display:inline-block;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-member .ha-btn{margin-bottom:10px}.ha-member-links+.ha-btn{margin-top:10px;margin-bottom:0}
1
+ .ha-member>.elementor-widget-container{padding:25px;border-radius:5px;background-color:#fff;box-shadow:0 3px 40px rgba(36,36,36,.1)}.ha-member-figure{display:inline-block;margin:0 0 25px!important}.ha-member-figure img{width:100%;height:100%;vertical-align:bottom}.ha-member-name{margin-top:0;margin-bottom:10px;color:#151515;font-size:18px}.ha-member-position{margin-bottom:25px;color:#7f7f7f;font-size:14px}.ha-member-bio{margin-bottom:25px;font-size:14px;line-height:1.6}.ha-member-links>a{display:inline-block;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:10px}.ha-member .ha-btn{margin-bottom:15px}.ha-member-body .ha-btn:last-child{margin-top:15px;margin-bottom:0}
assets/css/widgets/post-list.min.css CHANGED
@@ -1 +1 @@
1
- .ha-post-list{margin:0;padding:0;list-style:none}.ha-post-list .ha-post-list-item,.ha-post-list.ha-post-list-inline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-post-list.ha-post-list-inline{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.ha-post-list .ha-post-list-item{margin:0 0 10px;padding:0}.ha-post-list.ha-post-list-inline .ha-post-list-item{margin-right:21px}.ha-post-list .ha-post-list-item:last-child,.ha-post-list.ha-post-list-inline .ha-post-list-item:last-child{margin-right:0;margin-bottom:0}.ha-post-list .ha-post-list-item a,.ha-post-list-meta-wrap{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-post-list .ha-post-list-item a{width:100%}.ha-post-list-title{display:block;margin-top:0;margin-bottom:0;color:#242424;font-size:1rem;-webkit-transition:all .4s;transition:all .4s}.ha-post-list .ha-post-list-item a:hover .ha-post-list-title{color:#e04d8b}.ha-post-list-item a img{margin-right:15px}span.ha-post-list-icon{margin-right:8px;color:#242424;font-size:14px}span.ha-post-list-icon svg{width:auto;height:1em}.ha-post-list-meta-wrap{margin-top:3px}.ha-post-list-meta-wrap span{margin-right:10px;color:#8c8c8c;font-size:13px}.ha-post-list-meta-wrap span:last-child{margin-right:0}.ha-post-list-meta-wrap span i{margin-right:3px}
1
+ .ha-post-list{margin:0;padding:0;list-style:none}.ha-post-list .ha-post-list-item,.ha-post-list.ha-post-list-inline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-post-list.ha-post-list-inline{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.ha-post-list .ha-post-list-item{margin:0 0 10px;padding:0}.ha-post-list.ha-post-list-inline .ha-post-list-item{margin-right:21px}.ha-post-list .ha-post-list-item:last-child,.ha-post-list.ha-post-list-inline .ha-post-list-item:last-child{margin-right:0;margin-bottom:0}.ha-post-list .ha-post-list-item a,.ha-post-list-meta-wrap{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-post-list .ha-post-list-item a{width:100%}.ha-post-list-title{display:block;margin-top:0;margin-bottom:0;color:#242424;font-size:1rem;-webkit-transition:all .4s;transition:all .4s}.ha-post-list .ha-post-list-item a:hover .ha-post-list-title{color:#e04d8b}.ha-post-list-item a img{margin-right:15px}span.ha-post-list-icon{margin-right:8px;color:#242424;font-size:14px}span.ha-post-list-icon svg{width:auto;height:1em}.ha-post-list-meta-wrap{margin-top:3px}.ha-post-list-meta-wrap span{margin-right:10px;color:#8c8c8c;font-size:13px}.ha-post-list-meta-wrap span:last-child{margin-right:0}.ha-post-list-meta-wrap span i{margin-right:3px}.ha-post-list-excerpt p{margin-bottom:0;color:#8c8c8c}
assets/css/widgets/pricing-table.min.css CHANGED
@@ -1 +1 @@
1
- .ha-pricing-table>.elementor-widget-container{border-radius:.5rem;background-color:#fff;box-shadow:0 .2rem 2.8rem rgba(36,36,36,.1);position:relative;overflow:hidden;padding:3em 4em}.ha-pricing-table-badge{position:absolute;top:-1px;padding:.8rem 1rem;background-color:#e2498a;color:#fff;line-height:1}.ha-pricing-table-badge--left{left:0;-webkit-transform:rotate(-90deg) translateX(-100%);-ms-transform:rotate(-90deg) translateX(-100%);transform:rotate(-90deg) translateX(-100%);-webkit-transform-origin:left top;-ms-transform-origin:left top;transform-origin:left top}.ha-pricing-table-badge--right{right:0;-webkit-transform:rotate(-90deg) translateY(-100%);-ms-transform:rotate(-90deg) translateY(-100%);transform:rotate(-90deg) translateY(-100%);-webkit-transform-origin:right top;-ms-transform-origin:right top;transform-origin:right top}.ha-pricing-table-title{margin-top:0;margin-bottom:.5rem;color:#242424;font-weight:400;font-size:24px}.ha-pricing-table-price{margin-bottom:3rem}.ha-pricing-table-price-tag{margin-bottom:.5rem;color:#242424;font-weight:700;font-size:60px;line-height:normal}.ha-pricing-table-currency{font-size:24px}.ha-pricing-table-period{color:#8c8c8c;font-size:16px}.ha-pricing-table-body{margin-bottom:3rem}.ha-pricing-table-features-title{margin-top:0;margin-bottom:1rem;font-weight:700;font-size:16px}.ha-pricing-table-features-list{margin:0;padding:0;list-style:none}.ha-pricing-table-features-list li{margin-bottom:1rem;font-size:16px}.ha-pricing-table-features-list i,.ha-pricing-table-features-list svg{margin-right:.5rem;min-width:15px;font-size:.8em}.ha-pricing-table-features-list svg{width:auto;height:1em}.ha-pricing-table-feature-text{display:inline-block}.ha-pricing-table-btn{display:inline-block;padding:.8rem 2rem;border-radius:40px;background-color:#e2498a;color:#fff;text-decoration:none;text-transform:uppercase;font-size:12px;-webkit-transition:all .3s;transition:all .3s}.ha-pricing-table-btn:hover{background-color:#562dd4;color:#fff}
1
+ .ha-pricing-table>.elementor-widget-container{position:relative;overflow:hidden;padding:3em 4em;border-radius:5px;background-color:#fff;box-shadow:0 3px 40px rgba(36,36,36,.1)}.ha-pricing-table-badge{position:absolute;top:-1px;padding:.8rem 1rem;background-color:#e2498a;color:#fff;line-height:1}.ha-pricing-table-badge--left{left:0;-webkit-transform:rotate(-90deg) translateX(-100%);-ms-transform:rotate(-90deg) translateX(-100%);transform:rotate(-90deg) translateX(-100%);-webkit-transform-origin:left top;-ms-transform-origin:left top;transform-origin:left top}.ha-pricing-table-badge--right{right:0;-webkit-transform:rotate(-90deg) translateY(-100%);-ms-transform:rotate(-90deg) translateY(-100%);transform:rotate(-90deg) translateY(-100%);-webkit-transform-origin:right top;-ms-transform-origin:right top;transform-origin:right top}.ha-pricing-table-title{margin-top:0;margin-bottom:.5rem;color:#242424;font-weight:400;font-size:24px}.ha-pricing-table-price{margin-bottom:3rem}.ha-pricing-table-price-tag{margin-bottom:.5rem;color:#242424;font-weight:700;font-size:60px;line-height:normal}.ha-pricing-table-currency{font-size:24px}.ha-pricing-table-period{color:#8c8c8c;font-size:16px}.ha-pricing-table-body{margin-bottom:3rem}.ha-pricing-table-features-title{margin-top:0;margin-bottom:1rem;font-weight:700;font-size:16px}.ha-pricing-table-features-list{margin:0;padding:0;list-style:none}.ha-pricing-table-features-list li{margin-bottom:1rem;font-size:16px}.ha-pricing-table-features-list i,.ha-pricing-table-features-list svg{margin-right:.5rem;min-width:15px;font-size:.8em}.ha-pricing-table-features-list svg{width:auto;height:1em}.ha-pricing-table-feature-text{display:inline-block}.ha-pricing-table-btn{display:inline-block;padding:.8rem 2rem;border-radius:40px;background-color:#e2498a;color:#fff;text-decoration:none;text-transform:uppercase;font-size:12px;-webkit-transition:all .3s;transition:all .3s}.ha-pricing-table-btn:hover{background-color:#562dd4;color:#fff}
assets/css/widgets/review.min.css CHANGED
@@ -1 +1 @@
1
- .ha-review>.elementor-widget-container{border-radius:.5rem;background-color:#fff;box-shadow:0 .2rem 2.8rem rgba(36,36,36,.1)}.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:#562dd4;color:#fff}.ha-review-ratting--star{color:#ffbf36}.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}
1
+ .ha-review{--ha-review-left-body-width:calc(100% - var(--ha-review-media-width) + (-1*var(--ha-review-media-offset-x)));--ha-review-media-offset-x:calc(1px - 1px);--ha-review-media-offset-y:calc(1px - 1px);--ha-review-right-body-width:calc(100% - var(--ha-review-media-width) + (var(--ha-review-media-offset-x)))}.ha-review>.elementor-widget-container{border-radius:5px;background-color:#fff;box-shadow:0 3px 40px rgba(36,36,36,.1)}.ha-review-header{margin-top:25px}.ha-review-figure{-webkit-box-flex:0;-webkit-flex:0 0 var(--ha-review-media-width,70px);-ms-flex:0 0 var(--ha-review-media-width,70px);flex:0 0 var(--ha-review-media-width,70px);margin:0;max-width:var(--ha-review-media-width,70px);-webkit-transform:translate(var(--ha-review-media-offset-x),var(--ha-review-media-offset-y));-ms-transform:translate(var(--ha-review-media-offset-x),var(--ha-review-media-offset-y));transform:translate(var(--ha-review-media-offset-x),var(--ha-review-media-offset-y))}.ha-review-figure img{width:100%;height:100%;border-radius:50%;vertical-align:bottom}.ha-review-reviewer{margin-top:0;margin-bottom:10px;color:#151515;font-size:18px}.ha-review-position{margin-bottom:10px;color:#7f7f7f;font-size:15px}.ha-review-ratting{display:inline-block;font-size:12px;line-height:1}.ha-review-ratting--num{padding:5px 10px;border-radius:20px;background-color:#562dd4;color:#fff}.ha-review-ratting--star{color:#ffbf36}.ha-review-desc{margin-top:25px;font-size:16px;line-height:1.6}.ha-review-desc p{margin:0}.ha-review--top>.elementor-widget-container{padding:25px}.ha-review--top .ha-review-figure{display:inline-block;height:70px}.ha-review--top .ha-review-body{margin-top:var(--ha-review-media-offset-y)}.ha-review--left,.ha-review--right{--ha-review-media-width:150px}.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}.ha-review--left .ha-review-figure,.ha-review--right .ha-review-figure{height:150px}.ha-review--left .ha-review-body,.ha-review--right .ha-review-body{padding:25px}.ha-review--left .ha-review-body>:first-child,.ha-review--right .ha-review-body>:first-child{margin-top:0}.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;padding-left:25px}.ha-review--left .ha-review-body{-webkit-box-flex:0;-webkit-flex:0 0 var(--ha-review-left-body-width);-ms-flex:0 0 var(--ha-review-left-body-width);flex:0 0 var(--ha-review-left-body-width);margin-left:var(--ha-review-media-offset-x);max-width:var(--ha-review-left-body-width)}.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:25px;text-align:right}.ha-review--right .ha-review-body{-webkit-box-flex:0;-webkit-flex:0 0 var(--ha-review-right-body-width);-ms-flex:0 0 var(--ha-review-right-body-width);flex:0 0 var(--ha-review-right-body-width);margin-right:calc(-1*var(--ha-review-media-offset-x));max-width:var(--ha-review-right-body-width)}
assets/css/widgets/steps-flow.min.css CHANGED
@@ -1 +1 @@
1
- .ha-step-flow>.elementor-widget-container{padding:30px;text-align:center}.ha-step-arrow,.ha-step-arrow:after{position:absolute;display:inline-block;border-top:1px solid #ddd}.ha-step-arrow{left:calc(100% + 20px);top:49%;width:100px}.ha-step-arrow:after{top:-2px;right:5px;width:12px;height:12px;border-right:1px solid #ddd;color:#ddd;content:"";-webkit-transform:rotate(45deg) translateY(-50%);-ms-transform:rotate(45deg) translateY(-50%);transform:rotate(45deg) translateY(-50%)}.ha-steps-icon{position:relative;display:inline-block;margin-bottom:2rem;padding:40px;border-radius:50%;background-color:#e9ecf0;box-shadow:0 2px 6px -2px #989898;color:#8056ee;text-align:center;font-size:46px}.ha-steps-icon i,.ha-steps-icon svg{position:relative;display:block;width:1em;height:1em}.ha-steps-icon i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-steps-icon .ha-steps-label{position:absolute;top:5px;right:0;overflow:hidden;padding:12px 8px;max-width:200%;border:3px solid #fff;border-radius:20px;background-color:#8056ee;color:#fff;text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:1}.ha-steps-title{margin-top:0;margin-bottom:30px;font-weight:700;font-size:16px}.ha-steps-title a{display:block;color:#562dd4}.ha-steps-title a:hover{color:#242424}.ha-step-description{margin:0;color:#616161;font-weight:400;font-size:16px;line-height:1.5}
1
+ .ha-step-flow{--ha-stepflow-direction-origin-x:calc(-1*((var(--ha-stepflow-icon-size,46px)/2) + var(--ha-stepflow-icon-padding,40px) + var(--ha-stepflow-direction-offset-x,20px)))}.ha-step-flow>.elementor-widget-container{padding:25px;text-align:center}.ha-step-arrow,.ha-step-arrow:after{position:absolute;display:inline-block;border-top:1px solid #ddd}.ha-step-arrow{left:calc(100% + 20px);-webkit-transform:rotate(var(--ha-stepflow-direction-angle,0));-ms-transform:rotate(var(--ha-stepflow-direction-angle,0));transform:rotate(var(--ha-stepflow-direction-angle,0));-webkit-transform-origin:var(--ha-stepflow-direction-origin-x) center;-ms-transform-origin:var(--ha-stepflow-direction-origin-x) center;transform-origin:var(--ha-stepflow-direction-origin-x) center;top:49%;width:100px}.ha-step-arrow:after{top:-2px;right:5px;width:12px;height:12px;border-right:1px solid #ddd;color:#ddd;content:"";-webkit-transform:rotate(45deg) translateY(-50%);-ms-transform:rotate(45deg) translateY(-50%);transform:rotate(45deg) translateY(-50%)}.ha-steps-icon{position:relative;display:inline-block;margin-bottom:2rem;padding:40px;border-radius:50%;background-color:#e9ecf0;color:#8056ee;text-align:center;font-size:46px}.ha-steps-icon i,.ha-steps-icon svg{position:relative;display:block;width:1em;height:1em}.ha-steps-icon i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ha-steps-icon .ha-steps-label{position:absolute;top:5px;right:0;overflow:hidden;padding:8px 10px;max-width:200%;border:3px solid #fff;border-radius:20px;background-color:#8056ee;color:#fff;text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:1}.ha-steps-title{margin-top:0;margin-bottom:30px;font-weight:700;font-size:16px}.ha-steps-title a{display:block;color:#562dd4}.ha-steps-title a:hover{color:#242424}.ha-step-description{margin:0;color:#616161;font-weight:400;font-size:16px;line-height:1.5}
assets/css/widgets/testimonial.min.css CHANGED
@@ -1 +1 @@
1
- .ha-testimonial--basic>.elementor-widget-container{padding:2rem;border:1px solid #ececec;border-radius:.5rem}.ha-testimonial--basic .ha-testimonial__content{margin-bottom:2.5em}.ha-testimonial--bubble .ha-testimonial__content{position:relative;margin-bottom:1.5rem;padding:2rem;border-radius:6px;background-color:#fff;box-shadow:0 .2rem 2.8rem rgba(36,36,36,.1);line-height:1.6rem}.ha-testimonial--bubble .ha-testimonial__content:after{position:absolute;bottom:-14px;color:#fff;content:"\e911";font-style:normal;font-size:36px;font-family:"Happy Icons";-webkit-transform:rotate(-180deg);-ms-transform:rotate(-180deg);transform:rotate(-180deg)}.ha-testimonial--left.ha-testimonial--bubble .ha-testimonial__content:after{left:15px}.ha-testimonial--center.ha-testimonial--bubble .ha-testimonial__content:after{left:50%;-webkit-transform:translateX(-50%) rotate(-180deg);-ms-transform:translateX(-50%) rotate(-180deg);transform:translateX(-50%) rotate(-180deg)}.ha-testimonial--right.ha-testimonial--bubble .ha-testimonial__content:after{right:15px}.ha-testimonial__reviewer{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;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.ha-testimonial__reviewer-thumb{-webkit-box-flex:0;-webkit-flex:0 0 65px;-ms-flex:0 0 65px;flex:0 0 65px;max-width:65px;height:65px}.ha-testimonial__reviewer-thumb img{width:100%;height:100%;border-radius:50%;-o-object-fit:cover;object-fit:cover}.ha-testimonial__reviewer-name{margin-bottom:.3rem;color:#562dd4;font-weight:700;font-size:18px}.ha-testimonial__reviewer-title{color:#8c8c8c;font-size:16px}.ha-testimonial--left .ha-testimonial__reviewer-meta{padding-left:1em}.ha-testimonial--center .ha-testimonial__reviewer{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-testimonial--center .ha-testimonial__reviewer-meta{padding-top:1em;max-width:100%}.ha-testimonial--left .ha-testimonial__reviewer-meta,.ha-testimonial--right .ha-testimonial__reviewer-meta{-webkit-box-flex:0;-webkit-flex:0 0 calc(100% - 65px);-ms-flex:0 0 calc(100% - 65px);flex:0 0 calc(100% - 65px);max-width:calc(100% - 65px)}.ha-testimonial--right .ha-testimonial__reviewer{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ha-testimonial--right .ha-testimonial__reviewer-meta{padding-right:1em}.ha-testimonial--left{text-align:left}.ha-testimonial--right{text-align:right}.ha-testimonial--center{text-align:center}
1
+ .ha-testimonial--basic>.elementor-widget-container{padding:25px;border:1px solid #ececec;border-radius:5px}.ha-testimonial--basic .ha-testimonial__content{margin-bottom:25px}.ha-testimonial--bubble .ha-testimonial__content{position:relative;margin-bottom:25px;padding:25px;border-radius:6px;background-color:#fff;box-shadow:0 .2rem 2.8rem rgba(36,36,36,.1);line-height:1.6}.ha-testimonial--bubble .ha-testimonial__content:after{position:absolute;bottom:-14px;color:#fff;content:"\e911";font-style:normal;font-size:36px;font-family:"Happy Icons";-webkit-transform:rotate(-180deg);-ms-transform:rotate(-180deg);transform:rotate(-180deg)}.ha-testimonial--left.ha-testimonial--bubble .ha-testimonial__content:after{left:15px}.ha-testimonial--center.ha-testimonial--bubble .ha-testimonial__content:after{left:50%;-webkit-transform:translateX(-50%) rotate(-180deg);-ms-transform:translateX(-50%) rotate(-180deg);transform:translateX(-50%) rotate(-180deg)}.ha-testimonial--right.ha-testimonial--bubble .ha-testimonial__content:after{right:15px}.ha-testimonial__reviewer{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;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.ha-testimonial__reviewer-thumb{-webkit-box-flex:0;-webkit-flex:0 0 65px;-ms-flex:0 0 65px;flex:0 0 65px;max-width:65px;height:65px}.ha-testimonial__reviewer-thumb img{width:100%;height:100%;border-radius:50%;-o-object-fit:cover;object-fit:cover}.ha-testimonial__reviewer-name{margin-bottom:10px;color:#562dd4;font-weight:700;font-size:18px}.ha-testimonial__reviewer-title{color:#8c8c8c;font-size:16px}.ha-testimonial--left .ha-testimonial__reviewer-meta{padding-left:25px}.ha-testimonial--center .ha-testimonial__reviewer{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.ha-testimonial--center .ha-testimonial__reviewer-meta{padding-top:15px;max-width:100%}.ha-testimonial--left .ha-testimonial__reviewer-meta,.ha-testimonial--right .ha-testimonial__reviewer-meta{-webkit-box-flex:0;-webkit-flex:0 0 calc(100% - 65px);-ms-flex:0 0 calc(100% - 65px);flex:0 0 calc(100% - 65px);max-width:calc(100% - 65px)}.ha-testimonial--right .ha-testimonial__reviewer{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ha-testimonial--right .ha-testimonial__reviewer-meta{padding-right:25px}
assets/js/happy-addons.js CHANGED
@@ -563,7 +563,19 @@
563
 
564
  }, 200));
565
  }
566
- });
 
 
 
 
 
 
 
 
 
 
 
 
567
 
568
  //Threesixty Rotation
569
  var Threesixty_Rotation = function($scope) {
@@ -662,7 +674,8 @@
662
  'ha-fun-factor.default': FunFactor,
663
  'ha-bar-chart.default': BarChart,
664
  'ha-twitter-feed.default': TwitterFeed,
665
- 'ha-threesixty-rotation.default': Threesixty_Rotation
 
666
  };
667
 
668
  $.each( handlersFnMap, function( widgetName, handlerFn ) {
563
 
564
  }, 200));
565
  }
566
+ });
567
+
568
+ var DataTable = function($scope) {
569
+ var columnTH = $scope.find('.ha-table__head-column-cell');
570
+ var rowTR = $scope.find('.ha-table__body-row');
571
+
572
+ rowTR.each( function( i, tr) {
573
+ var th = $(tr).find('.ha-table__body-row-cell');
574
+ th.each( function( index, th ) {
575
+ $(th).prepend( '<div class="ha-table__head-column-cell">' + columnTH.eq(index).html() + '</div>' );
576
+ } );
577
+ } );
578
+ };
579
 
580
  //Threesixty Rotation
581
  var Threesixty_Rotation = function($scope) {
674
  'ha-fun-factor.default': FunFactor,
675
  'ha-bar-chart.default': BarChart,
676
  'ha-twitter-feed.default': TwitterFeed,
677
+ 'ha-threesixty-rotation.default': Threesixty_Rotation,
678
+ 'ha-data-table.default': DataTable
679
  };
680
 
681
  $.each( handlersFnMap, function( widgetName, handlerFn ) {
assets/js/happy-addons.min.js CHANGED
@@ -1 +1 @@
1
- "use strict";!function(t,e){function i(t,e,i){var n;return function(){var a=this,o=arguments,s=function(){n=null,i||t.apply(a,o)},r=i&&!n;clearTimeout(n),n=setTimeout(s,e),r&&t.apply(a,o)}}function n(e,i){var n=e.find(".hajs-gallery-filter");n.length&&n.on("click","button",function(e){e.stopPropagation();var n=t(this);n.parent().addClass("ha-filter-active").siblings().removeClass("ha-filter-active"),i(n.data("filter"))})}function a(e,i,n,a){if(t.fn.magnificPopup){if(!n)return void t.magnificPopup.close();e.on("click",i,function(t){t.stopPropagation()}),e.find(i).magnificPopup({key:a,type:"image",image:{titleSrc:function(t){return t.el.attr("title")?t.el.attr("title"):t.el.find("img").attr("alt")}},gallery:{enabled:!0,preload:[1,2]},zoom:{enabled:!0,duration:300,easing:"ease-in-out",opener:function(t){return t.is("img")?t:t.find("img")}}})}}var o=t(e);t.fn.getHappySettings=function(){return this.data("happy-settings")};var s=function(t){var e=t.find(".hajs-image-comparison"),i=e.getHappySettings();i[{on_hover:"move_slider_on_hover",on_swipe:"move_with_handle_only",on_click:"click_to_move"}[i.move_handle||"on_swipe"]]=!0,delete i.move_handle,e.imagesLoaded().done(function(){e.twentytwenty(i);var t=setTimeout(function(){o.trigger("resize.twentytwenty"),clearTimeout(t)},400)})},r=function(e){var i=e.find(".hajs-justified-gallery"),o=i.getHappySettings(),s=o.enable_popup;i.justifiedGallery(t.extend({},{rowHeight:150,lastRow:"justify",margins:10},o)),a(e,".ha-js-popup",s,"justifiedgallery"),n(e,function(t){i.justifiedGallery({lastRow:"*"===t?o.lastRow:"nojustify",filter:t}),a(e,"*"!==t?t:".ha-js-popup",s,"justifiedgallery")})};o.on("elementor/frontend/init",function(){var e=elementorFrontend,o=elementorModules,l=o.frontend.handlers.Base.extend({onInit:function(){o.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.widgetContainer=this.$element.find(".elementor-widget-container")[0],this.initFloatingEffects(),this.initBackgroundOverlay()},initBackgroundOverlay:function(){this.isEdit&&this.$element.addClass("ha-has-background-overlay")},getDefaultSettings:function(){return{targets:this.widgetContainer,loop:!0,direction:"alternate",easing:"easeInOutSine"}},onElementChange:function(t){-1!==t.indexOf("ha_floating")&&this.runOnElementChange()},runOnElementChange:i(function(){this.animation&&this.animation.restart(),this.initFloatingEffects()},200),getConfig:function(t){return this.getElementSettings("ha_floating_fx_"+t)},initFloatingEffects:function(){var t=this.getDefaultSettings();this.getConfig("translate_toggle")&&((this.getConfig("translate_x.size")||this.getConfig("translate_x.sizes.to"))&&(t.translateX={value:[this.getConfig("translate_x.sizes.from")||0,this.getConfig("translate_x.size")||this.getConfig("translate_x.sizes.to")],duration:this.getConfig("translate_duration.size"),delay:this.getConfig("translate_delay.size")||0}),(this.getConfig("translate_y.size")||this.getConfig("translate_y.sizes.to"))&&(t.translateY={value:[this.getConfig("translate_y.sizes.from")||0,this.getConfig("translate_y.size")||this.getConfig("translate_y.sizes.to")],duration:this.getConfig("translate_duration.size"),delay:this.getConfig("translate_delay.size")||0})),this.getConfig("rotate_toggle")&&((this.getConfig("rotate_x.size")||this.getConfig("rotate_x.sizes.to"))&&(t.rotateX={value:[this.getConfig("rotate_x.sizes.from")||0,this.getConfig("rotate_x.size")||this.getConfig("rotate_x.sizes.to")],duration:this.getConfig("rotate_duration.size"),delay:this.getConfig("rotate_delay.size")||0}),(this.getConfig("rotate_y.size")||this.getConfig("rotate_y.sizes.to"))&&(t.rotateY={value:[this.getConfig("rotate_y.sizes.from")||0,this.getConfig("rotate_y.size")||this.getConfig("rotate_y.sizes.to")],duration:this.getConfig("rotate_duration.size"),delay:this.getConfig("rotate_delay.size")||0}),(this.getConfig("rotate_z.size")||this.getConfig("rotate_z.sizes.to"))&&(t.rotateZ={value:[this.getConfig("rotate_z.sizes.from")||0,this.getConfig("rotate_z.size")||this.getConfig("rotate_z.sizes.to")],duration:this.getConfig("rotate_duration.size"),delay:this.getConfig("rotate_delay.size")||0})),this.getConfig("scale_toggle")&&((this.getConfig("scale_x.size")||this.getConfig("scale_x.sizes.to"))&&(t.scaleX={value:[this.getConfig("scale_x.sizes.from")||0,this.getConfig("scale_x.size")||this.getConfig("scale_x.sizes.to")],duration:this.getConfig("scale_duration.size"),delay:this.getConfig("scale_delay.size")||0}),(this.getConfig("scale_y.size")||this.getConfig("scale_y.sizes.to"))&&(t.scaleY={value:[this.getConfig("scale_y.sizes.from")||0,this.getConfig("scale_y.size")||this.getConfig("scale_y.sizes.to")],duration:this.getConfig("scale_duration.size"),delay:this.getConfig("scale_delay.size")||0})),(this.getConfig("translate_toggle")||this.getConfig("rotate_toggle")||this.getConfig("scale_toggle"))&&(this.widgetContainer.style.setProperty("will-change","transform"),this.animation=anime(t))}}),h=o.frontend.handlers.Base.extend({onInit:function(){o.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.$container=this.$element.find(".hajs-slick"),this.run()},isCarousel:function(){return this.$element.hasClass("ha-carousel")},getDefaultSettings:function(){return{arrows:!1,dots:!1,checkVisible:!1,infinite:!0,slidesToShow:this.isCarousel()?3:1,rows:0,prevArrow:'<button type="button" class="slick-prev"><i class="fa fa-chevron-left"></i></button>',nextArrow:'<button type="button" class="slick-next"><i class="fa fa-chevron-right"></i></button>'}},onElementChange:function(){this.$container.slick("unslick"),this.run()},getReadySettings:function(){var i={infinite:!!this.getElementSettings("loop"),autoplay:!!this.getElementSettings("autoplay"),autoplaySpeed:this.getElementSettings("autoplay_speed"),speed:this.getElementSettings("animation_speed"),centerMode:!!this.getElementSettings("center"),vertical:!!this.getElementSettings("vertical"),slidesToScroll:1};switch(this.getElementSettings("navigation")){case"arrow":i.arrows=!0;break;case"dots":i.dots=!0;break;case"both":i.arrows=!0,i.dots=!0}return this.isCarousel()&&(i.slidesToShow=this.getElementSettings("slides_to_show")||3,i.responsive=[{breakpoint:e.config.breakpoints.lg,settings:{slidesToShow:this.getElementSettings("slides_to_show_tablet")||i.slidesToShow}},{breakpoint:e.config.breakpoints.md,settings:{slidesToShow:this.getElementSettings("slides_to_show_mobile")||this.getElementSettings("slides_to_show_tablet")||i.slidesToShow}}]),t.extend({},this.getDefaultSettings(),i)},run:function(){this.$container.slick(this.getReadySettings())}}),f=function(t){e.waypoint(t,function(){var e=t.find(".ha-number-text");e.numerator(e.data("animation"))})},g=function(i){e.waypoint(i,function(){i.find(".ha-skill-level").each(function(){var e=t(this),i=e.find(".ha-skill-level-text"),n=e.data("level");e.animate({width:n+"%"},500),i.numerator({toValue:n+"%",duration:1300,onStep:function(){i.append("%")}})})})},d=o.frontend.handlers.Base.extend({onInit:function(){o.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.$container=this.$element.find(".hajs-isotope"),this.run(),this.runFilter()},getLayoutMode:function(){var t=this.getElementSettings("layout");return"even"===t?"masonry":t},getDefaultSettings:function(){return{itemSelector:".ha-image-grid-item",percentPosition:!0,layoutMode:this.getLayoutMode()}},runFilter:function(){var t=this;n(this.$element,function(e){t.$container.isotope({filter:e});var i="*"!==e?e:".ha-js-popup";a(t.$element,i,t.getElementSettings("enable_popup"),"imagegrid")})},onElementChange:function(t){-1!==["layout","image_height","columns","image_margin","enable_popup"].indexOf(t)&&this.run()},run:function(){var t=this;this.$container.isotope(t.getDefaultSettings()),this.$container.imagesLoaded().progress(function(){t.$container.isotope("layout")}),a(this.$element,".ha-js-popup",this.getElementSettings("enable_popup"),"imagegrid")}}),u=o.frontend.handlers.Base.extend({onInit:function(){o.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.wrapper=this.$element.find(".ha-news-ticker-wrapper"),this.run()},onElementChange:function(t){"item_space"!==t&&"title_typography_font_size"!==t||this.run()},run:function(){var e=this.wrapper.innerHeight(),i=this.wrapper.innerWidth(),n=this.wrapper.find(".ha-news-ticker-container"),a=n.find(".ha-news-ticker-item"),o=this.wrapper.data("scroll-direction"),s="scroll"+o+e+i,r=this.wrapper.data("duration"),l="normal",h=10,f={transform:"translateX(0"+i+"px)"},g={transform:"translateX(-101%)"};"right"===o&&(l="reverse"),a.each(function(){h+=t(this).outerWidth(!0)}),n.css({width:h,display:"flex"}),t.keyframe.define([{name:s,"0%":f,"100%":g}]),n.playKeyframe({name:s,duration:r+"ms",timingFunction:"linear",delay:"0s",iterationCount:"infinite",direction:l,fillMode:"none",complete:function(){}})}}),c=function(t){e.waypoint(t,function(){var e=t.find(".ha-fun-factor__content-number");e.numerator(e.data("animation"))})},p=function(i){e.waypoint(i,function(){var e=t(this),i=e.find(".ha-bar-chart-container"),n=e.find("#ha-bar-chart"),a=i.data("settings");i.length&&new Chart(n,a)})},m=function(e){var i=e.find(".ha-twitter-load-more"),n=e.find(".ha-tweet-items");i.on("click",function(i){i.preventDefault();var a=t(this),o=a.data("settings"),s=a.data("total"),r=e.find(".ha-tweet-item").length;t.ajax({url:HappyLocalize.ajax_url,type:"POST",data:{action:"ha_twitter_feed_action",security:HappyLocalize.nonce,query_settings:o,loaded_item:r},success:function(e){s>r?t(e).appendTo(n):(a.text("All Loaded").addClass("loaded"),setTimeout(function(){a.css({display:"none"})},800))},error:function(t){}})})},y=o.frontend.handlers.Base.extend({onInit:function(){o.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.wrapper=this.$element.find(".ha-post-tab"),this.run()},run:function(){var e=this.wrapper.find(".ha-post-tab-filter"),n=e.find("li"),a=this.wrapper.data("event"),o=this.wrapper.data("query-args");n.on(a,i(function(e){e.preventDefault();var i=t(this),a=i.data("term"),s=i.closest(".ha-post-tab"),r=s.find(".ha-post-tab-content"),l=r.find(".ha-post-tab-loading"),h=r.find(".ha-post-tab-item-wrapper"),f=!1;0===l.length&&(n.removeClass("active"),h.removeClass("active"),i.addClass("active"),h.each(function(){var e=t(this),i=e.data("term");a===i&&(e.addClass("active"),f=!0)}),!1===f&&t.ajax({url:HappyLocalize.ajax_url,type:"POST",data:{action:"ha_post_tab_action",security:HappyLocalize.nonce,post_tab_query:o,term_id:a},beforeSend:function(){r.append('<span class="ha-post-tab-loading"><i class="eicon-spinner eicon-animation-spin"></i></span>')},success:function(t){r.find(".ha-post-tab-loading").remove(),r.append(t)},error:function(t){}}))},200))}}),_=function(e){var i=e.find(".ha-threesixty-rotation-inner"),n=i.data("selector"),a=i.data("autoplay"),o=e.find(".ha-threesixty-rotation-magnify"),s=e.find(".ha-threesixty-rotation-360img"),r=o.data("zoom"),l=e.find(".ha-threesixty-rotation-play"),h=circlr(n,{play:!0});if("on"===a){var f=e.find(".ha-threesixty-rotation-autoplay");f.on("click",function(t){t.preventDefault(),h.play(),s.remove()}),setTimeout(function(){f.trigger("click"),f.remove()},1e3)}else l.on("click",function(e){e.preventDefault();var i=t(this),n=i.find("i");n.hasClass("hm-play-button")?(n.removeClass("hm-play-button"),n.addClass("hm-stop"),h.play()):(n.removeClass("hm-stop"),n.addClass("hm-play-button"),h.stop()),s.remove()});o.on("click",function(i){e.find("img").each(function(){-1!==t(this).attr("style").indexOf("block")&&(HappySimplaMagnify(t(this)[0],r),o.css("display","none"),s.remove())})}),t(document).on("click",function(n){var a=t(n.target),r=e.find(".ha-img-magnifier-glass"),l=o.find("i");r.length&&a[0]!==l[0]&&(r.remove(),o.removeAttr("style")),a[0]===i[0]&&s.remove()}),i.on("mouseup mousedown",function(t){s.remove()})};t("[data-ha-element-link]").each(function(){var e=t(this).data("ha-element-link");t(this).on("click.haElementOnClick",function(){e.is_external?window.open(e.url):location.href=e.url})});var v={"ha-image-compare.default":s,"ha-justified-gallery.default":r,"ha-number.default":f,"ha-skills.default":g,"ha-fun-factor.default":c,"ha-bar-chart.default":p,"ha-twitter-feed.default":m,"ha-threesixty-rotation.default":_};t.each(v,function(t,i){e.hooks.addAction("frontend/element_ready/"+t,i)});var C={"ha-slider.default":h,"ha-carousel.default":h,"ha-image-grid.default":d,"ha-news-ticker.default":u,"ha-post-tab.default":y,widget:l};t.each(C,function(t,i){e.hooks.addAction("frontend/element_ready/"+t,function(t){e.elementsHandler.addHandler(i,{$element:t})})})})}(jQuery,window);
1
+ "use strict";!function(t,e){function i(t,e,i){var n;return function(){var a=this,o=arguments,s=function(){n=null,i||t.apply(a,o)},r=i&&!n;clearTimeout(n),n=setTimeout(s,e),r&&t.apply(a,o)}}function n(e,i){var n=e.find(".hajs-gallery-filter");n.length&&n.on("click","button",function(e){e.stopPropagation();var n=t(this);n.parent().addClass("ha-filter-active").siblings().removeClass("ha-filter-active"),i(n.data("filter"))})}function a(e,i,n,a){if(t.fn.magnificPopup){if(!n)return void t.magnificPopup.close();e.on("click",i,function(t){t.stopPropagation()}),e.find(i).magnificPopup({key:a,type:"image",image:{titleSrc:function(t){return t.el.attr("title")?t.el.attr("title"):t.el.find("img").attr("alt")}},gallery:{enabled:!0,preload:[1,2]},zoom:{enabled:!0,duration:300,easing:"ease-in-out",opener:function(t){return t.is("img")?t:t.find("img")}}})}}var o=t(e);t.fn.getHappySettings=function(){return this.data("happy-settings")};var s=function(t){var e=t.find(".hajs-image-comparison"),i=e.getHappySettings();i[{on_hover:"move_slider_on_hover",on_swipe:"move_with_handle_only",on_click:"click_to_move"}[i.move_handle||"on_swipe"]]=!0,delete i.move_handle,e.imagesLoaded().done(function(){e.twentytwenty(i);var t=setTimeout(function(){o.trigger("resize.twentytwenty"),clearTimeout(t)},400)})},r=function(e){var i=e.find(".hajs-justified-gallery"),o=i.getHappySettings(),s=o.enable_popup;i.justifiedGallery(t.extend({},{rowHeight:150,lastRow:"justify",margins:10},o)),a(e,".ha-js-popup",s,"justifiedgallery"),n(e,function(t){i.justifiedGallery({lastRow:"*"===t?o.lastRow:"nojustify",filter:t}),a(e,"*"!==t?t:".ha-js-popup",s,"justifiedgallery")})};o.on("elementor/frontend/init",function(){var e=elementorFrontend,o=elementorModules,l=o.frontend.handlers.Base.extend({onInit:function(){o.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.widgetContainer=this.$element.find(".elementor-widget-container")[0],this.initFloatingEffects(),this.initBackgroundOverlay()},initBackgroundOverlay:function(){this.isEdit&&this.$element.addClass("ha-has-background-overlay")},getDefaultSettings:function(){return{targets:this.widgetContainer,loop:!0,direction:"alternate",easing:"easeInOutSine"}},onElementChange:function(t){-1!==t.indexOf("ha_floating")&&this.runOnElementChange()},runOnElementChange:i(function(){this.animation&&this.animation.restart(),this.initFloatingEffects()},200),getConfig:function(t){return this.getElementSettings("ha_floating_fx_"+t)},initFloatingEffects:function(){var t=this.getDefaultSettings();this.getConfig("translate_toggle")&&((this.getConfig("translate_x.size")||this.getConfig("translate_x.sizes.to"))&&(t.translateX={value:[this.getConfig("translate_x.sizes.from")||0,this.getConfig("translate_x.size")||this.getConfig("translate_x.sizes.to")],duration:this.getConfig("translate_duration.size"),delay:this.getConfig("translate_delay.size")||0}),(this.getConfig("translate_y.size")||this.getConfig("translate_y.sizes.to"))&&(t.translateY={value:[this.getConfig("translate_y.sizes.from")||0,this.getConfig("translate_y.size")||this.getConfig("translate_y.sizes.to")],duration:this.getConfig("translate_duration.size"),delay:this.getConfig("translate_delay.size")||0})),this.getConfig("rotate_toggle")&&((this.getConfig("rotate_x.size")||this.getConfig("rotate_x.sizes.to"))&&(t.rotateX={value:[this.getConfig("rotate_x.sizes.from")||0,this.getConfig("rotate_x.size")||this.getConfig("rotate_x.sizes.to")],duration:this.getConfig("rotate_duration.size"),delay:this.getConfig("rotate_delay.size")||0}),(this.getConfig("rotate_y.size")||this.getConfig("rotate_y.sizes.to"))&&(t.rotateY={value:[this.getConfig("rotate_y.sizes.from")||0,this.getConfig("rotate_y.size")||this.getConfig("rotate_y.sizes.to")],duration:this.getConfig("rotate_duration.size"),delay:this.getConfig("rotate_delay.size")||0}),(this.getConfig("rotate_z.size")||this.getConfig("rotate_z.sizes.to"))&&(t.rotateZ={value:[this.getConfig("rotate_z.sizes.from")||0,this.getConfig("rotate_z.size")||this.getConfig("rotate_z.sizes.to")],duration:this.getConfig("rotate_duration.size"),delay:this.getConfig("rotate_delay.size")||0})),this.getConfig("scale_toggle")&&((this.getConfig("scale_x.size")||this.getConfig("scale_x.sizes.to"))&&(t.scaleX={value:[this.getConfig("scale_x.sizes.from")||0,this.getConfig("scale_x.size")||this.getConfig("scale_x.sizes.to")],duration:this.getConfig("scale_duration.size"),delay:this.getConfig("scale_delay.size")||0}),(this.getConfig("scale_y.size")||this.getConfig("scale_y.sizes.to"))&&(t.scaleY={value:[this.getConfig("scale_y.sizes.from")||0,this.getConfig("scale_y.size")||this.getConfig("scale_y.sizes.to")],duration:this.getConfig("scale_duration.size"),delay:this.getConfig("scale_delay.size")||0})),(this.getConfig("translate_toggle")||this.getConfig("rotate_toggle")||this.getConfig("scale_toggle"))&&(this.widgetContainer.style.setProperty("will-change","transform"),this.animation=anime(t))}}),h=o.frontend.handlers.Base.extend({onInit:function(){o.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.$container=this.$element.find(".hajs-slick"),this.run()},isCarousel:function(){return this.$element.hasClass("ha-carousel")},getDefaultSettings:function(){return{arrows:!1,dots:!1,checkVisible:!1,infinite:!0,slidesToShow:this.isCarousel()?3:1,rows:0,prevArrow:'<button type="button" class="slick-prev"><i class="fa fa-chevron-left"></i></button>',nextArrow:'<button type="button" class="slick-next"><i class="fa fa-chevron-right"></i></button>'}},onElementChange:function(){this.$container.slick("unslick"),this.run()},getReadySettings:function(){var i={infinite:!!this.getElementSettings("loop"),autoplay:!!this.getElementSettings("autoplay"),autoplaySpeed:this.getElementSettings("autoplay_speed"),speed:this.getElementSettings("animation_speed"),centerMode:!!this.getElementSettings("center"),vertical:!!this.getElementSettings("vertical"),slidesToScroll:1};switch(this.getElementSettings("navigation")){case"arrow":i.arrows=!0;break;case"dots":i.dots=!0;break;case"both":i.arrows=!0,i.dots=!0}return this.isCarousel()&&(i.slidesToShow=this.getElementSettings("slides_to_show")||3,i.responsive=[{breakpoint:e.config.breakpoints.lg,settings:{slidesToShow:this.getElementSettings("slides_to_show_tablet")||i.slidesToShow}},{breakpoint:e.config.breakpoints.md,settings:{slidesToShow:this.getElementSettings("slides_to_show_mobile")||this.getElementSettings("slides_to_show_tablet")||i.slidesToShow}}]),t.extend({},this.getDefaultSettings(),i)},run:function(){this.$container.slick(this.getReadySettings())}}),f=function(t){e.waypoint(t,function(){var e=t.find(".ha-number-text");e.numerator(e.data("animation"))})},g=function(i){e.waypoint(i,function(){i.find(".ha-skill-level").each(function(){var e=t(this),i=e.find(".ha-skill-level-text"),n=e.data("level");e.animate({width:n+"%"},500),i.numerator({toValue:n+"%",duration:1300,onStep:function(){i.append("%")}})})})},d=o.frontend.handlers.Base.extend({onInit:function(){o.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.$container=this.$element.find(".hajs-isotope"),this.run(),this.runFilter()},getLayoutMode:function(){var t=this.getElementSettings("layout");return"even"===t?"masonry":t},getDefaultSettings:function(){return{itemSelector:".ha-image-grid-item",percentPosition:!0,layoutMode:this.getLayoutMode()}},runFilter:function(){var t=this;n(this.$element,function(e){t.$container.isotope({filter:e});var i="*"!==e?e:".ha-js-popup";a(t.$element,i,t.getElementSettings("enable_popup"),"imagegrid")})},onElementChange:function(t){-1!==["layout","image_height","columns","image_margin","enable_popup"].indexOf(t)&&this.run()},run:function(){var t=this;this.$container.isotope(t.getDefaultSettings()),this.$container.imagesLoaded().progress(function(){t.$container.isotope("layout")}),a(this.$element,".ha-js-popup",this.getElementSettings("enable_popup"),"imagegrid")}}),c=o.frontend.handlers.Base.extend({onInit:function(){o.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.wrapper=this.$element.find(".ha-news-ticker-wrapper"),this.run()},onElementChange:function(t){"item_space"!==t&&"title_typography_font_size"!==t||this.run()},run:function(){var e=this.wrapper.innerHeight(),i=this.wrapper.innerWidth(),n=this.wrapper.find(".ha-news-ticker-container"),a=n.find(".ha-news-ticker-item"),o=this.wrapper.data("scroll-direction"),s="scroll"+o+e+i,r=this.wrapper.data("duration"),l="normal",h=10,f={transform:"translateX(0"+i+"px)"},g={transform:"translateX(-101%)"};"right"===o&&(l="reverse"),a.each(function(){h+=t(this).outerWidth(!0)}),n.css({width:h,display:"flex"}),t.keyframe.define([{name:s,"0%":f,"100%":g}]),n.playKeyframe({name:s,duration:r+"ms",timingFunction:"linear",delay:"0s",iterationCount:"infinite",direction:l,fillMode:"none",complete:function(){}})}}),u=function(t){e.waypoint(t,function(){var e=t.find(".ha-fun-factor__content-number");e.numerator(e.data("animation"))})},p=function(i){e.waypoint(i,function(){var e=t(this),i=e.find(".ha-bar-chart-container"),n=e.find("#ha-bar-chart"),a=i.data("settings");i.length&&new Chart(n,a)})},m=function(e){var i=e.find(".ha-twitter-load-more"),n=e.find(".ha-tweet-items");i.on("click",function(i){i.preventDefault();var a=t(this),o=a.data("settings"),s=a.data("total"),r=e.find(".ha-tweet-item").length;t.ajax({url:HappyLocalize.ajax_url,type:"POST",data:{action:"ha_twitter_feed_action",security:HappyLocalize.nonce,query_settings:o,loaded_item:r},success:function(e){s>r?t(e).appendTo(n):(a.text("All Loaded").addClass("loaded"),setTimeout(function(){a.css({display:"none"})},800))},error:function(t){}})})},y=o.frontend.handlers.Base.extend({onInit:function(){o.frontend.handlers.Base.prototype.onInit.apply(this,arguments),this.wrapper=this.$element.find(".ha-post-tab"),this.run()},run:function(){var e=this.wrapper.find(".ha-post-tab-filter"),n=e.find("li"),a=this.wrapper.data("event"),o=this.wrapper.data("query-args");n.on(a,i(function(e){e.preventDefault();var i=t(this),a=i.data("term"),s=i.closest(".ha-post-tab"),r=s.find(".ha-post-tab-content"),l=r.find(".ha-post-tab-loading"),h=r.find(".ha-post-tab-item-wrapper"),f=!1;0===l.length&&(n.removeClass("active"),h.removeClass("active"),i.addClass("active"),h.each(function(){var e=t(this),i=e.data("term");a===i&&(e.addClass("active"),f=!0)}),!1===f&&t.ajax({url:HappyLocalize.ajax_url,type:"POST",data:{action:"ha_post_tab_action",security:HappyLocalize.nonce,post_tab_query:o,term_id:a},beforeSend:function(){r.append('<span class="ha-post-tab-loading"><i class="eicon-spinner eicon-animation-spin"></i></span>')},success:function(t){r.find(".ha-post-tab-loading").remove(),r.append(t)},error:function(t){}}))},200))}}),_=function(e){var i=e.find(".ha-table__head-column-cell");e.find(".ha-table__body-row").each(function(e,n){t(n).find(".ha-table__body-row-cell").each(function(e,n){t(n).prepend('<div class="ha-table__head-column-cell">'+i.eq(e).html()+"</div>")})})},v=function(e){var i=e.find(".ha-threesixty-rotation-inner"),n=i.data("selector"),a=i.data("autoplay"),o=e.find(".ha-threesixty-rotation-magnify"),s=e.find(".ha-threesixty-rotation-360img"),r=o.data("zoom"),l=e.find(".ha-threesixty-rotation-play"),h=circlr(n,{play:!0});if("on"===a){var f=e.find(".ha-threesixty-rotation-autoplay");f.on("click",function(t){t.preventDefault(),h.play(),s.remove()}),setTimeout(function(){f.trigger("click"),f.remove()},1e3)}else l.on("click",function(e){e.preventDefault();var i=t(this),n=i.find("i");n.hasClass("hm-play-button")?(n.removeClass("hm-play-button"),n.addClass("hm-stop"),h.play()):(n.removeClass("hm-stop"),n.addClass("hm-play-button"),h.stop()),s.remove()});o.on("click",function(i){e.find("img").each(function(){-1!==t(this).attr("style").indexOf("block")&&(HappySimplaMagnify(t(this)[0],r),o.css("display","none"),s.remove())})}),t(document).on("click",function(n){var a=t(n.target),r=e.find(".ha-img-magnifier-glass"),l=o.find("i");r.length&&a[0]!==l[0]&&(r.remove(),o.removeAttr("style")),a[0]===i[0]&&s.remove()}),i.on("mouseup mousedown",function(t){s.remove()})};t("[data-ha-element-link]").each(function(){var e=t(this).data("ha-element-link");t(this).on("click.haElementOnClick",function(){e.is_external?window.open(e.url):location.href=e.url})});var C={"ha-image-compare.default":s,"ha-justified-gallery.default":r,"ha-number.default":f,"ha-skills.default":g,"ha-fun-factor.default":u,"ha-bar-chart.default":p,"ha-twitter-feed.default":m,"ha-threesixty-rotation.default":v,"ha-data-table.default":_};t.each(C,function(t,i){e.hooks.addAction("frontend/element_ready/"+t,i)});var w={"ha-slider.default":h,"ha-carousel.default":h,"ha-image-grid.default":d,"ha-news-ticker.default":c,"ha-post-tab.default":y,widget:l};t.each(w,function(t,i){e.hooks.addAction("frontend/element_ready/"+t,function(t){e.elementsHandler.addHandler(i,{$element:t})})})})}(jQuery,window);
base.php CHANGED
@@ -8,7 +8,6 @@ namespace Happy_Addons\Elementor;
8
 
9
  use Elementor\Controls_Manager;
10
  use Elementor\Elements_Manager;
11
- use Elementor\Core\Common\Modules\Finder\Categories_Manager;
12
 
13
  defined( 'ABSPATH' ) || die();
14
 
@@ -41,32 +40,12 @@ class Base {
41
  add_action( 'elementor/elements/categories_registered', [ $this, 'add_category' ] );
42
 
43
  // Register custom controls
44
- add_action( 'elementor/controls/controls_registered', [ $this, 'register_controls' ] );
45
 
46
- // Register finder category
47
- add_action( 'elementor/finder/categories/init', [ $this, 'register_finder' ] );
48
-
49
- Widgets_Manager::init();
50
- Assets_Manager::init();
51
- Cache_Manager::init();
52
- Icons_Manager::init();
53
- Extensions_Manager::init();
54
- Select2_Handler::init();
55
- WPML_Manager::init();
56
 
57
  $this->init_appsero_tracking();
58
 
59
- if ( is_user_logged_in() ) {
60
- Admin_Bar::init();
61
- Library_Manager::init();
62
- }
63
-
64
- if ( is_admin() ) {
65
- Updater::init();
66
- Dashboard::init();
67
- Attention_Seeker::init();
68
- }
69
-
70
  do_action( 'happyaddons_loaded' );
71
  }
72
 
@@ -96,7 +75,7 @@ class Base {
96
  }
97
 
98
  public function include_files() {
99
- include_once( HAPPY_ADDONS_DIR_PATH . 'inc/functions-forms.php' );
100
 
101
  include_once( HAPPY_ADDONS_DIR_PATH . 'classes/icons-manager.php' );
102
  include_once( HAPPY_ADDONS_DIR_PATH . 'classes/widgets-manager.php' );
@@ -105,7 +84,7 @@ class Base {
105
 
106
  include_once( HAPPY_ADDONS_DIR_PATH . 'classes/widgets-cache.php' );
107
  include_once( HAPPY_ADDONS_DIR_PATH . 'classes/assets-cache.php' );
108
- include_once( HAPPY_ADDONS_DIR_PATH . 'classes/extensions-manager.php' );
109
  include_once( HAPPY_ADDONS_DIR_PATH . 'classes/select2-handler.php' );
110
  include_once( HAPPY_ADDONS_DIR_PATH . 'classes/wpml-manager.php' );
111
 
@@ -116,12 +95,15 @@ class Base {
116
  }
117
 
118
  if ( is_user_logged_in() ) {
119
- include_once( HAPPY_ADDONS_DIR_PATH . 'classes/admin-bar.php' );
120
- include_once( HAPPY_ADDONS_DIR_PATH . 'classes/clone-handler.php' );
121
  include_once( HAPPY_ADDONS_DIR_PATH . 'classes/library-manager.php' );
122
  include_once( HAPPY_ADDONS_DIR_PATH . 'classes/library-source.php' );
123
  }
124
- }
 
 
 
 
 
125
 
126
  /**
127
  * Add custom category.
@@ -152,17 +134,4 @@ class Base {
152
  $controls_Manager->add_group_control( $foreground::get_type(), new $foreground() );
153
  ha_elementor()->controls_manager->register_control( $select2::TYPE, new $select2() );
154
  }
155
-
156
- /**
157
- * Register finder category and category items
158
- *
159
- * @param $categories_manager
160
- */
161
- public function register_finder( Categories_Manager $categories_manager ) {
162
- include_once( HAPPY_ADDONS_DIR_PATH . 'classes/finder.php' );
163
- include_once( HAPPY_ADDONS_DIR_PATH . 'classes/finder-edit.php' );
164
- // Add the category
165
- $categories_manager->add_category( Finder::SLUG, new Finder() );
166
- $categories_manager->add_category( Finder_Edit::SLUG, new Finder_Edit() );
167
- }
168
  }
8
 
9
  use Elementor\Controls_Manager;
10
  use Elementor\Elements_Manager;
 
11
 
12
  defined( 'ABSPATH' ) || die();
13
 
40
  add_action( 'elementor/elements/categories_registered', [ $this, 'add_category' ] );
41
 
42
  // Register custom controls
43
+ add_action( 'elementor/controls/controls_registered', [ $this, 'register_controls' ] );
44
 
45
+ add_action( 'init', [ $this, 'include_on_init' ] );
 
 
 
 
 
 
 
 
 
46
 
47
  $this->init_appsero_tracking();
48
 
 
 
 
 
 
 
 
 
 
 
 
49
  do_action( 'happyaddons_loaded' );
50
  }
51
 
75
  }
76
 
77
  public function include_files() {
78
+ include_once( HAPPY_ADDONS_DIR_PATH . 'inc/functions-forms.php' );
79
 
80
  include_once( HAPPY_ADDONS_DIR_PATH . 'classes/icons-manager.php' );
81
  include_once( HAPPY_ADDONS_DIR_PATH . 'classes/widgets-manager.php' );
84
 
85
  include_once( HAPPY_ADDONS_DIR_PATH . 'classes/widgets-cache.php' );
86
  include_once( HAPPY_ADDONS_DIR_PATH . 'classes/assets-cache.php' );
87
+
88
  include_once( HAPPY_ADDONS_DIR_PATH . 'classes/select2-handler.php' );
89
  include_once( HAPPY_ADDONS_DIR_PATH . 'classes/wpml-manager.php' );
90
 
95
  }
96
 
97
  if ( is_user_logged_in() ) {
 
 
98
  include_once( HAPPY_ADDONS_DIR_PATH . 'classes/library-manager.php' );
99
  include_once( HAPPY_ADDONS_DIR_PATH . 'classes/library-source.php' );
100
  }
101
+ }
102
+
103
+ public function include_on_init() {
104
+ include_once( HAPPY_ADDONS_DIR_PATH . 'inc/functions-extensions.php' );
105
+ include_once( HAPPY_ADDONS_DIR_PATH . 'classes/extensions-manager.php' );
106
+ }
107
 
108
  /**
109
  * Add custom category.
134
  $controls_Manager->add_group_control( $foreground::get_type(), new $foreground() );
135
  ha_elementor()->controls_manager->register_control( $select2::TYPE, new $select2() );
136
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
137
  }
changelog.txt CHANGED
@@ -1,3 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  = 2.12.3 - 13 July 2020 =
2
 
3
  - Tweak: Twitter feed widget icon updated
1
+ = 2.13.0 - 27 July 2020 =
2
+
3
+ - New: Data Table widget
4
+ - New: `happyaddons/extensions/grid_layer` hook to control Grid Layer
5
+ - New: `happyaddons/extensions/background_overlay` hook to control Background Overlay
6
+ - New: `happyaddons/extensions/wrapper_link` hook to control Wrapper Link
7
+ - New: `happyaddons/extensions/happy_clone` hook to control Happy Clone
8
+ - New: `happyaddons/extensions/adminbar_menu` hook to control Adminbar menu
9
+ - New: `happyaddons/extensions/floating_effects` hook to control Floating Effects
10
+ - New: `happyaddons/extensions/css_transform` hook to control CSS Transform
11
+ - New: `happyaddons/extensions/on_demand_cache` hook to control On Demand Assets Loading
12
+ - Tweak: Added CSS Transform hover state support
13
+ - Tweak: Added Stepflow direction arrow rotatation support
14
+ - Tweak: Added Card button full width support
15
+ - Tweak: Added Card responsive image positioning
16
+ - Tweak: Restored justify alignment in all widgets
17
+ - Tweak: Improved base styles in all widgets
18
+ - Tweak: Removed widget control panel link from editor panel
19
+ - Tweak: Removed HappyAddons shortcut link from finder
20
+ - Tweak: Removed unnecessary css
21
+ - Tweak: Post List content on/off option
22
+ - Tweak: Post List feature image left & top show option
23
+ - Fix: Post List date issue
24
+ - Fix: WPML link translation issue
25
+
26
  = 2.12.3 - 13 July 2020 =
27
 
28
  - Tweak: Twitter feed widget icon updated
classes/admin-bar.php CHANGED
@@ -5,100 +5,102 @@ defined( 'ABSPATH' ) || die();
5
 
6
  class Admin_Bar {
7
 
8
- public static function init() {
9
- add_action( 'admin_bar_menu', [__CLASS__, 'add_toolbar_items'], 500 );
10
- add_action( 'wp_enqueue_scripts', [__CLASS__, 'enqueue_assets'] );
11
- add_action( 'admin_enqueue_scripts', [__CLASS__, 'enqueue_assets'] );
12
- add_action( 'wp_ajax_ha_clear_cache', [__CLASS__, 'clear_cache' ] );
13
- }
14
-
15
- public static function clear_cache() {
16
- if ( ! current_user_can( 'manage_options' ) ) {
17
- return;
18
- }
19
-
20
- if ( ! check_ajax_referer( 'ha_clear_cache', 'nonce' ) ) {
21
- wp_send_json_error();
22
- }
23
-
24
- $type = isset( $_POST['type'] ) ? $_POST['type'] : '';
25
- $post_id = isset( $_POST['post_id'] ) ? $_POST['post_id'] : 0;
26
- $assets_cache = new Assets_Cache( $post_id );
27
- if ( $type === 'page' ) {
28
- $assets_cache->delete();
29
- } elseif ( $type === 'all' ) {
30
- $assets_cache->delete_all();
31
- }
32
- wp_send_json_success();
33
- }
34
-
35
- public static function enqueue_assets() {
36
- if ( ! current_user_can( 'manage_options' ) ) {
37
- return;
38
- }
39
-
40
- wp_enqueue_style(
41
- 'happy-elementor-addons-admin',
42
- HAPPY_ADDONS_ASSETS . 'admin/css/admin.min.css',
43
- null,
44
- HAPPY_ADDONS_VERSION
45
- );
46
-
47
- wp_enqueue_script(
48
- 'happy-elementor-addons-admin',
49
- HAPPY_ADDONS_ASSETS . 'admin/js/admin.min.js',
50
- ['jquery'],
51
- HAPPY_ADDONS_VERSION,
52
- true
53
- );
54
-
55
- wp_localize_script(
56
- 'happy-elementor-addons-admin',
57
- 'HappyAdmin',
58
- [
59
- 'nonce' => wp_create_nonce( 'ha_clear_cache' ),
60
- 'post_id' => get_queried_object_id(),
61
- 'ajax_url' => admin_url( 'admin-ajax.php' ),
62
- ]
63
- );
64
- }
65
-
66
- public static function add_toolbar_items( \WP_Admin_Bar $admin_bar ) {
67
- if ( ! current_user_can( 'manage_options' ) ) {
68
- return;
69
  }
70
 
71
  $icon = '<i class="dashicons dashicons-update-alt"></i> ';
72
 
73
- $admin_bar->add_menu( array(
74
- 'id' => 'happy-addons',
75
- 'title' => sprintf( '<img src="%s">', ha_get_b64_icon() ),
76
- 'href' => ha_get_dashboard_link(),
77
- 'meta' => [
78
- 'title' => __( 'Happy Elementor Addons', 'happy-elementor-addons' ),
79
- ]
80
- ) );
81
-
82
- if ( is_singular() ) {
83
- $admin_bar->add_menu( array(
84
- 'id' => 'ha-clear-page-cache',
85
- 'parent' => 'happy-addons',
86
- 'title' => $icon . __( 'Page: Renew On Demand Assets', 'happy-elementor-addons' ),
87
- 'href' => '#',
88
- 'meta' => [
89
- 'class' => 'hajs-clear-cache ha-clear-page-cache',
90
- ]
91
- ) );
92
- }
93
-
94
- $admin_bar->add_menu( array(
95
- 'id' => 'ha-clear-all-cache',
96
- 'parent' => 'happy-addons',
97
- 'title' => $icon . __( 'Global: Renew On Demand Assets', 'happy-elementor-addons' ),
98
- 'href' => '#',
99
- 'meta' => [
100
- 'class' => 'hajs-clear-cache ha-clear-all-cache',
101
- ]
102
- ) );
103
- }
104
  }
 
 
5
 
6
  class Admin_Bar {
7
 
8
+ public static function init() {
9
+ add_action( 'admin_bar_menu', [__CLASS__, 'add_toolbar_items'], 500 );
10
+ add_action( 'wp_enqueue_scripts', [__CLASS__, 'enqueue_assets'] );
11
+ add_action( 'admin_enqueue_scripts', [__CLASS__, 'enqueue_assets'] );
12
+ add_action( 'wp_ajax_ha_clear_cache', [__CLASS__, 'clear_cache' ] );
13
+ }
14
+
15
+ public static function clear_cache() {
16
+ if ( ! current_user_can( 'manage_options' ) ) {
17
+ return;
18
+ }
19
+
20
+ if ( ! check_ajax_referer( 'ha_clear_cache', 'nonce' ) ) {
21
+ wp_send_json_error();
22
+ }
23
+
24
+ $type = isset( $_POST['type'] ) ? $_POST['type'] : '';
25
+ $post_id = isset( $_POST['post_id'] ) ? $_POST['post_id'] : 0;
26
+ $assets_cache = new Assets_Cache( $post_id );
27
+ if ( $type === 'page' ) {
28
+ $assets_cache->delete();
29
+ } elseif ( $type === 'all' ) {
30
+ $assets_cache->delete_all();
31
+ }
32
+ wp_send_json_success();
33
+ }
34
+
35
+ public static function enqueue_assets() {
36
+ if ( ! current_user_can( 'manage_options' ) ) {
37
+ return;
38
+ }
39
+
40
+ wp_enqueue_style(
41
+ 'happy-elementor-addons-admin',
42
+ HAPPY_ADDONS_ASSETS . 'admin/css/admin.min.css',
43
+ null,
44
+ HAPPY_ADDONS_VERSION
45
+ );
46
+
47
+ wp_enqueue_script(
48
+ 'happy-elementor-addons-admin',
49
+ HAPPY_ADDONS_ASSETS . 'admin/js/admin.min.js',
50
+ ['jquery'],
51
+ HAPPY_ADDONS_VERSION,
52
+ true
53
+ );
54
+
55
+ wp_localize_script(
56
+ 'happy-elementor-addons-admin',
57
+ 'HappyAdmin',
58
+ [
59
+ 'nonce' => wp_create_nonce( 'ha_clear_cache' ),
60
+ 'post_id' => get_queried_object_id(),
61
+ 'ajax_url' => admin_url( 'admin-ajax.php' ),
62
+ ]
63
+ );
64
+ }
65
+
66
+ public static function add_toolbar_items( \WP_Admin_Bar $admin_bar ) {
67
+ if ( ! current_user_can( 'manage_options' ) ) {
68
+ return;
69
  }
70
 
71
  $icon = '<i class="dashicons dashicons-update-alt"></i> ';
72
 
73
+ $admin_bar->add_menu( [
74
+ 'id' => 'happy-addons',
75
+ 'title' => sprintf( '<img src="%s">', ha_get_b64_icon() ),
76
+ 'href' => ha_get_dashboard_link(),
77
+ 'meta' => [
78
+ 'title' => __( 'HappyAddons', 'happy-elementor-addons' ),
79
+ ]
80
+ ] );
81
+
82
+ if ( is_singular() ) {
83
+ $admin_bar->add_menu( [
84
+ 'id' => 'ha-clear-page-cache',
85
+ 'parent' => 'happy-addons',
86
+ 'title' => $icon . __( 'Page: Renew On Demand Assets', 'happy-elementor-addons' ),
87
+ 'href' => '#',
88
+ 'meta' => [
89
+ 'class' => 'hajs-clear-cache ha-clear-page-cache',
90
+ ]
91
+ ] );
92
+ }
93
+
94
+ $admin_bar->add_menu( [
95
+ 'id' => 'ha-clear-all-cache',
96
+ 'parent' => 'happy-addons',
97
+ 'title' => $icon . __( 'Global: Renew On Demand Assets', 'happy-elementor-addons' ),
98
+ 'href' => '#',
99
+ 'meta' => [
100
+ 'class' => 'hajs-clear-cache ha-clear-all-cache',
101
+ ]
102
+ ] );
103
+ }
104
  }
105
+
106
+ Admin_Bar::init();
classes/assets-manager.php CHANGED
@@ -343,8 +343,7 @@ class Assets_Manager {
343
  'editorPanelHomeLinkURL' => ha_get_dashboard_link(),
344
  'editorPanelWidgetsLinkURL' => ha_get_dashboard_link('#widgets'),
345
  'i18n' => [
346
- 'editorPanelHomeLinkTitle' => esc_html__( 'HappyAddons - Home', 'happy-elementor-addons' ),
347
- 'editorPanelWidgetsLinkTitle' => esc_html__( 'HappyAddons - Widgets', 'happy-elementor-addons' ),
348
  'promotionDialogHeader' => esc_html__( '%s Widget', 'happy-elementor-addons' ),
349
  'promotionDialogMessage' => esc_html__( 'Use %s widget with other exclusive pro widgets and 100% unique features to extend your toolbox and build sites faster and better.', 'happy-elementor-addons' ),
350
 
@@ -371,36 +370,36 @@ class Assets_Manager {
371
  }
372
 
373
  public static function enqueue_preview_style() {
374
- if (ha_is_weforms_activated()) {
375
  wp_enqueue_style(
376
- 'happy-elementor-weform-preview',
377
  plugins_url('/weforms/assets/wpuf/css/frontend-forms.css', 'weforms'),
378
  null,
379
  HAPPY_ADDONS_VERSION
380
  );
381
  }
382
 
383
- if (ha_is_wpforms_activated() && defined('WPFORMS_PLUGIN_SLUG')) {
384
  wp_enqueue_style(
385
- 'happy-elementor-wpform-preview',
386
  plugins_url('/' . WPFORMS_PLUGIN_SLUG . '/assets/css/wpforms-full.css', WPFORMS_PLUGIN_SLUG),
387
  null,
388
  HAPPY_ADDONS_VERSION
389
  );
390
  }
391
 
392
- if (ha_is_calderaforms_activated()) {
393
  wp_enqueue_style(
394
- 'happy-elementor-caldera-preview',
395
  plugins_url('/caldera-forms/assets/css/caldera-forms-front.css', 'caldera-forms'),
396
  null,
397
  HAPPY_ADDONS_VERSION
398
  );
399
  }
400
 
401
- if (ha_is_gravityforms_activated()) {
402
  wp_enqueue_style(
403
- 'happy-elementor-gravity-preview',
404
  plugins_url('/gravityforms/css/formsmain.min.css', 'gravityforms'),
405
  null,
406
  HAPPY_ADDONS_VERSION
@@ -419,7 +418,7 @@ class Assets_Manager {
419
 
420
  if ( ha_is_fluent_form_activated() ) {
421
  wp_enqueue_style(
422
- 'happy-elementor-fluent-preview',
423
  plugins_url('/fluentform/public/css/fluent-forms-public.css', 'fluentform'),
424
  null,
425
  HAPPY_ADDONS_VERSION
@@ -427,3 +426,5 @@ class Assets_Manager {
427
  }
428
  }
429
  }
 
 
343
  'editorPanelHomeLinkURL' => ha_get_dashboard_link(),
344
  'editorPanelWidgetsLinkURL' => ha_get_dashboard_link('#widgets'),
345
  'i18n' => [
346
+ 'editorPanelHomeLinkTitle' => esc_html__( 'HappyAddons', 'happy-elementor-addons' ),
 
347
  'promotionDialogHeader' => esc_html__( '%s Widget', 'happy-elementor-addons' ),
348
  'promotionDialogMessage' => esc_html__( 'Use %s widget with other exclusive pro widgets and 100% unique features to extend your toolbox and build sites faster and better.', 'happy-elementor-addons' ),
349
 
370
  }
371
 
372
  public static function enqueue_preview_style() {
373
+ if ( ha_is_weforms_activated() ) {
374
  wp_enqueue_style(
375
+ 'happy-addons-weform',
376
  plugins_url('/weforms/assets/wpuf/css/frontend-forms.css', 'weforms'),
377
  null,
378
  HAPPY_ADDONS_VERSION
379
  );
380
  }
381
 
382
+ if ( ha_is_wpforms_activated() && defined( 'WPFORMS_PLUGIN_SLUG' ) ) {
383
  wp_enqueue_style(
384
+ 'happy-addons-wpform',
385
  plugins_url('/' . WPFORMS_PLUGIN_SLUG . '/assets/css/wpforms-full.css', WPFORMS_PLUGIN_SLUG),
386
  null,
387
  HAPPY_ADDONS_VERSION
388
  );
389
  }
390
 
391
+ if ( ha_is_calderaforms_activated() ) {
392
  wp_enqueue_style(
393
+ 'happy-addons-caldera-forms',
394
  plugins_url('/caldera-forms/assets/css/caldera-forms-front.css', 'caldera-forms'),
395
  null,
396
  HAPPY_ADDONS_VERSION
397
  );
398
  }
399
 
400
+ if ( ha_is_gravityforms_activated() ) {
401
  wp_enqueue_style(
402
+ 'happy-addons-gravity-forms',
403
  plugins_url('/gravityforms/css/formsmain.min.css', 'gravityforms'),
404
  null,
405
  HAPPY_ADDONS_VERSION
418
 
419
  if ( ha_is_fluent_form_activated() ) {
420
  wp_enqueue_style(
421
+ 'happy-addons-fluent-forms',
422
  plugins_url('/fluentform/public/css/fluent-forms-public.css', 'fluentform'),
423
  null,
424
  HAPPY_ADDONS_VERSION
426
  }
427
  }
428
  }
429
+
430
+ Assets_Manager::init();
classes/attention-seeker.php CHANGED
@@ -101,3 +101,5 @@ class Attention_Seeker {
101
  return [];
102
  }
103
  }
 
 
101
  return [];
102
  }
103
  }
104
+
105
+ Attention_Seeker::init();
classes/cache-manager.php CHANGED
@@ -50,7 +50,7 @@ class Cache_Manager {
50
  }
51
 
52
  public static function should_enqueue( $post_id ) {
53
- if ( ! ha_is_happy_mode_enabled() ||
54
  ! self::is_built_with_elementor( $post_id ) ||
55
  ! self::is_published( $post_id ) ||
56
  self::is_editing_mode() ) {
@@ -123,3 +123,5 @@ class Cache_Manager {
123
  do_action( 'happyaddons_enqueue_assets', $is_cache = false, 0 );
124
  }
125
  }
 
 
50
  }
51
 
52
  public static function should_enqueue( $post_id ) {
53
+ if ( ! ha_is_on_demand_cache_enabled() ||
54
  ! self::is_built_with_elementor( $post_id ) ||
55
  ! self::is_published( $post_id ) ||
56
  self::is_editing_mode() ) {
123
  do_action( 'happyaddons_enqueue_assets', $is_cache = false, 0 );
124
  }
125
  }
126
+
127
+ Cache_Manager::init();
classes/clone-handler.php CHANGED
@@ -5,199 +5,199 @@ use Elementor\Core\Files\CSS\Post as Post_CSS;
5
 
6
  class Clone_Handler {
7
 
8
- /**
9
- * Request and nonce action name
10
- */
11
- const ACTION = 'ha_duplicate_thing';
12
-
13
- /**
14
- * Register hooks and initialize
15
- */
16
- public static function init() {
17
- add_action( 'admin_action_' . self::ACTION, [ __CLASS__, 'duplicate_thing' ] );
18
- add_filter( 'post_row_actions', [ __CLASS__, 'add_row_actions' ], 10, 2 );
19
- add_filter( 'page_row_actions', [ __CLASS__, 'add_row_actions' ], 10, 2 );
20
- }
21
-
22
- /**
23
- * Check if current user can clone
24
- *
25
- * @return bool
26
- */
27
- public static function can_clone() {
28
- return current_user_can( 'edit_posts' );
29
- }
30
-
31
- /**
32
- * Add clone link in row actions
33
- *
34
- * @param array $actions
35
- * @param \WP_Post $post
36
- * @return array
37
- */
38
- public static function add_row_actions( $actions, $post ) {
39
- if ( self::can_clone() && post_type_supports( $post->post_type, 'elementor' ) ) {
40
- $actions[ self::ACTION ] = sprintf(
41
- '<a href="%1$s" title="%2$s"><span class="screen-reader-text">%2$s</span>%3$s</a>',
42
- esc_url( self::get_url( $post->ID, 'list' ) ),
43
- sprintf( esc_attr__( 'Clone - %s', 'happy-elementor-addons' ), esc_attr( $post->post_title ) ),
44
- esc_html__( 'Happy Clone', 'happy-elementor-addons' )
45
- );
46
- }
47
-
48
- return $actions;
49
- }
50
-
51
- /**
52
- * Duplicate requested post
53
- *
54
- * @return void
55
- */
56
- public static function duplicate_thing() {
57
- if ( ! self::can_clone() ) {
58
- return;
59
- }
60
-
61
- $_uri = $_SERVER['REQUEST_URI'];
62
-
63
- // Resolve finder clone request issue
64
- if ( stripos( $_uri, '&amp;' ) !== false ) {
65
- $_uri = html_entity_decode( $_uri );
66
- $_uri = parse_url( $_uri, PHP_URL_QUERY );
67
- $valid_args = ['_wpnonce', 'post_id', 'ref'];
68
- parse_str( $_uri, $args );
69
-
70
- if ( ! empty( $args ) && is_array( $args ) ) {
71
- foreach ( $args as $key => $val ) {
72
- if ( in_array( $key, $valid_args, true ) ) {
73
- $_GET[ $key ] = $val;
74
- }
75
- }
76
- }
77
- }
78
-
79
- $nonce = isset( $_GET['_wpnonce'] ) ? $_GET['_wpnonce'] : '';
80
- $post_id = isset( $_GET['post_id'] ) ? absint( $_GET['post_id'] ) : 0;
81
- $ref = isset( $_GET['ref'] ) ? $_GET['ref'] : '';
82
-
83
- if ( ! wp_verify_nonce( $nonce, self::ACTION ) ) {
84
- return;
85
- }
86
-
87
- if ( is_null( ( $post = get_post( $post_id ) ) ) ) {
88
- return;
89
- }
90
-
91
- $post = sanitize_post( $post, 'db' );
92
- $duplicated_post_id = self::duplicate_post( $post );
93
- $redirect = add_query_arg( [ 'post_type' => $post->post_type ], admin_url( 'edit.php' ) );
94
-
95
- if ( ! is_wp_error( $duplicated_post_id ) ) {
96
- self::duplicate_taxonomies( $post, $duplicated_post_id );
97
  self::duplicate_meta_entries( $post, $duplicated_post_id );
98
 
99
  $css = Post_CSS::create( $duplicated_post_id );
100
  $css->update();
101
 
102
- if ( $ref === 'editor' ) {
103
- $document = ha_elementor()->documents->get( $duplicated_post_id );
104
- $redirect = $document->get_edit_url();
105
- }
106
- }
107
-
108
- wp_safe_redirect( $redirect );
109
- die();
110
- }
111
-
112
- /**
113
- * Get clone url with required query params
114
- *
115
- * @param $post_id
116
- * @param string $ref
117
- * @return string
118
- */
119
- public static function get_url( $post_id, $ref = '' ) {
120
- return wp_nonce_url(
121
- add_query_arg(
122
- [
123
- 'action' => self::ACTION,
124
- 'post_id' => $post_id,
125
- 'ref' => $ref,
126
- ],
127
- admin_url( 'admin.php' )
128
- ),
129
- self::ACTION
130
- );
131
- }
132
-
133
- /**
134
- * Clone post
135
- *
136
- * @param $old_post
137
- * @return int $dulicated post id
138
- */
139
- protected static function duplicate_post( $post ) {
140
- $current_user = wp_get_current_user();
141
-
142
- $duplicated_post_args = [
143
- 'post_status' => 'draft',
144
- 'to_ping' => $post->to_ping,
145
- 'post_type' => $post->post_type,
146
- 'menu_order' => $post->menu_order,
147
- 'post_author' => $current_user->ID,
148
- 'post_parent' => $post->post_parent,
149
- 'ping_status' => $post->ping_status,
150
- 'post_excerpt' => $post->post_excerpt,
151
- 'post_content' => $post->post_content,
152
- 'post_password' => $post->post_password,
153
- 'comment_status' => $post->comment_status,
154
- 'post_title' => sprintf( __( '%s - [Cloned #%d]', 'happy-elementor-addons' ), $post->post_title,
155
- $post->ID ),
156
- ];
157
-
158
- return wp_insert_post( $duplicated_post_args );
159
- }
160
-
161
- /**
162
- * Copy post taxonomies to cloned post
163
- *
164
- * @param $post
165
- * @param $duplicated_post_id
166
- */
167
- protected static function duplicate_taxonomies( $post, $duplicated_post_id ) {
168
- $taxonomies = get_object_taxonomies( $post->post_type );
169
- if ( ! empty( $taxonomies ) && is_array( $taxonomies ) ) {
170
- foreach ( $taxonomies as $taxonomy ) {
171
- $terms = wp_get_object_terms( $post->ID, $taxonomy, [ 'fields' => 'slugs' ] );
172
- wp_set_object_terms( $duplicated_post_id, $terms, $taxonomy, false );
173
- }
174
- }
175
- }
176
-
177
- /**
178
- * Copy post meta entries to cloned post
179
- *
180
- * @param $post
181
- * @param $duplicated_post_id
182
- */
183
- protected static function duplicate_meta_entries( $post, $duplicated_post_id ) {
184
- global $wpdb;
185
-
186
- $entries = $wpdb->get_results(
187
- $wpdb->prepare( "SELECT meta_key, meta_value FROM {$wpdb->postmeta} WHERE post_id = %d", $post->ID )
188
- );
189
-
190
- if ( is_array( $entries ) ) {
191
- $query = "INSERT INTO {$wpdb->postmeta} ( post_id, meta_key, meta_value ) VALUES ";
192
- $_records = [];
193
- foreach ( $entries as $entry ) {
194
- $_value = wp_slash( $entry->meta_value );
195
- $_records[] = "( $duplicated_post_id, '{$entry->meta_key}', '{$_value}' )";
196
- }
197
  $query .= implode( ', ', $_records ) . ';';
198
- $wpdb->query( $query );
199
- }
200
- }
201
 
202
  }
203
 
5
 
6
  class Clone_Handler {
7
 
8
+ /**
9
+ * Request and nonce action name
10
+ */
11
+ const ACTION = 'ha_duplicate_thing';
12
+
13
+ /**
14
+ * Register hooks and initialize
15
+ */
16
+ public static function init() {
17
+ add_action( 'admin_action_' . self::ACTION, [ __CLASS__, 'duplicate_thing' ] );
18
+ add_filter( 'post_row_actions', [ __CLASS__, 'add_row_actions' ], 10, 2 );
19
+ add_filter( 'page_row_actions', [ __CLASS__, 'add_row_actions' ], 10, 2 );
20
+ }
21
+
22
+ /**
23
+ * Check if current user can clone
24
+ *
25
+ * @return bool
26
+ */
27
+ public static function can_clone() {
28
+ return current_user_can( 'edit_posts' );
29
+ }
30
+
31
+ /**
32
+ * Add clone link in row actions
33
+ *
34
+ * @param array $actions
35
+ * @param \WP_Post $post
36
+ * @return array
37
+ */
38
+ public static function add_row_actions( $actions, $post ) {
39
+ if ( self::can_clone() && post_type_supports( $post->post_type, 'elementor' ) ) {
40
+ $actions[ self::ACTION ] = sprintf(
41
+ '<a href="%1$s" title="%2$s"><span class="screen-reader-text">%2$s</span>%3$s</a>',
42
+ esc_url( self::get_url( $post->ID, 'list' ) ),
43
+ sprintf( esc_attr__( 'Clone - %s', 'happy-elementor-addons' ), esc_attr( $post->post_title ) ),
44
+ esc_html__( 'Happy Clone', 'happy-elementor-addons' )
45
+ );
46
+ }
47
+
48
+ return $actions;
49
+ }
50
+
51
+ /**
52
+ * Duplicate requested post
53
+ *
54
+ * @return void
55
+ */
56
+ public static function duplicate_thing() {
57
+ if ( ! self::can_clone() ) {
58
+ return;
59
+ }
60
+
61
+ $_uri = $_SERVER['REQUEST_URI'];
62
+
63
+ // Resolve finder clone request issue
64
+ if ( stripos( $_uri, '&amp;' ) !== false ) {
65
+ $_uri = html_entity_decode( $_uri );
66
+ $_uri = parse_url( $_uri, PHP_URL_QUERY );
67
+ $valid_args = ['_wpnonce', 'post_id', 'ref'];
68
+ parse_str( $_uri, $args );
69
+
70
+ if ( ! empty( $args ) && is_array( $args ) ) {
71
+ foreach ( $args as $key => $val ) {
72
+ if ( in_array( $key, $valid_args, true ) ) {
73
+ $_GET[ $key ] = $val;
74
+ }
75
+ }
76
+ }
77
+ }
78
+
79
+ $nonce = isset( $_GET['_wpnonce'] ) ? $_GET['_wpnonce'] : '';
80
+ $post_id = isset( $_GET['post_id'] ) ? absint( $_GET['post_id'] ) : 0;
81
+ $ref = isset( $_GET['ref'] ) ? $_GET['ref'] : '';
82
+
83
+ if ( ! wp_verify_nonce( $nonce, self::ACTION ) ) {
84
+ return;
85
+ }
86
+
87
+ if ( is_null( ( $post = get_post( $post_id ) ) ) ) {
88
+ return;
89
+ }
90
+
91
+ $post = sanitize_post( $post, 'db' );
92
+ $duplicated_post_id = self::duplicate_post( $post );
93
+ $redirect = add_query_arg( [ 'post_type' => $post->post_type ], admin_url( 'edit.php' ) );
94
+
95
+ if ( ! is_wp_error( $duplicated_post_id ) ) {
96
+ self::duplicate_taxonomies( $post, $duplicated_post_id );
97
  self::duplicate_meta_entries( $post, $duplicated_post_id );
98
 
99
  $css = Post_CSS::create( $duplicated_post_id );
100
  $css->update();
101
 
102
+ if ( $ref === 'editor' ) {
103
+ $document = ha_elementor()->documents->get( $duplicated_post_id );
104
+ $redirect = $document->get_edit_url();
105
+ }
106
+ }
107
+
108
+ wp_safe_redirect( $redirect );
109
+ die();
110
+ }
111
+
112
+ /**
113
+ * Get clone url with required query params
114
+ *
115
+ * @param $post_id
116
+ * @param string $ref
117
+ * @return string
118
+ */
119
+ public static function get_url( $post_id, $ref = '' ) {
120
+ return wp_nonce_url(
121
+ add_query_arg(
122
+ [
123
+ 'action' => self::ACTION,
124
+ 'post_id' => $post_id,
125
+ 'ref' => $ref,
126
+ ],
127
+ admin_url( 'admin.php' )
128
+ ),
129
+ self::ACTION
130
+ );
131
+ }
132
+
133
+ /**
134
+ * Clone post
135
+ *
136
+ * @param $old_post
137
+ * @return int $dulicated post id
138
+ */
139
+ protected static function duplicate_post( $post ) {
140
+ $current_user = wp_get_current_user();
141
+
142
+ $duplicated_post_args = [
143
+ 'post_status' => 'draft',
144
+ 'to_ping' => $post->to_ping,
145
+ 'post_type' => $post->post_type,
146
+ 'menu_order' => $post->menu_order,
147
+ 'post_author' => $current_user->ID,
148
+ 'post_parent' => $post->post_parent,
149
+ 'ping_status' => $post->ping_status,
150
+ 'post_excerpt' => $post->post_excerpt,
151
+ 'post_content' => $post->post_content,
152
+ 'post_password' => $post->post_password,
153
+ 'comment_status' => $post->comment_status,
154
+ 'post_title' => sprintf( __( '%s - [Cloned #%d]', 'happy-elementor-addons' ), $post->post_title,
155
+ $post->ID ),
156
+ ];
157
+
158
+ return wp_insert_post( $duplicated_post_args );
159
+ }
160
+
161
+ /**
162
+ * Copy post taxonomies to cloned post
163
+ *
164
+ * @param $post
165
+ * @param $duplicated_post_id
166
+ */
167
+ protected static function duplicate_taxonomies( $post, $duplicated_post_id ) {
168
+ $taxonomies = get_object_taxonomies( $post->post_type );
169
+ if ( ! empty( $taxonomies ) && is_array( $taxonomies ) ) {
170
+ foreach ( $taxonomies as $taxonomy ) {
171
+ $terms = wp_get_object_terms( $post->ID, $taxonomy, [ 'fields' => 'slugs' ] );
172
+ wp_set_object_terms( $duplicated_post_id, $terms, $taxonomy, false );
173
+ }
174
+ }
175
+ }
176
+
177
+ /**
178
+ * Copy post meta entries to cloned post
179
+ *
180
+ * @param $post
181
+ * @param $duplicated_post_id
182
+ */
183
+ protected static function duplicate_meta_entries( $post, $duplicated_post_id ) {
184
+ global $wpdb;
185
+
186
+ $entries = $wpdb->get_results(
187
+ $wpdb->prepare( "SELECT meta_key, meta_value FROM {$wpdb->postmeta} WHERE post_id = %d", $post->ID )
188
+ );
189
+
190
+ if ( is_array( $entries ) ) {
191
+ $query = "INSERT INTO {$wpdb->postmeta} ( post_id, meta_key, meta_value ) VALUES ";
192
+ $_records = [];
193
+ foreach ( $entries as $entry ) {
194
+ $_value = wp_slash( $entry->meta_value );
195
+ $_records[] = "( $duplicated_post_id, '{$entry->meta_key}', '{$_value}' )";
196
+ }
197
  $query .= implode( ', ', $_records ) . ';';
198
+ $wpdb->query( $query );
199
+ }
200
+ }
201
 
202
  }
203
 
classes/dashboard.php CHANGED
@@ -266,3 +266,5 @@ class Dashboard {
266
  self::load_template( 'pro' );
267
  }
268
  }
 
 
266
  self::load_template( 'pro' );
267
  }
268
  }
269
+
270
+ Dashboard::init();
classes/extensions-manager.php CHANGED
@@ -1,12 +1,7 @@
1
  <?php
2
  namespace Happy_Addons\Elementor;
3
 
4
- use Happy_Addons\Elementor\Extension\Happy_Effects;
5
- use Happy_Addons\Elementor\Extension\Column_Extended;
6
- use Happy_Addons\Elementor\Extension\Happy_Grid;
7
- use Happy_Addons\Elementor\Extension\Widgets_Extended;
8
- use Happy_Addons\Elementor\Extension\Background_Overlay;
9
- use Happy_Addons\Elementor\Extension\Wrapper_Link;
10
 
11
  defined( 'ABSPATH' ) || die();
12
 
@@ -16,22 +11,45 @@ class Extensions_Manager {
16
  * Initialize
17
  */
18
  public static function init() {
19
- self::include_extensions();
20
-
21
- Happy_Effects::init();
22
- Happy_Grid::init();
23
- Column_Extended::init();
24
- Background_Overlay::init();
25
- Widgets_Extended::init();
26
- Wrapper_Link::init();
27
- }
28
-
29
- public static function include_extensions() {
30
- include_once HAPPY_ADDONS_DIR_PATH . 'extensions/happy-effects.php';
31
- include_once HAPPY_ADDONS_DIR_PATH . 'extensions/happy-grid.php';
32
- include_once HAPPY_ADDONS_DIR_PATH . 'extensions/column-extended.php';
33
- include_once HAPPY_ADDONS_DIR_PATH . 'extensions/widgets-extended.php';
34
- include_once HAPPY_ADDONS_DIR_PATH . 'extensions/background-overlay.php';
35
- include_once HAPPY_ADDONS_DIR_PATH . 'extensions/wrapper-link.php';
36
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  }
 
 
1
  <?php
2
  namespace Happy_Addons\Elementor;
3
 
4
+ use Elementor\Core\Common\Modules\Finder\Categories_Manager;
 
 
 
 
 
5
 
6
  defined( 'ABSPATH' ) || die();
7
 
11
  * Initialize
12
  */
13
  public static function init() {
14
+ include_once HAPPY_ADDONS_DIR_PATH . 'extensions/column-extended.php';
15
+ include_once HAPPY_ADDONS_DIR_PATH . 'extensions/widgets-extended.php';
16
+
17
+ if ( ha_is_background_overlay_enabled() ) {
18
+ include_once HAPPY_ADDONS_DIR_PATH . 'extensions/background-overlay.php';
19
+ }
20
+
21
+ if ( ha_is_grid_layer_enabled() ) {
22
+ include_once HAPPY_ADDONS_DIR_PATH . 'extensions/happy-grid.php';
23
+ }
24
+
25
+ if ( ha_is_wrapper_link_enabled() ) {
26
+ include_once HAPPY_ADDONS_DIR_PATH . 'extensions/wrapper-link.php';
27
+ }
28
+
29
+ if ( ha_is_floating_effects_enabled() || ha_is_css_transform_enabled() ) {
30
+ include_once HAPPY_ADDONS_DIR_PATH . 'extensions/happy-effects.php';
31
+ }
32
+
33
+ if ( is_user_logged_in() && ha_is_adminbar_menu_enabled() ) {
34
+ include_once HAPPY_ADDONS_DIR_PATH . 'classes/admin-bar.php';
35
+ }
36
+
37
+ if ( is_user_logged_in() && ha_is_happy_clone_enabled() ) {
38
+ add_action( 'elementor/finder/categories/init', [ __CLASS__, 'register_finder' ] );
39
+
40
+ include_once HAPPY_ADDONS_DIR_PATH . 'classes/clone-handler.php';
41
+ }
42
+ }
43
+
44
+ /**
45
+ * Register finder category and category items
46
+ *
47
+ * @param $categories_manager
48
+ */
49
+ public static function register_finder( Categories_Manager $categories_manager ) {
50
+ include_once HAPPY_ADDONS_DIR_PATH . 'classes/finder-edit.php';
51
+ $categories_manager->add_category( Finder_Edit::SLUG, new Finder_Edit() );
52
+ }
53
  }
54
+
55
+ Extensions_Manager::init();
classes/finder.php DELETED
@@ -1,71 +0,0 @@
1
- <?php
2
- /**
3
- * Finder class
4
- *
5
- * @package Happy_Addons
6
- */
7
- namespace Happy_Addons\Elementor;
8
-
9
- use Elementor\Core\Common\Modules\Finder\Base_Category as Finder_Category;
10
-
11
- defined( 'ABSPATH' ) || die();
12
-
13
- class Finder extends Finder_Category {
14
-
15
- const SLUG = 'happy-addons';
16
-
17
- /**
18
- * Get title.
19
- *
20
- * @access public
21
- *
22
- * @return string
23
- */
24
- public function get_title() {
25
- return __( 'Happy Addons', 'happy-elementor-addons' );
26
- }
27
-
28
- /**
29
- * Get category items.
30
- *
31
- * @access public
32
- *
33
- * @param array $options
34
- *
35
- * @return array
36
- */
37
- public function get_category_items( array $options = [] ) {
38
- $items = [
39
- 'home' => [
40
- 'title' => __( 'HappyAddons', 'happy-elementor-addons' ),
41
- 'description' => __( 'Control Panel Home', 'happy-elementor-addons' ),
42
- 'url' => ha_get_dashboard_link(),
43
- 'icon' => ' hm hm-happyaddons',
44
- 'keywords' => [ 'happy', 'setting', 'happyaddons', 'dashboard', 'widget', 'control', 'panel', 'essential' ],
45
- 'actions' => [
46
- [
47
- 'name' => 'view',
48
- 'url' => ha_get_dashboard_link(),
49
- 'icon' => 'eye'
50
- ]
51
- ]
52
- ],
53
- 'widgets' => [
54
- 'title' => __( 'HappyAddons', 'happy-elementor-addons' ),
55
- 'description' => __( 'Widgets Control Panel', 'happy-elementor-addons' ),
56
- 'icon' => ' hm hm-cross-game',
57
- 'url' => ha_get_dashboard_link( '#widgets' ),
58
- 'keywords' => [ 'happy', 'setting', 'happyaddons', 'dashboard', 'widget', 'control', 'panel', 'essential' ],
59
- 'actions' => [
60
- [
61
- 'name' => 'view',
62
- 'url' => ha_get_dashboard_link( '#widgets' ),
63
- 'icon' => 'eye'
64
- ]
65
- ]
66
- ],
67
- ];
68
-
69
- return $items;
70
- }
71
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
classes/icons-manager.php CHANGED
@@ -499,3 +499,5 @@ class Icons_Manager {
499
  ];
500
  }
501
  }
 
 
499
  ];
500
  }
501
  }
502
+
503
+ Icons_Manager::init();
classes/library-manager.php CHANGED
@@ -118,3 +118,5 @@ class Library_Manager {
118
  ];
119
  }
120
  }
 
 
118
  ];
119
  }
120
  }
121
+
122
+ Library_Manager::init();
classes/select2-handler.php CHANGED
@@ -143,3 +143,5 @@ class Select2_Handler {
143
  }
144
 
145
  }
 
 
143
  }
144
 
145
  }
146
+
147
+ Select2_Handler::init();
classes/updater.php CHANGED
@@ -53,3 +53,5 @@ class Updater {
53
  return version_compare( self::get_new_version(), self::get_old_version(), '>' );
54
  }
55
  }
 
 
53
  return version_compare( self::get_new_version(), self::get_old_version(), '>' );
54
  }
55
  }
56
+
57
+ Updater::init();
classes/widgets-manager.php CHANGED
@@ -7,488 +7,489 @@ defined( 'ABSPATH' ) || die();
7
 
8
  class Widgets_Manager {
9
 
10
- const WIDGETS_DB_KEY = 'happyaddons_inactive_widgets';
11
 
12
- /**
13
- * Initialize
14
- */
15
- public static function init() {
16
- add_action( 'elementor/widgets/widgets_registered', [ __CLASS__, 'register' ] );
17
- add_action( 'elementor/frontend/before_render', [ __CLASS__, 'add_global_widget_render_attributes' ] );
18
- }
19
 
20
- public static function add_global_widget_render_attributes( Element_Base $widget ) {
21
- if ( $widget->get_data( 'widgetType' ) === 'global' && method_exists( $widget, 'get_original_element_instance' ) ) {
22
- $original_instance = $widget->get_original_element_instance();
23
- if ( method_exists( $original_instance, 'get_html_wrapper_class' ) && strpos( $original_instance->get_data( 'widgetType' ), 'ha-' ) !== false ) {
24
- $widget->add_render_attribute( '_wrapper', [
25
- 'class' => $original_instance->get_html_wrapper_class(),
26
- ] );
27
- }
28
- }
29
- }
30
 
31
- public static function get_inactive_widgets() {
32
- return get_option( self::WIDGETS_DB_KEY, [] );
33
- }
34
 
35
- public static function save_inactive_widgets( $widgets = [] ) {
36
- update_option( self::WIDGETS_DB_KEY, $widgets );
37
- }
38
 
39
- public static function get_widgets_map() {
40
- $widgets_map = [
41
- self::get_base_widget_key() => [
42
- 'css' => ['common', 'btn'],
43
- 'js' => [],
44
- 'vendor' => [
45
- 'js' => ['anime'],
46
- 'css' => ['happy-icons', 'font-awesome']
47
- ]
48
- ],
49
- ];
50
 
51
- $local_widgets_map = self::get_local_widgets_map();
52
- $widgets_map = array_merge( $widgets_map, $local_widgets_map );
53
- return apply_filters( 'happyaddons_get_widgets_map', $widgets_map );
54
- }
 
55
 
56
- /**
57
- * Get the pro widgets map for dashboard only
58
- *
59
- * @return array
60
- */
61
- public static function get_pro_widget_map() {
62
- return [
63
- 'advanced-heading' => [
64
- 'title' => __( 'Advanced Heading', 'happy-elementor-addons' ),
65
- 'icon' => 'hm hm-advanced-heading',
66
- 'is_pro' => true,
67
- ],
68
- 'list-group' => [
69
- 'title' => __( 'List Group', 'happy-elementor-addons' ),
70
- 'icon' => 'hm hm-list-group',
71
- 'is_pro' => true,
72
- ],
73
- 'hover-box' => [
74
- 'title' => __( 'Hover Box', 'happy-elementor-addons' ),
75
- 'icon' => 'hm hm-finger-point',
76
- 'is_pro' => true,
77
- ],
78
- 'countdown' => [
79
- 'title' => __( 'Countdown', 'happy-elementor-addons' ),
80
- 'icon' => 'hm hm-refresh-time',
81
- 'is_pro' => true,
82
- ],
83
- 'team-carousel' => [
84
- 'title' => __( 'Team Carousel', 'happy-elementor-addons' ),
85
- 'icon' => 'hm hm-team-carousel',
86
- 'is_pro' => true,
87
- ],
88
- 'logo-carousel' => [
89
- 'title' => __( 'Logo Carousel', 'happy-elementor-addons' ),
90
- 'icon' => 'hm hm-logo-carousel',
91
- 'is_pro' => true,
92
- ],
93
- 'source-code' => [
94
- 'title' => __( 'Source Code', 'happy-elementor-addons' ),
95
- 'icon' => 'hm hm-code-browser',
96
- 'is_pro' => true,
97
- ],
98
- 'feature-list' => [
99
- 'title' => __( 'Feature List', 'happy-elementor-addons' ),
100
- 'icon' => 'hm hm-list-2',
101
- 'is_pro' => true,
102
- ],
103
- 'testimonial-carousel' => [
104
- 'title' => __( 'Testimonial Carousel', 'happy-elementor-addons' ),
105
- 'icon' => 'hm hm-testimonial-carousel',
106
- 'is_pro' => true,
107
- ],
108
- 'advanced-tabs' => [
109
- 'title' => __( 'Advanced Tabs', 'happy-elementor-addons' ),
110
- 'icon' => 'hm hm-tab',
111
- 'is_pro' => true,
112
- ],
113
- 'animated-text' => [
114
- 'title' => __( 'Animated Text', 'happy-elementor-addons' ),
115
- 'icon' => 'hm hm-text-animation',
116
- 'is_pro' => true,
117
- ],
118
- 'timeline' => [
119
- 'title' => __( 'Timeline', 'happy-elementor-addons' ),
120
- 'icon' => 'hm hm-timeline',
121
- 'is_pro' => true,
122
- ],
123
- 'instagram-feed' => [
124
- 'title' => __( 'Instagram Feed', 'happy-elementor-addons' ),
125
- 'icon' => 'hm hm-instagram',
126
- 'is_pro' => true,
127
- ],
128
- 'scrolling-image' => [
129
- 'title' => __( 'Scrolling Image', 'happy-elementor-addons' ),
130
- 'icon' => 'hm hm-scrolling-image',
131
- 'is_pro' => true,
132
- ],
133
- 'toggle' => [
134
- 'title' => __( 'Advanced Toggle', 'happy-elementor-addons' ),
135
- 'icon' => 'hm hm-accordion-vertical',
136
- 'is_pro' => true,
137
- ],
138
- 'accordion' => [
139
- 'title' => __( 'Advanced Accordion', 'happy-elementor-addons' ),
140
- 'icon' => 'hm hm-accordion-vertical',
141
- 'is_pro' => true,
142
- ],
143
- 'advanced-pricing-table' => [
144
- 'title' => __( 'Advanced Pricing Table', 'happy-elementor-addons'),
145
- 'icon' => 'hm hm-file-cabinet',
146
- 'is_pro' => true,
147
- ],
148
- 'advanced-flip-box' => [
149
- 'title' => __( 'Advanced Flip Box', 'happy-elementor-addons' ),
150
- 'icon' => 'hm hm-flip-card1',
151
- 'is_pro' => true,
152
- ],
153
- 'business-hour' => [
154
- 'title' => __( 'Business Hour', 'happy-elementor-addons' ),
155
- 'icon' => 'hm hm-hand-watch',
156
- 'is_pro' => true,
157
- ],
158
  'promo-box' => [
159
  'title' => __( 'Promo Box', 'happy-elementor-addons' ),
160
  'icon' => 'hm hm-promo',
161
  'is_pro' => true,
162
  ],
163
- ];
164
- }
165
 
166
- /**
167
- * Get the free widgets map
168
- *
169
- * @return array
170
- */
171
- public static function get_local_widgets_map() {
172
- // All the widgets are listed below with respective map
173
 
174
- return [
175
- 'infobox' => [
176
- 'demo' => 'https://happyaddons.com/go/demo-info-box',
177
- 'title' => __( 'Info Box', 'happy-elementor-addons' ),
178
- 'icon' => 'hm hm-blog-content',
179
- 'css' => ['infobox'],
180
- 'js' => [],
181
- 'vendor' => [
182
- 'css' => [],
183
- 'js' => [],
184
- ],
185
- ],
186
- 'card' => [
187
- 'demo' => 'https://happyaddons.com/go/demo-card',
188
- 'title' => __( 'Card', 'happy-elementor-addons' ),
189
- 'icon' => 'hm hm-card',
190
- 'css' => ['card', 'badge'],
191
- 'js' => [],
192
- 'vendor' => [
193
- 'css' => [],
194
- 'js' => [],
195
- ],
196
- ],
197
- 'cf7' => [
198
- 'demo' => 'https://happyaddons.com/go/demo-contact-form7',
199
- 'title' => __( 'Contact Form 7', 'happy-elementor-addons' ),
200
- 'icon' => 'hm hm-form',
201
- 'css' => [],
202
- 'js' => [],
203
- 'vendor' => [
204
- 'css' => [],
205
- 'js' => [],
206
- ],
207
- ],
208
- 'icon-box' => [
209
- 'demo' => 'https://happyaddons.com/go/demo-icon-box',
210
- 'title' => __( 'Icon Box', 'happy-elementor-addons' ),
211
- 'icon' => 'hm hm-icon-box',
212
- 'css' => ['icon-box', 'badge'],
213
- 'js' => [],
214
- 'vendor' => [
215
- 'css' => [],
216
- 'js' => [],
217
- ],
218
- ],
219
- 'member' => [
220
- 'demo' => 'https://happyaddons.com/go/demo-team-member',
221
- 'title' => __( 'Team Member', 'happy-elementor-addons' ),
222
- 'icon' => 'hm hm-team-member',
223
- 'css' => ['member'],
224
- 'js' => [],
225
- 'vendor' => [
226
- 'css' => [],
227
- 'js' => [],
228
- ],
229
- ],
230
- 'review' => [
231
- 'demo' => 'https://happyaddons.com/go/demo-review',
232
- 'title' => __( 'Review', 'happy-elementor-addons' ),
233
- 'icon' => 'hm hm-review',
234
- 'css' => ['review'],
235
- 'js' => [],
236
- 'vendor' => [
237
- 'css' => [],
238
- 'js' => [],
239
- ],
240
- ],
241
- 'image-compare' => [
242
- 'demo' => 'https://happyaddons.com/go/demo-image-compare',
243
- 'title' => __( 'Image Compare', 'happy-elementor-addons' ),
244
- 'icon' => 'hm hm-image-compare',
245
- 'css' => ['image-comparison'],
246
- 'js' => [],
247
- 'vendor' => [
248
- 'css' => ['twentytwenty'],
249
- 'js' => ['jquery-event-move','jquery-twentytwenty'],
250
- ],
251
- ],
252
- 'justified-gallery' => [
253
- 'demo' => 'https://happyaddons.com/go/demo-justified-grid',
254
- 'title' => __( 'Justified Grid', 'happy-elementor-addons' ),
255
- 'icon' => 'hm hm-brick-wall',
256
- 'css' => ['justified-gallery', 'gallery-filter'],
257
- 'js' => [],
258
- 'vendor' => [
259
- 'css' => ['justifiedGallery', 'magnific-popup'],
260
- 'js' => ['jquery-justifiedGallery', 'jquery-magnific-popup'],
261
- ],
262
- ],
263
- 'image-grid' => [
264
- 'demo' => 'https://happyaddons.com/go/demo-image-grid',
265
- 'title' => __( 'Image Grid', 'happy-elementor-addons' ),
266
- 'icon' => 'hm hm-grid-even',
267
- 'css' => ['image-grid', 'gallery-filter'],
268
- 'js' => [],
269
- 'vendor' => [
270
- 'css' => ['magnific-popup'],
271
- 'js' => ['jquery-isotope', 'jquery-magnific-popup'],
272
- ],
273
- ],
274
- 'slider' => [
275
- 'demo' => 'https://happyaddons.com/go/demo-slider',
276
- 'title' => __( 'Slider', 'happy-elementor-addons' ),
277
- 'icon' => 'hm hm-image-slider',
278
- 'css' => ['slider-carousel'],
279
- 'js' => [],
280
- 'vendor' => [
281
- 'css' => ['slick', 'slick-theme'],
282
- 'js' => ['jquery-slick'],
283
- ],
284
- ],
285
- 'carousel' => [
286
- 'demo' => 'https://happyaddons.com/go/demo-image-carousel',
287
- 'title' => __( 'Carousel', 'happy-elementor-addons' ),
288
- 'icon' => 'hm hm-carousal',
289
- 'class' => Carousel::class,
290
- 'css' => ['slider-carousel'],
291
- 'js' => [],
292
- 'vendor' => [
293
- 'css' => ['slick', 'slick-theme'],
294
- 'js' => ['jquery-slick'],
295
- ],
296
- ],
297
- 'skills' => [
298
- 'demo' => 'https://happyaddons.com/go/demo-skill-bar',
299
- 'title' => __( 'Skill Bars', 'happy-elementor-addons' ),
300
- 'icon' => 'hm hm-progress-bar',
301
- 'css' => ['skills'],
302
- 'js' => [],
303
- 'vendor' => [
304
- 'css' => [],
305
- 'js' => ['elementor-waypoints', 'jquery-numerator'],
306
- ],
307
- ],
308
- 'gradient-heading' => [
309
- 'demo' => 'https://happyaddons.com/go/demo-gradient-heading',
310
- 'title' => __( 'Gradient Heading', 'happy-elementor-addons' ),
311
- 'icon' => 'hm hm-drag',
312
- 'css' => ['gradient-heading'],
313
- 'js' => [],
314
- 'vendor' => [
315
- 'css' => [],
316
- 'js' => [],
317
- ],
318
- ],
319
- 'wpform' => [
320
- 'demo' => 'https://happyaddons.com/go/demo-wpforms',
321
- 'title' => __( 'WPForms', 'happy-elementor-addons' ),
322
- 'icon' => 'hm hm-form',
323
- 'css' => [],
324
- 'js' => [],
325
- 'vendor' => [
326
- 'css' => [],
327
- 'js' => [],
328
- ],
329
- ],
330
- 'ninjaform' => [
331
- 'demo' => 'https://happyaddons.com/go/demo-ninja-forms',
332
- 'title' => __( 'Ninja Forms', 'happy-elementor-addons' ),
333
- 'icon' => 'hm hm-form',
334
- 'css' => [],
335
- 'js' => [],
336
- 'vendor' => [
337
- 'css' => [],
338
- 'js' => [],
339
- ],
340
- ],
341
- 'calderaform' => [
342
- 'demo' => 'https://happyaddons.com/go/demo-caldera-forms',
343
- 'title' => __( 'Caldera Forms', 'happy-elementor-addons' ),
344
- 'icon' => 'hm hm-form',
345
- 'css' => [],
346
- 'js' => [],
347
- 'vendor' => [
348
- 'css' => [],
349
- 'js' => [],
350
- ],
351
- ],
352
- 'weform' => [
353
- 'demo' => 'https://happyaddons.com/go/demo-weforms',
354
- 'title' => __( 'weForms', 'happy-elementor-addons' ),
355
- 'icon' => 'hm hm-form',
356
- 'css' => [],
357
- 'js' => [],
358
- 'vendor' => [
359
- 'css' => [],
360
- 'js' => [],
361
- ],
362
- ],
363
- 'logo-grid' => [
364
- 'demo' => 'https://happyaddons.com/go/demo-logo-grid',
365
- 'title' => __('Logo Grid', 'happy-elementor-addons'),
366
- 'icon' => 'hm hm-logo-grid',
367
- 'css' => ['logo-grid'],
368
- 'js' => [],
369
- 'vendor' => [
370
- 'css' => [],
371
- 'js' => [],
372
- ],
373
- ],
374
- 'dual-button' => [
375
- 'demo' => 'https://happyaddons.com/go/demo-dual-button',
376
- 'title' => __( 'Dual Button', 'happy-elementor-addons' ),
377
- 'icon' => 'hm hm-accordion-horizontal',
378
- 'css' => ['dual-btn'],
379
- 'js' => [],
380
- 'vendor' => [
381
- 'css' => [],
382
- 'js' => [],
383
- ],
384
- ],
385
- 'testimonial' => [
386
- 'demo' => 'https://happyaddons.com/go/demo-testimonial',
387
- 'title' => __( 'Testimonial', 'happy-elementor-addons' ),
388
- 'icon' => 'hm hm-testimonial',
389
- 'css' => ['testimonial'],
390
- 'js' => [],
391
- 'vendor' => [
392
- 'css' => [],
393
- 'js' => [],
394
- ],
395
- ],
396
- 'number' => [
397
- 'demo' => 'https://happyaddons.com/go/demo-number-widget',
398
- 'title' => __( 'Number', 'happy-elementor-addons' ),
399
- 'icon' => 'hm hm-madel',
400
- 'css' => ['number'],
401
- 'js' => [],
402
- 'vendor' => [
403
- 'css' => [],
404
- 'js' => ['elementor-waypoints', 'jquery-numerator'],
405
- ],
406
- ],
407
- 'flip-box' => [
408
- 'demo' => 'https://happyaddons.com/gp/demo-flip-box',
409
- 'title' => __( 'Flip Box', 'happy-elementor-addons' ),
410
- 'icon' => 'hm hm-flip-card1',
411
- 'css' => ['flip-box'],
412
- 'js' => [],
413
- 'vendor' => [
414
- 'css' => [],
415
- 'js' => [],
416
- ],
417
- ],
418
- 'calendly' => [
419
- 'demo' => 'https://happyaddons.com/go/demo-calendly',
420
- 'title' => __( 'Calendly', 'happy-elementor-addons' ),
421
- 'icon' => 'hm hm-calendar',
422
- 'css' => [],
423
- 'js' => [],
424
- 'vendor' => [
425
- 'css' => [],
426
- 'js' => [],
427
- ],
428
- ],
429
- 'pricing-table' => [
430
- 'demo' => 'https://happyaddons.com/go/demo-pricing-table',
431
- 'title' => __( 'Pricing Table', 'happy-elementor-addons' ),
432
- 'icon' => 'hm hm-file-cabinet',
433
- 'css' => ['pricing-table'],
434
- 'js' => [],
435
- 'vendor' => [
436
- 'css' => [],
437
- 'js' => [],
438
- ],
439
- ],
440
- 'step-flow' => [
441
- 'demo' => 'https://happyaddons.com/go/demo-step-flow',
442
- 'title' => __( 'Step Flow', 'happy-elementor-addons' ),
443
- 'icon' => 'hm hm-step-flow',
444
- 'css' => ['steps-flow'],
445
- 'js' => [],
446
- 'vendor' => [
447
- 'css' => [],
448
- 'js' => [],
449
- ],
450
- ],
451
- 'gravityforms' => [
452
- 'title' => __( 'Gravity Forms', 'happy-elementor-addons' ),
453
- 'icon' => 'hm hm-form',
454
- 'css' => [],
455
- 'js' => [],
456
- 'vendor' => [
457
- 'css' => [],
458
- 'js' => [],
459
- ],
460
- ],
461
- 'news-ticker' => [
462
- 'title' => __( 'News Ticker', 'happy-elementor-addons' ),
463
- 'icon' => 'hm hm-slider',
464
- 'css' => ['news-ticker'],
465
- 'js' => [],
466
- 'vendor' => [
467
- 'css' => [],
468
- 'js' => ['jquery-keyframes'],
469
- ],
470
- ],
471
- 'fun-factor' => [
472
- 'title' => __( 'Fun Factor', 'happy-elementor-addons' ),
473
- 'icon' => 'hm hm-slider',
474
- 'css' => ['fun-factor'],
475
- 'js' => [],
476
- 'vendor' => [
477
- 'css' => [],
478
- 'js' => ['elementor-waypoints', 'jquery-numerator'],
479
- ],
480
- ],
481
- 'bar-chart' => [
482
- 'demo' => '',
483
- 'title' => __( 'Bar Chart', 'happy-elementor-addons' ),
484
- 'icon' => 'hm hm-graph-bar',
485
- 'css' => ['chart'],
486
- 'js' => [],
487
- 'vendor' => [
488
- 'css' => [],
489
- 'js' => ['chart-js'],
490
- ],
491
- ],
492
  'social-icons' => [
493
  'title' => __( 'Social Icons', 'happy-elementor-addons' ),
494
  'icon' => 'hm hm-bond2',
@@ -509,45 +510,45 @@ class Widgets_Manager {
509
  'js' => [],
510
  ],
511
  ],
512
- 'post-list' => [
513
- 'title' => __( 'Post List', 'happy-elementor-addons' ),
514
- 'icon' => 'hm hm-post-list',
515
- 'css' => ['post-list'],
516
- 'js' => [],
517
- 'vendor' => [
518
- 'css' => [],
519
- 'js' => [],
520
- ],
521
- ],
522
- 'post-tab' => [
523
- 'title' => __( 'Post Tab', 'happy-elementor-addons' ),
524
- 'icon' => 'hm hm-post-tab',
525
- 'css' => ['post-tab'],
526
- 'js' => [],
527
- 'vendor' => [
528
- 'css' => [],
529
- 'js' => [],
530
- ],
531
- ],
532
- 'taxonomy-list' => [
533
- 'title' => __( 'Taxonomy List', 'happy-elementor-addons' ),
534
- 'icon' => 'hm hm-clip-board',
535
- 'css' => ['taxonomy-list'],
536
- 'js' => [],
537
- 'vendor' => [
538
- 'css' => [],
539
- 'js' => [],
540
- ],
541
- ],
542
- 'threesixty-rotation' => [
543
- 'title' => __( 'Threesixty Rotation', 'happy-elementor-addons' ),
544
- 'icon' => 'hm hm-3d-rotate',
545
- 'css' => ['threesixty-rotation'],
546
- 'js' => [],
547
- 'vendor' => [
548
- 'css' => [],
549
- 'js' => ['circlr','ha-simple-magnify'],
550
- ],
551
  ],
552
  'fluent-form' => [
553
  'title' => __( 'Fluent Form', 'happy-elementor-addons' ),
@@ -559,46 +560,58 @@ class Widgets_Manager {
559
  'js' => [],
560
  ],
561
  ],
 
 
 
 
 
 
 
 
 
 
562
  ];
563
  }
564
 
565
- public static function get_base_widget_key() {
566
- return apply_filters( 'happyaddons_get_base_widget_key', '_happyaddons_base' );
567
- }
568
 
569
- /**
570
- * Init Widgets
571
- *
572
- * Include widgets files and register them
573
- *
574
- * @since 1.0.0
575
- *
576
- * @access public
577
- */
578
- public static function register() {
579
  include_once( HAPPY_ADDONS_DIR_PATH . 'base/widget-base.php' );
580
  include_once( HAPPY_ADDONS_DIR_PATH . 'traits/button-renderer.php' );
581
 
582
- $inactive_widgets = self::get_inactive_widgets();
583
 
584
- foreach ( self::get_local_widgets_map() as $widget_key => $data ) {
585
- if ( ! in_array( $widget_key, $inactive_widgets ) ) {
586
- self::register_widget( $widget_key );
587
- }
588
- }
589
- }
590
 
591
- protected static function register_widget( $widget_key ) {
592
- $widget_file = HAPPY_ADDONS_DIR_PATH . 'widgets/' . $widget_key . '/widget.php';
593
 
594
- if ( is_readable( $widget_file ) ) {
595
 
596
- include_once( $widget_file );
597
 
598
- $widget_class = '\Happy_Addons\Elementor\Widget\\' . str_replace( '-', '_', $widget_key );
599
- if ( class_exists( $widget_class ) ) {
600
- ha_elementor()->widgets_manager->register_widget_type( new $widget_class );
601
- }
602
- }
603
- }
604
  }
 
 
7
 
8
  class Widgets_Manager {
9
 
10
+ const WIDGETS_DB_KEY = 'happyaddons_inactive_widgets';
11
 
12
+ /**
13
+ * Initialize
14
+ */
15
+ public static function init() {
16
+ add_action( 'elementor/widgets/widgets_registered', [ __CLASS__, 'register' ] );
17
+ add_action( 'elementor/frontend/before_render', [ __CLASS__, 'add_global_widget_render_attributes' ] );
18
+ }
19
 
20
+ public static function add_global_widget_render_attributes( Element_Base $widget ) {
21
+ if ( $widget->get_data( 'widgetType' ) === 'global' && method_exists( $widget, 'get_original_element_instance' ) ) {
22
+ $original_instance = $widget->get_original_element_instance();
23
+ if ( method_exists( $original_instance, 'get_html_wrapper_class' ) && strpos( $original_instance->get_data( 'widgetType' ), 'ha-' ) !== false ) {
24
+ $widget->add_render_attribute( '_wrapper', [
25
+ 'class' => $original_instance->get_html_wrapper_class(),
26
+ ] );
27
+ }
28
+ }
29
+ }
30
 
31
+ public static function get_inactive_widgets() {
32
+ return get_option( self::WIDGETS_DB_KEY, [] );
33
+ }
34
 
35
+ public static function save_inactive_widgets( $widgets = [] ) {
36
+ update_option( self::WIDGETS_DB_KEY, $widgets );
37
+ }
38
 
39
+ public static function get_widgets_map() {
40
+ $widgets_map = [
41
+ self::get_base_widget_key() => [
42
+ 'css' => ['common', 'btn'],
43
+ 'js' => [],
44
+ 'vendor' => [
45
+ 'js' => ['anime'],
46
+ 'css' => ['happy-icons', 'font-awesome']
47
+ ]
48
+ ],
49
+ ];
50
 
51
+ $local_widgets_map = self::get_local_widgets_map();
52
+ $widgets_map = array_merge( $widgets_map, $local_widgets_map );
53
+
54
+ return apply_filters( 'happyaddons_get_widgets_map', $widgets_map );
55
+ }
56
 
57
+ /**
58
+ * Get the pro widgets map for dashboard only
59
+ *
60
+ * @return array
61
+ */
62
+ public static function get_pro_widget_map() {
63
+ return [
64
+ 'advanced-heading' => [
65
+ 'title' => __( 'Advanced Heading', 'happy-elementor-addons' ),
66
+ 'icon' => 'hm hm-advanced-heading',
67
+ 'is_pro' => true,
68
+ ],
69
+ 'list-group' => [
70
+ 'title' => __( 'List Group', 'happy-elementor-addons' ),
71
+ 'icon' => 'hm hm-list-group',
72
+ 'is_pro' => true,
73
+ ],
74
+ 'hover-box' => [
75
+ 'title' => __( 'Hover Box', 'happy-elementor-addons' ),
76
+ 'icon' => 'hm hm-finger-point',
77
+ 'is_pro' => true,
78
+ ],
79
+ 'countdown' => [
80
+ 'title' => __( 'Countdown', 'happy-elementor-addons' ),
81
+ 'icon' => 'hm hm-refresh-time',
82
+ 'is_pro' => true,
83
+ ],
84
+ 'team-carousel' => [
85
+ 'title' => __( 'Team Carousel', 'happy-elementor-addons' ),
86
+ 'icon' => 'hm hm-team-carousel',
87
+ 'is_pro' => true,
88
+ ],
89
+ 'logo-carousel' => [
90
+ 'title' => __( 'Logo Carousel', 'happy-elementor-addons' ),
91
+ 'icon' => 'hm hm-logo-carousel',
92
+ 'is_pro' => true,
93
+ ],
94
+ 'source-code' => [
95
+ 'title' => __( 'Source Code', 'happy-elementor-addons' ),
96
+ 'icon' => 'hm hm-code-browser',
97
+ 'is_pro' => true,
98
+ ],
99
+ 'feature-list' => [
100
+ 'title' => __( 'Feature List', 'happy-elementor-addons' ),
101
+ 'icon' => 'hm hm-list-2',
102
+ 'is_pro' => true,
103
+ ],
104
+ 'testimonial-carousel' => [
105
+ 'title' => __( 'Testimonial Carousel', 'happy-elementor-addons' ),
106
+ 'icon' => 'hm hm-testimonial-carousel',
107
+ 'is_pro' => true,
108
+ ],
109
+ 'advanced-tabs' => [
110
+ 'title' => __( 'Advanced Tabs', 'happy-elementor-addons' ),
111
+ 'icon' => 'hm hm-tab',
112
+ 'is_pro' => true,
113
+ ],
114
+ 'animated-text' => [
115
+ 'title' => __( 'Animated Text', 'happy-elementor-addons' ),
116
+ 'icon' => 'hm hm-text-animation',
117
+ 'is_pro' => true,
118
+ ],
119
+ 'timeline' => [
120
+ 'title' => __( 'Timeline', 'happy-elementor-addons' ),
121
+ 'icon' => 'hm hm-timeline',
122
+ 'is_pro' => true,
123
+ ],
124
+ 'instagram-feed' => [
125
+ 'title' => __( 'Instagram Feed', 'happy-elementor-addons' ),
126
+ 'icon' => 'hm hm-instagram',
127
+ 'is_pro' => true,
128
+ ],
129
+ 'scrolling-image' => [
130
+ 'title' => __( 'Scrolling Image', 'happy-elementor-addons' ),
131
+ 'icon' => 'hm hm-scrolling-image',
132
+ 'is_pro' => true,
133
+ ],
134
+ 'toggle' => [
135
+ 'title' => __( 'Advanced Toggle', 'happy-elementor-addons' ),
136
+ 'icon' => 'hm hm-accordion-vertical',
137
+ 'is_pro' => true,
138
+ ],
139
+ 'accordion' => [
140
+ 'title' => __( 'Advanced Accordion', 'happy-elementor-addons' ),
141
+ 'icon' => 'hm hm-accordion-vertical',
142
+ 'is_pro' => true,
143
+ ],
144
+ 'advanced-pricing-table' => [
145
+ 'title' => __( 'Advanced Pricing Table', 'happy-elementor-addons'),
146
+ 'icon' => 'hm hm-file-cabinet',
147
+ 'is_pro' => true,
148
+ ],
149
+ 'advanced-flip-box' => [
150
+ 'title' => __( 'Advanced Flip Box', 'happy-elementor-addons' ),
151
+ 'icon' => 'hm hm-flip-card1',
152
+ 'is_pro' => true,
153
+ ],
154
+ 'business-hour' => [
155
+ 'title' => __( 'Business Hour', 'happy-elementor-addons' ),
156
+ 'icon' => 'hm hm-hand-watch',
157
+ 'is_pro' => true,
158
+ ],
159
  'promo-box' => [
160
  'title' => __( 'Promo Box', 'happy-elementor-addons' ),
161
  'icon' => 'hm hm-promo',
162
  'is_pro' => true,
163
  ],
164
+ ];
165
+ }
166
 
167
+ /**
168
+ * Get the free widgets map
169
+ *
170
+ * @return array
171
+ */
172
+ public static function get_local_widgets_map() {
173
+ // All the widgets are listed below with respective map
174
 
175
+ return [
176
+ 'infobox' => [
177
+ 'demo' => 'https://happyaddons.com/go/demo-info-box',
178
+ 'title' => __( 'Info Box', 'happy-elementor-addons' ),
179
+ 'icon' => 'hm hm-blog-content',
180
+ 'css' => ['infobox'],
181
+ 'js' => [],
182
+ 'vendor' => [
183
+ 'css' => [],
184
+ 'js' => [],
185
+ ],
186
+ ],
187
+ 'card' => [
188
+ 'demo' => 'https://happyaddons.com/go/demo-card',
189
+ 'title' => __( 'Card', 'happy-elementor-addons' ),
190
+ 'icon' => 'hm hm-card',
191
+ 'css' => ['card', 'badge'],
192
+ 'js' => [],
193
+ 'vendor' => [
194
+ 'css' => [],
195
+ 'js' => [],
196
+ ],
197
+ ],
198
+ 'cf7' => [
199
+ 'demo' => 'https://happyaddons.com/go/demo-contact-form7',
200
+ 'title' => __( 'Contact Form 7', 'happy-elementor-addons' ),
201
+ 'icon' => 'hm hm-form',
202
+ 'css' => [],
203
+ 'js' => [],
204
+ 'vendor' => [
205
+ 'css' => [],
206
+ 'js' => [],
207
+ ],
208
+ ],
209
+ 'icon-box' => [
210
+ 'demo' => 'https://happyaddons.com/go/demo-icon-box',
211
+ 'title' => __( 'Icon Box', 'happy-elementor-addons' ),
212
+ 'icon' => 'hm hm-icon-box',
213
+ 'css' => ['icon-box', 'badge'],
214
+ 'js' => [],
215
+ 'vendor' => [
216
+ 'css' => [],
217
+ 'js' => [],
218
+ ],
219
+ ],
220
+ 'member' => [
221
+ 'demo' => 'https://happyaddons.com/go/demo-team-member',
222
+ 'title' => __( 'Team Member', 'happy-elementor-addons' ),
223
+ 'icon' => 'hm hm-team-member',
224
+ 'css' => ['member'],
225
+ 'js' => [],
226
+ 'vendor' => [
227
+ 'css' => [],
228
+ 'js' => [],
229
+ ],
230
+ ],
231
+ 'review' => [
232
+ 'demo' => 'https://happyaddons.com/go/demo-review',
233
+ 'title' => __( 'Review', 'happy-elementor-addons' ),
234
+ 'icon' => 'hm hm-review',
235
+ 'css' => ['review'],
236
+ 'js' => [],
237
+ 'vendor' => [
238
+ 'css' => [],
239
+ 'js' => [],
240
+ ],
241
+ ],
242
+ 'image-compare' => [
243
+ 'demo' => 'https://happyaddons.com/go/demo-image-compare',
244
+ 'title' => __( 'Image Compare', 'happy-elementor-addons' ),
245
+ 'icon' => 'hm hm-image-compare',
246
+ 'css' => ['image-comparison'],
247
+ 'js' => [],
248
+ 'vendor' => [
249
+ 'css' => ['twentytwenty'],
250
+ 'js' => ['jquery-event-move','jquery-twentytwenty'],
251
+ ],
252
+ ],
253
+ 'justified-gallery' => [
254
+ 'demo' => 'https://happyaddons.com/go/demo-justified-grid',
255
+ 'title' => __( 'Justified Grid', 'happy-elementor-addons' ),
256
+ 'icon' => 'hm hm-brick-wall',
257
+ 'css' => ['justified-gallery', 'gallery-filter'],
258
+ 'js' => [],
259
+ 'vendor' => [
260
+ 'css' => ['justifiedGallery', 'magnific-popup'],
261
+ 'js' => ['jquery-justifiedGallery', 'jquery-magnific-popup'],
262
+ ],
263
+ ],
264
+ 'image-grid' => [
265
+ 'demo' => 'https://happyaddons.com/go/demo-image-grid',
266
+ 'title' => __( 'Image Grid', 'happy-elementor-addons' ),
267
+ 'icon' => 'hm hm-grid-even',
268
+ 'css' => ['image-grid', 'gallery-filter'],
269
+ 'js' => [],
270
+ 'vendor' => [
271
+ 'css' => ['magnific-popup'],
272
+ 'js' => ['jquery-isotope', 'jquery-magnific-popup'],
273
+ ],
274
+ ],
275
+ 'slider' => [
276
+ 'demo' => 'https://happyaddons.com/go/demo-slider',
277
+ 'title' => __( 'Slider', 'happy-elementor-addons' ),
278
+ 'icon' => 'hm hm-image-slider',
279
+ 'css' => ['slider-carousel'],
280
+ 'js' => [],
281
+ 'vendor' => [
282
+ 'css' => ['slick', 'slick-theme'],
283
+ 'js' => ['jquery-slick'],
284
+ ],
285
+ ],
286
+ 'carousel' => [
287
+ 'demo' => 'https://happyaddons.com/go/demo-image-carousel',
288
+ 'title' => __( 'Carousel', 'happy-elementor-addons' ),
289
+ 'icon' => 'hm hm-carousal',
290
+ 'class' => Carousel::class,
291
+ 'css' => ['slider-carousel'],
292
+ 'js' => [],
293
+ 'vendor' => [
294
+ 'css' => ['slick', 'slick-theme'],
295
+ 'js' => ['jquery-slick'],
296
+ ],
297
+ ],
298
+ 'skills' => [
299
+ 'demo' => 'https://happyaddons.com/go/demo-skill-bar',
300
+ 'title' => __( 'Skill Bars', 'happy-elementor-addons' ),
301
+ 'icon' => 'hm hm-progress-bar',
302
+ 'css' => ['skills'],
303
+ 'js' => [],
304
+ 'vendor' => [
305
+ 'css' => [],
306
+ 'js' => ['elementor-waypoints', 'jquery-numerator'],
307
+ ],
308
+ ],
309
+ 'gradient-heading' => [
310
+ 'demo' => 'https://happyaddons.com/go/demo-gradient-heading',
311
+ 'title' => __( 'Gradient Heading', 'happy-elementor-addons' ),
312
+ 'icon' => 'hm hm-drag',
313
+ 'css' => ['gradient-heading'],
314
+ 'js' => [],
315
+ 'vendor' => [
316
+ 'css' => [],
317
+ 'js' => [],
318
+ ],
319
+ ],
320
+ 'wpform' => [
321
+ 'demo' => 'https://happyaddons.com/go/demo-wpforms',
322
+ 'title' => __( 'WPForms', 'happy-elementor-addons' ),
323
+ 'icon' => 'hm hm-form',
324
+ 'css' => [],
325
+ 'js' => [],
326
+ 'vendor' => [
327
+ 'css' => [],
328
+ 'js' => [],
329
+ ],
330
+ ],
331
+ 'ninjaform' => [
332
+ 'demo' => 'https://happyaddons.com/go/demo-ninja-forms',
333
+ 'title' => __( 'Ninja Forms', 'happy-elementor-addons' ),
334
+ 'icon' => 'hm hm-form',
335
+ 'css' => [],
336
+ 'js' => [],
337
+ 'vendor' => [
338
+ 'css' => [],
339
+ 'js' => [],
340
+ ],
341
+ ],
342
+ 'calderaform' => [
343
+ 'demo' => 'https://happyaddons.com/go/demo-caldera-forms',
344
+ 'title' => __( 'Caldera Forms', 'happy-elementor-addons' ),
345
+ 'icon' => 'hm hm-form',
346
+ 'css' => [],
347
+ 'js' => [],
348
+ 'vendor' => [
349
+ 'css' => [],
350
+ 'js' => [],
351
+ ],
352
+ ],
353
+ 'weform' => [
354
+ 'demo' => 'https://happyaddons.com/go/demo-weforms',
355
+ 'title' => __( 'weForms', 'happy-elementor-addons' ),
356
+ 'icon' => 'hm hm-form',
357
+ 'css' => [],
358
+ 'js' => [],
359
+ 'vendor' => [
360
+ 'css' => [],
361
+ 'js' => [],
362
+ ],
363
+ ],
364
+ 'logo-grid' => [
365
+ 'demo' => 'https://happyaddons.com/go/demo-logo-grid',
366
+ 'title' => __('Logo Grid', 'happy-elementor-addons'),
367
+ 'icon' => 'hm hm-logo-grid',
368
+ 'css' => ['logo-grid'],
369
+ 'js' => [],
370
+ 'vendor' => [
371
+ 'css' => [],
372
+ 'js' => [],
373
+ ],
374
+ ],
375
+ 'dual-button' => [
376
+ 'demo' => 'https://happyaddons.com/go/demo-dual-button',
377
+ 'title' => __( 'Dual Button', 'happy-elementor-addons' ),
378
+ 'icon' => 'hm hm-accordion-horizontal',
379
+ 'css' => ['dual-btn'],
380
+ 'js' => [],
381
+ 'vendor' => [
382
+ 'css' => [],
383
+ 'js' => [],
384
+ ],
385
+ ],
386
+ 'testimonial' => [
387
+ 'demo' => 'https://happyaddons.com/go/demo-testimonial',
388
+ 'title' => __( 'Testimonial', 'happy-elementor-addons' ),
389
+ 'icon' => 'hm hm-testimonial',
390
+ 'css' => ['testimonial'],
391
+ 'js' => [],
392
+ 'vendor' => [
393
+ 'css' => [],
394
+ 'js' => [],
395
+ ],
396
+ ],
397
+ 'number' => [
398
+ 'demo' => 'https://happyaddons.com/go/demo-number-widget',
399
+ 'title' => __( 'Number', 'happy-elementor-addons' ),
400
+ 'icon' => 'hm hm-madel',
401
+ 'css' => ['number'],
402
+ 'js' => [],
403
+ 'vendor' => [
404
+ 'css' => [],
405
+ 'js' => ['elementor-waypoints', 'jquery-numerator'],
406
+ ],
407
+ ],
408
+ 'flip-box' => [
409
+ 'demo' => 'https://happyaddons.com/gp/demo-flip-box',
410
+ 'title' => __( 'Flip Box', 'happy-elementor-addons' ),
411
+ 'icon' => 'hm hm-flip-card1',
412
+ 'css' => ['flip-box'],
413
+ 'js' => [],
414
+ 'vendor' => [
415
+ 'css' => [],
416
+ 'js' => [],
417
+ ],
418
+ ],
419
+ 'calendly' => [
420
+ 'demo' => 'https://happyaddons.com/go/demo-calendly',
421
+ 'title' => __( 'Calendly', 'happy-elementor-addons' ),
422
+ 'icon' => 'hm hm-calendar',
423
+ 'css' => [],
424
+ 'js' => [],
425
+ 'vendor' => [
426
+ 'css' => [],
427
+ 'js' => [],
428
+ ],
429
+ ],
430
+ 'pricing-table' => [
431
+ 'demo' => 'https://happyaddons.com/go/demo-pricing-table',
432
+ 'title' => __( 'Pricing Table', 'happy-elementor-addons' ),
433
+ 'icon' => 'hm hm-file-cabinet',
434
+ 'css' => ['pricing-table'],
435
+ 'js' => [],
436
+ 'vendor' => [
437
+ 'css' => [],
438
+ 'js' => [],
439
+ ],
440
+ ],
441
+ 'step-flow' => [
442
+ 'demo' => 'https://happyaddons.com/go/demo-step-flow',
443
+ 'title' => __( 'Step Flow', 'happy-elementor-addons' ),
444
+ 'icon' => 'hm hm-step-flow',
445
+ 'css' => ['steps-flow'],
446
+ 'js' => [],
447
+ 'vendor' => [
448
+ 'css' => [],
449
+ 'js' => [],
450
+ ],
451
+ ],
452
+ 'gravityforms' => [
453
+ 'title' => __( 'Gravity Forms', 'happy-elementor-addons' ),
454
+ 'icon' => 'hm hm-form',
455
+ 'css' => [],
456
+ 'js' => [],
457
+ 'vendor' => [
458
+ 'css' => [],
459
+ 'js' => [],
460
+ ],
461
+ ],
462
+ 'news-ticker' => [
463
+ 'title' => __( 'News Ticker', 'happy-elementor-addons' ),
464
+ 'icon' => 'hm hm-slider',
465
+ 'css' => ['news-ticker'],
466
+ 'js' => [],
467
+ 'vendor' => [
468
+ 'css' => [],
469
+ 'js' => ['jquery-keyframes'],
470
+ ],
471
+ ],
472
+ 'fun-factor' => [
473
+ 'title' => __( 'Fun Factor', 'happy-elementor-addons' ),
474
+ 'icon' => 'hm hm-slider',
475
+ 'css' => ['fun-factor'],
476
+ 'js' => [],
477
+ 'vendor' => [
478
+ 'css' => [],
479
+ 'js' => ['elementor-waypoints', 'jquery-numerator'],
480
+ ],
481
+ ],
482
+ 'bar-chart' => [
483
+ 'demo' => '',
484
+ 'title' => __( 'Bar Chart', 'happy-elementor-addons' ),
485
+ 'icon' => 'hm hm-graph-bar',
486
+ 'css' => ['chart'],
487
+ 'js' => [],
488
+ 'vendor' => [
489
+ 'css' => [],
490
+ 'js' => ['chart-js'],
491
+ ],
492
+ ],
493
  'social-icons' => [
494
  'title' => __( 'Social Icons', 'happy-elementor-addons' ),
495
  'icon' => 'hm hm-bond2',
510
  'js' => [],
511
  ],
512
  ],
513
+ 'post-list' => [
514
+ 'title' => __( 'Post List', 'happy-elementor-addons' ),
515
+ 'icon' => 'hm hm-post-list',
516
+ 'css' => ['post-list'],
517
+ 'js' => [],
518
+ 'vendor' => [
519
+ 'css' => [],
520
+ 'js' => [],
521
+ ],
522
+ ],
523
+ 'post-tab' => [
524
+ 'title' => __( 'Post Tab', 'happy-elementor-addons' ),
525
+ 'icon' => 'hm hm-post-tab',
526
+ 'css' => ['post-tab'],
527
+ 'js' => [],
528
+ 'vendor' => [
529
+ 'css' => [],
530
+ 'js' => [],
531
+ ],
532
+ ],
533
+ 'taxonomy-list' => [
534
+ 'title' => __( 'Taxonomy List', 'happy-elementor-addons' ),
535
+ 'icon' => 'hm hm-clip-board',
536
+ 'css' => ['taxonomy-list'],
537
+ 'js' => [],
538
+ 'vendor' => [
539
+ 'css' => [],
540
+ 'js' => [],
541
+ ],
542
+ ],
543
+ 'threesixty-rotation' => [
544
+ 'title' => __( 'Threesixty Rotation', 'happy-elementor-addons' ),
545
+ 'icon' => 'hm hm-3d-rotate',
546
+ 'css' => ['threesixty-rotation'],
547
+ 'js' => [],
548
+ 'vendor' => [
549
+ 'css' => [],
550
+ 'js' => ['circlr','ha-simple-magnify'],
551
+ ],
552
  ],
553
  'fluent-form' => [
554
  'title' => __( 'Fluent Form', 'happy-elementor-addons' ),
560
  'js' => [],
561
  ],
562
  ],
563
+ 'data-table' => [
564
+ 'title' => __( 'Data Table', 'happy-elementor-addons' ),
565
+ 'icon' => 'hm hm-data-table',
566
+ 'css' => ['data-table'],
567
+ 'js' => [],
568
+ 'vendor' => [
569
+ 'css' => [],
570
+ 'js' => [],
571
+ ],
572
+ ],
573
  ];
574
  }
575
 
576
+ public static function get_base_widget_key() {
577
+ return apply_filters( 'happyaddons_get_base_widget_key', '_happyaddons_base' );
578
+ }
579
 
580
+ /**
581
+ * Init Widgets
582
+ *
583
+ * Include widgets files and register them
584
+ *
585
+ * @since 1.0.0
586
+ *
587
+ * @access public
588
+ */
589
+ public static function register() {
590
  include_once( HAPPY_ADDONS_DIR_PATH . 'base/widget-base.php' );
591
  include_once( HAPPY_ADDONS_DIR_PATH . 'traits/button-renderer.php' );
592
 
593
+ $inactive_widgets = self::get_inactive_widgets();
594
 
595
+ foreach ( self::get_local_widgets_map() as $widget_key => $data ) {
596
+ if ( ! in_array( $widget_key, $inactive_widgets ) ) {
597
+ self::register_widget( $widget_key );
598
+ }
599
+ }
600
+ }
601
 
602
+ protected static function register_widget( $widget_key ) {
603
+ $widget_file = HAPPY_ADDONS_DIR_PATH . 'widgets/' . $widget_key . '/widget.php';
604
 
605
+ if ( is_readable( $widget_file ) ) {
606
 
607
+ include_once( $widget_file );
608
 
609
+ $widget_class = '\Happy_Addons\Elementor\Widget\\' . str_replace( '-', '_', $widget_key );
610
+ if ( class_exists( $widget_class ) ) {
611
+ ha_elementor()->widgets_manager->register_widget_type( new $widget_class );
612
+ }
613
+ }
614
+ }
615
  }
616
+
617
+ Widgets_Manager::init();
classes/wpml-manager.php CHANGED
@@ -72,8 +72,8 @@ class WPML_Manager {
72
  'type' => __( 'Card: Button Text', 'happy-elementor-addons' ),
73
  'editor_type' => 'LINE',
74
  ],
75
- [
76
- 'field' => 'button_link',
77
  'type' => __( 'Card: Button Link', 'happy-elementor-addons' ),
78
  'editor_type' => 'LINK',
79
  ],
@@ -98,8 +98,8 @@ class WPML_Manager {
98
  'type' => __( 'Dual Button: Primary Button Text', 'happy-elementor-addons' ),
99
  'editor_type' => 'LINE',
100
  ],
101
- [
102
- 'field' => 'left_button_link',
103
  'type' => __( 'Dual Button: Primary Button Link', 'happy-elementor-addons' ),
104
  'editor_type' => 'LINK',
105
  ],
@@ -113,8 +113,8 @@ class WPML_Manager {
113
  'type' => __( 'Dual Button: Secondary Button Text', 'happy-elementor-addons' ),
114
  'editor_type' => 'LINE',
115
  ],
116
- [
117
- 'field' => 'right_button_link',
118
  'type' => __( 'Dual Button: Secondary Button Link', 'happy-elementor-addons' ),
119
  'editor_type' => 'LINK',
120
  ],
@@ -172,8 +172,8 @@ class WPML_Manager {
172
  'type' => __( 'Gradient_Heading: Title', 'happy-elementor-addons' ),
173
  'editor_type' => 'AREA',
174
  ],
175
- [
176
- 'field' => 'link',
177
  'type' => __( 'Gradient_Heading: Link', 'happy-elementor-addons' ),
178
  'editor_type' => 'LINK',
179
  ],
@@ -195,8 +195,8 @@ class WPML_Manager {
195
  'type' => __( 'Icon Box: Badge Text', 'happy-elementor-addons' ),
196
  'editor_type' => 'LINE',
197
  ],
198
- [
199
- 'field' => 'link',
200
  'type' => __( 'Icon Box: Link', 'happy-elementor-addons' ),
201
  'editor_type' => 'LINK',
202
  ],
@@ -255,8 +255,8 @@ class WPML_Manager {
255
  'type' => __( 'Info Box: Button Text', 'happy-elementor-addons' ),
256
  'editor_type' => 'LINE',
257
  ],
258
- [
259
- 'field' => 'button_link',
260
  'type' => __( 'Info Box: Button Link', 'happy-elementor-addons' ),
261
  'editor_type' => 'LINK',
262
  ],
@@ -364,8 +364,8 @@ class WPML_Manager {
364
  'type' => __( 'Pricing Table: Button Text', 'happy-elementor-addons' ),
365
  'editor_type' => 'LINE',
366
  ],
367
- [
368
- 'field' => 'button_link',
369
  'type' => __( 'Pricing Table: Button Link', 'happy-elementor-addons' ),
370
  'editor_type' => 'LINK',
371
  ],
@@ -445,8 +445,8 @@ class WPML_Manager {
445
  'type' => __( 'Step Flow: Description', 'happy-elementor-addons' ),
446
  'editor_type' => 'AREA',
447
  ],
448
- [
449
- 'field' => 'link',
450
  'type' => __( 'Step Flow: Link', 'happy-elementor-addons' ),
451
  'editor_type' => 'LINK',
452
  ],
@@ -515,3 +515,5 @@ class WPML_Manager {
515
  return $widgets;
516
  }
517
  }
 
 
72
  'type' => __( 'Card: Button Text', 'happy-elementor-addons' ),
73
  'editor_type' => 'LINE',
74
  ],
75
+ 'button_link' => [
76
+ 'field' => 'url',
77
  'type' => __( 'Card: Button Link', 'happy-elementor-addons' ),
78
  'editor_type' => 'LINK',
79
  ],
98
  'type' => __( 'Dual Button: Primary Button Text', 'happy-elementor-addons' ),
99
  'editor_type' => 'LINE',
100
  ],
101
+ 'left_button_link' => [
102
+ 'field' => 'url',
103
  'type' => __( 'Dual Button: Primary Button Link', 'happy-elementor-addons' ),
104
  'editor_type' => 'LINK',
105
  ],
113
  'type' => __( 'Dual Button: Secondary Button Text', 'happy-elementor-addons' ),
114
  'editor_type' => 'LINE',
115
  ],
116
+ 'right_button_link' => [
117
+ 'field' => 'url',
118
  'type' => __( 'Dual Button: Secondary Button Link', 'happy-elementor-addons' ),
119
  'editor_type' => 'LINK',
120
  ],
172
  'type' => __( 'Gradient_Heading: Title', 'happy-elementor-addons' ),
173
  'editor_type' => 'AREA',
174
  ],
175
+ 'link' => [
176
+ 'field' => 'url',
177
  'type' => __( 'Gradient_Heading: Link', 'happy-elementor-addons' ),
178
  'editor_type' => 'LINK',
179
  ],
195
  'type' => __( 'Icon Box: Badge Text', 'happy-elementor-addons' ),
196
  'editor_type' => 'LINE',
197
  ],
198
+ 'link' => [
199
+ 'field' => 'url',
200
  'type' => __( 'Icon Box: Link', 'happy-elementor-addons' ),
201
  'editor_type' => 'LINK',
202
  ],
255
  'type' => __( 'Info Box: Button Text', 'happy-elementor-addons' ),
256
  'editor_type' => 'LINE',
257
  ],
258
+ 'button_link' => [
259
+ 'field' => 'url',
260
  'type' => __( 'Info Box: Button Link', 'happy-elementor-addons' ),
261
  'editor_type' => 'LINK',
262
  ],
364
  'type' => __( 'Pricing Table: Button Text', 'happy-elementor-addons' ),
365
  'editor_type' => 'LINE',
366
  ],
367
+ 'button_link' => [
368
+ 'field' => 'url',
369
  'type' => __( 'Pricing Table: Button Link', 'happy-elementor-addons' ),
370
  'editor_type' => 'LINK',
371
  ],
445
  'type' => __( 'Step Flow: Description', 'happy-elementor-addons' ),
446
  'editor_type' => 'AREA',
447
  ],
448
+ 'link' => [
449
+ 'field' => 'url',
450
  'type' => __( 'Step Flow: Link', 'happy-elementor-addons' ),
451
  'editor_type' => 'LINK',
452
  ],
515
  return $widgets;
516
  }
517
  }
518
+
519
+ WPML_Manager::init();
extensions/background-overlay.php CHANGED
@@ -196,3 +196,5 @@ class Background_Overlay {
196
  $element->end_controls_section();
197
  }
198
  }
 
 
196
  $element->end_controls_section();
197
  }
198
  }
199
+
200
+ Background_Overlay::init();
extensions/column-extended.php CHANGED
@@ -51,3 +51,5 @@ href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flexible_Box_Layout/O
51
  );
52
  }
53
  }
 
 
51
  );
52
  }
53
  }
54
+
55
+ Column_Extended::init();
extensions/happy-effects.php CHANGED
@@ -8,865 +8,1202 @@ defined( 'ABSPATH' ) || die();
8
 
9
  class Happy_Effects {
10
 
11
- public static function init() {
12
- add_action( 'elementor/element/common/_section_style/after_section_end', [ __CLASS__, 'add_controls_section' ], 1 );
13
- }
14
 
15
- public static function add_controls_section( Element_Base $element ) {
16
- $element->start_controls_section(
17
- '_section_happy_effects',
18
- [
19
- 'label' => __( 'Happy Effects', 'happy-elementor-addons' ) . ha_get_section_icon(),
20
- 'tab' => Controls_Manager::TAB_ADVANCED,
21
- ]
22
- );
23
 
24
- self::add_floating_effects( $element );
25
- self::add_css_effects( $element );
 
26
 
27
- $element->end_controls_section();
28
- }
 
 
 
 
 
 
29
 
30
- public static function add_floating_effects( Element_Base $element ) {
31
- $element->add_control(
32
- 'ha_floating_fx',
33
- [
34
- 'label' => __( 'Floating Effects', 'happy-elementor-addons' ),
35
- 'type' => Controls_Manager::SWITCHER,
36
- 'return_value' => 'yes',
37
- 'frontend_available' => true,
38
- ]
39
- );
40
 
41
- $element->add_control(
42
- 'ha_floating_fx_translate_toggle',
43
- [
44
- 'label' => __( 'Translate', 'happy-elementor-addons' ),
45
- 'type' => Controls_Manager::POPOVER_TOGGLE,
46
- 'return_value' => 'yes',
47
- 'frontend_available' => true,
48
- 'condition' => [
49
- 'ha_floating_fx' => 'yes',
50
- ]
51
- ]
52
- );
53
 
54
- $element->start_popover();
 
 
 
 
 
 
 
 
 
55
 
56
- $element->add_control(
57
- 'ha_floating_fx_translate_x',
58
- [
59
- 'label' => __( 'Translate X', 'happy-elementor-addons' ),
60
- 'type' => Controls_Manager::SLIDER,
61
- 'default' => [
62
- 'sizes' => [
63
- 'from' => 0,
64
- 'to' => 5,
65
- ],
66
- 'unit' => 'px',
67
- ],
68
- 'range' => [
69
- 'px' => [
70
- 'min' => -100,
71
- 'max' => 100,
72
- ]
73
- ],
74
- 'labels' => [
75
- __( 'From', 'happy-elementor-addons' ),
76
- __( 'To', 'happy-elementor-addons' ),
77
- ],
78
- 'scales' => 1,
79
- 'handles' => 'range',
80
- 'condition' => [
81
- 'ha_floating_fx_translate_toggle' => 'yes',
82
- 'ha_floating_fx' => 'yes',
83
- ],
84
- 'render_type' => 'none',
85
- 'frontend_available' => true,
86
- ]
87
- );
88
 
89
- $element->add_control(
90
- 'ha_floating_fx_translate_y',
91
- [
92
- 'label' => __( 'Translate Y', 'happy-elementor-addons' ),
93
- 'type' => Controls_Manager::SLIDER,
94
- 'default' => [
95
- 'sizes' => [
96
- 'from' => 0,
97
- 'to' => 5,
98
- ],
99
- 'unit' => 'px',
100
- ],
101
- 'range' => [
102
- 'px' => [
103
- 'min' => -100,
104
- 'max' => 100,
105
- ]
106
- ],
107
- 'labels' => [
108
- __( 'From', 'happy-elementor-addons' ),
109
- __( 'To', 'happy-elementor-addons' ),
110
- ],
111
- 'scales' => 1,
112
- 'handles' => 'range',
113
- 'condition' => [
114
- 'ha_floating_fx_translate_toggle' => 'yes',
115
- 'ha_floating_fx' => 'yes',
116
- ],
117
- 'render_type' => 'none',
118
- 'frontend_available' => true,
119
- ]
120
- );
121
 
122
- $element->add_control(
123
- 'ha_floating_fx_translate_duration',
124
- [
125
- 'label' => __( 'Duration', 'happy-elementor-addons' ),
126
- 'type' => Controls_Manager::SLIDER,
127
- 'size_units' => ['px'],
128
- 'range' => [
129
- 'px' => [
130
- 'min' => 0,
131
- 'max' => 10000,
132
- 'step' => 100
133
- ]
134
- ],
135
- 'default' => [
136
- 'size' => 1000,
137
- ],
138
- 'condition' => [
139
- 'ha_floating_fx_translate_toggle' => 'yes',
140
- 'ha_floating_fx' => 'yes',
141
- ],
142
- 'render_type' => 'none',
143
- 'frontend_available' => true,
144
- ]
145
- );
 
 
 
 
 
 
 
 
146
 
147
- $element->add_control(
148
- 'ha_floating_fx_translate_delay',
149
- [
150
- 'label' => __( 'Delay', 'happy-elementor-addons' ),
151
- 'type' => Controls_Manager::SLIDER,
152
- 'size_units' => ['px'],
153
- 'range' => [
154
- 'px' => [
155
- 'min' => 0,
156
- 'max' => 5000,
157
- 'step' => 100
158
- ]
159
- ],
160
- 'condition' => [
161
- 'ha_floating_fx_translate_toggle' => 'yes',
162
- 'ha_floating_fx' => 'yes',
163
- ],
164
- 'render_type' => 'none',
165
- 'frontend_available' => true,
166
- ]
167
- );
 
 
 
 
 
 
 
 
 
 
 
168
 
169
- $element->end_popover();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
170
 
171
- $element->add_control(
172
- 'ha_floating_fx_rotate_toggle',
173
- [
174
- 'label' => __( 'Rotate', 'happy-elementor-addons' ),
175
- 'type' => Controls_Manager::POPOVER_TOGGLE,
176
- 'return_value' => 'yes',
177
- 'frontend_available' => true,
178
- 'condition' => [
179
- 'ha_floating_fx' => 'yes',
180
- ]
181
- ]
182
- );
 
 
 
 
 
 
 
 
 
183
 
184
- $element->start_popover();
185
 
186
- $element->add_control(
187
- 'ha_floating_fx_rotate_x',
188
- [
189
- 'label' => __( 'Rotate X', 'happy-elementor-addons' ),
190
- 'type' => Controls_Manager::SLIDER,
191
- 'default' => [
192
- 'sizes' => [
193
- 'from' => 0,
194
- 'to' => 45,
195
- ],
196
- 'unit' => 'px',
197
- ],
198
- 'range' => [
199
- 'px' => [
200
- 'min' => -180,
201
- 'max' => 180,
202
- ]
203
- ],
204
- 'labels' => [
205
- __( 'From', 'happy-elementor-addons' ),
206
- __( 'To', 'happy-elementor-addons' ),
207
- ],
208
- 'scales' => 1,
209
- 'handles' => 'range',
210
- 'condition' => [
211
- 'ha_floating_fx_rotate_toggle' => 'yes',
212
- 'ha_floating_fx' => 'yes',
213
- ],
214
- 'render_type' => 'none',
215
- 'frontend_available' => true,
216
- ]
217
- );
218
 
219
- $element->add_control(
220
- 'ha_floating_fx_rotate_y',
221
- [
222
- 'label' => __( 'Rotate Y', 'happy-elementor-addons' ),
223
- 'type' => Controls_Manager::SLIDER,
224
- 'default' => [
225
- 'sizes' => [
226
- 'from' => 0,
227
- 'to' => 45,
228
- ],
229
- 'unit' => 'px',
230
- ],
231
- 'range' => [
232
- 'px' => [
233
- 'min' => -180,
234
- 'max' => 180,
235
- ]
236
- ],
237
- 'labels' => [
238
- __( 'From', 'happy-elementor-addons' ),
239
- __( 'To', 'happy-elementor-addons' ),
240
- ],
241
- 'scales' => 1,
242
- 'handles' => 'range',
243
- 'condition' => [
244
- 'ha_floating_fx_rotate_toggle' => 'yes',
245
- 'ha_floating_fx' => 'yes',
246
- ],
247
- 'render_type' => 'none',
248
- 'frontend_available' => true,
249
- ]
250
- );
251
 
252
- $element->add_control(
253
- 'ha_floating_fx_rotate_z',
254
- [
255
- 'label' => __( 'Rotate Z', 'happy-elementor-addons' ),
256
- 'type' => Controls_Manager::SLIDER,
257
- 'default' => [
258
- 'sizes' => [
259
- 'from' => 0,
260
- 'to' => 45,
261
- ],
262
- 'unit' => 'px',
263
- ],
264
- 'range' => [
265
- 'px' => [
266
- 'min' => -180,
267
- 'max' => 180,
268
- ]
269
- ],
270
- 'labels' => [
271
- __( 'From', 'happy-elementor-addons' ),
272
- __( 'To', 'happy-elementor-addons' ),
273
- ],
274
- 'scales' => 1,
275
- 'handles' => 'range',
276
- 'condition' => [
277
- 'ha_floating_fx_rotate_toggle' => 'yes',
278
- 'ha_floating_fx' => 'yes',
279
- ],
280
- 'render_type' => 'none',
281
- 'frontend_available' => true,
282
- ]
283
- );
284
 
285
- $element->add_control(
286
- 'ha_floating_fx_rotate_duration',
287
- [
288
- 'label' => __( 'Duration', 'happy-elementor-addons' ),
289
- 'type' => Controls_Manager::SLIDER,
290
- 'size_units' => ['px'],
291
- 'range' => [
292
- 'px' => [
293
- 'min' => 0,
294
- 'max' => 10000,
295
- 'step' => 100
296
- ]
297
- ],
298
- 'default' => [
299
- 'size' => 1000,
300
- ],
301
- 'condition' => [
302
- 'ha_floating_fx_rotate_toggle' => 'yes',
303
- 'ha_floating_fx' => 'yes',
304
- ],
305
- 'render_type' => 'none',
306
- 'frontend_available' => true,
307
- ]
308
- );
 
 
 
 
 
 
 
 
309
 
310
- $element->add_control(
311
- 'ha_floating_fx_rotate_delay',
312
- [
313
- 'label' => __( 'Delay', 'happy-elementor-addons' ),
314
- 'type' => Controls_Manager::SLIDER,
315
- 'size_units' => ['px'],
316
- 'range' => [
317
- 'px' => [
318
- 'min' => 0,
319
- 'max' => 5000,
320
- 'step' => 100
321
- ]
322
- ],
323
- 'condition' => [
324
- 'ha_floating_fx_rotate_toggle' => 'yes',
325
- 'ha_floating_fx' => 'yes',
326
- ],
327
- 'render_type' => 'none',
328
- 'frontend_available' => true,
329
- ]
330
- );
 
 
 
 
 
 
 
 
 
 
 
331
 
332
- $element->end_popover();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
333
 
334
- $element->add_control(
335
- 'ha_floating_fx_scale_toggle',
336
- [
337
- 'label' => __( 'Scale', 'happy-elementor-addons' ),
338
- 'type' => Controls_Manager::POPOVER_TOGGLE,
339
- 'return_value' => 'yes',
340
- 'frontend_available' => true,
341
- 'condition' => [
342
- 'ha_floating_fx' => 'yes',
343
- ]
344
- ]
345
- );
 
 
 
 
 
 
 
 
 
346
 
347
- $element->start_popover();
348
 
349
- $element->add_control(
350
- 'ha_floating_fx_scale_x',
351
- [
352
- 'label' => __( 'Scale X', 'happy-elementor-addons' ),
353
- 'type' => Controls_Manager::SLIDER,
354
- 'default' => [
355
- 'sizes' => [
356
- 'from' => 1,
357
- 'to' => 1.2,
358
- ],
359
- 'unit' => 'px',
360
- ],
361
- 'range' => [
362
- 'px' => [
363
- 'min' => 0,
364
- 'max' => 5,
365
- 'step' => .1
366
- ]
367
- ],
368
- 'labels' => [
369
- __( 'From', 'happy-elementor-addons' ),
370
- __( 'To', 'happy-elementor-addons' ),
371
- ],
372
- 'scales' => 1,
373
- 'handles' => 'range',
374
- 'condition' => [
375
- 'ha_floating_fx_scale_toggle' => 'yes',
376
- 'ha_floating_fx' => 'yes',
377
- ],
378
- 'render_type' => 'none',
379
- 'frontend_available' => true,
380
- ]
381
- );
382
 
383
- $element->add_control(
384
- 'ha_floating_fx_scale_y',
385
- [
386
- 'label' => __( 'Scale Y', 'happy-elementor-addons' ),
387
- 'type' => Controls_Manager::SLIDER,
388
- 'default' => [
389
- 'sizes' => [
390
- 'from' => 1,
391
- 'to' => 1.2,
392
- ],
393
- 'unit' => 'px',
394
- ],
395
- 'range' => [
396
- 'px' => [
397
- 'min' => 0,
398
- 'max' => 5,
399
- 'step' => .1
400
- ]
401
- ],
402
- 'labels' => [
403
- __( 'From', 'happy-elementor-addons' ),
404
- __( 'To', 'happy-elementor-addons' ),
405
- ],
406
- 'scales' => 1,
407
- 'handles' => 'range',
408
- 'condition' => [
409
- 'ha_floating_fx_scale_toggle' => 'yes',
410
- 'ha_floating_fx' => 'yes',
411
- ],
412
- 'render_type' => 'none',
413
- 'frontend_available' => true,
414
- ]
415
- );
416
 
417
- $element->add_control(
418
- 'ha_floating_fx_scale_duration',
419
- [
420
- 'label' => __( 'Duration', 'happy-elementor-addons' ),
421
- 'type' => Controls_Manager::SLIDER,
422
- 'size_units' => ['px'],
423
- 'range' => [
424
- 'px' => [
425
- 'min' => 0,
426
- 'max' => 10000,
427
- 'step' => 100
428
- ]
429
- ],
430
- 'default' => [
431
- 'size' => 1000,
432
- ],
433
- 'condition' => [
434
- 'ha_floating_fx_scale_toggle' => 'yes',
435
- 'ha_floating_fx' => 'yes',
436
- ],
437
- 'render_type' => 'none',
438
- 'frontend_available' => true,
439
- ]
440
- );
 
 
 
 
 
 
 
 
 
441
 
442
- $element->add_control(
443
- 'ha_floating_fx_scale_delay',
444
- [
445
- 'label' => __( 'Delay', 'happy-elementor-addons' ),
446
- 'type' => Controls_Manager::SLIDER,
447
- 'size_units' => ['px'],
448
- 'range' => [
449
- 'px' => [
450
- 'min' => 0,
451
- 'max' => 5000,
452
- 'step' => 100
453
- ]
454
- ],
455
- 'condition' => [
456
- 'ha_floating_fx_scale_toggle' => 'yes',
457
- 'ha_floating_fx' => 'yes',
458
- ],
459
- 'render_type' => 'none',
460
- 'frontend_available' => true,
461
- ]
462
- );
 
 
 
 
 
 
 
 
 
 
 
 
463
 
464
- $element->end_popover();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
465
 
466
- $element->add_control(
467
- 'ha_hr',
468
- [
469
- 'type' => Controls_Manager::DIVIDER,
470
- ]
471
- );
472
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
473
 
474
- public static function add_css_effects( Element_Base $element ) {
475
- $element->add_control(
476
- 'ha_transform_fx',
477
- [
478
- 'label' => __( 'CSS Transform', 'happy-elementor-addons' ),
479
- 'type' => Controls_Manager::SWITCHER,
480
- 'return_value' => 'yes',
481
- ]
482
- );
483
 
484
- $element->add_control(
485
- 'ha_transform_fx_translate_toggle',
486
- [
487
- 'label' => __( 'Translate', 'happy-elementor-addons' ),
488
- 'type' => Controls_Manager::POPOVER_TOGGLE,
489
- 'return_value' => 'yes',
490
- 'condition' => [
491
- 'ha_transform_fx' => 'yes',
492
- ],
493
- ]
494
- );
 
 
 
 
495
 
496
- $element->start_popover();
 
 
 
 
 
 
 
497
 
498
- $element->add_responsive_control(
499
- 'ha_transform_fx_translate_x',
500
- [
501
- 'label' => __( 'Translate X', 'happy-elementor-addons' ),
502
- 'type' => Controls_Manager::SLIDER,
503
- 'size_units' => ['px'],
504
- 'range' => [
505
- 'px' => [
506
- 'min' => -1000,
507
- 'max' => 1000,
508
- ]
509
- ],
510
- 'condition' => [
511
- 'ha_transform_fx_translate_toggle' => 'yes',
512
- 'ha_transform_fx' => 'yes',
513
- ],
514
- ]
515
- );
516
 
517
- $element->add_responsive_control(
518
- 'ha_transform_fx_translate_y',
519
- [
520
- 'label' => __( 'Translate Y', 'happy-elementor-addons' ),
521
- 'type' => Controls_Manager::SLIDER,
522
- 'size_units' => ['px'],
523
- 'range' => [
524
- 'px' => [
525
- 'min' => -1000,
526
- 'max' => 1000,
527
- ]
528
- ],
529
- 'condition' => [
530
- 'ha_transform_fx_translate_toggle' => 'yes',
531
- 'ha_transform_fx' => 'yes',
532
- ],
533
- 'selectors' => [
534
- '(desktop){{WRAPPER}}' =>
535
- '-ms-transform:'
536
- . 'translate({{ha_transform_fx_translate_x.SIZE || 0}}px, {{ha_transform_fx_translate_y.SIZE || 0}}px);'
537
- . '-webkit-transform:'
538
- . 'translate({{ha_transform_fx_translate_x.SIZE || 0}}px, {{ha_transform_fx_translate_y.SIZE || 0}}px);'
539
- . 'transform:'
540
- . 'translate({{ha_transform_fx_translate_x.SIZE || 0}}px, {{ha_transform_fx_translate_y.SIZE || 0}}px);',
541
- '(tablet){{WRAPPER}}' =>
542
- '-ms-transform:'
543
- . 'translate({{ha_transform_fx_translate_x_tablet.SIZE || 0}}px, {{ha_transform_fx_translate_y_tablet.SIZE || 0}}px);'
544
- . '-webkit-transform:'
545
- . 'translate({{ha_transform_fx_translate_x_tablet.SIZE || 0}}px, {{ha_transform_fx_translate_y_tablet.SIZE || 0}}px);'
546
- . 'transform:'
547
- . 'translate({{ha_transform_fx_translate_x_tablet.SIZE || 0}}px, {{ha_transform_fx_translate_y_tablet.SIZE || 0}}px);',
548
- '(mobile){{WRAPPER}}' =>
549
- '-ms-transform:'
550
- . 'translate({{ha_transform_fx_translate_x_mobile.SIZE || 0}}px, {{ha_transform_fx_translate_y_mobile.SIZE || 0}}px);'
551
- . '-webkit-transform:'
552
- . 'translate({{ha_transform_fx_translate_x_mobile.SIZE || 0}}px, {{ha_transform_fx_translate_y_mobile.SIZE || 0}}px);'
553
- . 'transform:'
554
- . 'translate({{ha_transform_fx_translate_x_mobile.SIZE || 0}}px, {{ha_transform_fx_translate_y_mobile.SIZE || 0}}px);',
555
- ]
556
- ]
557
- );
558
 
559
- $element->end_popover();
560
 
561
- $element->add_control(
562
- 'ha_transform_fx_rotate_toggle',
563
- [
564
- 'label' => __( 'Rotate', 'happy-elementor-addons' ),
565
- 'type' => Controls_Manager::POPOVER_TOGGLE,
566
- 'condition' => [
567
- 'ha_transform_fx' => 'yes',
568
- ],
569
- ]
570
- );
 
 
 
 
 
 
 
 
 
 
 
571
 
572
- $element->start_popover();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
573
 
574
- $element->add_responsive_control(
575
- 'ha_transform_fx_rotate_x',
576
- [
577
- 'label' => __( 'Rotate X', 'happy-elementor-addons' ),
578
- 'type' => Controls_Manager::SLIDER,
579
- 'size_units' => ['px'],
580
- 'range' => [
581
- 'px' => [
582
- 'min' => -180,
583
- 'max' => 180,
584
- ]
585
- ],
586
- 'condition' => [
587
- 'ha_transform_fx_rotate_toggle' => 'yes',
588
- 'ha_transform_fx' => 'yes',
589
- ],
590
- ]
591
- );
592
 
593
- $element->add_responsive_control(
594
- 'ha_transform_fx_rotate_y',
595
- [
596
- 'label' => __( 'Rotate Y', 'happy-elementor-addons' ),
597
- 'type' => Controls_Manager::SLIDER,
598
- 'size_units' => ['px'],
599
- 'range' => [
600
- 'px' => [
601
- 'min' => -180,
602
- 'max' => 180,
603
- ]
604
- ],
605
- 'condition' => [
606
- 'ha_transform_fx_rotate_toggle' => 'yes',
607
- 'ha_transform_fx' => 'yes',
608
- ],
609
- ]
610
- );
611
 
612
- $element->add_responsive_control(
613
- 'ha_transform_fx_rotate_z',
614
- [
615
- 'label' => __( 'Rotate Z', 'happy-elementor-addons' ),
616
- 'type' => Controls_Manager::SLIDER,
617
- 'size_units' => ['px'],
618
- 'range' => [
619
- 'px' => [
620
- 'min' => -180,
621
- 'max' => 180,
622
- ]
623
- ],
624
- 'condition' => [
625
- 'ha_transform_fx_rotate_toggle' => 'yes',
626
- 'ha_transform_fx' => 'yes',
627
- ],
628
- 'selectors' => [
629
- '(desktop){{WRAPPER}}' =>
630
- '-ms-transform:'
631
- . 'translate({{ha_transform_fx_translate_x.SIZE || 0}}px, {{ha_transform_fx_translate_y.SIZE || 0}}px) '
632
- . 'rotateX({{ha_transform_fx_rotate_x.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z.SIZE || 0}}deg);'
633
- . '-webkit-transform:'
634
- . 'translate({{ha_transform_fx_translate_x.SIZE || 0}}px, {{ha_transform_fx_translate_y.SIZE || 0}}px) '
635
- . 'rotateX({{ha_transform_fx_rotate_x.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z.SIZE || 0}}deg);'
636
- . 'transform:'
637
- . 'translate({{ha_transform_fx_translate_x.SIZE || 0}}px, {{ha_transform_fx_translate_y.SIZE || 0}}px) '
638
- . 'rotateX({{ha_transform_fx_rotate_x.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z.SIZE || 0}}deg);',
639
- '(tablet){{WRAPPER}}' =>
640
- '-ms-transform:'
641
- . 'translate({{ha_transform_fx_translate_x_tablet.SIZE || 0}}px, {{ha_transform_fx_translate_y_tablet.SIZE || 0}}px) '
642
- . 'rotateX({{ha_transform_fx_rotate_x_tablet.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y_tablet.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z_tablet.SIZE || 0}}deg);'
643
- . '-webkit-transform:'
644
- . 'translate({{ha_transform_fx_translate_x_tablet.SIZE || 0}}px, {{ha_transform_fx_translate_y_tablet.SIZE || 0}}px) '
645
- . 'rotateX({{ha_transform_fx_rotate_x_tablet.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y_tablet.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z_tablet.SIZE || 0}}deg);'
646
- . 'transform:'
647
- . 'translate({{ha_transform_fx_translate_x_tablet.SIZE || 0}}px, {{ha_transform_fx_translate_y_tablet.SIZE || 0}}px) '
648
- . 'rotateX({{ha_transform_fx_rotate_x_tablet.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y_tablet.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z_tablet.SIZE || 0}}deg);',
649
- '(mobile){{WRAPPER}}' =>
650
- '-ms-transform:'
651
- . 'translate({{ha_transform_fx_translate_x_mobile.SIZE || 0}}px, {{ha_transform_fx_translate_y_mobile.SIZE || 0}}px) '
652
- . 'rotateX({{ha_transform_fx_rotate_x_mobile.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y_mobile.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z_mobile.SIZE || 0}}deg);'
653
- . '-webkit-transform:'
654
- . 'translate({{ha_transform_fx_translate_x_mobile.SIZE || 0}}px, {{ha_transform_fx_translate_y_mobile.SIZE || 0}}px) '
655
- . 'rotateX({{ha_transform_fx_rotate_x_mobile.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y_mobile.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z_mobile.SIZE || 0}}deg);'
656
- . 'transform:'
657
- . 'translate({{ha_transform_fx_translate_x_mobile.SIZE || 0}}px, {{ha_transform_fx_translate_y_mobile.SIZE || 0}}px) '
658
- . 'rotateX({{ha_transform_fx_rotate_x_mobile.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y_mobile.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z_mobile.SIZE || 0}}deg);'
659
- ]
660
- ]
661
- );
662
 
663
- $element->end_popover();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
664
 
665
- $element->add_control(
666
- 'ha_transform_fx_scale_toggle',
667
- [
668
- 'label' => __( 'Scale', 'happy-elementor-addons' ),
669
- 'type' => Controls_Manager::POPOVER_TOGGLE,
670
- 'return_value' => 'yes',
671
- 'condition' => [
672
- 'ha_transform_fx' => 'yes',
673
- ],
674
- ]
675
- );
676
 
677
- $element->start_popover();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
678
 
679
- $element->add_responsive_control(
680
- 'ha_transform_fx_scale_x',
681
- [
682
- 'label' => __( 'Scale X', 'happy-elementor-addons' ),
683
- 'type' => Controls_Manager::SLIDER,
684
- 'size_units' => ['px'],
685
- 'default' => [
686
- 'size' => 1
687
- ],
688
- 'range' => [
689
- 'px' => [
690
- 'min' => 0,
691
- 'max' => 5,
692
- 'step' => .1
693
- ]
694
- ],
695
- 'condition' => [
696
- 'ha_transform_fx_scale_toggle' => 'yes',
697
- 'ha_transform_fx' => 'yes',
698
- ],
699
- ]
700
- );
701
 
702
- $element->add_responsive_control(
703
- 'ha_transform_fx_scale_y',
704
- [
705
- 'label' => __( 'Scale Y', 'happy-elementor-addons' ),
706
- 'type' => Controls_Manager::SLIDER,
707
- 'size_units' => ['px'],
708
- 'default' => [
709
- 'size' => 1
710
- ],
711
- 'range' => [
712
- 'px' => [
713
- 'min' => 0,
714
- 'max' => 5,
715
- 'step' => .1
716
- ]
717
- ],
718
- 'condition' => [
719
- 'ha_transform_fx_scale_toggle' => 'yes',
720
- 'ha_transform_fx' => 'yes',
721
- ],
722
- 'selectors' => [
723
- '(desktop){{WRAPPER}}' =>
724
- '-ms-transform:'
725
- . 'translate({{ha_transform_fx_translate_x.SIZE || 0}}px, {{ha_transform_fx_translate_y.SIZE || 0}}px) '
726
- . 'rotateX({{ha_transform_fx_rotate_x.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z.SIZE || 0}}deg) '
727
- . 'scaleX({{ha_transform_fx_scale_x.SIZE || 1}}) scaleY({{ha_transform_fx_scale_y.SIZE || 1}});'
728
- . '-webkit-transform:'
729
- . 'translate({{ha_transform_fx_translate_x.SIZE || 0}}px, {{ha_transform_fx_translate_y.SIZE || 0}}px) '
730
- . 'rotateX({{ha_transform_fx_rotate_x.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z.SIZE || 0}}deg) '
731
- . 'scaleX({{ha_transform_fx_scale_x.SIZE || 1}}) scaleY({{ha_transform_fx_scale_y.SIZE || 1}});'
732
- . 'transform:'
733
- . 'translate({{ha_transform_fx_translate_x.SIZE || 0}}px, {{ha_transform_fx_translate_y.SIZE || 0}}px) '
734
- . 'rotateX({{ha_transform_fx_rotate_x.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z.SIZE || 0}}deg) '
735
- . 'scaleX({{ha_transform_fx_scale_x.SIZE || 1}}) scaleY({{ha_transform_fx_scale_y.SIZE || 1}});',
736
- '(tablet){{WRAPPER}}' =>
737
- '-ms-transform:'
738
- . 'translate({{ha_transform_fx_translate_x_tablet.SIZE || 0}}px, {{ha_transform_fx_translate_y_tablet.SIZE || 0}}px) '
739
- . 'rotateX({{ha_transform_fx_rotate_x_tablet.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y_tablet.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z_tablet.SIZE || 0}}deg) '
740
- . 'scaleX({{ha_transform_fx_scale_x_tablet.SIZE || 1}}) scaleY({{ha_transform_fx_scale_y_tablet.SIZE || 1}});'
741
- . '-webkit-transform:'
742
- . 'translate({{ha_transform_fx_translate_x_tablet.SIZE || 0}}px, {{ha_transform_fx_translate_y_tablet.SIZE || 0}}px) '
743
- . 'rotateX({{ha_transform_fx_rotate_x_tablet.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y_tablet.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z_tablet.SIZE || 0}}deg) '
744
- . 'scaleX({{ha_transform_fx_scale_x_tablet.SIZE || 1}}) scaleY({{ha_transform_fx_scale_y_tablet.SIZE || 1}});'
745
- . 'transform:'
746
- . 'translate({{ha_transform_fx_translate_x_tablet.SIZE || 0}}px, {{ha_transform_fx_translate_y_tablet.SIZE || 0}}px) '
747
- . 'rotateX({{ha_transform_fx_rotate_x_tablet.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y_tablet.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z_tablet.SIZE || 0}}deg) '
748
- . 'scaleX({{ha_transform_fx_scale_x_tablet.SIZE || 1}}) scaleY({{ha_transform_fx_scale_y_tablet.SIZE || 1}});',
749
- '(mobile){{WRAPPER}}' =>
750
- '-ms-transform:'
751
- . 'translate({{ha_transform_fx_translate_x_mobile.SIZE || 0}}px, {{ha_transform_fx_translate_y_mobile.SIZE || 0}}px) '
752
- . 'rotateX({{ha_transform_fx_rotate_x_mobile.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y_mobile.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z_mobile.SIZE || 0}}deg) '
753
- . 'scaleX({{ha_transform_fx_scale_x_mobile.SIZE || 1}}) scaleY({{ha_transform_fx_scale_y_mobile.SIZE || 1}});'
754
- . '-webkit-transform:'
755
- . 'translate({{ha_transform_fx_translate_x_mobile.SIZE || 0}}px, {{ha_transform_fx_translate_y_mobile.SIZE || 0}}px) '
756
- . 'rotateX({{ha_transform_fx_rotate_x_mobile.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y_mobile.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z_mobile.SIZE || 0}}deg) '
757
- . 'scaleX({{ha_transform_fx_scale_x_mobile.SIZE || 1}}) scaleY({{ha_transform_fx_scale_y_mobile.SIZE || 1}});'
758
- . 'transform:'
759
- . 'translate({{ha_transform_fx_translate_x_mobile.SIZE || 0}}px, {{ha_transform_fx_translate_y_mobile.SIZE || 0}}px) '
760
- . 'rotateX({{ha_transform_fx_rotate_x_mobile.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y_mobile.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z_mobile.SIZE || 0}}deg) '
761
- . 'scaleX({{ha_transform_fx_scale_x_mobile.SIZE || 1}}) scaleY({{ha_transform_fx_scale_y_mobile.SIZE || 1}});'
762
- ]
763
- ]
764
- );
765
 
766
- $element->end_popover();
767
 
768
- $element->add_control(
769
- 'ha_transform_fx_skew_toggle',
770
- [
771
- 'label' => __( 'Skew', 'happy-elementor-addons' ),
772
- 'type' => Controls_Manager::POPOVER_TOGGLE,
773
- 'return_value' => 'yes',
774
- 'condition' => [
775
- 'ha_transform_fx' => 'yes',
776
- ],
777
- ]
778
- );
779
 
780
- $element->start_popover();
781
 
782
- $element->add_responsive_control(
783
- 'ha_transform_fx_skew_x',
784
- [
785
- 'label' => __( 'Skew X', 'happy-elementor-addons' ),
786
- 'type' => Controls_Manager::SLIDER,
787
- 'size_units' => ['deg'],
788
- 'range' => [
789
- 'px' => [
790
- 'min' => -180,
791
- 'max' => 180,
792
- ]
793
- ],
794
- 'condition' => [
795
- 'ha_transform_fx_skew_toggle' => 'yes',
796
- 'ha_transform_fx' => 'yes',
797
- ],
798
- ]
799
- );
 
800
 
801
- $element->add_responsive_control(
802
- 'ha_transform_fx_skew_y',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
803
  [
804
- 'label' => __( 'Skew Y', 'happy-elementor-addons' ),
805
- 'type' => Controls_Manager::SLIDER,
806
- 'size_units' => ['deg'],
807
- 'range' => [
808
- 'px' => [
809
- 'min' => -180,
810
- 'max' => 180,
811
- ]
812
- ],
813
- 'condition' => [
814
- 'ha_transform_fx_skew_toggle' => 'yes',
815
- 'ha_transform_fx' => 'yes',
816
- ],
817
- 'selectors' => [
818
- '(desktop){{WRAPPER}}' =>
819
- '-ms-transform:'
820
- . 'translate({{ha_transform_fx_translate_x.SIZE || 0}}px, {{ha_transform_fx_translate_y.SIZE || 0}}px) '
821
- . 'rotateX({{ha_transform_fx_rotate_x.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z.SIZE || 0}}deg) '
822
- . 'scaleX({{ha_transform_fx_scale_x.SIZE || 1}}) scaleY({{ha_transform_fx_scale_y.SIZE || 1}}) '
823
- . 'skew({{ha_transform_fx_skew_x.SIZE || 0}}deg, {{ha_transform_fx_skew_y.SIZE || 0}}deg);'
824
- . '-webkit-transform:'
825
- . 'translate({{ha_transform_fx_translate_x.SIZE || 0}}px, {{ha_transform_fx_translate_y.SIZE || 0}}px) '
826
- . 'rotateX({{ha_transform_fx_rotate_x.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z.SIZE || 0}}deg) '
827
- . 'scaleX({{ha_transform_fx_scale_x.SIZE || 1}}) scaleY({{ha_transform_fx_scale_y.SIZE || 1}}) '
828
- . 'skew({{ha_transform_fx_skew_x.SIZE || 0}}deg, {{ha_transform_fx_skew_y.SIZE || 0}}deg);'
829
- . 'transform:'
830
- . 'translate({{ha_transform_fx_translate_x.SIZE || 0}}px, {{ha_transform_fx_translate_y.SIZE || 0}}px) '
831
- . 'rotateX({{ha_transform_fx_rotate_x.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z.SIZE || 0}}deg) '
832
- . 'scaleX({{ha_transform_fx_scale_x.SIZE || 1}}) scaleY({{ha_transform_fx_scale_y.SIZE || 1}}) '
833
- . 'skew({{ha_transform_fx_skew_x.SIZE || 0}}deg, {{ha_transform_fx_skew_y.SIZE || 0}}deg);',
834
- '(tablet){{WRAPPER}}' =>
835
- '-ms-transform:'
836
- . 'translate({{ha_transform_fx_translate_x_tablet.SIZE || 0}}px, {{ha_transform_fx_translate_y_tablet.SIZE || 0}}px) '
837
- . 'rotateX({{ha_transform_fx_rotate_x_tablet.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y_tablet.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z_tablet.SIZE || 0}}deg) '
838
- . 'scaleX({{ha_transform_fx_scale_x_tablet.SIZE || 1}}) scaleY({{ha_transform_fx_scale_y_tablet.SIZE || 1}}) '
839
- . 'skew({{ha_transform_fx_skew_x_tablet.SIZE || 0}}deg, {{ha_transform_fx_skew_y_tablet.SIZE || 0}}deg);'
840
- . '-webkit-transform:'
841
- . 'translate({{ha_transform_fx_translate_x_tablet.SIZE || 0}}px, {{ha_transform_fx_translate_y_tablet.SIZE || 0}}px) '
842
- . 'rotateX({{ha_transform_fx_rotate_x_tablet.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y_tablet.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z_tablet.SIZE || 0}}deg) '
843
- . 'scaleX({{ha_transform_fx_scale_x_tablet.SIZE || 1}}) scaleY({{ha_transform_fx_scale_y_tablet.SIZE || 1}}) '
844
- . 'skew({{ha_transform_fx_skew_x_tablet.SIZE || 0}}deg, {{ha_transform_fx_skew_y_tablet.SIZE || 0}}deg);'
845
- . 'transform:'
846
- . 'translate({{ha_transform_fx_translate_x_tablet.SIZE || 0}}px, {{ha_transform_fx_translate_y_tablet.SIZE || 0}}px) '
847
- . 'rotateX({{ha_transform_fx_rotate_x_tablet.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y_tablet.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z_tablet.SIZE || 0}}deg) '
848
- . 'scaleX({{ha_transform_fx_scale_x_tablet.SIZE || 1}}) scaleY({{ha_transform_fx_scale_y_tablet.SIZE || 1}}) '
849
- . 'skew({{ha_transform_fx_skew_x_tablet.SIZE || 0}}deg, {{ha_transform_fx_skew_y_tablet.SIZE || 0}}deg);',
850
- '(mobile){{WRAPPER}}' =>
851
- '-ms-transform:'
852
- . 'translate({{ha_transform_fx_translate_x_mobile.SIZE || 0}}px, {{ha_transform_fx_translate_y_mobile.SIZE || 0}}px) '
853
- . 'rotateX({{ha_transform_fx_rotate_x_mobile.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y_mobile.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z_mobile.SIZE || 0}}deg) '
854
- . 'scaleX({{ha_transform_fx_scale_x_mobile.SIZE || 1}}) scaleY({{ha_transform_fx_scale_y_mobile.SIZE || 1}}) '
855
- . 'skew({{ha_transform_fx_skew_x_mobile.SIZE || 0}}deg, {{ha_transform_fx_skew_y_mobile.SIZE || 0}}deg);'
856
- . '-webkit-transform:'
857
- . 'translate({{ha_transform_fx_translate_x_mobile.SIZE || 0}}px, {{ha_transform_fx_translate_y_mobile.SIZE || 0}}px) '
858
- . 'rotateX({{ha_transform_fx_rotate_x_mobile.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y_mobile.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z_mobile.SIZE || 0}}deg) '
859
- . 'scaleX({{ha_transform_fx_scale_x_mobile.SIZE || 1}}) scaleY({{ha_transform_fx_scale_y_mobile.SIZE || 1}}) '
860
- . 'skew({{ha_transform_fx_skew_x_mobile.SIZE || 0}}deg, {{ha_transform_fx_skew_y_mobile.SIZE || 0}}deg);'
861
- . 'transform:'
862
- . 'translate({{ha_transform_fx_translate_x_mobile.SIZE || 0}}px, {{ha_transform_fx_translate_y_mobile.SIZE || 0}}px) '
863
- . 'rotateX({{ha_transform_fx_rotate_x_mobile.SIZE || 0}}deg) rotateY({{ha_transform_fx_rotate_y_mobile.SIZE || 0}}deg) rotateZ({{ha_transform_fx_rotate_z_mobile.SIZE || 0}}deg) '
864
- . 'scaleX({{ha_transform_fx_scale_x_mobile.SIZE || 1}}) scaleY({{ha_transform_fx_scale_y_mobile.SIZE || 1}}) '
865
- . 'skew({{ha_transform_fx_skew_x_mobile.SIZE || 0}}deg, {{ha_transform_fx_skew_y_mobile.SIZE || 0}}deg);'
866
- ]
867
  ]
868
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
869
 
870
- $element->end_popover();
871
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
872
  }
 
 
8
 
9
  class Happy_Effects {
10
 
11
+ public static function init() {
12
+ add_action( 'elementor/element/common/_section_style/after_section_end', [ __CLASS__, 'add_controls_section' ], 1 );
13
+ }
14
 
15
+ public static function add_controls_section( Element_Base $element ) {
16
+ $element->start_controls_section(
17
+ '_section_happy_effects',
18
+ [
19
+ 'label' => __( 'Happy Effects', 'happy-elementor-addons' ) . ha_get_section_icon(),
20
+ 'tab' => Controls_Manager::TAB_ADVANCED,
21
+ ]
22
+ );
23
 
24
+ if ( ha_is_floating_effects_enabled() ) {
25
+ self::add_floating_effects( $element );
26
+ }
27
 
28
+ if ( ha_is_floating_effects_enabled() && ha_is_css_transform_enabled() ) {
29
+ $element->add_control(
30
+ 'ha_effects_divider_1',
31
+ [
32
+ 'type' => Controls_Manager::DIVIDER,
33
+ ]
34
+ );
35
+ }
36
 
37
+ if ( ha_is_css_transform_enabled() ) {
38
+ self::add_css_effects( $element );
39
+ }
 
 
 
 
 
 
 
40
 
41
+ $element->end_controls_section();
42
+ }
 
 
 
 
 
 
 
 
 
 
43
 
44
+ public static function add_floating_effects( Element_Base $element ) {
45
+ $element->add_control(
46
+ 'ha_floating_fx',
47
+ [
48
+ 'label' => __( 'Floating Effects', 'happy-elementor-addons' ),
49
+ 'type' => Controls_Manager::SWITCHER,
50
+ 'return_value' => 'yes',
51
+ 'frontend_available' => true,
52
+ ]
53
+ );
54
 
55
+ $element->add_control(
56
+ 'ha_floating_fx_translate_toggle',
57
+ [
58
+ 'label' => __( 'Translate', 'happy-elementor-addons' ),
59
+ 'type' => Controls_Manager::POPOVER_TOGGLE,
60
+ 'return_value' => 'yes',
61
+ 'frontend_available' => true,
62
+ 'condition' => [
63
+ 'ha_floating_fx' => 'yes',
64
+ ]
65
+ ]
66
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
 
68
+ $element->start_popover();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
 
70
+ $element->add_control(
71
+ 'ha_floating_fx_translate_x',
72
+ [
73
+ 'label' => __( 'Translate X', 'happy-elementor-addons' ),
74
+ 'type' => Controls_Manager::SLIDER,
75
+ 'default' => [
76
+ 'sizes' => [
77
+ 'from' => 0,
78
+ 'to' => 5,
79
+ ],
80
+ 'unit' => 'px',
81
+ ],
82
+ 'range' => [
83
+ 'px' => [
84
+ 'min' => -100,
85
+ 'max' => 100,
86
+ ]
87
+ ],
88
+ 'labels' => [
89
+ __( 'From', 'happy-elementor-addons' ),
90
+ __( 'To', 'happy-elementor-addons' ),
91
+ ],
92
+ 'scales' => 1,
93
+ 'handles' => 'range',
94
+ 'condition' => [
95
+ 'ha_floating_fx_translate_toggle' => 'yes',
96
+ 'ha_floating_fx' => 'yes',
97
+ ],
98
+ 'render_type' => 'none',
99
+ 'frontend_available' => true,
100
+ ]
101
+ );
102
 
103
+ $element->add_control(
104
+ 'ha_floating_fx_translate_y',
105
+ [
106
+ 'label' => __( 'Translate Y', 'happy-elementor-addons' ),
107
+ 'type' => Controls_Manager::SLIDER,
108
+ 'default' => [
109
+ 'sizes' => [
110
+ 'from' => 0,
111
+ 'to' => 5,
112
+ ],
113
+ 'unit' => 'px',
114
+ ],
115
+ 'range' => [
116
+ 'px' => [
117
+ 'min' => -100,
118
+ 'max' => 100,
119
+ ]
120
+ ],
121
+ 'labels' => [
122
+ __( 'From', 'happy-elementor-addons' ),
123
+ __( 'To', 'happy-elementor-addons' ),
124
+ ],
125
+ 'scales' => 1,
126
+ 'handles' => 'range',
127
+ 'condition' => [
128
+ 'ha_floating_fx_translate_toggle' => 'yes',
129
+ 'ha_floating_fx' => 'yes',
130
+ ],
131
+ 'render_type' => 'none',
132
+ 'frontend_available' => true,
133
+ ]
134
+ );
135
 
136
+ $element->add_control(
137
+ 'ha_floating_fx_translate_duration',
138
+ [
139
+ 'label' => __( 'Duration', 'happy-elementor-addons' ),
140
+ 'type' => Controls_Manager::SLIDER,
141
+ 'size_units' => ['px'],
142
+ 'range' => [
143
+ 'px' => [
144
+ 'min' => 0,
145
+ 'max' => 10000,
146
+ 'step' => 100
147
+ ]
148
+ ],
149
+ 'default' => [
150
+ 'size' => 1000,
151
+ ],
152
+ 'condition' => [
153
+ 'ha_floating_fx_translate_toggle' => 'yes',
154
+ 'ha_floating_fx' => 'yes',
155
+ ],
156
+ 'render_type' => 'none',
157
+ 'frontend_available' => true,
158
+ ]
159
+ );
160
 
161
+ $element->add_control(
162
+ 'ha_floating_fx_translate_delay',
163
+ [
164
+ 'label' => __( 'Delay', 'happy-elementor-addons' ),
165
+ 'type' => Controls_Manager::SLIDER,
166
+ 'size_units' => ['px'],
167
+ 'range' => [
168
+ 'px' => [
169
+ 'min' => 0,
170
+ 'max' => 5000,
171
+ 'step' => 100
172
+ ]
173
+ ],
174
+ 'condition' => [
175
+ 'ha_floating_fx_translate_toggle' => 'yes',
176
+ 'ha_floating_fx' => 'yes',
177
+ ],
178
+ 'render_type' => 'none',
179
+ 'frontend_available' => true,
180
+ ]
181
+ );
182
 
183
+ $element->end_popover();
184
 
185
+ $element->add_control(
186
+ 'ha_floating_fx_rotate_toggle',
187
+ [
188
+ 'label' => __( 'Rotate', 'happy-elementor-addons' ),
189
+ 'type' => Controls_Manager::POPOVER_TOGGLE,
190
+ 'return_value' => 'yes',
191
+ 'frontend_available' => true,
192
+ 'condition' => [
193
+ 'ha_floating_fx' => 'yes',
194
+ ]
195
+ ]
196
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
197
 
198
+ $element->start_popover();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
199
 
200
+ $element->add_control(
201
+ 'ha_floating_fx_rotate_x',
202
+ [
203
+ 'label' => __( 'Rotate X', 'happy-elementor-addons' ),
204
+ 'type' => Controls_Manager::SLIDER,
205
+ 'default' => [
206
+ 'sizes' => [
207
+ 'from' => 0,
208
+ 'to' => 45,
209
+ ],
210
+ 'unit' => 'px',
211
+ ],
212
+ 'range' => [
213
+ 'px' => [
214
+ 'min' => -180,
215
+ 'max' => 180,
216
+ ]
217
+ ],
218
+ 'labels' => [
219
+ __( 'From', 'happy-elementor-addons' ),
220
+ __( 'To', 'happy-elementor-addons' ),
221
+ ],
222
+ 'scales' => 1,
223
+ 'handles' => 'range',
224
+ 'condition' => [
225
+ 'ha_floating_fx_rotate_toggle' => 'yes',
226
+ 'ha_floating_fx' => 'yes',
227
+ ],
228
+ 'render_type' => 'none',
229
+ 'frontend_available' => true,
230
+ ]
231
+ );
232
 
233
+ $element->add_control(
234
+ 'ha_floating_fx_rotate_y',
235
+ [
236
+ 'label' => __( 'Rotate Y', 'happy-elementor-addons' ),
237
+ 'type' => Controls_Manager::SLIDER,
238
+ 'default' => [
239
+ 'sizes' => [
240
+ 'from' => 0,
241
+ 'to' => 45,
242
+ ],
243
+ 'unit' => 'px',
244
+ ],
245
+ 'range' => [
246
+ 'px' => [
247
+ 'min' => -180,
248
+ 'max' => 180,
249
+ ]
250
+ ],
251
+ 'labels' => [
252
+ __( 'From', 'happy-elementor-addons' ),
253
+ __( 'To', 'happy-elementor-addons' ),
254
+ ],
255
+ 'scales' => 1,
256
+ 'handles' => 'range',
257
+ 'condition' => [
258
+ 'ha_floating_fx_rotate_toggle' => 'yes',
259
+ 'ha_floating_fx' => 'yes',
260
+ ],
261
+ 'render_type' => 'none',
262
+ 'frontend_available' => true,
263
+ ]
264
+ );
265
 
266
+ $element->add_control(
267
+ 'ha_floating_fx_rotate_z',
268
+ [
269
+ 'label' => __( 'Rotate Z', 'happy-elementor-addons' ),
270
+ 'type' => Controls_Manager::SLIDER,
271
+ 'default' => [
272
+ 'sizes' => [
273
+ 'from' => 0,
274
+ 'to' => 45,
275
+ ],
276
+ 'unit' => 'px',
277
+ ],
278
+ 'range' => [
279
+ 'px' => [
280
+ 'min' => -180,
281
+ 'max' => 180,
282
+ ]
283
+ ],
284
+ 'labels' => [
285
+ __( 'From', 'happy-elementor-addons' ),
286
+ __( 'To', 'happy-elementor-addons' ),
287
+ ],
288
+ 'scales' => 1,
289
+ 'handles' => 'range',
290
+ 'condition' => [
291
+ 'ha_floating_fx_rotate_toggle' => 'yes',
292
+ 'ha_floating_fx' => 'yes',
293
+ ],
294
+ 'render_type' => 'none',
295
+ 'frontend_available' => true,
296
+ ]
297
+ );
298
 
299
+ $element->add_control(
300
+ 'ha_floating_fx_rotate_duration',
301
+ [
302
+ 'label' => __( 'Duration', 'happy-elementor-addons' ),
303
+ 'type' => Controls_Manager::SLIDER,
304
+ 'size_units' => ['px'],
305
+ 'range' => [
306
+ 'px' => [
307
+ 'min' => 0,
308
+ 'max' => 10000,
309
+ 'step' => 100
310
+ ]
311
+ ],
312
+ 'default' => [
313
+ 'size' => 1000,
314
+ ],
315
+ 'condition' => [
316
+ 'ha_floating_fx_rotate_toggle' => 'yes',
317
+ 'ha_floating_fx' => 'yes',
318
+ ],
319
+ 'render_type' => 'none',
320
+ 'frontend_available' => true,
321
+ ]
322
+ );
323
 
324
+ $element->add_control(
325
+ 'ha_floating_fx_rotate_delay',
326
+ [
327
+ 'label' => __( 'Delay', 'happy-elementor-addons' ),
328
+ 'type' => Controls_Manager::SLIDER,
329
+ 'size_units' => ['px'],
330
+ 'range' => [
331
+ 'px' => [
332
+ 'min' => 0,
333
+ 'max' => 5000,
334
+ 'step' => 100
335
+ ]
336
+ ],
337
+ 'condition' => [
338
+ 'ha_floating_fx_rotate_toggle' => 'yes',
339
+ 'ha_floating_fx' => 'yes',
340
+ ],
341
+ 'render_type' => 'none',
342
+ 'frontend_available' => true,
343
+ ]
344
+ );
345
 
346
+ $element->end_popover();
347
 
348
+ $element->add_control(
349
+ 'ha_floating_fx_scale_toggle',
350
+ [
351
+ 'label' => __( 'Scale', 'happy-elementor-addons' ),
352
+ 'type' => Controls_Manager::POPOVER_TOGGLE,
353
+ 'return_value' => 'yes',
354
+ 'frontend_available' => true,
355
+ 'condition' => [
356
+ 'ha_floating_fx' => 'yes',
357
+ ]
358
+ ]
359
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
360
 
361
+ $element->start_popover();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
362
 
363
+ $element->add_control(
364
+ 'ha_floating_fx_scale_x',
365
+ [
366
+ 'label' => __( 'Scale X', 'happy-elementor-addons' ),
367
+ 'type' => Controls_Manager::SLIDER,
368
+ 'default' => [
369
+ 'sizes' => [
370
+ 'from' => 1,
371
+ 'to' => 1.2,
372
+ ],
373
+ 'unit' => 'px',
374
+ ],
375
+ 'range' => [
376
+ 'px' => [
377
+ 'min' => 0,
378
+ 'max' => 5,
379
+ 'step' => .1
380
+ ]
381
+ ],
382
+ 'labels' => [
383
+ __( 'From', 'happy-elementor-addons' ),
384
+ __( 'To', 'happy-elementor-addons' ),
385
+ ],
386
+ 'scales' => 1,
387
+ 'handles' => 'range',
388
+ 'condition' => [
389
+ 'ha_floating_fx_scale_toggle' => 'yes',
390
+ 'ha_floating_fx' => 'yes',
391
+ ],
392
+ 'render_type' => 'none',
393
+ 'frontend_available' => true,
394
+ ]
395
+ );
396
 
397
+ $element->add_control(
398
+ 'ha_floating_fx_scale_y',
399
+ [
400
+ 'label' => __( 'Scale Y', 'happy-elementor-addons' ),
401
+ 'type' => Controls_Manager::SLIDER,
402
+ 'default' => [
403
+ 'sizes' => [
404
+ 'from' => 1,
405
+ 'to' => 1.2,
406
+ ],
407
+ 'unit' => 'px',
408
+ ],
409
+ 'range' => [
410
+ 'px' => [
411
+ 'min' => 0,
412
+ 'max' => 5,
413
+ 'step' => .1
414
+ ]
415
+ ],
416
+ 'labels' => [
417
+ __( 'From', 'happy-elementor-addons' ),
418
+ __( 'To', 'happy-elementor-addons' ),
419
+ ],
420
+ 'scales' => 1,
421
+ 'handles' => 'range',
422
+ 'condition' => [
423
+ 'ha_floating_fx_scale_toggle' => 'yes',
424
+ 'ha_floating_fx' => 'yes',
425
+ ],
426
+ 'render_type' => 'none',
427
+ 'frontend_available' => true,
428
+ ]
429
+ );
430
 
431
+ $element->add_control(
432
+ 'ha_floating_fx_scale_duration',
433
+ [
434
+ 'label' => __( 'Duration', 'happy-elementor-addons' ),
435
+ 'type' => Controls_Manager::SLIDER,
436
+ 'size_units' => ['px'],
437
+ 'range' => [
438
+ 'px' => [
439
+ 'min' => 0,
440
+ 'max' => 10000,
441
+ 'step' => 100
442
+ ]
443
+ ],
444
+ 'default' => [
445
+ 'size' => 1000,
446
+ ],
447
+ 'condition' => [
448
+ 'ha_floating_fx_scale_toggle' => 'yes',
449
+ 'ha_floating_fx' => 'yes',
450
+ ],
451
+ 'render_type' => 'none',
452
+ 'frontend_available' => true,
453
+ ]
454
+ );
455
 
456
+ $element->add_control(
457
+ 'ha_floating_fx_scale_delay',
458
+ [
459
+ 'label' => __( 'Delay', 'happy-elementor-addons' ),
460
+ 'type' => Controls_Manager::SLIDER,
461
+ 'size_units' => ['px'],
462
+ 'range' => [
463
+ 'px' => [
464
+ 'min' => 0,
465
+ 'max' => 5000,
466
+ 'step' => 100
467
+ ]
468
+ ],
469
+ 'condition' => [
470
+ 'ha_floating_fx_scale_toggle' => 'yes',
471
+ 'ha_floating_fx' => 'yes',
472
+ ],
473
+ 'render_type' => 'none',
474
+ 'frontend_available' => true,
475
+ ]
476
+ );
477
 
478
+ $element->end_popover();
479
+ }
 
 
 
 
 
 
 
480
 
481
+ /**
482
+ * Register transform controls
483
+ *
484
+ * @param Element_Base $element
485
+ * @return void
486
+ */
487
+ public static function add_css_effects( Element_Base $element ) {
488
+ $element->add_control(
489
+ 'ha_transform_fx',
490
+ [
491
+ 'label' => __( 'CSS Transform', 'happy-elementor-addons' ),
492
+ 'type' => Controls_Manager::SWITCHER,
493
+ 'return_value' => 'yes',
494
+ ]
495
+ );
496
 
497
+ $element->start_controls_tabs(
498
+ '_tabs_ha_transform',
499
+ [
500
+ 'condition' => [
501
+ 'ha_transform_fx' => 'yes',
502
+ ],
503
+ ]
504
+ );
505
 
506
+ $element->start_controls_tab(
507
+ '_tabs_ha_transform_normal',
508
+ [
509
+ 'label' => __( 'Normal', 'happy-elementor-addons' ),
510
+ 'condition' => [
511
+ 'ha_transform_fx' => 'yes',
512
+ ],
513
+ ]
514
+ );
 
 
 
 
 
 
 
 
 
515
 
516
+ $element->add_control(
517
+ 'ha_transform_fx_translate_toggle',
518
+ [
519
+ 'label' => __( 'Translate', 'happy-elementor-addons' ),
520
+ 'type' => Controls_Manager::POPOVER_TOGGLE,
521
+ 'return_value' => 'yes',
522
+ 'condition' => [
523
+ 'ha_transform_fx' => 'yes',
524
+ ],
525
+ ]
526
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
527
 
528
+ $element->start_popover();
529
 
530
+ $element->add_responsive_control(
531
+ 'ha_transform_fx_translate_x',
532
+ [
533
+ 'label' => __( 'Translate X', 'happy-elementor-addons' ),
534
+ 'type' => Controls_Manager::SLIDER,
535
+ 'size_units' => ['px'],
536
+ 'range' => [
537
+ 'px' => [
538
+ 'min' => -1000,
539
+ 'max' => 1000,
540
+ ]
541
+ ],
542
+ 'condition' => [
543
+ 'ha_transform_fx_translate_toggle' => 'yes',
544
+ 'ha_transform_fx' => 'yes',
545
+ ],
546
+ 'selectors' => [
547
+ '{{WRAPPER}}' => '--ha-tfx-translate-x: {{SIZE}}px;'
548
+ ],
549
+ ]
550
+ );
551
 
552
+ $element->add_responsive_control(
553
+ 'ha_transform_fx_translate_y',
554
+ [
555
+ 'label' => __( 'Translate Y', 'happy-elementor-addons' ),
556
+ 'type' => Controls_Manager::SLIDER,
557
+ 'size_units' => ['px'],
558
+ 'range' => [
559
+ 'px' => [
560
+ 'min' => -1000,
561
+ 'max' => 1000,
562
+ ]
563
+ ],
564
+ 'condition' => [
565
+ 'ha_transform_fx_translate_toggle' => 'yes',
566
+ 'ha_transform_fx' => 'yes',
567
+ ],
568
+ 'selectors' => [
569
+ '{{WRAPPER}}' => '--ha-tfx-translate-y: {{SIZE}}px;'
570
+ ],
571
+ ]
572
+ );
573
 
574
+ $element->end_popover();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
575
 
576
+ $element->add_control(
577
+ 'ha_transform_fx_rotate_toggle',
578
+ [
579
+ 'label' => __( 'Rotate', 'happy-elementor-addons' ),
580
+ 'type' => Controls_Manager::POPOVER_TOGGLE,
581
+ 'condition' => [
582
+ 'ha_transform_fx' => 'yes',
583
+ ],
584
+ ]
585
+ );
 
 
 
 
 
 
 
 
586
 
587
+ $element->start_popover();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
588
 
589
+ $element->add_control(
590
+ 'ha_transform_fx_rotate_mode',
591
+ [
592
+ 'label' => __( 'Mode', 'happy-elementor-addons' ),
593
+ 'type' => Controls_Manager::CHOOSE,
594
+ 'options' => [
595
+ 'compact' => [
596
+ 'title' => __( 'Compact', 'happy-elementor-addons' ),
597
+ 'icon' => 'eicon-plus-circle',
598
+ ],
599
+ 'loose' => [
600
+ 'title' => __( 'Loose', 'happy-elementor-addons' ),
601
+ 'icon' => 'eicon-minus-circle',
602
+ ],
603
+ ],
604
+ 'default' => 'loose',
605
+ 'toggle' => false
606
+ ]
607
+ );
608
 
609
+ $element->add_control(
610
+ 'ha_transform_fx_rotate_hr',
611
+ [
612
+ 'type' => Controls_Manager::DIVIDER,
613
+ ]
614
+ );
 
 
 
 
 
615
 
616
+ $element->add_responsive_control(
617
+ 'ha_transform_fx_rotate_x',
618
+ [
619
+ 'label' => __( 'Rotate X', 'happy-elementor-addons' ),
620
+ 'type' => Controls_Manager::SLIDER,
621
+ 'size_units' => ['px'],
622
+ 'range' => [
623
+ 'px' => [
624
+ 'min' => -180,
625
+ 'max' => 180,
626
+ ]
627
+ ],
628
+ 'condition' => [
629
+ 'ha_transform_fx_rotate_toggle' => 'yes',
630
+ 'ha_transform_fx' => 'yes',
631
+ 'ha_transform_fx_rotate_mode' => 'loose'
632
+ ],
633
+ 'selectors' => [
634
+ '{{WRAPPER}}' => '--ha-tfx-rotate-x: {{SIZE}}deg;'
635
+ ],
636
+ ]
637
+ );
638
 
639
+ $element->add_responsive_control(
640
+ 'ha_transform_fx_rotate_y',
641
+ [
642
+ 'label' => __( 'Rotate Y', 'happy-elementor-addons' ),
643
+ 'type' => Controls_Manager::SLIDER,
644
+ 'size_units' => ['px'],
645
+ 'range' => [
646
+ 'px' => [
647
+ 'min' => -180,
648
+ 'max' => 180,
649
+ ]
650
+ ],
651
+ 'condition' => [
652
+ 'ha_transform_fx_rotate_toggle' => 'yes',
653
+ 'ha_transform_fx' => 'yes',
654
+ 'ha_transform_fx_rotate_mode' => 'loose'
655
+ ],
656
+ 'selectors' => [
657
+ '{{WRAPPER}}' => '--ha-tfx-rotate-y: {{SIZE}}deg;'
658
+ ],
659
+ ]
660
+ );
661
 
662
+ $element->add_responsive_control(
663
+ 'ha_transform_fx_rotate_z',
664
+ [
665
+ 'label' => __( 'Rotate (Z)', 'happy-elementor-addons' ),
666
+ 'type' => Controls_Manager::SLIDER,
667
+ 'size_units' => ['px'],
668
+ 'range' => [
669
+ 'px' => [
670
+ 'min' => -180,
671
+ 'max' => 180,
672
+ ]
673
+ ],
674
+ 'condition' => [
675
+ 'ha_transform_fx_rotate_toggle' => 'yes',
676
+ 'ha_transform_fx' => 'yes',
677
+ ],
678
+ 'selectors' => [
679
+ '{{WRAPPER}}' => '--ha-tfx-rotate-z: {{SIZE}}deg;'
680
+ ],
681
+ ]
682
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
683
 
684
+ $element->end_popover();
685
 
686
+ $element->add_control(
687
+ 'ha_transform_fx_scale_toggle',
688
+ [
689
+ 'label' => __( 'Scale', 'happy-elementor-addons' ),
690
+ 'type' => Controls_Manager::POPOVER_TOGGLE,
691
+ 'return_value' => 'yes',
692
+ 'condition' => [
693
+ 'ha_transform_fx' => 'yes',
694
+ ],
695
+ ]
696
+ );
697
 
698
+ $element->start_popover();
699
 
700
+ $element->add_control(
701
+ 'ha_transform_fx_scale_mode',
702
+ [
703
+ 'label' => __( 'Mode', 'happy-elementor-addons' ),
704
+ 'type' => Controls_Manager::CHOOSE,
705
+ 'options' => [
706
+ 'compact' => [
707
+ 'title' => __( 'Compact', 'happy-elementor-addons' ),
708
+ 'icon' => 'eicon-plus-circle',
709
+ ],
710
+ 'loose' => [
711
+ 'title' => __( 'Loose', 'happy-elementor-addons' ),
712
+ 'icon' => 'eicon-minus-circle',
713
+ ],
714
+ ],
715
+ 'default' => 'loose',
716
+ 'toggle' => false
717
+ ]
718
+ );
719
 
720
+ $element->add_control(
721
+ 'ha_transform_fx_scale_hr',
722
+ [
723
+ 'type' => Controls_Manager::DIVIDER,
724
+ ]
725
+ );
726
+
727
+ $element->add_responsive_control(
728
+ 'ha_transform_fx_scale_x',
729
+ [
730
+ 'label' => __( 'Scale (X)', 'happy-elementor-addons' ),
731
+ 'type' => Controls_Manager::SLIDER,
732
+ 'size_units' => ['px'],
733
+ 'default' => [
734
+ 'size' => 1
735
+ ],
736
+ 'range' => [
737
+ 'px' => [
738
+ 'min' => 0,
739
+ 'max' => 5,
740
+ 'step' => .1
741
+ ]
742
+ ],
743
+ 'condition' => [
744
+ 'ha_transform_fx_scale_toggle' => 'yes',
745
+ 'ha_transform_fx' => 'yes',
746
+ ],
747
+ 'selectors' => [
748
+ '{{WRAPPER}}' => '--ha-tfx-scale-x: {{SIZE}}; --ha-tfx-scale-y: {{SIZE}};'
749
+ ],
750
+ ]
751
+ );
752
+
753
+ $element->add_responsive_control(
754
+ 'ha_transform_fx_scale_y',
755
+ [
756
+ 'label' => __( 'Scale Y', 'happy-elementor-addons' ),
757
+ 'type' => Controls_Manager::SLIDER,
758
+ 'size_units' => ['px'],
759
+ 'default' => [
760
+ 'size' => 1
761
+ ],
762
+ 'range' => [
763
+ 'px' => [
764
+ 'min' => 0,
765
+ 'max' => 5,
766
+ 'step' => .1
767
+ ]
768
+ ],
769
+ 'condition' => [
770
+ 'ha_transform_fx_scale_toggle' => 'yes',
771
+ 'ha_transform_fx' => 'yes',
772
+ 'ha_transform_fx_scale_mode' => 'loose',
773
+ ],
774
+ 'selectors' => [
775
+ '{{WRAPPER}}' => '--ha-tfx-scale-y: {{SIZE}};'
776
+ ],
777
+ ]
778
+ );
779
+
780
+ $element->end_popover();
781
+
782
+ $element->add_control(
783
+ 'ha_transform_fx_skew_toggle',
784
+ [
785
+ 'label' => __( 'Skew', 'happy-elementor-addons' ),
786
+ 'type' => Controls_Manager::POPOVER_TOGGLE,
787
+ 'return_value' => 'yes',
788
+ 'condition' => [
789
+ 'ha_transform_fx' => 'yes',
790
+ ],
791
+ ]
792
+ );
793
+
794
+ $element->start_popover();
795
+
796
+ $element->add_responsive_control(
797
+ 'ha_transform_fx_skew_x',
798
+ [
799
+ 'label' => __( 'Skew X', 'happy-elementor-addons' ),
800
+ 'type' => Controls_Manager::SLIDER,
801
+ 'size_units' => ['deg'],
802
+ 'range' => [
803
+ 'px' => [
804
+ 'min' => -180,
805
+ 'max' => 180,
806
+ ]
807
+ ],
808
+ 'condition' => [
809
+ 'ha_transform_fx_skew_toggle' => 'yes',
810
+ 'ha_transform_fx' => 'yes',
811
+ ],
812
+ 'selectors' => [
813
+ '{{WRAPPER}}' => '--ha-tfx-skew-x: {{SIZE}}deg;'
814
+ ],
815
+ ]
816
+ );
817
+
818
+ $element->add_responsive_control(
819
+ 'ha_transform_fx_skew_y',
820
+ [
821
+ 'label' => __( 'Skew Y', 'happy-elementor-addons' ),
822
+ 'type' => Controls_Manager::SLIDER,
823
+ 'size_units' => ['deg'],
824
+ 'range' => [
825
+ 'px' => [
826
+ 'min' => -180,
827
+ 'max' => 180,
828
+ ]
829
+ ],
830
+ 'condition' => [
831
+ 'ha_transform_fx_skew_toggle' => 'yes',
832
+ 'ha_transform_fx' => 'yes',
833
+ ],
834
+ 'selectors' => [
835
+ '{{WRAPPER}}' => '--ha-tfx-skew-y: {{SIZE}}deg;'
836
+ ],
837
+ ]
838
+ );
839
+
840
+ $element->end_popover();
841
+
842
+ $element->end_controls_tab();
843
+
844
+ $element->start_controls_tab(
845
+ '_tabs_ha_transform_hover',
846
  [
847
+ 'label' => __( 'Hover', 'happy-elementor-addons' ),
848
+ 'condition' => [
849
+ 'ha_transform_fx' => 'yes',
850
+ ],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
851
  ]
852
+ );
853
+
854
+ $element->add_control(
855
+ 'ha_transform_fx_translate_toggle_hover',
856
+ [
857
+ 'label' => __( 'Translate', 'happy-elementor-addons' ),
858
+ 'type' => Controls_Manager::POPOVER_TOGGLE,
859
+ 'return_value' => 'yes',
860
+ 'condition' => [
861
+ 'ha_transform_fx' => 'yes',
862
+ ],
863
+ ]
864
+ );
865
+
866
+ $element->start_popover();
867
+
868
+ $element->add_responsive_control(
869
+ 'ha_transform_fx_translate_x_hover',
870
+ [
871
+ 'label' => __( 'Translate X', 'happy-elementor-addons' ),
872
+ 'type' => Controls_Manager::SLIDER,
873
+ 'size_units' => ['px'],
874
+ 'range' => [
875
+ 'px' => [
876
+ 'min' => -1000,
877
+ 'max' => 1000,
878
+ ]
879
+ ],
880
+ 'condition' => [
881
+ 'ha_transform_fx_translate_toggle_hover' => 'yes',
882
+ 'ha_transform_fx' => 'yes',
883
+ ],
884
+ 'selectors' => [
885
+ '{{WRAPPER}}' => '--ha-tfx-translate-x-hover: {{SIZE}}px;'
886
+ ],
887
+ ]
888
+ );
889
 
890
+ $element->add_responsive_control(
891
+ 'ha_transform_fx_translate_y_hover',
892
+ [
893
+ 'label' => __( 'Translate Y', 'happy-elementor-addons' ),
894
+ 'type' => Controls_Manager::SLIDER,
895
+ 'size_units' => ['px'],
896
+ 'range' => [
897
+ 'px' => [
898
+ 'min' => -1000,
899
+ 'max' => 1000,
900
+ ]
901
+ ],
902
+ 'condition' => [
903
+ 'ha_transform_fx_translate_toggle_hover' => 'yes',
904
+ 'ha_transform_fx' => 'yes',
905
+ ],
906
+ 'selectors' => [
907
+ '{{WRAPPER}}' => '--ha-tfx-translate-y-hover: {{SIZE}}px;'
908
+ ],
909
+ ]
910
+ );
911
+
912
+ $element->end_popover();
913
+
914
+ $element->add_control(
915
+ 'ha_transform_fx_rotate_toggle_hover',
916
+ [
917
+ 'label' => __( 'Rotate', 'happy-elementor-addons' ),
918
+ 'type' => Controls_Manager::POPOVER_TOGGLE,
919
+ 'condition' => [
920
+ 'ha_transform_fx' => 'yes',
921
+ ],
922
+ ]
923
+ );
924
+
925
+ $element->start_popover();
926
+
927
+ $element->add_control(
928
+ 'ha_transform_fx_rotate_mode_hover',
929
+ [
930
+ 'label' => __( 'Mode', 'happy-elementor-addons' ),
931
+ 'type' => Controls_Manager::CHOOSE,
932
+ 'options' => [
933
+ 'compact' => [
934
+ 'title' => __( 'Compact', 'happy-elementor-addons' ),
935
+ 'icon' => 'eicon-plus-circle',
936
+ ],
937
+ 'loose' => [
938
+ 'title' => __( 'Loose', 'happy-elementor-addons' ),
939
+ 'icon' => 'eicon-minus-circle',
940
+ ],
941
+ ],
942
+ 'default' => 'loose',
943
+ 'toggle' => false
944
+ ]
945
+ );
946
+
947
+ $element->add_control(
948
+ 'ha_transform_fx_rotate_hr_hover',
949
+ [
950
+ 'type' => Controls_Manager::DIVIDER,
951
+ ]
952
+ );
953
+
954
+ $element->add_responsive_control(
955
+ 'ha_transform_fx_rotate_x_hover',
956
+ [
957
+ 'label' => __( 'Rotate X', 'happy-elementor-addons' ),
958
+ 'type' => Controls_Manager::SLIDER,
959
+ 'size_units' => ['px'],
960
+ 'range' => [
961
+ 'px' => [
962
+ 'min' => -180,
963
+ 'max' => 180,
964
+ ]
965
+ ],
966
+ 'condition' => [
967
+ 'ha_transform_fx_rotate_toggle_hover' => 'yes',
968
+ 'ha_transform_fx' => 'yes',
969
+ 'ha_transform_fx_rotate_mode_hover' => 'loose'
970
+ ],
971
+ 'selectors' => [
972
+ '{{WRAPPER}}' => '--ha-tfx-rotate-x-hover: {{SIZE}}deg;'
973
+ ],
974
+ ]
975
+ );
976
+
977
+ $element->add_responsive_control(
978
+ 'ha_transform_fx_rotate_y_hover',
979
+ [
980
+ 'label' => __( 'Rotate Y', 'happy-elementor-addons' ),
981
+ 'type' => Controls_Manager::SLIDER,
982
+ 'size_units' => ['px'],
983
+ 'range' => [
984
+ 'px' => [
985
+ 'min' => -180,
986
+ 'max' => 180,
987
+ ]
988
+ ],
989
+ 'condition' => [
990
+ 'ha_transform_fx_rotate_toggle_hover' => 'yes',
991
+ 'ha_transform_fx' => 'yes',
992
+ 'ha_transform_fx_rotate_mode_hover' => 'loose'
993
+ ],
994
+ 'selectors' => [
995
+ '{{WRAPPER}}' => '--ha-tfx-rotate-y-hover: {{SIZE}}deg;'
996
+ ],
997
+ ]
998
+ );
999
+
1000
+ $element->add_responsive_control(
1001
+ 'ha_transform_fx_rotate_z_hover',
1002
+ [
1003
+ 'label' => __( 'Rotate (Z)', 'happy-elementor-addons' ),
1004
+ 'type' => Controls_Manager::SLIDER,
1005
+ 'size_units' => ['px'],
1006
+ 'range' => [
1007
+ 'px' => [
1008
+ 'min' => -180,
1009
+ 'max' => 180,
1010
+ ]
1011
+ ],
1012
+ 'condition' => [
1013
+ 'ha_transform_fx_rotate_toggle_hover' => 'yes',
1014
+ 'ha_transform_fx' => 'yes',
1015
+ ],
1016
+ 'selectors' => [
1017
+ '{{WRAPPER}}' => '--ha-tfx-rotate-z-hover: {{SIZE}}deg;'
1018
+ ],
1019
+ ]
1020
+ );
1021
+
1022
+ $element->end_popover();
1023
+
1024
+ $element->add_control(
1025
+ 'ha_transform_fx_scale_toggle_hover',
1026
+ [
1027
+ 'label' => __( 'Scale', 'happy-elementor-addons' ),
1028
+ 'type' => Controls_Manager::POPOVER_TOGGLE,
1029
+ 'return_value' => 'yes',
1030
+ 'condition' => [
1031
+ 'ha_transform_fx' => 'yes',
1032
+ ],
1033
+ ]
1034
+ );
1035
+
1036
+ $element->start_popover();
1037
+
1038
+ $element->add_control(
1039
+ 'ha_transform_fx_scale_mode_hover',
1040
+ [
1041
+ 'label' => __( 'Mode', 'happy-elementor-addons' ),
1042
+ 'type' => Controls_Manager::CHOOSE,
1043
+ 'options' => [
1044
+ 'compact' => [
1045
+ 'title' => __( 'Compact', 'happy-elementor-addons' ),
1046
+ 'icon' => 'eicon-plus-circle',
1047
+ ],
1048
+ 'loose' => [
1049
+ 'title' => __( 'Loose', 'happy-elementor-addons' ),
1050
+ 'icon' => 'eicon-minus-circle',
1051
+ ],
1052
+ ],
1053
+ 'default' => 'loose',
1054
+ 'toggle' => false
1055
+ ]
1056
+ );
1057
+
1058
+ $element->add_control(
1059
+ 'ha_transform_fx_scale_hr_hover',
1060
+ [
1061
+ 'type' => Controls_Manager::DIVIDER,
1062
+ ]
1063
+ );
1064
+
1065
+ $element->add_responsive_control(
1066
+ 'ha_transform_fx_scale_x_hover',
1067
+ [
1068
+ 'label' => __( 'Scale (X)', 'happy-elementor-addons' ),
1069
+ 'type' => Controls_Manager::SLIDER,
1070
+ 'size_units' => ['px'],
1071
+ 'default' => [
1072
+ 'size' => 1
1073
+ ],
1074
+ 'range' => [
1075
+ 'px' => [
1076
+ 'min' => 0,
1077
+ 'max' => 5,
1078
+ 'step' => .1
1079
+ ]
1080
+ ],
1081
+ 'condition' => [
1082
+ 'ha_transform_fx_scale_toggle_hover' => 'yes',
1083
+ 'ha_transform_fx' => 'yes',
1084
+ ],
1085
+ 'selectors' => [
1086
+ '{{WRAPPER}}' => '--ha-tfx-scale-x-hover: {{SIZE}}; --ha-tfx-scale-y-hover: {{SIZE}};'
1087
+ ],
1088
+ ]
1089
+ );
1090
+
1091
+ $element->add_responsive_control(
1092
+ 'ha_transform_fx_scale_y_hover',
1093
+ [
1094
+ 'label' => __( 'Scale Y', 'happy-elementor-addons' ),
1095
+ 'type' => Controls_Manager::SLIDER,
1096
+ 'size_units' => ['px'],
1097
+ 'default' => [
1098
+ 'size' => 1
1099
+ ],
1100
+ 'range' => [
1101
+ 'px' => [
1102
+ 'min' => 0,
1103
+ 'max' => 5,
1104
+ 'step' => .1
1105
+ ]
1106
+ ],
1107
+ 'condition' => [
1108
+ 'ha_transform_fx_scale_toggle_hover' => 'yes',
1109
+ 'ha_transform_fx' => 'yes',
1110
+ 'ha_transform_fx_scale_mode_hover' => 'loose',
1111
+ ],
1112
+ 'selectors' => [
1113
+ '{{WRAPPER}}' => '--ha-tfx-scale-y-hover: {{SIZE}};'
1114
+ ],
1115
+ ]
1116
+ );
1117
+
1118
+ $element->end_popover();
1119
+
1120
+ $element->add_control(
1121
+ 'ha_transform_fx_skew_toggle_hover',
1122
+ [
1123
+ 'label' => __( 'Skew', 'happy-elementor-addons' ),
1124
+ 'type' => Controls_Manager::POPOVER_TOGGLE,
1125
+ 'return_value' => 'yes',
1126
+ 'condition' => [
1127
+ 'ha_transform_fx' => 'yes',
1128
+ ],
1129
+ ]
1130
+ );
1131
+
1132
+ $element->start_popover();
1133
+
1134
+ $element->add_responsive_control(
1135
+ 'ha_transform_fx_skew_x_hover',
1136
+ [
1137
+ 'label' => __( 'Skew X', 'happy-elementor-addons' ),
1138
+ 'type' => Controls_Manager::SLIDER,
1139
+ 'size_units' => ['deg'],
1140
+ 'range' => [
1141
+ 'px' => [
1142
+ 'min' => -180,
1143
+ 'max' => 180,
1144
+ ]
1145
+ ],
1146
+ 'condition' => [
1147
+ 'ha_transform_fx_skew_toggle_hover' => 'yes',
1148
+ 'ha_transform_fx' => 'yes',
1149
+ ],
1150
+ 'selectors' => [
1151
+ '{{WRAPPER}}' => '--ha-tfx-skew-x-hover: {{SIZE}}deg;'
1152
+ ],
1153
+ ]
1154
+ );
1155
+
1156
+ $element->add_responsive_control(
1157
+ 'ha_transform_fx_skew_y_hover',
1158
+ [
1159
+ 'label' => __( 'Skew Y', 'happy-elementor-addons' ),
1160
+ 'type' => Controls_Manager::SLIDER,
1161
+ 'size_units' => ['deg'],
1162
+ 'range' => [
1163
+ 'px' => [
1164
+ 'min' => -180,
1165
+ 'max' => 180,
1166
+ ]
1167
+ ],
1168
+ 'condition' => [
1169
+ 'ha_transform_fx_skew_toggle_hover' => 'yes',
1170
+ 'ha_transform_fx' => 'yes',
1171
+ ],
1172
+ 'selectors' => [
1173
+ '{{WRAPPER}}' => '--ha-tfx-skew-y-hover: {{SIZE}}deg;'
1174
+ ],
1175
+ ]
1176
+ );
1177
+
1178
+ $element->end_popover();
1179
+
1180
+ $element->add_control(
1181
+ 'ha_transform_fx_transition_duration',
1182
+ [
1183
+ 'label' => __( 'Transition Duration', 'happy-elementor-addons' ),
1184
+ 'type' => Controls_Manager::SLIDER,
1185
+ 'separator' => 'before',
1186
+ 'size_units' => ['px'],
1187
+ 'range' => [
1188
+ 'px' => [
1189
+ 'min' => 0,
1190
+ 'max' => 3,
1191
+ 'step' => .1,
1192
+ ]
1193
+ ],
1194
+ 'condition' => [
1195
+ 'ha_transform_fx' => 'yes',
1196
+ ],
1197
+ 'selectors' => [
1198
+ '{{WRAPPER}}' => '--ha-tfx-transition-duration: {{SIZE}}s;'
1199
+ ],
1200
+ ]
1201
+ );
1202
+
1203
+ $element->end_controls_tab();
1204
+
1205
+ $element->end_controls_tabs();
1206
+ }
1207
  }
1208
+
1209
+ Happy_Effects::init();
extensions/happy-grid.php CHANGED
@@ -2,7 +2,6 @@
2
  namespace Happy_Addons\Elementor\Extension;
3
 
4
  use Elementor\Controls_Manager;
5
- use Elementor\Element_Base;
6
 
7
  defined( 'ABSPATH' ) || die();
8
 
@@ -260,3 +259,5 @@ class Happy_Grid {
260
  }
261
 
262
  }
 
 
2
  namespace Happy_Addons\Elementor\Extension;
3
 
4
  use Elementor\Controls_Manager;
 
5
 
6
  defined( 'ABSPATH' ) || die();
7
 
259
  }
260
 
261
  }
262
+
263
+ Happy_Grid::init();
extensions/widgets-extended.php CHANGED
@@ -162,3 +162,5 @@ class Widgets_Extended {
162
  $widget->end_popover();
163
  }
164
  }
 
 
162
  $widget->end_popover();
163
  }
164
  }
165
+
166
+ Widgets_Extended::init();
extensions/wrapper-link.php CHANGED
@@ -61,3 +61,5 @@ class Wrapper_Link {
61
  }
62
  }
63
  }
 
 
61
  }
62
  }
63
  }
64
+
65
+ Wrapper_Link::init();
inc/functions-extensions.php ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Filters function defination
4
+ *
5
+ * @package Happy_Addons
6
+ * @since 2.13.0
7
+ * @author HappyMonster
8
+ *
9
+ */
10
+ defined( 'ABSPATH' ) || die();
11
+
12
+ if ( ! function_exists( 'ha_is_adminbar_menu_enabled' ) ) {
13
+ /**
14
+ * Check if Adminbar is enabled
15
+ *
16
+ * @return bool
17
+ */
18
+ function ha_is_adminbar_menu_enabled() {
19
+ return apply_filters( 'happyaddons/extensions/adminbar_menu', true );
20
+ }
21
+ }
22
+
23
+ if ( ! function_exists( 'ha_is_background_overlay_enabled' ) ) {
24
+ /**
25
+ * Check if Background Overlay is enabled
26
+ *
27
+ * @return bool
28
+ */
29
+ function ha_is_background_overlay_enabled() {
30
+ return apply_filters( 'happyaddons/extensions/background_overlay', true );
31
+ }
32
+ }
33
+
34
+ if ( ! function_exists( 'ha_is_css_transform_enabled' ) ) {
35
+ /**
36
+ * Check if CSS Transform is enabled
37
+ *
38
+ * @return bool
39
+ */
40
+ function ha_is_css_transform_enabled() {
41
+ return apply_filters( 'happyaddons/extensions/css_transform', true );
42
+ }
43
+ }
44
+
45
+ if ( ! function_exists( 'ha_is_floating_effects_enabled' ) ) {
46
+ /**
47
+ * Check if Floating Effects is enabled
48
+ *
49
+ * @return bool
50
+ */
51
+ function ha_is_floating_effects_enabled() {
52
+ return apply_filters( 'happyaddons/extensions/floating_effects', true );
53
+ }
54
+ }
55
+
56
+ if ( ! function_exists( 'ha_is_grid_layer_enabled' ) ) {
57
+ /**
58
+ * Check if Grid Layer is enabled
59
+ *
60
+ * @return bool
61
+ */
62
+ function ha_is_grid_layer_enabled() {
63
+ return apply_filters( 'happyaddons/extensions/grid_layer', true );
64
+ }
65
+ }
66
+
67
+ if ( ! function_exists( 'ha_is_wrapper_link_enabled' ) ) {
68
+ /**
69
+ * Check if Wrapper Link is enabled
70
+ *
71
+ * @return bool
72
+ */
73
+ function ha_is_wrapper_link_enabled() {
74
+ return apply_filters( 'happyaddons/extensions/wrapper_link', true );
75
+ }
76
+ }
77
+
78
+ if ( ! function_exists( 'ha_is_happy_clone_enabled' ) ) {
79
+ /**
80
+ * Check if Happy Clone is enabled
81
+ *
82
+ * @return bool
83
+ */
84
+ function ha_is_happy_clone_enabled() {
85
+ return apply_filters( 'happyaddons/extensions/happy_clone', true );
86
+ }
87
+ }
88
+
89
+ if ( ! function_exists( 'ha_is_on_demand_cache_enabled' ) ) {
90
+ /**
91
+ * Check if On Demand Cache is enabled
92
+ *
93
+ * @return bool
94
+ */
95
+ function ha_is_on_demand_cache_enabled() {
96
+ return apply_filters( 'happyaddons/extensions/on_demand_cache', true );
97
+ }
98
+ }
inc/functions.php CHANGED
@@ -79,61 +79,61 @@ function ha_is_localhost() {
79
 
80
  function ha_get_css_cursors() {
81
  return [
82
- 'default' => __( 'Default', 'happy-elementor-addons' ),
83
- 'alias' => __( 'Alias', 'happy-elementor-addons' ),
84
- 'all-scroll' => __( 'All scroll', 'happy-elementor-addons' ),
85
- 'auto' => __( 'Auto', 'happy-elementor-addons' ),
86
- 'cell' => __( 'Cell', 'happy-elementor-addons' ),
87
  'context-menu' => __( 'Context menu', 'happy-elementor-addons' ),
88
- 'col-resize' => __( 'Col-resize', 'happy-elementor-addons' ),
89
- 'copy' => __( 'Copy', 'happy-elementor-addons' ),
90
- 'crosshair' => __( 'Crosshair', 'happy-elementor-addons' ),
91
- 'e-resize' => __( 'E-resize', 'happy-elementor-addons' ),
92
- 'ew-resize' => __( 'EW-resize', 'happy-elementor-addons' ),
93
- 'grab' => __( 'Grab', 'happy-elementor-addons' ),
94
- 'grabbing' => __( 'Grabbing', 'happy-elementor-addons' ),
95
- 'help' => __( 'Help', 'happy-elementor-addons' ),
96
- 'move' => __( 'Move', 'happy-elementor-addons' ),
97
- 'n-resize' => __( 'N-resize', 'happy-elementor-addons' ),
98
- 'ne-resize' => __( 'NE-resize', 'happy-elementor-addons' ),
99
- 'nesw-resize' => __( 'NESW-resize', 'happy-elementor-addons' ),
100
- 'ns-resize' => __( 'NS-resize', 'happy-elementor-addons' ),
101
- 'nw-resize' => __( 'NW-resize', 'happy-elementor-addons' ),
102
- 'nwse-resize' => __( 'NWSE-resize', 'happy-elementor-addons' ),
103
- 'no-drop' => __( 'No-drop', 'happy-elementor-addons' ),
104
- 'not-allowed' => __( 'Not-allowed', 'happy-elementor-addons' ),
105
- 'pointer' => __( 'Pointer', 'happy-elementor-addons' ),
106
- 'progress' => __( 'Progress', 'happy-elementor-addons' ),
107
- 'row-resize' => __( 'Row-resize', 'happy-elementor-addons' ),
108
- 's-resize' => __( 'S-resize', 'happy-elementor-addons' ),
109
- 'se-resize' => __( 'SE-resize', 'happy-elementor-addons' ),
110
- 'sw-resize' => __( 'SW-resize', 'happy-elementor-addons' ),
111
- 'text' => __( 'Text', 'happy-elementor-addons' ),
112
- 'url' => __( 'URL', 'happy-elementor-addons' ),
113
- 'w-resize' => __( 'W-resize', 'happy-elementor-addons' ),
114
- 'wait' => __( 'Wait', 'happy-elementor-addons' ),
115
- 'zoom-in' => __( 'Zoom-in', 'happy-elementor-addons' ),
116
- 'zoom-out' => __( 'Zoom-out', 'happy-elementor-addons' ),
117
- 'none' => __( 'None', 'happy-elementor-addons' ),
118
  ];
119
  }
120
 
121
  function ha_get_css_blend_modes() {
122
  return [
123
- 'normal' => __( 'Normal', 'happy-elementor-addons' ),
124
- 'multiply' => __( 'Multiply', 'happy-elementor-addons' ),
125
- 'screen' => __( 'Screen', 'happy-elementor-addons' ),
126
- 'overlay' => __( 'Overlay', 'happy-elementor-addons' ),
127
- 'darken' => __( 'Darken', 'happy-elementor-addons' ),
128
- 'lighten' => __( 'Lighten', 'happy-elementor-addons' ),
129
  'color-dodge' => __( 'Color Dodge', 'happy-elementor-addons' ),
130
- 'color-burn' => __( 'Color Burn', 'happy-elementor-addons' ),
131
- 'saturation' => __( 'Saturation', 'happy-elementor-addons' ),
132
- 'difference' => __( 'Difference', 'happy-elementor-addons' ),
133
- 'exclusion' => __( 'Exclusion', 'happy-elementor-addons' ),
134
- 'hue' => __( 'Hue', 'happy-elementor-addons' ),
135
- 'color' => __( 'Color', 'happy-elementor-addons' ),
136
- 'luminosity' => __( 'Luminosity', 'happy-elementor-addons' ),
137
  ];
138
  }
139
 
@@ -189,13 +189,6 @@ function ha_get_happy_icons() {
189
  return \Happy_Addons\Elementor\Icons_Manager::get_happy_icons();
190
  }
191
 
192
- /**
193
- * @return bool
194
- */
195
- function ha_is_happy_mode_enabled() {
196
- return apply_filters( 'happyaddons_is_happy_mode_enabled', true );
197
- }
198
-
199
  /**
200
  * Get elementor instance
201
  *
@@ -216,8 +209,17 @@ function ha_get_allowed_html_tags( $level = 'basic' ) {
216
  'b' => [],
217
  'i' => [],
218
  'u' => [],
219
- 'em' => [],
220
  'br' => [],
 
 
 
 
 
 
 
 
 
221
  'abbr' => [
222
  'title' => [],
223
  ],
@@ -256,16 +258,7 @@ function ha_get_allowed_html_tags( $level = 'basic' ) {
256
  'acronym' => [
257
  'title' => [],
258
  ],
259
- 'strike' => [],
260
- 'small' => [],
261
- 'code' => [],
262
- 'mark' => [],
263
- 'del' => [],
264
- 'ins' => [],
265
- 'sub' => [],
266
- 'sup' => [],
267
  'hr' => [],
268
- 's' => [],
269
  ];
270
 
271
  $allowed_html = array_merge( $allowed_html, $tags );
79
 
80
  function ha_get_css_cursors() {
81
  return [
82
+ 'default' => __( 'Default', 'happy-elementor-addons' ),
83
+ 'alias' => __( 'Alias', 'happy-elementor-addons' ),
84
+ 'all-scroll' => __( 'All scroll', 'happy-elementor-addons' ),
85
+ 'auto' => __( 'Auto', 'happy-elementor-addons' ),
86
+ 'cell' => __( 'Cell', 'happy-elementor-addons' ),
87
  'context-menu' => __( 'Context menu', 'happy-elementor-addons' ),
88
+ 'col-resize' => __( 'Col-resize', 'happy-elementor-addons' ),
89
+ 'copy' => __( 'Copy', 'happy-elementor-addons' ),
90
+ 'crosshair' => __( 'Crosshair', 'happy-elementor-addons' ),
91
+ 'e-resize' => __( 'E-resize', 'happy-elementor-addons' ),
92
+ 'ew-resize' => __( 'EW-resize', 'happy-elementor-addons' ),
93
+ 'grab' => __( 'Grab', 'happy-elementor-addons' ),
94
+ 'grabbing' => __( 'Grabbing', 'happy-elementor-addons' ),
95
+ 'help' => __( 'Help', 'happy-elementor-addons' ),
96
+ 'move' => __( 'Move', 'happy-elementor-addons' ),
97
+ 'n-resize' => __( 'N-resize', 'happy-elementor-addons' ),
98
+ 'ne-resize' => __( 'NE-resize', 'happy-elementor-addons' ),
99
+ 'nesw-resize' => __( 'NESW-resize', 'happy-elementor-addons' ),
100
+ 'ns-resize' => __( 'NS-resize', 'happy-elementor-addons' ),
101
+ 'nw-resize' => __( 'NW-resize', 'happy-elementor-addons' ),
102
+ 'nwse-resize' => __( 'NWSE-resize', 'happy-elementor-addons' ),
103
+ 'no-drop' => __( 'No-drop', 'happy-elementor-addons' ),
104
+ 'not-allowed' => __( 'Not-allowed', 'happy-elementor-addons' ),
105
+ 'pointer' => __( 'Pointer', 'happy-elementor-addons' ),
106
+ 'progress' => __( 'Progress', 'happy-elementor-addons' ),
107
+ 'row-resize' => __( 'Row-resize', 'happy-elementor-addons' ),
108
+ 's-resize' => __( 'S-resize', 'happy-elementor-addons' ),
109
+ 'se-resize' => __( 'SE-resize', 'happy-elementor-addons' ),
110
+ 'sw-resize' => __( 'SW-resize', 'happy-elementor-addons' ),
111
+ 'text' => __( 'Text', 'happy-elementor-addons' ),
112
+ 'url' => __( 'URL', 'happy-elementor-addons' ),
113
+ 'w-resize' => __( 'W-resize', 'happy-elementor-addons' ),
114
+ 'wait' => __( 'Wait', 'happy-elementor-addons' ),
115
+ 'zoom-in' => __( 'Zoom-in', 'happy-elementor-addons' ),
116
+ 'zoom-out' => __( 'Zoom-out', 'happy-elementor-addons' ),
117
+ 'none' => __( 'None', 'happy-elementor-addons' ),
118
  ];
119
  }
120
 
121
  function ha_get_css_blend_modes() {
122
  return [
123
+ 'normal' => __( 'Normal', 'happy-elementor-addons' ),
124
+ 'multiply' => __( 'Multiply', 'happy-elementor-addons' ),
125
+ 'screen' => __( 'Screen', 'happy-elementor-addons' ),
126
+ 'overlay' => __( 'Overlay', 'happy-elementor-addons' ),
127
+ 'darken' => __( 'Darken', 'happy-elementor-addons' ),
128
+ 'lighten' => __( 'Lighten', 'happy-elementor-addons' ),
129
  'color-dodge' => __( 'Color Dodge', 'happy-elementor-addons' ),
130
+ 'color-burn' => __( 'Color Burn', 'happy-elementor-addons' ),
131
+ 'saturation' => __( 'Saturation', 'happy-elementor-addons' ),
132
+ 'difference' => __( 'Difference', 'happy-elementor-addons' ),
133
+ 'exclusion' => __( 'Exclusion', 'happy-elementor-addons' ),
134
+ 'hue' => __( 'Hue', 'happy-elementor-addons' ),
135
+ 'color' => __( 'Color', 'happy-elementor-addons' ),
136
+ 'luminosity' => __( 'Luminosity', 'happy-elementor-addons' ),
137
  ];
138
  }
139
 
189
  return \Happy_Addons\Elementor\Icons_Manager::get_happy_icons();
190
  }
191
 
 
 
 
 
 
 
 
192
  /**
193
  * Get elementor instance
194
  *
209
  'b' => [],
210
  'i' => [],
211
  'u' => [],
212
+ 's' => [],
213
  'br' => [],
214
+ 'em' => [],
215
+ 'del' => [],
216
+ 'ins' => [],
217
+ 'sub' => [],
218
+ 'sup' => [],
219
+ 'code' => [],
220
+ 'mark' => [],
221
+ 'small' => [],
222
+ 'strike' => [],
223
  'abbr' => [
224
  'title' => [],
225
  ],
258
  'acronym' => [
259
  'title' => [],
260
  ],
 
 
 
 
 
 
 
 
261
  'hr' => [],
 
262
  ];
263
 
264
  $allowed_html = array_merge( $allowed_html, $tags );
plugin.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Happy Elementor Addons
4
  * Plugin URI: https://happyaddons.com/
5
  * Description: <a href="https://happyaddons.com/">HappyAddons</a> 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. <a href="https://happyaddons.com/">HappyAddons</a> is free, rapidly growing and comes with great support.
6
- * Version: 2.12.3
7
  * Author: weDevs
8
  * Author URI: https://happyaddons.com/
9
  * License: GPLv2
@@ -34,7 +34,7 @@ Copyright 2019 HappyMonster <http://happymonster.me>
34
 
35
  defined( 'ABSPATH' ) || die();
36
 
37
- define( 'HAPPY_ADDONS_VERSION', '2.12.3' );
38
  define( 'HAPPY_ADDONS__FILE__', __FILE__ );
39
  define( 'HAPPY_ADDONS_DIR_PATH', plugin_dir_path( HAPPY_ADDONS__FILE__ ) );
40
  define( 'HAPPY_ADDONS_DIR_URL', plugin_dir_url( HAPPY_ADDONS__FILE__ ) );
3
  * Plugin Name: Happy Elementor Addons
4
  * Plugin URI: https://happyaddons.com/
5
  * Description: <a href="https://happyaddons.com/">HappyAddons</a> 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. <a href="https://happyaddons.com/">HappyAddons</a> is free, rapidly growing and comes with great support.
6
+ * Version: 2.13.0
7
  * Author: weDevs
8
  * Author URI: https://happyaddons.com/
9
  * License: GPLv2
34
 
35
  defined( 'ABSPATH' ) || die();
36
 
37
+ define( 'HAPPY_ADDONS_VERSION', '2.13.0' );
38
  define( 'HAPPY_ADDONS__FILE__', __FILE__ );
39
  define( 'HAPPY_ADDONS_DIR_PATH', plugin_dir_path( HAPPY_ADDONS__FILE__ ) );
40
  define( 'HAPPY_ADDONS_DIR_URL', plugin_dir_url( HAPPY_ADDONS__FILE__ ) );
readme.txt CHANGED
@@ -1,6 +1,6 @@
1
  === Happy Addons for Elementor ===
2
  Plugin Name: Happy Addons for Elementor
3
- Version: 2.12.3
4
  Author: weDevs
5
  Author URI: https://happyaddons.com/
6
  Contributors: thehappymonster, happyaddons, hasinhayder, mosaddek73, tareq1988, sourav926, wedevs, iqbalrony, mrokon, obiplabon
@@ -258,6 +258,31 @@ For a more detailed explanation check out the following documentation
258
 
259
  == Changelog ==
260
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
261
  = 2.12.3 - 13 July 2020 =
262
 
263
  - Tweak: Twitter feed widget icon updated
1
  === Happy Addons for Elementor ===
2
  Plugin Name: Happy Addons for Elementor
3
+ Version: 2.13.0
4
  Author: weDevs
5
  Author URI: https://happyaddons.com/
6
  Contributors: thehappymonster, happyaddons, hasinhayder, mosaddek73, tareq1988, sourav926, wedevs, iqbalrony, mrokon, obiplabon
258
 
259
  == Changelog ==
260
 
261
+ = 2.13.0 - 27 July 2020 =
262
+
263
+ - New: Data Table widget
264
+ - New: `happyaddons/extensions/grid_layer` hook to control Grid Layer
265
+ - New: `happyaddons/extensions/background_overlay` hook to control Background Overlay
266
+ - New: `happyaddons/extensions/wrapper_link` hook to control Wrapper Link
267
+ - New: `happyaddons/extensions/happy_clone` hook to control Happy Clone
268
+ - New: `happyaddons/extensions/adminbar_menu` hook to control Adminbar menu
269
+ - New: `happyaddons/extensions/floating_effects` hook to control Floating Effects
270
+ - New: `happyaddons/extensions/css_transform` hook to control CSS Transform
271
+ - New: `happyaddons/extensions/on_demand_cache` hook to control On Demand Assets Loading
272
+ - Tweak: Added CSS Transform hover state support
273
+ - Tweak: Added Stepflow direction arrow rotatation support
274
+ - Tweak: Added Card button full width support
275
+ - Tweak: Added Card responsive image positioning
276
+ - Tweak: Restored justify alignment in all widgets
277
+ - Tweak: Improved base styles in all widgets
278
+ - Tweak: Removed widget control panel link from editor panel
279
+ - Tweak: Removed HappyAddons shortcut link from finder
280
+ - Tweak: Removed unnecessary css
281
+ - Tweak: Post List content on/off option
282
+ - Tweak: Post List feature image left & top show option
283
+ - Fix: Post List date issue
284
+ - Fix: WPML link translation issue
285
+
286
  = 2.12.3 - 13 July 2020 =
287
 
288
  - Tweak: Twitter feed widget icon updated
widgets/bar-chart/widget.php CHANGED
@@ -40,7 +40,7 @@ class Bar_Chart extends Base {
40
  }
41
 
42
  public function get_keywords() {
43
- return [ 'chart', 'bar', 'statistic' ];
44
  }
45
 
46
  protected function register_content_controls() {
@@ -55,7 +55,7 @@ class Bar_Chart extends Base {
55
  $this->add_control(
56
  'chart_position',
57
  [
58
- 'label' => __( 'Chart Position', 'happy-elementor-addons' ),
59
  'type' => Controls_Manager::SELECT,
60
  'default' => 'bar',
61
  'options' => [
@@ -92,6 +92,7 @@ class Bar_Chart extends Base {
92
  [
93
  'label' => __( 'Label', 'happy-elementor-addons' ),
94
  'type' => Controls_Manager::TEXT,
 
95
  'dynamic' => [ 'active' => true ],
96
  ]
97
  );
@@ -100,6 +101,7 @@ class Bar_Chart extends Base {
100
  'data',
101
  [
102
  'label' => __( 'Data', 'happy-elementor-addons' ),
 
103
  'type' => Controls_Manager::TEXT,
104
  'description' => __( 'Write data values with comma ( , ) separator. Example: 4, 2, 6', 'happy-elementor-addons' ),
105
  ]
40
  }
41
 
42
  public function get_keywords() {
43
+ return [ 'chart', 'bar', 'statistic', 'graph' ];
44
  }
45
 
46
  protected function register_content_controls() {
55
  $this->add_control(
56
  'chart_position',
57
  [
58
+ 'label' => __( '', 'happy-elementor-addons' ),
59
  'type' => Controls_Manager::SELECT,
60
  'default' => 'bar',
61
  'options' => [
92
  [
93
  'label' => __( 'Label', 'happy-elementor-addons' ),
94
  'type' => Controls_Manager::TEXT,
95
+ 'label_block' => true,
96
  'dynamic' => [ 'active' => true ],
97
  ]
98
  );
101
  'data',
102
  [
103
  'label' => __( 'Data', 'happy-elementor-addons' ),
104
+ 'label_block' => true,
105
  'type' => Controls_Manager::TEXT,
106
  'description' => __( 'Write data values with comma ( , ) separator. Example: 4, 2, 6', 'happy-elementor-addons' ),
107
  ]
widgets/card/widget.php CHANGED
@@ -87,7 +87,7 @@ class Card extends Base {
87
  ]
88
  );
89
 
90
- $this->add_control(
91
  'image_position',
92
  [
93
  'label' => __( 'Image Position', 'happy-elementor-addons' ),
@@ -108,9 +108,19 @@ class Card extends Base {
108
  ],
109
  ],
110
  'toggle' => false,
111
- 'default' => 'top',
112
- 'prefix_class' => 'ha-card--',
 
 
113
  'style_transfer' => true,
 
 
 
 
 
 
 
 
114
  ]
115
  );
116
 
@@ -213,15 +223,19 @@ class Card extends Base {
213
  'options' => [
214
  'left' => [
215
  'title' => __( 'Left', 'happy-elementor-addons' ),
216
- 'icon' => 'fa fa-align-left',
217
  ],
218
  'center' => [
219
  'title' => __( 'Center', 'happy-elementor-addons' ),
220
- 'icon' => 'fa fa-align-center',
221
  ],
222
  'right' => [
223
  'title' => __( 'Right', 'happy-elementor-addons' ),
224
- 'icon' => 'fa fa-align-right',
 
 
 
 
225
  ],
226
  ],
227
  'toggle' => true,
@@ -263,10 +277,67 @@ class Card extends Base {
263
  'placeholder' => 'https://example.com',
264
  'dynamic' => [
265
  'active' => true,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
266
  ]
267
  ]
268
  );
269
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
270
  if ( ha_is_elementor_version( '<', '2.6.0' ) ) {
271
  $this->add_control(
272
  'button_icon',
@@ -296,17 +367,11 @@ class Card extends Base {
296
  'button_icon_position',
297
  [
298
  'label' => __( 'Icon Position', 'happy-elementor-addons' ),
299
- 'type' => Controls_Manager::CHOOSE,
300
  'label_block' => false,
301
  'options' => [
302
- 'before' => [
303
- 'title' => __( 'Before', 'happy-elementor-addons' ),
304
- 'icon' => 'eicon-h-align-left',
305
- ],
306
- 'after' => [
307
- 'title' => __( 'After', 'happy-elementor-addons' ),
308
- 'icon' => 'eicon-h-align-right',
309
- ],
310
  ],
311
  'default' => 'before',
312
  'toggle' => false,
@@ -366,8 +431,7 @@ class Card extends Base {
366
  ],
367
  ],
368
  'selectors' => [
369
- '{{WRAPPER}} .ha-card-figure' => 'flex: 0 0 {{SIZE}}{{UNIT}}; max-width: {{SIZE}}{{UNIT}};',
370
- '{{WRAPPER}}.ha-card--right .ha-card-body, {{WRAPPER}}.ha-card--left .ha-card-body' => 'flex: 0 0 calc(100% - {{SIZE || 50}}{{UNIT}}); max-width: calc(100% - {{SIZE || 50}}{{UNIT}});',
371
  ],
372
  ]
373
  );
@@ -418,7 +482,9 @@ class Card extends Base {
418
  'max' => 1000,
419
  ],
420
  ],
421
- 'render_type' => 'ui'
 
 
422
  ]
423
  );
424
 
@@ -438,23 +504,11 @@ class Card extends Base {
438
  ],
439
  ],
440
  'selectors' => [
441
- // Left image position styles
442
- '(desktop){{WRAPPER}}.ha-card--left .ha-card-body' => 'margin-left: {{image_offset_x.SIZE || 0}}{{UNIT}}; flex: 0 0 calc((100% - {{image_width.SIZE || 50}}{{image_width.UNIT}}) + (-1 * {{image_offset_x.SIZE || 0}}{{UNIT}})); max-width: calc((100% - {{image_width.SIZE || 50}}{{image_width.UNIT}}) + (-1 * {{image_offset_x.SIZE || 0}}{{UNIT}}));',
443
- '(tablet){{WRAPPER}}.ha-card--left .ha-card-body' => 'margin-left: {{image_offset_x_tablet.SIZE || 0}}{{UNIT}}; flex: 0 0 calc((100% - {{image_width_tablet.SIZE || 50}}{{image_width_tablet.UNIT}}) + (-1 * {{image_offset_x_tablet.SIZE || 0}}{{UNIT}})); max-width: calc((100% - {{image_width_tablet.SIZE || 50}}{{image_width_tablet.UNIT}}) + (-1 * {{image_offset_x_tablet.SIZE || 0}}{{UNIT}}));',
444
- '(mobile){{WRAPPER}}.ha-card--left .ha-card-body' => 'margin-left: {{image_offset_x_mobile.SIZE || 0}}{{UNIT}}; flex: 0 0 calc((100% - {{image_width_mobile.SIZE || 50}}{{image_width_mobile.UNIT}}) + (-1 * {{image_offset_x_mobile.SIZE || 0}}{{UNIT}})); max-width: calc((100% - {{image_width_mobile.SIZE || 50}}{{image_width_mobile.UNIT}}) + (-1 * {{image_offset_x_mobile.SIZE || 0}}{{UNIT}}));',
445
- // Image right position styles
446
- '(desktop){{WRAPPER}}.ha-card--right .ha-card-body' => 'margin-right: calc(-1 * {{image_offset_x.SIZE || 0}}{{UNIT}}); flex: 0 0 calc((100% - {{image_width.SIZE || 50}}{{image_width.UNIT}}) + {{image_offset_x.SIZE || 0}}{{UNIT}}); max-width: calc((100% - {{image_width.SIZE || 50}}{{image_width.UNIT}}) + {{image_offset_x.SIZE || 0}}{{UNIT}});',
447
- '(tablet){{WRAPPER}}.ha-card--right .ha-card-body' => 'margin-right: calc(-1 * {{image_offset_x_tablet.SIZE || 0}}{{UNIT}}); flex: 0 0 calc((100% - {{image_width_tablet.SIZE || 50}}{{image_width_tablet.UNIT}}) + {{image_offset_x_tablet.SIZE || 0}}{{UNIT}}); max-width: calc((100% - {{image_width_tablet.SIZE || 50}}{{image_width_tablet.UNIT}}) + {{image_offset_x_tablet.SIZE || 0}}{{UNIT}});',
448
- '(mobile){{WRAPPER}}.ha-card--right .ha-card-body' => 'margin-right: calc(-1 * {{image_offset_x_mobile.SIZE || 0}}{{UNIT}}); flex: 0 0 calc((100% - {{image_width_mobile.SIZE || 50}}{{image_width_mobile.UNIT}}) + {{image_offset_x_mobile.SIZE || 0}}{{UNIT}}); max-width: calc((100% - {{image_width_mobile.SIZE || 50}}{{image_width_mobile.UNIT}}) + {{image_offset_x_mobile.SIZE || 0}}{{UNIT}});',
449
- // Image translate styles
450
- '(desktop){{WRAPPER}} .ha-card-figure' => '-ms-transform: translate({{image_offset_x.SIZE || 0}}{{UNIT}}, {{image_offset_y.SIZE || 0}}{{UNIT}}); -webkit-transform: translate({{image_offset_x.SIZE || 0}}{{UNIT}}, {{image_offset_y.SIZE || 0}}{{UNIT}}); transform: translate({{image_offset_x.SIZE || 0}}{{UNIT}}, {{image_offset_y.SIZE || 0}}{{UNIT}});',
451
- '(tablet){{WRAPPER}} .ha-card-figure' => '-ms-transform: translate({{image_offset_x_tablet.SIZE || 0}}{{UNIT}}, {{image_offset_y_tablet.SIZE || 0}}{{UNIT}}); -webkit-transform: translate({{image_offset_x_tablet.SIZE || 0}}{{UNIT}}, {{image_offset_y_tablet.SIZE || 0}}{{UNIT}}); transform: translate({{image_offset_x_tablet.SIZE || 0}}{{UNIT}}, {{image_offset_y_tablet.SIZE || 0}}{{UNIT}});',
452
- '(mobile){{WRAPPER}} .ha-card-figure' => '-ms-transform: translate({{image_offset_x_mobile.SIZE || 0}}{{UNIT}}, {{image_offset_y_mobile.SIZE || 0}}{{UNIT}}); -webkit-transform: translate({{image_offset_x_mobile.SIZE || 0}}{{UNIT}}, {{image_offset_y_mobile.SIZE || 0}}{{UNIT}}); transform: translate({{image_offset_x_mobile.SIZE || 0}}{{UNIT}}, {{image_offset_y_mobile.SIZE || 0}}{{UNIT}});',
453
- // Card body styles
454
- '{{WRAPPER}}.ha-card--top .ha-card-body' => 'margin-top: {{SIZE}}{{UNIT}};',
455
  ],
456
  ]
457
  );
 
458
  $this->end_popover();
459
 
460
  $this->add_responsive_control(
@@ -620,14 +674,14 @@ class Card extends Base {
620
  'label' => __( 'Position', 'happy-elementor-addons' ),
621
  'type' => Controls_Manager::SELECT,
622
  'options' => [
623
- 'top-left' => __( 'Top Left', 'happy-elementor-addons' ),
624
- 'top-center' => __( 'Top Center', 'happy-elementor-addons' ),
625
- 'top-right' => __( 'Top Right', 'happy-elementor-addons' ),
626
- 'middle-left' => __( 'Middle Left', 'happy-elementor-addons' ),
627
- 'middle-center' => __( 'Middle Center', 'happy-elementor-addons' ),
628
  'middle-right' => __( 'Middle Right', 'happy-elementor-addons' ),
629
- 'bottom-left' => __( 'Bottom Left', 'happy-elementor-addons' ),
630
- 'bottom-center' => __( 'Bottom Center', 'happy-elementor-addons' ),
631
  'bottom-right' => __( 'Bottom Right', 'happy-elementor-addons' ),
632
  ],
633
  'default' => 'top-right',
@@ -662,7 +716,9 @@ class Card extends Base {
662
  'max' => 1000,
663
  ],
664
  ],
665
- 'render_type' => 'ui'
 
 
666
  ]
667
  );
668
 
@@ -682,9 +738,7 @@ class Card extends Base {
682
  ],
683
  ],
684
  'selectors' => [
685
- '(desktop){{WRAPPER}} .ha-badge' => '-ms-transform: translate({{badge_offset_x.SIZE || 0}}{{UNIT}}, {{badge_offset_y.SIZE || 0}}{{UNIT}}); -webkit-transform: translate({{badge_offset_x.SIZE || 0}}{{UNIT}}, {{badge_offset_y.SIZE || 0}}{{UNIT}}); transform: translate({{badge_offset_x.SIZE || 0}}{{UNIT}}, {{badge_offset_y.SIZE || 0}}{{UNIT}});',
686
- '(tablet){{WRAPPER}} .ha-badge' => '-ms-transform: translate({{badge_offset_x_tablet.SIZE || 0}}{{UNIT}}, {{badge_offset_y_tablet.SIZE || 0}}{{UNIT}}); -webkit-transform: translate({{badge_offset_x_tablet.SIZE || 0}}{{UNIT}}, {{badge_offset_y_tablet.SIZE || 0}}{{UNIT}}); transform: translate({{badge_offset_x_tablet.SIZE || 0}}{{UNIT}}, {{badge_offset_y_tablet.SIZE || 0}}{{UNIT}});',
687
- '(mobile){{WRAPPER}} .ha-badge' => '-ms-transform: translate({{badge_offset_x_mobile.SIZE || 0}}{{UNIT}}, {{badge_offset_y_mobile.SIZE || 0}}{{UNIT}}); -webkit-transform: translate({{badge_offset_x_mobile.SIZE || 0}}{{UNIT}}, {{badge_offset_y_mobile.SIZE || 0}}{{UNIT}}); transform: translate({{badge_offset_x_mobile.SIZE || 0}}{{UNIT}}, {{badge_offset_y_mobile.SIZE || 0}}{{UNIT}});',
688
  ],
689
  ]
690
  );
@@ -1048,7 +1102,7 @@ class Card extends Base {
1048
  <figure class="ha-card-figure">
1049
  <?php echo Group_Control_Image_Size::get_attachment_image_html( $settings, 'thumbnail', 'image' ); ?>
1050
  <?php if ( $settings['badge_text'] ) : ?>
1051
- <div <?php echo $this->get_render_attribute_string( 'badge_text' ); ?>><?php echo esc_html( $settings['badge_text'] ); ?></div>
1052
  <?php endif; ?>
1053
  </figure>
1054
  <?php endif; ?>
@@ -1105,7 +1159,7 @@ class Card extends Base {
1105
  <figure class="ha-card-figure">
1106
  <img class="elementor-animation-{{settings.hover_animation}}" src="{{ image_url }}">
1107
  <# if (settings.badge_text) { #>
1108
- <div {{{ view.getRenderAttributeString( 'badge_text' ) }}}>{{ settings.badge_text }}</div>
1109
  <# } #>
1110
  </figure>
1111
  <# } #>
87
  ]
88
  );
89
 
90
+ $this->add_responsive_control(
91
  'image_position',
92
  [
93
  'label' => __( 'Image Position', 'happy-elementor-addons' ),
108
  ],
109
  ],
110
  'toggle' => false,
111
+ 'desktop_default' => 'top',
112
+ 'tablet_default' => 'top',
113
+ 'mobile_default' => 'top',
114
+ 'prefix_class' => 'ha-card-%s-',
115
  'style_transfer' => true,
116
+ 'selectors' => [
117
+ '{{WRAPPER}} .elementor-widget-container' => '{{VALUE}};',
118
+ ],
119
+ 'selectors_dictionary' => [
120
+ 'left' => '-webkit-box-orient: horizontal; -webkit-box-direction: normal; -ms-flex-direction: row; flex-direction: row; text-align: left;',
121
+ 'top' => '-webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; text-align: left;',
122
+ 'right' => '-webkit-box-orient: horizontal; -webkit-box-direction: reverse; -ms-flex-direction: row-reverse; flex-direction: row-reverse; text-align: right;'
123
+ ]
124
  ]
125
  );
126
 
223
  'options' => [
224
  'left' => [
225
  'title' => __( 'Left', 'happy-elementor-addons' ),
226
+ 'icon' => 'eicon-text-align-left',
227
  ],
228
  'center' => [
229
  'title' => __( 'Center', 'happy-elementor-addons' ),
230
+ 'icon' => 'eicon-text-align-center',
231
  ],
232
  'right' => [
233
  'title' => __( 'Right', 'happy-elementor-addons' ),
234
+ 'icon' => 'eicon-text-align-right',
235
+ ],
236
+ 'justify' => [
237
+ 'title' => __( 'Justify', 'happy-elementor-addons' ),
238
+ 'icon' => 'eicon-text-align-justify',
239
  ],
240
  ],
241
  'toggle' => true,
277
  'placeholder' => 'https://example.com',
278
  'dynamic' => [
279
  'active' => true,
280
+ ],
281
+ 'default' => [
282
+ 'url' => '#'
283
+ ],
284
+ ]
285
+ );
286
+
287
+ $this->add_control(
288
+ 'button_fullwidth',
289
+ [
290
+ 'label' => __( 'Full Width?', 'happy-elementor-addons' ),
291
+ 'type' => Controls_Manager::SWITCHER,
292
+ 'default' => false,
293
+ 'return_value' => 'yes',
294
+ 'style_transfer' => true,
295
+ 'selectors' => [
296
+ '{{WRAPPER}} .ha-btn' => 'display: -webkit-box; display: -ms-flexbox; display: flex;',
297
  ]
298
  ]
299
  );
300
 
301
+ $this->add_control(
302
+ 'button_align',
303
+ [
304
+ 'label' => __( 'Alignment', 'happy-elementor-addons' ),
305
+ 'type' => Controls_Manager::CHOOSE,
306
+ 'options' => [
307
+ 'left' => [
308
+ 'title' => __( 'Left', 'happy-elementor-addons' ),
309
+ 'icon' => 'eicon-text-align-left',
310
+ ],
311
+ 'center' => [
312
+ 'title' => __( 'Center', 'happy-elementor-addons' ),
313
+ 'icon' => 'eicon-text-align-center',
314
+ ],
315
+ 'right' => [
316
+ 'title' => __( 'Right', 'happy-elementor-addons' ),
317
+ 'icon' => 'eicon-text-align-right',
318
+ ],
319
+ 'stretch' => [
320
+ 'title' => __( 'Stretch', 'happy-elementor-addons' ),
321
+ 'icon' => 'eicon-text-align-justify',
322
+ ],
323
+ ],
324
+ 'toggle' => false,
325
+ 'default' => 'center',
326
+ 'selectors' => [
327
+ '{{WRAPPER}} .ha-btn' => '{{VALUE}}',
328
+ ],
329
+ 'selectors_dictionary' => [
330
+ 'left' => '-webkit-box-pack: start; -ms-flex-pack: start; justify-content: flex-start;',
331
+ 'center' => '-webkit-box-pack: center; -ms-flex-pack: center; justify-content: center;',
332
+ 'right' => '-webkit-box-pack: end; -ms-flex-pack: end; justify-content: flex-end;',
333
+ 'stretch' => '-webkit-box-pack: justify; -ms-flex-pack: justify; justify-content: space-between;',
334
+ ],
335
+ 'condition' => [
336
+ 'button_fullwidth' => 'yes',
337
+ ],
338
+ ]
339
+ );
340
+
341
  if ( ha_is_elementor_version( '<', '2.6.0' ) ) {
342
  $this->add_control(
343
  'button_icon',
367
  'button_icon_position',
368
  [
369
  'label' => __( 'Icon Position', 'happy-elementor-addons' ),
370
+ 'type' => Controls_Manager::SELECT,
371
  'label_block' => false,
372
  'options' => [
373
+ 'before' => __( 'Before Text', 'happy-elementor-addons' ),
374
+ 'after' => __( 'After Text', 'happy-elementor-addons' ),
 
 
 
 
 
 
375
  ],
376
  'default' => 'before',
377
  'toggle' => false,
431
  ],
432
  ],
433
  'selectors' => [
434
+ '{{WRAPPER}}' => '--ha-card-image-width: {{SIZE}}{{UNIT}};'
 
435
  ],
436
  ]
437
  );
482
  'max' => 1000,
483
  ],
484
  ],
485
+ 'selectors' => [
486
+ '{{WRAPPER}}' => '--ha-card-image-offset-x: {{SIZE}}{{UNIT}};'
487
+ ]
488
  ]
489
  );
490
 
504
  ],
505
  ],
506
  'selectors' => [
507
+ '{{WRAPPER}}' => '--ha-card-image-offset-y: {{SIZE}}{{UNIT}};',
 
 
 
 
 
 
 
 
 
 
 
 
 
508
  ],
509
  ]
510
  );
511
+
512
  $this->end_popover();
513
 
514
  $this->add_responsive_control(
674
  'label' => __( 'Position', 'happy-elementor-addons' ),
675
  'type' => Controls_Manager::SELECT,
676
  'options' => [
677
+ 'top-left' => __( 'Top Left', 'happy-elementor-addons' ),
678
+ 'top-center' => __( 'Top Center', 'happy-elementor-addons' ),
679
+ 'top-right' => __( 'Top Right', 'happy-elementor-addons' ),
680
+ 'middle-left' => __( 'Middle Left', 'happy-elementor-addons' ),
681
+ 'middle-center' => __( 'Middle Center', 'happy-elementor-addons' ),
682
  'middle-right' => __( 'Middle Right', 'happy-elementor-addons' ),
683
+ 'bottom-left' => __( 'Bottom Left', 'happy-elementor-addons' ),
684
+ 'bottom-center' => __( 'Bottom Center', 'happy-elementor-addons' ),
685
  'bottom-right' => __( 'Bottom Right', 'happy-elementor-addons' ),
686
  ],
687
  'default' => 'top-right',
716
  'max' => 1000,
717
  ],
718
  ],
719
+ 'selectors' => [
720
+ '{{WRAPPER}} .ha-badge' => '--ha-badge-translate-x: {{SIZE}}{{UNIT}};',
721
+ ],
722
  ]
723
  );
724
 
738
  ],
739
  ],
740
  'selectors' => [
741
+ '{{WRAPPER}} .ha-badge' => '--ha-badge-translate-y: {{SIZE}}{{UNIT}};',
 
 
742
  ],
743
  ]
744
  );
1102
  <figure class="ha-card-figure">
1103
  <?php echo Group_Control_Image_Size::get_attachment_image_html( $settings, 'thumbnail', 'image' ); ?>
1104
  <?php if ( $settings['badge_text'] ) : ?>
1105
+ <span <?php echo $this->get_render_attribute_string( 'badge_text' ); ?>><?php echo esc_html( $settings['badge_text'] ); ?></span>
1106
  <?php endif; ?>
1107
  </figure>
1108
  <?php endif; ?>
1159
  <figure class="ha-card-figure">
1160
  <img class="elementor-animation-{{settings.hover_animation}}" src="{{ image_url }}">
1161
  <# if (settings.badge_text) { #>
1162
+ <span {{{ view.getRenderAttributeString( 'badge_text' ) }}}>{{ settings.badge_text }}</span>
1163
  <# } #>
1164
  </figure>
1165
  <# } #>
widgets/data-table/widget.php ADDED
@@ -0,0 +1,1131 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Data Table
4
+ *
5
+ * @package Happy_Addons
6
+ */
7
+
8
+ namespace Happy_Addons\Elementor\Widget;
9
+
10
+ use Elementor\Controls_Manager;
11
+ use Elementor\Icons_Manager;
12
+ use Elementor\Repeater;
13
+ use Elementor\Scheme_Typography;
14
+ use Elementor\Group_Control_Typography;
15
+ use Elementor\Group_Control_Border;
16
+ use Elementor\Group_Control_Background;
17
+ use Elementor\Group_Control_Box_Shadow;
18
+ use Elementor\Group_Control_Image_Size;
19
+ use Elementor\Utils;
20
+ use Elementor\Control_Media;
21
+
22
+ defined('ABSPATH') || die();
23
+
24
+ class Data_Table extends Base {
25
+
26
+ /**
27
+ * Get widget title.
28
+ *
29
+ * @return string Widget title.
30
+ * @since 1.0.0
31
+ * @access public
32
+ *
33
+ */
34
+ public function get_title() {
35
+ return __( 'Data Table', 'happy-elementor-addons' );
36
+ }
37
+
38
+ /**
39
+ * Get widget icon.
40
+ *
41
+ * @return string Widget icon.
42
+ * @since 1.0.0
43
+ * @access public
44
+ *
45
+ */
46
+ public function get_icon() {
47
+ return 'hm hm-data-table';
48
+ }
49
+
50
+ public function get_keywords() {
51
+ return ['data', 'table', 'statistics'];
52
+ }
53
+
54
+
55
+ /**
56
+ * Register content related controls
57
+ */
58
+ protected function register_content_controls() {
59
+ $this->start_controls_section(
60
+ '_section_table_column',
61
+ [
62
+ 'label' => __( 'Table Head', 'happy-elementor-addons' ),
63
+ 'tab' => Controls_Manager::TAB_CONTENT,
64
+ ]
65
+ );
66
+
67
+ $repeater = new Repeater();
68
+
69
+ $repeater->start_controls_tabs( '_tabs_column' );
70
+
71
+ $repeater->start_controls_tab(
72
+ '_tab_column_content',
73
+ [
74
+ 'label' => __( 'Content', 'happy-elementor-addons' ),
75
+ ]
76
+ );
77
+
78
+ $repeater->add_control(
79
+ 'column_name',
80
+ [
81
+ 'label' => __( 'Title', 'happy-elementor-addons' ),
82
+ 'type' => Controls_Manager::TEXT,
83
+ 'label_block' => true,
84
+ 'placeholder' => __( 'Column Name', 'happy-elementor-addons' ),
85
+ 'default' => __( 'Column One', 'happy-elementor-addons' ),
86
+ 'dynamic' => [
87
+ 'active' => true,
88
+ ]
89
+ ]
90
+ );
91
+
92
+ $repeater->add_control(
93
+ 'column_span',
94
+ [
95
+ 'label' => __( 'Col Span', 'happy-elementor-addons' ),
96
+ 'type' => Controls_Manager::NUMBER,
97
+ 'min' => 0,
98
+ 'max' => 50,
99
+ 'step' => 1
100
+ ]
101
+ );
102
+
103
+ $repeater->add_responsive_control(
104
+ 'column_media',
105
+ [
106
+ 'label' => __( 'Media', 'happy-elementor-addons' ),
107
+ 'type' => Controls_Manager::CHOOSE,
108
+ 'label_block' => false,
109
+ 'toggle' => false,
110
+ 'default' => 'none',
111
+ 'options' => [
112
+ 'none' => [
113
+ 'title' => __( 'None', 'happy-elementor-addons' ),
114
+ 'icon' => 'eicon-editor-close',
115
+ ],
116
+ 'icon' => [
117
+ 'title' => __( 'Icon', 'happy-elementor-addons' ),
118
+ 'icon' => 'eicon-info-circle',
119
+ ],
120
+ 'image' => [
121
+ 'title' => __( 'Image', 'happy-elementor-addons' ),
122
+ 'icon' => 'eicon-image-bold',
123
+ ],
124
+ ]
125
+ ]
126
+ );
127
+
128
+ $repeater->add_control(
129
+ 'column_icons',
130
+ [
131
+ 'label' => __( 'Icon', 'happy-elementor-addons' ),
132
+ 'type' => Controls_Manager::ICONS,
133
+ 'fa4compatibility' => 'column_icon',
134
+ 'label_block' => true,
135
+ 'condition' => [
136
+ 'column_media' => 'icon'
137
+ ],
138
+ ]
139
+ );
140
+
141
+ $repeater->add_control(
142
+ 'column_image',
143
+ [
144
+ 'label' => __( 'Image', 'happy-elementor-addons' ),
145
+ 'type' => Controls_Manager::MEDIA,
146
+ 'default' => [
147
+ 'url' => Utils::get_placeholder_image_src(),
148
+ ],
149
+ 'dynamic' => [
150
+ 'active' => true,
151
+ ],
152
+ 'condition' => [
153
+ 'column_media' => 'image'
154
+ ]
155
+ ]
156
+ );
157
+
158
+ $repeater->add_group_control(
159
+ Group_Control_Image_Size::get_type(),
160
+ [
161
+ 'name' => 'column_thumbnail',
162
+ 'default' => 'thumbnail',
163
+ 'separator' => 'none',
164
+ 'condition' => [
165
+ 'column_media' => 'image'
166
+ ]
167
+ ]
168
+ );
169
+
170
+ $repeater->end_controls_tab();
171
+
172
+ $repeater->start_controls_tab( '_tabs_column_style',
173
+ [
174
+ 'label' => __( 'Style', 'happy-elementor-addons' ),
175
+ ]
176
+ );
177
+
178
+ $repeater->add_control(
179
+ 'head_custom_color',
180
+ [
181
+ 'label' => __( 'Icon Color', 'happy-elementor-addons' ),
182
+ 'type' => Controls_Manager::COLOR,
183
+ 'condition' => [
184
+ 'column_media' => 'icon'
185
+ ],
186
+ 'selectors' => [
187
+ '{{WRAPPER}} {{CURRENT_ITEM}} .ha-table__head-column-cell-icon i' => 'color: {{VALUE}}',
188
+ ],
189
+ ]
190
+ );
191
+
192
+ $repeater->end_controls_tab();
193
+ $repeater->end_controls_tabs();
194
+
195
+ $this->add_control(
196
+ 'columns_data',
197
+ [
198
+ 'type' => Controls_Manager::REPEATER,
199
+ 'fields' => $repeater->get_controls(),
200
+ 'title_field' => '{{{ column_name }}}',
201
+ 'default' => [
202
+ [
203
+ 'column_name' => __( 'WordPress', 'happy-elementor-addons' )
204
+ ],
205
+ [
206
+ 'column_name' => __( 'Elementor', 'happy-elementor-addons' )
207
+ ],
208
+ [
209
+ 'column_name' => __( 'Happy Addons', 'happy-elementor-addons' )
210
+ ],
211
+ ]
212
+ ]
213
+ );
214
+
215
+ $this->add_responsive_control(
216
+ 'head_align',
217
+ [
218
+ 'label' => __( 'Alignment', 'happy-elementor-addons' ),
219
+ 'type' => Controls_Manager::CHOOSE,
220
+ 'separator' => 'before',
221
+ 'options' => [
222
+ 'left' => [
223
+ 'title' => __( 'Left', 'happy-elementor-addons' ),
224
+ 'icon' => 'fa fa-align-left',
225
+ ],
226
+ 'center' => [
227
+ 'title' => __( 'Center', 'happy-elementor-addons' ),
228
+ 'icon' => 'fa fa-align-center',
229
+ ],
230
+ 'right' => [
231
+ 'title' => __( 'Right', 'happy-elementor-addons' ),
232
+ 'icon' => 'fa fa-align-right',
233
+ ]
234
+ ],
235
+ 'default' => 'center',
236
+ 'toggle' => false,
237
+ 'prefix_class' => 'ha-column-alignment-',
238
+ 'selectors' => [
239
+ '{{WRAPPER}} .ha-table__head-column-cell' => 'text-align: {{VALUE}}'
240
+ ]
241
+ ]
242
+ );
243
+
244
+ $this->add_responsive_control(
245
+ 'icon_position',
246
+ [
247
+ 'label' => __( 'Icon Position', 'happy-elementor-addons' ),
248
+ 'type' => Controls_Manager::CHOOSE,
249
+ 'options' => [
250
+ 'left' => [
251
+ 'title' => __( 'Left', 'happy-elementor-addons' ),
252
+ 'icon' => 'eicon-h-align-left',
253
+ ],
254
+ 'right' => [
255
+ 'title' => __( 'Right', 'happy-elementor-addons' ),
256
+ 'icon' => 'eicon-h-align-right',
257
+ ],
258
+ 'top' => [
259
+ 'title' => __( 'Top', 'happy-elementor-addons' ),
260
+ 'icon' => 'eicon-v-align-top',
261
+ ],
262
+ 'bottom' => [
263
+ 'title' => __( 'Bottom', 'happy-elementor-addons' ),
264
+ 'icon' => 'eicon-v-align-bottom',
265
+ ],
266
+ ],
267
+ 'default' => 'right',
268
+ 'toggle' => false,
269
+ 'prefix_class' => 'ha-column-icon-'
270
+ ]
271
+ );
272
+
273
+ $this->end_controls_section();
274
+
275
+ $this->start_controls_section(
276
+ '_section_table_row',
277
+ [
278
+ 'label' => __( 'Row', 'happy-elementor-addons' ),
279
+ 'tab' => Controls_Manager::TAB_CONTENT,
280
+ ]
281
+ );
282
+
283
+ $repeater = new Repeater();
284
+
285
+ $repeater->add_control(
286
+ 'row_column_type',
287
+ [
288
+ 'label' => __( 'Row/Column', 'happy-elementor-addons' ),
289
+ 'type' => Controls_Manager::SELECT,
290
+ 'default' => 'row',
291
+ 'options' => [
292
+ 'row' => __( 'Row', 'happy-elementor-addons' ),
293
+ 'column' => __( 'Column', 'happy-elementor-addons' ),
294
+ ],
295
+ ]
296
+ );
297
+
298
+ $repeater->start_controls_tabs( '_tabs_row' );
299
+
300
+ $repeater->start_controls_tab(
301
+ '_tab_row_content',
302
+ [
303
+ 'label' => __( 'Content', 'happy-elementor-addons' ),
304
+ 'condition' => [
305
+ 'row_column_type' => 'column'
306
+ ],
307
+ ]
308
+ );
309
+
310
+ $repeater->add_control(
311
+ 'cell_name',
312
+ [
313
+ 'label' => __( 'Title', 'happy-elementor-addons' ),
314
+ 'type' => Controls_Manager::TEXT,
315
+ 'label_block' => true,
316
+ 'placeholder' => __( 'Cell Name', 'happy-elementor-addons' ),
317
+ 'dynamic' => [
318
+ 'active' => true,
319
+ ],
320
+ 'condition' => [
321
+ 'row_column_type' => 'column'
322
+ ],
323
+ ]
324
+ );
325
+
326
+ $repeater->add_control(
327
+ 'row_column_span',
328
+ [
329
+ 'label' => __( 'Col Span', 'happy-elementor-addons' ),
330
+ 'type' => Controls_Manager::NUMBER,
331
+ 'min' => 0,
332
+ 'max' => 50,
333
+ 'step' => 1,
334
+ 'condition' => [
335
+ 'row_column_type' => 'column'
336
+ ],
337
+ ]
338
+ );
339
+
340
+ $repeater->add_control(
341
+ 'row_span',
342
+ [
343
+ 'label' => __( 'Row Span', 'happy-elementor-addons' ),
344
+ 'type' => Controls_Manager::NUMBER,
345
+ 'min' => 0,
346
+ 'max' => 50,
347
+ 'step' => 1,
348
+ 'condition' => [
349
+ 'row_column_type' => 'column'
350
+ ],
351
+ ]
352
+ );
353
+
354
+ $repeater->add_control(
355
+ 'row_media',
356
+ [
357
+ 'label' => __( 'Media', 'happy-elementor-addons' ),
358
+ 'type' => Controls_Manager::CHOOSE,
359
+ 'label_block' => false,
360
+ 'toggle' => false,
361
+ 'default' => 'none',
362
+ 'condition' => [
363
+ 'row_column_type' => 'column'
364
+ ],
365
+ 'options' => [
366
+ 'icon' => [
367
+ 'title' => __( 'Icon', 'happy-elementor-addons' ),
368
+ 'icon' => 'eicon-info-circle',
369
+ ],
370
+ 'image' => [
371
+ 'title' => __( 'Image', 'happy-elementor-addons' ),
372
+ 'icon' => 'eicon-image-bold',
373
+ ],
374
+ 'none' => [
375
+ 'title' => __( 'None', 'happy-elementor-addons' ),
376
+ 'icon' => 'eicon-editor-close',
377
+ ],
378
+ ]
379
+ ]
380
+ );
381
+
382
+ $repeater->add_control(
383
+ 'row_icons',
384
+ [
385
+ 'label' => __( 'Icon', 'happy-elementor-addons' ),
386
+ 'type' => Controls_Manager::ICONS,
387
+ 'fa4compatibility' => 'row_icon',
388
+ 'label_block' => true,
389
+ 'condition' => [
390
+ 'row_media' => 'icon',
391
+ 'row_column_type' => 'column'
392
+ ],
393
+ ]
394
+ );
395
+
396
+ $repeater->add_control(
397
+ 'row_image',
398
+ [
399
+ 'label' => __( 'Image', 'happy-elementor-addons' ),
400
+ 'type' => Controls_Manager::MEDIA,
401
+ 'default' => [
402
+ 'url' => Utils::get_placeholder_image_src(),
403
+ ],
404
+ 'condition' => [
405
+ 'row_media' => 'image',
406
+ 'row_column_type' => 'column'
407
+ ],
408
+ 'dynamic' => [
409
+ 'active' => true,
410
+ ]
411
+ ]
412
+ );
413
+
414
+ $repeater->add_group_control(
415
+ Group_Control_Image_Size::get_type(),
416
+ [
417
+ 'name' => 'row_thumbnail',
418
+ 'default' => 'thumbnail',
419
+ 'separator' => 'none',
420
+ 'exclude' => [ 'custom' ],
421
+ 'condition' => [
422
+ 'row_media' => 'image',
423
+ 'row_column_type' => 'column'
424
+ ],
425
+ ]
426
+ );
427
+
428
+ $repeater->end_controls_tab();
429
+
430
+ $repeater->start_controls_tab( '_tabs_row_style',
431
+ [
432
+ 'label' => __( 'Style', 'happy-elementor-addons' ),
433
+ 'condition' => [
434
+ 'row_column_type' => 'column'
435
+ ],
436
+ ]
437
+ );
438
+
439
+ $repeater->add_control(
440
+ 'row_custom_background_color',
441
+ [
442
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
443
+ 'type' => Controls_Manager::COLOR,
444
+ 'condition' => [
445
+ 'row_column_type' => 'column'
446
+ ],
447
+ 'selectors' => [
448
+ '{{WRAPPER}} {{CURRENT_ITEM}}.ha-table__body-row-cell' => 'background-color: {{VALUE}}',
449
+ ],
450
+ ]
451
+ );
452
+
453
+ $repeater->add_control(
454
+ 'row_custom_text_color',
455
+ [
456
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
457
+ 'type' => Controls_Manager::COLOR,
458
+ 'condition' => [
459
+ 'row_column_type' => 'column'
460
+ ],
461
+ 'selectors' => [
462
+ '{{WRAPPER}} {{CURRENT_ITEM}} .ha-table__body-row-cell-text' => 'color: {{VALUE}}',
463
+ ],
464
+ ]
465
+ );
466
+
467
+ $repeater->add_control(
468
+ 'row_custom_icon_color',
469
+ [
470
+ 'label' => __( 'Icon Color', 'happy-elementor-addons' ),
471
+ 'type' => Controls_Manager::COLOR,
472
+ 'condition' => [
473
+ 'row_column_type' => 'column',
474
+ 'row_media' => 'icon'
475
+ ],
476
+ 'selectors' => [
477
+ '{{WRAPPER}} {{CURRENT_ITEM}} .ha-table__body-row-cell-icon i' => 'color: {{VALUE}}',
478
+ ],
479
+ ]
480
+ );
481
+
482
+ $repeater->add_responsive_control(
483
+ 'row_custom_icon_size',
484
+ [
485
+ 'label' => __( 'Icon/Image Size', 'happy-elementor-addons' ),
486
+ 'type' => Controls_Manager::SLIDER,
487
+ 'condition' => [
488
+ 'row_column_type' => 'column'
489
+ ],
490
+ 'selectors' => [
491
+ '{{WRAPPER}} {{CURRENT_ITEM}} .ha-table__body-row-cell-icon i' => 'font-size: {{SIZE}}{{UNIT}};',
492
+ '{{WRAPPER}} {{CURRENT_ITEM}} .ha-table__body-row-cell-icon img' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}};',
493
+ '{{WRAPPER}} {{CURRENT_ITEM}} .ha-table__body-row-cell-icon svg' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}};'
494
+ ],
495
+ ]
496
+ );
497
+
498
+ $repeater->end_controls_tab();
499
+ $repeater->end_controls_tabs();
500
+
501
+ $this->add_control(
502
+ 'row_starts',
503
+ [
504
+ 'label' => false,
505
+ 'type' => Controls_Manager::HIDDEN,
506
+ 'default' => __( 'Row Starts', 'happy-elementor-addons' ),
507
+ 'condition' => [
508
+ 'row_column_type' => 'row'
509
+ ],
510
+ ]
511
+ );
512
+
513
+ $this->add_control(
514
+ 'rows_data',
515
+ [
516
+ 'type' => Controls_Manager::REPEATER,
517
+ 'fields' => $repeater->get_controls(),
518
+ 'title_field' => '<# print( (row_column_type == "column" ) ? cell_name : ("Row Starts") ) #>',
519
+ 'default' => [
520
+ [
521
+ 'row_column_type' => 'row',
522
+ 'row_starts' => __( 'Row Starts', 'happy-elementor-addons' ),
523
+ ],
524
+ [
525
+ 'row_column_type' => 'column',
526
+ 'cell_name' => __( 'Stay Happy', 'happy-elementor-addons' )
527
+ ],
528
+ [
529
+ 'row_column_type' => 'column',
530
+ 'cell_name' => __( 'Stay Safe', 'happy-elementor-addons' )
531
+ ],
532
+ [
533
+ 'row_column_type' => 'column',
534
+ 'cell_name' => __( 'Spread Happiness', 'happy-elementor-addons' )
535
+ ],
536
+ ]
537
+ ]
538
+ );
539
+
540
+ $this->add_responsive_control(
541
+ 'row_align',
542
+ [
543
+ 'label' => __( 'Alignment', 'happy-elementor-addons' ),
544
+ 'type' => Controls_Manager::CHOOSE,
545
+ 'separator' => 'before',
546
+ 'options' => [
547
+ 'left' => [
548
+ 'title' => __( 'Left', 'happy-elementor-addons' ),
549
+ 'icon' => 'fa fa-align-left',
550
+ ],
551
+ 'center' => [
552
+ 'title' => __( 'Center', 'happy-elementor-addons' ),
553
+ 'icon' => 'fa fa-align-center',
554
+ ],
555
+ 'right' => [
556
+ 'title' => __( 'Right', 'happy-elementor-addons' ),
557
+ 'icon' => 'fa fa-align-right',
558
+ ]
559
+ ],
560
+ 'default' => 'left',
561
+ 'toggle' => false,
562
+ 'prefix_class' => 'ha-row-alignment-',
563
+ 'selectors' => [
564
+ '(desktop){{WRAPPER}} .ha-table__body-row-cell' => 'text-align: {{VALUE}}',
565
+ '(tablet){{WRAPPER}} .ha-table__body-row-cell' => 'text-align: {{VALUE}}',
566
+ '(mobile){{WRAPPER}} .ha-table__body-row-cell' => 'text-align: {{VALUE}}'
567
+ ]
568
+ ]
569
+ );
570
+
571
+ $this->add_responsive_control(
572
+ 'row_icon_position',
573
+ [
574
+ 'label' => __( 'Icon Position', 'happy-elementor-addons' ),
575
+ 'type' => Controls_Manager::CHOOSE,
576
+ 'options' => [
577
+ 'left' => [
578
+ 'title' => __( 'Left', 'happy-elementor-addons' ),
579
+ 'icon' => 'eicon-h-align-left',
580
+ ],
581
+ 'right' => [
582
+ 'title' => __( 'Right', 'happy-elementor-addons' ),
583
+ 'icon' => 'eicon-h-align-right',
584
+ ],
585
+ 'top' => [
586
+ 'title' => __( 'Top', 'happy-elementor-addons' ),
587
+ 'icon' => 'eicon-v-align-top',
588
+ ],
589
+ 'bottom' => [
590
+ 'title' => __( 'Bottom', 'happy-elementor-addons' ),
591
+ 'icon' => 'eicon-v-align-bottom',
592
+ ],
593
+ ],
594
+ 'default' => 'right',
595
+ 'toggle' => false,
596
+ 'prefix_class' => 'ha-row-icon-'
597
+ ]
598
+ );
599
+
600
+ $this->end_controls_section();
601
+
602
+ }
603
+
604
+
605
+ /**
606
+ * Register styles related controls
607
+ */
608
+ protected function register_style_controls() {
609
+
610
+ $this->start_controls_section(
611
+ '_section_table_head',
612
+ [
613
+ 'label' => __( 'Table Head', 'happy-elementor-addons' ),
614
+ 'tab' => Controls_Manager::TAB_STYLE,
615
+ ]
616
+ );
617
+
618
+ $this->add_responsive_control(
619
+ 'table_head_padding',
620
+ [
621
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
622
+ 'type' => Controls_Manager::DIMENSIONS,
623
+ 'size_units' => [ 'px', '%' ],
624
+ 'selectors' => [
625
+ '{{WRAPPER}} .ha-table .ha-table__head-column-cell' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
626
+ ],
627
+ ]
628
+ );
629
+
630
+ $this->add_responsive_control(
631
+ 'head_border_radius',
632
+ [
633
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
634
+ 'type' => Controls_Manager::SLIDER,
635
+ 'selectors' => [
636
+ '(desktop){{WRAPPER}} .ha-table .ha-table__head-column-cell:first-child' => 'border-top-left-radius: {{SIZE}}{{UNIT}};',
637
+ '(desktop){{WRAPPER}} .ha-table .ha-table__head-column-cell:last-child' => 'border-top-right-radius: {{SIZE}}{{UNIT}};',
638
+ '(tablet){{WRAPPER}} .ha-table .ha-table__head-column-cell:first-child' => 'border-top-left-radius: {{SIZE}}{{UNIT}};',
639
+ '(tablet){{WRAPPER}} .ha-table .ha-table__head-column-cell:last-child' => 'border-top-right-radius: {{SIZE}}{{UNIT}};',
640
+ '(mobile){{WRAPPER}} .ha-table .ha-table__head-column-cell' => 'border-radius: {{SIZE}}{{UNIT}};',
641
+ ],
642
+ ]
643
+ );
644
+
645
+ $this->add_group_control(
646
+ Group_Control_Border::get_type(),
647
+ [
648
+ 'name' => 'head_border',
649
+ 'selector' => '{{WRAPPER}} .ha-table .ha-table__head-column-cell',
650
+ ]
651
+ );
652
+
653
+ $this->add_group_control(
654
+ Group_Control_Background::get_type(),
655
+ [
656
+ 'name' => 'head_background_color',
657
+ 'types' => [ 'classic', 'gradient' ],
658
+ 'exclude' => [ 'image' ],
659
+ 'selector' => '{{WRAPPER}} .ha-table .ha-table__head-column-cell',
660
+ ]
661
+ );
662
+
663
+ $this->add_control(
664
+ '_heading_title',
665
+ [
666
+ 'type' => Controls_Manager::HEADING,
667
+ 'label' => __( 'Title', 'happy-elementor-addons' ),
668
+ 'separator' => 'before'
669
+ ]
670
+ );
671
+
672
+ $this->add_group_control(
673
+ Group_Control_Typography::get_type(),
674
+ [
675
+ 'name' => 'head_typography',
676
+ 'selector' => '{{WRAPPER}} .ha-table .ha-table__head-column-cell-text',
677
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3,
678
+ ]
679
+ );
680
+
681
+ $this->add_control(
682
+ 'head_text_color',
683
+ [
684
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
685
+ 'type' => Controls_Manager::COLOR,
686
+ 'selectors' => [
687
+ '{{WRAPPER}} .ha-table .ha-table__head-column-cell-wrap' => 'color: {{VALUE}}',
688
+ ],
689
+ ]
690
+ );
691
+
692
+ $this->add_control(
693
+ '_heading_icon',
694
+ [
695
+ 'type' => Controls_Manager::HEADING,
696
+ 'label' => __( 'Icon/Image', 'happy-elementor-addons' ),
697
+ 'separator' => 'before'
698
+ ]
699
+ );
700
+
701
+ $this->add_responsive_control(
702
+ 'icon_spacing',
703
+ [
704
+ 'label' => __( 'Spacing', 'happy-elementor-addons' ),
705
+ 'type' => Controls_Manager::DIMENSIONS,
706
+ 'size_units' => [ 'px', '%' ],
707
+ 'selectors' => [
708
+ '{{WRAPPER}} .ha-table .ha-table__head-column-cell-icon' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
709
+ ],
710
+ ]
711
+ );
712
+
713
+ $this->add_responsive_control(
714
+ 'head_icon',
715
+ [
716
+ 'label' => __( 'Icon Size', 'happy-elementor-addons' ),
717
+ 'type' => Controls_Manager::SLIDER,
718
+ 'selectors' => [
719
+ '{{WRAPPER}} .ha-table .ha-table__head-column-cell-icon' => 'font-size: {{SIZE}}{{UNIT}};',
720
+ '{{WRAPPER}} .ha-table .ha-table__head-column-cell-icon svg' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}};'
721
+ ],
722
+ ]
723
+ );
724
+
725
+ $this->add_control(
726
+ 'column_image_border_radius',
727
+ [
728
+ 'label' => __( 'Image Border Radius', 'happy-elementor-addons' ),
729
+ 'type' => Controls_Manager::SLIDER,
730
+ 'selectors' => [
731
+ '{{WRAPPER}} .ha-table .ha-table__head-column-cell-icon img' => 'border-radius: {{SIZE}}{{UNIT}};'
732
+ ],
733
+ ]
734
+ );
735
+
736
+ $this->add_control(
737
+ 'head_icon_color',
738
+ [
739
+ 'label' => __( 'Icon Color', 'happy-elementor-addons' ),
740
+ 'type' => Controls_Manager::COLOR,
741
+ 'selectors' => [
742
+ '{{WRAPPER}} .ha-table__head-column-cell-icon i' => 'color: {{VALUE}}',
743
+ ],
744
+ ]
745
+ );
746
+
747
+ $this->add_control(
748
+ 'column_color_notice',
749
+ [
750
+ 'type' => Controls_Manager::RAW_HTML,
751
+ 'raw' => 'If you\'ve added <strong>Custom Style</strong> then Icon Color will be over written for that cell.',
752
+ ]
753
+ );
754
+
755
+ $this->end_controls_section();
756
+
757
+ $this->start_controls_section(
758
+ '_section_table_row_style',
759
+ [
760
+ 'label' => __( 'Table Row', 'happy-elementor-addons' ),
761
+ 'tab' => Controls_Manager::TAB_STYLE,
762
+ ]
763
+ );
764
+
765
+ $this->add_responsive_control(
766
+ 'table_row_padding',
767
+ [
768
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
769
+ 'type' => Controls_Manager::DIMENSIONS,
770
+ 'size_units' => [ 'px', '%' ],
771
+ 'selectors' => [
772
+ '(desktop){{WRAPPER}} .ha-table__body .ha-table__body-row-cell' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
773
+ '(tablet){{WRAPPER}} .ha-table__body .ha-table__body-row-cell' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
774
+ '(mobile){{WRAPPER}} .ha-table__body .ha-table__body-row-cell-wrap' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
775
+ ],
776
+ ]
777
+ );
778
+
779
+ $this->add_group_control(
780
+ Group_Control_Border::get_type(),
781
+ [
782
+ 'name' => 'row_border',
783
+ 'selector' => '{{WRAPPER}} .ha-table__body .ha-table__body-row-cell',
784
+ ]
785
+ );
786
+
787
+ $this->start_controls_tabs( '_tabs_rows' );
788
+ $this->start_controls_tab(
789
+ '_tab_head_row',
790
+ [
791
+ 'label' => __( 'Normal', 'happy-elementor-addons' )
792
+ ]
793
+ );
794
+
795
+ $this->add_responsive_control(
796
+ 'row_background_color_even',
797
+ [
798
+ 'label' => __( 'Background Color (Even)', 'happy-elementor-addons' ),
799
+ 'type' => Controls_Manager::COLOR,
800
+ 'selectors' => [
801
+ '(desktop){{WRAPPER}} .ha-table__body .ha-table__body-row:nth-child(even)' => 'background-color: {{VALUE}}',
802
+ '(tablet){{WRAPPER}} .ha-table__body .ha-table__body-row:nth-child(even)' => 'background-color: {{VALUE}}',
803
+ '(mobile){{WRAPPER}} .ha-table__body .ha-table__body-row-cell:nth-child(even) .ha-table__body-row-cell-wrap' => 'background-color: {{VALUE}}',
804
+ '(mobile){{WRAPPER}} .ha-table__body .ha-table__body-row:nth-child(even)' => 'background-color: transparent',
805
+ ],
806
+ ]
807
+ );
808
+
809
+ $this->add_responsive_control(
810
+ 'row_background_color_odd',
811
+ [
812
+ 'label' => __( 'Background Color (Odd)', 'happy-elementor-addons' ),
813
+ 'type' => Controls_Manager::COLOR,
814
+ 'selectors' => [
815
+ '(desktop){{WRAPPER}} .ha-table__body .ha-table__body-row:nth-child(odd)' => 'background-color: {{VALUE}}',
816
+ '(tablet){{WRAPPER}} .ha-table__body .ha-table__body-row:nth-child(odd)' => 'background-color: {{VALUE}}',
817
+ '(mobile){{WRAPPER}} .ha-table__body .ha-table__body-row-cell:nth-child(odd) .ha-table__body-row-cell-wrap' => 'background-color: {{VALUE}}',
818
+ '(mobile){{WRAPPER}} .ha-table__body .ha-table__body-row:nth-child(odd)' => 'background-color: transparent',
819
+ ],
820
+ ]
821
+ );
822
+
823
+ $this->add_responsive_control(
824
+ 'row_color_even',
825
+ [
826
+ 'label' => __( 'Color (Even)', 'happy-elementor-addons' ),
827
+ 'type' => Controls_Manager::COLOR,
828
+ 'selectors' => [
829
+ '(desktop){{WRAPPER}} .ha-table__body .ha-table__body-row:nth-child(even) .ha-table__body-row-cell-wrap' => 'color: {{VALUE}}',
830
+ '(tablet){{WRAPPER}} .ha-table__body .ha-table__body-row:nth-child(even) .ha-table__body-row-cell-wrap' => 'color: {{VALUE}}',
831
+ '(mobile){{WRAPPER}} .ha-table__body .ha-table__body-row-cell:nth-child(even) .ha-table__body-row-cell-wrap' => 'color: {{VALUE}}'
832
+ ],
833
+ ]
834
+ );
835
+
836
+ $this->add_responsive_control(
837
+ 'row_color_odd',
838
+ [
839
+ 'label' => __( 'Color (Odd)', 'happy-elementor-addons' ),
840
+ 'type' => Controls_Manager::COLOR,
841
+ 'selectors' => [
842
+ '(desktop){{WRAPPER}} .ha-table__body .ha-table__body-row:nth-child(odd) .ha-table__body-row-cell-wrap' => 'color: {{VALUE}}',
843
+ '(tablet){{WRAPPER}} .ha-table__body .ha-table__body-row:nth-child(odd) .ha-table__body-row-cell-wrap' => 'color: {{VALUE}}',
844
+ '(mobile){{WRAPPER}} .ha-table__body .ha-table__body-row-cell:nth-child(odd) .ha-table__body-row-cell-wrap' => 'color: {{VALUE}}'
845
+ ],
846
+ ]
847
+ );
848
+
849
+ $this->end_controls_tab();
850
+
851
+ $this->start_controls_tab(
852
+ '_tab_row',
853
+ [
854
+ 'label' => __( 'Hover', 'happy-elementor-addons' )
855
+ ]
856
+ );
857
+
858
+ $this->add_responsive_control(
859
+ 'row_hover_background_color_even',
860
+ [
861
+ 'label' => __( 'Background Color (Even)', 'happy-elementor-addons' ),
862
+ 'type' => Controls_Manager::COLOR,
863
+ 'selectors' => [
864
+ '(desktop){{WRAPPER}} .ha-table__body .ha-table__body-row:nth-child(even):hover' => 'background-color: {{VALUE}}',
865
+ '(tablet){{WRAPPER}} .ha-table__body .ha-table__body-row:nth-child(even):hover' => 'background-color: {{VALUE}}',
866
+ '(mobile){{WRAPPER}} .ha-table__body .ha-table__body-row-cell:nth-child(even) .ha-table__body-row-cell-wrap:hover' => 'background-color: {{VALUE}}',
867
+ '(mobile){{WRAPPER}} .ha-table__body .ha-table__body-row:nth-child(even):hover' => 'background-color: transparent',
868
+ ],
869
+ ]
870
+ );
871
+
872
+ $this->add_responsive_control(
873
+ 'row_hover_background_color_odd',
874
+ [
875
+ 'label' => __( 'Background Color (Odd)', 'happy-elementor-addons' ),
876
+ 'type' => Controls_Manager::COLOR,
877
+ 'selectors' => [
878
+ '(desktop){{WRAPPER}} .ha-table__body .ha-table__body-row:nth-child(odd):hover' => 'background-color: {{VALUE}}',
879
+ '(tablet){{WRAPPER}} .ha-table__body .ha-table__body-row:nth-child(odd):hover' => 'background-color: {{VALUE}}',
880
+ '(mobile){{WRAPPER}} .ha-table__body .ha-table__body-row-cell:nth-child(odd) .ha-table__body-row-cell-wrap:hover' => 'background-color: {{VALUE}}',
881
+ '(mobile){{WRAPPER}} .ha-table__body .ha-table__body-row:nth-child(odd):hover' => 'background-color: transparent',
882
+ ],
883
+ ]
884
+ );
885
+
886
+ $this->add_responsive_control(
887
+ 'row_hover_color_even',
888
+ [
889
+ 'label' => __( 'Color (Even)', 'happy-elementor-addons' ),
890
+ 'type' => Controls_Manager::COLOR,
891
+ 'selectors' => [
892
+ '(desktop){{WRAPPER}} .ha-table__body .ha-table__body-row:nth-child(even):hover .ha-table__body-row-cell-wrap' => 'color: {{VALUE}}',
893
+ '(tablet){{WRAPPER}} .ha-table__body .ha-table__body-row:nth-child(even):hover .ha-table__body-row-cell-wrap' => 'color: {{VALUE}}',
894
+ '(mobile){{WRAPPER}} .ha-table__body .ha-table__body-row-cell:nth-child(even):hover .ha-table__body-row-cell-wrap' => 'color: {{VALUE}}'
895
+ ],
896
+ ]
897
+ );
898
+
899
+ $this->add_responsive_control(
900
+ 'row_hover_color_odd',
901
+ [
902
+ 'label' => __( 'Color (Odd)', 'happy-elementor-addons' ),
903
+ 'type' => Controls_Manager::COLOR,
904
+ 'selectors' => [
905
+ '(desktop){{WRAPPER}} .ha-table__body .ha-table__body-row:nth-child(odd):hover .ha-table__body-row-cell-wrap' => 'color: {{VALUE}}',
906
+ '(tablet){{WRAPPER}} .ha-table__body .ha-table__body-row:nth-child(odd):hover .ha-table__body-row-cell-wrap' => 'color: {{VALUE}}',
907
+ '(mobile){{WRAPPER}} .ha-table__body .ha-table__body-row-cell:nth-child(odd):hover .ha-table__body-row-cell-wrap' => 'color: {{VALUE}}'
908
+ ],
909
+ ]
910
+ );
911
+
912
+ $this->end_controls_tab();
913
+ $this->end_controls_tabs();
914
+
915
+ $this->add_control(
916
+ '_row_title',
917
+ [
918
+ 'type' => Controls_Manager::HEADING,
919
+ 'label' => __( 'Title', 'happy-elementor-addons' ),
920
+ 'separator' => 'before'
921
+ ]
922
+ );
923
+
924
+ $this->add_group_control(
925
+ Group_Control_Typography::get_type(),
926
+ [
927
+ 'name' => 'row_text_typography',
928
+ 'selector' => '{{WRAPPER}} .ha-table__body .ha-table__body-row-cell-text',
929
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3,
930
+ ]
931
+ );
932
+
933
+ $this->add_control(
934
+ '_row_icon',
935
+ [
936
+ 'type' => Controls_Manager::HEADING,
937
+ 'label' => __( 'Icon/Image', 'happy-elementor-addons' ),
938
+ 'separator' => 'before'
939
+ ]
940
+ );
941
+
942
+ $this->add_responsive_control(
943
+ 'row_icon_spacing',
944
+ [
945
+ 'label' => __( 'Spacing', 'happy-elementor-addons' ),
946
+ 'type' => Controls_Manager::DIMENSIONS,
947
+ 'size_units' => [ 'px', '%' ],
948
+ 'selectors' => [
949
+ '{{WRAPPER}} .ha-table__body .ha-table__body-row-cell-icon' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
950
+ ],
951
+ ]
952
+ );
953
+
954
+ $this->add_responsive_control(
955
+ 'row_icon_size',
956
+ [
957
+ 'label' => __( 'Size', 'happy-elementor-addons' ),
958
+ 'type' => Controls_Manager::SLIDER,
959
+ 'selectors' => [
960
+ '{{WRAPPER}} .ha-table__body-row-cell-icon' => 'font-size: {{SIZE}}{{UNIT}};',
961
+ '{{WRAPPER}} .ha-table__body-row-cell-icon img' => 'width: {{SIZE}}{{UNIT}};',
962
+ '{{WRAPPER}} .ha-table__body-row-cell-icon svg' => 'width: {{SIZE}}{{UNIT}};'
963
+ ],
964
+ ]
965
+ );
966
+
967
+ $this->add_control(
968
+ 'row_image_border_radius',
969
+ [
970
+ 'label' => __( 'Image Border Radius', 'happy-elementor-addons' ),
971
+ 'type' => Controls_Manager::SLIDER,
972
+ 'selectors' => [
973
+ '{{WRAPPER}} .ha-table__body .ha-table__body-row-cell-icon img' => 'border-radius: {{SIZE}}{{UNIT}};'
974
+ ],
975
+ ]
976
+ );
977
+
978
+ $this->add_control(
979
+ 'row_icon_color',
980
+ [
981
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
982
+ 'type' => Controls_Manager::COLOR,
983
+ 'selectors' => [
984
+ '{{WRAPPER}} .ha-table__body-row-cell-icon i' => 'color: {{VALUE}}',
985
+ ],
986
+ ]
987
+ );
988
+
989
+ $this->add_control(
990
+ 'row_style_notice',
991
+ [
992
+ 'type' => Controls_Manager::RAW_HTML,
993
+ 'separator' => 'before',
994
+ 'raw' => 'If you\'ve added <strong>Custom Style</strong> then Background Color, Color, Icon Size, Icon Color will be over written for that cell.',
995
+ ]
996
+ );
997
+
998
+ $this->end_controls_section();
999
+ }
1000
+
1001
+ protected function render() {
1002
+ $this->data_table_render();
1003
+ }
1004
+
1005
+ protected function data_table_render() {
1006
+ $settings = $this->get_settings_for_display();
1007
+
1008
+ $table_row = [];
1009
+ $table_cell = [];
1010
+ foreach ( $settings['rows_data'] as $row ) {
1011
+ $row_id = uniqid();
1012
+
1013
+ if ( $row['row_column_type'] == 'row' ) {
1014
+ $table_row[] = [
1015
+ 'id' => $row_id,
1016
+ 'type' => $row['row_column_type'],
1017
+ ];
1018
+ }
1019
+
1020
+ if ( $row['row_column_type'] == 'column' ) {
1021
+ $table_row_keys = array_keys( $table_row );
1022
+ $cell_key = end($table_row_keys );
1023
+
1024
+ $table_cell[] = [
1025
+ 'repeater_id' => $row['_id'],
1026
+ 'row_id' => $table_row[$cell_key]['id'],
1027
+ 'title' => $row['cell_name'],
1028
+ 'row_span' => $row['row_span'],
1029
+ 'row_column_span' => $row['row_column_span'],
1030
+ 'row_icon' => ! empty( $row['row_icon'] ) ? $row['row_icon'] : '',
1031
+ 'row_icons' => ! empty( $row['row_icons']['value'] ) ? $row['row_icons'] : '',
1032
+ 'row_icon_show' => ! empty( $row['row_icon_show'] ) ? $row['row_icon_show'] : '',
1033
+ 'row_image' => array_key_exists( 'row_image', $row ) ? $row['row_image'] : '',
1034
+ 'row_thumbnail_size' => !empty( $row['row_thumbnail_size'] ) ? $row['row_thumbnail_size'] : '',
1035
+ ];
1036
+ }
1037
+
1038
+ }
1039
+ ?>
1040
+
1041
+ <table class="ha-table">
1042
+
1043
+ <thead class="ha-table__head">
1044
+ <tr class="ha-table__head-column">
1045
+ <?php foreach ( $settings['columns_data'] as $index => $column_cell ) :
1046
+ $column_repeater_key = $this->get_repeater_setting_key( 'column_span', 'columns_data', $index );
1047
+ $this->add_render_attribute( $column_repeater_key, 'class', 'ha-table__head-column-cell' );
1048
+ $this->add_render_attribute( $column_repeater_key, 'class', 'elementor-repeater-item-' . $column_cell['_id'] );
1049
+ if ( $column_cell['column_span'] ) {
1050
+ $this->add_render_attribute( $column_repeater_key, 'colspan', $column_cell['column_span'] );
1051
+ }
1052
+ ?>
1053
+ <th <?php echo $this->get_render_attribute_string( $column_repeater_key ); ?>>
1054
+ <div class="ha-table__head-column-cell-wrap">
1055
+ <div class="ha-table__head-column-cell-text"><?php echo esc_html( $column_cell['column_name'] ); ?></div>
1056
+ <?php if ( $column_cell['column_media'] == 'icon' && ! empty( $column_cell['column_icons'] ) ) : ?>
1057
+ <div class="ha-table__head-column-cell-icon">
1058
+ <?php Icons_Manager::render_icon( $column_cell['column_icons'] ); ?>
1059
+ </div>
1060
+ <?php endif; ?>
1061
+
1062
+ <?php
1063
+ if ( $column_cell['column_image']['url'] || $column_cell['column_image']['id'] ) :
1064
+ $this->add_render_attribute( 'column_image', 'src', $column_cell['column_image']['url'] );
1065
+ $this->add_render_attribute( 'column_image', 'alt', Control_Media::get_image_alt( $column_cell['column_image'] ) );
1066
+ $this->add_render_attribute( 'column_image', 'title', Control_Media::get_image_title( $column_cell['column_image'] ) );
1067
+ ?>
1068
+ <div class="ha-table__head-column-cell-icon">
1069
+ <?php echo Group_Control_Image_Size::get_attachment_image_html( $column_cell, 'column_thumbnail', 'column_image' ); ?>
1070
+ </div>
1071
+ <?php endif; ?>
1072
+ </div>
1073
+ </th>
1074
+ <?php endforeach; ?>
1075
+ </tr>
1076
+ </thead>
1077
+
1078
+ <tbody class="ha-table__body">
1079
+ <?php for ( $i = 0; $i < count( $table_row ); $i++ ) : ?>
1080
+ <tr class="ha-table__body-row">
1081
+ <?php
1082
+ for ( $j = 0; $j < count( $table_cell ); $j++ ) :
1083
+ if( $table_row[$i]['id'] == $table_cell[$j]['row_id'] ) :
1084
+ $row_span_repeater_key = $this->get_repeater_setting_key( 'row_span', 'rows_data', $table_cell[$j]['row_id'].$i.$j );
1085
+ $this->add_render_attribute( $row_span_repeater_key, 'class', 'ha-table__body-row-cell' );
1086
+ $this->add_render_attribute( $row_span_repeater_key, 'class', 'elementor-repeater-item-' . $table_cell[$j]['repeater_id'] );
1087
+ if ( ! empty( $table_cell[$j]['row_column_span'] ) ) {
1088
+ $this->add_render_attribute( $row_span_repeater_key, 'colspan', $table_cell[$j]['row_column_span'] );
1089
+ }
1090
+ if ( ! empty( $table_cell[$j]['row_span'] ) ) {
1091
+ $this->add_render_attribute( $row_span_repeater_key, 'rowspan', $table_cell[$j]['row_span'] );
1092
+ }
1093
+ ?>
1094
+ <td <?php echo $this->get_render_attribute_string( $row_span_repeater_key ); ?>>
1095
+ <div class="ha-table__body-row-cell-wrap">
1096
+ <div class="ha-table__body-row-cell-text"><?php echo esc_html( $table_cell[$j]['title'] ); ?></div>
1097
+
1098
+ <?php if ( ! empty( $table_cell[$j]['row_icons'] ) ) : ?>
1099
+ <div class="ha-table__body-row-cell-icon">
1100
+ <?php Icons_Manager::render_icon( $table_cell[$j]['row_icons'] ); ?>
1101
+ </div>
1102
+ <?php endif; ?>
1103
+
1104
+ <?php
1105
+ if ( $table_cell[$j]['row_image']['url'] || $table_cell[$j]['row_image']['id'] ) :
1106
+ $image = wp_get_attachment_image_url( $table_cell[$j]['row_image']['id'], $table_cell[$j]['row_thumbnail_size'] );
1107
+ if ( ! $image ) {
1108
+ $image = $table_cell[$j]['row_image']['url'];
1109
+ }
1110
+ ?>
1111
+ <div class="ha-table__body-row-cell-icon">
1112
+ <img src="<?php echo esc_url( $image ); ?>" alt="<?php echo esc_attr( $table_cell[$j]['title'] ); ?>">
1113
+ </div>
1114
+ <?php endif; ?>
1115
+ </div>
1116
+ </td>
1117
+ <?php
1118
+ endif;
1119
+ endfor;
1120
+ ?>
1121
+ </tr>
1122
+ <?php endfor; ?>
1123
+ </tbody>
1124
+
1125
+ </table>
1126
+
1127
+ <?php
1128
+
1129
+ }
1130
+
1131
+ }
widgets/dual-button/widget.php CHANGED
@@ -87,7 +87,10 @@ class Dual_Button extends Base {
87
  'placeholder' => 'https://example.com',
88
  'dynamic' => [
89
  'active' => true,
90
- ]
 
 
 
91
  ]
92
  );
93
 
@@ -273,7 +276,10 @@ class Dual_Button extends Base {
273
  'placeholder' => 'https://example.com',
274
  'dynamic' => [
275
  'active' => true,
276
- ]
 
 
 
277
  ]
278
  );
279
 
87
  'placeholder' => 'https://example.com',
88
  'dynamic' => [
89
  'active' => true,
90
+ ],
91
+ 'default' => [
92
+ 'url' => '#',
93
+ ],
94
  ]
95
  );
96
 
276
  'placeholder' => 'https://example.com',
277
  'dynamic' => [
278
  'active' => true,
279
+ ],
280
+ 'default' => [
281
+ 'url' => '#',
282
+ ],
283
  ]
284
  );
285
 
widgets/fun-factor/widget.php CHANGED
@@ -235,38 +235,14 @@ class Fun_Factor extends Base {
235
  );
236
 
237
  $this->add_control(
238
- 'title_tag',
239
  [
240
- 'label' => __('Title HTML Tag', 'happy-elementor-addons'),
241
- 'type' => Controls_Manager::CHOOSE,
242
- 'options' => [
243
- 'h1' => [
244
- 'title' => __('H1', 'happy-elementor-addons'),
245
- 'icon' => 'eicon-editor-h1'
246
- ],
247
- 'h2' => [
248
- 'title' => __('H2', 'happy-elementor-addons'),
249
- 'icon' => 'eicon-editor-h2'
250
- ],
251
- 'h3' => [
252
- 'title' => __('H3', 'happy-elementor-addons'),
253
- 'icon' => 'eicon-editor-h3'
254
- ],
255
- 'h4' => [
256
- 'title' => __('H4', 'happy-elementor-addons'),
257
- 'icon' => 'eicon-editor-h4'
258
- ],
259
- 'h5' => [
260
- 'title' => __('H5', 'happy-elementor-addons'),
261
- 'icon' => 'eicon-editor-h5'
262
- ],
263
- 'h6' => [
264
- 'title' => __('H6', 'happy-elementor-addons'),
265
- 'icon' => 'eicon-editor-h6'
266
- ]
267
- ],
268
- 'default' => 'h2',
269
- 'toggle' => false,
270
  ]
271
  );
272
 
@@ -288,6 +264,10 @@ class Fun_Factor extends Base {
288
  'title' => __('Right', 'happy-elementor-addons'),
289
  'icon' => 'eicon-text-align-right',
290
  ],
 
 
 
 
291
  ],
292
  'toggle' => true,
293
  'selectors' => [
@@ -299,14 +279,38 @@ class Fun_Factor extends Base {
299
  );
300
 
301
  $this->add_control(
302
- 'divider_show_hide',
303
  [
304
- 'label' => __('Show Divider', 'happy-elementor-addons'),
305
- 'type' => Controls_Manager::SWITCHER,
306
- 'label_on' => __('Show', 'happy-elementor-addons'),
307
- 'label_off' => __('Hide', 'happy-elementor-addons'),
308
- 'return_value' => 'yes',
309
- 'default' => 'yes',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
310
  ]
311
  );
312
 
235
  );
236
 
237
  $this->add_control(
238
+ 'divider_show_hide',
239
  [
240
+ 'label' => __('Show Divider', 'happy-elementor-addons'),
241
+ 'type' => Controls_Manager::SWITCHER,
242
+ 'label_on' => __('Show', 'happy-elementor-addons'),
243
+ 'label_off' => __('Hide', 'happy-elementor-addons'),
244
+ 'return_value' => 'yes',
245
+ 'default' => 'yes',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
246
  ]
247
  );
248
 
264
  'title' => __('Right', 'happy-elementor-addons'),
265
  'icon' => 'eicon-text-align-right',
266
  ],
267
+ 'justify' => [
268
+ 'title' => __('Justify', 'happy-elementor-addons'),
269
+ 'icon' => 'eicon-text-align-justify',
270
+ ],
271
  ],
272
  'toggle' => true,
273
  'selectors' => [
279
  );
280
 
281
  $this->add_control(
282
+ 'title_tag',
283
  [
284
+ 'label' => __('Title HTML Tag', 'happy-elementor-addons'),
285
+ 'type' => Controls_Manager::CHOOSE,
286
+ 'options' => [
287
+ 'h1' => [
288
+ 'title' => __('H1', 'happy-elementor-addons'),
289
+ 'icon' => 'eicon-editor-h1'
290
+ ],
291
+ 'h2' => [
292
+ 'title' => __('H2', 'happy-elementor-addons'),
293
+ 'icon' => 'eicon-editor-h2'
294
+ ],
295
+ 'h3' => [
296
+ 'title' => __('H3', 'happy-elementor-addons'),
297
+ 'icon' => 'eicon-editor-h3'
298
+ ],
299
+ 'h4' => [
300
+ 'title' => __('H4', 'happy-elementor-addons'),
301
+ 'icon' => 'eicon-editor-h4'
302
+ ],
303
+ 'h5' => [
304
+ 'title' => __('H5', 'happy-elementor-addons'),
305
+ 'icon' => 'eicon-editor-h5'
306
+ ],
307
+ 'h6' => [
308
+ 'title' => __('H6', 'happy-elementor-addons'),
309
+ 'icon' => 'eicon-editor-h6'
310
+ ]
311
+ ],
312
+ 'default' => 'h2',
313
+ 'toggle' => false,
314
  ]
315
  );
316
 
widgets/gradient-heading/widget.php CHANGED
@@ -16,37 +16,37 @@ defined( 'ABSPATH' ) || die();
16
 
17
  class Gradient_Heading extends Base {
18
 
19
- /**
20
- * Get widget title.
21
- *
22
- * @since 1.0.0
23
- * @access public
24
- *
25
- * @return string Widget title.
26
- */
27
- public function get_title() {
28
- return __( 'Gradient Heading', 'happy-elementor-addons' );
29
- }
30
 
31
  public function get_custom_help_url() {
32
  return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/gradient-heading/';
33
  }
34
 
35
  /**
36
- * Get widget icon.
37
- *
38
- * @since 1.0.0
39
- * @access public
40
- *
41
- * @return string Widget icon.
42
- */
43
- public function get_icon() {
44
- return 'hm hm-drag';
45
- }
46
-
47
- public function get_keywords() {
48
- return [ 'gradient', 'advanced', 'heading', 'title', 'colorful' ];
49
- }
50
 
51
  protected function register_content_controls() {
52
  $this->start_controls_section(
@@ -57,195 +57,199 @@ class Gradient_Heading extends Base {
57
  ]
58
  );
59
 
60
- $this->add_control(
61
- 'title',
62
- [
63
- 'label' => __( 'Title', 'happy-elementor-addons' ),
64
- 'type' => Controls_Manager::TEXTAREA,
65
- 'default' => 'Happy Gradient Heading',
66
- 'placeholder' => __( 'Type Gradient Heading Text', 'happy-elementor-addons' ),
67
- 'dynamic' => [
68
- 'active' => true,
69
- ]
70
- ]
71
- );
72
-
73
- $this->add_control(
74
- 'link',
75
- [
76
- 'label' => __( 'Link', 'happy-elementor-addons' ),
77
- 'type' => Controls_Manager::URL,
78
- 'separator' => 'before',
79
- 'placeholder' => 'https://example.com',
80
- 'dynamic' => [
81
- 'active' => true,
82
- ]
83
- ]
84
- );
85
-
86
- $this->add_control(
87
- 'title_tag',
88
- [
89
- 'label' => __( 'Title HTML Tag', 'happy-elementor-addons' ),
90
- 'type' => Controls_Manager::CHOOSE,
91
- 'options' => [
92
- 'h1' => [
93
- 'title' => __( 'H1', 'happy-elementor-addons' ),
94
- 'icon' => 'eicon-editor-h1'
95
- ],
96
- 'h2' => [
97
- 'title' => __( 'H2', 'happy-elementor-addons' ),
98
- 'icon' => 'eicon-editor-h2'
99
- ],
100
- 'h3' => [
101
- 'title' => __( 'H3', 'happy-elementor-addons' ),
102
- 'icon' => 'eicon-editor-h3'
103
- ],
104
- 'h4' => [
105
- 'title' => __( 'H4', 'happy-elementor-addons' ),
106
- 'icon' => 'eicon-editor-h4'
107
- ],
108
- 'h5' => [
109
- 'title' => __( 'H5', 'happy-elementor-addons' ),
110
- 'icon' => 'eicon-editor-h5'
111
- ],
112
- 'h6' => [
113
- 'title' => __( 'H6', 'happy-elementor-addons' ),
114
- 'icon' => 'eicon-editor-h6'
115
- ]
116
- ],
117
- 'default' => 'h2',
118
- 'toggle' => false,
119
- ]
120
- );
121
-
122
- $this->add_responsive_control(
123
- 'align',
124
- [
125
- 'label' => __( 'Alignment', 'happy-elementor-addons' ),
126
- 'type' => Controls_Manager::CHOOSE,
127
- 'options' => [
128
- 'left' => [
129
- 'title' => __( 'Left', 'happy-elementor-addons' ),
130
- 'icon' => 'fa fa-align-left',
131
- ],
132
- 'center' => [
133
- 'title' => __( 'Center', 'happy-elementor-addons' ),
134
- 'icon' => 'fa fa-align-center',
135
- ],
136
- 'right' => [
137
- 'title' => __( 'Right', 'happy-elementor-addons' ),
138
- 'icon' => 'fa fa-align-right',
139
- ],
140
- ],
141
- 'toggle' => true,
142
- 'selectors' => [
143
- '{{WRAPPER}}' => 'text-align: {{VALUE}};'
144
- ]
145
- ]
146
- );
147
-
148
- $this->end_controls_section();
149
- }
150
-
151
- protected function register_style_controls() {
152
- $this->start_controls_section(
153
- '_section_style_title',
154
- [
155
- 'label' => __( 'Title', 'happy-elementor-addons' ),
156
- 'tab' => Controls_Manager::TAB_STYLE,
157
- ]
158
- );
159
-
160
- $this->add_group_control(
161
- Group_Control_Foreground::get_type(),
162
- [
163
- 'name' => 'title',
164
- 'selector' => '{{WRAPPER}} .ha-gradient-heading',
165
- ]
166
- );
167
-
168
- $this->add_group_control(
169
- Group_Control_Typography::get_type(),
170
- [
171
- 'name' => 'title',
172
- 'selector' => '{{WRAPPER}} .ha-gradient-heading',
173
- 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
174
- ]
175
- );
176
-
177
- $this->add_group_control(
178
- Group_Control_Text_Shadow::get_type(),
179
- [
180
- 'name' => 'title',
181
- 'label' => __( 'Text Shadow', 'happy-elementor-addons' ),
182
- 'selector' => '{{WRAPPER}} .ha-gradient-heading',
183
- ]
184
- );
185
-
186
- $this->add_control(
187
- 'blend_mode',
188
- [
189
- 'label' => __( 'Blend Mode', 'happy-elementor-addons' ),
190
- 'type' => Controls_Manager::SELECT,
191
- 'options' => [
192
- '' => __( 'Normal', 'happy-elementor-addons' ),
193
- 'multiply' => 'Multiply',
194
- 'screen' => 'Screen',
195
- 'overlay' => 'Overlay',
196
- 'darken' => 'Darken',
197
- 'lighten' => 'Lighten',
198
- 'color-dodge' => 'Color Dodge',
199
- 'saturation' => 'Saturation',
200
- 'color' => 'Color',
201
- 'difference' => 'Difference',
202
- 'exclusion' => 'Exclusion',
203
- 'hue' => 'Hue',
204
- 'luminosity' => 'Luminosity',
205
- ],
206
- 'selectors' => [
207
- '{{WRAPPER}} .ha-gradient-heading' => 'mix-blend-mode: {{VALUE}};',
208
- ],
209
- 'separator' => 'none',
210
- ]
211
- );
212
-
213
- $this->end_controls_section();
214
- }
215
-
216
- protected function render() {
217
- $settings = $this->get_settings_for_display();
218
-
219
- $this->add_inline_editing_attributes( 'title', 'basic' );
220
- $this->add_render_attribute( 'title', 'class', 'ha-gradient-heading' );
221
-
222
- $title = ha_kses_basic( $settings['title' ] );
223
-
224
- if ( ! empty( $settings['link']['url'] ) ) {
225
- $this->add_link_attributes( 'link', $settings['link'] );
226
-
227
- $title = sprintf( '<a %1$s>%2$s</a>',
228
- $this->get_render_attribute_string( 'link' ),
229
- $title
230
- );
231
- }
232
-
233
- printf( '<%1$s %2$s>%3$s</%1$s>',
234
- tag_escape( $settings['title_tag'] ),
235
- $this->get_render_attribute_string( 'title' ),
236
- $title
237
- );
238
- }
239
-
240
- public function _content_template() {
241
- ?>
242
- <#
243
- view.addInlineEditingAttributes( 'title', 'basic' );
244
- view.addRenderAttribute( 'title', 'class', 'ha-gradient-heading' );
245
-
246
- var title = _.isEmpty(settings.link.url) ? settings.title : '<a href="'+settings.link.url+'">'+settings.title+'</a>';
247
- #>
248
- <{{ settings.title_tag }} {{{ view.getRenderAttributeString( 'title' ) }}}>{{{ title }}}</{{ settings.title_tag }}>
249
- <?php
250
- }
 
 
 
 
251
  }
16
 
17
  class Gradient_Heading extends Base {
18
 
19
+ /**
20
+ * Get widget title.
21
+ *
22
+ * @since 1.0.0
23
+ * @access public
24
+ *
25
+ * @return string Widget title.
26
+ */
27
+ public function get_title() {
28
+ return __( 'Gradient Heading', 'happy-elementor-addons' );
29
+ }
30
 
31
  public function get_custom_help_url() {
32
  return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/gradient-heading/';
33
  }
34
 
35
  /**
36
+ * Get widget icon.
37
+ *
38
+ * @since 1.0.0
39
+ * @access public
40
+ *
41
+ * @return string Widget icon.
42
+ */
43
+ public function get_icon() {
44
+ return 'hm hm-drag';
45
+ }
46
+
47
+ public function get_keywords() {
48
+ return [ 'gradient', 'advanced', 'heading', 'title', 'colorful' ];
49
+ }
50
 
51
  protected function register_content_controls() {
52
  $this->start_controls_section(
57
  ]
58
  );
59
 
60
+ $this->add_control(
61
+ 'title',
62
+ [
63
+ 'label' => __( 'Title', 'happy-elementor-addons' ),
64
+ 'type' => Controls_Manager::TEXTAREA,
65
+ 'default' => 'Happy Gradient Heading',
66
+ 'placeholder' => __( 'Type Gradient Heading Text', 'happy-elementor-addons' ),
67
+ 'dynamic' => [
68
+ 'active' => true,
69
+ ]
70
+ ]
71
+ );
72
+
73
+ $this->add_control(
74
+ 'link',
75
+ [
76
+ 'label' => __( 'Link', 'happy-elementor-addons' ),
77
+ 'type' => Controls_Manager::URL,
78
+ 'separator' => 'before',
79
+ 'placeholder' => 'https://example.com',
80
+ 'dynamic' => [
81
+ 'active' => true,
82
+ ]
83
+ ]
84
+ );
85
+
86
+ $this->add_control(
87
+ 'title_tag',
88
+ [
89
+ 'label' => __( 'Title HTML Tag', 'happy-elementor-addons' ),
90
+ 'type' => Controls_Manager::CHOOSE,
91
+ 'options' => [
92
+ 'h1' => [
93
+ 'title' => __( 'H1', 'happy-elementor-addons' ),
94
+ 'icon' => 'eicon-editor-h1'
95
+ ],
96
+ 'h2' => [
97
+ 'title' => __( 'H2', 'happy-elementor-addons' ),
98
+ 'icon' => 'eicon-editor-h2'
99
+ ],
100
+ 'h3' => [
101
+ 'title' => __( 'H3', 'happy-elementor-addons' ),
102
+ 'icon' => 'eicon-editor-h3'
103
+ ],
104
+ 'h4' => [
105
+ 'title' => __( 'H4', 'happy-elementor-addons' ),
106
+ 'icon' => 'eicon-editor-h4'
107
+ ],
108
+ 'h5' => [
109
+ 'title' => __( 'H5', 'happy-elementor-addons' ),
110
+ 'icon' => 'eicon-editor-h5'
111
+ ],
112
+ 'h6' => [
113
+ 'title' => __( 'H6', 'happy-elementor-addons' ),
114
+ 'icon' => 'eicon-editor-h6'
115
+ ]
116
+ ],
117
+ 'default' => 'h2',
118
+ 'toggle' => false,
119
+ ]
120
+ );
121
+
122
+ $this->add_responsive_control(
123
+ 'align',
124
+ [
125
+ 'label' => __( 'Alignment', 'happy-elementor-addons' ),
126
+ 'type' => Controls_Manager::CHOOSE,
127
+ 'options' => [
128
+ 'left' => [
129
+ 'title' => __( 'Left', 'happy-elementor-addons' ),
130
+ 'icon' => 'eicon-text-align-left',
131
+ ],
132
+ 'center' => [
133
+ 'title' => __( 'Center', 'happy-elementor-addons' ),
134
+ 'icon' => 'eicon-text-align-center',
135
+ ],
136
+ 'right' => [
137
+ 'title' => __( 'Right', 'happy-elementor-addons' ),
138
+ 'icon' => 'eicon-text-align-right',
139
+ ],
140
+ 'justify' => [
141
+ 'title' => __( 'Justify', 'happy-elementor-addons' ),
142
+ 'icon' => 'eicon-text-align-justify',
143
+ ],
144
+ ],
145
+ 'toggle' => true,
146
+ 'selectors' => [
147
+ '{{WRAPPER}}' => 'text-align: {{VALUE}};'
148
+ ]
149
+ ]
150
+ );
151
+
152
+ $this->end_controls_section();
153
+ }
154
+
155
+ protected function register_style_controls() {
156
+ $this->start_controls_section(
157
+ '_section_style_title',
158
+ [
159
+ 'label' => __( 'Title', 'happy-elementor-addons' ),
160
+ 'tab' => Controls_Manager::TAB_STYLE,
161
+ ]
162
+ );
163
+
164
+ $this->add_group_control(
165
+ Group_Control_Foreground::get_type(),
166
+ [
167
+ 'name' => 'title',
168
+ 'selector' => '{{WRAPPER}} .ha-gradient-heading',
169
+ ]
170
+ );
171
+
172
+ $this->add_group_control(
173
+ Group_Control_Typography::get_type(),
174
+ [
175
+ 'name' => 'title',
176
+ 'selector' => '{{WRAPPER}} .ha-gradient-heading',
177
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
178
+ ]
179
+ );
180
+
181
+ $this->add_group_control(
182
+ Group_Control_Text_Shadow::get_type(),
183
+ [
184
+ 'name' => 'title',
185
+ 'label' => __( 'Text Shadow', 'happy-elementor-addons' ),
186
+ 'selector' => '{{WRAPPER}} .ha-gradient-heading',
187
+ ]
188
+ );
189
+
190
+ $this->add_control(
191
+ 'blend_mode',
192
+ [
193
+ 'label' => __( 'Blend Mode', 'happy-elementor-addons' ),
194
+ 'type' => Controls_Manager::SELECT,
195
+ 'options' => [
196
+ '' => __( 'Normal', 'happy-elementor-addons' ),
197
+ 'multiply' => 'Multiply',
198
+ 'screen' => 'Screen',
199
+ 'overlay' => 'Overlay',
200
+ 'darken' => 'Darken',
201
+ 'lighten' => 'Lighten',
202
+ 'color-dodge' => 'Color Dodge',
203
+ 'saturation' => 'Saturation',
204
+ 'color' => 'Color',
205
+ 'difference' => 'Difference',
206
+ 'exclusion' => 'Exclusion',
207
+ 'hue' => 'Hue',
208
+ 'luminosity' => 'Luminosity',
209
+ ],
210
+ 'selectors' => [
211
+ '{{WRAPPER}} .ha-gradient-heading' => 'mix-blend-mode: {{VALUE}};',
212
+ ],
213
+ 'separator' => 'none',
214
+ ]
215
+ );
216
+
217
+ $this->end_controls_section();
218
+ }
219
+
220
+ protected function render() {
221
+ $settings = $this->get_settings_for_display();
222
+
223
+ $this->add_inline_editing_attributes( 'title', 'basic' );
224
+ $this->add_render_attribute( 'title', 'class', 'ha-gradient-heading' );
225
+
226
+ $title = ha_kses_basic( $settings['title' ] );
227
+
228
+ if ( ! empty( $settings['link']['url'] ) ) {
229
+ $this->add_link_attributes( 'link', $settings['link'] );
230
+
231
+ $title = sprintf( '<a %1$s>%2$s</a>',
232
+ $this->get_render_attribute_string( 'link' ),
233
+ $title
234
+ );
235
+ }
236
+
237
+ printf( '<%1$s %2$s>%3$s</%1$s>',
238
+ tag_escape( $settings['title_tag'] ),
239
+ $this->get_render_attribute_string( 'title' ),
240
+ $title
241
+ );
242
+ }
243
+
244
+ public function _content_template() {
245
+ ?>
246
+ <#
247
+ view.addInlineEditingAttributes( 'title', 'basic' );
248
+ view.addRenderAttribute( 'title', 'class', 'ha-gradient-heading' );
249
+
250
+ var title = _.isEmpty(settings.link.url) ? settings.title : '<a href="'+settings.link.url+'">'+settings.title+'</a>';
251
+ #>
252
+ <{{ settings.title_tag }} {{{ view.getRenderAttributeString( 'title' ) }}}>{{{ title }}}</{{ settings.title_tag }}>
253
+ <?php
254
+ }
255
  }
widgets/icon-box/widget.php CHANGED
@@ -18,37 +18,37 @@ defined( 'ABSPATH' ) || die();
18
 
19
  class Icon_Box extends Base {
20
 
21
- /**
22
- * Get widget title.
23
- *
24
- * @since 1.0.0
25
- * @access public
26
- *
27
- * @return string Widget title.
28
- */
29
- public function get_title() {
30
- return __( 'Icon Box', 'happy-elementor-addons' );
31
- }
32
 
33
  public function get_custom_help_url() {
34
  return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/icon-box/';
35
  }
36
 
37
- /**
38
- * Get widget icon.
39
- *
40
- * @since 1.0.0
41
- * @access public
42
- *
43
- * @return string Widget icon.
44
- */
45
- public function get_icon() {
46
- return 'hm hm-icon-box';
47
- }
48
-
49
- public function get_keywords() {
50
- return [ 'info', 'box', 'icon' ];
51
- }
52
 
53
  protected function register_content_controls() {
54
  $this->start_controls_section(
@@ -59,735 +59,733 @@ class Icon_Box extends Base {
59
  ]
60
  );
61
 
62
- if ( ha_is_elementor_version( '<', '2.6.0' ) ) {
63
- $this->add_control(
64
- 'icon',
65
- [
66
- 'show_label' => false,
67
- 'type' => Controls_Manager::ICON,
68
- 'label_block' => true,
69
- 'options' => ha_get_happy_icons(),
70
- 'default' => 'fa fa-smile-o',
71
- ]
72
- );
73
- } else {
74
- $this->add_control(
75
- 'selected_icon',
76
- [
77
- 'show_label' => false,
78
- 'type' => Controls_Manager::ICONS,
79
- 'fa4compatibility' => 'icon',
80
- 'label_block' => true,
81
- 'default' => [
82
- 'value' => 'fas fa-smile-wink',
83
- 'library' => 'fa-solid',
84
- ]
85
- ]
86
- );
87
- }
88
-
89
- $this->add_control(
90
- 'title',
91
- [
92
- 'label' => __( 'Title', 'happy-elementor-addons' ),
93
- 'type' => Controls_Manager::TEXT,
94
- 'label_block' => true,
95
- 'default' => __( 'Happy Icon Box', 'happy-elementor-addons' ),
96
- 'placeholder' => __( 'Type Icon Box Title', 'happy-elementor-addons' ),
97
- 'dynamic' => [
98
- 'active' => true,
99
- ]
100
- ]
101
- );
102
-
103
- $this->add_control(
104
- 'badge_text',
105
- [
106
- 'label' => __( 'Badge Text', 'happy-elementor-addons' ),
107
- 'type' => Controls_Manager::TEXT,
108
- 'label_block' => true,
109
- 'placeholder' => __( 'Type Icon Badge Text', 'happy-elementor-addons' ),
110
- 'dynamic' => [
111
- 'active' => true,
112
- ]
113
- ]
114
- );
115
-
116
- $this->add_control(
117
- 'link',
118
- [
119
- 'label' => __( 'Box Link', 'happy-elementor-addons' ),
120
- 'separator' => 'before',
121
- 'type' => Controls_Manager::URL,
122
- 'placeholder' => 'https://example.com',
123
- 'dynamic' => [
124
- 'active' => true,
125
- ]
126
- ]
127
- );
128
-
129
- $this->add_control(
130
- 'title_tag',
131
- [
132
- 'label' => __( 'Title HTML Tag', 'happy-elementor-addons' ),
133
- 'type' => Controls_Manager::CHOOSE,
134
- 'separator' => 'before',
135
- 'options' => [
136
- 'h1' => [
137
- 'title' => __( 'H1', 'happy-elementor-addons' ),
138
- 'icon' => 'eicon-editor-h1'
139
- ],
140
- 'h2' => [
141
- 'title' => __( 'H2', 'happy-elementor-addons' ),
142
- 'icon' => 'eicon-editor-h2'
143
- ],
144
- 'h3' => [
145
- 'title' => __( 'H3', 'happy-elementor-addons' ),
146
- 'icon' => 'eicon-editor-h3'
147
- ],
148
- 'h4' => [
149
- 'title' => __( 'H4', 'happy-elementor-addons' ),
150
- 'icon' => 'eicon-editor-h4'
151
- ],
152
- 'h5' => [
153
- 'title' => __( 'H5', 'happy-elementor-addons' ),
154
- 'icon' => 'eicon-editor-h5'
155
- ],
156
- 'h6' => [
157
- 'title' => __( 'H6', 'happy-elementor-addons' ),
158
- 'icon' => 'eicon-editor-h6'
159
- ]
160
- ],
161
- 'default' => 'h2',
162
- 'toggle' => false,
163
- ]
164
- );
165
-
166
- $this->add_responsive_control(
167
- 'align',
168
- [
169
- 'label' => __( 'Alignment', 'happy-elementor-addons' ),
170
- 'type' => Controls_Manager::CHOOSE,
171
- 'options' => [
172
- 'left' => [
173
- 'title' => __( 'Left', 'happy-elementor-addons' ),
174
- 'icon' => 'fa fa-align-left',
175
- ],
176
- 'center' => [
177
- 'title' => __( 'Center', 'happy-elementor-addons' ),
178
- 'icon' => 'fa fa-align-center',
179
- ],
180
- 'right' => [
181
- 'title' => __( 'Right', 'happy-elementor-addons' ),
182
- 'icon' => 'fa fa-align-right',
183
- ],
184
- ],
185
- 'toggle' => true,
186
- 'default' => 'center',
187
- 'selectors' => [
188
- '{{WRAPPER}}' => 'text-align: {{VALUE}};'
189
- ]
190
- ]
191
- );
192
-
193
- $this->end_controls_section();
194
- }
195
-
196
- protected function register_style_controls() {
197
- $this->start_controls_section(
198
- '_section_style_icon',
199
- [
200
- 'label' => __( 'Icon', 'happy-elementor-addons' ),
201
- 'tab' => Controls_Manager::TAB_STYLE,
202
- ]
203
- );
204
-
205
- $this->add_responsive_control(
206
- 'icon_size',
207
- [
208
- 'label' => __( 'Size', 'happy-elementor-addons' ),
209
- 'type' => Controls_Manager::SLIDER,
210
- 'size_units' => [ 'px' ],
211
- 'range' => [
212
- 'px' => [
213
- 'min' => 6,
214
- 'max' => 300,
215
- ],
216
- ],
217
- 'selectors' => [
218
- '{{WRAPPER}} .ha-icon-box-icon' => 'font-size: {{SIZE}}{{UNIT}};',
219
- ],
220
- ]
221
- );
222
-
223
- $this->add_responsive_control(
224
- 'icon_padding',
225
- [
226
- 'label' => __( 'Padding', 'happy-elementor-addons' ),
227
- 'type' => Controls_Manager::SLIDER,
228
- 'size_units' => ['px'],
229
- 'selectors' => [
230
- '{{WRAPPER}} .ha-icon-box-icon' => 'padding: {{SIZE}}{{UNIT}};',
231
- ],
232
- ]
233
- );
234
-
235
- $this->add_responsive_control(
236
- 'icon_spacing',
237
- [
238
- 'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
239
- 'type' => Controls_Manager::SLIDER,
240
- 'size_units' => ['px'],
241
- 'range' => [
242
- 'px' => [
243
- 'max' => 150,
244
- ]
245
- ],
246
- 'selectors' => [
247
- '{{WRAPPER}} .ha-icon-box-icon' => 'margin-bottom: {{SIZE}}{{UNIT}};',
248
- ],
249
- ]
250
- );
251
-
252
- $this->add_group_control(
253
- Group_Control_Border::get_type(),
254
- [
255
- 'name' => 'icon_border',
256
- 'selector' => '{{WRAPPER}} .ha-icon-box-icon'
257
- ]
258
- );
259
-
260
- $this->add_responsive_control(
261
- 'icon_border_radius',
262
- [
263
- 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
264
- 'type' => Controls_Manager::DIMENSIONS,
265
- 'size_units' => [ 'px', '%' ],
266
- 'selectors' => [
267
- '{{WRAPPER}} .ha-icon-box-icon' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
268
- ],
269
- ]
270
- );
271
-
272
- $this->add_group_control(
273
- Group_Control_Box_Shadow::get_type(),
274
- [
275
- 'name' => 'icon_shadow',
276
- 'exclude' => [
277
- 'box_shadow_position',
278
- ],
279
- 'selector' => '{{WRAPPER}} .ha-icon-box-icon'
280
- ]
281
- );
282
-
283
- $this->start_controls_tabs( '_tabs_icon' );
284
-
285
- $this->start_controls_tab(
286
- '_tab_icon_normal',
287
- [
288
- 'label' => __( 'Normal', 'happy-elementor-addons' ),
289
- ]
290
- );
291
-
292
- $this->add_control(
293
- 'icon_color',
294
- [
295
- 'label' => __( 'Color', 'happy-elementor-addons' ),
296
- 'type' => Controls_Manager::COLOR,
297
- 'selectors' => [
298
- '{{WRAPPER}} .ha-icon-box-icon' => 'color: {{VALUE}};',
299
- ],
300
- ]
301
- );
302
-
303
- $this->add_control(
304
- 'icon_bg_color',
305
- [
306
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
307
- 'type' => Controls_Manager::COLOR,
308
- 'selectors' => [
309
- '{{WRAPPER}} .ha-icon-box-icon' => 'background-color: {{VALUE}};',
310
- ],
311
- ]
312
- );
313
-
314
- $this->add_control(
315
- 'icon_bg_rotate',
316
- [
317
- 'label' => __( 'Rotate Icon Box', 'happy-elementor-addons' ),
318
- 'type' => Controls_Manager::SLIDER,
319
- 'size_units' => [ 'deg' ],
320
- 'default' => [
321
- 'unit' => 'deg',
322
- ],
323
- 'range' => [
324
- 'deg' => [
325
- 'min' => 0,
326
- 'max' => 360,
327
- ],
328
- ],
329
- 'selectors' => [
330
- '{{WRAPPER}} .ha-icon-box-icon' => '-webkit-transform: rotate({{SIZE}}{{UNIT}}); transform: rotate({{SIZE}}{{UNIT}});',
331
- '{{WRAPPER}} .ha-icon-box-icon > i' => '-webkit-transform: rotate(-{{SIZE}}{{UNIT}}); transform: rotate(-{{SIZE}}{{UNIT}});',
332
- ],
333
- 'condition' => [
334
- 'icon_bg_color!' => '',
335
- ]
336
- ]
337
- );
338
-
339
- $this->end_controls_tab();
340
-
341
- $this->start_controls_tab(
342
- '_tab_button_hover',
343
- [
344
- 'label' => __( 'Hover', 'happy-elementor-addons' ),
345
- ]
346
- );
347
-
348
- $this->add_control(
349
- 'icon_hover_color',
350
- [
351
- 'label' => __( 'Color', 'happy-elementor-addons' ),
352
- 'type' => Controls_Manager::COLOR,
353
- 'selectors' => [
354
- '{{WRAPPER}}:hover .ha-icon-box-icon' => 'color: {{VALUE}};',
355
- ],
356
- ]
357
- );
358
-
359
- $this->add_control(
360
- 'icon_hover_bg_color',
361
- [
362
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
363
- 'type' => Controls_Manager::COLOR,
364
- 'selectors' => [
365
- '{{WRAPPER}}:hover .ha-icon-box-icon' => 'background-color: {{VALUE}};',
366
- ],
367
- ]
368
- );
369
-
370
- $this->add_control(
371
- 'icon_hover_border_color',
372
- [
373
- 'label' => __( 'Border Color', 'happy-elementor-addons' ),
374
- 'type' => Controls_Manager::COLOR,
375
- 'selectors' => [
376
- '{{WRAPPER}}:hover .ha-icon-box-icon' => 'border-color: {{VALUE}};',
377
- ],
378
- 'condition' => [
379
- 'icon_border_border!' => '',
380
- ]
381
- ]
382
- );
383
-
384
- $this->add_control(
385
- 'icon_hover_bg_rotate',
386
- [
387
- 'label' => __( 'Rotate Icon Box', 'happy-elementor-addons' ),
388
- 'type' => Controls_Manager::SLIDER,
389
- 'size_units' => [ 'deg' ],
390
- 'default' => [
391
- 'unit' => 'deg',
392
- ],
393
- 'range' => [
394
- 'deg' => [
395
- 'min' => 0,
396
- 'max' => 360,
397
- ],
398
- ],
399
- 'selectors' => [
400
- '{{WRAPPER}}:hover .ha-icon-box-icon' => '-webkit-transform: rotate({{SIZE}}{{UNIT}}); transform: rotate({{SIZE}}{{UNIT}});',
401
- '{{WRAPPER}}:hover .ha-icon-box-icon > i' => '-webkit-transform: rotate(-{{SIZE}}{{UNIT}}); transform: rotate(-{{SIZE}}{{UNIT}});',
402
- ],
403
- 'condition' => [
404
- 'icon_bg_color!' => '',
405
- ]
406
- ]
407
- );
408
-
409
- $this->end_controls_tab();
410
- $this->end_controls_tabs();
411
-
412
- $this->end_controls_section();
413
-
414
- $this->start_controls_section(
415
- '_section_style_title',
416
- [
417
- 'label' => __( 'Title', 'happy-elementor-addons' ),
418
- 'tab' => Controls_Manager::TAB_STYLE,
419
- ]
420
- );
421
-
422
- $this->add_group_control(
423
- Group_Control_Typography::get_type(),
424
- [
425
- 'name' => 'title',
426
- 'selector' => '{{WRAPPER}} .ha-icon-box-title',
427
- 'scheme' => Scheme_Typography::TYPOGRAPHY_2
428
- ]
429
- );
430
-
431
- $this->add_group_control(
432
- Group_Control_Text_Shadow::get_type(),
433
- [
434
- 'name' => 'title',
435
- 'selector' => '{{WRAPPER}} .ha-icon-box-title',
436
- ]
437
- );
438
-
439
- $this->start_controls_tabs( '_tabs_title' );
440
-
441
- $this->start_controls_tab(
442
- '_tab_title_normal',
443
- [
444
- 'label' => __( 'Normal', 'happy-elementor-addons' ),
445
- ]
446
- );
447
-
448
- $this->add_control(
449
- 'title_color',
450
- [
451
- 'label' => __( 'Text Color', 'happy-elementor-addons' ),
452
- 'type' => Controls_Manager::COLOR,
453
- 'selectors' => [
454
- '{{WRAPPER}} .ha-icon-box-title' => 'color: {{VALUE}};',
455
- ],
456
- ]
457
- );
458
-
459
- $this->end_controls_tab();
460
-
461
- $this->start_controls_tab(
462
- '_tab_title_hover',
463
- [
464
- 'label' => __( 'Hover', 'happy-elementor-addons' ),
465
- ]
466
- );
467
-
468
- $this->add_control(
469
- 'title_hover_color',
470
- [
471
- 'label' => __( 'Text Color', 'happy-elementor-addons' ),
472
- 'type' => Controls_Manager::COLOR,
473
- 'selectors' => [
474
- '{{WRAPPER}}:hover .ha-icon-box-title' => 'color: {{VALUE}};',
475
- ],
476
- ]
477
- );
478
-
479
- $this->end_controls_tab();
480
- $this->end_controls_tabs();
481
-
482
- $this->end_controls_section();
483
-
484
- $this->start_controls_section(
485
- '_section_style_badge',
486
- [
487
- 'label' => __( 'Badge', 'happy-elementor-addons' ),
488
- 'tab' => Controls_Manager::TAB_STYLE,
489
- ]
490
- );
491
-
492
- $this->add_control(
493
- 'badge_offset_toggle',
494
- [
495
- 'label' => __( 'Offset', 'happy-elementor-addons' ),
496
- 'type' => Controls_Manager::POPOVER_TOGGLE,
497
- 'label_off' => __( 'None', 'happy-elementor-addons' ),
498
- 'label_on' => __( 'Custom', 'happy-elementor-addons' ),
499
- 'return_value' => 'yes',
500
- ]
501
- );
502
-
503
- $this->start_popover();
504
-
505
- $this->add_responsive_control(
506
- 'badge_offset_x',
507
- [
508
- 'label' => __( 'Offset Left', 'happy-elementor-addons' ),
509
- 'type' => Controls_Manager::SLIDER,
510
- 'size_units' => ['px'],
511
- 'condition' => [
512
- 'badge_offset_toggle' => 'yes'
513
- ],
514
- 'default' => [
515
- 'size' => 1
516
- ],
517
- 'range' => [
518
- 'px' => [
519
- 'min' => -250,
520
- 'max' => 250,
521
- ],
522
- ],
523
- 'render_type' => 'ui'
524
- ]
525
- );
526
-
527
- $this->add_responsive_control(
528
- 'badge_offset_y',
529
- [
530
- 'label' => __( 'Offset Top', 'happy-elementor-addons' ),
531
- 'type' => Controls_Manager::SLIDER,
532
- 'size_units' => ['px'],
533
- 'condition' => [
534
- 'badge_offset_toggle' => 'yes'
535
- ],
536
- 'default' => [
537
- 'size' => 1
538
- ],
539
- 'range' => [
540
- 'px' => [
541
- 'min' => -500,
542
- 'max' => 500,
543
- ],
544
- ],
545
- 'selectors' => [
546
- '(desktop){{WRAPPER}} .ha-badge' =>
547
- '-webkit-transform: translate({{badge_offset_x.SIZE || 0}}{{UNIT}}, {{badge_offset_y.SIZE || 0}}{{UNIT}});
548
- transform: translate({{badge_offset_x.SIZE || 0}}{{UNIT}}, {{badge_offset_y.SIZE || 0}}{{UNIT}});',
549
- '(tablet){{WRAPPER}} .ha-badge' =>
550
- '-webkit-transform: translate({{badge_offset_x_tablet.SIZE || 0}}{{UNIT}}, {{badge_offset_y_tablet.SIZE || 0}}{{UNIT}});
551
- transform: translate({{badge_offset_x_tablet.SIZE || 0}}{{UNIT}}, {{badge_offset_y_tablet.SIZE || 0}}{{UNIT}});',
552
- '(mobile){{WRAPPER}} .ha-badge' =>
553
- '-webkit-transform: translate({{badge_offset_x_mobile.SIZE}}{{UNIT}}, {{badge_offset_y_mobile.SIZE || 0}}{{UNIT}});
554
- transform: translate({{badge_offset_x_mobile.SIZE || 0}}{{UNIT}}, {{badge_offset_y_mobile.SIZE || 0}}{{UNIT}});',
555
- ],
556
- ]
557
- );
558
- $this->end_popover();
559
-
560
- $this->add_responsive_control(
561
- 'badge_padding',
562
- [
563
- 'label' => __( 'Padding', 'happy-elementor-addons' ),
564
- 'type' => Controls_Manager::DIMENSIONS,
565
- 'size_units' => [ 'px', 'em', '%' ],
566
- 'selectors' => [
567
- '{{WRAPPER}} .ha-badge' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
568
- ],
569
- ]
570
- );
571
-
572
- $this->add_control(
573
- 'badge_color',
574
- [
575
- 'label' => __( 'Text Color', 'happy-elementor-addons' ),
576
- 'type' => Controls_Manager::COLOR,
577
- 'selectors' => [
578
- '{{WRAPPER}} .ha-badge' => 'color: {{VALUE}};',
579
- ],
580
- ]
581
- );
582
-
583
- $this->add_control(
584
- 'badge_bg_color',
585
- [
586
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
587
- 'type' => Controls_Manager::COLOR,
588
- 'selectors' => [
589
- '{{WRAPPER}} .ha-badge' => 'background-color: {{VALUE}};',
590
- ],
591
- ]
592
- );
593
-
594
- $this->add_group_control(
595
- Group_Control_Border::get_type(),
596
- [
597
- 'name' => 'badge_border',
598
- 'selector' => '{{WRAPPER}} .ha-badge',
599
- ]
600
- );
601
-
602
- $this->add_responsive_control(
603
- 'badge_border_radius',
604
- [
605
- 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
606
- 'type' => Controls_Manager::DIMENSIONS,
607
- 'size_units' => [ 'px', '%' ],
608
- 'selectors' => [
609
- '{{WRAPPER}} .ha-badge' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
610
- ],
611
- ]
612
- );
613
-
614
- $this->add_group_control(
615
- Group_Control_Box_Shadow::get_type(),
616
- [
617
- 'name' => 'badge_box_shadow',
618
- 'exclude' => [
619
- 'box_shadow_position',
620
- ],
621
- 'selector' => '{{WRAPPER}} .ha-badge',
622
- ]
623
- );
624
-
625
- $this->add_group_control(
626
- Group_Control_Typography::get_type(),
627
- [
628
- 'name' => 'badge_typography',
629
- 'label' => __( 'Typography', 'happy-elementor-addons' ),
630
- 'exclude' => [
631
- 'font_family',
632
- 'line_height'
633
- ],
634
- 'default' => [
635
- 'font_size' => ['']
636
- ],
637
- 'selector' => '{{WRAPPER}} .ha-badge',
638
- 'scheme' => Scheme_Typography::TYPOGRAPHY_3,
639
- ]
640
- );
641
-
642
- $this->end_controls_section();
643
- }
644
-
645
- /**
646
- * Render widget output on the frontend.
647
- *
648
- * Used to generate the final HTML displayed on the frontend.
649
- *
650
- * Note that if skin is selected, it will be rendered by the skin itself,
651
- * not the widget.
652
- *
653
- * @since 1.0.0
654
- * @access public
655
- */
656
- public function render_content() {
657
- /**
658
- * Before widget render content.
659
- *
660
- * Fires before Elementor widget is being rendered.
661
- *
662
- * @since 1.0.0
663
- *
664
- * @param Widget_Base $this The current widget.
665
- */
666
- do_action( 'elementor/widget/before_render_content', $this );
667
-
668
- ob_start();
669
-
670
- $skin = $this->get_current_skin();
671
- if ( $skin ) {
672
- $skin->set_parent( $this );
673
- $skin->render();
674
- } else {
675
- $this->render();
676
- }
677
-
678
- $widget_content = ob_get_clean();
679
-
680
- if ( empty( $widget_content ) ) {
681
- return;
682
- }
683
-
684
- if ( ha_elementor()->editor->is_edit_mode() ) {
685
- $this->render_edit_tools();
686
- }
687
-
688
- $tag = 'div';
689
- $link = $this->get_settings_for_display( 'link' );
690
- $this->add_render_attribute( 'icon_box', 'class', 'elementor-widget-container' );
691
-
692
- if ( ! empty( $link['url'] ) ) {
693
- $tag = 'a';
694
- $this->add_render_attribute( 'icon_box', 'class', 'ha-icon-box-link' );
695
  $this->add_link_attributes( 'icon_box', $link );
696
- }
697
- ?>
698
- <<?php echo $tag; ?> <?php echo $this->get_render_attribute_string( 'icon_box' ); ?>>
699
- <?php
700
-
701
- /**
702
- * Render widget content.
703
- *
704
- * Filters the widget content before it's rendered.
705
- *
706
- * @since 1.0.0
707
- *
708
- * @param string $widget_content The content of the widget.
709
- * @param Widget_Base $this The widget.
710
- */
711
- $widget_content = apply_filters( 'elementor/widget/render_content', $widget_content, $this );
712
-
713
- echo $widget_content; // XSS ok.
714
- ?>
715
- </<?php echo $tag; ?>>
716
- <?php
717
- }
718
-
719
- protected function render() {
720
- $settings = $this->get_settings_for_display();
721
-
722
- $this->add_inline_editing_attributes( 'title', 'basic' );
723
- $this->add_render_attribute( 'title', 'class', 'ha-icon-box-title' );
724
-
725
- $this->add_inline_editing_attributes( 'badge_text', 'none' );
726
- $this->add_render_attribute( 'badge_text', 'class', 'ha-badge ha-badge--top-right' );
727
- ?>
728
-
729
- <?php if ( $settings['badge_text'] ) : ?>
730
- <span <?php $this->print_render_attribute_string( 'badge_text' ); ?>><?php echo esc_html( $settings['badge_text'] ); ?></span>
731
- <?php endif; ?>
732
-
733
- <?php if ( ! empty( $settings['icon'] ) || ! empty( $settings['selected_icon']['value'] ) ) : ?>
734
- <span class="ha-icon-box-icon">
735
- <?php ha_render_icon( $settings, 'icon', 'selected_icon' ); ?>
736
- </span>
737
- <?php endif;
738
-
739
- if ( $settings['title' ] ) :
740
- printf( '<%1$s %2$s>%3$s</%1$s>',
741
- tag_escape( $settings['title_tag'] ),
742
- $this->get_render_attribute_string( 'title' ),
743
- ha_kses_basic( $settings['title' ] )
744
- );
745
- endif;
746
- }
747
-
748
- public function _content_template() {
749
- ?>
750
- <#
751
- var iconHTML = migrated = '';
752
-
753
- if ( ha.hasIconLibrary() ) {
754
- iconHTML = elementor.helpers.renderIcon( view, settings.selected_icon, { 'aria-hidden': true }, 'i' , 'object' ),
755
- migrated = elementor.helpers.isIconMigrated( settings, 'selected_icon' );
756
- }
757
-
758
- view.addInlineEditingAttributes( 'title', 'basic' );
759
- view.addRenderAttribute( 'title', 'class', 'ha-icon-box-title' );
760
-
761
- view.addInlineEditingAttributes( 'badge_text', 'none' );
762
- view.addRenderAttribute( 'badge_text', 'class', 'ha-badge ha-badge--top-right' );
763
-
764
- if (settings.link.url) {
765
- view.addRenderAttribute( 'link', 'class', 'ha-icon-box-link' );
766
- view.addRenderAttribute( 'link', 'href', settings.link.url );
767
- print( '<a ' + view.getRenderAttributeString( 'link' ) + '>' );
768
- } #>
769
-
770
- <# if (settings.badge_text) { #>
771
- <span {{{ view.getRenderAttributeString( 'badge_text' ) }}}>{{ settings.badge_text }}</span>
772
- <# } #>
773
-
774
- <# if ( settings.icon || settings.selected_icon.value ) { #>
775
- <span class="ha-icon-box-icon">
776
- <# if ( ha.hasIconLibrary() && iconHTML && iconHTML.rendered && ( ! settings.icon || migrated ) ) { #>
777
- {{{ iconHTML.value }}}
778
- <# } else { #>
779
- <i class="{{ settings.icon }}" aria-hidden="true"></i>
780
- <# } #>
781
- </span>
782
- <# } #>
783
-
784
- <# if (settings.title) { #>
785
- <{{ settings.title_tag }} {{{ view.getRenderAttributeString( 'title' ) }}}>{{ settings.title }}</{{ settings.title_tag }}>
786
- <# } #>
787
-
788
- <# if (settings.link.url) {
789
- print( '</a>' );
790
- } #>
791
- <?php
792
- }
793
  }
18
 
19
  class Icon_Box extends Base {
20
 
21
+ /**
22
+ * Get widget title.
23
+ *
24
+ * @since 1.0.0
25
+ * @access public
26
+ *
27
+ * @return string Widget title.
28
+ */
29
+ public function get_title() {
30
+ return __( 'Icon Box', 'happy-elementor-addons' );
31
+ }
32
 
33
  public function get_custom_help_url() {
34
  return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/icon-box/';
35
  }
36
 
37
+ /**
38
+ * Get widget icon.
39
+ *
40
+ * @since 1.0.0
41
+ * @access public
42
+ *
43
+ * @return string Widget icon.
44
+ */
45
+ public function get_icon() {
46
+ return 'hm hm-icon-box';
47
+ }
48
+
49
+ public function get_keywords() {
50
+ return [ 'info', 'box', 'icon' ];
51
+ }
52
 
53
  protected function register_content_controls() {
54
  $this->start_controls_section(
59
  ]
60
  );
61
 
62
+ if ( ha_is_elementor_version( '<', '2.6.0' ) ) {
63
+ $this->add_control(
64
+ 'icon',
65
+ [
66
+ 'show_label' => false,
67
+ 'type' => Controls_Manager::ICON,
68
+ 'label_block' => true,
69
+ 'options' => ha_get_happy_icons(),
70
+ 'default' => 'fa fa-smile-o',
71
+ ]
72
+ );
73
+ } else {
74
+ $this->add_control(
75
+ 'selected_icon',
76
+ [
77
+ 'show_label' => false,
78
+ 'type' => Controls_Manager::ICONS,
79
+ 'fa4compatibility' => 'icon',
80
+ 'label_block' => true,
81
+ 'default' => [
82
+ 'value' => 'fas fa-smile-wink',
83
+ 'library' => 'fa-solid',
84
+ ]
85
+ ]
86
+ );
87
+ }
88
+
89
+ $this->add_control(
90
+ 'title',
91
+ [
92
+ 'label' => __( 'Title', 'happy-elementor-addons' ),
93
+ 'type' => Controls_Manager::TEXT,
94
+ 'label_block' => true,
95
+ 'default' => __( 'Happy Icon Box', 'happy-elementor-addons' ),
96
+ 'placeholder' => __( 'Type Icon Box Title', 'happy-elementor-addons' ),
97
+ 'dynamic' => [
98
+ 'active' => true,
99
+ ]
100
+ ]
101
+ );
102
+
103
+ $this->add_control(
104
+ 'badge_text',
105
+ [
106
+ 'label' => __( 'Badge Text', 'happy-elementor-addons' ),
107
+ 'type' => Controls_Manager::TEXT,
108
+ 'label_block' => true,
109
+ 'placeholder' => __( 'Type Icon Badge Text', 'happy-elementor-addons' ),
110
+ 'dynamic' => [
111
+ 'active' => true,
112
+ ]
113
+ ]
114
+ );
115
+
116
+ $this->add_control(
117
+ 'link',
118
+ [
119
+ 'label' => __( 'Box Link', 'happy-elementor-addons' ),
120
+ 'separator' => 'before',
121
+ 'type' => Controls_Manager::URL,
122
+ 'placeholder' => 'https://example.com',
123
+ 'dynamic' => [
124
+ 'active' => true,
125
+ ]
126
+ ]
127
+ );
128
+
129
+ $this->add_control(
130
+ 'title_tag',
131
+ [
132
+ 'label' => __( 'Title HTML Tag', 'happy-elementor-addons' ),
133
+ 'type' => Controls_Manager::CHOOSE,
134
+ 'separator' => 'before',
135
+ 'options' => [
136
+ 'h1' => [
137
+ 'title' => __( 'H1', 'happy-elementor-addons' ),
138
+ 'icon' => 'eicon-editor-h1'
139
+ ],
140
+ 'h2' => [
141
+ 'title' => __( 'H2', 'happy-elementor-addons' ),
142
+ 'icon' => 'eicon-editor-h2'
143
+ ],
144
+ 'h3' => [
145
+ 'title' => __( 'H3', 'happy-elementor-addons' ),
146
+ 'icon' => 'eicon-editor-h3'
147
+ ],
148
+ 'h4' => [
149
+ 'title' => __( 'H4', 'happy-elementor-addons' ),
150
+ 'icon' => 'eicon-editor-h4'
151
+ ],
152
+ 'h5' => [
153
+ 'title' => __( 'H5', 'happy-elementor-addons' ),
154
+ 'icon' => 'eicon-editor-h5'
155
+ ],
156
+ 'h6' => [
157
+ 'title' => __( 'H6', 'happy-elementor-addons' ),
158
+ 'icon' => 'eicon-editor-h6'
159
+ ]
160
+ ],
161
+ 'default' => 'h2',
162
+ 'toggle' => false,
163
+ ]
164
+ );
165
+
166
+ $this->add_responsive_control(
167
+ 'align',
168
+ [
169
+ 'label' => __( 'Alignment', 'happy-elementor-addons' ),
170
+ 'type' => Controls_Manager::CHOOSE,
171
+ 'options' => [
172
+ 'left' => [
173
+ 'title' => __( 'Left', 'happy-elementor-addons' ),
174
+ 'icon' => 'eicon-text-align-left',
175
+ ],
176
+ 'center' => [
177
+ 'title' => __( 'Center', 'happy-elementor-addons' ),
178
+ 'icon' => 'eicon-text-align-center',
179
+ ],
180
+ 'right' => [
181
+ 'title' => __( 'Right', 'happy-elementor-addons' ),
182
+ 'icon' => 'eicon-text-align-right',
183
+ ],
184
+ 'justify' => [
185
+ 'title' => __( 'Justify', 'happy-elementor-addons' ),
186
+ 'icon' => 'eicon-text-align-justify',
187
+ ],
188
+ ],
189
+ 'toggle' => true,
190
+ 'default' => 'center',
191
+ 'selectors' => [
192
+ '{{WRAPPER}}' => 'text-align: {{VALUE}};'
193
+ ]
194
+ ]
195
+ );
196
+
197
+ $this->end_controls_section();
198
+ }
199
+
200
+ protected function register_style_controls() {
201
+ $this->start_controls_section(
202
+ '_section_style_icon',
203
+ [
204
+ 'label' => __( 'Icon', 'happy-elementor-addons' ),
205
+ 'tab' => Controls_Manager::TAB_STYLE,
206
+ ]
207
+ );
208
+
209
+ $this->add_responsive_control(
210
+ 'icon_size',
211
+ [
212
+ 'label' => __( 'Size', 'happy-elementor-addons' ),
213
+ 'type' => Controls_Manager::SLIDER,
214
+ 'size_units' => [ 'px' ],
215
+ 'range' => [
216
+ 'px' => [
217
+ 'min' => 6,
218
+ 'max' => 300,
219
+ ],
220
+ ],
221
+ 'selectors' => [
222
+ '{{WRAPPER}} .ha-icon-box-icon' => 'font-size: {{SIZE}}{{UNIT}};',
223
+ ],
224
+ ]
225
+ );
226
+
227
+ $this->add_responsive_control(
228
+ 'icon_padding',
229
+ [
230
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
231
+ 'type' => Controls_Manager::SLIDER,
232
+ 'size_units' => ['px'],
233
+ 'selectors' => [
234
+ '{{WRAPPER}} .ha-icon-box-icon' => 'padding: {{SIZE}}{{UNIT}};',
235
+ ],
236
+ ]
237
+ );
238
+
239
+ $this->add_responsive_control(
240
+ 'icon_spacing',
241
+ [
242
+ 'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
243
+ 'type' => Controls_Manager::SLIDER,
244
+ 'size_units' => ['px'],
245
+ 'range' => [
246
+ 'px' => [
247
+ 'max' => 150,
248
+ ]
249
+ ],
250
+ 'selectors' => [
251
+ '{{WRAPPER}} .ha-icon-box-icon' => 'margin-bottom: {{SIZE}}{{UNIT}};',
252
+ ],
253
+ ]
254
+ );
255
+
256
+ $this->add_group_control(
257
+ Group_Control_Border::get_type(),
258
+ [
259
+ 'name' => 'icon_border',
260
+ 'selector' => '{{WRAPPER}} .ha-icon-box-icon'
261
+ ]
262
+ );
263
+
264
+ $this->add_responsive_control(
265
+ 'icon_border_radius',
266
+ [
267
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
268
+ 'type' => Controls_Manager::DIMENSIONS,
269
+ 'size_units' => [ 'px', '%' ],
270
+ 'selectors' => [
271
+ '{{WRAPPER}} .ha-icon-box-icon' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
272
+ ],
273
+ ]
274
+ );
275
+
276
+ $this->add_group_control(
277
+ Group_Control_Box_Shadow::get_type(),
278
+ [
279
+ 'name' => 'icon_shadow',
280
+ 'exclude' => [
281
+ 'box_shadow_position',
282
+ ],
283
+ 'selector' => '{{WRAPPER}} .ha-icon-box-icon'
284
+ ]
285
+ );
286
+
287
+ $this->start_controls_tabs( '_tabs_icon' );
288
+
289
+ $this->start_controls_tab(
290
+ '_tab_icon_normal',
291
+ [
292
+ 'label' => __( 'Normal', 'happy-elementor-addons' ),
293
+ ]
294
+ );
295
+
296
+ $this->add_control(
297
+ 'icon_color',
298
+ [
299
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
300
+ 'type' => Controls_Manager::COLOR,
301
+ 'selectors' => [
302
+ '{{WRAPPER}} .ha-icon-box-icon' => 'color: {{VALUE}};',
303
+ ],
304
+ ]
305
+ );
306
+
307
+ $this->add_control(
308
+ 'icon_bg_color',
309
+ [
310
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
311
+ 'type' => Controls_Manager::COLOR,
312
+ 'selectors' => [
313
+ '{{WRAPPER}} .ha-icon-box-icon' => 'background-color: {{VALUE}};',
314
+ ],
315
+ ]
316
+ );
317
+
318
+ $this->add_control(
319
+ 'icon_bg_rotate',
320
+ [
321
+ 'label' => __( 'Rotate Icon Box', 'happy-elementor-addons' ),
322
+ 'type' => Controls_Manager::SLIDER,
323
+ 'size_units' => [ 'deg' ],
324
+ 'default' => [
325
+ 'unit' => 'deg',
326
+ ],
327
+ 'range' => [
328
+ 'deg' => [
329
+ 'min' => 0,
330
+ 'max' => 360,
331
+ ],
332
+ ],
333
+ 'selectors' => [
334
+ '{{WRAPPER}} .ha-icon-box-icon' => '-webkit-transform: rotate({{SIZE}}{{UNIT}}); transform: rotate({{SIZE}}{{UNIT}});',
335
+ '{{WRAPPER}} .ha-icon-box-icon > i' => '-webkit-transform: rotate(-{{SIZE}}{{UNIT}}); transform: rotate(-{{SIZE}}{{UNIT}});',
336
+ ],
337
+ 'condition' => [
338
+ 'icon_bg_color!' => '',
339
+ ]
340
+ ]
341
+ );
342
+
343
+ $this->end_controls_tab();
344
+
345
+ $this->start_controls_tab(
346
+ '_tab_button_hover',
347
+ [
348
+ 'label' => __( 'Hover', 'happy-elementor-addons' ),
349
+ ]
350
+ );
351
+
352
+ $this->add_control(
353
+ 'icon_hover_color',
354
+ [
355
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
356
+ 'type' => Controls_Manager::COLOR,
357
+ 'selectors' => [
358
+ '{{WRAPPER}}:hover .ha-icon-box-icon' => 'color: {{VALUE}};',
359
+ ],
360
+ ]
361
+ );
362
+
363
+ $this->add_control(
364
+ 'icon_hover_bg_color',
365
+ [
366
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
367
+ 'type' => Controls_Manager::COLOR,
368
+ 'selectors' => [
369
+ '{{WRAPPER}}:hover .ha-icon-box-icon' => 'background-color: {{VALUE}};',
370
+ ],
371
+ ]
372
+ );
373
+
374
+ $this->add_control(
375
+ 'icon_hover_border_color',
376
+ [
377
+ 'label' => __( 'Border Color', 'happy-elementor-addons' ),
378
+ 'type' => Controls_Manager::COLOR,
379
+ 'selectors' => [
380
+ '{{WRAPPER}}:hover .ha-icon-box-icon' => 'border-color: {{VALUE}};',
381
+ ],
382
+ 'condition' => [
383
+ 'icon_border_border!' => '',
384
+ ]
385
+ ]
386
+ );
387
+
388
+ $this->add_control(
389
+ 'icon_hover_bg_rotate',
390
+ [
391
+ 'label' => __( 'Rotate Icon Box', 'happy-elementor-addons' ),
392
+ 'type' => Controls_Manager::SLIDER,
393
+ 'size_units' => [ 'deg' ],
394
+ 'default' => [
395
+ 'unit' => 'deg',
396
+ ],
397
+ 'range' => [
398
+ 'deg' => [
399
+ 'min' => 0,
400
+ 'max' => 360,
401
+ ],
402
+ ],
403
+ 'selectors' => [
404
+ '{{WRAPPER}}:hover .ha-icon-box-icon' => '-webkit-transform: rotate({{SIZE}}{{UNIT}}); transform: rotate({{SIZE}}{{UNIT}});',
405
+ '{{WRAPPER}}:hover .ha-icon-box-icon > i' => '-webkit-transform: rotate(-{{SIZE}}{{UNIT}}); transform: rotate(-{{SIZE}}{{UNIT}});',
406
+ ],
407
+ 'condition' => [
408
+ 'icon_bg_color!' => '',
409
+ ]
410
+ ]
411
+ );
412
+
413
+ $this->end_controls_tab();
414
+ $this->end_controls_tabs();
415
+
416
+ $this->end_controls_section();
417
+
418
+ $this->start_controls_section(
419
+ '_section_style_title',
420
+ [
421
+ 'label' => __( 'Title', 'happy-elementor-addons' ),
422
+ 'tab' => Controls_Manager::TAB_STYLE,
423
+ ]
424
+ );
425
+
426
+ $this->add_group_control(
427
+ Group_Control_Typography::get_type(),
428
+ [
429
+ 'name' => 'title',
430
+ 'selector' => '{{WRAPPER}} .ha-icon-box-title',
431
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_2
432
+ ]
433
+ );
434
+
435
+ $this->add_group_control(
436
+ Group_Control_Text_Shadow::get_type(),
437
+ [
438
+ 'name' => 'title',
439
+ 'selector' => '{{WRAPPER}} .ha-icon-box-title',
440
+ ]
441
+ );
442
+
443
+ $this->start_controls_tabs( '_tabs_title' );
444
+
445
+ $this->start_controls_tab(
446
+ '_tab_title_normal',
447
+ [
448
+ 'label' => __( 'Normal', 'happy-elementor-addons' ),
449
+ ]
450
+ );
451
+
452
+ $this->add_control(
453
+ 'title_color',
454
+ [
455
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
456
+ 'type' => Controls_Manager::COLOR,
457
+ 'selectors' => [
458
+ '{{WRAPPER}} .ha-icon-box-title' => 'color: {{VALUE}};',
459
+ ],
460
+ ]
461
+ );
462
+
463
+ $this->end_controls_tab();
464
+
465
+ $this->start_controls_tab(
466
+ '_tab_title_hover',
467
+ [
468
+ 'label' => __( 'Hover', 'happy-elementor-addons' ),
469
+ ]
470
+ );
471
+
472
+ $this->add_control(
473
+ 'title_hover_color',
474
+ [
475
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
476
+ 'type' => Controls_Manager::COLOR,
477
+ 'selectors' => [
478
+ '{{WRAPPER}}:hover .ha-icon-box-title' => 'color: {{VALUE}};',
479
+ ],
480
+ ]
481
+ );
482
+
483
+ $this->end_controls_tab();
484
+ $this->end_controls_tabs();
485
+
486
+ $this->end_controls_section();
487
+
488
+ $this->start_controls_section(
489
+ '_section_style_badge',
490
+ [
491
+ 'label' => __( 'Badge', 'happy-elementor-addons' ),
492
+ 'tab' => Controls_Manager::TAB_STYLE,
493
+ ]
494
+ );
495
+
496
+ $this->add_control(
497
+ 'badge_offset_toggle',
498
+ [
499
+ 'label' => __( 'Offset', 'happy-elementor-addons' ),
500
+ 'type' => Controls_Manager::POPOVER_TOGGLE,
501
+ 'label_off' => __( 'None', 'happy-elementor-addons' ),
502
+ 'label_on' => __( 'Custom', 'happy-elementor-addons' ),
503
+ 'return_value' => 'yes',
504
+ ]
505
+ );
506
+
507
+ $this->start_popover();
508
+
509
+ $this->add_responsive_control(
510
+ 'badge_offset_x',
511
+ [
512
+ 'label' => __( 'Offset Left', 'happy-elementor-addons' ),
513
+ 'type' => Controls_Manager::SLIDER,
514
+ 'size_units' => ['px'],
515
+ 'condition' => [
516
+ 'badge_offset_toggle' => 'yes'
517
+ ],
518
+ 'default' => [
519
+ 'size' => 1
520
+ ],
521
+ 'range' => [
522
+ 'px' => [
523
+ 'min' => -250,
524
+ 'max' => 250,
525
+ ],
526
+ ],
527
+ 'selectors' => [
528
+ '{{WRAPPER}} .ha-badge' => '--ha-badge-translate-x: {{SIZE}}{{UNIT}};',
529
+ ],
530
+ ]
531
+ );
532
+
533
+ $this->add_responsive_control(
534
+ 'badge_offset_y',
535
+ [
536
+ 'label' => __( 'Offset Top', 'happy-elementor-addons' ),
537
+ 'type' => Controls_Manager::SLIDER,
538
+ 'size_units' => ['px'],
539
+ 'condition' => [
540
+ 'badge_offset_toggle' => 'yes'
541
+ ],
542
+ 'default' => [
543
+ 'size' => 1
544
+ ],
545
+ 'range' => [
546
+ 'px' => [
547
+ 'min' => -500,
548
+ 'max' => 500,
549
+ ],
550
+ ],
551
+ 'selectors' => [
552
+ '{{WRAPPER}} .ha-badge' => '--ha-badge-translate-y: {{SIZE}}{{UNIT}};',
553
+ ],
554
+ ]
555
+ );
556
+ $this->end_popover();
557
+
558
+ $this->add_responsive_control(
559
+ 'badge_padding',
560
+ [
561
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
562
+ 'type' => Controls_Manager::DIMENSIONS,
563
+ 'size_units' => [ 'px', 'em', '%' ],
564
+ 'selectors' => [
565
+ '{{WRAPPER}} .ha-badge' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
566
+ ],
567
+ ]
568
+ );
569
+
570
+ $this->add_control(
571
+ 'badge_color',
572
+ [
573
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
574
+ 'type' => Controls_Manager::COLOR,
575
+ 'selectors' => [
576
+ '{{WRAPPER}} .ha-badge' => 'color: {{VALUE}};',
577
+ ],
578
+ ]
579
+ );
580
+
581
+ $this->add_control(
582
+ 'badge_bg_color',
583
+ [
584
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
585
+ 'type' => Controls_Manager::COLOR,
586
+ 'selectors' => [
587
+ '{{WRAPPER}} .ha-badge' => 'background-color: {{VALUE}};',
588
+ ],
589
+ ]
590
+ );
591
+
592
+ $this->add_group_control(
593
+ Group_Control_Border::get_type(),
594
+ [
595
+ 'name' => 'badge_border',
596
+ 'selector' => '{{WRAPPER}} .ha-badge',
597
+ ]
598
+ );
599
+
600
+ $this->add_responsive_control(
601
+ 'badge_border_radius',
602
+ [
603
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
604
+ 'type' => Controls_Manager::DIMENSIONS,
605
+ 'size_units' => [ 'px', '%' ],
606
+ 'selectors' => [
607
+ '{{WRAPPER}} .ha-badge' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
608
+ ],
609
+ ]
610
+ );
611
+
612
+ $this->add_group_control(
613
+ Group_Control_Box_Shadow::get_type(),
614
+ [
615
+ 'name' => 'badge_box_shadow',
616
+ 'exclude' => [
617
+ 'box_shadow_position',
618
+ ],
619
+ 'selector' => '{{WRAPPER}} .ha-badge',
620
+ ]
621
+ );
622
+
623
+ $this->add_group_control(
624
+ Group_Control_Typography::get_type(),
625
+ [
626
+ 'name' => 'badge_typography',
627
+ 'label' => __( 'Typography', 'happy-elementor-addons' ),
628
+ 'exclude' => [
629
+ 'font_family',
630
+ 'line_height'
631
+ ],
632
+ 'default' => [
633
+ 'font_size' => ['']
634
+ ],
635
+ 'selector' => '{{WRAPPER}} .ha-badge',
636
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3,
637
+ ]
638
+ );
639
+
640
+ $this->end_controls_section();
641
+ }
642
+
643
+ /**
644
+ * Render widget output on the frontend.
645
+ *
646
+ * Used to generate the final HTML displayed on the frontend.
647
+ *
648
+ * Note that if skin is selected, it will be rendered by the skin itself,
649
+ * not the widget.
650
+ *
651
+ * @since 1.0.0
652
+ * @access public
653
+ */
654
+ public function render_content() {
655
+ /**
656
+ * Before widget render content.
657
+ *
658
+ * Fires before Elementor widget is being rendered.
659
+ *
660
+ * @since 1.0.0
661
+ *
662
+ * @param Widget_Base $this The current widget.
663
+ */
664
+ do_action( 'elementor/widget/before_render_content', $this );
665
+
666
+ ob_start();
667
+
668
+ $skin = $this->get_current_skin();
669
+ if ( $skin ) {
670
+ $skin->set_parent( $this );
671
+ $skin->render();
672
+ } else {
673
+ $this->render();
674
+ }
675
+
676
+ $widget_content = ob_get_clean();
677
+
678
+ if ( empty( $widget_content ) ) {
679
+ return;
680
+ }
681
+
682
+ if ( ha_elementor()->editor->is_edit_mode() ) {
683
+ $this->render_edit_tools();
684
+ }
685
+
686
+ $tag = 'div';
687
+ $link = $this->get_settings_for_display( 'link' );
688
+ $this->add_render_attribute( 'icon_box', 'class', 'elementor-widget-container' );
689
+
690
+ if ( ! empty( $link['url'] ) ) {
691
+ $tag = 'a';
692
+ $this->add_render_attribute( 'icon_box', 'class', 'ha-icon-box-link' );
 
 
693
  $this->add_link_attributes( 'icon_box', $link );
694
+ }
695
+ ?>
696
+ <<?php echo $tag; ?> <?php echo $this->get_render_attribute_string( 'icon_box' ); ?>>
697
+ <?php
698
+
699
+ /**
700
+ * Render widget content.
701
+ *
702
+ * Filters the widget content before it's rendered.
703
+ *
704
+ * @since 1.0.0
705
+ *
706
+ * @param string $widget_content The content of the widget.
707
+ * @param Widget_Base $this The widget.
708
+ */
709
+ $widget_content = apply_filters( 'elementor/widget/render_content', $widget_content, $this );
710
+
711
+ echo $widget_content; // XSS ok.
712
+ ?>
713
+ </<?php echo $tag; ?>>
714
+ <?php
715
+ }
716
+
717
+ protected function render() {
718
+ $settings = $this->get_settings_for_display();
719
+
720
+ $this->add_inline_editing_attributes( 'title', 'basic' );
721
+ $this->add_render_attribute( 'title', 'class', 'ha-icon-box-title' );
722
+
723
+ $this->add_inline_editing_attributes( 'badge_text', 'none' );
724
+ $this->add_render_attribute( 'badge_text', 'class', 'ha-badge ha-badge--top-right' );
725
+ ?>
726
+
727
+ <?php if ( $settings['badge_text'] ) : ?>
728
+ <span <?php $this->print_render_attribute_string( 'badge_text' ); ?>><?php echo esc_html( $settings['badge_text'] ); ?></span>
729
+ <?php endif; ?>
730
+
731
+ <?php if ( ! empty( $settings['icon'] ) || ! empty( $settings['selected_icon']['value'] ) ) : ?>
732
+ <span class="ha-icon-box-icon">
733
+ <?php ha_render_icon( $settings, 'icon', 'selected_icon' ); ?>
734
+ </span>
735
+ <?php endif;
736
+
737
+ if ( $settings['title' ] ) :
738
+ printf( '<%1$s %2$s>%3$s</%1$s>',
739
+ tag_escape( $settings['title_tag'] ),
740
+ $this->get_render_attribute_string( 'title' ),
741
+ ha_kses_basic( $settings['title' ] )
742
+ );
743
+ endif;
744
+ }
745
+
746
+ public function _content_template() {
747
+ ?>
748
+ <#
749
+ var iconHTML = migrated = '';
750
+
751
+ if ( ha.hasIconLibrary() ) {
752
+ iconHTML = elementor.helpers.renderIcon( view, settings.selected_icon, { 'aria-hidden': true }, 'i' , 'object' ),
753
+ migrated = elementor.helpers.isIconMigrated( settings, 'selected_icon' );
754
+ }
755
+
756
+ view.addInlineEditingAttributes( 'title', 'basic' );
757
+ view.addRenderAttribute( 'title', 'class', 'ha-icon-box-title' );
758
+
759
+ view.addInlineEditingAttributes( 'badge_text', 'none' );
760
+ view.addRenderAttribute( 'badge_text', 'class', 'ha-badge ha-badge--top-right' );
761
+
762
+ if (settings.link.url) {
763
+ view.addRenderAttribute( 'link', 'class', 'ha-icon-box-link' );
764
+ view.addRenderAttribute( 'link', 'href', settings.link.url );
765
+ print( '<a ' + view.getRenderAttributeString( 'link' ) + '>' );
766
+ } #>
767
+
768
+ <# if (settings.badge_text) { #>
769
+ <span {{{ view.getRenderAttributeString( 'badge_text' ) }}}>{{ settings.badge_text }}</span>
770
+ <# } #>
771
+
772
+ <# if ( settings.icon || settings.selected_icon.value ) { #>
773
+ <span class="ha-icon-box-icon">
774
+ <# if ( ha.hasIconLibrary() && iconHTML && iconHTML.rendered && ( ! settings.icon || migrated ) ) { #>
775
+ {{{ iconHTML.value }}}
776
+ <# } else { #>
777
+ <i class="{{ settings.icon }}" aria-hidden="true"></i>
778
+ <# } #>
779
+ </span>
780
+ <# } #>
781
+
782
+ <# if (settings.title) { #>
783
+ <{{ settings.title_tag }} {{{ view.getRenderAttributeString( 'title' ) }}}>{{ settings.title }}</{{ settings.title_tag }}>
784
+ <# } #>
785
+
786
+ <# if (settings.link.url) {
787
+ print( '</a>' );
788
+ } #>
789
+ <?php
790
+ }
791
  }
widgets/image-compare/widget.php CHANGED
@@ -247,14 +247,8 @@ class Image_Compare extends Base {
247
  '{{WRAPPER}} .twentytwenty-handle' => 'border-color: {{VALUE}}',
248
  '{{WRAPPER}} .twentytwenty-left-arrow' => 'border-right-color: {{VALUE}}',
249
  '{{WRAPPER}} .twentytwenty-right-arrow' => 'border-left-color: {{VALUE}}',
250
- '{{WRAPPER}} .twentytwenty-handle:before' =>
251
- '-webkit-box-shadow: 0 3px 0 {{VALUE}}, 0px 0px 12px rgba(51, 51, 51, 0.5);'
252
- . '-moz-box-shadow: 0 3px 0 {{VALUE}}, 0px 0px 12px rgba(51, 51, 51, 0.5);'
253
- . 'box-shadow: 0 3px 0 {{VALUE}}, 0px 0px 12px rgba(51, 51, 51, 0.5);',
254
- '{{WRAPPER}} .twentytwenty-handle:after' =>
255
- '-webkit-box-shadow: 0 -3px 0 {{VALUE}}, 0px 0px 12px rgba(51, 51, 51, 0.5);'
256
- . '-moz-box-shadow: 0 -3px 0 {{VALUE}}, 0px 0px 12px rgba(51, 51, 51, 0.5);'
257
- . 'box-shadow: 0 -3px 0 {{VALUE}}, 0px 0px 12px rgba(51, 51, 51, 0.5);',
258
  ],
259
  ]
260
  );
247
  '{{WRAPPER}} .twentytwenty-handle' => 'border-color: {{VALUE}}',
248
  '{{WRAPPER}} .twentytwenty-left-arrow' => 'border-right-color: {{VALUE}}',
249
  '{{WRAPPER}} .twentytwenty-right-arrow' => 'border-left-color: {{VALUE}}',
250
+ '{{WRAPPER}} .twentytwenty-handle:before' => 'box-shadow: 0 3px 0 {{VALUE}}, 0px 0px 12px rgba(51, 51, 51, 0.5);',
251
+ '{{WRAPPER}} .twentytwenty-handle:after' => 'box-shadow: 0 -3px 0 {{VALUE}}, 0px 0px 12px rgba(51, 51, 51, 0.5);',
 
 
 
 
 
 
252
  ],
253
  ]
254
  );
widgets/infobox/widget.php CHANGED
@@ -8,7 +8,6 @@ namespace Happy_Addons\Elementor\Widget;
8
 
9
  use Elementor\Scheme_Typography;
10
  use Elementor\Utils;
11
- use Elementor\Control_Media;
12
  use Elementor\Controls_Manager;
13
  use Elementor\Group_Control_Border;
14
  use Elementor\Group_Control_Box_Shadow;
@@ -240,15 +239,19 @@ class InfoBox extends Base {
240
  'options' => [
241
  'left' => [
242
  'title' => __( 'Left', 'happy-elementor-addons' ),
243
- 'icon' => 'fa fa-align-left',
244
  ],
245
  'center' => [
246
  'title' => __( 'Center', 'happy-elementor-addons' ),
247
- 'icon' => 'fa fa-align-center',
248
  ],
249
  'right' => [
250
  'title' => __( 'Right', 'happy-elementor-addons' ),
251
- 'icon' => 'fa fa-align-right',
 
 
 
 
252
  ],
253
  ],
254
  'toggle' => true,
@@ -290,6 +293,9 @@ class InfoBox extends Base {
290
  'placeholder' => 'https://example.com',
291
  'dynamic' => [
292
  'active' => true,
 
 
 
293
  ]
294
  ]
295
  );
@@ -468,7 +474,9 @@ class InfoBox extends Base {
468
  'max' => 1000,
469
  ],
470
  ],
471
- 'render_type' => 'ui',
 
 
472
  ]
473
  );
474
 
@@ -488,12 +496,7 @@ class InfoBox extends Base {
488
  ],
489
  ],
490
  'selectors' => [
491
- // Media translate styles
492
- '(desktop){{WRAPPER}} .ha-infobox-figure' => '-ms-transform: translate({{media_offset_x.SIZE || 0}}{{UNIT}}, {{media_offset_y.SIZE || 0}}{{UNIT}}); -webkit-transform: translate({{media_offset_x.SIZE || 0}}{{UNIT}}, {{media_offset_y.SIZE || 0}}{{UNIT}}); transform: translate({{media_offset_x.SIZE || 0}}{{UNIT}}, {{media_offset_y.SIZE || 0}}{{UNIT}});',
493
- '(tablet){{WRAPPER}} .ha-infobox-figure' => '-ms-transform: translate({{media_offset_x_tablet.SIZE || 0}}{{UNIT}}, {{media_offset_y_tablet.SIZE || 0}}{{UNIT}}); -webkit-transform: translate({{media_offset_x_tablet.SIZE || 0}}{{UNIT}}, {{media_offset_y_tablet.SIZE || 0}}{{UNIT}}); transform: translate({{media_offset_x_tablet.SIZE || 0}}{{UNIT}}, {{media_offset_y_tablet.SIZE || 0}}{{UNIT}});',
494
- '(mobile){{WRAPPER}} .ha-infobox-figure' => '-ms-transform: translate({{media_offset_x_mobile.SIZE || 0}}{{UNIT}}, {{media_offset_y_mobile.SIZE || 0}}{{UNIT}}); -webkit-transform: translate({{media_offset_x_mobile.SIZE || 0}}{{UNIT}}, {{media_offset_y_mobile.SIZE || 0}}{{UNIT}}); transform: translate({{media_offset_x_mobile.SIZE || 0}}{{UNIT}}, {{media_offset_y_mobile.SIZE || 0}}{{UNIT}});',
495
- // Body text styles
496
- '{{WRAPPER}} .ha-infobox-body' => 'margin-top: {{SIZE}}{{UNIT}};',
497
  ],
498
  ]
499
  );
@@ -599,13 +602,11 @@ class InfoBox extends Base {
599
  ],
600
  ],
601
  'selectors' => [
602
- // Icon rotate styles
603
- '{{WRAPPER}} .ha-infobox-figure--icon i, {{WRAPPER}} .ha-infobox-figure--icon svg' => '-ms-transform: rotate(-{{SIZE}}{{UNIT}}); -webkit-transform: rotate(-{{SIZE}}{{UNIT}}); transform: rotate(-{{SIZE}}{{UNIT}});',
604
- // Icon box transform styles
605
- '(desktop){{WRAPPER}} .ha-infobox-figure--icon' => '-ms-transform: translate({{media_offset_x.SIZE || 0}}px, {{media_offset_y.SIZE || 0}}px) rotate({{SIZE}}deg); -webkit-transform: translate({{media_offset_x.SIZE || 0}}px, {{media_offset_y.SIZE || 0}}px) rotate({{SIZE}}deg); transform: translate({{media_offset_x.SIZE || 0}}px, {{media_offset_y.SIZE || 0}}px) rotate({{SIZE}}deg);',
606
- '(tablet){{WRAPPER}} .ha-infobox-figure--icon' => '-ms-transform: translate({{media_offset_x_tablet.SIZE || 0}}px, {{media_offset_y_tablet.SIZE || 0}}px) rotate({{SIZE}}deg); -webkit-transform: translate({{media_offset_x_tablet.SIZE || 0}}px, {{media_offset_y_tablet.SIZE || 0}}px) rotate({{SIZE}}deg); transform: translate({{media_offset_x_tablet.SIZE || 0}}px, {{media_offset_y_tablet.SIZE || 0}}px) rotate({{SIZE}}deg);',
607
- '(mobile){{WRAPPER}} .ha-infobox-figure--icon' => '-ms-transform: translate({{media_offset_x_mobile.SIZE || 0}}px, {{media_offset_y_mobile.SIZE || 0}}px) rotate({{SIZE}}deg); -webkit-transform: translate({{media_offset_x_mobile.SIZE || 0}}px, {{media_offset_y_mobile.SIZE || 0}}px) rotate({{SIZE}}deg); transform: translate({{media_offset_x_mobile.SIZE || 0}}px, {{media_offset_y_mobile.SIZE || 0}}px) rotate({{SIZE}}deg);',
608
  ],
 
 
 
609
  ]
610
  );
611
 
8
 
9
  use Elementor\Scheme_Typography;
10
  use Elementor\Utils;
 
11
  use Elementor\Controls_Manager;
12
  use Elementor\Group_Control_Border;
13
  use Elementor\Group_Control_Box_Shadow;
239
  'options' => [
240
  'left' => [
241
  'title' => __( 'Left', 'happy-elementor-addons' ),
242
+ 'icon' => 'eicon-text-align-left',
243
  ],
244
  'center' => [
245
  'title' => __( 'Center', 'happy-elementor-addons' ),
246
+ 'icon' => 'eicon-text-align-center',
247
  ],
248
  'right' => [
249
  'title' => __( 'Right', 'happy-elementor-addons' ),
250
+ 'icon' => 'eicon-text-align-right',
251
+ ],
252
+ 'justify' => [
253
+ 'title' => __( 'Justify', 'happy-elementor-addons' ),
254
+ 'icon' => 'eicon-text-align-justify',
255
  ],
256
  ],
257
  'toggle' => true,
293
  'placeholder' => 'https://example.com',
294
  'dynamic' => [
295
  'active' => true,
296
+ ],
297
+ 'default' => [
298
+ 'url' => '#',
299
  ]
300
  ]
301
  );
474
  'max' => 1000,
475
  ],
476
  ],
477
+ 'selectors' => [
478
+ '{{WRAPPER}}' => '--ha-infobox-media-offset-x: {{SIZE}}{{UNIT}};',
479
+ ]
480
  ]
481
  );
482
 
496
  ],
497
  ],
498
  'selectors' => [
499
+ '{{WRAPPER}}' => '--ha-infobox-media-offset-y: {{SIZE}}{{UNIT}};',
 
 
 
 
 
500
  ],
501
  ]
502
  );
602
  ],
603
  ],
604
  'selectors' => [
605
+ '{{WRAPPER}}' => '--ha-infobox-media-rotate: {{SIZE}}{{UNIT}};',
 
 
 
 
 
606
  ],
607
+ 'condition' => [
608
+ 'type' => 'icon'
609
+ ]
610
  ]
611
  );
612
 
widgets/member/widget.php CHANGED
@@ -56,47 +56,54 @@ class Member extends Base {
56
  return [ 'team', 'member', 'crew', 'staff', 'person' ];
57
  }
58
 
 
 
 
 
 
 
 
59
  protected static function get_profile_names() {
60
  return [
61
- '500px' => __( '500px', 'happy-elementor-addons' ),
62
- 'apple' => __( 'Apple', 'happy-elementor-addons' ),
63
- 'behance' => __( 'Behance', 'happy-elementor-addons' ),
64
- 'bitbucket' => __( 'BitBucket', 'happy-elementor-addons' ),
65
- 'codepen' => __( 'CodePen', 'happy-elementor-addons' ),
66
- 'delicious' => __( 'Delicious', 'happy-elementor-addons' ),
67
- 'deviantart' => __( 'DeviantArt', 'happy-elementor-addons' ),
68
- 'digg' => __( 'Digg', 'happy-elementor-addons' ),
69
- 'dribbble' => __( 'Dribbble', 'happy-elementor-addons' ),
70
- 'email' => __( 'Email', 'happy-elementor-addons' ),
71
- 'facebook' => __( 'Facebook', 'happy-elementor-addons' ),
72
- 'flickr' => __( 'Flicker', 'happy-elementor-addons' ),
73
- 'foursquare' => __( 'FourSquare', 'happy-elementor-addons' ),
74
- 'github' => __( 'Github', 'happy-elementor-addons' ),
75
- 'houzz' => __( 'Houzz', 'happy-elementor-addons' ),
76
- 'instagram' => __( 'Instagram', 'happy-elementor-addons' ),
77
- 'jsfiddle' => __( 'JS Fiddle', 'happy-elementor-addons' ),
78
- 'linkedin' => __( 'LinkedIn', 'happy-elementor-addons' ),
79
- 'medium' => __( 'Medium', 'happy-elementor-addons' ),
80
- 'pinterest' => __( 'Pinterest', 'happy-elementor-addons' ),
81
- 'product-hunt' => __( 'Product Hunt', 'happy-elementor-addons' ),
82
- 'reddit' => __( 'Reddit', 'happy-elementor-addons' ),
83
- 'slideshare' => __( 'Slide Share', 'happy-elementor-addons' ),
84
- 'snapchat' => __( 'Snapchat', 'happy-elementor-addons' ),
85
- 'soundcloud' => __( 'SoundCloud', 'happy-elementor-addons' ),
86
- 'spotify' => __( 'Spotify', 'happy-elementor-addons' ),
87
  'stack-overflow' => __( 'StackOverflow', 'happy-elementor-addons' ),
88
- 'tripadvisor' => __( 'TripAdvisor', 'happy-elementor-addons' ),
89
- 'tumblr' => __( 'Tumblr', 'happy-elementor-addons' ),
90
- 'twitch' => __( 'Twitch', 'happy-elementor-addons' ),
91
- 'twitter' => __( 'Twitter', 'happy-elementor-addons' ),
92
- 'vimeo' => __( 'Vimeo', 'happy-elementor-addons' ),
93
- 'vk' => __( 'VK', 'happy-elementor-addons' ),
94
- 'website' => __( 'Website', 'happy-elementor-addons' ),
95
- 'whatsapp' => __( 'WhatsApp', 'happy-elementor-addons' ),
96
- 'wordpress' => __( 'WordPress', 'happy-elementor-addons' ),
97
- 'xing' => __( 'Xing', 'happy-elementor-addons' ),
98
- 'yelp' => __( 'Yelp', 'happy-elementor-addons' ),
99
- 'youtube' => __( 'YouTube', 'happy-elementor-addons' ),
100
  ];
101
  }
102
 
@@ -223,15 +230,19 @@ class Member extends Base {
223
  'options' => [
224
  'left' => [
225
  'title' => __( 'Left', 'happy-elementor-addons' ),
226
- 'icon' => 'fa fa-align-left',
227
  ],
228
  'center' => [
229
  'title' => __( 'Center', 'happy-elementor-addons' ),
230
- 'icon' => 'fa fa-align-center',
231
  ],
232
  'right' => [
233
  'title' => __( 'Right', 'happy-elementor-addons' ),
234
- 'icon' => 'fa fa-align-right',
 
 
 
 
235
  ],
236
  ],
237
  'toggle' => true,
@@ -506,6 +517,9 @@ class Member extends Base {
506
  ],
507
  'condition' => [
508
  'show_details_button' => 'yes',
 
 
 
509
  ]
510
  ]
511
  );
@@ -1229,7 +1243,7 @@ class Member extends Base {
1229
  $url = 'mailto:' . antispambot( $profile['email'] );
1230
  }
1231
 
1232
- printf( '<a target="_blank" rel="noopener" href="%s" class="elementor-repeater-item-%s"><i class="fa fa-%s" aria-hidden="true"></i></a>',
1233
  $url,
1234
  esc_attr( $profile['_id'] ),
1235
  esc_attr( $icon )
@@ -1308,7 +1322,7 @@ class Member extends Base {
1308
 
1309
  view.addRenderAttribute( linkKey, 'class', 'elementor-repeater-item-' + profile._id );
1310
  view.addRenderAttribute( linkKey, 'href', url ); #>
1311
- <a {{{view.getRenderAttributeString( linkKey )}}}><i class="fa fa-{{{icon}}}"></i></a>
1312
  <# }); #>
1313
  </div>
1314
  <# } #>
56
  return [ 'team', 'member', 'crew', 'staff', 'person' ];
57
  }
58
 
59
+ public function get_style_depends() {
60
+ return [
61
+ 'elementor-icons-fa-solid',
62
+ 'elementor-icons-fa-brands',
63
+ ];
64
+ }
65
+
66
  protected static function get_profile_names() {
67
  return [
68
+ '500px' => __( '500px', 'happy-elementor-addons' ),
69
+ 'apple' => __( 'Apple', 'happy-elementor-addons' ),
70
+ 'behance' => __( 'Behance', 'happy-elementor-addons' ),
71
+ 'bitbucket' => __( 'BitBucket', 'happy-elementor-addons' ),
72
+ 'codepen' => __( 'CodePen', 'happy-elementor-addons' ),
73
+ 'delicious' => __( 'Delicious', 'happy-elementor-addons' ),
74
+ 'deviantart' => __( 'DeviantArt', 'happy-elementor-addons' ),
75
+ 'digg' => __( 'Digg', 'happy-elementor-addons' ),
76
+ 'dribbble' => __( 'Dribbble', 'happy-elementor-addons' ),
77
+ 'email' => __( 'Email', 'happy-elementor-addons' ),
78
+ 'facebook' => __( 'Facebook', 'happy-elementor-addons' ),
79
+ 'flickr' => __( 'Flicker', 'happy-elementor-addons' ),
80
+ 'foursquare' => __( 'FourSquare', 'happy-elementor-addons' ),
81
+ 'github' => __( 'Github', 'happy-elementor-addons' ),
82
+ 'houzz' => __( 'Houzz', 'happy-elementor-addons' ),
83
+ 'instagram' => __( 'Instagram', 'happy-elementor-addons' ),
84
+ 'jsfiddle' => __( 'JS Fiddle', 'happy-elementor-addons' ),
85
+ 'linkedin' => __( 'LinkedIn', 'happy-elementor-addons' ),
86
+ 'medium' => __( 'Medium', 'happy-elementor-addons' ),
87
+ 'pinterest' => __( 'Pinterest', 'happy-elementor-addons' ),
88
+ 'product-hunt' => __( 'Product Hunt', 'happy-elementor-addons' ),
89
+ 'reddit' => __( 'Reddit', 'happy-elementor-addons' ),
90
+ 'slideshare' => __( 'Slide Share', 'happy-elementor-addons' ),
91
+ 'snapchat' => __( 'Snapchat', 'happy-elementor-addons' ),
92
+ 'soundcloud' => __( 'SoundCloud', 'happy-elementor-addons' ),
93
+ 'spotify' => __( 'Spotify', 'happy-elementor-addons' ),
94
  'stack-overflow' => __( 'StackOverflow', 'happy-elementor-addons' ),
95
+ 'tripadvisor' => __( 'TripAdvisor', 'happy-elementor-addons' ),
96
+ 'tumblr' => __( 'Tumblr', 'happy-elementor-addons' ),
97
+ 'twitch' => __( 'Twitch', 'happy-elementor-addons' ),
98
+ 'twitter' => __( 'Twitter', 'happy-elementor-addons' ),
99
+ 'vimeo' => __( 'Vimeo', 'happy-elementor-addons' ),
100
+ 'vk' => __( 'VK', 'happy-elementor-addons' ),
101
+ 'website' => __( 'Website', 'happy-elementor-addons' ),
102
+ 'whatsapp' => __( 'WhatsApp', 'happy-elementor-addons' ),
103
+ 'wordpress' => __( 'WordPress', 'happy-elementor-addons' ),
104
+ 'xing' => __( 'Xing', 'happy-elementor-addons' ),
105
+ 'yelp' => __( 'Yelp', 'happy-elementor-addons' ),
106
+ 'youtube' => __( 'YouTube', 'happy-elementor-addons' ),
107
  ];
108
  }
109
 
230
  'options' => [
231
  'left' => [
232
  'title' => __( 'Left', 'happy-elementor-addons' ),
233
+ 'icon' => 'eicon-text-align-left',
234
  ],
235
  'center' => [
236
  'title' => __( 'Center', 'happy-elementor-addons' ),
237
+ 'icon' => 'eicon-text-align-center',
238
  ],
239
  'right' => [
240
  'title' => __( 'Right', 'happy-elementor-addons' ),
241
+ 'icon' => 'eicon-text-align-right',
242
+ ],
243
+ 'justify' => [
244
+ 'title' => __( 'Justify', 'happy-elementor-addons' ),
245
+ 'icon' => 'eicon-text-align-justify',
246
  ],
247
  ],
248
  'toggle' => true,
517
  ],
518
  'condition' => [
519
  'show_details_button' => 'yes',
520
+ ],
521
+ 'default' => [
522
+ 'url' => '#',
523
  ]
524
  ]
525
  );
1243
  $url = 'mailto:' . antispambot( $profile['email'] );
1244
  }
1245
 
1246
+ printf( '<a target="_blank" rel="noopener" href="%s" class="elementor-repeater-item-%s"><i class="fa fab fa-%s" aria-hidden="true"></i></a>',
1247
  $url,
1248
  esc_attr( $profile['_id'] ),
1249
  esc_attr( $icon )
1322
 
1323
  view.addRenderAttribute( linkKey, 'class', 'elementor-repeater-item-' + profile._id );
1324
  view.addRenderAttribute( linkKey, 'href', url ); #>
1325
+ <a {{{view.getRenderAttributeString( linkKey )}}}><i class="fa fab fa-{{{icon}}}"></i></a>
1326
  <# }); #>
1327
  </div>
1328
  <# } #>
widgets/post-list/widget.php CHANGED
@@ -204,6 +204,38 @@ class Post_List extends Base {
204
  ]
205
  );
206
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
207
  $this->add_group_control(
208
  Group_Control_Image_Size::get_type(),
209
  [
@@ -250,6 +282,18 @@ class Post_List extends Base {
250
  ]
251
  );
252
 
 
 
 
 
 
 
 
 
 
 
 
 
253
  $this->add_control(
254
  'meta',
255
  [
@@ -439,6 +483,7 @@ class Post_List extends Base {
439
  ],
440
  'condition' => [
441
  'view' => 'list',
 
442
  ]
443
  ]
444
  );
@@ -802,14 +847,87 @@ class Post_List extends Base {
802
  [
803
  'label' => __( 'Margin Right', 'happy-elementor-addons' ),
804
  'type' => Controls_Manager::SLIDER,
 
 
 
 
805
  'selectors' => [
806
  '{{WRAPPER}} span.ha-post-list-icon' => 'margin-right: {{SIZE}}{{UNIT}};',
807
  '{{WRAPPER}} .ha-post-list-item a img' => 'margin-right: {{SIZE}}{{UNIT}};',
808
  ],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
809
  ]
810
  );
811
 
812
  $this->end_controls_section();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
813
  //List Meta Style
814
  $this->start_controls_section(
815
  '_section_list_meta_style',
@@ -906,7 +1024,10 @@ class Post_List extends Base {
906
  protected function render () {
907
 
908
  $settings = $this->get_settings_for_display();
909
- if ( ! $settings['post_type'] ) return;
 
 
 
910
  $args = [
911
  'post_status' => 'publish',
912
  'post_type' => $settings['post_type'],
@@ -988,7 +1109,7 @@ class Post_List extends Base {
988
  <?php if ( $settings['date_icon'] ):
989
  Icons_Manager::render_icon( $settings['date_icon'], [ 'aria-hidden' => 'true' ] );
990
  endif;
991
- echo get_the_date( "M d, Y" );
992
  ?>
993
  </span>
994
  <?php endif; ?>
@@ -1015,6 +1136,21 @@ class Post_List extends Base {
1015
  );
1016
  }
1017
  ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1018
  </div>
1019
  </a>
1020
  </li>
204
  ]
205
  );
206
 
207
+ $this->add_control(
208
+ 'feature_image_pos',
209
+ [
210
+ 'label' => __( 'Image Position', 'happy-elementor-addons' ),
211
+ 'label_block' => false,
212
+ 'type' => Controls_Manager::CHOOSE,
213
+ 'default' => 'left',
214
+ 'options' => [
215
+ 'left' => [
216
+ 'title' => __( 'Left', 'happy-elementor-addons' ),
217
+ 'icon' => 'eicon-h-align-left',
218
+ ],
219
+ 'top' => [
220
+ 'title' => __( 'Top', 'happy-elementor-addons' ),
221
+ 'icon' => 'eicon-v-align-top',
222
+ ],
223
+ ],
224
+ 'style_transfer' => true,
225
+ 'condition' => [
226
+ 'feature_image' => 'yes'
227
+ ],
228
+ 'selectors_dictionary' => [
229
+ 'left' => 'flex-direction: row',
230
+ 'top' => 'flex-direction: column',
231
+ ],
232
+ 'selectors' => [
233
+ '{{WRAPPER}} .ha-post-list .ha-post-list-item a' => '{{VALUE}};',
234
+ '{{WRAPPER}} .ha-post-list-item a img' => 'margin-right: 0px;',
235
+ ],
236
+ ]
237
+ );
238
+
239
  $this->add_group_control(
240
  Group_Control_Image_Size::get_type(),
241
  [
282
  ]
283
  );
284
 
285
+ $this->add_control(
286
+ 'content',
287
+ [
288
+ 'label' => __( 'Show Content', 'happy-elementor-addons' ),
289
+ 'type' => Controls_Manager::SWITCHER,
290
+ 'label_on' => __( 'Show', 'happy-elementor-addons' ),
291
+ 'label_off' => __( 'Hide', 'happy-elementor-addons' ),
292
+ 'return_value' => 'yes',
293
+ 'default' => '',
294
+ ]
295
+ );
296
+
297
  $this->add_control(
298
  'meta',
299
  [
483
  ],
484
  'condition' => [
485
  'view' => 'list',
486
+ 'feature_image_pos' => 'left',
487
  ]
488
  ]
489
  );
847
  [
848
  'label' => __( 'Margin Right', 'happy-elementor-addons' ),
849
  'type' => Controls_Manager::SLIDER,
850
+ 'default' => [
851
+ 'unit' => 'px',
852
+ 'size' => '15',
853
+ ],
854
  'selectors' => [
855
  '{{WRAPPER}} span.ha-post-list-icon' => 'margin-right: {{SIZE}}{{UNIT}};',
856
  '{{WRAPPER}} .ha-post-list-item a img' => 'margin-right: {{SIZE}}{{UNIT}};',
857
  ],
858
+ 'condition' => [
859
+ 'feature_image_pos' => 'left'
860
+ ],
861
+ ]
862
+ );
863
+
864
+ $this->add_responsive_control(
865
+ 'feature_margin_bottom',
866
+ [
867
+ 'label' => __( 'Margin Bottom', 'happy-elementor-addons' ),
868
+ 'type' => Controls_Manager::SLIDER,
869
+ 'default' => [
870
+ 'unit' => 'px',
871
+ 'size' => '15',
872
+ ],
873
+ 'selectors' => [
874
+ '{{WRAPPER}} .ha-post-list-item a img' => 'margin-bottom: {{SIZE}}{{UNIT}};',
875
+ ],
876
+ 'condition' => [
877
+ 'feature_image_pos' => 'top'
878
+ ],
879
  ]
880
  );
881
 
882
  $this->end_controls_section();
883
+
884
+ //List Content Style
885
+ $this->start_controls_section(
886
+ '_section_list_excerpt_style',
887
+ [
888
+ 'label' => __( 'Content', 'happy-elementor-addons' ),
889
+ 'tab' => Controls_Manager::TAB_STYLE,
890
+ 'condition' => [
891
+ 'content' => 'yes',
892
+ ]
893
+ ]
894
+ );
895
+
896
+ $this->add_group_control(
897
+ Group_Control_Typography::get_type(),
898
+ [
899
+ 'name' => 'excerpt_typography',
900
+ 'label' => __( 'Typography', 'happy-elementor-addons' ),
901
+ 'scheme' => Schemes\Typography::TYPOGRAPHY_3,
902
+ 'selector' => '{{WRAPPER}} .ha-post-list-excerpt p',
903
+ ]
904
+ );
905
+
906
+ $this->add_control(
907
+ 'excerpt_color',
908
+ [
909
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
910
+ 'type' => Controls_Manager::COLOR,
911
+ 'default' => '',
912
+ 'selectors' => [
913
+ '{{WRAPPER}} .ha-post-list-excerpt p' => 'color: {{VALUE}};',
914
+ ],
915
+ ]
916
+ );
917
+
918
+ $this->add_responsive_control(
919
+ 'excerpt_space',
920
+ [
921
+ 'label' => __( 'Space Top', 'happy-elementor-addons' ),
922
+ 'type' => Controls_Manager::SLIDER,
923
+ 'selectors' => [
924
+ '{{WRAPPER}} .ha-post-list-excerpt' => 'margin-top: {{SIZE}}{{UNIT}};',
925
+ ],
926
+ ]
927
+ );
928
+
929
+ $this->end_controls_section();
930
+
931
  //List Meta Style
932
  $this->start_controls_section(
933
  '_section_list_meta_style',
1024
  protected function render () {
1025
 
1026
  $settings = $this->get_settings_for_display();
1027
+
1028
+ if ( ! $settings['post_type'] ){
1029
+ return;
1030
+ }
1031
  $args = [
1032
  'post_status' => 'publish',
1033
  'post_type' => $settings['post_type'],
1109
  <?php if ( $settings['date_icon'] ):
1110
  Icons_Manager::render_icon( $settings['date_icon'], [ 'aria-hidden' => 'true' ] );
1111
  endif;
1112
+ echo get_the_date( "d M Y", $post->ID );
1113
  ?>
1114
  </span>
1115
  <?php endif; ?>
1136
  );
1137
  }
1138
  ?>
1139
+ <?php if ( 'yes' === $settings['content'] ): ?>
1140
+ <div class="ha-post-list-excerpt">
1141
+ <?php
1142
+ if ( 'post' !== $settings['post_type'] && has_excerpt($post->ID) ) {
1143
+ printf('<p>%1$s</p>',
1144
+ wp_trim_words(get_the_excerpt($post->ID))
1145
+ );
1146
+ }else{
1147
+ printf('<p>%1$s</p>',
1148
+ wp_trim_words(get_the_content(null,false,$post->ID), 25, '.')
1149
+ );
1150
+ }
1151
+ ?>
1152
+ </div>
1153
+ <?php endif; ?>
1154
  </div>
1155
  </a>
1156
  </li>
widgets/pricing-table/widget.php CHANGED
@@ -89,26 +89,26 @@ class Pricing_Table extends Base {
89
  'type' => Controls_Manager::SELECT,
90
  'label_block' => false,
91
  'options' => [
92
- '' => __( 'None', 'happy-elementor-addons' ),
93
- 'baht' => '&#3647; ' . _x( 'Baht', 'Currency Symbol', 'happy-elementor-addons' ),
94
- 'bdt' => '&#2547; ' . _x( 'BD Taka', 'Currency Symbol', 'happy-elementor-addons' ),
95
- 'dollar' => '&#36; ' . _x( 'Dollar', 'Currency Symbol', 'happy-elementor-addons' ),
96
- 'euro' => '&#128; ' . _x( 'Euro', 'Currency Symbol', 'happy-elementor-addons' ),
97
- 'franc' => '&#8355; ' . _x( 'Franc', 'Currency Symbol', 'happy-elementor-addons' ),
98
- 'guilder' => '&fnof; ' . _x( 'Guilder', 'Currency Symbol', 'happy-elementor-addons' ),
99
- 'krona' => 'kr ' . _x( 'Krona', 'Currency Symbol', 'happy-elementor-addons' ),
100
- 'lira' => '&#8356; ' . _x( 'Lira', 'Currency Symbol', 'happy-elementor-addons' ),
101
- 'peseta' => '&#8359 ' . _x( 'Peseta', 'Currency Symbol', 'happy-elementor-addons' ),
102
- 'peso' => '&#8369; ' . _x( 'Peso', 'Currency Symbol', 'happy-elementor-addons' ),
103
- 'pound' => '&#163; ' . _x( 'Pound Sterling', 'Currency Symbol', 'happy-elementor-addons' ),
104
- 'real' => 'R$ ' . _x( 'Real', 'Currency Symbol', 'happy-elementor-addons' ),
105
- 'ruble' => '&#8381; ' . _x( 'Ruble', 'Currency Symbol', 'happy-elementor-addons' ),
106
- 'rupee' => '&#8360; ' . _x( 'Rupee', 'Currency Symbol', 'happy-elementor-addons' ),
107
  'indian_rupee' => '&#8377; ' . _x( 'Rupee (Indian)', 'Currency Symbol', 'happy-elementor-addons' ),
108
- 'shekel' => '&#8362; ' . _x( 'Shekel', 'Currency Symbol', 'happy-elementor-addons' ),
109
- 'won' => '&#8361; ' . _x( 'Won', 'Currency Symbol', 'happy-elementor-addons' ),
110
- 'yen' => '&#165; ' . _x( 'Yen/Yuan', 'Currency Symbol', 'happy-elementor-addons' ),
111
- 'custom' => __( 'Custom', 'happy-elementor-addons' ),
112
  ],
113
  'default' => 'dollar',
114
  ]
89
  'type' => Controls_Manager::SELECT,
90
  'label_block' => false,
91
  'options' => [
92
+ '' => __( 'None', 'happy-elementor-addons' ),
93
+ 'baht' => '&#3647; ' . _x( 'Baht', 'Currency Symbol', 'happy-elementor-addons' ),
94
+ 'bdt' => '&#2547; ' . _x( 'BD Taka', 'Currency Symbol', 'happy-elementor-addons' ),
95
+ 'dollar' => '&#36; ' . _x( 'Dollar', 'Currency Symbol', 'happy-elementor-addons' ),
96
+ 'euro' => '&#128; ' . _x( 'Euro', 'Currency Symbol', 'happy-elementor-addons' ),
97
+ 'franc' => '&#8355; ' . _x( 'Franc', 'Currency Symbol', 'happy-elementor-addons' ),
98
+ 'guilder' => '&fnof; ' . _x( 'Guilder', 'Currency Symbol', 'happy-elementor-addons' ),
99
+ 'krona' => 'kr ' . _x( 'Krona', 'Currency Symbol', 'happy-elementor-addons' ),
100
+ 'lira' => '&#8356; ' . _x( 'Lira', 'Currency Symbol', 'happy-elementor-addons' ),
101
+ 'peseta' => '&#8359 ' . _x( 'Peseta', 'Currency Symbol', 'happy-elementor-addons' ),
102
+ 'peso' => '&#8369; ' . _x( 'Peso', 'Currency Symbol', 'happy-elementor-addons' ),
103
+ 'pound' => '&#163; ' . _x( 'Pound Sterling', 'Currency Symbol', 'happy-elementor-addons' ),
104
+ 'real' => 'R$ ' . _x( 'Real', 'Currency Symbol', 'happy-elementor-addons' ),
105
+ 'ruble' => '&#8381; ' . _x( 'Ruble', 'Currency Symbol', 'happy-elementor-addons' ),
106
+ 'rupee' => '&#8360; ' . _x( 'Rupee', 'Currency Symbol', 'happy-elementor-addons' ),
107
  'indian_rupee' => '&#8377; ' . _x( 'Rupee (Indian)', 'Currency Symbol', 'happy-elementor-addons' ),
108
+ 'shekel' => '&#8362; ' . _x( 'Shekel', 'Currency Symbol', 'happy-elementor-addons' ),
109
+ 'won' => '&#8361; ' . _x( 'Won', 'Currency Symbol', 'happy-elementor-addons' ),
110
+ 'yen' => '&#165; ' . _x( 'Yen/Yuan', 'Currency Symbol', 'happy-elementor-addons' ),
111
+ 'custom' => __( 'Custom', 'happy-elementor-addons' ),
112
  ],
113
  'default' => 'dollar',
114
  ]
widgets/review/widget.php CHANGED
@@ -8,49 +8,54 @@ namespace Happy_Addons\Elementor\Widget;
8
 
9
  use Elementor\Scheme_Typography;
10
  use Elementor\Utils;
11
- use Elementor\Control_Media;
12
  use Elementor\Controls_Manager;
13
  use Elementor\Group_Control_Border;
14
  use Elementor\Group_Control_Box_Shadow;
15
  use Elementor\Group_Control_Image_Size;
16
  use Elementor\Group_Control_Typography;
17
- use ParagonIE\Sodium\Core\Curve25519\Ge\P3;
18
 
19
  defined( 'ABSPATH' ) || die();
20
 
21
  class Review extends Base {
22
 
23
- /**
24
- * Get widget title.
25
- *
26
- * @since 1.0.0
27
- * @access public
28
- *
29
- * @return string Widget title.
30
- */
31
- public function get_title() {
32
- return __( 'Review', 'happy-elementor-addons' );
33
- }
34
 
35
  public function get_custom_help_url() {
36
  return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/review/';
37
  }
38
 
39
  /**
40
- * Get widget icon.
41
- *
42
- * @since 1.0.0
43
- * @access public
44
- *
45
- * @return string Widget icon.
46
- */
47
- public function get_icon() {
48
- return 'hm hm-review';
49
- }
50
-
51
- public function get_keywords() {
52
- return [ 'review', 'comment', 'feedback', 'testimonial' ];
53
- }
 
 
 
 
 
 
 
54
 
55
  protected function register_content_controls() {
56
  $this->start_controls_section(
@@ -61,789 +66,778 @@ class Review extends Base {
61
  ]
62
  );
63
 
64
- $this->add_control(
65
- 'ratting',
66
- [
67
- 'label' => __( 'Ratting', 'happy-elementor-addons' ),
68
- 'type' => Controls_Manager::SLIDER,
69
- 'default' => [
70
- 'unit' => 'px',
71
- 'size' => 4.2,
72
- ],
73
- 'size_units' => [ 'px' ],
74
- 'range' => [
75
- 'px' => [
76
- 'min' => 0,
77
- 'max' => 5,
78
- 'step' => .5,
79
- ],
80
- ],
81
- 'dynamic' => [
82
- 'active' => true,
83
- ]
84
- ]
85
- );
86
-
87
- $this->add_control(
88
- 'ratting_style',
89
- [
90
- 'label' => __( 'Ratting Style', 'happy-elementor-addons' ),
91
- 'type' => Controls_Manager::SELECT,
92
- 'options' => [
93
- 'star' => __( 'Star', 'happy-elementor-addons' ),
94
- 'num' => __( 'Number', 'happy-elementor-addons' ),
95
- ],
96
- 'default' => 'star',
97
- 'style_transfer' => true,
98
- ]
99
- );
100
-
101
- $this->add_control(
102
- 'review',
103
- [
104
- 'label' => __( 'Review', 'happy-elementor-addons' ),
105
- 'description' => ha_get_allowed_html_desc( 'intermediate' ),
106
- 'type' => Controls_Manager::TEXTAREA,
107
- 'default' => __( 'Happy reviewer is super excited being part of happy addons family', 'happy-elementor-addons' ),
108
- 'placeholder' => __( 'Type amazing review from happy reviewer', 'happy-elementor-addons' ),
109
- 'separator' => 'before',
110
- 'dynamic' => [
111
- 'active' => true,
112
- ]
113
- ]
114
- );
115
-
116
- $this->add_control(
117
- 'review_position',
118
- [
119
- 'label' => __( 'Review Position', 'happy-elementor-addons' ),
120
- 'type' => Controls_Manager::SELECT,
121
- 'options' => [
122
- 'before' => __( 'Before Ratting', 'happy-elementor-addons' ),
123
- 'after' => __( 'After Ratting', 'happy-elementor-addons' ),
124
- ],
125
- 'default' => 'before',
126
- 'style_transfer' => true,
127
- ]
128
- );
129
-
130
- $this->add_control(
131
- 'review_for',
132
- [
133
- 'label' => __( 'Review For', 'happy-elementor-addons' ),
134
- 'type' => Controls_Manager::TEXT,
135
- 'placeholder' => __( 'Movie, Games, Software name etc.', 'happy-elementor-addons' ),
136
- 'description' => __( '[This field is only for structured data (schema.org) purpose] Obviously this review belongs to something like Movie, Games, Software or Service. So type the name of that thing.', 'happy-elementor-addons' ),
137
- ]
138
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139
 
140
  $this->end_controls_section();
141
 
142
- $this->start_controls_section(
143
- '_section_reviewer',
144
- [
145
- 'label' => __( 'Reviewer', 'happy-elementor-addons' ),
146
- 'tab' => Controls_Manager::TAB_CONTENT,
147
- ]
148
- );
149
-
150
- $this->add_control(
151
- 'image',
152
- [
153
- 'label' => __( 'Photo', 'happy-elementor-addons' ),
154
- 'type' => Controls_Manager::MEDIA,
155
- 'default' => [
156
- 'url' => Utils::get_placeholder_image_src(),
157
- ],
158
- 'dynamic' => [
159
- 'active' => true,
160
- ]
161
- ]
162
- );
163
-
164
- $this->add_group_control(
165
- Group_Control_Image_Size::get_type(),
166
- [
167
- 'name' => 'thumbnail',
168
- 'default' => 'large',
169
- 'separator' => 'none',
170
- ]
171
- );
172
-
173
- $this->add_control(
174
- 'image_position',
175
- [
176
- 'label' => __( 'Image Position', 'happy-elementor-addons' ),
177
- 'type' => Controls_Manager::CHOOSE,
178
- 'label_block' => false,
179
- 'options' => [
180
- 'left' => [
181
- 'title' => __( 'Left', 'happy-elementor-addons' ),
182
- 'icon' => 'eicon-h-align-left',
183
- ],
184
- 'top' => [
185
- 'title' => __( 'Top', 'happy-elementor-addons' ),
186
- 'icon' => 'eicon-v-align-top',
187
- ],
188
- 'right' => [
189
- 'title' => __( 'Right', 'happy-elementor-addons' ),
190
- 'icon' => 'eicon-h-align-right',
191
- ],
192
- ],
193
- 'default' => 'top',
194
- 'toggle' => false,
195
- 'prefix_class' => 'ha-review--',
196
- 'style_transfer' => true,
197
- ]
198
- );
199
-
200
- $this->add_control(
201
- 'title',
202
- [
203
- 'label' => __( 'Name', 'happy-elementor-addons' ),
204
- 'label_block' => true,
205
- 'type' => Controls_Manager::TEXT,
206
- 'default' => 'Happy Reviewer',
207
- 'placeholder' => __( 'Type Reviewer Name', 'happy-elementor-addons' ),
208
- 'separator' => 'before',
209
- 'dynamic' => [
210
- 'active' => true,
211
- ]
212
- ]
213
- );
214
-
215
- $this->add_control(
216
- 'job_title',
217
- [
218
- 'label' => __( 'Job Title', 'happy-elementor-addons' ),
219
- 'label_block' => true,
220
- 'type' => Controls_Manager::TEXT,
221
- 'default' => __( 'Happy Officer', 'happy-elementor-addons' ),
222
- 'placeholder' => __( 'Type Reviewer Job Title', 'happy-elementor-addons' ),
223
- 'dynamic' => [
224
- 'active' => true,
225
- ]
226
- ]
227
- );
228
-
229
- $this->add_responsive_control(
230
- 'align',
231
- [
232
- 'label' => __( 'Alignment', 'happy-elementor-addons' ),
233
- 'type' => Controls_Manager::CHOOSE,
234
- 'options' => [
235
- 'left' => [
236
- 'title' => __( 'Left', 'happy-elementor-addons' ),
237
- 'icon' => 'fa fa-align-left',
238
- ],
239
- 'center' => [
240
- 'title' => __( 'Center', 'happy-elementor-addons' ),
241
- 'icon' => 'fa fa-align-center',
242
- ],
243
- 'right' => [
244
- 'title' => __( 'Right', 'happy-elementor-addons' ),
245
- 'icon' => 'fa fa-align-right',
246
- ],
247
- ],
248
- 'toggle' => true,
249
- 'separator' => 'before',
250
- 'selectors' => [
251
- '{{WRAPPER}} .elementor-widget-container' => 'text-align: {{VALUE}};'
252
- ]
253
- ]
254
- );
255
-
256
- $this->add_control(
257
- 'title_tag',
258
- [
259
- 'label' => __( 'Name HTML Tag', 'happy-elementor-addons' ),
260
- 'type' => Controls_Manager::CHOOSE,
261
- 'options' => [
262
- 'h1' => [
263
- 'title' => __( 'H1', 'happy-elementor-addons' ),
264
- 'icon' => 'eicon-editor-h1'
265
- ],
266
- 'h2' => [
267
- 'title' => __( 'H2', 'happy-elementor-addons' ),
268
- 'icon' => 'eicon-editor-h2'
269
- ],
270
- 'h3' => [
271
- 'title' => __( 'H3', 'happy-elementor-addons' ),
272
- 'icon' => 'eicon-editor-h3'
273
- ],
274
- 'h4' => [
275
- 'title' => __( 'H4', 'happy-elementor-addons' ),
276
- 'icon' => 'eicon-editor-h4'
277
- ],
278
- 'h5' => [
279
- 'title' => __( 'H5', 'happy-elementor-addons' ),
280
- 'icon' => 'eicon-editor-h5'
281
- ],
282
- 'h6' => [
283
- 'title' => __( 'H6', 'happy-elementor-addons' ),
284
- 'icon' => 'eicon-editor-h6'
285
- ]
286
- ],
287
- 'default' => 'h2',
288
- 'toggle' => false,
289
- ]
290
- );
291
-
292
- $this->end_controls_section();
293
- }
294
-
295
- protected function register_style_controls() {
296
- $this->start_controls_section(
297
- '_section_ratting_style',
298
- [
299
- 'label' => __( 'Ratting', 'happy-elementor-addons' ),
300
- 'tab' => Controls_Manager::TAB_STYLE,
301
- ]
302
- );
303
-
304
- $this->add_responsive_control(
305
- 'ratting_size',
306
- [
307
- 'label' => __( 'Size', 'happy-elementor-addons' ),
308
- 'type' => Controls_Manager::SLIDER,
309
- 'size_units' => ['px'],
310
- 'selectors' => [
311
- '{{WRAPPER}} .ha-review-ratting' => 'font-size: {{SIZE}}{{UNIT}};',
312
- ],
313
- ]
314
- );
315
-
316
- $this->add_responsive_control(
317
- 'ratting_spacing',
318
- [
319
- 'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
320
- 'type' => Controls_Manager::SLIDER,
321
- 'size_units' => ['px'],
322
- 'selectors' => [
323
- '{{WRAPPER}} .ha-review-ratting' => 'margin-bottom: {{SIZE}}{{UNIT}};',
324
- ],
325
- ]
326
- );
327
-
328
- $this->add_responsive_control(
329
- 'ratting_padding',
330
- [
331
- 'label' => __( 'Padding', 'happy-elementor-addons' ),
332
- 'type' => Controls_Manager::DIMENSIONS,
333
- 'size_units' => [ 'px', 'em', '%' ],
334
- 'selectors' => [
335
- '{{WRAPPER}} .ha-review-ratting' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
336
- ],
337
- ]
338
- );
339
-
340
- $this->add_control(
341
- 'ratting_color',
342
- [
343
- 'label' => __( 'Text Color', 'happy-elementor-addons' ),
344
- 'type' => Controls_Manager::COLOR,
345
- 'selectors' => [
346
- '{{WRAPPER}} .ha-review-ratting' => 'color: {{VALUE}};',
347
- ],
348
- ]
349
- );
350
-
351
- $this->add_control(
352
- 'ratting_bg_color',
353
- [
354
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
355
- 'type' => Controls_Manager::COLOR,
356
- 'selectors' => [
357
- '{{WRAPPER}} .ha-review-ratting' => 'background-color: {{VALUE}};',
358
- ],
359
- ]
360
- );
361
-
362
- $this->add_group_control(
363
- Group_Control_Border::get_type(),
364
- [
365
- 'name' => 'ratting_border',
366
- 'selector' => '{{WRAPPER}} .ha-review-ratting',
367
- ]
368
- );
369
-
370
- $this->add_control(
371
- 'ratting_border_radius',
372
- [
373
- 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
374
- 'type' => Controls_Manager::DIMENSIONS,
375
- 'size_units' => [ 'px', '%' ],
376
- 'selectors' => [
377
- '{{WRAPPER}} .ha-review-ratting' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
378
- ],
379
- ]
380
- );
381
-
382
- $this->end_controls_section();
383
-
384
- $this->start_controls_section(
385
- '_section_review_style',
386
- [
387
- 'label' => __( 'Review & Reviewer', 'happy-elementor-addons' ),
388
- 'tab' => Controls_Manager::TAB_STYLE,
389
- ]
390
- );
391
-
392
- $this->add_responsive_control(
393
- 'body_padding',
394
- [
395
- 'label' => __( 'Text Box Padding', 'happy-elementor-addons' ),
396
- 'type' => Controls_Manager::DIMENSIONS,
397
- 'size_units' => [ 'px', 'em', '%' ],
398
- 'selectors' => [
399
- '{{WRAPPER}} .ha-review-body' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
400
- ],
401
- ]
402
- );
403
-
404
- $this->add_control(
405
- '_heading_name',
406
- [
407
- 'type' => Controls_Manager::HEADING,
408
- 'label' => __( 'Name', 'happy-elementor-addons' ),
409
- 'separator' => 'before'
410
- ]
411
- );
412
-
413
- $this->add_responsive_control(
414
- 'title_spacing',
415
- [
416
- 'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
417
- 'type' => Controls_Manager::SLIDER,
418
- 'size_units' => ['px'],
419
- 'selectors' => [
420
- '{{WRAPPER}} .ha-review-reviewer' => 'margin-bottom: {{SIZE}}{{UNIT}};',
421
- ],
422
- ]
423
- );
424
-
425
- $this->add_control(
426
- 'name_color',
427
- [
428
- 'label' => __( 'Text Color', 'happy-elementor-addons' ),
429
- 'type' => Controls_Manager::COLOR,
430
- 'selectors' => [
431
- '{{WRAPPER}} .ha-review-reviewer' => 'color: {{VALUE}};',
432
- ],
433
- ]
434
- );
435
-
436
- $this->add_group_control(
437
- Group_Control_Typography::get_type(),
438
- [
439
- 'name' => 'name_typography',
440
- 'selector' => '{{WRAPPER}} .ha-review-reviewer',
441
- 'scheme' => Scheme_Typography::TYPOGRAPHY_2,
442
- ]
443
- );
444
-
445
- $this->add_control(
446
- '_heading_job_title',
447
- [
448
- 'type' => Controls_Manager::HEADING,
449
- 'label' => __( 'Job Title', 'happy-elementor-addons' ),
450
- 'separator' => 'before'
451
- ]
452
- );
453
-
454
- $this->add_responsive_control(
455
- 'job_title_spacing',
456
- [
457
- 'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
458
- 'type' => Controls_Manager::SLIDER,
459
- 'size_units' => ['px'],
460
- 'selectors' => [
461
- '{{WRAPPER}} .ha-review-position' => 'margin-bottom: {{SIZE}}{{UNIT}};',
462
- ],
463
- ]
464
- );
465
-
466
- $this->add_control(
467
- 'job_title_color',
468
- [
469
- 'label' => __( 'Text Color', 'happy-elementor-addons' ),
470
- 'type' => Controls_Manager::COLOR,
471
- 'selectors' => [
472
- '{{WRAPPER}} .ha-review-position' => 'color: {{VALUE}};',
473
- ],
474
- ]
475
- );
476
-
477
- $this->add_group_control(
478
- Group_Control_Typography::get_type(),
479
- [
480
- 'name' => 'job_title_typography',
481
- 'selector' => '{{WRAPPER}} .ha-review-position',
482
- 'scheme' => Scheme_Typography::TYPOGRAPHY_3,
483
- ]
484
- );
485
-
486
- $this->add_control(
487
- '_heading_review',
488
- [
489
- 'type' => Controls_Manager::HEADING,
490
- 'label' => __( 'Review', 'happy-elementor-addons' ),
491
- 'separator' => 'before'
492
- ]
493
- );
494
-
495
- $this->add_responsive_control(
496
- 'review_spacing',
497
- [
498
- 'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
499
- 'type' => Controls_Manager::SLIDER,
500
- 'size_units' => ['px'],
501
- 'selectors' => [
502
- '{{WRAPPER}} .ha-review-desc' => 'margin-bottom: {{SIZE}}{{UNIT}};',
503
- ],
504
- ]
505
- );
506
-
507
- $this->add_control(
508
- 'review_color',
509
- [
510
- 'label' => __( 'Text Color', 'happy-elementor-addons' ),
511
- 'type' => Controls_Manager::COLOR,
512
- 'selectors' => [
513
- '{{WRAPPER}} .ha-review-desc' => 'color: {{VALUE}};',
514
- ],
515
- ]
516
- );
517
-
518
- $this->add_group_control(
519
- Group_Control_Typography::get_type(),
520
- [
521
- 'name' => 'review_typography',
522
- 'selector' => '{{WRAPPER}} .ha-review-desc',
523
- 'scheme' => Scheme_Typography::TYPOGRAPHY_3,
524
- ]
525
- );
526
-
527
- $this->end_controls_section();
528
-
529
- $this->start_controls_section(
530
- '_section_photo_style',
531
- [
532
- 'label' => __( 'Photo', 'happy-elementor-addons' ),
533
- 'tab' => Controls_Manager::TAB_STYLE,
534
- ]
535
- );
536
-
537
- $this->add_responsive_control(
538
- 'image_width',
539
- [
540
- 'label' => __( 'Width', 'happy-elementor-addons' ),
541
- 'type' => Controls_Manager::SLIDER,
542
- 'size_units' => [ 'px', '%' ],
543
- 'range' => [
544
- 'px' => [
545
- 'min' => 70,
546
- 'max' => 500,
547
- ],
548
- '%' => [
549
- 'min' => 10,
550
- 'max' => 100,
551
- ],
552
- ],
553
- 'selectors' => [
554
- '{{WRAPPER}} .ha-review-figure' => 'flex: 0 0 {{SIZE}}{{UNIT}}; max-width: {{SIZE}}{{UNIT}};',
555
- '{{WRAPPER}}.ha-review--right .ha-review-body, {{WRAPPER}}.ha-review--left .ha-review-body' => 'flex: 0 0 calc(100% - {{SIZE || 150}}{{UNIT}}); max-width: calc(100% - {{SIZE || 150}}{{UNIT}});',
556
- ],
557
- ]
558
- );
559
-
560
- $this->add_responsive_control(
561
- 'image_height',
562
- [
563
- 'label' => __( 'Height', 'happy-elementor-addons' ),
564
- 'type' => Controls_Manager::SLIDER,
565
- 'size_units' => [ 'px' ],
566
- 'range' => [
567
- 'px' => [
568
- 'min' => 70,
569
- 'max' => 500,
570
- ],
571
- ],
572
- 'selectors' => [
573
- '{{WRAPPER}} .ha-review-figure' => 'height: {{SIZE}}{{UNIT}};',
574
- ],
575
- ]
576
- );
577
-
578
- $this->add_control(
579
- 'offset_toggle',
580
- [
581
- 'label' => __( 'Offset', 'happy-elementor-addons' ),
582
- 'type' => Controls_Manager::POPOVER_TOGGLE,
583
- 'label_off' => __( 'None', 'happy-elementor-addons' ),
584
- 'label_on' => __( 'Custom', 'happy-elementor-addons' ),
585
- 'return_value' => 'yes',
586
- ]
587
- );
588
-
589
- $this->start_popover();
590
-
591
- $this->add_responsive_control(
592
- 'image_offset_x',
593
- [
594
- 'label' => __( 'Offset X', 'happy-elementor-addons' ),
595
- 'type' => Controls_Manager::SLIDER,
596
- 'size_units' => ['px'],
597
- 'condition' => [
598
- 'offset_toggle' => 'yes'
599
- ],
600
- 'range' => [
601
- 'px' => [
602
- 'min' => -1000,
603
- 'max' => 1000,
604
- ],
605
- ],
606
- 'render_type' => 'ui'
607
- ]
608
- );
609
-
610
- $this->add_responsive_control(
611
- 'image_offset_y',
612
- [
613
- 'label' => __( 'Offset Y', 'happy-elementor-addons' ),
614
- 'type' => Controls_Manager::SLIDER,
615
- 'size_units' => ['px'],
616
- 'condition' => [
617
- 'offset_toggle' => 'yes'
618
- ],
619
- 'range' => [
620
- 'px' => [
621
- 'min' => -1000,
622
- 'max' => 1000,
623
- ],
624
- ],
625
- 'selectors' => [
626
- // Left image position styles
627
- '(desktop){{WRAPPER}}.ha-review--left .ha-review-body' => 'margin-left: {{image_offset_x.SIZE || 0}}{{UNIT}}; flex: 0 0 calc((100% - {{image_width.SIZE || 150}}{{image_width.UNIT}}) + (-1 * {{image_offset_x.SIZE || 0}}{{UNIT}})); max-width: calc((100% - {{image_width.SIZE || 150}}{{image_width.UNIT}}) + (-1 * {{image_offset_x.SIZE || 0}}{{UNIT}}));',
628
- '(tablet){{WRAPPER}}.ha-review--left .ha-review-body' => 'margin-left: {{image_offset_x_tablet.SIZE || 0}}{{UNIT}}; flex: 0 0 calc((100% - {{image_width_tablet.SIZE || 150}}{{image_width_tablet.UNIT}}) + (-1 * {{image_offset_x_tablet.SIZE || 0}}{{UNIT}})); max-width: calc((100% - {{image_width_tablet.SIZE || 150}}{{image_width_tablet.UNIT}}) + (-1 * {{image_offset_x_tablet.SIZE || 0}}{{UNIT}}));',
629
- '(mobile){{WRAPPER}}.ha-review--left .ha-review-body' => 'margin-left: {{image_offset_x_mobile.SIZE || 0}}{{UNIT}}; flex: 0 0 calc((100% - {{image_width_mobile.SIZE || 150}}{{image_width_mobile.UNIT}}) + (-1 * {{image_offset_x_mobile.SIZE || 0}}{{UNIT}})); max-width: calc((100% - {{image_width_mobile.SIZE || 150}}{{image_width_mobile.UNIT}}) + (-1 * {{image_offset_x_mobile.SIZE || 0}}{{UNIT}}));',
630
- // Image right position styles
631
- '(desktop){{WRAPPER}}.ha-review--right .ha-review-body' => 'margin-right: calc(-1 * {{image_offset_x.SIZE || 0}}{{UNIT}}); flex: 0 0 calc((100% - {{image_width.SIZE || 150}}{{image_width.UNIT}}) + {{image_offset_x.SIZE || 0}}{{UNIT}}); max-width: calc((100% - {{image_width.SIZE || 150}}{{image_width.UNIT}}) + {{image_offset_x.SIZE || 0}}{{UNIT}});',
632
- '(tablet){{WRAPPER}}.ha-review--right .ha-review-body' => 'margin-right: calc(-1 * {{image_offset_x_tablet.SIZE || 0}}{{UNIT}}); flex: 0 0 calc((100% - {{image_width_tablet.SIZE || 150}}{{image_width_tablet.UNIT}}) + {{image_offset_x_tablet.SIZE || 0}}{{UNIT}}); max-width: calc((100% - {{image_width_tablet.SIZE || 150}}{{image_width_tablet.UNIT}}) + {{image_offset_x_tablet.SIZE || 0}}{{UNIT}});',
633
- '(mobile){{WRAPPER}}.ha-review--right .ha-review-body' => 'margin-right: calc(-1 * {{image_offset_x_mobile.SIZE || 0}}{{UNIT}}); flex: 0 0 calc((100% - {{image_width_mobile.SIZE || 150}}{{image_width_mobile.UNIT}}) + {{image_offset_x_mobile.SIZE || 0}}{{UNIT}}); max-width: calc((100% - {{image_width_mobile.SIZE || 150}}{{image_width_mobile.UNIT}}) + {{image_offset_x_mobile.SIZE || 0}}{{UNIT}});',
634
- // Image translate styles
635
- '(desktop){{WRAPPER}} .ha-review-figure' => '-ms-transform: translate({{image_offset_x.SIZE || 0}}{{UNIT}}, {{image_offset_y.SIZE || 0}}{{UNIT}}); -webkit-transform: translate({{image_offset_x.SIZE || 0}}{{UNIT}}, {{image_offset_y.SIZE || 0}}{{UNIT}}); transform: translate({{image_offset_x.SIZE || 0}}{{UNIT}}, {{image_offset_y.SIZE || 0}}{{UNIT}});',
636
- '(tablet){{WRAPPER}} .ha-review-figure' => '-ms-transform: translate({{image_offset_x_tablet.SIZE || 0}}{{UNIT}}, {{image_offset_y_tablet.SIZE || 0}}{{UNIT}}); -webkit-transform: translate({{image_offset_x_tablet.SIZE || 0}}{{UNIT}}, {{image_offset_y_tablet.SIZE || 0}}{{UNIT}}); transform: translate({{image_offset_x_tablet.SIZE || 0}}{{UNIT}}, {{image_offset_y_tablet.SIZE || 0}}{{UNIT}});',
637
- '(mobile){{WRAPPER}} .ha-review-figure' => '-ms-transform: translate({{image_offset_x_mobile.SIZE || 0}}{{UNIT}}, {{image_offset_y_mobile.SIZE || 0}}{{UNIT}}); -webkit-transform: translate({{image_offset_x_mobile.SIZE || 0}}{{UNIT}}, {{image_offset_y_mobile.SIZE || 0}}{{UNIT}}); transform: translate({{image_offset_x_mobile.SIZE || 0}}{{UNIT}}, {{image_offset_y_mobile.SIZE || 0}}{{UNIT}});',
638
- // Review body styles
639
- '{{WRAPPER}}.ha-review--top .ha-review-body' => 'margin-top: {{SIZE}}{{UNIT}};',
640
- ],
641
- ]
642
- );
643
- $this->end_popover();
644
-
645
- $this->add_responsive_control(
646
- 'image_padding',
647
- [
648
- 'label' => __( 'Padding', 'happy-elementor-addons' ),
649
- 'type' => Controls_Manager::DIMENSIONS,
650
- 'size_units' => [ 'px', 'em', '%' ],
651
- 'selectors' => [
652
- '{{WRAPPER}} .ha-review-figure img' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
653
- ],
654
- ]
655
- );
656
-
657
- $this->add_group_control(
658
- Group_Control_Border::get_type(),
659
- [
660
- 'name' => 'image_border',
661
- 'selector' => '{{WRAPPER}} .ha-review-figure img',
662
- ]
663
- );
664
-
665
- $this->add_responsive_control(
666
- 'image_border_radius',
667
- [
668
- 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
669
- 'type' => Controls_Manager::DIMENSIONS,
670
- 'size_units' => [ 'px', '%' ],
671
- 'selectors' => [
672
- '{{WRAPPER}} .ha-review-figure img' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
673
- ],
674
- ]
675
- );
676
-
677
- $this->add_group_control(
678
- Group_Control_Box_Shadow::get_type(),
679
- [
680
- 'name' => 'image_box_shadow',
681
- 'exclude' => [
682
- 'box_shadow_position',
683
- ],
684
- 'selector' => '{{WRAPPER}} .ha-review-figure img',
685
- ]
686
- );
687
-
688
- $this->end_controls_section();
689
- }
690
 
691
  protected function render() {
692
- $settings = $this->get_settings_for_display();
693
-
694
- $this->add_render_attribute( '_wrapper', 'itemscope' );
695
- $this->add_render_attribute( '_wrapper', 'itemtype', 'https://schema.org/Review' );
696
-
697
- $this->add_inline_editing_attributes( 'title', 'basic' );
698
- $this->add_render_attribute( 'title', 'class', 'ha-review-reviewer' );
699
- $this->add_render_attribute( 'title', 'itemprop', 'author' );
700
- $this->add_render_attribute( 'title', 'itemscope', '' );
701
- $this->add_render_attribute( 'title', 'itemtype', 'https://schema.org/Person' );
702
-
703
- $this->add_inline_editing_attributes( 'job_title', 'basic' );
704
- $this->add_render_attribute( 'job_title', 'class', 'ha-review-position' );
705
-
706
- $this->add_inline_editing_attributes( 'review', 'intermediate' );
707
- $this->add_render_attribute( 'review', 'class', 'ha-review-desc' );
708
- $this->add_render_attribute( 'review', 'itemprop', 'reviewBody' );
709
-
710
- $this->add_render_attribute( 'ratting', 'class', [
711
- 'ha-review-ratting',
712
- 'ha-review-ratting--' . $settings['ratting_style']
713
- ] );
714
-
715
- $this->add_render_attribute( 'ratting', 'itemprop', 'reviewRating' );
716
- $this->add_render_attribute( 'ratting', 'itemscope' );
717
- $this->add_render_attribute( 'ratting', 'itemtype', 'https://schema.org/Rating' );
718
-
719
- $ratting = max( 0, $settings['ratting']['size'] );
720
- ?>
721
-
722
- <?php if ( $settings['image']['url'] || $settings['image']['id'] ) :
723
- $this->add_render_attribute( 'image', 'src', $settings['image']['url'] );
724
- $this->add_render_attribute( 'image', 'alt', Control_Media::get_image_alt( $settings['image'] ) );
725
- $this->add_render_attribute( 'image', 'title', Control_Media::get_image_title( $settings['image'] ) );
726
- $settings['hover_animation'] = 'disable-animation'; // hack to prevent image hover animation
727
- ?>
728
- <figure class="ha-review-figure">
729
- <?php echo Group_Control_Image_Size::get_attachment_image_html( $settings, 'thumbnail', 'image' ); ?>
730
- </figure>
731
- <?php endif; ?>
732
-
733
- <div class="ha-review-body">
734
- <?php if ( $settings['review_position'] === 'before' && $settings['review'] ) : ?>
735
- <div <?php $this->print_render_attribute_string( 'review' ); ?>>
736
- <p><?php echo ha_kses_intermediate( $settings['review'] ); ?></p>
737
- </div>
738
- <?php endif; ?>
739
-
740
- <div class="ha-review-header">
741
- <?php if ( $settings['title' ] ) :
742
- printf( '<%1$s %2$s>%3$s</%1$s>',
743
- tag_escape( $settings['title_tag'] ),
744
- $this->get_render_attribute_string( 'title' ),
745
- ha_kses_basic( $settings['title' ] )
746
- );
747
- endif; ?>
748
-
749
- <?php if ( $settings['job_title' ] ) : ?>
750
- <div <?php $this->print_render_attribute_string( 'job_title' ); ?>><?php echo ha_kses_basic( $settings['job_title' ] ); ?></div>
751
- <?php endif; ?>
752
-
753
- <div <?php $this->print_render_attribute_string( 'ratting' ); ?>>
754
- <meta itemprop="ratingValue" content="<?php echo esc_attr( $ratting ); ?>">
755
-
756
- <?php if ( $settings['ratting_style'] === 'num' ) : ?>
757
- <?php echo esc_html( $ratting ); ?> <i class="fa fa-star" aria-hidden="true"></i>
758
- <?php else :
759
- for ( $i = 1; $i <= 5; ++$i ) :
760
- if ( $i <= $ratting ) {
761
- echo '<i class="fa fa-star" aria-hidden="true"></i>';
762
- } else {
763
- echo '<i class="fa fa-star-o" aria-hidden="true"></i>';
764
- }
765
- endfor;
766
- endif; ?>
767
- </div>
768
- </div>
769
-
770
- <?php if ( $settings['review_position'] === 'after' && $settings['review'] ) : ?>
771
- <div <?php $this->print_render_attribute_string( 'review' ); ?>>
772
- <p><?php echo ha_kses_intermediate( $settings['review'] ); ?></p>
773
- </div>
774
- <?php endif; ?>
775
- </div>
776
-
777
- <span class="ha-screen-reader-text" itemprop="itemReviewed" itemscope itemtype="https://schema.org/Thing">
778
- <span itemprop="name"><?php echo esc_html( $settings['review_for'] ); ?></span>
779
- </span>
780
- <?php
781
- }
782
-
783
- public function _content_template() {
784
- ?>
785
- <#
786
- view.addInlineEditingAttributes( 'title', 'basic' );
787
- view.addRenderAttribute( 'title', 'class', 'ha-review-reviewer' );
788
-
789
- view.addInlineEditingAttributes( 'job_title', 'basic' );
790
- view.addRenderAttribute( 'job_title', 'class', 'ha-review-position' );
791
-
792
- view.addInlineEditingAttributes( 'review', 'intermediate' );
793
- view.addRenderAttribute( 'review', 'class', 'ha-review-desc' );
794
-
795
- var ratting = Math.max(0, settings.ratting.size);
796
-
797
- if (settings.image.url || settings.image.id) {
798
- var image = {
799
- id: settings.image.id,
800
- url: settings.image.url,
801
- size: settings.thumbnail_size,
802
- dimension: settings.thumbnail_custom_dimension,
803
- model: view.getEditModel()
804
- };
805
-
806
- var image_url = elementor.imagesManager.getImageUrl( image );
807
- #>
808
- <figure class="ha-review-figure">
809
- <img src="{{ image_url }}">
810
- </figure>
811
- <# } #>
812
-
813
- <div class="ha-review-body">
814
- <# if (settings.review_position === 'before' && settings.review) { #>
815
- <div {{{ view.getRenderAttributeString( 'review' ) }}}>
816
- <p>{{{ settings.review }}}</p>
817
- </div>
818
- <# } #>
819
- <div class="ha-review-header">
820
- <# if (settings.title) { #>
821
- <{{ settings.title_tag }} {{{ view.getRenderAttributeString( 'title' ) }}}>{{{ settings.title }}}</{{ settings.title_tag }}>
822
- <# } #>
823
- <# if (settings.job_title) { #>
824
- <div {{{ view.getRenderAttributeString( 'job_title' ) }}}>{{{ settings.job_title }}}</div>
825
- <# } #>
826
- <# if ( settings.ratting_style === 'num' ) { #>
827
- <div class="ha-review-ratting ha-review-ratting--num">{{ ratting }} <i class="fa fa-star"></i></div>
828
- <# } else { #>
829
- <div class="ha-review-ratting ha-review-ratting--star">
830
- <# _.each(_.range(1, 6), function(i) {
831
- if (i <= ratting) {
832
- print('<i class="fa fa-star"></i>');
833
- } else {
834
- print('<i class="fa fa-star-o"></i>');
835
- }
836
- }); #>
837
- </div>
838
- <# } #>
839
- </div>
840
- <# if ( settings.review_position === 'after' && settings.review) { #>
841
- <div {{{ view.getRenderAttributeString( 'review' ) }}}>
842
- <p>{{{ settings.review }}}</p>
843
- </div>
844
- <# } #>
845
- </div>
846
- <?php
847
- }
848
 
849
  }
8
 
9
  use Elementor\Scheme_Typography;
10
  use Elementor\Utils;
 
11
  use Elementor\Controls_Manager;
12
  use Elementor\Group_Control_Border;
13
  use Elementor\Group_Control_Box_Shadow;
14
  use Elementor\Group_Control_Image_Size;
15
  use Elementor\Group_Control_Typography;
 
16
 
17
  defined( 'ABSPATH' ) || die();
18
 
19
  class Review extends Base {
20
 
21
+ /**
22
+ * Get widget title.
23
+ *
24
+ * @since 1.0.0
25
+ * @access public
26
+ *
27
+ * @return string Widget title.
28
+ */
29
+ public function get_title() {
30
+ return __( 'Review', 'happy-elementor-addons' );
31
+ }
32
 
33
  public function get_custom_help_url() {
34
  return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/review/';
35
  }
36
 
37
  /**
38
+ * Get widget icon.
39
+ *
40
+ * @since 1.0.0
41
+ * @access public
42
+ *
43
+ * @return string Widget icon.
44
+ */
45
+ public function get_icon() {
46
+ return 'hm hm-review';
47
+ }
48
+
49
+ public function get_keywords() {
50
+ return [ 'review', 'comment', 'feedback', 'testimonial' ];
51
+ }
52
+
53
+ public function get_style_depends() {
54
+ return [
55
+ 'elementor-icons-fa-solid',
56
+ 'elementor-icons-fa-regular',
57
+ ];
58
+ }
59
 
60
  protected function register_content_controls() {
61
  $this->start_controls_section(
66
  ]
67
  );
68
 
69
+ $this->add_control(
70
+ 'ratting',
71
+ [
72
+ 'label' => __( 'Ratting', 'happy-elementor-addons' ),
73
+ 'type' => Controls_Manager::SLIDER,
74
+ 'default' => [
75
+ 'unit' => 'px',
76
+ 'size' => 4.2,
77
+ ],
78
+ 'size_units' => [ 'px' ],
79
+ 'range' => [
80
+ 'px' => [
81
+ 'min' => 0,
82
+ 'max' => 5,
83
+ 'step' => .5,
84
+ ],
85
+ ],
86
+ 'dynamic' => [
87
+ 'active' => true,
88
+ ]
89
+ ]
90
+ );
91
+
92
+ $this->add_control(
93
+ 'ratting_style',
94
+ [
95
+ 'label' => __( 'Ratting Style', 'happy-elementor-addons' ),
96
+ 'type' => Controls_Manager::SELECT,
97
+ 'options' => [
98
+ 'star' => __( 'Star', 'happy-elementor-addons' ),
99
+ 'num' => __( 'Number', 'happy-elementor-addons' ),
100
+ ],
101
+ 'default' => 'star',
102
+ 'style_transfer' => true,
103
+ ]
104
+ );
105
+
106
+ $this->add_control(
107
+ 'review',
108
+ [
109
+ 'label' => __( 'Review', 'happy-elementor-addons' ),
110
+ 'description' => ha_get_allowed_html_desc( 'intermediate' ),
111
+ 'type' => Controls_Manager::TEXTAREA,
112
+ 'default' => __( 'Happy reviewer is super excited being part of happy addons family', 'happy-elementor-addons' ),
113
+ 'placeholder' => __( 'Type amazing review from happy reviewer', 'happy-elementor-addons' ),
114
+ 'separator' => 'before',
115
+ 'dynamic' => [
116
+ 'active' => true,
117
+ ]
118
+ ]
119
+ );
120
+
121
+ $this->add_control(
122
+ 'review_position',
123
+ [
124
+ 'label' => __( 'Review Position', 'happy-elementor-addons' ),
125
+ 'type' => Controls_Manager::SELECT,
126
+ 'options' => [
127
+ 'before' => __( 'Before Ratting', 'happy-elementor-addons' ),
128
+ 'after' => __( 'After Ratting', 'happy-elementor-addons' ),
129
+ ],
130
+ 'default' => 'before',
131
+ 'style_transfer' => true,
132
+ ]
133
+ );
134
+
135
+ $this->add_control(
136
+ 'review_for',
137
+ [
138
+ 'label' => __( 'Review For', 'happy-elementor-addons' ),
139
+ 'type' => Controls_Manager::TEXT,
140
+ 'placeholder' => __( 'Movie, Games, Software name etc.', 'happy-elementor-addons' ),
141
+ 'description' => __( '[This field is only for structured data (schema.org) purpose] Obviously this review belongs to something like Movie, Games, Software or Service. So type the name of that thing.', 'happy-elementor-addons' ),
142
+ ]
143
+ );
144
+
145
+ $this->end_controls_section();
146
+
147
+ $this->start_controls_section(
148
+ '_section_reviewer',
149
+ [
150
+ 'label' => __( 'Reviewer', 'happy-elementor-addons' ),
151
+ 'tab' => Controls_Manager::TAB_CONTENT,
152
+ ]
153
+ );
154
+
155
+ $this->add_control(
156
+ 'image',
157
+ [
158
+ 'label' => __( 'Photo', 'happy-elementor-addons' ),
159
+ 'type' => Controls_Manager::MEDIA,
160
+ 'default' => [
161
+ 'url' => Utils::get_placeholder_image_src(),
162
+ ],
163
+ 'dynamic' => [
164
+ 'active' => true,
165
+ ]
166
+ ]
167
+ );
168
+
169
+ $this->add_group_control(
170
+ Group_Control_Image_Size::get_type(),
171
+ [
172
+ 'name' => 'thumbnail',
173
+ 'default' => 'large',
174
+ 'separator' => 'none',
175
+ ]
176
+ );
177
+
178
+ $this->add_control(
179
+ 'image_position',
180
+ [
181
+ 'label' => __( 'Image Position', 'happy-elementor-addons' ),
182
+ 'type' => Controls_Manager::CHOOSE,
183
+ 'label_block' => false,
184
+ 'options' => [
185
+ 'left' => [
186
+ 'title' => __( 'Left', 'happy-elementor-addons' ),
187
+ 'icon' => 'eicon-h-align-left',
188
+ ],
189
+ 'top' => [
190
+ 'title' => __( 'Top', 'happy-elementor-addons' ),
191
+ 'icon' => 'eicon-v-align-top',
192
+ ],
193
+ 'right' => [
194
+ 'title' => __( 'Right', 'happy-elementor-addons' ),
195
+ 'icon' => 'eicon-h-align-right',
196
+ ],
197
+ ],
198
+ 'default' => 'top',
199
+ 'toggle' => false,
200
+ 'prefix_class' => 'ha-review--',
201
+ 'style_transfer' => true,
202
+ ]
203
+ );
204
+
205
+ $this->add_control(
206
+ 'title',
207
+ [
208
+ 'label' => __( 'Name', 'happy-elementor-addons' ),
209
+ 'label_block' => true,
210
+ 'type' => Controls_Manager::TEXT,
211
+ 'default' => 'Happy Reviewer',
212
+ 'placeholder' => __( 'Type Reviewer Name', 'happy-elementor-addons' ),
213
+ 'separator' => 'before',
214
+ 'dynamic' => [
215
+ 'active' => true,
216
+ ]
217
+ ]
218
+ );
219
+
220
+ $this->add_control(
221
+ 'job_title',
222
+ [
223
+ 'label' => __( 'Job Title', 'happy-elementor-addons' ),
224
+ 'label_block' => true,
225
+ 'type' => Controls_Manager::TEXT,
226
+ 'default' => __( 'Happy Officer', 'happy-elementor-addons' ),
227
+ 'placeholder' => __( 'Type Reviewer Job Title', 'happy-elementor-addons' ),
228
+ 'dynamic' => [
229
+ 'active' => true,
230
+ ]
231
+ ]
232
+ );
233
+
234
+ $this->add_responsive_control(
235
+ 'align',
236
+ [
237
+ 'label' => __( 'Alignment', 'happy-elementor-addons' ),
238
+ 'type' => Controls_Manager::CHOOSE,
239
+ 'options' => [
240
+ 'left' => [
241
+ 'title' => __( 'Left', 'happy-elementor-addons' ),
242
+ 'icon' => 'eicon-text-align-left',
243
+ ],
244
+ 'center' => [
245
+ 'title' => __( 'Center', 'happy-elementor-addons' ),
246
+ 'icon' => 'eicon-text-align-center',
247
+ ],
248
+ 'right' => [
249
+ 'title' => __( 'Right', 'happy-elementor-addons' ),
250
+ 'icon' => 'eicon-text-align-right',
251
+ ],
252
+ 'justify' => [
253
+ 'title' => __( 'Justify', 'happy-elementor-addons' ),
254
+ 'icon' => 'eicon-text-align-justify',
255
+ ],
256
+ ],
257
+ 'toggle' => true,
258
+ 'separator' => 'before',
259
+ 'selectors' => [
260
+ '{{WRAPPER}} .elementor-widget-container' => 'text-align: {{VALUE}};'
261
+ ]
262
+ ]
263
+ );
264
+
265
+ $this->add_control(
266
+ 'title_tag',
267
+ [
268
+ 'label' => __( 'Name HTML Tag', 'happy-elementor-addons' ),
269
+ 'type' => Controls_Manager::CHOOSE,
270
+ 'options' => [
271
+ 'h1' => [
272
+ 'title' => __( 'H1', 'happy-elementor-addons' ),
273
+ 'icon' => 'eicon-editor-h1'
274
+ ],
275
+ 'h2' => [
276
+ 'title' => __( 'H2', 'happy-elementor-addons' ),
277
+ 'icon' => 'eicon-editor-h2'
278
+ ],
279
+ 'h3' => [
280
+ 'title' => __( 'H3', 'happy-elementor-addons' ),
281
+ 'icon' => 'eicon-editor-h3'
282
+ ],
283
+ 'h4' => [
284
+ 'title' => __( 'H4', 'happy-elementor-addons' ),
285
+ 'icon' => 'eicon-editor-h4'
286
+ ],
287
+ 'h5' => [
288
+ 'title' => __( 'H5', 'happy-elementor-addons' ),
289
+ 'icon' => 'eicon-editor-h5'
290
+ ],
291
+ 'h6' => [
292
+ 'title' => __( 'H6', 'happy-elementor-addons' ),
293
+ 'icon' => 'eicon-editor-h6'
294
+ ]
295
+ ],
296
+ 'default' => 'h2',
297
+ 'toggle' => false,
298
+ ]
299
+ );
300
+
301
+ $this->end_controls_section();
302
+ }
303
+
304
+ protected function register_style_controls() {
305
+ $this->start_controls_section(
306
+ '_section_ratting_style',
307
+ [
308
+ 'label' => __( 'Ratting', 'happy-elementor-addons' ),
309
+ 'tab' => Controls_Manager::TAB_STYLE,
310
+ ]
311
+ );
312
+
313
+ $this->add_responsive_control(
314
+ 'ratting_size',
315
+ [
316
+ 'label' => __( 'Size', 'happy-elementor-addons' ),
317
+ 'type' => Controls_Manager::SLIDER,
318
+ 'size_units' => ['px'],
319
+ 'selectors' => [
320
+ '{{WRAPPER}} .ha-review-ratting' => 'font-size: {{SIZE}}{{UNIT}};',
321
+ ],
322
+ ]
323
+ );
324
+
325
+ $this->add_responsive_control(
326
+ 'ratting_spacing',
327
+ [
328
+ 'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
329
+ 'type' => Controls_Manager::SLIDER,
330
+ 'size_units' => ['px'],
331
+ 'selectors' => [
332
+ '{{WRAPPER}} .ha-review-ratting' => 'margin-bottom: {{SIZE}}{{UNIT}};',
333
+ ],
334
+ ]
335
+ );
336
+
337
+ $this->add_responsive_control(
338
+ 'ratting_padding',
339
+ [
340
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
341
+ 'type' => Controls_Manager::DIMENSIONS,
342
+ 'size_units' => [ 'px', 'em', '%' ],
343
+ 'selectors' => [
344
+ '{{WRAPPER}} .ha-review-ratting' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
345
+ ],
346
+ ]
347
+ );
348
+
349
+ $this->add_control(
350
+ 'ratting_color',
351
+ [
352
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
353
+ 'type' => Controls_Manager::COLOR,
354
+ 'selectors' => [
355
+ '{{WRAPPER}} .ha-review-ratting' => 'color: {{VALUE}};',
356
+ ],
357
+ ]
358
+ );
359
+
360
+ $this->add_control(
361
+ 'ratting_bg_color',
362
+ [
363
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
364
+ 'type' => Controls_Manager::COLOR,
365
+ 'selectors' => [
366
+ '{{WRAPPER}} .ha-review-ratting' => 'background-color: {{VALUE}};',
367
+ ],
368
+ ]
369
+ );
370
+
371
+ $this->add_group_control(
372
+ Group_Control_Border::get_type(),
373
+ [
374
+ 'name' => 'ratting_border',
375
+ 'selector' => '{{WRAPPER}} .ha-review-ratting',
376
+ ]
377
+ );
378
+
379
+ $this->add_control(
380
+ 'ratting_border_radius',
381
+ [
382
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
383
+ 'type' => Controls_Manager::DIMENSIONS,
384
+ 'size_units' => [ 'px', '%' ],
385
+ 'selectors' => [
386
+ '{{WRAPPER}} .ha-review-ratting' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
387
+ ],
388
+ ]
389
+ );
390
+
391
+ $this->end_controls_section();
392
+
393
+ $this->start_controls_section(
394
+ '_section_review_style',
395
+ [
396
+ 'label' => __( 'Review & Reviewer', 'happy-elementor-addons' ),
397
+ 'tab' => Controls_Manager::TAB_STYLE,
398
+ ]
399
+ );
400
+
401
+ $this->add_responsive_control(
402
+ 'body_padding',
403
+ [
404
+ 'label' => __( 'Text Box Padding', 'happy-elementor-addons' ),
405
+ 'type' => Controls_Manager::DIMENSIONS,
406
+ 'size_units' => [ 'px', 'em', '%' ],
407
+ 'selectors' => [
408
+ '{{WRAPPER}} .ha-review-body' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
409
+ ],
410
+ ]
411
+ );
412
+
413
+ $this->add_control(
414
+ '_heading_name',
415
+ [
416
+ 'type' => Controls_Manager::HEADING,
417
+ 'label' => __( 'Name', 'happy-elementor-addons' ),
418
+ 'separator' => 'before'
419
+ ]
420
+ );
421
+
422
+ $this->add_responsive_control(
423
+ 'title_spacing',
424
+ [
425
+ 'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
426
+ 'type' => Controls_Manager::SLIDER,
427
+ 'size_units' => ['px'],
428
+ 'selectors' => [
429
+ '{{WRAPPER}} .ha-review-reviewer' => 'margin-bottom: {{SIZE}}{{UNIT}};',
430
+ ],
431
+ ]
432
+ );
433
+
434
+ $this->add_control(
435
+ 'name_color',
436
+ [
437
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
438
+ 'type' => Controls_Manager::COLOR,
439
+ 'selectors' => [
440
+ '{{WRAPPER}} .ha-review-reviewer' => 'color: {{VALUE}};',
441
+ ],
442
+ ]
443
+ );
444
+
445
+ $this->add_group_control(
446
+ Group_Control_Typography::get_type(),
447
+ [
448
+ 'name' => 'name_typography',
449
+ 'selector' => '{{WRAPPER}} .ha-review-reviewer',
450
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_2,
451
+ ]
452
+ );
453
+
454
+ $this->add_control(
455
+ '_heading_job_title',
456
+ [
457
+ 'type' => Controls_Manager::HEADING,
458
+ 'label' => __( 'Job Title', 'happy-elementor-addons' ),
459
+ 'separator' => 'before'
460
+ ]
461
+ );
462
+
463
+ $this->add_responsive_control(
464
+ 'job_title_spacing',
465
+ [
466
+ 'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
467
+ 'type' => Controls_Manager::SLIDER,
468
+ 'size_units' => ['px'],
469
+ 'selectors' => [
470
+ '{{WRAPPER}} .ha-review-position' => 'margin-bottom: {{SIZE}}{{UNIT}};',
471
+ ],
472
+ ]
473
+ );
474
+
475
+ $this->add_control(
476
+ 'job_title_color',
477
+ [
478
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
479
+ 'type' => Controls_Manager::COLOR,
480
+ 'selectors' => [
481
+ '{{WRAPPER}} .ha-review-position' => 'color: {{VALUE}};',
482
+ ],
483
+ ]
484
+ );
485
+
486
+ $this->add_group_control(
487
+ Group_Control_Typography::get_type(),
488
+ [
489
+ 'name' => 'job_title_typography',
490
+ 'selector' => '{{WRAPPER}} .ha-review-position',
491
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3,
492
+ ]
493
+ );
494
+
495
+ $this->add_control(
496
+ '_heading_review',
497
+ [
498
+ 'type' => Controls_Manager::HEADING,
499
+ 'label' => __( 'Review', 'happy-elementor-addons' ),
500
+ 'separator' => 'before'
501
+ ]
502
+ );
503
+
504
+ $this->add_responsive_control(
505
+ 'review_spacing',
506
+ [
507
+ 'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
508
+ 'type' => Controls_Manager::SLIDER,
509
+ 'size_units' => ['px'],
510
+ 'selectors' => [
511
+ '{{WRAPPER}} .ha-review-desc' => 'margin-bottom: {{SIZE}}{{UNIT}};',
512
+ ],
513
+ ]
514
+ );
515
+
516
+ $this->add_control(
517
+ 'review_color',
518
+ [
519
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
520
+ 'type' => Controls_Manager::COLOR,
521
+ 'selectors' => [
522
+ '{{WRAPPER}} .ha-review-desc' => 'color: {{VALUE}};',
523
+ ],
524
+ ]
525
+ );
526
+
527
+ $this->add_group_control(
528
+ Group_Control_Typography::get_type(),
529
+ [
530
+ 'name' => 'review_typography',
531
+ 'selector' => '{{WRAPPER}} .ha-review-desc',
532
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3,
533
+ ]
534
+ );
535
 
536
  $this->end_controls_section();
537
 
538
+ $this->start_controls_section(
539
+ '_section_photo_style',
540
+ [
541
+ 'label' => __( 'Photo', 'happy-elementor-addons' ),
542
+ 'tab' => Controls_Manager::TAB_STYLE,
543
+ ]
544
+ );
545
+
546
+ $this->add_responsive_control(
547
+ 'image_width',
548
+ [
549
+ 'label' => __( 'Width', 'happy-elementor-addons' ),
550
+ 'type' => Controls_Manager::SLIDER,
551
+ 'size_units' => [ 'px', '%' ],
552
+ 'range' => [
553
+ 'px' => [
554
+ 'min' => 70,
555
+ 'max' => 500,
556
+ ],
557
+ '%' => [
558
+ 'min' => 10,
559
+ 'max' => 100,
560
+ ],
561
+ ],
562
+ 'selectors' => [
563
+ '{{WRAPPER}}' => '--ha-review-media-width: {{SIZE}}{{UNIT}};',
564
+ ],
565
+ ]
566
+ );
567
+
568
+ $this->add_responsive_control(
569
+ 'image_height',
570
+ [
571
+ 'label' => __( 'Height', 'happy-elementor-addons' ),
572
+ 'type' => Controls_Manager::SLIDER,
573
+ 'size_units' => [ 'px' ],
574
+ 'range' => [
575
+ 'px' => [
576
+ 'min' => 70,
577
+ 'max' => 500,
578
+ ],
579
+ ],
580
+ 'selectors' => [
581
+ '{{WRAPPER}} .ha-review-figure' => 'height: {{SIZE}}{{UNIT}};',
582
+ ],
583
+ ]
584
+ );
585
+
586
+ $this->add_control(
587
+ 'offset_toggle',
588
+ [
589
+ 'label' => __( 'Offset', 'happy-elementor-addons' ),
590
+ 'type' => Controls_Manager::POPOVER_TOGGLE,
591
+ 'label_off' => __( 'None', 'happy-elementor-addons' ),
592
+ 'label_on' => __( 'Custom', 'happy-elementor-addons' ),
593
+ 'return_value' => 'yes',
594
+ ]
595
+ );
596
+
597
+ $this->start_popover();
598
+
599
+ $this->add_responsive_control(
600
+ 'image_offset_x',
601
+ [
602
+ 'label' => __( 'Offset X', 'happy-elementor-addons' ),
603
+ 'type' => Controls_Manager::SLIDER,
604
+ 'size_units' => ['px'],
605
+ 'condition' => [
606
+ 'offset_toggle' => 'yes'
607
+ ],
608
+ 'range' => [
609
+ 'px' => [
610
+ 'min' => -1000,
611
+ 'max' => 1000,
612
+ ],
613
+ ],
614
+ 'selectors' => [
615
+ '{{WRAPPER}}' => '--ha-review-media-offset-x: {{SIZE}}{{UNIT}};'
616
+ ]
617
+ ]
618
+ );
619
+
620
+ $this->add_responsive_control(
621
+ 'image_offset_y',
622
+ [
623
+ 'label' => __( 'Offset Y', 'happy-elementor-addons' ),
624
+ 'type' => Controls_Manager::SLIDER,
625
+ 'size_units' => ['px'],
626
+ 'condition' => [
627
+ 'offset_toggle' => 'yes'
628
+ ],
629
+ 'range' => [
630
+ 'px' => [
631
+ 'min' => -1000,
632
+ 'max' => 1000,
633
+ ],
634
+ ],
635
+ 'selectors' => [
636
+ '{{WRAPPER}}' => '--ha-review-media-offset-y: {{SIZE}}{{UNIT}};'
637
+ ],
638
+ ]
639
+ );
640
+ $this->end_popover();
641
+
642
+ $this->add_responsive_control(
643
+ 'image_padding',
644
+ [
645
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
646
+ 'type' => Controls_Manager::DIMENSIONS,
647
+ 'size_units' => [ 'px', 'em', '%' ],
648
+ 'selectors' => [
649
+ '{{WRAPPER}} .ha-review-figure img' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
650
+ ],
651
+ ]
652
+ );
653
+
654
+ $this->add_group_control(
655
+ Group_Control_Border::get_type(),
656
+ [
657
+ 'name' => 'image_border',
658
+ 'selector' => '{{WRAPPER}} .ha-review-figure img',
659
+ ]
660
+ );
661
+
662
+ $this->add_responsive_control(
663
+ 'image_border_radius',
664
+ [
665
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
666
+ 'type' => Controls_Manager::DIMENSIONS,
667
+ 'size_units' => [ 'px', '%' ],
668
+ 'selectors' => [
669
+ '{{WRAPPER}} .ha-review-figure img' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
670
+ ],
671
+ ]
672
+ );
673
+
674
+ $this->add_group_control(
675
+ Group_Control_Box_Shadow::get_type(),
676
+ [
677
+ 'name' => 'image_box_shadow',
678
+ 'exclude' => [
679
+ 'box_shadow_position',
680
+ ],
681
+ 'selector' => '{{WRAPPER}} .ha-review-figure img',
682
+ ]
683
+ );
684
+
685
+ $this->end_controls_section();
686
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
687
 
688
  protected function render() {
689
+ $settings = $this->get_settings_for_display();
690
+
691
+ $this->add_render_attribute( '_wrapper', 'itemscope' );
692
+ $this->add_render_attribute( '_wrapper', 'itemtype', 'https://schema.org/Review' );
693
+
694
+ $this->add_inline_editing_attributes( 'title', 'basic' );
695
+ $this->add_render_attribute( 'title', 'class', 'ha-review-reviewer' );
696
+ $this->add_render_attribute( 'title', 'itemprop', 'author' );
697
+ $this->add_render_attribute( 'title', 'itemscope', '' );
698
+ $this->add_render_attribute( 'title', 'itemtype', 'https://schema.org/Person' );
699
+
700
+ $this->add_inline_editing_attributes( 'job_title', 'basic' );
701
+ $this->add_render_attribute( 'job_title', 'class', 'ha-review-position' );
702
+
703
+ $this->add_inline_editing_attributes( 'review', 'intermediate' );
704
+ $this->add_render_attribute( 'review', 'class', 'ha-review-desc' );
705
+ $this->add_render_attribute( 'review', 'itemprop', 'reviewBody' );
706
+
707
+ $this->add_render_attribute( 'ratting', 'class', [
708
+ 'ha-review-ratting',
709
+ 'ha-review-ratting--' . $settings['ratting_style']
710
+ ] );
711
+
712
+ $this->add_render_attribute( 'ratting', 'itemprop', 'reviewRating' );
713
+ $this->add_render_attribute( 'ratting', 'itemscope' );
714
+ $this->add_render_attribute( 'ratting', 'itemtype', 'https://schema.org/Rating' );
715
+
716
+ $ratting = max( 0, $settings['ratting']['size'] );
717
+ ?>
718
+
719
+ <?php if ( $settings['image']['url'] || $settings['image']['id'] ) :
720
+ $settings['hover_animation'] = 'disable-animation'; // hack to prevent image hover animation
721
+ ?>
722
+ <figure class="ha-review-figure">
723
+ <?php echo Group_Control_Image_Size::get_attachment_image_html( $settings, 'thumbnail', 'image' ); ?>
724
+ </figure>
725
+ <?php endif; ?>
726
+
727
+ <div class="ha-review-body">
728
+ <?php if ( $settings['review_position'] === 'before' && $settings['review'] ) : ?>
729
+ <div <?php $this->print_render_attribute_string( 'review' ); ?>>
730
+ <p><?php echo ha_kses_intermediate( $settings['review'] ); ?></p>
731
+ </div>
732
+ <?php endif; ?>
733
+
734
+ <div class="ha-review-header">
735
+ <?php if ( $settings['title' ] ) :
736
+ printf( '<%1$s %2$s>%3$s</%1$s>',
737
+ tag_escape( $settings['title_tag'] ),
738
+ $this->get_render_attribute_string( 'title' ),
739
+ ha_kses_basic( $settings['title' ] )
740
+ );
741
+ endif; ?>
742
+
743
+ <?php if ( $settings['job_title' ] ) : ?>
744
+ <div <?php $this->print_render_attribute_string( 'job_title' ); ?>><?php echo ha_kses_basic( $settings['job_title' ] ); ?></div>
745
+ <?php endif; ?>
746
+
747
+ <div <?php $this->print_render_attribute_string( 'ratting' ); ?>>
748
+ <meta itemprop="ratingValue" content="<?php echo esc_attr( $ratting ); ?>">
749
+
750
+ <?php if ( $settings['ratting_style'] === 'num' ) : ?>
751
+ <?php echo esc_html( $ratting ); ?> <i class="fas fa-star" aria-hidden="true"></i>
752
+ <?php else :
753
+ for ( $i = 1; $i <= 5; ++$i ) :
754
+ if ( $i <= $ratting ) {
755
+ echo '<i class="fas fa-star" aria-hidden="true"></i>';
756
+ } else {
757
+ echo '<i class="far fa-star" aria-hidden="true"></i>';
758
+ }
759
+ endfor;
760
+ endif; ?>
761
+ </div>
762
+ </div>
763
+
764
+ <?php if ( $settings['review_position'] === 'after' && $settings['review'] ) : ?>
765
+ <div <?php $this->print_render_attribute_string( 'review' ); ?>>
766
+ <p><?php echo ha_kses_intermediate( $settings['review'] ); ?></p>
767
+ </div>
768
+ <?php endif; ?>
769
+ </div>
770
+
771
+ <span class="ha-screen-reader-text" itemprop="itemReviewed" itemscope itemtype="https://schema.org/Thing">
772
+ <span itemprop="name"><?php echo esc_html( $settings['review_for'] ); ?></span>
773
+ </span>
774
+ <?php
775
+ }
776
+
777
+ public function _content_template() {
778
+ ?>
779
+ <#
780
+ view.addInlineEditingAttributes( 'title', 'basic' );
781
+ view.addRenderAttribute( 'title', 'class', 'ha-review-reviewer' );
782
+
783
+ view.addInlineEditingAttributes( 'job_title', 'basic' );
784
+ view.addRenderAttribute( 'job_title', 'class', 'ha-review-position' );
785
+
786
+ view.addInlineEditingAttributes( 'review', 'intermediate' );
787
+ view.addRenderAttribute( 'review', 'class', 'ha-review-desc' );
788
+
789
+ var ratting = Math.max(0, settings.ratting.size);
790
+
791
+ if (settings.image.url || settings.image.id) {
792
+ var image = {
793
+ id: settings.image.id,
794
+ url: settings.image.url,
795
+ size: settings.thumbnail_size,
796
+ dimension: settings.thumbnail_custom_dimension,
797
+ model: view.getEditModel()
798
+ };
799
+
800
+ var image_url = elementor.imagesManager.getImageUrl( image );
801
+ #>
802
+ <figure class="ha-review-figure">
803
+ <img src="{{ image_url }}">
804
+ </figure>
805
+ <# } #>
806
+
807
+ <div class="ha-review-body">
808
+ <# if (settings.review_position === 'before' && settings.review) { #>
809
+ <div {{{ view.getRenderAttributeString( 'review' ) }}}>
810
+ <p>{{{ settings.review }}}</p>
811
+ </div>
812
+ <# } #>
813
+ <div class="ha-review-header">
814
+ <# if (settings.title) { #>
815
+ <{{ settings.title_tag }} {{{ view.getRenderAttributeString( 'title' ) }}}>{{{ settings.title }}}</{{ settings.title_tag }}>
816
+ <# } #>
817
+ <# if (settings.job_title) { #>
818
+ <div {{{ view.getRenderAttributeString( 'job_title' ) }}}>{{{ settings.job_title }}}</div>
819
+ <# } #>
820
+ <# if ( settings.ratting_style === 'num' ) { #>
821
+ <div class="ha-review-ratting ha-review-ratting--num">{{ ratting }} <i class="fa fa-star"></i></div>
822
+ <# } else { #>
823
+ <div class="ha-review-ratting ha-review-ratting--star">
824
+ <# _.each(_.range(1, 6), function(i) {
825
+ if (i <= ratting) {
826
+ print('<i class="fas fa-star"></i>');
827
+ } else {
828
+ print('<i class="far fa-star"></i>');
829
+ }
830
+ }); #>
831
+ </div>
832
+ <# } #>
833
+ </div>
834
+ <# if ( settings.review_position === 'after' && settings.review) { #>
835
+ <div {{{ view.getRenderAttributeString( 'review' ) }}}>
836
+ <p>{{{ settings.review }}}</p>
837
+ </div>
838
+ <# } #>
839
+ </div>
840
+ <?php
841
+ }
 
 
 
842
 
843
  }
widgets/step-flow/widget.php CHANGED
@@ -16,704 +16,756 @@ use Elementor\Scheme_Typography;
16
  defined( 'ABSPATH' ) || die();
17
 
18
  class Step_Flow extends Base {
19
- /**
20
- * Get widget title.
21
- *
22
- * @since 1.0.0
23
- * @access public
24
- *
25
- * @return string Widget title.
26
- */
27
- public function get_title() {
28
- return __( 'Step Flow', 'happy-elementor-addons' );
29
- }
30
 
31
  public function get_custom_help_url() {
32
  return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/step-flow/';
33
  }
34
 
35
- /**
36
- * Get widget icon.
37
- *
38
- * @since 1.0.0
39
- * @access public
40
- *
41
- * @return string Widget icon.
42
- */
43
- public function get_icon() {
44
- return 'hm hm-step-flow';
45
- }
46
-
47
- public function get_keywords() {
48
- return [ 'step', 'flow' ];
49
- }
50
-
51
- protected function register_content_controls() {
52
- $this->start_controls_section(
53
- '_section_step',
54
- [
55
- 'label' => __( 'Step Flow', 'happy-elementor-addons' ),
56
- 'tab' => Controls_Manager::TAB_CONTENT,
57
- ]
58
- );
59
-
60
- if ( ha_is_elementor_version( '<', '2.6.0' ) ) {
61
- $this->add_control(
62
- 'icon',
63
- [
64
- 'label' => __( 'Icon', 'happy-elementor-addons' ),
65
- 'type' => Controls_Manager::ICON,
66
- 'label_block' => true,
67
- 'options' => ha_get_happy_icons(),
68
- 'default' => 'hm hm-finger-index',
69
- ]
70
- );
71
- } else {
72
- $this->add_control(
73
- 'selected_icon',
74
- [
75
- 'label' => __( 'Icon', 'happy-elementor-addons' ),
76
- 'type' => Controls_Manager::ICONS,
77
- 'fa4compatibility' => 'icon',
78
- 'label_block' => true,
79
- 'default' => [
80
- 'value' => 'hm hm-finger-index',
81
- 'library' => 'happy-icons',
82
- ]
83
- ]
84
- );
85
- }
86
-
87
- $this->add_control(
88
- 'badge',
89
- [
90
- 'label' => __( 'Badge', 'happy-elementor-addons' ),
91
- 'type' => Controls_Manager::TEXT,
92
- 'placeholder' => __( 'Badge', 'happy-elementor-addons' ),
93
- 'description' => __( 'Keep it blank, if you want to remove the Badge', 'happy-elementor-addons' ),
94
- 'default' => __( 'Step 1', 'happy-elementor-addons' ),
95
- 'dynamic' => [
96
- 'active' => true,
97
- ]
98
- ]
99
- );
100
-
101
- $this->add_control(
102
- 'title',
103
- [
104
- 'label' => __( 'Title', 'happy-elementor-addons' ),
105
- 'type' => Controls_Manager::TEXT,
106
- 'label_block' => true,
107
- 'placeholder' => __( 'Title', 'happy-elementor-addons' ),
108
- 'default' => __( 'Start Marketing', 'happy-elementor-addons' ),
109
- 'separator' => 'before',
110
- 'dynamic' => [
111
- 'active' => true,
112
- ]
113
- ]
114
- );
115
-
116
- $this->add_control(
117
- 'description',
118
- [
119
- 'label' => __( 'Description', 'happy-elementor-addons' ),
120
- 'description' => ha_get_allowed_html_desc( 'intermediate' ),
121
- 'type' => Controls_Manager::TEXTAREA,
122
- 'placeholder' => __( 'Description', 'happy-elementor-addons' ),
123
- 'default' => 'consectetur adipiscing elit, sed do<br>eiusmod Lorem ipsum dolor sit amet,<br> consectetur.',
124
- 'dynamic' => [
125
- 'active' => true,
126
- ]
127
- ]
128
- );
129
-
130
- $this->add_control(
131
- 'link',
132
- [
133
- 'label' => __( 'Link', 'happy-elementor-addons' ),
134
- 'type' => Controls_Manager::URL,
135
- 'placeholder' => 'https://example.com',
136
- 'dynamic' => [
137
- 'active' => true,
138
- ]
139
- ]
140
- );
141
-
142
- $this->add_control(
143
- 'title_tag',
144
- [
145
- 'label' => __( 'Title HTML Tag', 'happy-elementor-addons' ),
146
- 'type' => Controls_Manager::CHOOSE,
147
- 'separator' => 'before',
148
- 'options' => [
149
- 'h1' => [
150
- 'title' => __( 'H1', 'happy-elementor-addons' ),
151
- 'icon' => 'eicon-editor-h1'
152
- ],
153
- 'h2' => [
154
- 'title' => __( 'H2', 'happy-elementor-addons' ),
155
- 'icon' => 'eicon-editor-h2'
156
- ],
157
- 'h3' => [
158
- 'title' => __( 'H3', 'happy-elementor-addons' ),
159
- 'icon' => 'eicon-editor-h3'
160
- ],
161
- 'h4' => [
162
- 'title' => __( 'H4', 'happy-elementor-addons' ),
163
- 'icon' => 'eicon-editor-h4'
164
- ],
165
- 'h5' => [
166
- 'title' => __( 'H5', 'happy-elementor-addons' ),
167
- 'icon' => 'eicon-editor-h5'
168
- ],
169
- 'h6' => [
170
- 'title' => __( 'H6', 'happy-elementor-addons' ),
171
- 'icon' => 'eicon-editor-h6'
172
- ]
173
- ],
174
- 'default' => 'h2',
175
- 'toggle' => false,
176
- ]
177
- );
178
-
179
- $this->add_control(
180
- 'content_alignment',
181
- [
182
- 'label' => __( 'Alignment', 'happy-elementor-addons' ),
183
- 'type' => Controls_Manager::CHOOSE,
184
- 'options' => [
185
- 'left' => [
186
- 'title' => __( 'Left', 'happy-elementor-addons' ),
187
- 'icon' => 'fa fa-align-left',
188
- ],
189
- 'center' => [
190
- 'title' => __( 'Center', 'happy-elementor-addons' ),
191
- 'icon' => 'fa fa-align-center',
192
- ],
193
- 'right' => [
194
- 'title' => __( 'Right', 'happy-elementor-addons' ),
195
- 'icon' => 'fa fa-align-right',
196
- ],
197
- ],
198
- 'toggle' => true,
199
- 'selectors' => [
200
- '{{WRAPPER}} .elementor-widget-container' => 'text-align: {{VALUE}};'
201
- ]
202
- ]
203
- );
204
-
205
- $this->add_control(
206
- 'show_indicator',
207
- [
208
- 'label' => __( 'Show Direction', 'happy-elementor-addons' ),
209
- 'type' => Controls_Manager::SWITCHER,
210
- 'label_on' => __( 'Yes', 'happy-elementor-addons' ),
211
- 'label_off' => __( 'No', 'happy-elementor-addons' ),
212
- 'return_value' => 'yes',
213
- 'default' => 'yes',
214
- 'style_transfer' => true,
215
- ]
216
- );
217
-
218
- $this->end_controls_section();
219
- }
220
-
221
- protected function register_style_controls() {
222
- $this->start_controls_section(
223
- '_section_icon_style',
224
- [
225
- 'label' => __( 'Icon', 'happy-elementor-addons' ),
226
- 'tab' => Controls_Manager::TAB_STYLE,
227
- ]
228
- );
229
-
230
- $this->add_responsive_control(
231
- 'icon_size',
232
- [
233
- 'label' => __( 'Size', 'happy-elementor-addons' ),
234
- 'type' => Controls_Manager::SLIDER,
235
- 'size_units' => [ 'px', 'em' ],
236
- 'range' => [
237
- 'px' => [
238
- 'min' => 6,
239
- 'max' => 300,
 
 
 
 
240
  ],
241
  'em' => [
242
- 'min' => 6,
243
- 'max' => 300,
244
- ]
245
- ],
246
- 'selectors' => [
247
- '{{WRAPPER}} .ha-steps-icon' => 'font-size: {{SIZE}}{{UNIT}};',
248
- ],
249
- ]
250
- );
251
-
252
- $this->add_responsive_control(
253
- 'icon_padding',
254
- [
255
- 'label' => __( 'Padding', 'happy-elementor-addons' ),
256
- 'type' => Controls_Manager::SLIDER,
257
- 'size_units' => [ 'px', '%' ],
258
- 'range' => [
259
- 'px' => [
260
- 'min' => 0,
261
- 'max' => 200,
262
- ]
263
- ],
264
- 'selectors' => [
265
- '{{WRAPPER}} .ha-steps-icon' => 'padding: {{SIZE}}{{UNIT}};',
266
- ],
267
- ]
268
- );
269
-
270
- $this->add_responsive_control(
271
- 'icon_spacing',
272
- [
273
- 'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
274
- 'type' => Controls_Manager::SLIDER,
275
- 'size_units' => [ 'px', '%' ],
276
- 'range' => [
277
- 'px' => [
278
- 'min' => 0,
279
- 'max' => 100,
280
- ]
281
- ],
282
- 'selectors' => [
283
- '{{WRAPPER}} .ha-steps-icon' => 'margin-bottom: {{SIZE}}{{UNIT}};',
284
- ],
285
- ]
286
- );
287
-
288
- $this->add_group_control(
289
- Group_Control_Border::get_type(),
290
- [
291
- 'name' => 'icon_border',
292
- 'label' => __( 'Border', 'happy-elementor-addons' ),
293
- 'selector' => '{{WRAPPER}} .ha-steps-icon',
294
- ]
295
- );
296
-
297
- $this->add_responsive_control(
298
- 'icon_border_radius',
299
- [
300
- 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
301
- 'type' => Controls_Manager::DIMENSIONS,
302
- 'size_units' => [ 'px', '%' ],
303
- 'selectors' => [
304
- '{{WRAPPER}} .ha-steps-icon' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
305
- ],
306
- ]
307
- );
308
-
309
- $this->add_group_control(
310
- Group_Control_Box_Shadow::get_type(),
311
- [
312
- 'name' => 'icon_box_shadow',
313
- 'selector' => '{{WRAPPER}} .ha-steps-icon',
314
- ]
315
- );
316
-
317
- $this->add_control(
318
- 'icon_color',
319
- [
320
- 'label' => __( 'Color', 'happy-elementor-addons' ),
321
- 'type' => Controls_Manager::COLOR,
322
- 'selectors' => [
323
- '{{WRAPPER}} .ha-steps-icon i' => 'color: {{VALUE}};',
324
- ],
325
- ]
326
- );
327
-
328
- $this->add_control(
329
- 'icon_background_color',
330
- [
331
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
332
- 'type' => Controls_Manager::COLOR,
333
- 'selectors' => [
334
- '{{WRAPPER}} .ha-steps-icon' => 'background: {{VALUE}};',
335
- ],
336
- ]
337
- );
338
-
339
- $this->end_controls_section();
340
-
341
- $this->start_controls_section(
342
- '_section_badge_style',
343
- [
344
- 'label' => __('Badge', 'happy-elementor-addons'),
345
- 'tab' => Controls_Manager::TAB_STYLE,
346
- 'condition' => [
347
- 'badge!' => '',
348
- ],
349
- ]
350
- );
351
-
352
- $this->add_responsive_control(
353
- 'badge_padding',
354
- [
355
- 'label' => __( 'Padding', 'happy-elementor-addons' ),
356
- 'type' => Controls_Manager::DIMENSIONS,
357
- 'size_units' => [ 'px', '%' ],
358
- 'condition' => [
359
- 'badge!' => '',
360
- ],
361
- 'selectors' => [
362
- '{{WRAPPER}} .ha-steps-label' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
363
- ],
364
- ]
365
- );
366
-
367
- $this->add_group_control(
368
- Group_Control_Border::get_type(),
369
- [
370
- 'name' => 'badge_border',
371
- 'label' => __( 'Border', 'happy-elementor-addons' ),
372
- 'selector' => '{{WRAPPER}} .ha-steps-label',
373
- 'condition' => [
374
- 'badge!' => '',
375
- ],
376
- ]
377
- );
378
-
379
- $this->add_responsive_control(
380
- 'badge_border_radius',
381
- [
382
- 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
383
- 'type' => Controls_Manager::DIMENSIONS,
384
- 'size_units' => [ 'px', '%' ],
385
- 'condition' => [
386
- 'badge!' => '',
387
- ],
388
- 'selectors' => [
389
- '{{WRAPPER}} .ha-steps-label' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
390
- ],
391
- ]
392
- );
393
-
394
- $this->add_control(
395
- 'badge_color',
396
- [
397
- 'label' => __( 'Color', 'happy-elementor-addons' ),
398
- 'type' => Controls_Manager::COLOR,
399
- 'condition' => [
400
- 'badge!' => '',
401
- ],
402
- 'selectors' => [
403
- '{{WRAPPER}} .ha-steps-label' => 'color: {{VALUE}};',
404
- ],
405
- ]
406
- );
407
-
408
- $this->add_control(
409
- 'badge_background_color',
410
- [
411
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
412
- 'type' => Controls_Manager::COLOR,
413
- 'condition' => [
414
- 'badge!' => '',
415
- ],
416
- 'selectors' => [
417
- '{{WRAPPER}} .ha-steps-label' => 'background: {{VALUE}};',
418
- ],
419
- ]
420
- );
421
-
422
- $this->add_group_control(
423
- Group_Control_Typography::get_type(),
424
- [
425
- 'name' => 'badge_typography',
426
- 'selector' => '{{WRAPPER}} .ha-steps-label',
427
- 'scheme' => Scheme_Typography::TYPOGRAPHY_4,
428
- 'condition' => [
429
- 'badge!' => '',
430
- ],
431
- ]
432
- );
433
-
434
- $this->end_controls_section();
435
-
436
- $this->start_controls_section(
437
- '_section_title_style',
438
- [
439
- 'label' => __( 'Title & Description', 'happy-elementor-addons' ),
440
- 'tab' => Controls_Manager::TAB_STYLE,
441
- ]
442
- );
443
-
444
- $this->add_control(
445
- '_heading_title',
446
- [
447
- 'type' => Controls_Manager::HEADING,
448
- 'label' => __( 'Title', 'happy-elementor-addons' ),
449
- ]
450
- );
451
-
452
- $this->add_responsive_control(
453
- 'title_spacing',
454
- [
455
- 'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
456
- 'type' => Controls_Manager::SLIDER,
457
- 'size_units' => [ 'px' ],
458
- 'selectors' => [
459
- '{{WRAPPER}} .ha-steps-title' => 'margin-bottom: {{SIZE}}{{UNIT}};',
460
- ],
461
- ]
462
- );
463
-
464
- $this->add_control(
465
- 'title_color',
466
- [
467
- 'label' => __( 'Color', 'happy-elementor-addons' ),
468
- 'type' => Controls_Manager::COLOR,
469
- 'selectors' => [
470
- '{{WRAPPER}} .ha-steps-title' => 'color: {{VALUE}};',
471
- ],
472
- ]
473
- );
474
-
475
- $this->add_control(
476
- 'title_link_color',
477
- [
478
- 'label' => __( 'Link Color', 'happy-elementor-addons' ),
479
- 'type' => Controls_Manager::COLOR,
480
- 'condition' => [
481
- 'link[url]!' => ''
482
- ],
483
- 'selectors' => [
484
- '{{WRAPPER}} .ha-steps-title a' => 'color: {{VALUE}};',
485
- ],
486
- ]
487
- );
488
-
489
- $this->add_control(
490
- 'title_hover_color',
491
- [
492
- 'label' => __( 'Hover Color', 'happy-elementor-addons' ),
493
- 'type' => Controls_Manager::COLOR,
494
- 'condition' => [
495
- 'link[url]!' => ''
496
- ],
497
- 'selectors' => [
498
- '{{WRAPPER}} .ha-steps-title a:hover' => 'color: {{VALUE}};',
499
- ],
500
- ]
501
- );
502
-
503
- $this->add_group_control(
504
- Group_Control_Text_Shadow::get_type(),
505
- [
506
- 'name' => 'title_shadow',
507
- 'selector' => '{{WRAPPER}} .ha-steps-title',
508
- ]
509
- );
510
-
511
- $this->add_group_control(
512
- Group_Control_Typography::get_type(),
513
- [
514
- 'name' => 'title_typography',
515
- 'selector' => '{{WRAPPER}} .ha-steps-title',
516
- 'scheme' => Scheme_Typography::TYPOGRAPHY_2,
517
- ]
518
- );
519
-
520
- $this->add_control(
521
- '_heading_description',
522
- [
523
- 'type' => Controls_Manager::HEADING,
524
- 'label' => __( 'Description', 'happy-elementor-addons' ),
525
- 'separator' => 'before',
526
- ]
527
- );
528
-
529
- $this->add_control(
530
- 'description_color',
531
- [
532
- 'label' => __( 'Color', 'happy-elementor-addons' ),
533
- 'type' => Controls_Manager::COLOR,
534
- 'selectors' => [
535
- '{{WRAPPER}} .ha-step-description' => 'color: {{VALUE}};',
536
- ],
537
- ]
538
- );
539
-
540
- $this->add_group_control(
541
- Group_Control_Text_Shadow::get_type(),
542
- [
543
- 'name' => 'description_shadow',
544
- 'selector' => '{{WRAPPER}} .ha-step-description',
545
- ]
546
- );
547
-
548
- $this->add_group_control(
549
- Group_Control_Typography::get_type(),
550
- [
551
- 'name' => 'description_typography',
552
- 'selector' => '{{WRAPPER}} .ha-step-description',
553
- 'scheme' => Scheme_Typography::TYPOGRAPHY_3,
554
- ]
555
- );
556
-
557
- $this->end_controls_section();
558
-
559
- $this->start_controls_section(
560
- '_section_direction_style',
561
- [
562
- 'label' => __( 'Direction', 'happy-elementor-addons' ),
563
- 'tab' => Controls_Manager::TAB_STYLE,
564
- ]
565
- );
566
-
567
- $this->add_control(
568
- 'direction_style',
569
- [
570
- 'label' => __( 'Style', 'happy-elementor-addons' ),
571
- 'type' => Controls_Manager::SELECT,
572
- 'options' => [
573
- 'solid' => __( 'Solid', 'happy-elementor-addons' ),
574
- 'dotted' => __( 'Dotted', 'happy-elementor-addons' ),
575
- 'dashed' => __( 'Dashed', 'happy-elementor-addons' ),
576
- ],
577
- 'default' => 'solid',
578
- 'selectors' => [
579
- '{{WRAPPER}} .ha-step-arrow, {{WRAPPER}} .ha-step-arrow:after' => 'border-top-style: {{VALUE}};',
580
- '{{WRAPPER}} .ha-step-arrow:after' => 'border-right-style: {{VALUE}};',
581
- ],
582
- ]
583
- );
584
-
585
- $this->add_responsive_control(
586
- 'direction_width',
587
- [
588
- 'label' => __( 'Width', 'happy-elementor-addons' ),
589
- 'type' => Controls_Manager::SLIDER,
590
- 'size_units' => ['px', '%'],
591
- 'range' => [
592
- 'px' => [
593
- 'min' => 1,
594
- 'max' => 150,
595
- ],
596
- ],
597
- 'selectors' => [
598
- '{{WRAPPER}} .ha-step-arrow' => 'width: {{SIZE}}{{UNIT}};',
599
- ],
600
- ]
601
- );
602
-
603
- $this->add_control(
604
- 'direction_offset_toggle',
605
- [
606
- 'label' => __( 'Offset', 'happy-elementor-addons' ),
607
- 'type' => Controls_Manager::POPOVER_TOGGLE,
608
- 'label_off' => __( 'None', 'happy-elementor-addons' ),
609
- 'label_on' => __( 'Custom', 'happy-elementor-addons' ),
610
- 'return_value' => 'yes',
611
- ]
612
- );
613
-
614
- $this->start_popover();
615
-
616
- $this->add_responsive_control(
617
- 'direction_offset_y',
618
- [
619
- 'label' => __( 'Offset Top', 'happy-elementor-addons' ),
620
- 'type' => Controls_Manager::SLIDER,
621
- 'size_units' => ['px', '%'],
622
- 'condition' => [
623
- 'direction_offset_toggle' => 'yes'
624
- ],
625
- 'render_type' => 'ui',
626
- 'selectors' => [
627
- '{{WRAPPER}} .ha-step-arrow' => 'top: {{SIZE}}{{UNIT}};',
628
- ],
629
- ]
630
- );
631
-
632
- $this->add_responsive_control(
633
- 'direction_offset_x',
634
- [
635
- 'label' => __( 'Offset Left', 'happy-elementor-addons' ),
636
- 'type' => Controls_Manager::SLIDER,
637
- 'size_units' => ['px', '%'],
638
- 'condition' => [
639
- 'direction_offset_toggle' => 'yes'
640
- ],
641
- 'render_type' => 'ui',
642
- 'selectors' => [
643
- '{{WRAPPER}} .ha-step-arrow' => 'left: calc( 100% + {{SIZE}}{{UNIT}} );',
644
- ],
645
- ]
646
- );
647
-
648
- $this->end_popover();
649
-
650
- $this->add_control(
651
- 'direction_color',
652
- [
653
- 'label' => __( 'Color', 'happy-elementor-addons' ),
654
- 'type' => Controls_Manager::COLOR,
655
- 'selectors' => [
656
- '{{WRAPPER}} .ha-step-arrow' => 'border-color: {{VALUE}};',
657
- '{{WRAPPER}} .ha-step-arrow:after' => 'border-color: {{VALUE}};',
658
- ],
659
- ]
660
- );
661
-
662
- $this->end_controls_section();
663
- }
664
-
665
- protected function render() {
666
- $settings = $this->get_settings_for_display();
667
-
668
- $this->add_render_attribute( 'title', 'class', 'ha-steps-title' );
669
-
670
- $this->add_inline_editing_attributes( 'description', 'intermediate' );
671
- $this->add_render_attribute( 'description', 'class', 'ha-step-description' );
672
-
673
- $this->add_render_attribute( 'badge', 'class', 'ha-steps-label' );
674
- $this->add_inline_editing_attributes( 'badge', 'none' );
675
-
676
- if ( ! empty( $settings['link']['url'] ) ) {
677
- $this->add_link_attributes( 'link', $settings['link'] );
678
- $this->add_inline_editing_attributes( 'link', 'basic', 'title' );
679
-
680
- $title = sprintf( '<a %s>%s</a>',
681
- $this->get_render_attribute_string( 'link' ),
682
- ha_kses_basic( $settings['title'] )
683
- );
684
- } else {
685
- $this->add_inline_editing_attributes( 'title', 'basic' );
686
- $title = ha_kses_basic( $settings['title'] );
687
- }
688
- ?>
689
-
690
- <div class="ha-steps-icon">
691
- <?php if ( $settings['show_indicator'] === 'yes' ) : ?>
692
- <div class="ha-step-arrow"></div>
693
- <?php endif; ?>
694
-
695
- <?php if ( ! empty( $settings['icon'] ) || ! empty( $settings['selected_icon']['value'] ) ) :
696
- ha_render_icon( $settings, 'icon', 'selected_icon' );
697
- endif; ?>
698
-
699
- <?php if ( $settings['badge'] ) : ?>
700
- <span <?php $this->print_render_attribute_string( 'badge' ); ?>><?php echo esc_html( $settings['badge'] ); ?></span>
701
- <?php endif; ?>
702
- </div>
703
-
704
- <?php
705
- printf( '<%1$s %2$s>%3$s</%1$s>',
706
- tag_escape( $settings['title_tag'] ),
707
- $this->get_render_attribute_string( 'title' ),
708
- $title
709
- );
710
- ?>
711
-
712
- <?php if ( $settings['description'] ) : ?>
713
- <p <?php $this->print_render_attribute_string( 'description' ); ?>><?php echo ha_kses_intermediate( $settings['description'] ); ?></p>
714
- <?php endif; ?>
715
-
716
- <?php
717
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
718
 
719
  }
16
  defined( 'ABSPATH' ) || die();
17
 
18
  class Step_Flow extends Base {
19
+ /**
20
+ * Get widget title.
21
+ *
22
+ * @since 1.0.0
23
+ * @access public
24
+ *
25
+ * @return string Widget title.
26
+ */
27
+ public function get_title() {
28
+ return __( 'Step Flow', 'happy-elementor-addons' );
29
+ }
30
 
31
  public function get_custom_help_url() {
32
  return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/step-flow/';
33
  }
34
 
35
+ /**
36
+ * Get widget icon.
37
+ *
38
+ * @since 1.0.0
39
+ * @access public
40
+ *
41
+ * @return string Widget icon.
42
+ */
43
+ public function get_icon() {
44
+ return 'hm hm-step-flow';
45
+ }
46
+
47
+ public function get_keywords() {
48
+ return [ 'step', 'flow' ];
49
+ }
50
+
51
+ protected function register_content_controls() {
52
+ $this->start_controls_section(
53
+ '_section_step',
54
+ [
55
+ 'label' => __( 'Step Flow', 'happy-elementor-addons' ),
56
+ 'tab' => Controls_Manager::TAB_CONTENT,
57
+ ]
58
+ );
59
+
60
+ if ( ha_is_elementor_version( '<', '2.6.0' ) ) {
61
+ $this->add_control(
62
+ 'icon',
63
+ [
64
+ 'label' => __( 'Icon', 'happy-elementor-addons' ),
65
+ 'type' => Controls_Manager::ICON,
66
+ 'label_block' => true,
67
+ 'options' => ha_get_happy_icons(),
68
+ 'default' => 'hm hm-finger-index',
69
+ ]
70
+ );
71
+ } else {
72
+ $this->add_control(
73
+ 'selected_icon',
74
+ [
75
+ 'label' => __( 'Icon', 'happy-elementor-addons' ),
76
+ 'type' => Controls_Manager::ICONS,
77
+ 'fa4compatibility' => 'icon',
78
+ 'label_block' => true,
79
+ 'default' => [
80
+ 'value' => 'hm hm-finger-index',
81
+ 'library' => 'happy-icons',
82
+ ]
83
+ ]
84
+ );
85
+ }
86
+
87
+ $this->add_control(
88
+ 'badge',
89
+ [
90
+ 'label' => __( 'Badge', 'happy-elementor-addons' ),
91
+ 'type' => Controls_Manager::TEXT,
92
+ 'placeholder' => __( 'Badge', 'happy-elementor-addons' ),
93
+ 'description' => __( 'Keep it blank, if you want to remove the Badge', 'happy-elementor-addons' ),
94
+ 'default' => __( 'Step 1', 'happy-elementor-addons' ),
95
+ 'dynamic' => [
96
+ 'active' => true,
97
+ ]
98
+ ]
99
+ );
100
+
101
+ $this->add_control(
102
+ 'title',
103
+ [
104
+ 'label' => __( 'Title', 'happy-elementor-addons' ),
105
+ 'type' => Controls_Manager::TEXT,
106
+ 'label_block' => true,
107
+ 'placeholder' => __( 'Title', 'happy-elementor-addons' ),
108
+ 'default' => __( 'Start Marketing', 'happy-elementor-addons' ),
109
+ 'separator' => 'before',
110
+ 'dynamic' => [
111
+ 'active' => true,
112
+ ]
113
+ ]
114
+ );
115
+
116
+ $this->add_control(
117
+ 'description',
118
+ [
119
+ 'label' => __( 'Description', 'happy-elementor-addons' ),
120
+ 'description' => ha_get_allowed_html_desc( 'intermediate' ),
121
+ 'type' => Controls_Manager::TEXTAREA,
122
+ 'placeholder' => __( 'Description', 'happy-elementor-addons' ),
123
+ 'default' => 'consectetur adipiscing elit, sed do<br>eiusmod Lorem ipsum dolor sit amet,<br> consectetur.',
124
+ 'dynamic' => [
125
+ 'active' => true,
126
+ ]
127
+ ]
128
+ );
129
+
130
+ $this->add_control(
131
+ 'link',
132
+ [
133
+ 'label' => __( 'Link', 'happy-elementor-addons' ),
134
+ 'type' => Controls_Manager::URL,
135
+ 'placeholder' => 'https://example.com',
136
+ 'dynamic' => [
137
+ 'active' => true,
138
+ ]
139
+ ]
140
+ );
141
+
142
+ $this->add_control(
143
+ 'title_tag',
144
+ [
145
+ 'label' => __( 'Title HTML Tag', 'happy-elementor-addons' ),
146
+ 'type' => Controls_Manager::CHOOSE,
147
+ 'separator' => 'before',
148
+ 'options' => [
149
+ 'h1' => [
150
+ 'title' => __( 'H1', 'happy-elementor-addons' ),
151
+ 'icon' => 'eicon-editor-h1'
152
+ ],
153
+ 'h2' => [
154
+ 'title' => __( 'H2', 'happy-elementor-addons' ),
155
+ 'icon' => 'eicon-editor-h2'
156
+ ],
157
+ 'h3' => [
158
+ 'title' => __( 'H3', 'happy-elementor-addons' ),
159
+ 'icon' => 'eicon-editor-h3'
160
+ ],
161
+ 'h4' => [
162
+ 'title' => __( 'H4', 'happy-elementor-addons' ),
163
+ 'icon' => 'eicon-editor-h4'
164
+ ],
165
+ 'h5' => [
166
+ 'title' => __( 'H5', 'happy-elementor-addons' ),
167
+ 'icon' => 'eicon-editor-h5'
168
+ ],
169
+ 'h6' => [
170
+ 'title' => __( 'H6', 'happy-elementor-addons' ),
171
+ 'icon' => 'eicon-editor-h6'
172
+ ]
173
+ ],
174
+ 'default' => 'h2',
175
+ 'toggle' => false,
176
+ ]
177
+ );
178
+
179
+ $this->add_control(
180
+ 'content_alignment',
181
+ [
182
+ 'label' => __( 'Alignment', 'happy-elementor-addons' ),
183
+ 'type' => Controls_Manager::CHOOSE,
184
+ 'options' => [
185
+ 'left' => [
186
+ 'title' => __( 'Left', 'happy-elementor-addons' ),
187
+ 'icon' => 'eicon-text-align-left',
188
+ ],
189
+ 'center' => [
190
+ 'title' => __( 'Center', 'happy-elementor-addons' ),
191
+ 'icon' => 'eicon-text-align-center',
192
+ ],
193
+ 'right' => [
194
+ 'title' => __( 'Right', 'happy-elementor-addons' ),
195
+ 'icon' => 'eicon-text-align-right',
196
+ ],
197
+ 'justify' => [
198
+ 'title' => __( 'Justify', 'happy-elementor-addons' ),
199
+ 'icon' => 'eicon-text-align-justify',
200
+ ],
201
+ ],
202
+ 'toggle' => true,
203
+ 'selectors' => [
204
+ '{{WRAPPER}} .elementor-widget-container' => 'text-align: {{VALUE}};'
205
+ ]
206
+ ]
207
+ );
208
+
209
+ $this->add_control(
210
+ 'show_indicator',
211
+ [
212
+ 'label' => __( 'Show Direction', 'happy-elementor-addons' ),
213
+ 'type' => Controls_Manager::SWITCHER,
214
+ 'label_on' => __( 'Yes', 'happy-elementor-addons' ),
215
+ 'label_off' => __( 'No', 'happy-elementor-addons' ),
216
+ 'return_value' => 'yes',
217
+ 'default' => 'yes',
218
+ 'style_transfer' => true,
219
+ ]
220
+ );
221
+
222
+ $this->end_controls_section();
223
+ }
224
+
225
+ protected function register_style_controls() {
226
+ $this->start_controls_section(
227
+ '_section_icon_style',
228
+ [
229
+ 'label' => __( 'Icon', 'happy-elementor-addons' ),
230
+ 'tab' => Controls_Manager::TAB_STYLE,
231
+ ]
232
+ );
233
+
234
+ $this->add_responsive_control(
235
+ 'icon_size',
236
+ [
237
+ 'label' => __( 'Size', 'happy-elementor-addons' ),
238
+ 'type' => Controls_Manager::SLIDER,
239
+ 'size_units' => [ 'px', 'em' ],
240
+ 'range' => [
241
+ 'px' => [
242
+ 'min' => 6,
243
+ 'max' => 300,
244
  ],
245
  'em' => [
246
+ 'min' => 6,
247
+ 'max' => 300,
248
+ ]
249
+ ],
250
+ 'selectors' => [
251
+ '{{WRAPPER}} .ha-steps-icon' => 'font-size: {{SIZE}}{{UNIT}};',
252
+ '{{WRAPPER}}' => '--ha-stepflow-icon-size: {{SIZE}}{{UNIT}};',
253
+ ],
254
+ ]
255
+ );
256
+
257
+ $this->add_responsive_control(
258
+ 'icon_padding',
259
+ [
260
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
261
+ 'type' => Controls_Manager::SLIDER,
262
+ 'size_units' => [ 'px', '%' ],
263
+ 'range' => [
264
+ 'px' => [
265
+ 'min' => 0,
266
+ 'max' => 200,
267
+ ]
268
+ ],
269
+ 'selectors' => [
270
+ '{{WRAPPER}} .ha-steps-icon' => 'padding: {{SIZE}}{{UNIT}};',
271
+ '{{WRAPPER}}' => '--ha-stepflow-icon-padding: {{SIZE}}{{UNIT}};',
272
+ ],
273
+ ]
274
+ );
275
+
276
+ $this->add_responsive_control(
277
+ 'icon_spacing',
278
+ [
279
+ 'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
280
+ 'type' => Controls_Manager::SLIDER,
281
+ 'size_units' => [ 'px', '%' ],
282
+ 'range' => [
283
+ 'px' => [
284
+ 'min' => 0,
285
+ 'max' => 100,
286
+ ]
287
+ ],
288
+ 'selectors' => [
289
+ '{{WRAPPER}} .ha-steps-icon' => 'margin-bottom: {{SIZE}}{{UNIT}};',
290
+ ],
291
+ ]
292
+ );
293
+
294
+ $this->add_group_control(
295
+ Group_Control_Border::get_type(),
296
+ [
297
+ 'name' => 'icon_border',
298
+ 'label' => __( 'Border', 'happy-elementor-addons' ),
299
+ 'selector' => '{{WRAPPER}} .ha-steps-icon',
300
+ ]
301
+ );
302
+
303
+ $this->add_responsive_control(
304
+ 'icon_border_radius',
305
+ [
306
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
307
+ 'type' => Controls_Manager::DIMENSIONS,
308
+ 'size_units' => [ 'px', '%' ],
309
+ 'selectors' => [
310
+ '{{WRAPPER}} .ha-steps-icon' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
311
+ ],
312
+ ]
313
+ );
314
+
315
+ $this->add_group_control(
316
+ Group_Control_Box_Shadow::get_type(),
317
+ [
318
+ 'name' => 'icon_box_shadow',
319
+ 'selector' => '{{WRAPPER}} .ha-steps-icon',
320
+ ]
321
+ );
322
+
323
+ $this->add_control(
324
+ 'icon_color',
325
+ [
326
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
327
+ 'type' => Controls_Manager::COLOR,
328
+ 'selectors' => [
329
+ '{{WRAPPER}} .ha-steps-icon i' => 'color: {{VALUE}};',
330
+ ],
331
+ ]
332
+ );
333
+
334
+ $this->add_control(
335
+ 'icon_background_color',
336
+ [
337
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
338
+ 'type' => Controls_Manager::COLOR,
339
+ 'selectors' => [
340
+ '{{WRAPPER}} .ha-steps-icon' => 'background: {{VALUE}};',
341
+ ],
342
+ ]
343
+ );
344
+
345
+ $this->end_controls_section();
346
+
347
+ $this->start_controls_section(
348
+ '_section_badge_style',
349
+ [
350
+ 'label' => __('Badge', 'happy-elementor-addons'),
351
+ 'tab' => Controls_Manager::TAB_STYLE,
352
+ 'condition' => [
353
+ 'badge!' => '',
354
+ ],
355
+ ]
356
+ );
357
+
358
+ $this->add_responsive_control(
359
+ 'badge_padding',
360
+ [
361
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
362
+ 'type' => Controls_Manager::DIMENSIONS,
363
+ 'size_units' => [ 'px', '%' ],
364
+ 'condition' => [
365
+ 'badge!' => '',
366
+ ],
367
+ 'selectors' => [
368
+ '{{WRAPPER}} .ha-steps-label' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
369
+ ],
370
+ ]
371
+ );
372
+
373
+ $this->add_group_control(
374
+ Group_Control_Border::get_type(),
375
+ [
376
+ 'name' => 'badge_border',
377
+ 'label' => __( 'Border', 'happy-elementor-addons' ),
378
+ 'selector' => '{{WRAPPER}} .ha-steps-label',
379
+ 'condition' => [
380
+ 'badge!' => '',
381
+ ],
382
+ ]
383
+ );
384
+
385
+ $this->add_responsive_control(
386
+ 'badge_border_radius',
387
+ [
388
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
389
+ 'type' => Controls_Manager::DIMENSIONS,
390
+ 'size_units' => [ 'px', '%' ],
391
+ 'condition' => [
392
+ 'badge!' => '',
393
+ ],
394
+ 'selectors' => [
395
+ '{{WRAPPER}} .ha-steps-label' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
396
+ ],
397
+ ]
398
+ );
399
+
400
+ $this->add_control(
401
+ 'badge_color',
402
+ [
403
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
404
+ 'type' => Controls_Manager::COLOR,
405
+ 'condition' => [
406
+ 'badge!' => '',
407
+ ],
408
+ 'selectors' => [
409
+ '{{WRAPPER}} .ha-steps-label' => 'color: {{VALUE}};',
410
+ ],
411
+ ]
412
+ );
413
+
414
+ $this->add_control(
415
+ 'badge_background_color',
416
+ [
417
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
418
+ 'type' => Controls_Manager::COLOR,
419
+ 'condition' => [
420
+ 'badge!' => '',
421
+ ],
422
+ 'selectors' => [
423
+ '{{WRAPPER}} .ha-steps-label' => 'background: {{VALUE}};',
424
+ ],
425
+ ]
426
+ );
427
+
428
+ $this->add_group_control(
429
+ Group_Control_Typography::get_type(),
430
+ [
431
+ 'name' => 'badge_typography',
432
+ 'selector' => '{{WRAPPER}} .ha-steps-label',
433
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_4,
434
+ 'condition' => [
435
+ 'badge!' => '',
436
+ ],
437
+ ]
438
+ );
439
+
440
+ $this->end_controls_section();
441
+
442
+ $this->start_controls_section(
443
+ '_section_title_style',
444
+ [
445
+ 'label' => __( 'Title & Description', 'happy-elementor-addons' ),
446
+ 'tab' => Controls_Manager::TAB_STYLE,
447
+ ]
448
+ );
449
+
450
+ $this->add_control(
451
+ '_heading_title',
452
+ [
453
+ 'type' => Controls_Manager::HEADING,
454
+ 'label' => __( 'Title', 'happy-elementor-addons' ),
455
+ ]
456
+ );
457
+
458
+ $this->add_responsive_control(
459
+ 'title_spacing',
460
+ [
461
+ 'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
462
+ 'type' => Controls_Manager::SLIDER,
463
+ 'size_units' => [ 'px' ],
464
+ 'selectors' => [
465
+ '{{WRAPPER}} .ha-steps-title' => 'margin-bottom: {{SIZE}}{{UNIT}};',
466
+ ],
467
+ ]
468
+ );
469
+
470
+ $this->add_control(
471
+ 'title_color',
472
+ [
473
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
474
+ 'type' => Controls_Manager::COLOR,
475
+ 'selectors' => [
476
+ '{{WRAPPER}} .ha-steps-title' => 'color: {{VALUE}};',
477
+ ],
478
+ ]
479
+ );
480
+
481
+ $this->add_control(
482
+ 'title_link_color',
483
+ [
484
+ 'label' => __( 'Link Color', 'happy-elementor-addons' ),
485
+ 'type' => Controls_Manager::COLOR,
486
+ 'condition' => [
487
+ 'link[url]!' => ''
488
+ ],
489
+ 'selectors' => [
490
+ '{{WRAPPER}} .ha-steps-title a' => 'color: {{VALUE}};',
491
+ ],
492
+ ]
493
+ );
494
+
495
+ $this->add_control(
496
+ 'title_hover_color',
497
+ [
498
+ 'label' => __( 'Hover Color', 'happy-elementor-addons' ),
499
+ 'type' => Controls_Manager::COLOR,
500
+ 'condition' => [
501
+ 'link[url]!' => ''
502
+ ],
503
+ 'selectors' => [
504
+ '{{WRAPPER}} .ha-steps-title a:hover' => 'color: {{VALUE}};',
505
+ ],
506
+ ]
507
+ );
508
+
509
+ $this->add_group_control(
510
+ Group_Control_Text_Shadow::get_type(),
511
+ [
512
+ 'name' => 'title_shadow',
513
+ 'selector' => '{{WRAPPER}} .ha-steps-title',
514
+ ]
515
+ );
516
+
517
+ $this->add_group_control(
518
+ Group_Control_Typography::get_type(),
519
+ [
520
+ 'name' => 'title_typography',
521
+ 'selector' => '{{WRAPPER}} .ha-steps-title',
522
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_2,
523
+ ]
524
+ );
525
+
526
+ $this->add_control(
527
+ '_heading_description',
528
+ [
529
+ 'type' => Controls_Manager::HEADING,
530
+ 'label' => __( 'Description', 'happy-elementor-addons' ),
531
+ 'separator' => 'before',
532
+ ]
533
+ );
534
+
535
+ $this->add_control(
536
+ 'description_color',
537
+ [
538
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
539
+ 'type' => Controls_Manager::COLOR,
540
+ 'selectors' => [
541
+ '{{WRAPPER}} .ha-step-description' => 'color: {{VALUE}};',
542
+ ],
543
+ ]
544
+ );
545
+
546
+ $this->add_group_control(
547
+ Group_Control_Text_Shadow::get_type(),
548
+ [
549
+ 'name' => 'description_shadow',
550
+ 'selector' => '{{WRAPPER}} .ha-step-description',
551
+ ]
552
+ );
553
+
554
+ $this->add_group_control(
555
+ Group_Control_Typography::get_type(),
556
+ [
557
+ 'name' => 'description_typography',
558
+ 'selector' => '{{WRAPPER}} .ha-step-description',
559
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3,
560
+ ]
561
+ );
562
+
563
+ $this->end_controls_section();
564
+
565
+ $this->start_controls_section(
566
+ '_section_direction_style',
567
+ [
568
+ 'label' => __( 'Direction', 'happy-elementor-addons' ),
569
+ 'tab' => Controls_Manager::TAB_STYLE,
570
+ ]
571
+ );
572
+
573
+ $this->add_control(
574
+ 'direction_style',
575
+ [
576
+ 'label' => __( 'Style', 'happy-elementor-addons' ),
577
+ 'type' => Controls_Manager::SELECT,
578
+ 'options' => [
579
+ 'solid' => __( 'Solid', 'happy-elementor-addons' ),
580
+ 'dotted' => __( 'Dotted', 'happy-elementor-addons' ),
581
+ 'dashed' => __( 'Dashed', 'happy-elementor-addons' ),
582
+ ],
583
+ 'default' => 'solid',
584
+ 'selectors' => [
585
+ '{{WRAPPER}} .ha-step-arrow, {{WRAPPER}} .ha-step-arrow:after' => 'border-top-style: {{VALUE}};',
586
+ '{{WRAPPER}} .ha-step-arrow:after' => 'border-right-style: {{VALUE}};',
587
+ ],
588
+ ]
589
+ );
590
+
591
+ $this->add_responsive_control(
592
+ 'direction_width',
593
+ [
594
+ 'label' => __( 'Width', 'happy-elementor-addons' ),
595
+ 'type' => Controls_Manager::SLIDER,
596
+ 'size_units' => ['px', '%'],
597
+ 'range' => [
598
+ 'px' => [
599
+ 'min' => 1,
600
+ 'max' => 150,
601
+ ],
602
+ ],
603
+ 'selectors' => [
604
+ '{{WRAPPER}} .ha-step-arrow' => 'width: {{SIZE}}{{UNIT}};',
605
+ ],
606
+ ]
607
+ );
608
+
609
+ $this->add_responsive_control(
610
+ 'direction_angle',
611
+ [
612
+ 'label' => __( 'Angle', 'happy-elementor-addons' ),
613
+ 'type' => Controls_Manager::SLIDER,
614
+ 'size_units' => ['deg'],
615
+ 'default' => [
616
+ 'unit' => 'deg',
617
+ ],
618
+ 'tablet_default' => [
619
+ 'unit' => 'deg',
620
+ ],
621
+ 'mobile_default' => [
622
+ 'unit' => 'deg',
623
+ ],
624
+ 'range' => [
625
+ 'deg' => [
626
+ 'min' => 0,
627
+ 'max' => 360,
628
+ ],
629
+ ],
630
+ 'selectors' => [
631
+ '{{WRAPPER}}' => '--ha-stepflow-direction-angle: {{SIZE}}{{UNIT}};',
632
+ ],
633
+ ]
634
+ );
635
+
636
+ $this->add_control(
637
+ 'direction_offset_toggle',
638
+ [
639
+ 'label' => __( 'Offset', 'happy-elementor-addons' ),
640
+ 'type' => Controls_Manager::POPOVER_TOGGLE,
641
+ 'label_off' => __( 'None', 'happy-elementor-addons' ),
642
+ 'label_on' => __( 'Custom', 'happy-elementor-addons' ),
643
+ 'return_value' => 'yes',
644
+ ]
645
+ );
646
+
647
+ $this->start_popover();
648
+
649
+ $this->add_responsive_control(
650
+ 'direction_offset_y',
651
+ [
652
+ 'label' => __( 'Offset Top', 'happy-elementor-addons' ),
653
+ 'type' => Controls_Manager::SLIDER,
654
+ 'size_units' => ['px', '%'],
655
+ 'range' => [
656
+ 'px' => [
657
+ 'min' => 0,
658
+ 'max' => 1000,
659
+ ],
660
+ '%' => [
661
+ 'min' => 0,
662
+ 'max' => 500,
663
+ ]
664
+ ],
665
+ 'condition' => [
666
+ 'direction_offset_toggle' => 'yes'
667
+ ],
668
+ 'selectors' => [
669
+ '{{WRAPPER}} .ha-step-arrow' => 'top: {{SIZE}}{{UNIT}};',
670
+ ],
671
+ ]
672
+ );
673
+
674
+ $this->add_responsive_control(
675
+ 'direction_offset_x',
676
+ [
677
+ 'label' => __( 'Offset Left', 'happy-elementor-addons' ),
678
+ 'type' => Controls_Manager::SLIDER,
679
+ 'size_units' => ['px', '%'],
680
+ 'range' => [
681
+ 'px' => [
682
+ 'min' => 0,
683
+ 'max' => 1000,
684
+ ],
685
+ '%' => [
686
+ 'min' => 0,
687
+ 'max' => 500,
688
+ ]
689
+ ],
690
+ 'condition' => [
691
+ 'direction_offset_toggle' => 'yes'
692
+ ],
693
+ 'selectors' => [
694
+ '{{WRAPPER}} .ha-step-arrow' => 'left: calc( 100% + {{SIZE}}{{UNIT}} );',
695
+ '{{WRAPPER}}' => '--ha-stepflow-direction-offset-x: {{SIZE}}{{UNIT}};',
696
+ ],
697
+ ]
698
+ );
699
+
700
+ $this->end_popover();
701
+
702
+ $this->add_control(
703
+ 'direction_color',
704
+ [
705
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
706
+ 'type' => Controls_Manager::COLOR,
707
+ 'selectors' => [
708
+ '{{WRAPPER}} .ha-step-arrow' => 'border-color: {{VALUE}};',
709
+ '{{WRAPPER}} .ha-step-arrow:after' => 'border-color: {{VALUE}};',
710
+ ],
711
+ ]
712
+ );
713
+
714
+ $this->end_controls_section();
715
+ }
716
+
717
+ protected function render() {
718
+ $settings = $this->get_settings_for_display();
719
+
720
+ $this->add_render_attribute( 'title', 'class', 'ha-steps-title' );
721
+
722
+ $this->add_inline_editing_attributes( 'description', 'intermediate' );
723
+ $this->add_render_attribute( 'description', 'class', 'ha-step-description' );
724
+
725
+ $this->add_render_attribute( 'badge', 'class', 'ha-steps-label' );
726
+ $this->add_inline_editing_attributes( 'badge', 'none' );
727
+
728
+ if ( ! empty( $settings['link']['url'] ) ) {
729
+ $this->add_link_attributes( 'link', $settings['link'] );
730
+ $this->add_inline_editing_attributes( 'link', 'basic', 'title' );
731
+
732
+ $title = sprintf( '<a %s>%s</a>',
733
+ $this->get_render_attribute_string( 'link' ),
734
+ ha_kses_basic( $settings['title'] )
735
+ );
736
+ } else {
737
+ $this->add_inline_editing_attributes( 'title', 'basic' );
738
+ $title = ha_kses_basic( $settings['title'] );
739
+ }
740
+ ?>
741
+
742
+ <div class="ha-steps-icon">
743
+ <?php if ( $settings['show_indicator'] === 'yes' ) : ?>
744
+ <span class="ha-step-arrow"></span>
745
+ <?php endif; ?>
746
+
747
+ <?php if ( ! empty( $settings['icon'] ) || ! empty( $settings['selected_icon']['value'] ) ) :
748
+ ha_render_icon( $settings, 'icon', 'selected_icon' );
749
+ endif; ?>
750
+
751
+ <?php if ( $settings['badge'] ) : ?>
752
+ <span <?php $this->print_render_attribute_string( 'badge' ); ?>><?php echo esc_html( $settings['badge'] ); ?></span>
753
+ <?php endif; ?>
754
+ </div>
755
+
756
+ <?php
757
+ printf( '<%1$s %2$s>%3$s</%1$s>',
758
+ tag_escape( $settings['title_tag'] ),
759
+ $this->get_render_attribute_string( 'title' ),
760
+ $title
761
+ );
762
+ ?>
763
+
764
+ <?php if ( $settings['description'] ) : ?>
765
+ <p <?php $this->print_render_attribute_string( 'description' ); ?>><?php echo ha_kses_intermediate( $settings['description'] ); ?></p>
766
+ <?php endif; ?>
767
+
768
+ <?php
769
+ }
770
 
771
  }
widgets/testimonial/widget.php CHANGED
@@ -19,425 +19,432 @@ defined( 'ABSPATH' ) || die();
19
 
20
  class Testimonial extends Base {
21
 
22
- /**
23
- * Get widget title.
24
- *
25
- * @since 1.0.0
26
- * @access public
27
- *
28
- * @return string Widget title.
29
- */
30
- public function get_title() {
31
- return __( 'Testimonial', 'happy-elementor-addons' );
32
- }
33
 
34
  public function get_custom_help_url() {
35
  return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/testimonial/';
36
  }
37
 
38
- /**
39
- * Get widget icon.
40
- *
41
- * @since 1.0.0
42
- * @access public
43
- *
44
- * @return string Widget icon.
45
- */
46
- public function get_icon() {
47
- return 'hm hm-testimonial';
48
- }
49
-
50
- public function get_keywords() {
51
- return [ 'testimonial', 'review', 'feedback' ];
52
- }
53
 
54
  protected function register_content_controls() {
55
- $this->start_controls_section(
56
- '_section_testimonial',
57
- [
58
- 'label' => __( 'Testimonial', 'happy-elementor-addons' ),
59
- 'tab' => Controls_Manager::TAB_CONTENT,
60
- ]
61
- );
62
-
63
- $this->add_control(
64
- 'testimonial',
65
- [
66
- 'label' => __( 'Testimonial', 'happy-elementor-addons' ),
67
- 'label_block' => true,
68
- 'type' => Controls_Manager::TEXTAREA,
69
- 'default' => __( 'Testimonial contents', 'happy-elementor-addons' ),
70
- 'placeholder' => __( 'Type testimonial', 'happy-elementor-addons' ),
71
- 'dynamic' => [
72
- 'active' => true,
73
- ]
74
- ]
75
- );
76
-
77
- $this->add_control(
78
- 'align',
79
- [
80
- 'label' => __( 'Alignment', 'happy-elementor-addons' ),
81
- 'type' => Controls_Manager::CHOOSE,
82
- 'label_block' => false,
83
- 'options' => [
84
- 'left' => [
85
- 'title' => __( 'Left', 'happy-elementor-addons' ),
86
- 'icon' => 'fa fa-align-left',
87
- ],
88
- 'center' => [
89
- 'title' => __( 'Center', 'happy-elementor-addons' ),
90
- 'icon' => 'fa fa-align-center',
91
- ],
92
- 'right' => [
93
- 'title' => __( 'Right', 'happy-elementor-addons' ),
94
- 'icon' => 'fa fa-align-right',
95
- ],
96
- ],
97
- 'toggle' => false,
98
- 'default' => 'left',
99
- 'prefix_class' => 'ha-testimonial--'
100
- ]
101
- );
102
-
103
- $this->add_control(
104
- '_design',
105
- [
106
- 'label' => __( 'Design', 'happy-elementor-addons' ),
107
- 'type' => Controls_Manager::SELECT,
108
- 'label_block' => false,
109
- 'options' => [
110
- 'basic' => __( 'Default', 'happy-elementor-addons' ),
111
- 'bubble' => __( 'Bubble', 'happy-elementor-addons' ),
112
- ],
113
- 'default' => 'basic',
114
- 'prefix_class' => 'ha-testimonial--',
115
- 'style_transfer' => true,
116
- ]
117
- );
118
-
119
- $this->end_controls_section();
120
-
121
- $this->start_controls_section(
122
- '_section_reviewer',
123
- [
124
- 'label' => __( 'Reviewer', 'happy-elementor-addons' ),
125
- 'tab' => Controls_Manager::TAB_CONTENT,
126
- ]
127
- );
 
 
 
128
 
129
  $this->add_control(
130
- 'image',
131
- [
132
- 'label' => __( 'Image', 'happy-elementor-addons' ),
133
- 'type' => Controls_Manager::MEDIA,
134
- 'default' => [
135
- 'url' => Utils::get_placeholder_image_src(),
136
- ],
137
- 'dynamic' => [
138
- 'active' => true,
139
- ]
140
- ]
141
  );
142
 
143
  $this->add_group_control(
144
- Group_Control_Image_Size::get_type(),
145
- [
146
- 'name' => 'thumbnail',
147
  'default' => 'full',
148
  'exclude' => ['custom'],
149
- 'separator' => 'none',
150
- ]
151
- );
152
-
153
- $this->add_control(
154
- 'name',
155
- [
156
- 'label' => __( 'Name', 'happy-elementor-addons' ),
157
- 'label_block' => true,
158
- 'type' => Controls_Manager::TEXT,
159
- 'default' => __( 'Happy', 'happy-elementor-addons' ),
160
- 'placeholder' => __( 'Type Reviewer Name', 'happy-elementor-addons' ),
161
- 'dynamic' => [
162
- 'active' => true,
163
- ]
164
- ]
165
- );
166
-
167
- $this->add_control(
168
- 'title',
169
- [
170
- 'label' => __( 'Title', 'happy-elementor-addons' ),
171
- 'label_block' => true,
172
- 'type' => Controls_Manager::TEXT,
173
- 'default' => __( 'CMO, HappyAddons', 'happy-elementor-addons' ),
174
- 'placeholder' => __( 'Type reviewer title', 'happy-elementor-addons' ),
175
- 'dynamic' => [
176
- 'active' => true,
177
- ]
178
- ]
179
- );
180
 
181
  $this->end_controls_section();
182
- }
183
-
184
- protected function register_style_controls() {
185
- $this->start_controls_section(
186
- '_section_style_testimonial',
187
- [
188
- 'label' => __( 'Testimonial', 'happy-elementor-addons' ),
189
- 'tab' => Controls_Manager::TAB_STYLE,
190
- ]
191
- );
192
-
193
- $this->add_responsive_control(
194
- 'testimonial_padding',
195
- [
196
- 'label' => __( 'Padding', 'happy-elementor-addons' ),
197
- 'type' => Controls_Manager::DIMENSIONS,
198
- 'size_units' => [ 'px', 'em', '%' ],
199
- 'selectors' => [
200
- '{{WRAPPER}} .ha-testimonial__content' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
201
- ],
202
- ]
203
- );
204
-
205
- $this->add_responsive_control(
206
- 'testimonial_spacing',
207
- [
208
- 'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
209
- 'type' => Controls_Manager::SLIDER,
210
- 'size_units' => ['px'],
211
- 'selectors' => [
212
- '{{WRAPPER}} .ha-testimonial__content' => 'margin-bottom: {{SIZE}}{{UNIT}};',
213
- ],
214
- ]
215
- );
216
-
217
- $this->add_control(
218
- 'testimonial_color',
219
- [
220
- 'label' => __( 'Text Color', 'happy-elementor-addons' ),
221
- 'type' => Controls_Manager::COLOR,
222
- 'selectors' => [
223
- '{{WRAPPER}} .ha-testimonial__content' => 'color: {{VALUE}}',
224
- ],
225
- ]
226
- );
227
-
228
- $this->add_control(
229
- 'testimonial_bg_color',
230
- [
231
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
232
- 'type' => Controls_Manager::COLOR,
233
- 'selectors' => [
234
- '{{WRAPPER}} .ha-testimonial__content' => 'background-color: {{VALUE}};',
235
- '{{WRAPPER}} .ha-testimonial__content:after' => 'color: {{VALUE}};',
236
- ],
237
- ]
238
- );
239
-
240
- $this->add_group_control(
241
- Group_Control_Typography::get_type(),
242
- [
243
- 'name' => 'testimonial_typography',
244
- 'label' => __( 'Typography', 'happy-elementor-addons' ),
245
- 'selector' => '{{WRAPPER}} .ha-testimonial__content',
246
- 'scheme' => Scheme_Typography::TYPOGRAPHY_3,
247
- ]
248
- );
249
-
250
- $this->add_responsive_control(
251
- 'testimonial_border_radius',
252
- [
253
- 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
254
- 'type' => Controls_Manager::DIMENSIONS,
255
- 'size_units' => [ 'px', '%' ],
256
- 'selectors' => [
257
- '{{WRAPPER}} .ha-testimonial__content' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
258
- ],
259
- ]
260
- );
261
-
262
- $this->add_group_control(
263
- Group_Control_Box_Shadow::get_type(),
264
- [
265
- 'name' => 'testimonial_box_shadow',
266
- 'selector' => '{{WRAPPER}} .ha-testimonial__content',
267
- ]
268
- );
269
-
270
- $this->end_controls_section();
271
 
 
272
  $this->start_controls_section(
273
- '_section_style_image',
274
- [
275
- 'label' => __( 'Image', 'happy-elementor-addons' ),
276
- 'tab' => Controls_Manager::TAB_STYLE,
277
- ]
278
  );
279
 
280
  $this->add_responsive_control(
281
- 'image_width',
282
- [
283
- 'label' => __( 'Width', 'happy-elementor-addons' ),
284
- 'type' => Controls_Manager::SLIDER,
285
- 'size_units' => [ 'px' ],
286
- 'range' => [
287
- 'px' => [
288
- 'min' => 65,
289
- 'max' => 200,
290
- ],
291
  ],
292
- 'selectors' => [
293
- '{{WRAPPER}} .ha-testimonial__reviewer-thumb' => '-webkit-flex: 0 0 {{SIZE}}{{UNIT}}; -ms-flex: 0 0 {{SIZE}}{{UNIT}}; flex: 0 0 {{SIZE}}{{UNIT}}; max-width: {{SIZE}}{{UNIT}};',
294
- '{{WRAPPER}}.ha-testimonial--left .ha-testimonial__reviewer-meta' => '-webkit-flex: 0 0 calc(100% - {{SIZE}}{{UNIT}}); -ms-flex: 0 0 calc(100% - {{SIZE}}{{UNIT}}); flex: 0 0 calc(100% - {{SIZE}}{{UNIT}}); max-width: calc(100% - {{SIZE}}{{UNIT}});',
295
- '{{WRAPPER}}.ha-testimonial--right .ha-testimonial__reviewer-meta' => '-webkit-flex: 0 0 calc(100% - {{SIZE}}{{UNIT}}); -ms-flex: 0 0 calc(100% - {{SIZE}}{{UNIT}}); flex: 0 0 calc(100% - {{SIZE}}{{UNIT}}); max-width: calc(100% - {{SIZE}}{{UNIT}});',
296
- '{{WRAPPER}}.ha-testimonial--left .ha-testimonial__content:after' => 'left: calc(({{SIZE}}{{UNIT}} / 2) - 18px);',
297
- '{{WRAPPER}}.ha-testimonial--right .ha-testimonial__content:after' => 'right: calc(({{SIZE}}{{UNIT}} / 2) - 18px);',
298
- ],
299
- ]
300
- );
301
 
302
  $this->add_responsive_control(
303
- 'image_height',
304
- [
305
- 'label' => __( 'Height', 'happy-elementor-addons' ),
306
- 'type' => Controls_Manager::SLIDER,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
307
  'size_units' => [ 'px' ],
308
- 'range' => [
309
- 'px' => [
310
- 'min' => 20,
311
- 'max' => 200,
312
- ],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
313
  ],
314
- 'selectors' => [
315
- '{{WRAPPER}} .ha-testimonial__reviewer-thumb' => 'height: {{SIZE}}{{UNIT}};',
316
- ],
317
- ]
318
- );
319
-
320
- $this->add_responsive_control(
321
- 'image_spacing',
322
- [
323
- 'label' => __( 'Spacing', 'happy-elementor-addons' ),
324
- 'type' => Controls_Manager::SLIDER,
325
- 'size_units' => ['px'],
326
- 'selectors' => [
327
- '{{WRAPPER}}.ha-testimonial--left .ha-testimonial__reviewer-meta' => 'padding-left: {{SIZE}}{{UNIT}};',
328
- '{{WRAPPER}}.ha-testimonial--right .ha-testimonial__reviewer-meta' => 'padding-right: {{SIZE}}{{UNIT}};',
329
- '{{WRAPPER}}.ha-testimonial--center .ha-testimonial__reviewer-meta' => 'padding-top: {{SIZE}}{{UNIT}};',
330
- ],
331
- ]
332
- );
333
 
334
  $this->add_group_control(
335
- Group_Control_Border::get_type(),
336
- [
337
- 'name' => 'image_border',
338
- 'selector' => '{{WRAPPER}} .ha-testimonial__reviewer-thumb img',
339
- ]
340
  );
341
 
342
  $this->add_responsive_control(
343
- 'image_border_radius',
344
- [
345
- 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
346
- 'type' => Controls_Manager::DIMENSIONS,
347
- 'size_units' => [ 'px', '%' ],
348
- 'selectors' => [
349
- '{{WRAPPER}} .ha-testimonial__reviewer-thumb img' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
350
- ],
351
- ]
352
- );
353
-
354
- $this->add_group_control(
355
- Group_Control_Box_Shadow::get_type(),
356
- [
357
- 'name' => 'image_box_shadow',
358
- 'selector' => '.ha-testimonial__reviewer-thumb img',
359
- ]
360
- );
361
 
362
  $this->end_controls_section();
363
 
364
  $this->start_controls_section(
365
- '_section_style_reviewer',
366
- [
367
- 'label' => __( 'Reviewer', 'happy-elementor-addons' ),
368
- 'tab' => Controls_Manager::TAB_STYLE,
369
- ]
370
  );
371
 
372
- $this->add_control(
373
- '_heading_name',
374
- [
375
- 'label' => __( 'Name', 'happy-elementor-addons' ),
376
- 'type' => Controls_Manager::HEADING,
377
- ]
378
- );
379
 
380
  $this->add_control(
381
- 'name_color',
382
- [
383
- 'label' => __( 'Text Color', 'happy-elementor-addons' ),
384
- 'type' => Controls_Manager::COLOR,
385
- 'selectors' => [
386
- '{{WRAPPER}} .ha-testimonial__reviewer-name' => 'color: {{VALUE}};',
387
- ],
388
- ]
389
- );
390
 
391
  $this->add_group_control(
392
- Group_Control_Typography::get_type(),
393
- [
394
- 'name' => 'name_typography',
395
- 'label' => __( 'Typography', 'happy-elementor-addons' ),
396
  'selector' => '{{WRAPPER}} .ha-testimonial__reviewer-name',
397
  'scheme' => Scheme_Typography::TYPOGRAPHY_2,
398
- ]
399
  );
400
 
401
  $this->add_responsive_control(
402
- 'name_spacing',
403
- [
404
- 'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
405
- 'type' => Controls_Manager::SLIDER,
406
  'size_units' => ['px'],
407
- 'selectors' => [
408
- '{{WRAPPER}} .ha-testimonial__reviewer-name' => 'margin-bottom: {{SIZE}}{{UNIT}};',
409
- ],
410
- ]
411
- );
412
-
413
- $this->add_control(
414
- '_heading_title',
415
- [
416
- 'label' => __( 'Title', 'happy-elementor-addons' ),
417
- 'type' => Controls_Manager::HEADING,
418
- 'separator' => 'before',
419
- ]
420
- );
421
 
422
  $this->add_control(
423
- 'title_color',
424
- [
425
- 'label' => __( 'Text Color', 'happy-elementor-addons' ),
426
- 'type' => Controls_Manager::COLOR,
427
- 'selectors' => [
428
- '{{WRAPPER}} .ha-testimonial__reviewer-title' => 'color: {{VALUE}}',
429
- ],
430
- ]
 
 
 
 
 
 
 
 
 
431
  );
432
 
433
  $this->add_group_control(
434
- Group_Control_Typography::get_type(),
435
- [
436
- 'name' => 'title_typography',
437
- 'label' => __( 'Typography', 'happy-elementor-addons' ),
438
  'selector' => '{{WRAPPER}} .ha-testimonial__reviewer-title',
439
  'scheme' => Scheme_Typography::TYPOGRAPHY_3,
440
- ]
441
  );
442
 
443
  $this->end_controls_section();
@@ -460,17 +467,17 @@ class Testimonial extends Base {
460
  <?php echo ha_kses_intermediate( $settings['testimonial'] ); ?>
461
  </div>
462
  <div class="ha-testimonial__reviewer">
463
- <?php if ( ! empty( $settings['image']['url'] ) ) : ?>
464
- <div class="ha-testimonial__reviewer-thumb">
465
- <?php echo Group_Control_Image_Size::get_attachment_image_html( $settings, 'thumbnail', 'image' ); ?>
466
- </div>
467
- <?php endif; ?>
468
 
469
  <div class="ha-testimonial__reviewer-meta">
470
  <div <?php $this->print_render_attribute_string( 'name' ); ?>><?php echo ha_kses_basic( $settings['name'] ); ?></div>
471
  <div <?php $this->print_render_attribute_string( 'title' ); ?>><?php echo ha_kses_basic( $settings['title'] ); ?></div>
472
  </div>
473
  </div>
474
- <?php
475
  }
476
  }
19
 
20
  class Testimonial extends Base {
21
 
22
+ /**
23
+ * Get widget title.
24
+ *
25
+ * @since 1.0.0
26
+ * @access public
27
+ *
28
+ * @return string Widget title.
29
+ */
30
+ public function get_title() {
31
+ return __( 'Testimonial', 'happy-elementor-addons' );
32
+ }
33
 
34
  public function get_custom_help_url() {
35
  return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/testimonial/';
36
  }
37
 
38
+ /**
39
+ * Get widget icon.
40
+ *
41
+ * @since 1.0.0
42
+ * @access public
43
+ *
44
+ * @return string Widget icon.
45
+ */
46
+ public function get_icon() {
47
+ return 'hm hm-testimonial';
48
+ }
49
+
50
+ public function get_keywords() {
51
+ return [ 'testimonial', 'review', 'feedback' ];
52
+ }
53
 
54
  protected function register_content_controls() {
55
+ $this->start_controls_section(
56
+ '_section_testimonial',
57
+ [
58
+ 'label' => __( 'Testimonial', 'happy-elementor-addons' ),
59
+ 'tab' => Controls_Manager::TAB_CONTENT,
60
+ ]
61
+ );
62
+
63
+ $this->add_control(
64
+ 'testimonial',
65
+ [
66
+ 'label' => __( 'Testimonial', 'happy-elementor-addons' ),
67
+ 'label_block' => true,
68
+ 'type' => Controls_Manager::TEXTAREA,
69
+ 'default' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',
70
+ 'placeholder' => __( 'Type testimonial', 'happy-elementor-addons' ),
71
+ 'dynamic' => [
72
+ 'active' => true,
73
+ ]
74
+ ]
75
+ );
76
+
77
+ $this->add_control(
78
+ 'align',
79
+ [
80
+ 'label' => __( 'Alignment', 'happy-elementor-addons' ),
81
+ 'type' => Controls_Manager::CHOOSE,
82
+ 'label_block' => false,
83
+ 'options' => [
84
+ 'left' => [
85
+ 'title' => __( 'Left', 'happy-elementor-addons' ),
86
+ 'icon' => 'eicon-text-align-left',
87
+ ],
88
+ 'center' => [
89
+ 'title' => __( 'Center', 'happy-elementor-addons' ),
90
+ 'icon' => 'eicon-text-align-center',
91
+ ],
92
+ 'right' => [
93
+ 'title' => __( 'Right', 'happy-elementor-addons' ),
94
+ 'icon' => 'eicon-text-align-right',
95
+ ],
96
+ ],
97
+ 'toggle' => false,
98
+ 'default' => 'left',
99
+ 'prefix_class' => 'ha-testimonial--',
100
+ 'selectors' => [
101
+ '{{WRAPPER}}' => 'text-align: {{VALUE}};'
102
+ ]
103
+ ]
104
+ );
105
+
106
+ $this->add_control(
107
+ '_design',
108
+ [
109
+ 'label' => __( 'Design', 'happy-elementor-addons' ),
110
+ 'type' => Controls_Manager::SELECT,
111
+ 'label_block' => false,
112
+ 'options' => [
113
+ 'basic' => __( 'Default', 'happy-elementor-addons' ),
114
+ 'bubble' => __( 'Bubble', 'happy-elementor-addons' ),
115
+ ],
116
+ 'default' => 'basic',
117
+ 'prefix_class' => 'ha-testimonial--',
118
+ 'style_transfer' => true,
119
+ ]
120
+ );
121
+
122
+ $this->end_controls_section();
123
+
124
+ $this->start_controls_section(
125
+ '_section_reviewer',
126
+ [
127
+ 'label' => __( 'Reviewer', 'happy-elementor-addons' ),
128
+ 'tab' => Controls_Manager::TAB_CONTENT,
129
+ ]
130
+ );
131
 
132
  $this->add_control(
133
+ 'image',
134
+ [
135
+ 'label' => __( 'Image', 'happy-elementor-addons' ),
136
+ 'type' => Controls_Manager::MEDIA,
137
+ 'default' => [
138
+ 'url' => Utils::get_placeholder_image_src(),
139
+ ],
140
+ 'dynamic' => [
141
+ 'active' => true,
142
+ ]
143
+ ]
144
  );
145
 
146
  $this->add_group_control(
147
+ Group_Control_Image_Size::get_type(),
148
+ [
149
+ 'name' => 'thumbnail',
150
  'default' => 'full',
151
  'exclude' => ['custom'],
152
+ 'separator' => 'none',
153
+ ]
154
+ );
155
+
156
+ $this->add_control(
157
+ 'name',
158
+ [
159
+ 'label' => __( 'Name', 'happy-elementor-addons' ),
160
+ 'label_block' => true,
161
+ 'type' => Controls_Manager::TEXT,
162
+ 'default' => __( 'Happy', 'happy-elementor-addons' ),
163
+ 'placeholder' => __( 'Type Reviewer Name', 'happy-elementor-addons' ),
164
+ 'dynamic' => [
165
+ 'active' => true,
166
+ ]
167
+ ]
168
+ );
169
+
170
+ $this->add_control(
171
+ 'title',
172
+ [
173
+ 'label' => __( 'Title', 'happy-elementor-addons' ),
174
+ 'label_block' => true,
175
+ 'type' => Controls_Manager::TEXT,
176
+ 'default' => __( 'CMO, HappyAddons', 'happy-elementor-addons' ),
177
+ 'placeholder' => __( 'Type reviewer title', 'happy-elementor-addons' ),
178
+ 'dynamic' => [
179
+ 'active' => true,
180
+ ]
181
+ ]
182
+ );
183
 
184
  $this->end_controls_section();
185
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
186
 
187
+ protected function register_style_controls() {
188
  $this->start_controls_section(
189
+ '_section_style_testimonial',
190
+ [
191
+ 'label' => __( 'Testimonial', 'happy-elementor-addons' ),
192
+ 'tab' => Controls_Manager::TAB_STYLE,
193
+ ]
194
  );
195
 
196
  $this->add_responsive_control(
197
+ 'testimonial_padding',
198
+ [
199
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
200
+ 'type' => Controls_Manager::DIMENSIONS,
201
+ 'size_units' => [ 'px', 'em', '%' ],
202
+ 'selectors' => [
203
+ '{{WRAPPER}} .ha-testimonial__content' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
 
 
 
204
  ],
205
+ ]
206
+ );
 
 
 
 
 
 
 
207
 
208
  $this->add_responsive_control(
209
+ 'testimonial_spacing',
210
+ [
211
+ 'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
212
+ 'type' => Controls_Manager::SLIDER,
213
+ 'size_units' => ['px'],
214
+ 'selectors' => [
215
+ '{{WRAPPER}} .ha-testimonial__content' => 'margin-bottom: {{SIZE}}{{UNIT}};',
216
+ ],
217
+ ]
218
+ );
219
+
220
+ $this->add_control(
221
+ 'testimonial_color',
222
+ [
223
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
224
+ 'type' => Controls_Manager::COLOR,
225
+ 'selectors' => [
226
+ '{{WRAPPER}} .ha-testimonial__content' => 'color: {{VALUE}}',
227
+ ],
228
+ ]
229
+ );
230
+
231
+ $this->add_control(
232
+ 'testimonial_bg_color',
233
+ [
234
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
235
+ 'type' => Controls_Manager::COLOR,
236
+ 'selectors' => [
237
+ '{{WRAPPER}} .ha-testimonial__content' => 'background-color: {{VALUE}};',
238
+ '{{WRAPPER}} .ha-testimonial__content:after' => 'color: {{VALUE}};',
239
+ ],
240
+ ]
241
+ );
242
+
243
+ $this->add_group_control(
244
+ Group_Control_Typography::get_type(),
245
+ [
246
+ 'name' => 'testimonial_typography',
247
+ 'label' => __( 'Typography', 'happy-elementor-addons' ),
248
+ 'selector' => '{{WRAPPER}} .ha-testimonial__content',
249
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3,
250
+ ]
251
+ );
252
+
253
+ $this->add_responsive_control(
254
+ 'testimonial_border_radius',
255
+ [
256
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
257
+ 'type' => Controls_Manager::DIMENSIONS,
258
+ 'size_units' => [ 'px', '%' ],
259
+ 'selectors' => [
260
+ '{{WRAPPER}} .ha-testimonial__content' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
261
+ ],
262
+ ]
263
+ );
264
+
265
+ $this->add_group_control(
266
+ Group_Control_Box_Shadow::get_type(),
267
+ [
268
+ 'name' => 'testimonial_box_shadow',
269
+ 'selector' => '{{WRAPPER}} .ha-testimonial__content',
270
+ ]
271
+ );
272
+
273
+ $this->end_controls_section();
274
+
275
+ $this->start_controls_section(
276
+ '_section_style_image',
277
+ [
278
+ 'label' => __( 'Image', 'happy-elementor-addons' ),
279
+ 'tab' => Controls_Manager::TAB_STYLE,
280
+ ]
281
+ );
282
+
283
+ $this->add_responsive_control(
284
+ 'image_width',
285
+ [
286
+ 'label' => __( 'Width', 'happy-elementor-addons' ),
287
+ 'type' => Controls_Manager::SLIDER,
288
+ 'size_units' => [ 'px' ],
289
+ 'range' => [
290
+ 'px' => [
291
+ 'min' => 65,
292
+ 'max' => 200,
293
+ ],
294
+ ],
295
+ 'selectors' => [
296
+ '{{WRAPPER}} .ha-testimonial__reviewer-thumb' => '-webkit-flex: 0 0 {{SIZE}}{{UNIT}}; -ms-flex: 0 0 {{SIZE}}{{UNIT}}; flex: 0 0 {{SIZE}}{{UNIT}}; max-width: {{SIZE}}{{UNIT}};',
297
+
298
+ '{{WRAPPER}}.ha-testimonial--left .ha-testimonial__reviewer-meta' => '-webkit-flex: 0 0 calc(100% - {{SIZE}}{{UNIT}}); -ms-flex: 0 0 calc(100% - {{SIZE}}{{UNIT}}); flex: 0 0 calc(100% - {{SIZE}}{{UNIT}}); max-width: calc(100% - {{SIZE}}{{UNIT}});',
299
+
300
+ '{{WRAPPER}}.ha-testimonial--right .ha-testimonial__reviewer-meta' => '-webkit-flex: 0 0 calc(100% - {{SIZE}}{{UNIT}}); -ms-flex: 0 0 calc(100% - {{SIZE}}{{UNIT}}); flex: 0 0 calc(100% - {{SIZE}}{{UNIT}}); max-width: calc(100% - {{SIZE}}{{UNIT}});',
301
+
302
+ '{{WRAPPER}}.ha-testimonial--left .ha-testimonial__content:after' => 'left: calc(({{SIZE}}{{UNIT}} / 2) - 18px);',
303
+
304
+ '{{WRAPPER}}.ha-testimonial--right .ha-testimonial__content:after' => 'right: calc(({{SIZE}}{{UNIT}} / 2) - 18px);',
305
+ ],
306
+ ]
307
+ );
308
+
309
+ $this->add_responsive_control(
310
+ 'image_height',
311
+ [
312
+ 'label' => __( 'Height', 'happy-elementor-addons' ),
313
+ 'type' => Controls_Manager::SLIDER,
314
  'size_units' => [ 'px' ],
315
+ 'range' => [
316
+ 'px' => [
317
+ 'min' => 20,
318
+ 'max' => 200,
319
+ ],
320
+ ],
321
+ 'selectors' => [
322
+ '{{WRAPPER}} .ha-testimonial__reviewer-thumb' => 'height: {{SIZE}}{{UNIT}};',
323
+ ],
324
+ ]
325
+ );
326
+
327
+ $this->add_responsive_control(
328
+ 'image_spacing',
329
+ [
330
+ 'label' => __( 'Spacing', 'happy-elementor-addons' ),
331
+ 'type' => Controls_Manager::SLIDER,
332
+ 'size_units' => ['px'],
333
+ 'selectors' => [
334
+ '{{WRAPPER}}.ha-testimonial--left .ha-testimonial__reviewer-meta' => 'padding-left: {{SIZE}}{{UNIT}};',
335
+ '{{WRAPPER}}.ha-testimonial--right .ha-testimonial__reviewer-meta' => 'padding-right: {{SIZE}}{{UNIT}};',
336
+ '{{WRAPPER}}.ha-testimonial--center .ha-testimonial__reviewer-meta' => 'padding-top: {{SIZE}}{{UNIT}};',
337
  ],
338
+ ]
339
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
340
 
341
  $this->add_group_control(
342
+ Group_Control_Border::get_type(),
343
+ [
344
+ 'name' => 'image_border',
345
+ 'selector' => '{{WRAPPER}} .ha-testimonial__reviewer-thumb img',
346
+ ]
347
  );
348
 
349
  $this->add_responsive_control(
350
+ 'image_border_radius',
351
+ [
352
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
353
+ 'type' => Controls_Manager::DIMENSIONS,
354
+ 'size_units' => [ 'px', '%' ],
355
+ 'selectors' => [
356
+ '{{WRAPPER}} .ha-testimonial__reviewer-thumb img' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
357
+ ],
358
+ ]
359
+ );
360
+
361
+ $this->add_group_control(
362
+ Group_Control_Box_Shadow::get_type(),
363
+ [
364
+ 'name' => 'image_box_shadow',
365
+ 'selector' => '.ha-testimonial__reviewer-thumb img',
366
+ ]
367
+ );
368
 
369
  $this->end_controls_section();
370
 
371
  $this->start_controls_section(
372
+ '_section_style_reviewer',
373
+ [
374
+ 'label' => __( 'Reviewer', 'happy-elementor-addons' ),
375
+ 'tab' => Controls_Manager::TAB_STYLE,
376
+ ]
377
  );
378
 
379
+ $this->add_control(
380
+ '_heading_name',
381
+ [
382
+ 'label' => __( 'Name', 'happy-elementor-addons' ),
383
+ 'type' => Controls_Manager::HEADING,
384
+ ]
385
+ );
386
 
387
  $this->add_control(
388
+ 'name_color',
389
+ [
390
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
391
+ 'type' => Controls_Manager::COLOR,
392
+ 'selectors' => [
393
+ '{{WRAPPER}} .ha-testimonial__reviewer-name' => 'color: {{VALUE}};',
394
+ ],
395
+ ]
396
+ );
397
 
398
  $this->add_group_control(
399
+ Group_Control_Typography::get_type(),
400
+ [
401
+ 'name' => 'name_typography',
402
+ 'label' => __( 'Typography', 'happy-elementor-addons' ),
403
  'selector' => '{{WRAPPER}} .ha-testimonial__reviewer-name',
404
  'scheme' => Scheme_Typography::TYPOGRAPHY_2,
405
+ ]
406
  );
407
 
408
  $this->add_responsive_control(
409
+ 'name_spacing',
410
+ [
411
+ 'label' => __( 'Bottom Spacing', 'happy-elementor-addons' ),
412
+ 'type' => Controls_Manager::SLIDER,
413
  'size_units' => ['px'],
414
+ 'selectors' => [
415
+ '{{WRAPPER}} .ha-testimonial__reviewer-name' => 'margin-bottom: {{SIZE}}{{UNIT}};',
416
+ ],
417
+ ]
418
+ );
 
 
 
 
 
 
 
 
 
419
 
420
  $this->add_control(
421
+ '_heading_title',
422
+ [
423
+ 'label' => __( 'Title', 'happy-elementor-addons' ),
424
+ 'type' => Controls_Manager::HEADING,
425
+ 'separator' => 'before',
426
+ ]
427
+ );
428
+
429
+ $this->add_control(
430
+ 'title_color',
431
+ [
432
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
433
+ 'type' => Controls_Manager::COLOR,
434
+ 'selectors' => [
435
+ '{{WRAPPER}} .ha-testimonial__reviewer-title' => 'color: {{VALUE}}',
436
+ ],
437
+ ]
438
  );
439
 
440
  $this->add_group_control(
441
+ Group_Control_Typography::get_type(),
442
+ [
443
+ 'name' => 'title_typography',
444
+ 'label' => __( 'Typography', 'happy-elementor-addons' ),
445
  'selector' => '{{WRAPPER}} .ha-testimonial__reviewer-title',
446
  'scheme' => Scheme_Typography::TYPOGRAPHY_3,
447
+ ]
448
  );
449
 
450
  $this->end_controls_section();
467
  <?php echo ha_kses_intermediate( $settings['testimonial'] ); ?>
468
  </div>
469
  <div class="ha-testimonial__reviewer">
470
+ <?php if ( ! empty( $settings['image']['url'] ) ) : ?>
471
+ <div class="ha-testimonial__reviewer-thumb">
472
+ <?php echo Group_Control_Image_Size::get_attachment_image_html( $settings, 'thumbnail', 'image' ); ?>
473
+ </div>
474
+ <?php endif; ?>
475
 
476
  <div class="ha-testimonial__reviewer-meta">
477
  <div <?php $this->print_render_attribute_string( 'name' ); ?>><?php echo ha_kses_basic( $settings['name'] ); ?></div>
478
  <div <?php $this->print_render_attribute_string( 'title' ); ?>><?php echo ha_kses_basic( $settings['title'] ); ?></div>
479
  </div>
480
  </div>
481
+ <?php
482
  }
483
  }
wpml/carousel.php CHANGED
@@ -19,7 +19,11 @@ class WPML_Carousel extends \WPML_Elementor_Module_With_Items {
19
  * @return array
20
  */
21
  public function get_fields() {
22
- return ['title', 'subtitle'];
 
 
 
 
23
  }
24
 
25
  /**
@@ -33,6 +37,8 @@ class WPML_Carousel extends \WPML_Elementor_Module_With_Items {
33
  return __( 'Carousel: Title', 'happy-elementor-addons' );
34
  case 'subtitle':
35
  return __( 'Carousel: Subtitle', 'happy-elementor-addons' );
 
 
36
  default:
37
  return '';
38
  }
@@ -49,6 +55,8 @@ class WPML_Carousel extends \WPML_Elementor_Module_With_Items {
49
  return 'LINE';
50
  case 'subtitle':
51
  return 'AREA';
 
 
52
  default:
53
  return '';
54
  }
19
  * @return array
20
  */
21
  public function get_fields() {
22
+ return [
23
+ 'title',
24
+ 'subtitle',
25
+ 'link' => ['url']
26
+ ];
27
  }
28
 
29
  /**
37
  return __( 'Carousel: Title', 'happy-elementor-addons' );
38
  case 'subtitle':
39
  return __( 'Carousel: Subtitle', 'happy-elementor-addons' );
40
+ case 'url':
41
+ return __( 'Carousel: Link', 'happy-elementor-addons' );
42
  default:
43
  return '';
44
  }
55
  return 'LINE';
56
  case 'subtitle':
57
  return 'AREA';
58
+ case 'url':
59
+ return 'LINK';
60
  default:
61
  return '';
62
  }
wpml/logo-grid.php CHANGED
@@ -19,7 +19,10 @@ class WPML_Logo_Grid extends \WPML_Elementor_Module_With_Items {
19
  * @return array
20
  */
21
  public function get_fields() {
22
- return ['name'];
 
 
 
23
  }
24
 
25
  /**
@@ -31,6 +34,8 @@ class WPML_Logo_Grid extends \WPML_Elementor_Module_With_Items {
31
  switch ( $field ) {
32
  case 'name':
33
  return __( 'Logo Grid: Brand Name', 'happy-elementor-addons' );
 
 
34
  default:
35
  return '';
36
  }
@@ -45,6 +50,8 @@ class WPML_Logo_Grid extends \WPML_Elementor_Module_With_Items {
45
  switch ( $field ) {
46
  case 'name':
47
  return 'LINE';
 
 
48
  default:
49
  return '';
50
  }
19
  * @return array
20
  */
21
  public function get_fields() {
22
+ return [
23
+ 'name',
24
+ 'link' => ['url']
25
+ ];
26
  }
27
 
28
  /**
34
  switch ( $field ) {
35
  case 'name':
36
  return __( 'Logo Grid: Brand Name', 'happy-elementor-addons' );
37
+ case 'url':
38
+ return __( 'Logo Grid: Link', 'happy-elementor-addons' );
39
  default:
40
  return '';
41
  }
50
  switch ( $field ) {
51
  case 'name':
52
  return 'LINE';
53
+ case 'url':
54
+ return 'LINK';
55
  default:
56
  return '';
57
  }
wpml/slider.php CHANGED
@@ -19,7 +19,11 @@ class WPML_Slider extends \WPML_Elementor_Module_With_Items {
19
  * @return array
20
  */
21
  public function get_fields() {
22
- return ['title', 'subtitle'];
 
 
 
 
23
  }
24
 
25
  /**
@@ -33,6 +37,8 @@ class WPML_Slider extends \WPML_Elementor_Module_With_Items {
33
  return __( 'Slider: Title', 'happy-elementor-addons' );
34
  case 'subtitle':
35
  return __( 'Slider: Subtitle', 'happy-elementor-addons' );
 
 
36
  default:
37
  return '';
38
  }
@@ -49,6 +55,8 @@ class WPML_Slider extends \WPML_Elementor_Module_With_Items {
49
  return 'LINE';
50
  case 'subtitle':
51
  return 'AREA';
 
 
52
  default:
53
  return '';
54
  }
19
  * @return array
20
  */
21
  public function get_fields() {
22
+ return [
23
+ 'title',
24
+ 'subtitle',
25
+ 'link' => ['url']
26
+ ];
27
  }
28
 
29
  /**
37
  return __( 'Slider: Title', 'happy-elementor-addons' );
38
  case 'subtitle':
39
  return __( 'Slider: Subtitle', 'happy-elementor-addons' );
40
+ case 'url':
41
+ return __( 'Slider: Link', 'happy-elementor-addons' );
42
  default:
43
  return '';
44
  }
55
  return 'LINE';
56
  case 'subtitle':
57
  return 'AREA';
58
+ case 'url':
59
+ return 'LINK';
60
  default:
61
  return '';
62
  }
wpml/social-icons.php CHANGED
@@ -19,7 +19,10 @@ class WPML_Social_Icons extends \WPML_Elementor_Module_With_Items {
19
  * @return array
20
  */
21
  public function get_fields() {
22
- return ['ha_social_icon_title'];
 
 
 
23
  }
24
 
25
  /**
@@ -31,6 +34,8 @@ class WPML_Social_Icons extends \WPML_Elementor_Module_With_Items {
31
  switch ( $field ) {
32
  case 'ha_social_icon_title':
33
  return __( 'Social Icons: Title', 'happy-elementor-addons' );
 
 
34
  default:
35
  return '';
36
  }
@@ -45,6 +50,8 @@ class WPML_Social_Icons extends \WPML_Elementor_Module_With_Items {
45
  switch ( $field ) {
46
  case 'ha_social_icon_title':
47
  return 'LINE';
 
 
48
  default:
49
  return '';
50
  }
19
  * @return array
20
  */
21
  public function get_fields() {
22
+ return [
23
+ 'ha_social_icon_title',
24
+ 'ha_social_link' => ['url']
25
+ ];
26
  }
27
 
28
  /**
34
  switch ( $field ) {
35
  case 'ha_social_icon_title':
36
  return __( 'Social Icons: Title', 'happy-elementor-addons' );
37
+ case 'url':
38
+ return __( 'Social Icons: Link', 'happy-elementor-addons' );
39
  default:
40
  return '';
41
  }
50
  switch ( $field ) {
51
  case 'ha_social_icon_title':
52
  return 'LINE';
53
+ case 'url':
54
+ return 'LINK';
55
  default:
56
  return '';
57
  }